课程导论与开发环境搭建

大家好,我是你们这门课的主讲。今天咱们正式开篇。

做无人车航点任务,说白了就是让车自己知道「我要去哪,到了该干嘛」。你想想看,一辆小车,你告诉它先去A点拍照,再去B点停靠,最后回到起点充电——这就是航点任务加动作序列。我在实际项目中遇到过不少团队,代码写得挺漂亮,结果车跑起来要么撞墙,要么动作执行错乱。为什么?底层环境没搭好,后面全是坑。

所以第一章,咱们先把地基夯实。

1.1 无人车航点任务概述

航点任务,英文叫Waypoint Mission。核心就三件事:

  • 导航到点:车从当前位置移动到目标坐标
  • 执行动作:到达后做什么(拍照、停靠、卸货、等待)
  • 任务切换:完成一个航点,自动跳转到下一个

我习惯把整个流程画成一个状态机。嗯,这里我画了一张图,你看一眼就明白了。

空闲 导航中 动作执行 收到任务 到达航点 动作完成 / 任务结束 空闲状态 导航状态 动作状态

这张图就是整个课程的核心逻辑。你后面写的所有代码,本质上都是在实现这个状态机的流转。

重点理解:航点任务不是简单的「走到点就完事」。真正的难点在于动作序列的编排和异常处理。比如车到了A点,但相机故障拍不了照,怎么办?是跳过还是重试?这些我们后面会细讲。

1.2 ROS2与Python环境配置

好,理论说完了,咱们动手。

ROS2现在主流是Humble版本。我个人建议用Ubuntu 22.04 + ROS2 Humble,这个组合最稳。我曾经见过有人用Ubuntu 20.04硬装Humble,结果依赖冲突搞了三天——别学他。

1.2.1 安装ROS2 Humble

# 设置编码
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8

# 添加ROS2源
sudo apt install software-properties-common
sudo add-apt-repository universe

# 安装ROS2
sudo apt install ros-humble-desktop

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

小技巧:安装完成后,运行 ros2 run demo_nodes_cpp talker 测试一下。如果能听到「Hello World」,说明环境OK。

1.2.2 Python环境准备

ROS2对Python的支持很好。但要注意,ROS2 Humble默认用的是Python 3.10。我建议你创建一个虚拟环境,避免和系统Python打架。

# 安装Python虚拟环境
sudo apt install python3-venv python3-pip

# 创建虚拟环境(我习惯放在~/ros2_ws下)
cd ~
python3 -m venv ros2_venv
source ros2_venv/bin/activate

# 安装常用包
pip install numpy opencv-python transforms3d

注意:ROS2的Python包(比如rclpy)不要用pip装!必须通过apt或源码编译。否则会出现版本不匹配,节点跑不起来。

1.2.3 创建工作空间

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
source install/setup.bash

嗯,这里有个坑。我第一次用colcon build时,忘了先装colcon。结果报错说找不到命令。你记得提前装:sudo apt install python3-colcon-common-extensions

1.3 仿真环境搭建(Gazebo + Rviz2)

没有真车怎么办?仿真。Gazebo负责物理模拟,Rviz2负责数据可视化。两者配合,基本能模拟90%的真实场景。

1.3.1 安装Gazebo与Rviz2

# 安装Gazebo(ROS2版叫ignition)
sudo apt install ros-humble-gazebo-ros-pkgs

# 安装Rviz2
sudo apt install ros-humble-rviz2

注意版本:ROS2 Humble对应的是Gazebo Fortress(也叫Ignition Fortress)。别装成Gazebo Classic,那个是ROS1时代的产物。

1.3.2 启动仿真环境

我习惯先启动Gazebo,再启动Rviz2。顺序反了有时候会连不上话题。

# 终端1:启动Gazebo空世界
ros2 launch gazebo_ros gazebo.launch.py

# 终端2:启动Rviz2
rviz2

Rviz2启动后,记得添加显示组件。比如你要看机器人模型,就加一个RobotModel;要看激光雷达数据,就加一个LaserScan。这些操作很简单,点左下角的「Add」按钮就行。

1.3.3 加载无人车模型

咱们课程用的是差速驱动小车模型。你可以在我的GitHub仓库里找到URDF文件。加载命令如下:

# 生成小车模型
ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:="$(cat ~/ros2_ws/src/your_robot/urdf/car.urdf)"

# 在Gazebo中生成小车
ros2 run gazebo_ros spawn_entity.py -topic robot_description -entity my_car

调试技巧:如果小车在Gazebo里不动,先检查 /cmd_vel 话题有没有数据。用 ros2 topic echo /cmd_vel 看一眼。我遇到过好几次,代码写对了但话题名拼错了,车当然不动。

1.4 本章小结

这一章咱们干了三件事:

  1. 理解了航点任务的核心逻辑——状态机流转
  2. 搭好了ROS2 + Python的开发环境
  3. 启动了Gazebo和Rviz2仿真环境

说白了,环境搭好了,后面写代码才有地方跑。我见过太多人一上来就写航点规划算法,结果环境没配好,连个节点都跑不起来——那才是真浪费时间。

下一章,咱们开始写第一个ROS2节点,让小车动起来。嗯,先卖个关子,到时候你会看到,让车走直线其实没那么简单。


专注资料整理