第2章:开发环境搭建

好,咱们正式开始动手。

这一章,说白了就是“搭台子”。你想想看,再厉害的厨师,没有锅碗瓢盆也做不出菜。咱们做机器人开发也一样,Ubuntu、ROS2、Gazebo、Nav2,这四样就是咱们的“灶台”和“菜刀”。

我个人习惯,先把系统环境搞得干干净净,再一步步往上装东西。这样出了问题,排查起来也快。我在项目中遇到过好几次,因为依赖库版本冲突,折腾了一整天。所以,别嫌我啰嗦,每一步都按规矩来。

2.1 Ubuntu 22.04 系统配置

我推荐用 Ubuntu 22.04 LTS。为什么?因为 ROS2 Humble 官方支持的就是它。你非要用 20.04 或者 24.04,也不是不行,但你会遇到很多“惊喜”。嗯,这里要注意,咱们是来学导航的,不是来折腾系统的。

装好系统后,第一件事,换源。国内用户,你懂的,不换源的话,下载速度会让你怀疑人生。

# 备份原 sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 编辑 sources.list,换成清华源或阿里源
sudo vim /etc/apt/sources.list

然后,更新系统。

sudo apt update && sudo apt upgrade -y

我个人习惯,还会装一些基础工具,比如 vim、git、curl、wget。这些后面都会用到。

sudo apt install -y vim git curl wget
小技巧: 装完系统后,建议把语言环境设置为英文。因为很多终端工具和日志,对中文支持不太好,容易乱码。你可以在“Settings -> Region & Language”里改。

2.2 ROS2 Humble 安装

ROS2 的安装,官方文档写得很清楚。但我还是想说说我的经验。

首先,设置编码。

sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

然后,添加 ROS2 的软件源。

sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

接下来,安装 ROS2 Humble 桌面版。这个版本包含了常用的库、工具和模拟器。

sudo apt update
sudo apt install ros-humble-desktop

安装过程可能会比较久,去泡杯咖啡吧。

装完后,别忘了配置环境变量。

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

验证一下是否安装成功。

ros2 run demo_nodes_cpp talker

如果能看到“Hello World”之类的信息在刷屏,那就成了。

注意: 如果你同时装了 ROS1 和 ROS2,一定要注意环境变量的冲突。我曾经因为 source 顺序搞反了,导致 ROS2 的节点一直起不来。建议在 .bashrc 里只 source 一个版本,或者用别名来切换。

2.3 Gazebo Ignition Fortress 安装

Gazebo 是咱们做仿真的核心工具。ROS2 Humble 官方推荐的是 Gazebo Ignition Fortress。注意,不是 Gazebo Classic,那个是 ROS1 时代的产物了。

安装很简单,一行命令。

sudo apt install ros-humble-ros-gz-sim

这个包会自动把 Gazebo Fortress 和 ROS2 的桥接库装好。装完后,你可以试试能不能启动。

ign gazebo --version

如果能看到版本号,比如 Ignition Fortress 6.x.x,那就没问题。

我个人习惯,还会装一个 ros_gz_bridge 的源码包,方便以后调试。不过现在不急,后面用到的时候再说。

核心逻辑: ROS2 和 Gazebo 之间通过 ros_gz_bridge 进行通信。Gazebo 里的话题,会被桥接到 ROS2 里,反之亦然。这样,咱们的导航算法才能控制仿真里的机器人。

2.4 Nav2 源码编译

终于到重头戏了。Nav2 是导航系统的核心。我建议你从源码编译,而不是直接装二进制包。为什么?因为源码编译可以让你看到底层实现,出了问题也能自己改。

首先,创建一个工作空间。

mkdir -p ~/nav2_ws/src
cd ~/nav2_ws/src

然后,克隆 Nav2 的源码。

git clone https://github.com/ros-planning/navigation2.git --branch humble

注意,一定要指定 --branch humble,不然你可能会拉到 Rolling 版本,那就不兼容了。

接下来,安装依赖。

cd ~/nav2_ws
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble

如果提示 rosdep 没装,先装一下。

sudo apt install python3-rosdep

最后,编译。

cd ~/nav2_ws
colcon build --symlink-install

编译过程可能会比较长,取决于你的电脑性能。我第一次编译的时候,等了将近20分钟。

编译完成后,别忘了 source 环境。

echo "source ~/nav2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
避坑指南: 我曾经在编译时遇到 libqt5 相关的错误,原因是系统里缺少一些 GUI 依赖。解决办法是:sudo apt install qtbase5-dev libqt5svg5-dev。如果你也遇到类似问题,可以试试。

2.5 本章知识体系

为了让你更直观地理解这四者的关系,我画了一张图。

Ubuntu 22.04 LTS 操作系统基础层 ROS2 Humble 通信框架、工具链、消息传递 Gazebo Ignition Fortress 物理仿真、传感器模拟 Nav2 导航系统 路径规划、定位、控制 ros_gz_bridge

这张图很清楚地展示了咱们的软件栈:Ubuntu 在最底层,ROS2 在中间层,Gazebo 和 Nav2 并列在上层,通过 ros_gz_bridge 进行数据交换。说白了,就是 Ubuntu 提供基础环境,ROS2 负责通信,Gazebo 模拟世界,Nav2 负责让机器人动起来。

好了,环境搭好了,咱们就可以开始真正的仿真和导航联调了。记住,这一步是基础,基础不牢,地动山摇。我当年就是在这上面吃了不少亏,所以希望你一次搞定。

总结一下:
  • Ubuntu 22.04 是基石,必须稳定。
  • ROS2 Humble 是骨架,负责所有节点的通信。
  • Gazebo Fortress 是眼睛和身体,提供仿真环境。
  • Nav2 是大脑,负责决策和导航。

可可精品资料库