第2章 ROS与MoveIt环境搭建:Ubuntu与ROS安装、MoveIt安装与配置、工作空间创建

说实话,很多初学者在环境搭建这一步就卡住了。我见过不少同学,代码写得挺溜,结果装个ROS折腾了两天,最后心态崩了。这一章,咱们就把这事彻底捋清楚。

我的建议是:别急着敲命令,先理解整个流程。你想想看,如果连装的是什么、装在哪都不知道,出了问题你连日志都看不懂。

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

ROS对操作系统的版本要求非常严格。不是随便哪个Linux发行版都能跑。目前最稳的组合是:

ROS版本 推荐Ubuntu版本 我的评价
ROS Noetic Ubuntu 20.04 LTS 最稳定,社区支持最好,推荐
ROS2 Foxy/Galactic Ubuntu 20.04 / 22.04 适合新项目,但生态不如Noetic成熟
ROS Melodic Ubuntu 18.04 已停止维护,别用了

我个人习惯用Ubuntu 20.04 + ROS Noetic。为什么?因为MoveIt在这套组合上跑得最顺,坑最少。我记得有一次帮学生排查问题,他用的是Ubuntu 22.04 + ROS2 Humble,结果MoveIt的Python接口死活装不上,折腾了三天最后换回Noetic才解决。

⚠ 重要提醒: 不要用虚拟机跑ROS做运动规划!除非你只是看个界面。虚拟机无法直通GPU和实时内核,MoveIt的轨迹规划在虚拟机上会卡到你怀疑人生。我建议双系统或者直接物理机安装。

2.2 Ubuntu 20.04 安装要点

安装过程我就不逐条截图了,网上教程一大堆。我只说几个关键点:

  • 分区建议: / 分区至少50GB,/home 分区至少100GB。你后面要装Gazebo模型、PCL库、各种依赖,空间小了真不够用。
  • 软件源: 安装时选「最小安装」,装完再换国内源(阿里云或清华源)。别选「完整安装」,里面一堆你用不上的办公软件。
  • 显卡驱动: 如果你有NVIDIA显卡,装完系统第一件事就是装驱动。别用系统自带的nouveau开源驱动,跑Rviz会掉帧。
💡 小技巧: 装完系统后,先执行 sudo apt update && sudo apt upgrade -y,把系统包更新到最新。这一步能避免很多依赖冲突。

2.3 ROS Noetic 完整安装

ROS的安装其实就三步:添加源、安装、初始化。但每一步都有坑,我一个个说。

2.3.1 添加软件源与密钥

# 添加ROS官方源
sudo sh -c 'echo "deb http://packages.ros.org/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

# 更新源
sudo apt update

这里有个坑:国内网络经常连不上ROS官方源。我曾经在客户现场,网络环境差,apt update卡了半小时。解决方案是换成国内镜像源:

# 使用中科大镜像源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'

2.3.2 安装ROS桌面完整版

sudo apt install ros-noetic-desktop-full

这个包大概1.5GB,包含ROS核心、Rviz、Gazebo、各种常用库。别装ros-noetic-desktop(不带full),那个缺很多东西,后面装MoveIt时会报依赖错误。

2.3.3 初始化rosdep

sudo rosdep init
rosdep update

这一步也是重灾区。rosdep init 经常报错,说无法连接raw.githubusercontent.com。原因你懂的。解决方案:

# 手动创建rosdep源文件
sudo mkdir -p /etc/ros/rosdep/sources.list.d/
sudo touch /etc/ros/rosdep/sources.list.d/20-default.list

# 写入国内镜像地址
echo "yaml https://mirrors.tuna.tsinghua.edu.cn/rosdistro/rosdep/sources.list.d/20-default.list" | sudo tee /etc/ros/rosdep/sources.list.d/20-default.list

# 然后执行
rosdep update

2.3.4 设置环境变量

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

这一步别忘了。我见过有人装完ROS,每次开终端都要手动source,然后问我为什么rosrun找不到命令……

2.4 MoveIt 安装与配置

MoveIt的安装比ROS本身简单,但要注意版本匹配。ROS Noetic对应的是MoveIt 1.x。

# 安装MoveIt核心包
sudo apt install ros-noetic-moveit

# 安装MoveIt可视化插件(Rviz插件)
sudo apt install ros-noetic-moveit-visual-tools

# 安装MoveIt的Python接口
sudo apt install ros-noetic-moveit-commander

装完之后,验证一下:

# 检查MoveIt是否安装成功
rospack find moveit_core
# 应该输出:/opt/ros/noetic/share/moveit_core
📌 核心概念: MoveIt本质上是一个ROS元包(metapackage),它把运动规划、碰撞检测、逆运动学求解、轨迹优化等功能打包在一起。你装一个ros-noetic-moveit,实际上会拉下来几十个依赖包。

2.5 工作空间创建与编译

工作空间(workspace)是ROS开发的基本单位。说白了,就是你放代码的地方。我习惯用catkin_ws这个名字。

2.5.1 创建catkin工作空间

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

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

# 编译空工作空间(验证环境)
cd ~/catkin_ws
catkin_make

第一次编译会生成build和devel两个目录。如果没报错,说明环境没问题。

2.5.2 配置工作空间环境变量

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

这里有个细节:source的顺序很重要。如果你在.bashrc里先source了ROS的setup.bash,再source工作空间的setup.bash,那工作空间的包会覆盖ROS自带的包。反过来,ROS自带的包会覆盖你工作空间的包。我建议:

# 先source ROS
source /opt/ros/noetic/setup.bash
# 再source工作空间
source ~/catkin_ws/devel/setup.bash

2.5.3 验证工作空间

echo $ROS_PACKAGE_PATH
# 输出应该包含:/home/你的用户名/catkin_ws/src:/opt/ros/noetic/share

如果看到这个输出,恭喜你,环境搭建成功了。

⚠ 常见错误: 如果你执行catkin_make时提示CMake Error: Could not find a package configuration file,别慌。这通常是因为某个依赖没装。用rosdep install --from-paths src --ignore-src -r -y自动安装缺失的依赖。

2.6 整体架构一览

为了让你对整个环境有个直观认识,我画了张图:

ROS + MoveIt 环境搭建架构图 Ubuntu 20.04 LTS ROS Noetic (ros-noetic-desktop-full) MoveIt 1.x (ros-noetic-moveit) catkin_ws (工作空间) src (源码) build (编译中间文件) devel (开发环境) 💡 说明: MoveIt 安装在 /opt/ros/noetic/share/ 下,工作空间在 ~/catkin_ws/ 下。 两者通过 ROS_PACKAGE_PATH 环境变量关联。

2.7 环境验证:跑一个简单的测试

环境搭好了,总得跑个东西验证一下。我推荐用MoveIt自带的Panda机器人演示:

# 安装Panda机器人模型
sudo apt install ros-noetic-panda-moveit-config

# 启动MoveIt + Rviz
roslaunch panda_moveit_config demo.launch

如果一切正常,你会看到Rviz界面加载出来,中间有一个Franka Emika Panda机械臂。你可以用拖拽的方式拖动机械臂末端,MoveIt会自动规划运动轨迹。

💡 验证要点: 拖动机械臂时,注意观察Rviz左下角的「MotionPlanning」面板。如果显示「Planning Request: Success」,说明MoveIt正常工作。如果一直显示「Planning Request: Failure」,检查一下碰撞检测是否开启,或者机械臂是否处于奇异位形。

2.8 避坑指南

最后,我把这些年遇到的环境搭建问题总结一下:

  • Python版本冲突: Ubuntu 20.04自带Python 3.8,但ROS Noetic有些工具依赖Python 2.7。别乱改系统默认Python版本,用virtualenv隔离项目环境。
  • CMake版本过低: MoveIt要求CMake 3.10以上。Ubuntu 20.04自带的是3.16,够用。如果你用Ubuntu 18.04,记得升级CMake。
  • Gazebo启动闪退: 通常是显卡驱动问题。检查一下glxinfo | grep "OpenGL version",如果输出是Mesa而不是NVIDIA,说明驱动没装好。
  • catkin_make编译报错: 先检查rosdep install是否跑过。我曾经有个项目,缺了liborocos-kdl-dev,编译报错看了半天才发现是依赖没装全。