一、轨迹规划概述:什么是轨迹规划?为什么需要轨迹规划?

大家好,我是你们这门课的主讲。今天咱们聊聊轨迹规划。

说实话,我第一次接触“轨迹规划”这个词,是在读研的时候。导师扔给我一个机械臂,说:“让它自己把桌上的杯子拿起来。”我当时心想,这不就是写个路径点,让电机转过去吗?结果一上手才发现,事情远没那么简单。

嗯,咱们今天就把这事儿彻底讲明白。

1.1 什么是轨迹规划?

先给个最直白的定义:轨迹规划,就是让一个运动体(机器人、汽车、无人机)从A点走到B点,同时还要考虑怎么走、走多快、走得多平滑。

你想想看,如果只是“从A到B”,那太简单了。直接一条直线走过去不就完了?但现实世界哪有这么理想?

  • 有障碍物——你得绕开吧?
  • 有速度限制——拐弯太快会翻车吧?
  • 有加速度限制——急停急起,电机受不了,乘客也受不了。

所以,轨迹规划要解决的核心问题其实是三个:

  1. 路径——走哪条路?
  2. 速度——什么时候快、什么时候慢?
  3. 时间——整个运动花多长时间?

我个人习惯把轨迹规划比作“写剧本”:路径是演员的走位,速度是台词的节奏,时间是整场戏的时长。三者缺一不可。

1.2 为什么需要轨迹规划?

这个问题,我当年也问过自己。直接给电机发位置指令不行吗?

行,但后果很严重。

我在项目中遇到过一件事:一个刚入行的同事,给AGV小车写了个直线运动指令。结果小车启动时“哐”一声巨响,整个车身剧烈抖动。为什么?因为位置指令是阶跃信号,电机瞬间要输出巨大扭矩,机械结构根本扛不住。

说白了,没有轨迹规划的运动,就像让一个没学过跳舞的人直接上台表演——要么动作僵硬,要么直接摔跤。

具体来说,轨迹规划的必要性体现在这几个方面:

需求 没有轨迹规划会怎样? 有了轨迹规划会怎样?
安全性 可能撞到障碍物或人 自动避障,保证安全距离
平滑性 运动冲击大,机械磨损快 加速度连续,运动丝滑
效率 走冤枉路,浪费时间 路径最优,时间最短
能耗 频繁加减速,耗电高 匀速巡航,节能省电

我曾经吃过一次亏:在做无人机编队时,忽略了轨迹的加速度连续性。结果一架无人机在转弯时因为加速度突变,直接失控撞上了另一架。从那以后,我每次做轨迹规划都会检查加速度曲线是否平滑。

1.3 轨迹规划的应用领域

说实话,轨迹规划的应用范围比大多数人想象的要广得多。我简单列几个典型的:

1.3.1 工业机器人

这是轨迹规划最传统的应用场景。焊接、喷涂、搬运、装配,每一个动作背后都有轨迹规划在支撑。

我记得有一次去工厂调试,看到一台六轴机器人正在做弧焊。它的末端轨迹是一个完美的圆弧,而且速度均匀。工人师傅跟我说:“这机器人比老焊工还稳。”我当时心里挺自豪的——这就是轨迹规划的功劳。

1.3.2 自动驾驶

自动驾驶里的轨迹规划,比工业机器人复杂得多。因为环境是动态的,有行人、有自行车、有突然加塞的车。

你想想看,一辆车以60km/h的速度行驶,前方突然出现一个障碍物。留给轨迹规划的时间可能只有几百毫秒。这时候,规划算法必须在极短时间内算出一条安全、舒适、可行的避障轨迹。

1.3.3 无人机

无人机的轨迹规划,又多了个维度——高度。而且无人机对风扰特别敏感,规划出来的轨迹如果不够平滑,飞控根本跟不住。

我做无人机航拍项目时,就遇到过这个问题。规划出来的路径在理论上是连续的,但实际飞起来,无人机在拐弯处抖得厉害。后来发现是轨迹的加加速度(Jerk)太大了。嗯,这里要注意,对于无人机这类欠驱动系统,轨迹的平滑性比位置精度更重要。

1.3.4 服务机器人

扫地机器人、送餐机器人、导览机器人……这些大家生活中应该都见过。它们的轨迹规划更注重“人机共融”——不能撞到人,不能吓到人,最好还能让人觉得“这机器人挺聪明”。

一个小技巧:在做服务机器人的轨迹规划时,我建议把“人类舒适度”作为一个优化目标。比如,机器人靠近人时速度要降低,转弯半径要加大。这些细节虽然不会写在算法里,但用户能明显感觉到。

1.4 轨迹规划的核心逻辑

说了这么多,咱们来画个图,把轨迹规划的知识体系串起来。

轨迹规划核心知识体系 轨迹规划 路径:走哪条路? 速度:何时快慢? 时间:耗时多少? 主要应用领域 工业机器人 自动驾驶 无人机 服务机器人 关键技术 多项式插值 B样条曲线 A* / RRT 优化方法 约束条件:运动学 | 动力学 | 安全 | 能耗 | 实时性

这张图基本概括了轨迹规划要学的东西。你看,从三个核心问题出发,延伸到不同应用领域,再到具体的技术手段。咱们这门课,就是要把这张图里的每一个节点都讲透。

1.5 一个简单的例子

光说不练假把式。我给大家看一个最简单的轨迹规划例子——梯形速度规划。

假设一个机器人要从位置0走到位置10,最大速度是2,最大加速度是1。那么它的运动过程是这样的:

  • 先以加速度1加速到速度2(耗时2秒,走了2米)
  • 然后匀速运动(走了6米,耗时3秒)
  • 最后以减速度1减速到0(耗时2秒,走了2米)

用代码实现就是:

def trapezoidal_profile(total_distance, max_vel, max_acc):
    # 计算加速段距离
    acc_distance = max_vel**2 / (2 * max_acc)
    
    # 判断是否能达到最大速度
    if acc_distance * 2 <= total_distance:
        # 有匀速段
        cruise_distance = total_distance - 2 * acc_distance
        cruise_time = cruise_distance / max_vel
        acc_time = max_vel / max_acc
        total_time = 2 * acc_time + cruise_time
    else:
        # 没有匀速段,三角形速度曲线
        max_vel_actual = sqrt(max_acc * total_distance)
        acc_time = max_vel_actual / max_acc
        total_time = 2 * acc_time
    
    return total_time

这段代码虽然简单,但它是很多复杂轨迹规划算法的基础。我在做AGV调度系统时,底层用的就是这种梯形规划,上层再叠加避障逻辑。

一个小建议:初学者不要一上来就搞复杂的优化算法。先把梯形规划、S形规划这些基础搞明白,理解“位置-速度-加速度”之间的关系。地基打牢了,后面学什么都快。

1.6 本章小结

好了,咱们来捋一捋今天讲了什么。

轨迹规划,说白了就是回答三个问题:走哪条路?走多快?花多久?它之所以重要,是因为没有规划的运动要么不安全、要么不平滑、要么不高效。

从工业机器人到自动驾驶,从无人机到服务机器人,轨迹规划无处不在。而且随着机器人越来越智能,对轨迹规划的要求也越来越高——不仅要能走,还要走得聪明、走得优雅。

下一章,咱们会深入讲轨迹规划的数学基础。嗯,别怕,我会用最通俗的方式讲清楚。


可可精品资料库