2. ROS与MoveIt环境搭建:Ubuntu + ROS Noetic安装、MoveIt1安装、工作空间创建、依赖包检查

说实话,环境搭建这一步,劝退了很多人。

我见过不少同学,代码写得挺溜,结果卡在安装上,一折腾就是两三天。其实没必要。只要把版本对应关系搞清楚,按步骤来,半小时就能搞定。

这一章,我就带你走一遍完整流程。从Ubuntu系统开始,到ROS Noetic,再到MoveIt1,最后建好工作空间、检查依赖。每一步我都会告诉你:哪些坑我踩过,哪些地方可以省时间。

2.1 系统与版本选择:为什么是Ubuntu 20.04 + ROS Noetic?

先明确一点:ROS和Ubuntu版本是严格绑定的。不是你想装哪个就装哪个。

ROS Noetic对应的就是Ubuntu 20.04(Focal Fossa)。你如果用Ubuntu 22.04装Noetic,那基本是自找麻烦——依赖冲突会让你怀疑人生。

ROS版本 对应Ubuntu版本 支持状态
ROS Noetic Ubuntu 20.04 长期支持(至2025年)
ROS Melodic Ubuntu 18.04 已停止维护
ROS2 Foxy Ubuntu 20.04 长期支持
我的建议:如果你刚入门,别纠结版本。直接用Ubuntu 20.04 + ROS Noetic。这个组合最成熟,社区资源最多,遇到问题随便一搜就有答案。

2.2 Ubuntu 20.04 安装要点

系统安装我就不手把手教了,说几个关键点:

  • 磁盘分区:建议给Ubuntu至少留50GB空间。我见过有人只分20GB,装完ROS就满了,后面编译MoveIt直接报磁盘空间不足。
  • 软件源:安装完系统后,第一件事就是换国内源。阿里云、清华、中科大都可以。不然你下载ROS包的速度会让你崩溃。
  • 显卡驱动:如果你用NVIDIA显卡,建议装驱动。虽然ROS本身不依赖显卡,但后面用Gazebo仿真时,没驱动画面会卡成PPT。
注意:不要用虚拟机!不要用虚拟机!不要用虚拟机!
我曾经在VMware里装ROS,结果USB转串口死活识别不了机械臂。折腾了两天,最后换双系统,十分钟搞定。如果你只有一台电脑,建议装双系统,或者用Docker。

2.3 ROS Noetic 完整安装

好,系统准备好了。现在开始装ROS。

整个过程其实就是几条命令。但每条命令背后都有它的道理,我简单解释一下。

# 1. 设置sources.list(这里用清华源)
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'

# 2. 添加密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

# 3. 更新
sudo apt update

# 4. 安装完整版ROS(推荐)
sudo apt install ros-noetic-desktop-full

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

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

# 7. 安装依赖工具
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
关键点说明:
  • ros-noetic-desktop-full 包含了ROS核心、可视化工具(Rviz)、仿真环境(Gazebo)等。大概2GB左右,下载时间取决于你的网速。
  • rosdep 是用来解决依赖的。后面你编译自己的包时,它会自动帮你安装缺少的系统依赖。
  • 环境变量一定要加到 ~/.bashrc 里,不然每次开终端都要手动source。

装完之后,验证一下:

roscore
# 如果看到类似 "started core service [/rosout]" 的信息,说明ROS安装成功。
避坑指南:我曾经在 sudo rosdep init 这一步卡了很久,一直报网络错误。后来发现是公司网络限制了raw.githubusercontent.com。解决办法是手动下载那个配置文件,或者换个网络环境。

2.4 MoveIt1 安装

ROS装好了,接下来装MoveIt1。

MoveIt1是ROS Noetic时代的标配。虽然现在MoveIt2已经出来了,但MoveIt1在Noetic上依然是最稳定的选择。

# 安装MoveIt1完整版
sudo apt install ros-noetic-moveit

# 安装MoveIt1的示例包(方便后面测试)
sudo apt install ros-noetic-moveit-resources
sudo apt install ros-noetic-moveit-visual-tools

就这么简单?对,就这么简单。一条命令,MoveIt1就装好了。

但注意,这只是安装了MoveIt1的核心库。如果你要用特定的机械臂(比如UR5、Kinova、Franka),还需要安装对应的驱动包。这个我们后面章节会讲。

注意:不要用源码编译安装MoveIt1!除非你非常熟悉CMake和ROS的编译系统。我见过有人非要自己编译,结果依赖没配好,编译了三个小时报错,最后乖乖用apt装了。apt安装的版本足够稳定,而且社区测试过,兼容性没问题。

2.5 创建工作空间

工作空间(workspace)是ROS里存放代码的地方。你可以把它理解成一个项目文件夹。

我个人习惯用 catkin_ws 这个名字。当然你也可以叫 robot_ws、moveit_ws,随你。

# 创建工作空间目录
mkdir -p ~/catkin_ws/src

# 初始化工作空间
cd ~/catkin_ws
catkin_make

# 设置环境变量
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

这里有个细节:catkin_make 会在 ~/catkin_ws 下生成 build 和 devel 两个文件夹。build 是编译中间文件,devel 是编译产物。你平时写代码只需要关注 src 文件夹。

我的习惯:每次新建工作空间后,我会先跑一次 catkin_make,确保环境没问题。然后再往 src 里放代码。这样如果后面编译出错,我能确定是代码的问题,而不是环境的问题。

2.6 依赖包检查

最后一步,检查依赖包是否齐全。

这一步很多人会忽略。结果编译到一半报错,说缺了某个包,又回头去装。浪费时间。

# 进入工作空间
cd ~/catkin_ws

# 检查所有依赖
rosdep install --from-paths src --ignore-src -r -y

这条命令会扫描 src 下所有包的 package.xml,然后自动安装缺少的依赖。

如果输出是 #All required rosdeps installed successfully,那就万事大吉。

如果报错,比如提示找不到某个包,那就手动安装:

sudo apt install ros-noetic-<包名>
常见依赖包列表:
包名 用途
ros-noetic-urdf 机器人模型描述
ros-noetic-srdf 语义机器人描述
ros-noetic-moveit-msgs MoveIt消息类型
ros-noetic-tf2 坐标变换
ros-noetic-robot-state-publisher 机器人状态发布
注意:如果你在 rosdep install 时遇到网络超时,可以试试加代理,或者手动下载依赖包。我曾经在客户现场部署时,内网没有外网权限,所有依赖包都是手动下载的。那叫一个酸爽。

2.7 本章知识体系总览

为了让你对整个流程有个直观印象,我画了一张图。你可以把它当作一张地图,后面遇到问题就知道该查哪一步。

ROS + MoveIt 环境搭建流程 Step 1: 系统安装 Ubuntu 20.04 Step 2: ROS安装 ROS Noetic Step 3: MoveIt安装 MoveIt1 Step 4: 工作空间 catkin_ws Step 5: 依赖检查 rosdep install ✅ 环境搭建完成 注意:每一步都依赖上一步,不要跳步

嗯,到这里,环境搭建就全部完成了。你现在应该有一个可以正常运行的ROS Noetic系统,安装了MoveIt1,创建了工作空间,并且检查了所有依赖。

下一章,我们会开始接触真正的机械臂模型——URDF。那是描述机器人长什么样的文件。准备好了吗?