robot:
name: so101_single_arm_rgbd
type: so101
robot_type: so_101
models:
so101_act:
path: /home/xqw/Research/IB_Robot/models/502000/pretrained_model
policy_type: act
normalization:
action_scale: [0.0314, 0.0314, 0.0314, 0.0314, 0.0314, 0.0008]
action_offset: [0.0, 0.0, 0.0, 0.0, 0.0, 0.04]
joints:
arm:
- "1"
- "2"
- "3"
- "4"
- "5"
gripper:
- "6"
all: ["1", "2", "3", "4", "5", "6"]
moveit:
arm_group_name: arm
base_link: base
ee_link: gripper
shoulder_link: shoulder
default_control_mode: "teleop"
control_modes:
teleop:
description: "Human teleoperation mode (direct control)"
description_cn: "人工遥操作模式(直接控制)"
controllers:
- joint_state_broadcaster
- arm_position_controller
- gripper_position_controller
inference:
enabled: false
force_disable: true
executor:
type: topic
mode: teleop
queue_size: 100
control_frequency: 50.0
model_inference:
description: "High-frequency end-to-end control mode (ACT/pi0)"
description_cn: "高频端到端控制模式(ACT/pi0)"
controllers:
- joint_state_broadcaster
- arm_position_controller
- gripper_position_controller
inference:
enabled: true
model: so101_act
action_server: /inference/dispatch
executor:
type: topic
mode: model_inference
queue_size: 100
control_frequency: 50.0
moveit_planning:
description: "MoveIt trajectory planning mode (VoxPoser/VLM)"
description_cn: "MoveIt轨迹规划模式(VoxPoser/VLM)"
controllers:
- joint_state_broadcaster
- arm_trajectory_controller
- gripper_trajectory_controller
inference:
enabled: false
executor:
type: action
mode: moveit_planning
ros2_control:
hardware_plugin: so101_hardware/SO101SystemHardware
port: /dev/ttyACM2
calib_file: $(env HOME)/.calibrate/so101_follower_calibrate.json
joint_names: ["1", "2", "3", "4", "5", "6"]
reset_positions:
"1": 0.0
"2": 0.0
"3": 0.0
"4": 0.0
"5": 0.0
urdf_path: $(find robot_description)/urdf/lerobot/so101/so101.urdf.xacro
controllers_config: $(find so101_hardware)/config/so101_controllers.yaml
controllers:
- joint_state_broadcaster
- arm_controller
- gripper_controller
peripherals:
- type: camera
name: front
driver: realsense
serial_number: ""
width: 640
height: 480
fps: 30
pixel_format: bgr8
streams:
- color
- depth
- pointcloud
frame_id: camera_front_link
optical_frame_id: camera_front_optical_frame
transform:
parent_frame: base
x: 0.1
y: 0.0
z: 0.2
roll: 0.0
pitch: 0.0
yaw: 0.0
contract:
base_contract: $(find robot_config)/config/contracts/act_grab_pan.yaml
rate_hz: 20
max_duration_s: 90.0
observations:
- key: observation.images.front
topic: /camera/front_camera/color/image_raw
type: sensor_msgs/msg/Image
peripheral: front
image:
resize: [480, 640]
align:
strategy: hold
stamp: header
tol_ms: 1500
qos:
reliability: best_effort
history: keep_last
depth: 10
- key: observation.images.front.depth
topic: /camera/front_camera/aligned_depth_to_color/image_raw
type: sensor_msgs/msg/Image
peripheral: front
image:
resize: [480, 640]
align:
strategy: hold
stamp: header
tol_ms: 1500
qos:
reliability: best_effort
history: keep_last
depth: 10
- key: observation.pointcloud.front
topic: /camera/front_camera/depth/color/points
type: sensor_msgs/msg/PointCloud2
align:
strategy: hold
stamp: header
tol_ms: 1500
qos:
reliability: best_effort
history: keep_last
depth: 5
- key: observation.state
topic: /joint_states
type: sensor_msgs/msg/JointState
selector: { names: ["position.1", "position.2", "position.3", "position.4", "position.5", "position.6"] }
align:
strategy: hold
stamp: header
tol_ms: 1500
qos:
reliability: best_effort
history: keep_last
depth: 50
- key: observation.current
topic: /so101_follower/joint_currents
type: ibrobot_msgs/msg/JointCurrent
selector: { names: ["current.1", "current.2", "current.3", "current.4", "current.5", "current.6"] }
align:
strategy: hold
stamp: header
tol_ms: 1500
qos:
reliability: best_effort
history: keep_last
depth: 50
actions:
- key: action
selector:
names:
- "action.0"
- "action.1"
- "action.2"
- "action.3"
- "action.4"
publish:
topic: /arm_position_controller/commands
type: std_msgs/msg/Float64MultiArray
layout: flat
qos:
reliability: best_effort
history: keep_last
depth: 10
strategy:
mode: nearest
tolerance_ms: 500
safety_behavior: hold
- key: action
selector:
names:
- "action.5"
publish:
topic: /gripper_position_controller/commands
type: std_msgs/msg/Float64MultiArray
layout: flat
qos:
reliability: best_effort
history: keep_last
depth: 10
strategy:
mode: nearest
tolerance_ms: 500
safety_behavior: hold
teleoperation:
enabled: true
active_device: "so101_leader"
devices:
- name: "so101_leader"
type: "leader_arm"
port: "/dev/ttyACM3"
calib_file: "$(env HOME)/.calibrate/so101_leader_calibrate.json"
safety:
joint_limits:
"1": {"min": -2.0693, "max": 2.0709}
"2": {"min": -1.92, "max": 1.92}
"3": {"min": -1.6813, "max": 1.6828}
"4": {"min": -1.65806, "max": 1.65806}
"5": {"min": -2.9115, "max": 2.9115}
"6": {"min": 0.0, "max": 1.0}
recording:
bag_base_dir: "~/rosbag/episodes"
storage: mcap