第2章 搭建开发环境:安装ROS Noetic、配置Gazebo与Rviz

说实话,做机器人开发最怕什么?不是算法难,而是环境配了三天,一启动全是红字报错。我见过太多新手卡在安装这一步,最后连一个 roscore 都没跑起来。这一章,我就带你稳扎稳打,把 ROS Noetic、Gazebo 和 Rviz 全部装好,并且验证它们能不能正常干活。

本章目标: 在 Ubuntu 20.04 上完整安装 ROS Noetic,配置 Gazebo 9+ 与 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
安装过程大概 10~20 分钟,取决于网速。我建议用手机热点或者换国内镜像源,不然 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

如果你网速慢,也可以直接下载我打包好的离线包。不过我更推荐用上面的命令,保持最新。

Gazebo 启动时如果卡在 "Downloading model...",八成是网络问题。直接 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 之间的关系。别被术语吓到,说白了就是三个进程互相发消息。

ROS Master (roscore) Gazebo 仿真器 Rviz 可视化 话题 /tf /joint_states ← 双向通信 → 你的 URDF 模型通过 ROS 参数服务器加载到 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。
千万不要用 sudo 权限运行 roscore 或 gazebo! 否则会产生一堆权限混乱的文件,到时候删都删不干净。我曾经手贱试过一次,最后重装了系统。

2.8 环境验证清单

完成安装后,逐项打勾确认:

检查项命令/操作预期结果
ROS 环境变量echo $ROS_DISTRO输出 noetic
roscore 启动roscore终端显示 started core service
Gazebo 启动gazebo空世界窗口出现,无报错
Rviz 启动rviz3D 视图窗口出现
rosrun 测试rosrun turtlesim turtlesim_node小乌龟窗口弹出

如果以上五项全部通过,恭喜你,开发环境已经稳稳就绪。后面我们就可以专心折腾 URDF 模型了。