MinimumSnap 代码细节

(MATLAB)

基于高飞老师的移动机器人运动规划课程hw5作业写的代码。因为过程中在对Q,M,Ct函数的构造上花了很多功夫去理解,因此记下来。

注意:多项式的排列方式很重要,我们这里采用的是升幂排序,也就是

1. Q矩阵

下面的矩阵是不完全的,因为它只是Q矩阵中的一小部分,记为Q_k,实际上是

 

 然后还要积分,Q矩阵中对应的有值项还要乘上\frac{t}{i+j-7}

最后写为:

 代码写成这样,

function Q = getQ(n_seg, n_order,t_order,ts)
    Q = [];
    for k = 1:n_seg
        % 7阶,所以有8个自由度
        Q_k = zeros(n_order+1,n_order+1);
        %#####################################################
        % STEP 1.1: calculate Q_k of the k-th segment 
        for i=0:n_order
            for j=0:n_order
                if((i<t_order)||(j<t_order))
                    continue;
                else
                    Q_k(i+1,j+1) = factorial(i)/ factorial(i-t_order) * factorial(j) / factorial(j-t_order) /(i+j-n_order) * ts(k) ^ (i+j-n_order);
                end
            end
        end
        Q = blkdiag(Q, Q_k);
    end
end

 最终结果(单段轨迹)是:

2. M矩阵

M矩阵是将原来的轨迹上的p参数,转换为p,v,a,j的状态变量,找到对应关系,M p = d即可。

实际上就是根据下图的关系式转换,M的每一行就是去掉t以后的等式参数化

代码

 结果是

3. Ct矩阵

Ct矩阵比较麻烦,要摸透下面矩阵的含义。

(1)列:

        橘色部分是df,前4个是起始的四个状态变量,后四个是终止的四个状态变量,中间是每两段交点的位置变量。

        白色部分是dp,每三个为一组,分别是每个航路点的除位置量以外的三个变量。

(2)行:

        就是原始的每个点的四个状态量的排列,注意一段轨迹有2*t_order个(起始和末尾)。

        剩下的每8行为一组,都是些重复的,也就是图3.2 t1交界处的8个量。

2.数值解法

结果展示

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值