1. 课程导论与预备知识:视觉引导运动规划概述、应用场景与软硬件环境配置

大家好,欢迎来到这门实战课。我是你们的讲师,一个在机器人堆里摸爬滚打多年的老工程师。今天咱们先不急着敲代码,先把地基打牢。这一章,我带你看看视觉引导运动规划到底是个啥,能用在哪儿,以及我们得准备哪些家伙事儿。

1.1 视觉引导运动规划:到底在解决什么问题?

说白了,就是让机器人长上“眼睛”,然后根据看到的东西,自己决定怎么动、怎么走、怎么抓。你想想看,一个盲人机器人,只能按固定轨迹走,一旦环境变了,比如地上多了个箱子,它就傻眼了。但有了视觉,它就能“看”到障碍物,然后重新规划一条路绕过去。

我个人习惯把这件事拆成三个核心环节:

  • 感知(Perception):用摄像头拍下图像,识别出物体、障碍物、目标位置。这活儿OpenCV和深度学习模型干得最多。
  • 规划(Planning):根据感知到的信息,算出一条从当前位置到目标点的安全路径。这步是运动规划算法的地盘。
  • 控制(Control):把规划好的路径,转换成电机能执行的指令,让机器人动起来。ROS2里的控制栈就是干这个的。

我在项目中遇到过不少同学,一上来就调PID,结果机器人撞墙了才发现——摄像头根本没标定。嗯,这里要注意,视觉和运动是强耦合的,缺一环都不行。

核心观点:视觉引导运动规划 = 让机器人“看见” + “思考” + “行动”。这三者必须闭环,才能实现真正的自主避障。

1.2 应用场景:从仓库到车间

光说理论太虚,咱们看看实际中怎么用的。我挑了两个最典型的场景,也是咱们课程后面会反复用到的案例。

1.2.1 仓储AGV:自动导引小车的“眼睛”

你去过那种大型电商仓库吗?AGV驮着货架满地跑。早期的AGV靠磁条或二维码导航,路线固定,灵活性差。现在的视觉AGV,头顶一个摄像头,能识别地面纹理、货架标签,甚至能动态避让行人。

我记得有一次调试,AGV在拐角处老撞墙。查了半天,发现是视觉SLAM的定位漂移了。后来加了回环检测,问题才解决。这就是典型的“视觉+规划”的坑。

1.2.2 协作机器人:与人共舞的“安全卫士”

协作机器人(Cobot)不像传统工业机器人那样关在笼子里。它要和人近距离工作,安全是第一位的。视觉系统在这里扮演两个角色:一是识别工件位置,引导机械臂去抓取;二是实时检测人的手臂或身体,一旦进入危险区域,立刻减速或停止。

我曾经做过一个项目,机械臂抓取时总差那么几毫米。后来发现是手眼标定没做好。你想想看,摄像头看到的坐标系和机械臂的坐标系没对齐,那规划出来的路径肯定不准。所以,标定是视觉引导的“第一颗纽扣”,扣错了后面全歪。

个人经验:不管是AGV还是协作臂,视觉引导的核心难点从来不是算法本身,而是“标定”和“实时性”。标定不准,算法再牛也白搭;实时性不够,规划出来的路径就是废纸。

1.3 软硬件环境配置:工欲善其事,必先利其器

好,咱们要开始动手了。先把开发环境搭好。我建议你按照下面的清单来,别跳步,否则后面编译报错你会想哭的。

1.3.1 操作系统与ROS2

咱们课程基于 Ubuntu 22.04ROS2 Humble。为什么选这个组合?因为稳定,社区活跃,而且对新手友好。ROS2解决了ROS1里很多实时性和多机通信的痛点。

安装ROS2其实很简单,跟着官方教程走就行。但我提醒你一点:一定要用apt安装,别自己从源码编译。我刚开始学ROS2时,非要挑战自己,结果编译了三天,最后发现一个依赖版本不对……嗯,从那以后我再也不干这种傻事了。

# 设置编码
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

# 添加ROS2源
sudo apt install software-properties-common
sudo add-apt-repository universe

# 安装ROS2 Humble
sudo apt update
sudo apt install ros-humble-desktop

# 设置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

避坑指南:我曾经遇到过Python版本冲突导致ROS2节点启动失败。建议使用系统自带的Python3.10,不要自己装Anaconda覆盖系统Python。如果非要用conda,记得创建虚拟环境时指定--system-site-packages。

1.3.2 OpenCV:视觉处理的核心库

OpenCV是咱们处理图像的瑞士军刀。在ROS2环境下,我推荐用cv_bridge来桥接ROS图像消息和OpenCV的Mat格式。安装也很简单:

sudo apt install ros-humble-cv-bridge
sudo apt install python3-opencv

这里有个小技巧:如果你需要用到OpenCV的contrib模块(比如SIFT、SURF),建议从源码编译。但咱们课程里用到的功能,apt安装的版本完全够用。

1.3.3 Python与依赖管理

咱们主要用Python写节点,因为开发快、调试方便。但性能敏感的部分(比如路径搜索算法),我会用C++实现,然后封装成Python接口。你不用担心,我会在代码里标注清楚。

建议你创建一个虚拟环境来管理依赖:

python3 -m venv robot_vision_env
source robot_vision_env/bin/activate
pip install numpy matplotlib scipy

我个人习惯把OpenCV、NumPy、SciPy这三个库当作“铁三角”。图像处理用OpenCV,数值计算用NumPy,科学计算用SciPy。大部分视觉引导的算法,都离不开它们。

1.3.4 硬件准备(可选但推荐)

如果你有实体机器人,那最好。没有的话也别急,咱们课程全程支持Gazebo仿真。我会提供仿真环境的配置文件,你可以在虚拟世界里调试算法,效果和真实环境几乎一样。

我建议的硬件清单:

  • 一个USB摄像头(30fps以上,支持UVC协议)
  • 一台性能还行的电脑(至少8GB内存,有独立显卡更好)
  • 一个ROS2兼容的机器人平台(比如TurtleBot4或你自制的差速底盘)

省钱建议:刚开始别买贵的。我当年用一个30块钱的USB摄像头,配合OpenCV做颜色识别,照样跑通了视觉伺服。关键是理解原理,硬件只是载体。

1.4 本章知识体系总览

为了让你对本章内容有个整体印象,我画了一张图。这张图展示了视觉引导运动规划的核心知识结构,以及它们之间的逻辑关系。你可以把它当作整个课程的地图。

视觉引导运动规划知识体系 感知 (Perception) 规划 (Planning) 控制 (Control) 子模块 • 图像采集与预处理 • 目标检测与识别 • 相机标定与手眼标定 • 深度估计与点云 子模块 • 全局路径规划 (A*, RRT) • 局部路径规划 (DWA, TEB) • 运动学约束与轨迹优化 • 避障策略与安全距离 子模块 • PID与模型预测控制 • 速度与加速度平滑 • 执行器接口与驱动 • 状态反馈与闭环 工具与平台 ROS2 Humble OpenCV 4.x Python 3.10 Gazebo 仿真 Ubuntu 22.04 LTS NumPy / SciPy / Matplotlib 闭环反馈 (视觉伺服)

这张图里,我把整个知识体系分成了三层:上层是三大核心模块(感知、规划、控制),中层是每个模块的具体子模块,底层是我们会用到的工具和平台。注意看那条红色的虚线——它代表视觉伺服中的闭环反馈。说白了,就是机器人一边动一边看,根据视觉信息实时调整动作。这是视觉引导的精髓所在。

1.5 本章小结

这一章咱们聊了视觉引导运动规划的本质,看了两个实际应用场景,也把开发环境搭好了。你可能会觉得内容有点多,但别急,这些都是后面实战的基础。我个人建议你花点时间把环境配好,然后跑一跑ROS2自带的例程,感受一下消息传递和节点通信。

记住一句话:视觉引导不是把摄像头和运动规划简单拼在一起,而是让它们深度融合、实时反馈。后面的章节,我们会一步步把这个闭环做出来。

课后小作业:打开终端,运行 ros2 run demo_nodes_cpp talkerros2 run demo_nodes_py listener,确认你的ROS2环境能正常通信。如果报错,先检查 .bashrc 里的环境变量是否生效。


专注资料整理