This repository provides the Leader Arm (Teleoperator) integration for the reBot Arm B601 with the LeRobot framework. It enables the B601 arm to be used for teleoperation - reading human operator movements to control follower robots.
- Robot: Seeed reBot Arm B601 Series (6-DOF + Gripper)
- Motors: Damiao (DM4310 + DM4340), RobStride
- Communication: CAN Bus (via USB-CAN adapter, including Damiao's v3 USB2CAN adapter)
-
Install LeRobot: Follow the instructions in the LeRobot repository to install the base library. A very quick summary would be like the following.
conda create -y -n lerobot python=3.12 conda activate lerobot conda install ffmpeg -c conda-forge git clone https://github.com/huggingface/lerobot.git cd lerobot pip install -e .
-
Install motorbridge Python Package
# goto https://github.com/tianrking/motorbridge/releases # find the proper python wheel for your platform # e.g. ubuntu x86_64, python3.12, we should download https://github.com/tianrking/motorbridge/releases/download/v0.1.5/motorbridge-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl # with your conda env activated pip install motorbridge-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl # TODO: install from pypi
You could also install the
motor-clitool,a very useful motor tool.wget https://github.com/tianrking/motorbridge/releases/download/v0.1.5/motor-cli-v0.1.5-linux-x86_64.tar.gz tar zxvf motor-cli-v0.1.5-linux-x86_64.tar.gz sudo cp motor-cli-v0.1.5-linux-x86_64/bin/motor_cli /usr/local/bin/ sudo chmod a+x /usr/local/bin/motor_cli ## new version may be released, you should check the lates version -
Install this package: Clone this repository and install in editable mode:
git clone https://github.com/Seeed-Projects/lerobot-teleoperator-seeed-b601.git cd lerobot-teleoperator-seeed-b601 pip install -e .
Or install from PyPI:
pip install lerobot-teleoperator-seeed-b601
Upon installation, two teleoperator variants are registered:
seeed_b601_dm_leader: B601 Leader using Damiao motors (6-DOF + Gripper) - Fully Implementedseeed_b601_rs_leader: B601 Leader using RobStride motors (6-DOF + Gripper) - Placeholder
# test if the installation is good lerobot-teleoperate --help | grep SeeedB601 # if you see the following you're good SeeedB601DMLeaderConfig ['teleop']: SeeedB601RSLeaderConfig ['teleop']:
Default motor mapping for the B601 leader:
-
shoulder_pan: master ID0x01, feedback ID0x11, motor modeldm4340p -
shoulder_lift: master ID0x02, feedback ID0x12, motor modeldm4340p -
elbow_flex: master ID0x03, feedback ID0x13, motor modeldm4340p -
wrist_flex: master ID0x04, feedback ID0x14, motor modeldm4310 -
wrist_yaw: master ID0x05, feedback ID0x15, motor modeldm4310 -
wrist_roll: master ID0x06, feedback ID0x16, motor modeldm4310 -
gripper: master ID0x07, feedback ID0x17, motor modeldm4310 -
CAN adapter types:
socketcan: for SocketCAN-compatible adapters such ascan0damiao: for Damiao serial bridge adapters such as/dev/ttyACM0robstride: registered in config, but the dedicated adapter path is not yet supported by the currentmotorbridgePython SDK integration
Ensure your motor names, IDs, wiring, and motor models match this configuration.
TODO: Refer to the wiki page for the guide to configure the motors.
TODO: A script that utilize the motorbridge to configure the deep parameters of the motor.
lerobot-teleoperate \
--robot.id=follower1 \
--robot.type=seeed_b601_dm_follower \
--robot.port=/dev/ttyACM4 \
--robot.can_adapter=damiao \
--teleop.type=seeed_b601_dm_leader \
--teleop.id=leader1 \
--teleop.port=/dev/ttyACM5 \
--teleop.can_adapter=damiaoTeleoperate with cameras,
lerobot-teleoperate \
--robot.type=seeed_b601_dm_follower \
--robot.port=/dev/ttyACM4 \
--robot.can_adapter=damiao \
--robot.id=my_awesome_follower_arm \
--robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}, side: {type: intelrealsense, serial_number_or_name: 233522074606, width: 640, height: 480, fps: 30}}" \
--teleop.type=seeed_b601_dm_leader \
--teleop.port=/dev/ttyACM5 \
--teleop.id=my_awesome_leader_arm \
--robot.can_adapter=damiao \
--display_data=trueFore more lerobot operations, please refer to the lerobot official documentation: