当前位置:培训 > 正文
>

【干货】多旋翼飞行器的控制分配

来源:无人机频道 时间:2018-01-15 10:28:46  

  1、什么是控制分配?

  对于多旋翼飞控,一般而言将整个控制回路进行分层设计,比如位置控制、速度控制、姿态控制等,而控制分配则负责将上层控制器得到的输出(滚转、俯仰、偏航的力矩),映射到执行机构,即电机,进行转速输出。简单来讲,如下所示:

  2、控制分配有什么好处?

   单独设计控制分配,可以将底层控制与上层控制进行分离,便于控制器的设计;

   能够防止电机输出饱和,具体后面会讲到;

   能够提升对故障或损伤的鲁棒性,简单来说,例如断桨保护等功能的设计,这部分比较复杂,本文不会讲到;

  3、为什么要单独讲解控制分配?

  控制分配在工程应用时很容易忽略到,相信设计过飞控软件的人有所体会,这部分内容不会特别关注,电机输出就是简单控制量的加减。这样做也是可以的,能够实现功能,但是不够好,细节部分需要进行优化处理,笔者认为这部分既重要,又容易被忽视,当控制器性能不好时,一味的进行调参是解决不了问题的。

  4、下面以工程代码为例,一步步进行逻辑推演讲解:

  先看一组最简单的

  control_roll、control_pitch、control_yaw为姿态控制器所得的结果,分别代表三个轴向的控制量,这里和油门值直接进行混控,得到每个电机的输出值。

  看到这里,相信有些读者对如何确定代码中控制量的正负有疑问?

  最粗暴的办法就是:直接试凑,定个符号,然后看实际的电机反馈。当然,这个太low了,我们从理论推演下。

  首先需要确定飞行器的机体坐标系,假设以滚转控制量为例,我们认为滚转角roll是左负右正,这样的话,假设往右打杆,目标设定是正,反馈为0 ,产生的控制量为正,这时候2、3电机加上这个正向控制量,1、4减去这个正向控制量,即飞行器往右飞行。同理可得其他方向的符号。

  注意下,偏航控制量的符号与电机的顺时针逆时针有关。

  这种简单混控的问题?

  首先是油门没有限幅,假设遥控器油门通道输出范围在1000~2000,电机接收的范围在1000~2000,如果飞行过程中油门推到最大,则所有的电机用来响应油门通道了,此时,不管你飞行器的姿态控制量分别是多少,都无法响应,这样会导致飞行器不能保持姿态稳定。

  改进一

  这里将油门通道的值进行比例缩放,电机最多响应70%油门,剩余的30%电机量用来响应姿态控制器的输出,保证控制器的响应裕度。

  如何加入飞行器的怠速?

  改进二

  如图所示,只需在每个电机输出上恒定加入一个转速值,该值就是怠速,一般在行程的10%,如设0,则没有怠速。另外,油门通道的比例也要做一个微调。

  写到这里,这是目前市面上很多开源飞控的控制分配写法了,需要注意的是:

   合理分配油门通道的响应,姿态控制输出的裕度;

   姿态控制器的输出限幅,要定一个合理的范围,过大过小都没有意义;

  这种控制分配有哪些问题?

  首先,就是控制器的输出限幅,这个很难确定一个合理范围;

  其次,油门最低时,如果执行外八/内八加锁操作,飞行器易翻机,电机输出用来最大响应yaw控制量,直观现象就是对角的电机转速差异很大,甚至有电机停转;

  再者,极端情况下,比如三个轴向的控制量都很大,生成的电机输出超过了最大值,比如得到2200,做不到优先保证姿态控制量的响应;这种情况需要降油门或者缩放姿态控制量,保证输出在范围内。

  还有一些细节问题与其有关。

  比如只打yaw杆,理论上飞行器应该绕轴旋转,但实际很多都是画圈飞行,当然这个主要问题在于姿态控制,但是也与控制分配有关,如果打杆速度很快,yaw产生的控制量很大,roll和pitch方向上没有充分的裕度进行响应。

  推广到六轴或八轴,如其中一个电机不转,能否平稳飞行?

  答案是这种控制分配方法更易出问题,简答理解就是,有一个电机停转,那分配到其他电机的转速是增大的,这样很容易电机饱和。当然,如果本身电机输出没到饱和状态,也是可以继续稳定飞行的。

  总结一下:

  一个好的控制分配算法至少要能解决:

  油门控制量过大过小时,能够有充分的姿态控制裕度,这样才能保证飞行稳定;

  简单来说,要能够根据电机输出的大小,能够进行油门量的增大减少,同时对姿态控制量进行缩放。

  以pixhawk的控制分配算法mixer为例:

  算法步骤:

  先不考虑yaw控制量,只融合roll、pitch和油门。得到电机输出的最大最小值。

  插入一个知识点:

  代码里的_roll_scale变量,是根据飞行器的几何构型得到的,以四轴X字型为例

  同理计算picth_scale和yaw_scale。

  然后根据电机的最大最小输出,计算姿态缩放值roll_pitch_scale和油门量的变化值boost。

  油门和姿态进行混控后,加入yaw,再次进行计算。

  如果加入yaw后,电机输出饱和,对yaw进行缩放。

  最后加入缩放后的yaw和怠速,得到最终的电机输出。

  这里就不对代码进行公示推导了,掌握主要思路即可。

 

责编: