第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
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”之类的信息在刷屏,那就成了。
.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 的源码包,方便以后调试。不过现在不急,后面用到的时候再说。
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 在最底层,ROS2 在中间层,Gazebo 和 Nav2 并列在上层,通过 ros_gz_bridge 进行数据交换。说白了,就是 Ubuntu 提供基础环境,ROS2 负责通信,Gazebo 模拟世界,Nav2 负责让机器人动起来。
好了,环境搭好了,咱们就可以开始真正的仿真和导航联调了。记住,这一步是基础,基础不牢,地动山摇。我当年就是在这上面吃了不少亏,所以希望你一次搞定。
- Ubuntu 22.04 是基石,必须稳定。
- ROS2 Humble 是骨架,负责所有节点的通信。
- Gazebo Fortress 是眼睛和身体,提供仿真环境。
- Nav2 是大脑,负责决策和导航。
可可精品资料库