一、课程导论与环境搭建:路径规划概述、避障场景分类、Python与ROS环境配置

大家好,欢迎来到《避障场景下的路径规划实战》的第一章。

说实话,每次带新人入门,我都要先问一个问题:你为什么要学路径规划?

是为了让机器人自己找到路?还是为了让它不撞墙?其实这两件事,本质上是一回事。路径规划,说白了就是在“能走”和“不能走”之间,找到一条最优的路。我做了这么多年机器人,最深的体会就是——规划做不好,机器人就是个“盲人”。

1.1 路径规划到底在解决什么问题?

我们先看一个最简单的场景:你让一个扫地机器人从客厅去厨房。它需要知道——

  • 客厅在哪?厨房在哪?
  • 中间有没有桌子腿、电线、拖鞋?
  • 怎么走最近?
  • 如果拖鞋突然被踢到路中间,怎么办?

这些问题,就是路径规划要解决的。我个人习惯把路径规划拆成三个层次:

  1. 全局规划:先看地图,找一条大方向上的路。比如从A到B,先走走廊再进房间。
  2. 局部规划:边走边看,遇到障碍物临时躲开。比如前面有把椅子,绕一下。
  3. 控制执行:把规划出来的路径,变成电机转动的指令。说白了就是“怎么走”。

嗯,这里要注意:全局规划和局部规划是配合着用的。光有全局规划,遇到动态障碍物就傻眼;光有局部规划,容易走进死胡同。我在项目中遇到过好几次,就是因为全局路径没规划好,机器人卡在角落里出不来。

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
注意: 安装过程中如果遇到网络问题,可以尝试更换镜像源。我曾经在配置rosdep时卡了很久,后来发现是网络代理的问题。如果你在公司内网,记得配置好代理。

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 本章知识体系

为了让你更直观地理解本章的内容,我画了一张图:

第一章:课程导论与环境搭建 - 知识体系 路径规划实战 路径规划概述 全局规划 局部规划 控制执行 避障场景分类 静态 vs 动态 结构化 vs 非结构化 环境配置 Python 3.8+ ROS Noetic 工作空间 目标:掌握路径规划基础 + 搭建开发环境

这张图把本章的核心内容串起来了。你看到没?路径规划、避障场景、环境配置,这三块是相互支撑的。没有环境,理论就是空谈;没有理论,环境就是摆设。

1.6 本章小结

好,我们来捋一捋这一章讲了什么:

  • 路径规划:就是让机器人从A到B,同时避开障碍物。分全局规划和局部规划。
  • 避障场景:静态障碍物和动态障碍物,结构化环境和非结构化环境。不同场景用不同方法。
  • 环境配置:Python + ROS Noetic,这是我们的开发基础。工作空间是项目的家。

说实话,环境配置这一步最枯燥,但也最重要。我见过太多人因为环境没配好,后面学得磕磕绊绊。所以,请务必把这一步走扎实。

下一章,我们会开始写第一个路径规划程序。到时候,你会看到ROS节点之间是怎么通信的,也会亲手控制一个虚拟机器人移动。嗯,想想就有点小激动。

课后练习:

  1. 完成Python和ROS的安装,确保小乌龟示例能正常运行。
  2. 创建一个名为 my_first_ws 的工作空间,并编译成功。
  3. 思考:你身边有哪些避障场景?试着分类(静态/动态,结构化/非结构化)。

可可精品资料库