Step 4: Motor Configuration
Prerequisites: Before proceeding, ensure you have:
- ✅ Motor IDs configured (Step 1)
- ✅ CAN interface configured (Step 2)
- ✅ Basic communication tested (Step 3)
Overview
We now need to complete the motor setup process. This involves three key tasks:
Step 1: Set Motor Baudrate
Motor parameters has a 10000 time write limits, it should not be run frequently in scripts.
Before changing the baudrate, make sure the CAN interface is configured to match the motor's current baudrate. See Setup CAN Interface for details.
For detailed usage, see CAN CLI Reference change_baud.
# Set temporarily
openarm-can-cli -i can0 change_baud -b 5000000 -c 1
# Save permanently
openarm-can-cli -i can0 change_baud -b 5000000 -c 1 --save
Step 2: Zero Position Calibration
Physically position the arms to roughly match the zero position shown below before running calibration. For grippers, the closed position is used as zero by default.

When setting up in a Leader-Follower configuration, please run the zero position calibration for the Leader and the Follower separately, while they are in their independent states.
Safety First! The robot will move automatically when calibration starts. Wear safety gear, clear the workspace, and be ready to emergency stop.
The zero position calibration runs one arm at a time.
Run the zero position calibration (this defaults to can0, right arm):
# v2.0 (default)
openarm-can-zero-position-calibration
# v1.0
openarm-can-zero-position-calibration --robot-version v1
For specific arms, run:
# Leader-side Left (v2.0)
openarm-can-zero-position-calibration --canport can1 --arm-side left_arm
# Leader-side Left (v1.0)
openarm-can-zero-position-calibration --canport can1 --arm-side left_arm --robot-version v1
# Follower-side Right
openarm-can-zero-position-calibration --canport can2 --arm-side right_arm
# Follower-side Left
openarm-can-zero-position-calibration --canport can3 --arm-side left_arm
Step 3: Verify Motor Communication
Run the monitor command to check motor status. Replace 1,2,3... with your motor IDs.
# Monitor all arm motors
openarm-can-cli -i can0 monitor
# Monitor specific motors
openarm-can-cli -i can0 monitor --id 1,2,3
The output should display the motor's position, velocity, torque, and temperature in real-time.
For detailed usage, see CAN CLI Reference monitor.
It is important to get the motor communication working before running the demo.
Verification steps:
- Check baudrate: Verify the displayed baudrate matches what you configured earlier
- Test permanent settings: If you used
--flash, power cycle the motor and run the check again to confirm the settings persisted - Troubleshoot: If the baudrate doesn't match, switch your CAN interface to 2.0 and re-run the baudrate change script
It is important to get the openarm-can-motor-check working before running the demo.
Troubleshooting
- Check CAN interface is UP
- Verify motor is physically connected and powered, set with the correct ID
- Verify can connection is stable (important!)
- Use
candumpto monitor the traffic - Check CAN interface baudrate matches motor's current baudrate
- Verify send/receive CAN IDs are correct. Common pairs: 1→17, 2→18, 3→19, etc.