- 本博客主要记录在修改hector quadrotor 仿真器中控制器模块的一些经历。
有用的参考:知乎gazebo ctrl
算法
原始控制器采用级联pid。
- 外环:位置环,也接收速度输入,作为前馈直接加到输出上。使用PID。
- 内环:速度环,可以和位置环连起来用,也可以单独用。单独用的话,就接收速度指令。连起来的话,那么输入就是外环的输出,屏蔽收到的外界速度指令。。计算出的是wrench_,扭力。有torque和force,在这里很奇怪,xy方向force都是0,而xyz轴的torque都是根据acceleration算出来的。
- 看了新版的controller代码发现,旧版是用Pid省略了从加速度到角加速度,再到扭矩的转换。所以正常流程是,world速度输入得到world加速度,转成base加速度(差了一个yaw),再转换成base角加速度输出。在attitude controller里,base角加速度转成world角加速度,再转成body角加速度。这样,就可以转换到力矩空间,计算wrench和电机转速之类的了。
飞机坐标系
顺时针画上0123号电机。3号为x+,2号为y+。所以如果要有正的roll,那么0号向下,2号向上;要有正pitch, 3号向上,1号向下。
control interface
Controller is an important base class in ros.
It has 4 functions:
- starting,
- stopping,
- init,
- update.
All we need is to write a specific controller class which inherit the base class.
Then, export the class as a plugin. Controller manager would load this plugin when starting up.
和PID对比
飞机Z轴位置数据
显然,PID动态性能不如RPT。
飞控:
问题
- 如何和xtdrone的sitl联动?
- 如果撞到障碍物,电机停转的指令是不是由飞控发出?