第2章 开发环境搭建:Ubuntu 22.04 + ROS2 Humble + MoveIt2

好,咱们正式开始动手。这一章说白了就是「搭灶台」——灶台搭不好,后面炒菜全糊锅。我见过太多同学卡在环境配置上,一卡就是两三天,心态直接崩了。别急,跟着我的节奏来,稳得很。

本章核心目标:在你的电脑上装好 Ubuntu 22.04、ROS2 Humble 和 MoveIt2,并且让它们能正常跑起来。整个过程我建议你一气呵成,别中途去刷剧。

2.1 操作系统选择:为什么是 Ubuntu 22.04?

你可能要问:为啥非得用 Ubuntu?用 Windows 不行吗?

嗯,理论上可以,但你会把自己折腾死。ROS2 在 Windows 上的支持就是个半成品,很多底层通信库跑着跑着就崩了。我个人习惯是:做机器人开发,老老实实用 Ubuntu。

至于版本,ROS2 Humble 官方推荐的是 Ubuntu 22.04 LTS。LTS 意味着长期支持,稳定。我当年用 Ubuntu 18.04 配 ROS1 Melodic 的时候,踩过不少坑,但 22.04 这套组合拳打下来,确实省心不少。

操作系统 ROS2 版本 推荐指数 备注
Ubuntu 22.04 LTS Humble Hawksbill ⭐⭐⭐⭐⭐ 官方首选,最稳定
Ubuntu 20.04 LTS Galactic / Foxy ⭐⭐⭐ 版本较老,部分包已停止维护
Windows 10/11 Humble (实验性) ⭐⭐ 不推荐,坑太多

小提示:如果你用的是虚拟机,记得给 Ubuntu 分配至少 4GB 内存和 2 个 CPU 核心。硬盘空间建议 60GB 以上,不然编译 MoveIt2 的时候会提示磁盘不足。

2.2 ROS2 Humble 安装:一条龙搞定

ROS2 的安装其实已经被官方简化了很多。你想想看,以前装 ROS1 的时候还得手动处理各种依赖冲突,现在一条命令就能搞定大部分工作。

打开终端,按顺序执行以下命令:

# 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
export 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
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 3. 安装 ROS2 Humble 桌面版(包含 rviz2、demo 等)
sudo apt update
sudo apt install ros-humble-desktop

# 4. 安装开发工具
sudo apt install python3-colcon-common-extensions python3-rosdep python3-vcstool git

安装完成后,记得配置环境变量。我建议你把它写到 ~/.bashrc 里,这样每次打开终端都能自动加载:

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

注意:如果你同时装了 ROS1 和 ROS2,千万别把两个 setup.bash 都 source 到同一个终端里,会冲突。我曾经因为这个查了一下午的 bug,最后发现是环境变量打架了。

验证安装是否成功:

ros2 run demo_nodes_cpp talker
# 再开一个终端,运行:
ros2 run demo_nodes_py listener

如果能看到 talker 在发消息,listener 在收消息,那就说明 ROS2 装好了。嗯,就是这么简单。

2.3 MoveIt2 源码编译:硬核玩家的选择

为什么我要让你源码编译 MoveIt2?直接用 apt 安装不好吗?

好,但不够好。apt 安装的是稳定版,版本往往落后半年到一年。咱们做课程,要用最新的功能,而且源码编译能让你更清楚 MoveIt2 的内部结构。说白了,出了问题你能自己修。

先创建工作空间:

mkdir -p ~/moveit2_ws/src
cd ~/moveit2_ws

下载 MoveIt2 的源码。这里我用的是 vcstool 来管理多个仓库,比手动 git clone 省事多了:

# 下载 moveit2 的仓库列表文件
wget https://raw.githubusercontent.com/ros-planning/moveit2/main/moveit2.repos
vcs import src < moveit2.repos

安装依赖。这一步很关键,很多同学编译失败都是因为依赖没装全:

# 初始化 rosdep
sudo rosdep init
rosdep update

# 安装所有依赖
rosdep install -r --from-paths src --ignore-src --rosdistro humble -y

开始编译。我建议你使用 colcon 并指定 --symlink-install 参数,这样以后修改 Python 文件不用重新编译:

cd ~/moveit2_ws
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release

提速技巧:如果你的电脑是多核 CPU,可以用 --parallel-workers 4 来加速编译。我一般设成 CPU 核心数减 1,留一个核心给系统用,免得电脑卡死。

编译时间取决于你的电脑配置。我自己的笔记本(i7-12700H,32GB 内存)大概需要 15 分钟。如果你用的是老电脑,去泡杯咖啡,或者看看文档,别干等着。

编译完成后,别忘了 source 工作空间:

echo "source ~/moveit2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

2.4 工作空间配置:让一切井井有条

我个人习惯把工作空间分成三类:

  • src:存放所有源码,包括 MoveIt2、你自己的机器人包、第三方库
  • build:编译中间文件,一般不用管它
  • install:编译产物,相当于安装目录
  • log:编译日志,出错了来这里查

这里有个小技巧:我建议你在 src 目录下再建一个 moveit2 文件夹,专门放 MoveIt2 相关的包,再建一个 robot 文件夹,放你自己的机器人描述文件。这样结构清晰,找东西方便。

mkdir -p ~/moveit2_ws/src/moveit2
mkdir -p ~/moveit2_ws/src/robot

另外,我强烈建议你安装 colcon_cd 工具,它能让你快速跳转到工作空间目录:

sudo apt install python3-colcon-cd
echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "export colcon_cd_workspace=~/moveit2_ws" >> ~/.bashrc

以后你只需要在终端输入 colcon_cd robot,就能直接跳到 ~/moveit2_ws/src/robot 目录下。省事吧?

2.5 知识体系总览:一张图看懂

说了这么多,你可能有点晕。没关系,我画了一张图,把整个环境搭建的逻辑串起来:

MoveIt2 开发环境搭建总览 Ubuntu 22.04 LTS ROS2 Humble MoveIt2 (源码编译) ~/moveit2_ws/ (工作空间) src/ 源码 build/ 编译 install/ 安装

这张图你看懂了吗?从底层操作系统开始,一层层往上搭。每一层都依赖下一层,缺一不可。我当年刚开始学的时候,就是靠这种分层思维,把整个 ROS 生态理清楚的。

2.6 避坑指南:我踩过的那些坑

最后,分享几个我亲身经历过的坑,你遇到了别慌:

  • 编译时提示找不到 moveit_msgs:多半是依赖没装全。重新跑一遍 rosdep install,或者手动安装 ros-humble-moveit-msgs。
  • 运行 ros2 run 提示找不到包:检查一下你有没有 source 工作空间。我经常忘记 source,然后一脸懵逼地查半天。
  • 虚拟机里运行 rviz2 特别卡:试试在虚拟机设置里启用 3D 加速,或者把图形控制器改成 VMSVGA。
  • 编译到 90% 突然报错:别慌,看看是不是内存不够了。用 free -h 检查内存,如果 swap 用满了,加个 4GB 的 swap 文件。

重要提醒:如果你在编译过程中遇到任何错误,第一件事是看日志。日志在 ~/moveit2_ws/log/ 目录下,用 cat 或者 less 打开看最后几行,错误原因通常写得很清楚。别一上来就去百度,先自己分析。

好了,环境搭好了,咱们就可以开始真正的机器人编程了。记住,这一步虽然枯燥,但它是你后面所有工作的基础。稳扎稳打,别着急。