1. 课程导论与预备知识

1.1 什么是3D视觉无序抓取?

先说说这个概念。无序抓取,英文叫 Bin Picking,说白了就是——机器人从料筐里,把乱七八糟堆在一起的工件,一个一个捡出来。

你想想看,传统的工业机器人干活,工件得摆得整整齐齐,一个萝卜一个坑。但现实工厂里,哪有那么理想?零件运过来就是散乱堆着的。这时候,机器人就得长眼睛,还得有脑子。

3D视觉就是那双眼睛。它不光能看到工件在哪儿,还能知道它歪了多少、转了多大角度。我最早接触这个项目是在一家汽车零部件厂,他们要抓取刹车盘,堆得跟小山似的。用2D相机根本搞不定,因为工件叠在一起,轮廓都看不清。换了3D相机,问题才解决。

核心定义: 3D视觉无序抓取 = 3D感知 + 位姿估计 + 机器人运动规划,让机器人在无约束环境下自主抓取散乱工件。

1.2 手眼标定的核心意义

有了3D相机,机器人就能看见工件了。但这里有个关键问题:相机看到的坐标,和机器人手臂的坐标,不是一回事。

举个例子。相机告诉你:“工件在点(100, 200, 50)。” 但这个坐标是相机自己定义的。机器人哪知道这个点对应自己手臂的什么位置?

手眼标定,就是干这个的——建立相机坐标系和机器人坐标系之间的数学变换关系。没有这一步,你看到的和抓到的,永远是两码事。

我曾经在一个项目里吃过这个亏。标定参数算错了一个角度,结果机器人每次抓取都偏了5毫米,工件直接撞到料筐壁上。嗯,从那以后,我再也不敢轻视标定这一步了。

场景 无标定后果
相机检测到工件在A点 机器人去抓B点,空抓
工件旋转了30° 机器人按0°抓取,夹爪撞工件
深度测量偏差2mm 夹爪未到位,工件滑落
避坑指南: 手眼标定不是一次性工作。相机松动、机器人更换末端工具、甚至环境温度变化,都可能导致标定参数失效。我建议每次换产前,至少做一次快速验证。

1.3 课程整体知识图谱与学习路径

这门课一共30章,我把它分成四个阶段。你跟着走,不会乱。

课程知识图谱与学习路径 阶段一:基础与预备(第1-5章) 3D视觉原理 · 相机选型 · 机器人基础 坐标系与刚体变换 · 标定板设计 阶段二:手眼标定核心(第6-15章) 眼在手外 · 眼在手上 · 标定算法 数据采集 · 精度验证 · 误差分析 阶段三:3D感知与位姿估计(第16-24章) 点云处理 · 分割聚类 · 位姿计算 抓取姿态生成 · 碰撞检测 阶段四:系统集成与实战(第25-30章) 通信配置 · 联合调试 · 现场部署 故障排查 · 性能优化 · 验收标准 学习建议 • 阶段一和阶段二是基础,不要跳。我见过太多人直接调标定算法, 结果连坐标系变换都搞混,浪费大量时间。 • 每章后面的练习题一定要动手做。光看代码是学不会标定的。 • 遇到问题先查文档,再问人。这是工程师的基本素养。

1.4 所需软硬件环境准备

工欲善其事,必先利其器。我把需要准备的东西列出来,你照着清单准备就行。

硬件清单

设备 推荐型号/规格 备注
3D相机 Ensenso N35 / Photoneo PhoXi / 大恒水星 选双目结构光或激光三角法,别用ToF,精度不够
机器人 UR5e / 遨博i5 / Fanuc LR Mate 至少6轴,支持TCP通信
标定板 陶瓷棋盘格 7×9 或 9×11 精度0.01mm以上,不要用打印纸
工控机 Intel i7以上,16GB RAM,NVIDIA GTX 1060 点云处理需要GPU加速
我的经验: 标定板千万别省那个钱。我早期用打印纸贴在玻璃上,结果标定误差0.5mm,折腾了两周才发现是标定板变形了。陶瓷标定板虽然贵,但一次投资,终身受益。

软件环境

  • 操作系统: Ubuntu 20.04 LTS(ROS Noetic原生支持)
  • 机器人中间件: ROS Noetic + MoveIt
  • 3D视觉库: PCL 1.12 + OpenCV 4.5 + Halcon(可选)
  • 标定工具: easy_handeye(ROS包) / 自研标定程序
  • 编程语言: C++11/14 + Python 3.8
# 一键安装核心依赖(Ubuntu 20.04)
sudo apt install ros-noetic-pcl-ros ros-noetic-moveit ros-noetic-easy-handeye
pip3 install numpy opencv-python pyrealsense2

网络与通信

机器人和工控机之间,我建议用有线以太网,别用WiFi。抓取过程中丢一个包,机器人可能就撞了。我遇到过WiFi干扰导致标定数据采集不全,排查了整整一天。

  • 机器人IP:192.168.1.100(固定)
  • 工控机IP:192.168.1.101(固定)
  • 相机IP:192.168.1.102(固定)
  • 通信协议:TCP Modbus / ROS Topic
注意: 所有设备IP必须在同一网段,且关闭防火墙。ROS通信依赖多播,防火墙开着会导致节点发现失败。