Skip to main content

Documentation Index

Fetch the complete documentation index at: https://motorbridge.seeedstudio.com/llms.txt

Use this file to discover all available pages before exploring further.

Source: docs/en/cli.md

CLI Guide (motor_cli)

Channel Compatibility (PCAN + slcan + Damiao Serial Bridge)

  • Linux SocketCAN uses interface names directly: can0, can1, slcan0.
  • For USB-serial CAN adapters, bring up slcan0 first: sudo slcand -o -c -s8 /dev/ttyUSB0 slcan0 && sudo ip link set slcan0 up.
  • Damiao-only CAN-FD transport is available in CLI (--transport socketcanfd), independent from classic socketcan.
  • Damiao-only serial bridge transport is also available in CLI (--transport dm-serial --serial-port /dev/ttyACM0 --serial-baud 921600).
  • On Linux SocketCAN, do not append bitrate in --channel (for example can0@1000000 is invalid).
  • On Windows (PCAN backend), can0/can1 map to PCAN_USBBUS1/2; optional @bitrate suffix is supported.
Transport legend:
  • [STD-CAN] => --transport auto|socketcan
  • [CAN-FD] => --transport socketcanfd
  • [DM-SERIAL] => --transport dm-serial
[CAN-FD] note: integrated transport path, but motor validation matrix is not declared yet.

Debugging Guide

  • For deterministic Linux slcan + Windows pcan troubleshooting, see can_debugging.md.

Build

cargo build -p motor_cli --release

Common

  • --vendor damiao|robstride|hightorque|myactuator|hexfellow|all
  • --transport auto|socketcan|socketcanfd|dm-serial (dm-serial is Damiao-only; socketcanfd required for Hexfellow)
  • --channel can0
  • --serial-port /dev/ttyACM0 --serial-baud 921600 (used with --transport dm-serial)
  • --motor-id <id>
  • --loop <n> --dt-ms <ms>

Damiao

cargo run -p motor_cli --release -- \
  --vendor damiao --channel can0 --model 4340P --motor-id 0x01 --feedback-id 0x11 \
  --mode mit --pos 0 --vel 0 --kp 20 --kd 1 --tau 0 --loop 50 --dt-ms 20
[STD-CAN]
# Damiao over serial bridge
cargo run -p motor_cli --release -- \
  --vendor damiao --transport dm-serial --serial-port /dev/ttyACM1 --serial-baud 921600 \
  --model 4310 --motor-id 0x04 --feedback-id 0x14 \
  --mode mit --verify-model 0 --ensure-mode 0 \
  --pos 0.5 --vel 0 --kp 20 --kd 1 --tau 0 --loop 80 --dt-ms 20
[DM-SERIAL]
# Damiao over dedicated CAN-FD transport
cargo run -p motor_cli --release -- \
  --vendor damiao --transport socketcanfd --channel can0 \
  --model 4310 --motor-id 0x04 --feedback-id 0x14 \
  --mode mit --verify-model 0 --ensure-mode 0 \
  --pos 0.5 --vel 0 --kp 20 --kd 1 --tau 0 --loop 80 --dt-ms 20
[CAN-FD]

Hexfellow

# Hexfellow scan (CAN-FD path)
cargo run -p motor_cli --release -- \
  --vendor hexfellow --transport socketcanfd --channel can0 \
  --mode scan --start-id 1 --end-id 32
[CAN-FD]
# Hexfellow status query
cargo run -p motor_cli --release -- \
  --vendor hexfellow --transport socketcanfd --channel can0 \
  --model hexfellow --motor-id 1 --feedback-id 0 \
  --mode status
[CAN-FD]

RobStride

RobStride supports rs-00 through rs-06. Always pass the physical motor model: control commands share the same CLI shape, but read-param / write-param use section 4 runtime manual parameter tables.
cargo run -p motor_cli --release -- \
  --vendor robstride --channel can0 --model rs-06 --motor-id 127 --mode ping
cargo run -p motor_cli --release -- \
  --vendor robstride --channel can0 --model rs-06 --motor-id 127 \
  --mode mit --ensure-strict 1 --pos 0.5 --vel 0 --kp 20.0 --kd 0.5 --tau 0 --loop 100 --dt-ms 20
cargo run -p motor_cli --release -- \
  --vendor robstride --channel can0 --model rs-06 --motor-id 127 \
  --mode pos-vel --pos 1.5 --vlim 1.0 --loc-kp 5.0 --loop 1 --dt-ms 20

HighTorque (native ht_can v1.5.5)

Supported modes:
  • scan
  • read / ping
  • mit (unified interface)
  • pos / vel / tqe
  • pos-vel-tqe
  • volt / cur
  • stop / brake / rezero / conf-write / timed-read
Unit interface (aligned with other vendors):
  • --pos in rad
  • --vel in rad/s
  • --tau in Nm
  • --kp, --kd are accepted for unified MIT signature, ignored by ht_can protocol
Raw interface (debug):
  • --raw-pos, --raw-vel, --raw-tqe
Examples:
# Scan IDs
cargo run -p motor_cli --release -- \
  --vendor hightorque --channel can0 --mode scan --start-id 1 --end-id 32
# Read status (prints pos_rad / vel_rad_s)
cargo run -p motor_cli --release -- \
  --vendor hightorque --channel can0 --motor-id 1 --mode read
# Move to +180 deg (pi rad), with velocity/torque limits
cargo run -p motor_cli --release -- \
  --vendor hightorque --channel can0 --motor-id 1 \
  --mode mit --pos 3.1415926 --vel 0.8 --tau 0.8
# Stop
cargo run -p motor_cli --release -- \
  --vendor hightorque --channel can0 --motor-id 1 --mode stop

MyActuator

cargo run -p motor_cli --release -- \
  --vendor myactuator --channel can0 --model X8 --motor-id 1 --feedback-id 0x241 \
  --mode status --loop 20 --dt-ms 50
# Set current position as zero (power-cycle actuator to apply persistently)
cargo run -p motor_cli --release -- \
  --vendor myactuator --channel can0 --model X8 --motor-id 1 --feedback-id 0x241 \
  --mode set-zero --loop 1

Unified scan

cargo run -p motor_cli --release -- \
  --vendor all --channel can0 --mode scan --start-id 1 --end-id 255
RobStride focused scan:
cargo run -p motor_cli --release -- \
  scan --vendor robstride --channel can0 --start-id 1 --end-id 127 \
  --feedback-ids 0xFD,0xFF,0xFE,0x00,0xAA
For RobStride, probe / device_id is the motor ID. feedback_id / host_id (for example 0xFD) is the host-side ID, not the motor ID. RobStride motor_id / device_id values are validated as 1..255; feedback_id / host_id values are validated as 0..255. Use the exact RS00-RS06 model for RobStride limits/logging. Parameter read/write uses the common section 4 runtime table.