第1章 · 课程导论与环境搭建

大家好,我是你们这门课的主讲。做了快十年机器人系统集成,从 ROS Indigo 一路折腾到 Noetic,踩过的坑比代码行数还多。这一章咱们先把地基打牢——MoveIt 与 SLAM 联合控制到底是怎么回事?以及怎么把 ROS Noetic、MoveIt、SLAM 工具箱一口气装好、跑通。

📌 本章知识体系 🤖 联合控制概述 MoveIt + SLAM 感知→规划→执行 动态环境闭环 ⚙️ 环境搭建 ROS Noetic 安装 工作空间创建 MoveIt 安装验证 🗺️ SLAM工具箱 gmapping / Carto hector_slam 联合调试准备 → 从理论到实操,一步一脚印

1.1 为什么要把 MoveIt 和 SLAM 放在一起?

说白了,移动机械臂要干活,光有胳膊不行,得知道自己在哪、周围啥样。SLAM 给机器人一双「眼睛」和「记忆」,MoveIt 则负责规划胳膊怎么动。我早期做过一个巡检机器人,机械臂总是撞到墙——后来才发现,SLAM 地图没同步给 MoveIt 的规划场景。嗯,这就是联合控制的核心痛点。

这门课会带你打通这两套系统。你想想看,一个能在动态环境中自主抓取、避障、导航的机器人,是不是很酷?

1.2 ROS Noetic 安装 —— 选对版本少踩坑

我个人习惯用 Ubuntu 20.04 + ROS Noetic。为什么不是 Melodic 或 ROS2?因为 Noetic 是 ROS1 的最后一个长期支持版,生态最成熟,而且 MoveIt 和 SLAM 工具箱在 Noetic 上几乎都是开箱即用。

💡 我的经验: 装 ROS 前先把 Ubuntu 的软件源换成国内镜像(清华/阿里),不然下载慢到怀疑人生。我曾经在客户现场用默认源,等了两个小时……
# 1. 添加 ROS 源(清华镜像)
sudo sh -c 'echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

# 2. 更新并安装完整桌面版
sudo apt update
sudo apt install ros-noetic-desktop-full -y

# 3. 初始化 rosdep
sudo rosdep init
rosdep update

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

装完以后,在终端敲 roscore,如果看到一片日志输出,说明 ROS 核心跑起来了。我第一次看到那个小乌龟时,心里还挺激动。

1.3 工作空间创建 —— 你的代码基地

工作空间就是你的工程文件夹。我习惯用 catkin_ws 这个名字,简单明了。

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source devel/setup.bash

记得把 source ~/catkin_ws/devel/setup.bash 也加到 ~/.bashrc 里,不然每次开终端都要手动 source。嗯,这个坑我帮好几个同事填过。

1.4 MoveIt 安装与验证

MoveIt 是机械臂运动规划的事实标准。安装很简单,但验证环节容易出问题——尤其是碰撞检测库没装全的时候。

sudo apt install ros-noetic-moveit -y
# 安装完成后,用官方 demo 快速验证
roslaunch moveit_resources_panda_moveit_config demo.launch
✅ 验证要点: 如果 RViz 中出现 Panda 机械臂,并且你能拖拽末端、点击“Plan & Execute”,说明 MoveIt 核心功能正常。我遇到过几次因为显卡驱动问题导致 RViz 闪退,更新一下驱动就好。

你还可以运行 rosrun moveit_commander moveit_commander_cmdline.py 在命令行里试试运动规划,很直观。

1.5 SLAM 工具箱安装

SLAM 工具箱我主要推荐三个:gmapping(经典激光)、hector_slam(无里程计)、Cartographer(谷歌出品,精度高)。咱们课程后面会重点讲 Cartographer,但初期用 gmapping 上手最快。

# 安装 gmapping 和 hector_slam
sudo apt install ros-noetic-gmapping ros-noetic-hector-slam -y

# Cartographer 稍微复杂一点,但 Noetic 有二进制包
sudo apt install ros-noetic-cartographer ros-noetic-cartographer-ros -y
⚠️ 注意: Cartographer 的二进制包在 Noetic 上可能缺少某些依赖。如果你编译报错,试试 rosdep install cartographer_ros。我曾经在 Ubuntu 20.04 上因为 protobuf 版本冲突折腾了一下午,后来用 pip install protobuf==3.20.3 解决了。

装好后,可以跑一个 bag 文件测试 SLAM。比如下载一个公开的激光数据集,运行 roslaunch cartographer_ros demo_backpack_2d.launch。看到实时建图的那一刻,你会觉得一切配置都值了。

1.6 联合控制初探 —— 一个小 demo

虽然咱们第一章只是搭建环境,但我还是想让你感受一下联合控制的魅力。你可以同时启动 MoveIt 的 demo 和 SLAM 的仿真,然后通过 tf 让机械臂知道地图信息。具体怎么做?别急,后面章节会手把手拆解。这里先留个悬念。

🔧 避坑指南: 如果你在虚拟机里运行,记得给虚拟机分配至少 4GB 内存和 2 个核心,否则 RViz 和 SLAM 同时跑会卡成 PPT。我早期用 2GB 内存的虚拟机,差点把电脑砸了。