Scope

This page targets:

  • AgileX Piper robotic arm
  • The official USB-to-CAN module shipped for the arm
  • piper_ros single-arm control workflows

Install Dependencies

sudo apt update
sudo apt install -y can-utils ethtool
sudo apt install -y iproute2

Find the CAN Module

cd ~/venom_ws/src/venom_vnv/driver/piper_ros
bash find_all_can_port.sh

Typical output:

Both ethtool and can-utils are installed.
Interface can0 is connected to USB port 3-1.4:1.0

Record the USB port ID. It is the safest way to distinguish the arm adapter from chassis CAN adapters on the same machine.

To avoid conflicts with chassis CAN, the project recommends naming the arm interface can_piper:

cd ~/venom_ws/src/venom_vnv/driver/piper_ros
bash can_activate.sh can_piper 1000000

If you explicitly want the default interface name, use:

bash can_activate.sh can0 1000000

Arm and Chassis on the Same Machine

Recommended naming:

  • Chassis: can0
  • Piper arm: can_piper

If multiple CAN devices are present, use the USB port ID to activate the correct one:

cd ~/venom_ws/src/venom_vnv/driver/piper_ros
bash can_activate.sh can_piper 1000000 "3-1.4:1.0"

Multiple Arm CAN Modules

The repository also includes:

can_muti_activate.sh

Edit the USB_PORTS mapping in that script, for example:

USB_PORTS["3-1.1:1.0"]="can_arm1:1000000"
USB_PORTS["3-1.2:1.0"]="can_arm2:1000000"

Then run:

bash can_muti_activate.sh

Check the Interface

ifconfig -a | grep can
ip -details link show can_piper

Basic Debugging

candump can_piper

If the arm is powered and the link is healthy, you should normally see CAN traffic.

Launch the Arm Node

cd ~/venom_ws
source install/setup.bash
ros2 launch piper start_single_piper.launch.py can_port:=can_piper

With RViz:

cd ~/venom_ws
source install/setup.bash
ros2 launch piper start_single_piper_rviz.launch.py can_port:=can_piper
© 2026 Venom Algorithm GitHub