一般的,在机器人路径规划的前端路径搜索产生的轨迹往往是以折线的形式展现出来,而机器人在实际的运动中,如果按照前端生成的轨迹跟踪,机器人需要在折点停下来然后再进行下一段的运动,这种运动方式对机器人的能量消耗非常大,所以需要在后端对轨迹进行优化,在中间的路径点(折点)上必须平滑,生成一个符合动力学规划的运动轨迹。
什么是 jerk 和 snap
根据深蓝学院路径规划的课程中的介绍:
jerk 代表的是 Position 位置对时间的三阶导数;snap 代表的是 Position 位置对时间的四阶导数;
minimum jerk :最小化角加速度变化,利于视觉追踪
minimum snap:推力的微分最小化,节省能量
jerk对应的是推力、角速度,jerk最小化使得角速度最小,可以使得视觉方向的处理方便(图形畸变更小)。
snap对应的是推力的倒数,snap最小化使得推力变化速度最小化,来节省能量。
Minimum jerk / Minimum snap
通过计算最小化 jerk 或者snap 来获得一个最佳符合机器人运动规划的轨迹。以snap为例:
一般的,轨迹生成条件:
边界条件:起点、终点状态(位置、速度、加速度等)
中间点:可有 A^* 、 R R T^* 算法提供
评价函数:通过评价函数得到轨迹的平滑性指标。
每一段评价函数设置为:
首先 4 阶导代表的是 snap ,平方是为了防止正负相消,和求方差的道理一样。然后在一段轨迹的时间范围内进行积分,就得出了这一段轨迹的代价值。
将每一段轨迹的代价加起来,加入边界点条件和中间点条件,得到整个轨迹的代价。求解最小代价值实际上是求一个QP问题,用多项式表示的轨迹求多项式的参数矩阵,可以把我们的约束条件直接放入一个QP求解器,获得最优化的参数矩阵。文章来源:https://www.toymoban.com/news/detail-478601.html
Minimum jerk / Minimum snap 应用
利用 ROS & C++ 实现的 Minimum jerk / Minimum snap 例程 ,需要在配置文件中设置好约束条件,(路径点、每一段轨迹的时间)
获得经过设置好的点的优化路径,在 rviz 中显示:
源码地址:Github获取,有用点个star文章来源地址https://www.toymoban.com/news/detail-478601.html
到了这里,关于Minimum jerk / Minimum snap后端轨迹优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!