课程导论与开发环境搭建
大家好,我是你们这门课的主讲。今天咱们正式开篇。
做无人车航点任务,说白了就是让车自己知道「我要去哪,到了该干嘛」。你想想看,一辆小车,你告诉它先去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 本章小结
这一章咱们干了三件事:
- 理解了航点任务的核心逻辑——状态机流转
- 搭好了ROS2 + Python的开发环境
- 启动了Gazebo和Rviz2仿真环境
说白了,环境搭好了,后面写代码才有地方跑。我见过太多人一上来就写航点规划算法,结果环境没配好,连个节点都跑不起来——那才是真浪费时间。
下一章,咱们开始写第一个ROS2节点,让小车动起来。嗯,先卖个关子,到时候你会看到,让车走直线其实没那么简单。