第一章:课程导论与仿真环境搭建

各位同学好,我是你们这门课的老朋友。说实话,每次讲机械臂抓取,我都会想起自己刚入行时踩过的那些坑。那时候没有这么好的仿真工具,全靠硬调,一个抓取动作能折腾好几天。现在有了Gazebo和MoveIt2,效率高太多了。

这一章,我们先聊聊机械臂抓取到底是怎么回事,然后手把手把环境搭起来。嗯,别嫌基础,环境搭不好,后面全白费。

1.1 机械臂抓取技术概述

机械臂抓取,说白了就是让机器人「看见」物体,然后「伸手」去拿。听起来简单,但背后涉及的东西可不少。

我把它拆成三个核心环节:

  • 感知:用摄像头或深度传感器获取物体位置和姿态。我在项目里常用的是RGB-D相机,比如Intel RealSense。
  • 规划:计算出一条无碰撞的路径,让机械臂从当前位置运动到抓取点。这里就要用到MoveIt2了。
  • 执行:控制机械臂关节按照规划好的轨迹运动,同时夹爪要准确闭合。

你可能会问:「为什么非要用仿真?」

我的经验是——真机调试一次的成本太高了。撞坏一个夹爪几千块,撞坏一个工件更心疼。在Gazebo里随便试,参数调好了再上真机,这才是聪明人的做法。

核心观点:仿真不是玩具,是工程利器。我见过太多人跳过仿真直接上真机,结果就是反复炸机。记住,仿真里跑不通的,真机一定跑不通。

1.2 Gazebo与ROS2环境安装

环境安装这块,我建议你严格按照我给的版本来。ROS2的版本兼容性问题,我曾经被坑过整整两天。

1.2.1 系统要求

组件 推荐版本 备注
操作系统 Ubuntu 22.04 别用20.04,有些包不兼容
ROS2 Humble Hawksbill LTS版本,稳定
Gazebo Gazebo Fortress 与ROS2 Humble原生适配

1.2.2 安装步骤

我个人习惯用脚本一键安装,但为了让你理解每一步在干什么,咱们还是手动来。

# 1. 设置locale
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

# 2. 添加ROS2源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

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

# 4. 安装Gazebo Fortress
sudo apt install ros-humble-ros-gz
sudo apt install gz-fortress

小技巧:安装完成后,记得把source命令加到.bashrc里。我每次重装系统都会忘这一步,然后一脸懵逼地发现找不到ros2命令。

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

1.2.3 验证安装

打开终端,分别运行以下命令:

# 测试ROS2
ros2 run demo_nodes_cpp talker

# 测试Gazebo
gz sim -v 4

如果能看到小乌龟在说话,Gazebo窗口正常弹出,恭喜你,环境搭好了。

避坑指南:我曾经在虚拟机里装Gazebo,结果3D加速死活打不开。后来发现是VMware的OpenGL支持有问题。建议直接用双系统或者原生Ubuntu,别折腾虚拟机。

1.3 MoveIt2框架介绍

MoveIt2,你可以把它理解成机械臂的「大脑」。它负责运动规划、碰撞检测、逆运动学求解这些脏活累活。

我刚开始用MoveIt的时候,觉得它就是个黑盒子。后来深入看了源码才发现,它的核心架构其实很清晰:

  • 运动规划器:默认用OMPL,支持多种算法(RRT、PRM等)。我个人偏爱RRT-Connect,速度快,适合抓取场景。
  • 碰撞检测:基于FCL库,可以检测机械臂自身碰撞,也能检测与环境物体的碰撞。
  • 逆运动学求解器:把末端位姿转换成关节角度。UR5这类机械臂有解析解,速度快;7轴臂通常用数值解。

下面这张图是我自己画的,帮你理解MoveIt2在仿真中的位置:

MoveIt2 + Gazebo 联合仿真架构 用户输入 目标位姿 / 抓取指令 MoveIt2 核心 运动规划器 (OMPL) 碰撞检测 (FCL) 逆运动学求解器 ROS2 话题/服务 Gazebo 物理仿真 真实物理引擎 / 传感器模拟

你看,整个流程就是:你告诉MoveIt2「我要抓那个杯子」,MoveIt2算出一条路,然后通过ROS2发给Gazebo,Gazebo里的虚拟机械臂就动起来了。

1.3.1 安装MoveIt2

sudo apt install ros-humble-moveit
sudo apt install ros-humble-moveit-resources

安装完成后,可以跑一个官方示例测试:

ros2 launch moveit2_tutorials demo.launch.py

如果看到Rviz里出现了一个机械臂模型,说明MoveIt2装好了。

个人经验:刚开始学MoveIt2,别急着改参数。先用官方示例跑通流程,理解每个文件是干什么的。我见过太多人一上来就改config文件,结果改崩了都不知道怎么恢复。

1.4 本章小结

这一章我们干了三件事:

  1. 搞清楚了机械臂抓取的核心流程——感知、规划、执行
  2. 搭好了ROS2 Humble + Gazebo Fortress的环境
  3. 了解了MoveIt2的架构和安装方法

环境搭好只是第一步。下一章开始,我们会真正动手创建一个机械臂的仿真模型。嗯,到时候你会看到,一个完整的URDF文件长什么样,以及怎么让机械臂在Gazebo里动起来。

课后作业:

  • 完成ROS2和Gazebo的安装,并截图验证
  • 运行MoveIt2官方示例,观察Rviz中的机械臂模型
  • 思考:如果让你设计一个抓取系统,你会先考虑哪些问题?

可可精品资料库