第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才解决。
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
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 整体架构一览
为了让你对整个环境有个直观认识,我画了张图:
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会自动规划运动轨迹。
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,编译报错看了半天才发现是依赖没装全。