一、课程导论与环境搭建:路径规划概述、避障场景分类、Python与ROS环境配置
大家好,欢迎来到《避障场景下的路径规划实战》的第一章。
说实话,每次带新人入门,我都要先问一个问题:你为什么要学路径规划?
是为了让机器人自己找到路?还是为了让它不撞墙?其实这两件事,本质上是一回事。路径规划,说白了就是在“能走”和“不能走”之间,找到一条最优的路。我做了这么多年机器人,最深的体会就是——规划做不好,机器人就是个“盲人”。
1.1 路径规划到底在解决什么问题?
我们先看一个最简单的场景:你让一个扫地机器人从客厅去厨房。它需要知道——
- 客厅在哪?厨房在哪?
- 中间有没有桌子腿、电线、拖鞋?
- 怎么走最近?
- 如果拖鞋突然被踢到路中间,怎么办?
这些问题,就是路径规划要解决的。我个人习惯把路径规划拆成三个层次:
- 全局规划:先看地图,找一条大方向上的路。比如从A到B,先走走廊再进房间。
- 局部规划:边走边看,遇到障碍物临时躲开。比如前面有把椅子,绕一下。
- 控制执行:把规划出来的路径,变成电机转动的指令。说白了就是“怎么走”。
嗯,这里要注意:全局规划和局部规划是配合着用的。光有全局规划,遇到动态障碍物就傻眼;光有局部规划,容易走进死胡同。我在项目中遇到过好几次,就是因为全局路径没规划好,机器人卡在角落里出不来。
1.2 避障场景有哪些?
你想想看,机器人遇到的障碍物其实就两大类:
| 类型 | 例子 | 特点 |
|---|---|---|
| 静态障碍物 | 墙壁、柱子、家具 | 位置固定,可以提前知道 |
| 动态障碍物 | 行人、宠物、移动的推车 | 位置变化,需要实时感知 |
静态障碍物好处理,建图的时候标出来就行。动态障碍物就麻烦多了——你永远不知道下一秒它会往哪走。我记得有一次做仓储机器人,一个工人突然从货架后面冲出来,机器人差点撞上。从那以后,我对动态避障就特别敏感。
避障场景还可以按环境复杂度分:
- 结构化环境:比如工厂车间,通道规整,障碍物少。这种场景相对简单。
- 半结构化环境:比如办公室,有桌椅、有走动的人。这是最常见的场景。
- 非结构化环境:比如野外、废墟,地面不平,障碍物随机。这种最难。
我们的课程会从结构化环境开始,逐步过渡到非结构化环境。别急,一步步来。
1.3 为什么选Python和ROS?
这个问题我经常被问到。我的回答很简单:因为快。
Python写起来快,调试也快。ROS(Robot Operating System)提供了现成的通信框架、工具链和算法库。你想想看,如果每个项目都要从底层写起,那得写到猴年马月?
ROS的核心概念其实就几个:
- 节点(Node):一个程序模块,比如“激光雷达驱动节点”、“路径规划节点”。
- 话题(Topic):节点之间通信的通道,比如“/scan”话题发布激光数据。
- 消息(Message):话题上传递的数据格式,比如激光数据、里程计数据。
- 服务(Service):请求-响应的通信方式,比如“请求地图数据”。
说白了,ROS就是让各个模块各司其职,通过话题和服务互相配合。我刚开始用ROS的时候,觉得节点通信很绕,后来发现——其实就是“发布-订阅”模式,跟公众号差不多。
1.4 环境配置:Python + ROS
好,理论说完了,我们来动手。环境配置是第一步,也是最容易出问题的一步。我曾经因为一个依赖版本不对,折腾了整整一天。所以,请严格按照下面的步骤来。
1.4.1 安装Python
我建议用Python 3.8以上版本。Ubuntu 20.04自带Python 3.8,如果你用其他系统,可以去官网下载。
# 检查Python版本
python3 --version
# 安装pip
sudo apt update
sudo apt install python3-pip
# 安装常用科学计算库
pip3 install numpy matplotlib scipy
python3 -m venv myenv 创建虚拟环境。
1.4.2 安装ROS
ROS有多个版本,我们选ROS Noetic(对应Ubuntu 20.04)。如果你用其他Ubuntu版本,请选择对应的ROS版本。
# 1. 设置sources.list
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 2. 设置密钥
sudo apt install curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
# 3. 安装ROS Noetic(完整版)
sudo apt update
sudo apt install ros-noetic-desktop-full
# 4. 初始化rosdep
sudo rosdep init
rosdep update
# 5. 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
# 6. 安装rosinstall
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
1.4.3 创建工作空间
ROS的工作空间(workspace)是存放项目代码的地方。我们创建一个名为 path_planning_ws 的工作空间。
# 创建工作空间
mkdir -p ~/path_planning_ws/src
cd ~/path_planning_ws
# 编译工作空间
catkin_make
# 设置环境变量
echo "source ~/path_planning_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证一下是否安装成功:
# 启动ROS核心
roscore
# 新开一个终端,运行一个小乌龟示例
rosrun turtlesim turtlesim_node
# 再开一个终端,控制小乌龟移动
rosrun turtlesim turtle_teleop_key
如果你能看到一个小乌龟窗口,并且可以用键盘控制它移动,说明ROS安装成功了。
1.5 本章知识体系
为了让你更直观地理解本章的内容,我画了一张图:
这张图把本章的核心内容串起来了。你看到没?路径规划、避障场景、环境配置,这三块是相互支撑的。没有环境,理论就是空谈;没有理论,环境就是摆设。
1.6 本章小结
好,我们来捋一捋这一章讲了什么:
- 路径规划:就是让机器人从A到B,同时避开障碍物。分全局规划和局部规划。
- 避障场景:静态障碍物和动态障碍物,结构化环境和非结构化环境。不同场景用不同方法。
- 环境配置:Python + ROS Noetic,这是我们的开发基础。工作空间是项目的家。
说实话,环境配置这一步最枯燥,但也最重要。我见过太多人因为环境没配好,后面学得磕磕绊绊。所以,请务必把这一步走扎实。
下一章,我们会开始写第一个路径规划程序。到时候,你会看到ROS节点之间是怎么通信的,也会亲手控制一个虚拟机器人移动。嗯,想想就有点小激动。
课后练习:
- 完成Python和ROS的安装,确保小乌龟示例能正常运行。
- 创建一个名为
my_first_ws的工作空间,并编译成功。 - 思考:你身边有哪些避障场景?试着分类(静态/动态,结构化/非结构化)。
可可精品资料库