This repository packages the ROSClaw and OpenClaw bringup for a physical SO-101 follower arm.
Backend/
ros2_ws/
src/
rosclaw_so101_bringup/ # ROSClaw + SO-101 combined bringup package
so101_follower_control/ # SO-101 follower control helpers and agent bridge
rosclaw-ros2/ # git submodule
so101_ros2/ # git submodule
so101_follower_controlcontains the physical SO-101 follower bringup, Cartesian goal helper, and agent bridge.rosclaw_so101_bringuplaunches ROSClaw together with the SO-101 follower stack.- The agent bridge exposes explicit gripper services at
/follower/open_gripperand/follower/close_gripper. - The ROSClaw bringup package ships the SO-101-specific discovery config.
git clone https://github.com/ROSClaw/rosclaw-example-so-101.git
cd rosclaw-example-so-101
git submodule update --init --recursiveVerified on ROS 2 Jazzy. Use the repo-owned build wrapper:
cd Backend/ros2_ws
./build.shbuild.sh bootstraps rosdep, stages local Jazzy-compatible replacements for
the upstream system_data_recorder and so101_teleop packages without
modifying the so101_ros2 submodule checkout, and then runs colcon build.
Optional perception dependency:
pip install 'google-genai>=1.0.0'source /opt/ros/jazzy/setup.bash
source Backend/ros2_ws/install/setup.bash
export GEMINI_API_KEY=your-api-key
ros2 launch rosclaw_so101_bringup bringup.launch.pyDefault SO-101 follower bringup values:
port:=/dev/ttyACM0id:=atr-followercalibration_dir:=$HOME/.cache/huggingface/lerobot/calibration/robots/so101_follower/atr-follower.jsoncameras:=trueperception:=true
The combined bringup now launches the SO-101 camera stack and the ROSClaw
perception node by default. It expects the USB wrist camera to publish on
/follower/cam_front/image_compressed and fails fast if the Gemini dependency,
GEMINI_API_KEY, or startup camera frames are missing.
/follower/agent_statepublishes a JSON summary of joint positions, tool pose, andgripper_open_fraction/follower/open_gripperand/follower/close_gripperare explicit one-shot Trigger services for agent use/follower/gripper_commandis a normalized open fraction topic where0.0 = closedand1.0 = open/follower/cartesian_goalacceptsgeometry_msgs/msg/PoseStamped/follower/arm_controller/follow_joint_trajectoryremains available for low-level arm motion goals
ros2 service call /follower/open_gripper std_srvs/srv/Trigger
ros2 service call /follower/close_gripper std_srvs/srv/Trigger