SmolVLA 高反光与透明物体抓取复现教程:方案总览与核心改造 · 第 4 阶段
基于双 奥比中光 相机、增强深度、B601-DM 主从臂和 SmolVLA,复现高反光桌面上透明瓶与香蕉模型的自主整理链路。
01 / DOCUMENTATION 内容概述
系列教程第 4/7 阶段:完成主从臂校准、重力补偿遥操和夹爪映射,并建立电机失能、掉线与 episode 故障恢复机制。
02 / DOCUMENTATION 7.1 MotorBridge 不是can0
最初使用 SocketCAN 扫描时,can0 即使处于 ERROR-ACTIVE,也不代表 MotorBridge 后面的 7 个 DM 电机能够通过该接口直接响应。若机械臂使用 Seeed MotorBridge USB 串口,应该配置:
transport = motorbridgeport = /dev/ttyACM0 或 /dev/ttyACM1baudrate = 921600如果握手提示所有电机都不响应,优先检查端口、24 V、电源、急停、MotorBridge 和线束,而不是继续扩大 SocketCAN ID 扫描范围。
03 / DOCUMENTATION 7.2 校准主臂和从臂
将两条机械臂放到尽可能一致的安全零位:
lerobot-calibrate --robot.type=rebot_b601_follower --robot.port=/dev/ttyACM0 --robot.transport=motorbridge --robot.id=b601_follower
lerobot-calibrate --teleop.type=rebot_b601_leader --teleop.port=/dev/ttyACM1 --teleop.transport=motorbridge --teleop.id=b601_leader如果遥操刚开始就频繁出现相对目标限幅,先比较两条机械臂的零位、关节方向和初始姿态。不要第一反应就把 max_relative_target 调得很大。
04 / DOCUMENTATION 7.3 重力补偿必须逐级测试
第一步只计算,不使能力矩:
python examples/rebot_b601_smolvla_record/debug_leader_gravity_comp.py --port /dev/ttyACM1 --id b601_leader --no-calibrate --dry-run --duration-s 5第二步只开一个承重关节,并从小倍率开始。确认方向正确后,才运行整臂参数:
python examples/rebot_b601_smolvla_record/debug_leader_gravity_comp.py --port /dev/ttyACM1 --id b601_leader --no-calibrate --enabled-joints joint_1,joint_2,joint_3,joint_4,joint_5,joint_6 --torque-scale 0.95 --torque-limit 8.0 --kp 1.9 --kd 0.75 --hz 100如果抬起后缓慢下坠,可按以下顺序调试:
-
先确认重力方向和关节角零点正确。
-
小幅提高
torque_scale,不要越过已验证范围。 -
kp用于减小姿态漂移,过高会变得难拖。 -
kd用于抑制晃动,过高会有明显黏滞感。 -
torque_limit是安全上限,不是越大越有力越好。
05 / DOCUMENTATION 7.4 先不接相机做主从臂遥操
lerobot-teleoperate --robot.type=rebot_b601_follower --robot.port=/dev/ttyACM0 --robot.transport=motorbridge --robot.id=b601_follower --teleop.type=rebot_b601_leader --teleop.port=/dev/ttyACM1 --teleop.transport=motorbridge --teleop.id=b601_leader --teleop.manual_control_mode=gravity_comp --fps=30 --teleop_time_s=60当前默认参数已经包含:
-
主臂关节重力补偿
0.95 / 8.0 / 1.9 / 0.75。 -
主臂夹爪张开偏置
0.09 Nm,总上限0.15 Nm。 -
主臂夹爪
kp=0、kd=0,避免位置弹簧与人手对抗。 -
主臂端点
5 → -310映射到从臂端点10 → -320。 -
从臂夹爪物理范围
-330 → 10。
06 / DOCUMENTATION 7.5 夹爪映射不对怎么办?
先直接测试从臂,不经过主臂映射:
python examples/rebot_b601_smolvla_record/debug_follower_gripper_command.py --port /dev/ttyACM0 --target -320 --min-pos -330 --max-pos 10再测试闭合和软物体接触:
python examples/rebot_b601_smolvla_record/debug_follower_gripper_command.py --port /dev/ttyACM0 --target 10 --duration-s 6 --control-mode torque_limited_close --close-torque 1.0 --hold-torque 0.30如果直接命令能到达全行程,而遥操不能,问题是映射或相对限幅;如果直接命令也到不了,检查机械限位、方向、线束、增益和电机状态。
07 / DOCUMENTATION 为什么从臂会突然失能坠落?⚠️

这是整个项目最值得认真记录的一段。
08 / DOCUMENTATION 8.1 不要把所有失能都叫“奇异点”
主从臂姿态差异不大时,从臂仍可能失能。后来通过我的调试日志证明,问题可能来自完全不同的层面:
-
MotorBridge 命令流被相机、写盘或视频编码阻塞。
-
从臂 24 V 电源压降、插座接触或电源限流。
-
MotorBridge、急停链路或固件 watchdog。
-
运动到某个区域时,数据线被夹住、急弯或拉扯。
-
夹爪长时间高刚度顶住物体。
-
单个驱动器保护,或多个驱动器共同变为
DISABLED。
软件状态 0x0 只表示驱动器现在已经 DISABLED,并不能完整保留之前究竟是欠压、通信丢失还是保护动作。要用时间相关日志判断,而不是只看最后一行。
09 / DOCUMENTATION 8.2 独立 500 Hz 命令流
当前代码持续输出每个 MotorBridge stream 的:
-
当前命令年龄。
-
有效发送频率。
-
完整 7 电机批次最大耗时。
-
历史最大 gap 及发生距今时间。
-
最近一次告警 gap 距今时间。
-
当前目标位置。
-
连续发送失败与反馈丢失计数。
使用下面的脚本验证“主线程故意暂停 5 秒时,从臂是否仍被高频线程稳稳保持”:
python examples/rebot_b601_smolvla_record/debug_follower_command_stream.py --port /dev/ttyACM0 --duration-s 20 --stall-s 5 --stream-hz 50010 / DOCUMENTATION 8.3 多个关节一起DISABLED
如果命令流当前年龄很小、发送频率接近 500 Hz,但多个驱动仍一起 DISABLED,优先排查:
-
从臂 24 V 电源和电流余量。
-
两台机械臂是否共用接触不良的插排。
-
急停链路和 MotorBridge 固件。
-
串口线、臂内 CAN/数据线和连接器。
-
运动范围内是否存在压线点。
一次现场排查中,把两台机械臂电源改接到独立供电后,程序维持时间明显变长;另一个高风险点是从臂运动时数据线会被结构压迫。这两个现象都不是最终定论,但足以把电源和线束提升为最高优先级检查项。
11 / DOCUMENTATION 8.4 只剩夹爪DISABLED
这通常更像局部机械负载、夹爪线束或驱动器保护。当前限力闭合控制正是为减少持续堵转而加入。不要通过无限提高力矩掩盖问题。
12 / DOCUMENTATION 8.5 episode 故障恢复
采集开始时记录从臂初始姿态。如果安全限幅被触发:
-
当前 episode 标记为重采。
-
从臂按每步
1.5°、20 Hz、低增益回到起始姿态。 -
等待操作者把主臂放回起始姿态附近。
-
清空未完成 episode buffer。
-
从同一个 episode 重新开始。
驱动器已经报告异常或通信已经不健康时,代码不会自动重新使能。这是有意的安全选择。
硬件
软件应用和在线服务
实现步骤
确认 MotorBridge 串口
使用稳定的 /dev/serial/by-id 识别主臂和从臂,不将串口桥误当板载 can0
校准主从臂
分别完成关节方向、零位、范围和主从映射检查
逐级测试重力补偿
从低增益与物理支撑开始,逐步验证主臂六关节重力前馈和阻尼
不接相机测试遥操
先隔离机械臂链路,确认 7 维目标、相对限幅和运动方向正确
验证夹爪映射
检查主臂夹爪坐标到从臂坐标的映射、力矩上限和接触保持
建立独立 500 Hz 命令流
让采集线程只更新目标,高频线程持续发送最近一次完整电机命令

处理关节失能与掉线
区分整臂 DISABLED、单夹爪 DISABLED、供电压降、watchdog 和线束问题
验证 episode 故障恢复
安全中止、保持当前姿态、从臂低速回起点,并等待主臂回到起始姿态
项目结果

完成 B601-DM 主从臂校准、重力补偿、无相机遥操和夹爪映射。通过独立高频命令流、状态检查和 episode 恢复降低相机处理或写盘阻塞导致的失能风险,并保留急停与物理支撑作为最终安全边界。