第1章:路径表示方法——给机器人一条清晰的路

大家好,我是你们的老朋友。今天咱们聊聊路径跟踪里最基础、也最容易被忽视的一环——路径的数学表示。

你想想看,机器人要沿着一条路走,首先得知道这条路长什么样吧?就像你开车去一个地方,导航得先告诉你路线。机器人也一样,它需要一条“数学上可描述”的路径。我个人习惯把路径表示比作“给机器人画地图”,画得越清楚,它跑得越稳。

1.1 直线路径——最简单,但别小看它

直线路径,说白了就是两点之间拉一条线。数学上就是:

起点 P0 = (x0, y0)
终点 P1 = (x1, y1)
路径参数化:P(s) = P0 + s * (P1 - P0),s ∈ [0, 1]

这里的 s 是个好东西。s=0 时在起点,s=1 时在终点。s 从 0 到 1 变化,机器人就沿着直线走过去了。

我的小经验: 实际项目中,直线路径往往用于“归位”或“初始对准”。比如AGV小车从充电桩出发,先走一段直线校准方向。我做过一个项目,直线路径上加了速度规划,结果发现s的增量不均匀会导致机器人一顿一顿的。后来我改用固定时间步长插值,问题就解决了。

1.2 圆弧路径——转弯的艺术

机器人不可能永远走直线。遇到弯道怎么办?圆弧路径就派上用场了。

圆弧的数学表示通常用圆心、半径和起始角度:

圆心 C = (cx, cy)
半径 R
起始角度 θ0,终止角度 θ1
路径参数化:P(θ) = (cx + R*cos(θ), cy + R*sin(θ)),θ ∈ [θ0, θ1]

嗯,这里要注意:圆弧的方向有顺时针和逆时针之分。我刚开始做的时候,有一次把方向搞反了,机器人直接往墙上怼……从那以后,我每次都会在代码里显式标注方向。

避坑指南: 我曾经在圆弧路径上吃过亏——当起始角度和终止角度跨越0度边界时(比如从350°到10°),直接相减会得到340°的差值,但实际上只转了20°。一定要做角度归一化处理!

1.3 多项式曲线——让路径更平滑

直线和圆弧虽然简单,但很多时候不够灵活。比如你要让机器人走一个S形弯,或者避开障碍物,这时候多项式曲线就香了。

最常用的是三次多项式:

x(s) = a0 + a1*s + a2*s² + a3*s³
y(s) = b0 + b1*s + b2*s² + b3*s³

为什么是三次?因为三次多项式可以保证位置和速度的连续性。你想想看,如果路径在连接点处速度突变,机器人就会“咯噔”一下,这在精密控制里是绝对不允许的。

我个人习惯用五次多项式,虽然计算量大一点,但加速度也连续了,跑起来更顺滑。有一次做医疗机器人的路径规划,病人躺在上面,如果加速度突变,病人会感到不适。换成五次多项式后,体验感直接拉满。

1.4 路径离散化与插值——把连续路径变成离散点

好了,现在我们有了一条数学上完美的路径。但机器人控制器是数字的,它只能处理离散的点。怎么办?离散化。

说白了,就是把连续的路径切成一小段一小段。比如每隔0.01米取一个点:

for s = 0 to 1 step 0.01:
    point = P(s)
    store point in path_points[]

但这里有个坑:如果路径曲率变化大,均匀采样会导致弯道处点太少,直线处点太多。我建议用自适应采样——曲率大的地方多采点,曲率小的地方少采点。

核心要点: 离散化后的路径点,还需要插值才能用于控制。常用的插值方法有线性插值、三次样条插值。我个人偏爱三次样条,因为它能保证二阶导数连续,控制起来更平滑。

1.5 路径坐标系——Frenet坐标系与笛卡尔坐标系

终于到了这一节的重头戏。路径跟踪里,坐标系的选择直接影响控制器的设计难度。

笛卡尔坐标系就是我们熟悉的x-y坐标系。机器人位置用(x, y)表示,方向用θ表示。直观,但有个问题:路径跟踪误差不好描述。

举个例子:机器人偏离路径1米,这个“1米”是横向的还是纵向的?在笛卡尔坐标系里,你得算一堆几何关系才能搞清楚。

Frenet坐标系就不一样了。它沿着路径走,用两个量描述机器人状态:

  • s:沿路径走了多远(纵向距离)
  • d:偏离路径多远(横向距离)

你看,是不是直观多了?d=0表示在路径上,d>0表示偏左,d<0表示偏右。控制目标就是让d趋近于0。

我记得第一次用Frenet坐标系做路径跟踪时,感觉整个世界都清晰了。以前在笛卡尔坐标系里调PID参数,调得我头大。换成Frenet坐标系后,横向控制和纵向控制可以分开调,效率翻倍。

实用技巧: 从笛卡尔坐标到Frenet坐标的转换,核心是找到路径上离机器人最近的点(投影点)。这个投影点的s值就是机器人的纵向位置,机器人与投影点的距离就是横向偏差。我一般用二分法找投影点,速度快,精度也够。

1.6 本章知识体系总览

说了这么多,咱们用一张图把整个知识体系串起来。下面是我手绘的SVG框架图,展示了路径表示方法的核心逻辑:

路径表示方法知识体系 路径的数学表示 直线路径 圆弧路径 多项式曲线 三次/五次多项式 路径离散化与插值 均匀采样 自适应采样 三次样条插值 路径坐标系 笛卡尔坐标系 (x, y, θ) Frenet坐标系 (s, d) 路径跟踪控制

这张图把咱们这一章的内容串起来了。从路径的数学表示开始,经过离散化与插值,再到坐标系的选择,最后服务于路径跟踪控制。每一步都有它的道理,缺一不可。

1.7 本章小结

好,咱们来捋一捋这一章的核心内容:

  • 直线路径:最简单,适合初始对准和归位
  • 圆弧路径:处理转弯,注意方向归一化
  • 多项式曲线:三次保证位置速度连续,五次保证加速度连续
  • 离散化与插值:把连续路径变成离散点,自适应采样更实用
  • Frenet坐标系:把横向和纵向控制解耦,调参更轻松

我个人觉得,路径表示是整个路径跟踪的基石。地基没打好,后面再好的控制算法也白搭。所以这一章的内容,建议大家多花点时间消化。

可可精品资料库