跳到主要内容
Projects/SmolVLA 高反光与透明物体抓取复现教程:方案总览与核心改造

SmolVLA 高反光与透明物体抓取复现教程:方案总览与核心改造

基于双 Orbbec 相机、增强深度、B601-DM 主从臂和 SmolVLA,复现高反光桌面上透明瓶与香蕉模型的自主整理链路。

Apache-2.0 / MIT

01 / DOCUMENTATION 内容概述

系列教程第 1/7 阶段:明确项目目标、数据流与核心改造,完成主从臂、双 Orbbec 相机、增强深度和安全线程的总体设计。

SmolVLA 高反光与透明物体抓取项目封面
SmolVLA 高反光与透明物体抓取项目封面

基于 Seeed 官方 LeRobot 仓库改造:在高反光实验环境中,使用 Orbbec Gemini 305 + Gemini 335L、轻量化蚂蚁灵波(LingBot-Depth)EnhancedDepthFilter、B601-DM 同型号主从臂遥操、云端 RTX 4090 训练与 Jetson Orin NX 边缘推理,挑战透明塑料可乐瓶与香蕉模型的自主整理任务。🔗GitHub

📌 项目阶段说明(截至 2026-08-17):本文已经实机完成相机与增强深度接入、设备许可校验、重力补偿遥操、RGB-D 数据采集与合并、RTX 4090 云端训练、checkpoint 回传,以及 Jetson Orin NX 上的在线推理和安全限幅验证。目前工作停留在模型部署参数微调阶段,尚未在高反光桌面上稳定、可重复地完成透明塑料可乐瓶抓取与归位。因此,本文是一份可运行、可诊断的阶段性工程复现记录,不是一份宣称透明物体抓取已经达到稳定成功率的最终结果报告。

想象一下这样的画面:灯光在桌面上形成明显高光,透明塑料可乐瓶的瓶壁几乎与背景融在一起,黄色香蕉模型和瓶子每次又都被随意摆放。机械臂需要先观察全局,再靠近、抓取,最后把两件物体送回各自的固定位置。它不依赖提前写死的坐标,也不是靠脆弱的颜色阈值脚本硬撑,而是从真人遥操演示中学习整套操作策略。✨

这正是本项目希望最终完成的事情,也是当前仍在继续攻克的最后一段路。

🔍 本项目没有刻意选择“好拍、好识别”的哑光测试台。 实验场景存在较强镜面反射,被操作物之一还是透明塑料可乐瓶。这两项条件会同时考验 RGB 语义识别、深度边缘稳定性和抓取策略泛化,也是本文引入增强深度链路的直接原因。

我们从 Seeed 官方 LeRobot 仓库 出发,让两台同型号的 reBot Arm B601-DM 分别担任主臂和从臂;给主臂加入重力补偿和夹爪微力辅助;给从臂加入 MotorBridge 500 Hz 独立命令流、故障保持、夹爪限力闭合和 episode 恢复;再将腕部 Gemini 305 的近景 RGB、全局 Gemini 335L 的 RGB,以及经过奥比中光 EnhancedDepthFilter 处理的深度可视化图一起交给 SmolVLA。RGB 提供透明瓶的语义与外观线索,增强深度提供更稳定的空间线索,两者互补,而不是让某一路传感器独自完成全部工作。

本文不仅给出“能跑”的命令,也会认真交代一路踩过的坑。很多机器人问题并不浪漫:一个错误的 /dev/video* 节点可以让彩色图变成绿色噪点,一次 H.264 编码尖峰可以让电机命令流断档,一根被关节压住的数据线甚至可能让从臂突然失能。好消息是,这些问题都能被拆开、记录、验证,再逐个解决。🔧

02 / DOCUMENTATION 项目要解决什么问题?🎯

目标任务是:

代码块
纯文本
Arrange the banana model and the transparent plastic cola bottle back to their assigned places on the desktop

也就是让机械臂学习一条可以泛化的桌面整理策略:

  1. 香蕉和透明塑料可乐瓶的起始位置、朝向可以变化。

  2. 两件物体最终对应的位置保持明确、稳定。

  3. 机械臂能够通过视觉判断物体位置,而不是记忆某一条固定轨迹。

  4. 在桌面高光、局部镜面反射和透明瓶深度不完整的情况下,策略仍能利用多路视觉完成操作。

  5. 训练、采集和推理使用同一套视觉分布,尤其是同一种深度滤波模型、阈值与可视化范围。

这比普通哑光物体抓取更难:透明瓶会让深度出现背景穿透、边缘缺失或跳变,高反光桌面又会带来局部孔洞与飞点。项目的关键问题因此不只是“能否接入深度相机”,而是“能否把同一套经过验证的增强深度处理稳定地贯穿采集、训练和推理”。

本项目的第一阶段采用模仿学习:操作者拖动 B601-DM 主臂,从臂同步执行动作,系统同时记录相机、关节状态与实际下发动作,最后用 SmolVLA 学习“看见什么、当前机械臂是什么状态、下一步该怎么动”。

03 / DOCUMENTATION 1.1 数据流总览

主从臂、双相机、云端训练与边缘推理数据流
主从臂、双相机、云端训练与边缘推理数据流

04 / DOCUMENTATION 这个项目改进了什么?🌟

这些改动不是简单地“多接一台相机、再加一个模型”。它们围绕同一个目标展开:让系统在透明物体、高反光背景和边缘设备算力有限的现实条件下,仍能稳定采集可学习的数据,并把完全一致的输入送到 SmolVLA 推理端。

05 / DOCUMENTATION 2.1 同型号 B601-DM 主从臂适配

官方示例更多围绕特定 leader 或基础 follower 插件展开。本项目将 B601-DM 同时适配成:

  • rebot_b601_leader:读取 6 个关节和夹爪,并运行重力补偿、阻抗或零力矩辅助。

  • rebot_b601_follower:接收 7 维位置目标,运行关节限位、相对目标限幅、状态检查和安全恢复。

  • rebot_motorbridge.py:按 Seeed DM 配置维护高频 MIT 命令流与完整反馈诊断。

主从臂都采用 DM 电机,默认通过 Seeed MotorBridge 串口设备 /dev/ttyACM* 通信,而不是把 MotorBridge 错当成板载 can0。

06 / DOCUMENTATION 2.2 主臂重力补偿遥操

B601-DM 主臂重力补偿遥操示意
B601-DM 主臂重力补偿遥操示意

单纯关闭主臂电机虽然轻,但机械臂会坠落;使用刚性位置控制又很难拖动。项目复用了 Seeed reBot-DevArm-Grasp 中的动力学模型,为主臂 6 个关节提供重力前馈,并保留轻微阻尼。

经过实机调试后采用的核心参数是:

代码块
纯文本
gravity_comp_torque_scale = 0.95gravity_comp_torque_limit = 8.0gravity_comp_kp           = 1.9gravity_comp_kd           = 0.75update_hz                 = 100

夹爪不施加“重力补偿”,而是使用独立的 force_assist:给张开方向一个很小的 0.09 Nm 偏置,软件上限为 0.15 Nm,帮助克服上电后的机械阻力,同时避免夹爪突然自行弹开。

主臂重力补偿实机演示

07 / DOCUMENTATION 2.3 双 Orbbec 相机不再“都当普通摄像头”

两台相机分工明确:

相机安装位置训练输入说明
Gemini 305机械臂腕部observation.images.wrist只取 RGB,提供近距离抓取视角
Gemini 335L桌面全局视角observation.images.top全局 RGB,观察物体与目标位置
Gemini 335L同上observation.images.top_depth经 EnhancedDepthFilter 处理后的三通道深度可视化,重点提供透明瓶边界、桌面和目标区域的空间线索
Gemini 335L同上observation.depths.top滤波后、未伪彩化的 uint16 毫米深度,保留孔洞和真实测量结果,供复核与后续研究

腕部和全局相机都通过 OrbbecSDK v2 的 C++ bridge 读取。这样做不是为了“显得高级”,而是因为 Orbbec RGB-D 相机会暴露多个 UVC 节点,其中一些是原始深度、红外或元数据流。把这些节点交给 OpenCV 当 BGR 图像读取,就会得到绿色密集噪点,而不是正常彩色画面。

08 / DOCUMENTATION 2.4 蚂蚁灵波轻量模型:为透明瓶与高反光场景补强深度线索

透明物体与高反光场景增强深度处理
透明物体与高反光场景增强深度处理

这是本项目最具辨识度的视觉改进。透明塑料可乐瓶会透射和折射部分光线,深度图中常见瓶壁缺失、背景深度“穿过”瓶身、轮廓跳变;高反光桌面则可能产生局部无效值、飞点和随观察角度变化的闪烁。直接把这样的原始深度彩色化后送进模型,既可能增加噪声,也可能让策略学到不稳定的伪特征。

需要先讲清楚一件事:任何深度滤波模型都不能凭空恢复传感器从未测到的全部透明表面。 本项目使用蚂蚁灵波轻量模型的目标,是在 Jetson 可承担的计算量下改善有效区域的连续性、抑制随机噪声并稳定物体和桌面边缘,再与两路 RGB 共同提供信息,而不是把透明物体检测完全押在深度图上。

本项目使用奥比中光 SDK 中的 EnhancedDepthFilter 与裁剪模型 model.sm4。它没有作为离线数据清洗脚本附加在采集之后,而是直接进入 OrbbecSDK v2 C++ bridge:

  1. Gemini 335L 同步输出 color + depth FrameSet。

  2. 深度先对齐到彩色图。

  3. SDK 创建 ob::EnhancedDepthFilter(device, model_path)。

  4. 调用官方 filter 处理整个 FrameSet。

  5. Python 只接收滤波后的深度;启用增强模式后若 filter 或许可失败,立即报错,不允许悄悄退回原始深度。

  6. 同一份滤波深度同时生成未伪彩化的 uint16 深度和三通道 top_depth。

原版 SmolVLA 使用视觉编码器处理三通道图像,因此当前方案让 top_depth 作为第三路视觉输入;滤波后的 uint16 深度继续归档,但由 SmolVLARawDepthFilterProcessor 在进入 GPU 前移除,避免把大尺寸整数深度误送进视觉模型。最终形成互补关系:

  • top RGB:识别透明瓶的瓶盖、标签、轮廓和目标区域等语义线索。

  • wrist RGB:在接近和抓取阶段观察局部边缘、夹爪与物体相对位置。

  • top_depth:提供经增强后的桌面几何、距离层次和可用瓶体边界线索。

  • uint16 depth:忠实归档增强后的测量值,用于质量检查和未来深度网络研究。

更重要的是,采集和推理均在设备侧运行同一套 C++ filter、同一个 model.sm4、相同置信度阈值和相同深度可视化范围。这样训练看到的“深度语言”与部署时完全一致,避免出现云端离线处理很漂亮、Jetson 实时输入却是另一种分布的情况。

EnhancedDepthFilter 深度增强效果一
EnhancedDepthFilter 深度增强效果二

09 / DOCUMENTATION 2.5 数据采集不再和电机保活“抢一条线程”

LeRobot RGB-D 数据采集与关节状态监控
LeRobot RGB-D 数据采集与关节状态监控

RGB-D 等帧、PNG 写盘、H.264 编码和数据集映射都可能卡住 Python 主循环。DM 电机如果长时间收不到命令,可能进入 watchdog 或保护状态。项目为主臂和从臂都增加了独立的 500 Hz MIT 命令刷新线程:上层采集循环只更新目标,高频线程持续重复最近一次完整的 7 电机命令。

同时增加:

  • 50 ms 命令间隔告警阈值。

  • 500 ms 硬故障阈值。

  • 连续 5 次发送失败锁定故障。

  • 电机状态从 ENABLED 变为 DISABLED 时立即中止。

  • 连续反馈丢失保护。

  • 程序异常后最多 15 秒保持当前姿态,给操作者托住机械臂或按急停。

  • episode 起始姿态记录、安全中止、从臂低速回起点和等待主臂回起点。

10 / DOCUMENTATION 2.6 夹爪控制从“硬顶位置”升级为“限力闭合”

早期方案让从臂夹爪一直用较高 kp 追逐完全闭合位置。夹到物体后仍存在巨大位置误差,电机会持续加载,严重时可能单独变为 DISABLED。

现在采用更接近 Seeed 抓取示例的控制方式:

  • 张开和空载移动仍使用位置控制。

  • 闭合时使用最大 1.0 Nm 的有界前馈力矩和阻尼。

  • 至少闭合移动 17° 后,才允许根据低速度连续样本判断接触。

  • 接触后切换到 kp=5、kd=1、0.30 Nm 的柔和保持。

  • 收到明确张开命令后解除接触保持。

  • 所有夹爪力矩受 1.5 Nm 软件上限约束。

此外,遥操时需要“主臂夹爪坐标 → 从臂夹爪坐标”映射;推理时模型已经输出从臂坐标,因此必须关闭二次映射。项目用 gripper_map_leader_to_follower 显式区分这两种场景。

硬件

软件应用和在线服务

实现步骤

01

明确任务与成果边界

确认目标是透明塑料瓶和香蕉模型的自主整理,记录当前“链路跑通”和“实机成功”之间的区别

系列教程封面与任务概览
系列教程封面与任务概览
02

核对总体数据流

检查主从臂、腕部 RGB、全局 RGB、增强深度、云端训练与 Jetson 推理的数据方向

系统数据流总览
系统数据流总览
03

适配同型号 B601-DM 主从臂

确认 leader 与 follower 驱动、MotorBridge 串口和 7 维目标接口

04

验证主臂重力补偿

逐步调试重力前馈、阻尼与夹爪微力辅助,保证主臂可拖动且不会坠落

主臂重力补偿结构
主臂重力补偿结构
主臂重力补偿实机演示
05

配置双 Orbbec 相机分工

Gemini 305 只取腕部 RGB,Gemini 335L 提供全局 RGB 与增强深度

06

验证增强深度链路

对透明瓶和高反光区域检查孔洞、飞点、边缘连续性与实时处理延迟

透明物体增强深度处理思路
透明物体增强深度处理思路
EnhancedDepthFilter 效果演示一
EnhancedDepthFilter 效果演示二
07

分离数据采集与电机保活

确认 500 Hz 命令线程不会被等帧、写盘或视频编码阻塞

数据采集与状态监控界面
数据采集与状态监控界面
08

配置夹爪限力闭合

检查空程、接触判定、柔和保持、张开解除和 1.5 Nm 软件上限

项目结果

SmolVLA 高反光与透明物体抓取复现教程:方案总览与核心改造 项目结果
SmolVLA 高反光与透明物体抓取复现教程:方案总览与核心改造

完成项目边界、数据流和关键改造的总体设计,确认双相机、重力补偿、增强深度、电机保活与夹爪安全控制各自的输入输出。本阶段只证明技术路线和接口成立,不宣称透明瓶抓取任务已经成功。

Bladewin Smith
我成功复现了

评论

0 comments