第一讲:课程导论与环境准备

大家好,我是你们这门课的老朋友。做机器人这行十几年了,从ROS1一路折腾到ROS2,踩过的坑比走过的路还多。今天咱们正式开始《传感器接入与Nav2导航实战》的第一讲。

这一讲,说白了就是打地基。地基不牢,后面盖的楼再漂亮也得塌。我会带着大家把三件事搞清楚:传感器在导航里到底扮演什么角色、ROS2 Humble怎么装才稳、Nav2这个框架到底长啥样。

1.1 传感器:机器人的“眼睛”和“耳朵”

你想想看,一个机器人要是没有传感器,它就是个瞎子加聋子。导航这件事,核心就一句话:我在哪?我要去哪?我怎么去?这三个问题,全靠传感器来回答。

传感器在导航中的三大核心作用:

  • 定位:告诉机器人“我在哪”。激光雷达、IMU、轮式里程计都在干这事。
  • 感知:告诉机器人“周围有什么”。摄像头、超声波、红外传感器负责这个。
  • 避障:告诉机器人“前面有坑,快绕开”。深度相机、2D/3D激光雷达是主力。

我在项目里遇到过最尴尬的事——一个学生把IMU装反了,结果机器人导航时一直原地转圈,嘴里还念叨“我在哪?我在哪?”。嗯,传感器数据不对,定位就是扯淡。

我的个人习惯:拿到一个新传感器,第一件事不是接ROS,而是先看它的原始数据。比如激光雷达,先看看串口输出对不对,角度和距离值是否合理。这一步能省掉后面80%的调试时间。

1.2 ROS2 Humble:为什么选它?怎么装?

ROS2有很多发行版,Foxy、Galactic、Humble、Iron...我为什么推荐Humble?

原因很简单:稳定。Humble是2022年5月发布的LTS版本,支持到2027年。我在生产项目里用了两年多,没出过什么幺蛾子。Galactic已经EOL了,Iron太新,坑还没填完。Humble刚刚好。

安装步骤(Ubuntu 22.04)

别怕,装ROS2其实就几条命令。我帮你整理好了:

# 1. 设置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

# 2. 添加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

# 3. 安装ROS2 Humble桌面版
sudo apt update
sudo apt install ros-humble-desktop

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

# 5. 验证安装
ros2 run demo_nodes_cpp talker

我曾经踩过的坑:装完ROS2后,发现ros2命令找不到。折腾了半天,原来是忘了source环境变量。记住,每次打开新终端都要source,或者像我一样直接写进.bashrc里。

安装后的检查清单

检查项 命令 预期结果
ROS2版本 ros2 --version 显示humble
话题通信 ros2 run demo_nodes_cpp talker 终端持续输出"Hello World"
服务通信 ros2 run demo_nodes_cpp add_two_ints_server 服务启动成功
colcon编译 colcon --version 显示colcon版本号

1.3 Nav2框架:导航的“大脑”

Nav2,全称Navigation2,是ROS2官方的导航框架。说白了,它就是把传感器数据吃进去,吐出速度指令,让机器人动起来。

我刚开始接触Nav2时,觉得它就是个黑盒子。后来拆开一看,其实就几个核心模块在干活:

  • 全局规划器:负责从A到B的宏观路径规划。我用的是NavFn,简单够用。
  • 局部规划器:负责避开动态障碍物。DWB和Regulated Pure Pursuit是主流选择。
  • 行为树:控制导航的整个流程。说白了就是“先定位,再规划,再控制”这套逻辑。
  • 代价地图:把传感器数据转成机器人能理解的“哪里能走,哪里不能走”。

Nav2的核心工作流:

  1. 传感器数据(激光、里程计、IMU)输入
  2. AMCL模块进行定位,估算机器人位姿
  3. 全局规划器计算从当前位置到目标点的路径
  4. 局部规划器根据实时传感器数据调整路径
  5. 控制器输出速度指令给底盘
  6. 底盘执行,机器人移动

你想想看,这一套流程跑下来,传感器数据要是有一丁点不准,后面全完蛋。所以我才说,传感器接入是Nav2导航的命门。

传感器接入与Nav2导航知识体系 传感器层 激光雷达 IMU / 里程计 深度相机 / 超声波 数据处理层 传感器驱动 数据预处理 坐标变换(TF) Nav2核心层 全局规划器 局部规划器 行为树控制器 输出层 速度指令 / 控制信号 执行层 电机驱动 / 底盘控制 反馈闭环(里程计/IMU数据回传) 数据流方向:传感器 → 处理 → Nav2规划 → 执行 → 反馈闭环 环境准备:ROS2 Humble + Ubuntu 22.04

我的建议:学Nav2别一上来就调参数。先把框架跑通,用仿真环境看看每个模块在干什么。我一般先用Gazebo跑一遍,再上真车。这样出了问题,至少知道是仿真问题还是硬件问题。

1.4 本章小结

这一讲我们干了三件事:

  • 搞清楚了传感器在导航里的角色——定位、感知、避障,缺一不可
  • 装好了ROS2 Humble,并且验证了安装没问题
  • 了解了Nav2框架的核心模块和工作流程

嗯,到这里,基础已经打好了。下一讲我们会开始动手,把第一个传感器——激光雷达——接入ROS2。到时候我会手把手教你怎么写驱动、怎么发布话题、怎么在Rviz2里看到点云数据。

记住我这句话:传感器数据质量,决定了导航系统的天花板。后面30讲,我会带你把这个天花板一步步捅破。

可可精品资料库