第2章 搭建开发环境:安装ROS Noetic、配置Gazebo与Rviz
说实话,做机器人开发最怕什么?不是算法难,而是环境配了三天,一启动全是红字报错。我见过太多新手卡在安装这一步,最后连一个 roscore 都没跑起来。这一章,我就带你稳扎稳打,把 ROS Noetic、Gazebo 和 Rviz 全部装好,并且验证它们能不能正常干活。
2.1 为什么选 Noetic + Ubuntu 20.04?
ROS Noetic 是最后一个完全支持 Python 2 的版本?不,它其实是首个只支持 Python 3 的长期支持版。我个人习惯用 Noetic,因为它稳定,而且和 Gazebo 9/11 配合得最好。你想想看,如果选 Melodic,很多新包还要自己编译,太折腾。
另外,Ubuntu 20.04 的 LTS 支持到 2025 年,生态非常成熟。我在项目里遇到过有人硬要在 22.04 上装 Noetic,结果依赖冲突搞了两天——嗯,这里要注意,官方只支持 20.04。
2.2 安装 ROS Noetic(完整桌面版)
打开终端,一行一行来。别急着复制粘贴一大段,容易漏掉交互确认。
# 1. 设置 sources.list
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 2. 添加密钥
sudo apt install curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
# 3. 更新
sudo apt update
# 4. 安装完整桌面版(包含 Rviz、Gazebo 等)
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 那个包容易断。
2.3 验证 ROS 核心是否可用
装完别急着高兴,先跑个 roscore 看看。打开一个新终端,输入:
roscore
如果看到一堆 ... started core service [/rosout] 之类的信息,说明 ROS master 跑起来了。按 Ctrl+C 停掉。
然后测试一下 rosrun 能不能用:
rosrun turtlesim turtlesim_node
一个小乌龟窗口应该会弹出来。我记得第一次看到那只乌龟时,心里踏实了不少——至少环境没装废。
2.4 配置 Gazebo 与 Rviz
Gazebo 和 Rviz 其实已经包含在 ros-noetic-desktop-full 里了。但 Gazebo 的模型库需要额外下载,不然打开世界全是灰色地面。
# 安装 Gazebo 模型库(可选,但强烈建议)
git clone https://github.com/osrf/gazebo_models.git ~/.gazebo/models
如果你网速慢,也可以直接下载我打包好的离线包。不过我更推荐用上面的命令,保持最新。
Ctrl+C 杀掉,然后手动把模型库放到 ~/.gazebo/models 里,一劳永逸。
Rviz 基本开箱即用。你可以在终端输入:
rviz
如果看到 Rviz 的 3D 界面,并且没有报错,那就成了。我第一次打开 Rviz 时,界面全黑,后来发现是没添加 RobotModel 显示项——别慌,后面章节会细讲。
2.5 联调验证:让乌龟在 Gazebo 里跑起来?
严格来说,turtlesim 不是 Gazebo 仿真。但我们可以用一个更直接的方法验证 ROS + Gazebo 的通信。启动 Gazebo 空世界:
roslaunch gazebo_ros empty_world.launch
然后另开终端,发布一个话题看看 Gazebo 有没有反应:
rostopic pub /gazebo/set_link_state gazebo_msgs/LinkState "link_name: 'box'
pose:
position: {x: 1.0, y: 0.0, z: 0.5}
orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}
twist: {linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}
reference_frame: 'world'"
如果 Gazebo 世界里出现了一个漂浮的箱子,说明通信完全正常。我曾经用这个箱子测试过很多次,简单又直观。
2.6 环境结构总览
下面这张图帮你理清 ROS Noetic、Gazebo、Rviz 之间的关系。别被术语吓到,说白了就是三个进程互相发消息。
2.7 常见问题与避坑
- rosdep 更新失败 — 多半是网络问题。试试
export ROSDISTRO_INDEX_URL=https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml再rosdep update。 - Gazebo 启动黑屏 — 检查显卡驱动。我曾在笔记本上折腾半天,最后发现是没装
mesa-utils。 - Rviz 闪退 — 降低渲染设置。启动时加
--opengl 210参数:rviz --opengl 210。
2.8 环境验证清单
完成安装后,逐项打勾确认:
| 检查项 | 命令/操作 | 预期结果 |
|---|---|---|
| ROS 环境变量 | echo $ROS_DISTRO | 输出 noetic |
| roscore 启动 | roscore | 终端显示 started core service |
| Gazebo 启动 | gazebo | 空世界窗口出现,无报错 |
| Rviz 启动 | rviz | 3D 视图窗口出现 |
| rosrun 测试 | rosrun turtlesim turtlesim_node | 小乌龟窗口弹出 |
如果以上五项全部通过,恭喜你,开发环境已经稳稳就绪。后面我们就可以专心折腾 URDF 模型了。