轨迹优化 | Minimum-jerk

轨迹优化是机器人路径规划的重要环节,从路径规划得到的离散点,通过多项式轨迹平滑技术如最小jerk算法,确保机器人运动的连续性和平滑性。本文介绍了轨迹优化的数学模型,包括二次规划和最小jerk的概念,以及如何构建目标函数和约束条件,最后展示了Python实现的一维轨迹优化过程。
该文章已生成可运行项目,

使用路径规划可以得到一系列的路径点,如下图所示有5个路径点,这条路径是很曲折的,这不利于机器人的移动,试想一个机器人直接沿着这条路径进行移动,当到达一个路径点后速度减到零,原地旋转,指向下一个路径点,再继续移动,这不仅智障,而且浪费能量。于是我们就想,能不能规划出一条轨迹,使机器人能够在每一个路径点处能够平滑过渡,从而表现得机灵一点。这就是轨迹规划问题。

路径规划得到的路径点 轨迹优化得到的轨迹(橙色)

二次规划(Quadratic Programming, QP)

由于轨迹规划问题可以归结为一个二次规划问题,所以这里先对二次规划进行一个简单的介绍

二次型

含有 n n n个变量 x = x 1 , x 2 , ⋯   , x n − 1 , x n x=x_1,x_2,\cdots,x_{n-1},x_n x=x1,x2,,xn1,xn的二次齐次函数:
f ( x 1 , x 2 , ⋯   , x n ) = a 11 x 1 2 + a 22 x 2 2 + ⋯ + a n n x n 2 + 2 a 12 x 1 x 2 + 2 a 13 x 1 x 3 + ⋯ + 2 a n − 1 , n x n − 1 x n \begin{aligned} f(x_1,x_2,\cdots,x_n)&=a_{11}x_1^2+a_{22}x_2^2+\cdots+a_{nn}x_n^2\\ &+2a_{12}x_1x_2+2a_{13}x_1x_3+\cdots+2a_{n-1,n}x_{n-1}x_n \end{aligned} f(x1,x2,,xn)=a11x12+a22x22++annxn2+2a12x1x2+2a13x1x3++2an1,nxn1xn
称为二次型。取 a i j = a j i a_{ij}=a_{ji} aij=aji,则有 2 a i j x i x j = a i j x i x j + a j i x j x i 2a_{ij}x_ix_j=a_{ij}x_ix_j+a_{ji}x_jx_i 2aijxixj=aijxixj+ajixjxi,上式可表示为:
f = ∑ i , j = 1 n a i j x i x j f=\sum_{i,j=1}^na_{ij}x_ix_j f=i,j=1naijxixj
矩阵表示为:
f = x T A x f=x^TAx f=xTAx

二次规划问题

当目标函数 f f f为二次型,且约束为线性约束时,该优化问题就是二次规划问题,一般形式表述如下:
m i n x f ( x ) = 1 2 x T Q x + q T x s . t . A x = b G x ≤ h \begin{aligned} \mathop{min}\limits_{x} f(x)&=\frac{1}{2}x^TQx+q^Tx\\ s.t. Ax&=b\\ Gx&≤h \end{aligned} xminf(x)s.t.AxGx=21xTQx+qTx=bh
二次规划是一类凸优化问题,目前有很多商业或者开源的求解器来求解这类问题,不再赘述

轨迹表示形式

使用路径规划可以得到一系列的路径点,这些路径点是不带时间信息的,而轨迹则是时间 t t t的函数,一般用 n n n阶多项式表示,即:
f ( t ) = p 0 + p 1 t + p 2 t 2 + ⋯ + p n t n = ∑ i = 0 n p i t i \begin{aligned} f(t)&=p_0+p_1t+p_2t^2+\cdots+p_nt^n\\ &=\sum_{i=0}^np_it^i \end{aligned} f(t)=p0+p1t+p2t2++pntn=i=0npiti

其中 p 0 , p 1 , ⋯   , p n p_0,p_1,\cdots,p_n p0,p1,,pn是轨迹参数,也是我们的优化参数。将 f ( t ) f(t) f(t)写成向量相乘形式,得到:
f ( t ) = [ 1 t ⋯ t n ] [ p 0 p 1 ⋮ p n ] f(t)=\begin{bmatrix}1&t&\cdots&t^n\end{bmatrix}\begin{bmatrix}p_0\\p_1\\\vdots\\p_n\end{bmatrix} f(t)=[1ttn] p0p1pn
对轨迹函数求导,还能写出速度、加速度、jerk等参数随时间变化的函数:

v e l ( t ) = f ( 1 ) ( t ) = [ 0 1 2 t 3 t 2 ⋯ n ! ( n − 1 ) ! t n − 1 ] ⋅ p a c c ( t ) = f ( 2 ) ( t ) = [ 0 0 2 6 t ⋯ n ! ( n − 2 ) ! t n − 2 ] ⋅ p j e r k ( t ) = f ( 3 ) ( t ) = [ 0 0 0 6 ⋯ n ! ( n − 3 ) ! t n − 3 ] ⋅ p \begin{aligned} vel(t)&=f^{(1)}(t)=\begin{bmatrix}0&1&2t&3t^2&\cdots&\frac{n!}{(n-1)!}t^{n-1}\end{bmatrix}\cdot p\\ acc(t)&=f^{(2)}(t)=\begin{bmatrix}0&0&2&6t&\cdots&\frac{n!}{(n-2)!}t^{n-2}\end{bmatrix}\cdot p\\ jerk(t)&=f^{(3)}(t)=\begin{bmatrix}0&0&0&6&\cdots&\frac{n!}{(n-3)!}t^{n-3}\end{bmatrix}\cdot p\\ \end{aligned} vel(t)acc(t)jerk(t)=f(1)(t)=[012t3t2(n1)!n!tn1]p=f(2)(t)=[0026t(n2)!n!tn2]p=f(3)(t)=[0006(n</

本文章已经生成可运行项目
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值