想象这个画面:你是一位专车司机,刚接到一位端着满满咖啡杯的乘客。乘客急着赶飞机,却对你说:“师傅,咖啡一滴都不许洒。”你必须在红绿灯、限速牌、弯道的重重约束下,找到一条既快又稳的路线。这个“怎么开”的智慧——什么时候加速、什么时候收油、过弯走多大弧线——就是轨迹优化的日常版本。它不回答“去哪条路”,而回答“每一步怎么走”。 机器人世界里的轨迹优化,正是同一件事。规划出一条几何路径只是画好了地图,而轨迹优化要在这条地图上,给每一个瞬间配上合适的速度、加速度和转向,让机械臂高速作业时不抖不飘,让无人车变道时乘客不晕,让四足机器人跨障碍时不摔倒。它决定了机器人从“能走”到“走得好”的距离。

岗位关联

掌握轨迹优化,意味着你能让机器人在满足物理限制的前提下,变得更快、更稳、更省能。这是机器人控制算法工程师的核心竞争力,也是具身智能从实验室走向真实产品的关键一环。

目录
  1. 可视化演示
  2. 轨迹优化基础
  3. 数学建模
  4. 约束条件
  5. 目标函数
  6. 求解算法
  7. 平滑性分析
  8. 工程实践
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示轨迹优化中平滑与抖动对比、速度加速度约束边界及时间最优轨迹规划过程,支持模式切换。

本节配有交互动效(进入视口后自动加载,约 3KB)。

轨迹平滑对比 未优化轨迹存在高jerk突变 优化后轨迹平滑减少冲击 min∫||jerk||²dt jerk最小化提升运动平稳性

轨迹优化基础

老司机接到一单生意,乘客说“走二环高架”,这就定下了一条“路径”。可真正考验师傅手艺的,是在高架上什么时候加速、弯道前何时收油、刹车踩多深。这些“怎么开”的细节,就是“轨迹”。同一个起点和终点,不同的开法,乘客的舒适度和到达时间截然不同。机器人世界也一样:路径是空间中的一条几何线——机械臂末端经过哪些位置;轨迹则在这条线上赋予了时间的节奏——每个时刻在哪里、速度多大、加速度多大。

轨迹可以看成一个随时间变化的位置函数。机械臂的轨迹由其每个关节的角度随时间的变化来描述;移动机器人的轨迹则用它在平面上的坐标随时间的变化来描述。我们可以把这个位置函数写成向量形式,每个分量代表一个自由度。

就像网约车的行程单一样,“走哪条路”只是地图,真正体现专业水准的是时间表上的速度曲线。有了这个随时间变化的位置函数,接下来才能给驾驶打分、设定限制、找出真正又稳又快的行车方案。轨迹优化,优化的就是这个“时间表”。

q(t)=[q1(t),q2(t),…,qn(t)]T,t∈[0,T]\displaystyle q(t) = [q_1(t), q_2(t), \ldots, q_n(t)]^T, \quad t \in [0, T]
  1. 位置函数$q_i(t)$ 表示第 $i$ 个自由度在时刻 $t$ 的位置取值,比如某个关节的角度。
    qi(t)\displaystyle q_i(t)
  2. 向量形式把 $n$ 个自由度排列成列向量 $q(t)$,一次性描述整个系统的状态。
    q(t)=[…]T\displaystyle q(t) = [ \ldots ]^T
  3. 时间区间$t \in [0, T]$ 表示轨迹从起始时刻 $0$ 持续到任务结束时刻 $T$。
    [0,T]\displaystyle [0, T]

数学建模

要交给算法一个清晰的任务,老司机得先把乘客的模糊需求翻译成具体指标:“快”是多快?“稳”是多稳?“不能压线”的边界在哪?把这些需求变成数学语言,就是建模。轨迹优化的建模,核心要回答三个问题:优化什么变量、用什么函数评价好坏、有哪些必须遵守的边界。

在数学上,决策变量通常是轨迹函数本身或其离散化表示,评价函数称为目标函数,边界条件称为约束。把它们放在一起,就形成了一个标准的优化问题:在所有满足约束的轨迹中,找到让目标函数值最小的那一个。

乘客把“稳”翻译成“加速度别超过某个值”,把“快”翻译成“总时间小于多少分钟”,导航系统就拿到了清晰的优化目标。建模的本质,就是把口头上的驾驶经验变成一台机器能计算的评分规则,让算法知道什么叫“好”。

min⁡q  J(q)s.t.gi(q)≤0,hj(q)=0\displaystyle \min_{q} \; J(q) \quad \text{s.t.} \quad g_i(q) \le 0, \quad h_j(q) = 0
  1. 最小化目标$\min_q$ 表示我们要在可行轨迹中挑选使代价 $J(q)$ 最小的那个轨迹。
    min⁡q\displaystyle \min_{q}
  2. 代价函数$J(q)$ 把“快、省、稳”等诉求换算成一个可比较的数值。
    J(q)\displaystyle J(q)
  3. 不等式约束$g_i(q) \le 0$ 把安全距离、限速上限等表达为必须满足的临界值。
    gi(q)≤0\displaystyle g_i(q) \le 0
  4. 等式约束$h_j(q) = 0$ 表示起点位置、终点姿态这类必须完全相等的条件。
    hj(q)=0\displaystyle h_j(q) = 0

约束条件

开车上路,不是想怎么开就怎么开。限速牌告诉你速度上限,红绿灯告诉你何时必须停,车道线限制你的横向位置——这些都是行车的“边界条件”。轨迹优化同样有一组边界:关节角度不能超出机械限位,速度不能超过电机极限,末端执行器不能撞到障碍物。这些边界统称为约束。

约束主要分三类。运动学约束来自结构本身,比如关节角度范围、速度与加速度上限;动力学约束来自执行器的物理能力,比如电机最大扭矩、制动系统的热极限;安全约束则来自任务环境,比如避免碰撞、保持安全距离。它们共同划出了一块“可行域”,轨迹必须完全落在这块区域内。

约束就像电子地图中的禁行与限速信息。老司机必须尊重它们,规划出的路线不能在禁行区域里穿行,否则订单无法完成。有了约束,我们才能确保优化出来的轨迹是车辆真正跑得通的,而不是数学上好听、物理上做不到的“空中楼阁”。

∣q˙(t)∣≤vmax⁡,∣q¨(t)∣≤amax⁡\displaystyle |\dot{q}(t)| \le v_{\max}, \qquad |\ddot{q}(t)| \le a_{\max}
  1. 速度极限$|\dot{q}(t)| \le v_{\max}$ 相当于路段的最高限速,任何时刻的移动速度都不能突破。
    ∣q˙(t)∣≤vmax⁡\displaystyle |\dot{q}(t)| \le v_{\max}
  2. 加速度极限$|\ddot{q}(t)| \le a_{\max}$ 是“油门和刹车”的幅度上限,防止速度变化过猛。
    ∣q¨(t)∣≤amax⁡\displaystyle |\ddot{q}(t)| \le a_{\max}
  3. 绝对值含义绝对值符号表示无论正向还是反向运动,都不能越过上下边界。
    ∣⋅∣≤limit\displaystyle |\cdot| \le \text{limit}

目标函数

同一条路,三位司机有三种开法:有人追求最快,大脚油门、急刹车;有人追求省油,缓缓滑行;有人追求平稳,乘客几乎感觉不到换挡。平台给司机发“评分表”,哪项权重高,司机就会往哪个方向优化。轨迹优化里的目标函数,就是这张可调节的“评分表”。

常见的评分项有三个:总时间、能量消耗、平滑性。总时间衡量任务完成得快不快;能量项代表执行器的输入做功,越小越省电;平滑性通常用加速度的变化率——也就是冲击——来衡量,冲击越小,动作越柔和。工程师通过调节权重,让算法在快、省、稳之间取得平衡。

平台如果收到很多“驾驶太猛”的投诉,就会调高平滑项的权重 $\gamma$;如果运营成本居高不下,就会调高能耗项的权重 $\beta$。轨迹优化的目标函数就是一张可以随时调参的评分表,引导算法生成符合期望的运动风格。

J(q)=αT+β∫0T∥u(t)∥2dt+γ∫0T∥q...(t)∥2dt\displaystyle J(q) = \alpha T + \beta \int_{0}^{T} \|u(t)\|^2 dt + \gamma \int_{0}^{T} \|\dddot{q}(t)\|^2 dt
  1. 时间代价$T$ 是完成任务的时长,这一项越大代表轨迹越慢。
    αT\displaystyle \alpha T
  2. 能量代价$\int_{0}^{T} \|u(t)\|^2 dt$ 是控制输入的平方积分,衡量执行器消耗的能量。
    β∫0T∥u(t)∥2dt\displaystyle \beta \int_{0}^{T} \|u(t)\|^2 dt
  3. 平滑代价$\int_{0}^{T} \|\dddot{q}(t)\|^2 dt$ 是冲击的平方积分,衡量动作的柔和程度。
    γ∫0T∥q...(t)∥2dt\displaystyle \gamma \int_{0}^{T} \|\dddot{q}(t)\|^2 dt
  4. 权重向量$\alpha, \beta, \gamma$ 由工程师根据任务偏好设定,改变它们就改变了驾驶风格。
    α,β,γ\displaystyle \alpha, \beta, \gamma

求解算法

有了评分表,老司机还得有试车的策略:先凭经验开一段,看看哪里转弯太急、哪里加速太晚,然后修正驾驶手法,一遍遍迭代直到接近理想状态。轨迹优化的求解算法,就是这样的“试车回路”。

常用的求解思路有三类。数值优化方法沿着梯度方向改进轨迹,每次迭代都让代价降低一点;凸优化近似把局部非凸问题转化为凸子问题,交给成熟的凸优化求解器处理;采样法在状态空间里撒点,连接出可行路径后再做平滑。实际工程中,这些方法常常配合使用。

老司机每次试车,方向盘的修正幅度会越来越小,刹车越来越顺,这就是“下降方向加合理步长”的迭代过程。当轨迹不再明显变化时,算法就找到了它眼中的“最优驾驶风格”——一个满足所有约束且代价最小的可行轨迹。

qk+1=qk+αkΔqk\displaystyle q_{k+1} = q_k + \alpha_k \Delta q_k
  1. 当前轨迹$q_k$ 是第 $k$ 轮迭代时的轨迹解。
    qk\displaystyle q_k
  2. 改进方向$\Delta q_k$ 是由目标函数梯度和约束信息计算出的“下降方向”。
    Δqk\displaystyle \Delta q_k
  3. 步长控制$\alpha_k$ 决定沿该方向前进多大步幅。
    αk\displaystyle \alpha_k
  4. 迭代更新$q_{k+1}$ 是经过一次修正后的新轨迹,反复更新直到收敛。
    qk+1=qk+αkΔqk\displaystyle q_{k+1} = q_k + \alpha_k \Delta q_k

平滑性分析

真正的高手司机,副驾驶放一杯水,开完全程一滴不洒。秘诀不在平均速度,而在每次动作切换的过渡是否自然——速度不能突变,加速度也不能突变。机器人学中,这个“平顺程度”用连续性阶来描述:$C^0$ 连续表示位置不跳变,$C^1$ 连续表示速度不跳变,$C^2$ 连续表示加速度也不跳变。加速度一旦跳变,就会产生冲击,让机械臂振动、让乘客前仰后合。

为了构造这种平滑轨迹,工程师常用样条曲线——把轨迹切分成多个小段,每段用低阶多项式表示,再在拼接点处保证各阶导数连续。贝塞尔曲线就是最常用的基函数之一。

最稳的司机开的不是折线,而是所有过渡都浑然一体的流畅曲线。样条就是数学上画这条曲线的工具,让杯子里的水始终保持在杯沿之下。

Bim(t)=(mi)(1−t)m−iti,t∈[0,1]\displaystyle B_i^m(t) = \binom{m}{i} (1-t)^{m-i} t^i, \quad t \in [0, 1]
  1. 组合系数$\binom{m}{i}$ 是二项式系数,控制第 $i$ 个基函数的权重大小。
    (mi)\displaystyle \binom{m}{i}
  2. 幂次项$(1-t)^{m-i} t^i$ 决定曲线在不同参数区间上的插值形状。
    (1−t)m−iti\displaystyle (1-t)^{m-i} t^i
  3. 局部区间$t \in [0,1]$ 表示每个样条段都在自己的局部参数区间内定义。
    [0,1]\displaystyle [0, 1]
  4. 拼接效果多段多项式在节点处保持位置、速度、加速度连续,形成整体平滑的轨迹。
    C2 continuous\displaystyle C^2 \ \text{continuous}

工程实践

理论上的“最优轨迹”再漂亮,也得能在真实路况中落地。老司机要实时看导航、绕开临时施工、迟到时重新选路。机器人量产产品里,轨迹优化的工程化同样要直面三个现实:计算时间有限、传感器存在噪声、环境时刻变化。

把轨迹优化放进完整的控制链路,通常是“感知 → 规划 → 轨迹优化 → 底层跟踪”的流水线。轨迹优化必须在规定的控制周期内算出结果,否则控制器就只能使用过期指令。同时,系统要对噪声和扰动保持鲁棒——传感器给的位置有偏差时,优化出的轨迹不能剧烈抖动。实际设计中还有一个重要的时序预算:

有经验的师傅不会每次都从头规划完整路线,而是基于当前路况在局部快速修正一小段,既应对突发状况又不让整体路线变得僵硬。这正是轨迹优化在真实产品中的角色:在有限的计算预算内,持续输出满足物理极限的高质量运动指令。

tplan+ttrack≤tcycle\displaystyle t_{\text{plan}} + t_{\text{track}} \le t_{\text{cycle}}
  1. 规划时间$t_{\text{plan}}$ 是每周期重新运行轨迹优化所需的时间。
    tplan\displaystyle t_{\text{plan}}
  2. 执行与通信时间$t_{\text{track}}$ 包括底层控制器计算和通信传输的耗时。
    ttrack\displaystyle t_{\text{track}}
  3. 控制周期$t_{\text{cycle}}$ 是系统的控制节拍,如 1ms、10ms 或 100ms。
    tcycle\displaystyle t_{\text{cycle}}
  4. 时序约束两者的总和必须不超过控制周期,系统才能在线稳定运行。
    tplan+ttrack≤tcycle\displaystyle t_{\text{plan}} + t_{\text{track}} \le t_{\text{cycle}}

AI 应用场景

工业机械臂喷涂

阶段:轨迹生成与执行优化

解决的问题:传统人工示教的喷涂轨迹常有抖动和积料,手工调参耗时且依赖老师傅经验。轨迹优化把示教轨迹处理成平滑曲线,限制加速度与冲击,减少材料浪费和表面瑕疵,同时提升生产节拍。

具体案例:某汽车零部件喷涂产线引入轨迹优化后,在保持喷涂质量的前提下循环时间缩短 15%,废品率下降 8%。工程师通过调低目标函数中的平滑权重,在效率与品质之间找到了最佳平衡点。

自动驾驶平稳变道

阶段:决策规划与运动控制衔接层

解决的问题:路测中发现变道逻辑容易急打方向盘,乘客明显不适。轨迹优化在变道过程中对横向加速度与曲率变化施加约束,让车辆在时间最优与乘坐舒适之间取得折中。

具体案例:某 L4 级自动驾驶轻客在高速公路变道场景中加入时间—平滑复合代价函数后,实测乘客晕车指数下降 30%,方向盘修正次数减少 40%。

四足机器人动态步态

阶段:步态生成与足端轨迹规划

解决的问题:四足机器人摆动腿时如果速度突变,容易导致机身晃动甚至摔倒。轨迹优化对摆动腿施加行程约束和冲击代价,使足端轨迹更平滑,提高动态行走的稳定性。

具体案例:实验室中利用优化后的摆腿轨迹,四足机器人上下斜坡时机身姿态震荡幅度显著减小,足端跟踪精度提升约 40%,为后续的跑跳动作打下基础。

Python 演示

python68 行
# 使用 Catmull-Rom 样条平滑原始折线轨迹, 比较冲击度下降import numpy as np  def catmull_rom(p0, p1, p2, p3, n=20):    t = np.linspace(0.0, 1.0, n).reshape(-1, 1)    t2 = t * t    t3 = t2 * t    return 0.5 * (        2.0 * p1 +        (-p0 + p2) * t +        (2.0 * p0 - 5.0 * p1 + 4.0 * p2 - p3) * t2 +        (-p0 + 3.0 * p1 - 3.0 * p2 + p3) * t3    )  def build_trajectory(waypoints, n=50):    pts = []    for i in range(len(waypoints) - 1):        p0 = waypoints[max(i - 1, 0)]        p1 = waypoints[i]        p2 = waypoints[i + 1]        p3 = waypoints[min(i + 2, len(waypoints) - 1)]        frag = catmull_rom(p0, p1, p2, p3, n)        if i < len(waypoints) - 2:            frag = frag[:-1]        pts.append(frag)    return np.vstack(pts)  def line_trajectory(waypoints, n=200):    t = np.linspace(0.0, 1.0, n).reshape(-1, 1)    pts = []    for i in range(len(waypoints) - 1):        p0 = waypoints[i].reshape(2, 1)        p1 = waypoints[i + 1].reshape(2, 1)        pts.append((p0 + (p1 - p0) * t).T)    return np.vstack(pts)  def total_jerk(pts, dt=0.01):    vel = np.diff(pts, axis=0) / dt    acc = np.diff(vel, axis=0) / dt    jerk = np.diff(acc, axis=0) / dt    return float(np.sum(jerk ** 2))  def main():    waypoints = np.array([        [0.0, 0.0],        [1.0, 1.0],        [2.0, 0.5],        [3.0, 1.5]    ])     raw = line_trajectory(waypoints)    smooth = build_trajectory(waypoints, n=100)     jerk_raw = total_jerk(raw)    jerk_smooth = total_jerk(smooth)     print(f"原始折线轨迹冲击: {jerk_raw:.2f}")    print(f"优化后轨迹冲击: {jerk_smooth:.2f}")    print(f"冲击降低: {100.0 * (1.0 - jerk_smooth / max(jerk_raw, 1e-8)):.1f}%")  if __name__ == "__main__":    main()
目的:用 Catmull-Rom 样条把一段折线路径平滑成连续轨迹,并量化冲击度(jerk)的下降幅度,直观展示轨迹优化的价值。
  1. smooth = build_trajectory(waypoints, n=100)用样条在路点之间构造高密度平滑轨迹
  2. raw = line_trajectory(waypoints)构造未经优化的直线折线轨迹作为对照组
  3. jerk_raw = total_jerk(raw)计算原始轨迹的冲击度,折点处会产生极大冲击
  4. jerk_smooth = total_jerk(smooth)计算优化后轨迹的冲击度,反映平滑效果
  5. print()输出两者对比,让优化收益一目了然

常见误区

误区路径规划完成之后就大功告成了,只要选了一条短路径,机器人就能又快又好地到达目标。

正解路径只回答“走哪条线”,不包含时间和速度信息。轨迹优化回答的是“这条线上怎么走”——何时加速、何时减速、加速度多大。一条很短的路径如果急转急停,反而比稍长但平滑的轨迹更慢更伤机器。规划出路径之后,轨迹优化才是决定实际表现的关键环节。

为何常见:入门教材往往把“找路径”作为重点,让人误以为“找到路”就是“走好路”,忽略了运动执行层面的时间参数。

误区为了安全,把所有限制都塞进优化问题,障碍物每个面都设一条约束,算法肯定能给出万无一失的轨迹。

正解约束过多过密会让可行域急剧缩小,甚至变得无解;对弱相关的冗余约束,求解器还会花大量时间做无用功。工程实践通常辨识关键约束,并区分“硬约束”和“软约束”——硬约束必须满足,软约束尽量逼近。约束的本质是框定可行空间,而不是越多越好。

为何常见:直觉上“管得越严越安全”,但忽略了优化问题的数学复杂性——约束之间可能互相矛盾,导致无解或过度保守。

误区要想开得稳,就得把速度降下来,平滑和高效是天生的对手。

正解平滑的核心是让速度、加速度连续变化,而不是把速度压低。一个平滑的轨迹可以减少执行器振动和跟踪误差,在同样的时间预算下反而能达成更高的平均速度。许多机械臂节拍优化,正是靠平滑轨迹减少振荡,才在相同时间内安全地完成了更多动作。

为何常见:日常驾驶直觉里“慢才稳”,但精密控制中冲击会激发系统振动,反而限制了速度提升,这是两种不同的场景逻辑。

误区只要把轨迹优化写成一个优化问题,丢进求解器就能得到结果,凸优化是万能解药。

正解凸优化要求目标函数和约束满足凸性,而轨迹优化中常见的避障、单摆动力学、关节力矩限幅等都是强非凸的。实际工程中常用 SQP、内点法,或者把非凸约束在局部线性化,构造一系列凸子问题迭代逼近。凸优化是工具箱中的一件利器,但不是万能钥匙。

为何常见:教科书里凸优化有漂亮的收敛性质、容易理解,学生容易把它当成通用方法,忽视了现实问题的非凸性。

误区优化算法算出来的轨迹就是“最好的行程”,其他任何方案都不可能更好。

正解在非凸问题中,大多数算法只能收敛到局部最优解。不同的初始轨迹、不同的参数设置,可能得到完全不同的结果。工程实践通常用多个初值同时求解,或结合采样方法,挑选代价最低的候选解,得到的是“足够好”的解而非数学上的全局最优。

为何常见:把“优化”和“全局最优”画等号,盲信求解器输出,忽略了非凸优化对初值的高度敏感性。

面试题

Q1. 轨迹优化和路径规划最主要的区别是什么?

单选题 · easy

  • A.轨迹优化只关心路径长度
  • B.路径规划不考虑时间参数← 正确答案
  • C.轨迹优化不考虑任何约束
  • D.路径规划生成完整速度曲线

答案:B。路径规划回答“走哪条线”,只关心几何路径;轨迹优化则在路径上加入时间参数,调节速度、加速度并满足物理约束。A 把轨迹优化理解成路径求短,C 忽略约束,D 混淆了两者的职责。

Q2. 以下哪项属于轨迹优化中的决策变量?

单选题 · easy

  • A.电机品牌与型号参数
  • B.轨迹函数 q(t) 的离散点← 正确答案
  • C.传感器的采样频率
  • D.控制器的通信协议版本

答案:B。决策变量是被优化的对象,通常是轨迹函数本身或其离散化表示——一组随时间变化的位置点。电机型号、采样率和通信协议都是系统固定参数,不参与优化决策。

Q3. 下列哪些内容适合作为轨迹优化的硬约束?

多选题 · mid

  • A.关节角度限位范围← 正确答案
  • B.速度上限与加速度上限← 正确答案
  • C.与障碍物的最小安全距离← 正确答案
  • D.尽可能节约能量的偏好

答案:ABC。硬约束是“绝不违反”的边界条件,关节限位、速度上限、避障安全距离都属于此类。节能是一种软性偏好,适合放进目标函数里用权重调节,而不是做成硬约束。

Q4. 为什么把最小冲击(jerk)作为优化目标很常见?

多选题 · mid

  • A.降低机械结构的振动与磨损← 正确答案
  • B.提升乘客或物件的稳定性← 正确答案
  • C.保证路径在几何上绝对最短
  • D.方便底层控制器平滑跟踪← 正确答案

答案:ABD。冲击是加速度的变化率,冲击越小动作越柔和。这能降低振动磨损、提升舒适度,也让底层控制器更容易跟踪。路径长度是另一维度的指标,不能由冲击目标保证。

Q5. 关于凸优化近似方法的描述,正确的是?

单选题 · mid

  • A.一定可以找到非凸问题的全局最优解
  • B.将非凸约束线性化后迭代逼近原问题← 正确答案
  • C.完全不需要给定初始轨迹
  • D.每次迭代的结果完全一致且无差异

答案:B。轨迹优化常含非凸约束,常见做法是在当前解附近对非凸项做线性化,形成凸子问题求解,再迭代更新。全局最优只在凸问题中有保证,而且迭代通常需要合理初值,不同初值也会导致不同结果。

Q6. 样条曲线在轨迹平滑中的主要作用是什么?

多选题 · hard

  • A.用低阶多项式分段拼接出连续曲线← 正确答案
  • B.在节点处保证位置连续← 正确答案
  • C.可构造 C2 连续的平滑轨迹← 正确答案
  • D.自动消除所有动力学约束

答案:ABC。样条把轨迹切分为多段,每段用低阶多项式表示,在拼接点处保持位置乃至速度、加速度连续,是构造平滑轨迹的经典工具。样条只是参数化方式,不能替代动力学约束。

Q7. 单纯追求时间最优的轨迹通常会带来什么问题?

单选题 · mid

  • A.时间越短一定耗费越大
  • B.可能产生极大加速度造成冲击← 正确答案
  • C.轨迹路径一定是最短的直线
  • D.与平滑性之间不存在取舍

答案:B。最小化时间会让轨迹逼近速度与加速度极限,产生“猛冲猛停”的动作,带来冲击和机械磨损。所以工程中通常在时间项与平滑项之间加入权重,找到可接受的折中。

Q8. 关于实时轨迹优化,下列说法正确的是?

单选题 · easy

  • A.计算时间可以不固定,慢一点也没事
  • B.规划时间必须小于控制周期← 正确答案
  • C.只需要在离线阶段执行一次即可
  • D.实时优化不需要任何初始轨迹

答案:B。实时优化要求规划(或重规划)的计算时间小于控制周期,才能在线及时更新控制指令。离线算一次、随机耗时、不要初值都不符合实时系统的约束。

Q9. 以下哪些属于工程实践中常用的轨迹优化技巧?

多选题 · hard

  • A.用多个初始轨迹求解候选方案← 正确答案
  • B.将障碍物近似为凸包处理← 正确答案
  • C.完全忽略动力学参数与限幅
  • D.使用局部优化方法快速修正轨迹← 正确答案

答案:ABD。工程中常做多初值尝试、将非凸障碍物近似为凸包、用 TEB 等局部方法在线修正。忽略动力学参数会让优化结果脱离物理现实,导致轨迹不可执行。

Q10. 在非凸轨迹优化中,关于“局部最优”最准确的说法是?

单选题 · extreme

  • A.局部最优一定也是全局最优解
  • B.不同初始值可能收敛到不同结果← 正确答案
  • C.非凸问题中不存在局部最优
  • D.任何算法都能自动跳出局部最优

答案:B。非凸优化的收敛点与初始值强相关,不同初值可能落入不同局部最优。工程上常用多初值并行求解、比较候选解来逼近更优答案,但无法保证一次收敛即全局最优。