侧边栏壁纸

PX4中PositionSmoothing平滑详解(固件1.14)

2024年11月19日 225阅读 0评论 0点赞

单航点版本与多航点版本使用分析

分析中传入单航点版本和多航点版本 (generateSetpoints) 的使用场景,可以帮助我们理解它们的适用范围和最佳使用方式。


单航点版本:传入单个 waypoint

_position_smoothing.generateSetpoints(
    current_position,             // 当前位置
    target_position,              // 目标位置(单点)
    target_velocity,              // 目标速度
    dt,                           // 时间步长
    false,                        // 不强制零速度
    smoothed_setpoints            // 输出的平滑轨迹点
);

特点

  • 自动生成三个相同的航点 waypoints[3]

    Vector3f waypoints[3] = {waypoint, waypoint, waypoint};

    在内部,waypoints 数组中的每个点都设置为同一个目标点。

  • 假设从当前位置平滑地到达目标点 waypoint,忽略路径中下一个或之前的点。

使用场景

  1. 单点导航
    用于从当前位置直接到达目标点的简单运动。例如:

    • 无人机悬停后飞往下一个航点。
    • 机器人短距离移动到指定目标。
  2. 终点单一的任务
    如果当前任务只关心目标点(如送货机器人到达目的地),这个版本更适合。
  3. 固定速度控制
    在目标点附近,使用给定的 target_velocity,生成平滑轨迹。

优点

  • 简单易用:直接传入目标点即可,不需要预先计算路径。
  • 兼容性好:在大多数单航点情况下,生成的轨迹平滑且满足要求。

限制

  • 缺乏路径规划信息:由于没有考虑其他路径点,只生成简单的从当前位置到目标点的平滑轨迹。
  • 不适合动态环境:若目标点在移动或路径受限,可能不够灵活。

多航点版本:传入 waypoints 数组

_position_smoothing.generateSetpoints(
    current_position,             // 当前位置
    waypoints,                    // 多个航点数组
    target_velocity,              // 目标速度
    dt,                           // 时间步长
    false,                        // 不强制零速度
    smoothed_setpoints            // 输出的平滑轨迹点
);

特点

  • 允许传入三个航点:

    const Vector3f(&waypoints)[3]

    waypoints[0]: 上一个航点
    waypoints[1]: 当前目标航点
    waypoints[2]: 下一个目标航点(未来路径点)

  • 内部算法利用这些信息生成更加平滑的轨迹:

    • 通过分析前后路径点的相对位置和速度变化,优化轨迹的连续性。
    • 可能使用预测性的方法(例如多段样条)调整轨迹的加速度、速度。

使用场景

  1. 复杂路径规划
    适用于需要从当前位置经过多个路径点的场景。例如:

    • 无人机按照规划航线飞行。
    • 自动驾驶车辆在预定路线中连续转向。
  2. 动态路径调整
    如果未来的路径点已经知道(或动态计算),可以传入这些点以生成更符合运动学规律的轨迹。
  3. 路径柔顺控制
    考虑上一个点和下一个点的情况下,可以减少路径上的急剧转向或速度变化,保证平滑性。

优点

  • 轨迹平滑性更好:通过分析多个点,轨迹过渡更加自然。
  • 适应复杂场景:能更好地适应需要多段路径连接的任务。

限制

  • 复杂度较高:需要提前计算和传入前后路径点。
  • 依赖准确的路径信息:如果路径点不准确,可能影响平滑效果。

两者对比

特性单航点版本多航点版本
传入参数当前点和目标点当前点及路径的三个关键点
路径复杂性简单路径支持复杂路径
平滑性相对较低较高(考虑多个点的平滑过渡)
适用场景短路径、终点单一任务连续航线、复杂路径或动态环境
灵活性较低较高
实现复杂度较低较高

适用场景总结

  • 选择单航点版本

    • 任务单一且只关心目标点时(如到达一个固定目标)。
    • 路径不复杂,且不需要高平滑性时。
  • 选择多航点版本

    • 路径规划包含多个点,需要生成更自然的平滑轨迹。
    • 动态环境下,提前知道下一个目标点并希望优化当前轨迹。
    • 对平滑性和速度过渡要求较高的应用。

0

—— 评论区 ——

昵称
邮箱
网址
取消
博主栏壁纸
12 文章数
5 标签数
1 评论量
人生倒计时
标签云
舔狗日记