1. 课程导论与环境准备

各位同学,欢迎来到《激光雷达与Nav2仿真联调指南》的第一章。我是你们这门课的老朋友,一个在机器人行业摸爬滚打了七八年的工程师。今天咱们不聊虚的,直接动手把地基打牢。

这门课的核心,说白了就是让你在电脑里跑一个完整的机器人——带激光雷达、能自主导航、还能避障的那种。你想想看,不用买几千块的硬件,就能把整个系统调通,这感觉多爽?

但前提是,你得先把环境搭好。这一步我见过太多人卡住,一卡就是两三天。所以第一章,咱们稳扎稳打,把Ubuntu、ROS2 Humble、Gazebo和Nav2源码全部搞定。

本章核心目标:搭建一个可复用的仿真开发环境,确保后续所有章节的代码都能在这个环境下正常运行。

1.1 激光雷达与Nav2仿真联调概述

先说说咱们要做什么。激光雷达,就是机器人的眼睛;Nav2,就是机器人的大脑。仿真联调,就是让这两个东西在虚拟世界里先配合起来。

我个人习惯把整个流程分成三层:

  • 感知层:激光雷达扫描周围环境,输出点云数据。
  • 规划层:Nav2接收点云,构建地图,规划路径。
  • 执行层:控制机器人沿着路径走,同时避障。

听起来简单?嗯,这里要注意。实际联调时,每一层都可能出问题。我在项目中遇到过激光雷达数据频率不对,导致Nav2直接罢工的情况。所以咱们这门课,就是要把这些坑一个个填平。

激光雷达与Nav2仿真联调知识体系 感知层 规划层 执行层 激光雷达驱动 点云数据输出 地图构建 路径规划 运动控制 避障执行 联调核心:确保三层之间的数据流(话题/服务/动作)完全对齐 任何一层断连,整个系统都会瘫痪

1.2 Ubuntu与ROS2 Humble安装

操作系统这块,我建议你直接用Ubuntu 22.04 LTS。为什么?因为ROS2 Humble官方支持的就是这个版本。别问我能不能用20.04,能是能,但你会遇到一堆依赖问题。我曾经为了省事在20.04上硬装Humble,结果折腾了两天——不值得。

我的建议:如果你用的是Windows或macOS,直接装虚拟机(VMware或VirtualBox),分配至少4核CPU、8GB内存、50GB硬盘。别用WSL2,虽然能用,但Gazebo的图形渲染会有问题。

安装步骤其实很简单,我列个清单:

  1. 下载Ubuntu 22.04 ISO,制作启动U盘或直接装虚拟机。
  2. 安装系统,语言选英文(避免路径中文乱码)。
  3. 换源,国内用户建议换成清华或阿里源,不然下载慢到怀疑人生。
  4. 安装ROS2 Humble,按官方文档走就行。

这里我贴一下核心命令,你直接复制执行:

# 设置locale
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

# 添加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桌面版(包含rqt、rviz等工具)
sudo apt update
sudo apt install ros-humble-desktop

# 安装开发工具
sudo apt install ros-dev-tools

# 配置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

注意:安装过程中如果提示依赖冲突,不要用 apt --fix-broken install 暴力解决。先看看冲突的是什么包,手动处理。我见过有人把系统搞崩了,最后只能重装。

装完之后,验证一下:

ros2 run demo_nodes_cpp talker

如果能看到“Publishing: 'Hello World'”之类的输出,说明ROS2已经跑起来了。

1.3 Gazebo与Nav2源码编译

Gazebo是仿真环境,Nav2是导航框架。这两个东西,我建议你从源码编译。为什么?因为apt安装的版本往往比较旧,而且有些补丁没打上。咱们做联调,版本一定要新。

1.3.1 编译Gazebo

Gazebo现在叫Gazebo Classic(因为新出了Gazebo Ignition),但咱们用Classic就行,稳定。

# 安装依赖
sudo apt install build-essential cmake git
sudo apt install libignition-math6-dev libsdformat9-dev
sudo apt install libgazebo11-dev

# 从源码编译Gazebo(这一步比较慢,建议挂代理)
git clone https://github.com/osrf/gazebo.git -b gazebo11
cd gazebo
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install

编译时间取决于你的机器配置。我当年用一台4核笔记本,编译了将近一个小时。所以,趁这个时间你可以去泡杯咖啡,或者看看文档。

避坑指南:编译Gazebo时,如果报错找不到 ignition-math6,别慌。先执行 sudo apt search ignition 看看你系统里有什么版本。Ubuntu 22.04默认是ignition-math6,但如果你之前装过其他版本,可能会有冲突。

1.3.2 编译Nav2

Nav2是ROS2的导航栈,咱们直接从GitHub拉源码:

# 创建工作空间
mkdir -p ~/nav2_ws/src
cd ~/nav2_ws/src

# 克隆Nav2源码
git clone https://github.com/ros-planning/navigation2.git --branch humble

# 安装依赖
cd ~/nav2_ws
rosdep install -y -r -q --from-paths src --ignore-src

# 编译
colcon build --symlink-install

# 配置环境
echo "source ~/nav2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

这里有个细节:--symlink-install 参数很重要。它让你修改Python脚本后不用重新编译,直接生效。调试时能省不少时间。

1.4 环境验证

装完不是终点,得验证一下能不能跑。我习惯写一个简单的测试:

# 启动Gazebo空世界
gazebo --verbose

# 另开终端,启动Nav2的示例
ros2 launch nav2_bringup tb3_simulation_launch.py

如果能看到TurtleBot3在Gazebo里出现,并且Rviz2里显示地图和路径,那恭喜你,环境已经搭好了。

常见问题排查:

  • Gazebo黑屏:检查显卡驱动,或者用 export LIBGL_ALWAYS_SOFTWARE=1 强制软件渲染。
  • Nav2启动报错:大概率是依赖没装全,重新执行 rosdep install。
  • 话题对不上:用 ros2 topic list 看看激光雷达话题是不是 /scan,Nav2默认订阅的就是这个。

好了,第一章的内容就到这里。环境搭好了,后面咱们才能放开手脚去调。记住,这一步慢一点没关系,基础打牢了,后面才能跑得快。