第四周主要讲的是飞行器3D编程和自我轨迹生成。其中3D编程是对前三周内容的扩展,而比较难以理解的是自我轨迹生成这里的理论和编程。先贴一张写了一周的作业的成绩哈哈。
一、3D编程
3D编程既是对上周2D的再一次扩展,但是编程对应的变量却有所变化。之前都是比较容易理解的U1、U2等,而这次需要编写的是F和M两个变量。
实际上两组变量的关系是:
F=U1
M=U2
这样一看就比较好理解了,再对应作业提示的相应公式
就可以直接写出控制器文件的F函数:
F = params.mass * (params.gravity + kp_f * (des_state.pos(3) - state.pos(3)) + kd_f * (des_state.vel(3) - state.vel(3)));
但一定注意F是有上限的(参照params.m那个函数)。
而控制器中的M数组还需要预先定义和计算其他变量,利用的也是提示中给出的
其中比较棘手的r1和r2则可以参照:
des_r1 = des_state.acc(1) + kp_r1 * (des_state.pos(1) - state.pos(1) + kd_r1 * (des_state.vel(1) - state.vel(1)));
des_p = 0;
M = [kp_phi * (des_phi - state.rot(1)) + kd_phi * (des_p - state.omega(1)) ; ; ]
(为了保证作业本身的意义,我就贴了一半代码,希望有兴趣学这个课的同学都能自己写完剩余的部分得到锻炼哈哈)
其实3D编程到这一步就只剩下调参数了,我的意见就是Kp一定要大,200左右效果比较好,Kd的值则在20附近。先通过line再通过helix调就可以了。