以前我们简单聊过一下控制分配矩阵的作用和原理。
控制分配的目标就是要得到类似于图中的系数,这样可以把所有控制器的输出叠加到电机上。
同时,在装机过程中,这个分配矩阵决定了动力系统的安装顺序。
所以这个控制分配是非常重要的。
以APM的“x”型四轴为例:
libraries\AP_Motors\AP_MotorsMatrix.cpp 405
1 | case MOTOR_FRAME_TYPE_X: |
libraries\AP_Motors\AP_MotorsMatrix.cpp
1 | void AP_MotorsMatrix::add_motor(int8_t motor_num, float angle_degrees, float yaw_factor, uint8_t testing_order) |
libraries\AP_Motors\AP_MotorsMatrix.cpp
1 | void AP_MotorsMatrix::add_motor(int8_t motor_num, float roll_factor_in_degrees, float pitch_factor_in_degrees, float yaw_factor, uint8_t testing_order) |
可以看到在程序中控制分配其实非常简单就是根据电机的位置,计算出三个系数:
roll_factor,pitch_factor,yaw_factor。
最后在计算每个电机该输出多少时会用到,至于怎么用暂时先不分析,先看分析怎么计算这个系数。
写一个控制分配需要那几个关键参数呢?
0.飞机的坐标系(隐藏条件)
飞机的坐标系决定了电机顺序。
1.飞机类型
飞机类型决定了电机位置。
2.螺旋桨的旋转方向
为什么我写的是螺旋桨的旋转方向,而不是电机的旋转方向?因为电机是为了配合螺旋桨的,也就是说根本原因是你在这个位置放了正桨,所以这个位置的电机要正转,所以说这个位置怎么转是取决于你在这个位置装什么桨。(这点很重要)
ok,让我们手把手开始吧。
1.定义机体坐标系
那就定个“前右下”坐标系吧,这样电机的顺序就是按顺时针递增了。
2.定义飞机的机型
那就定义一个”x”型吧,这样电机的位置也确定了。
3.定义螺旋桨的旋转方向
我比较喜欢1号螺旋桨为反桨,那么2号就是正桨,3号反桨,4号正桨。
ok我们的飞机就设计完了,长这样。
ok,让我们把这些关键系数填进函数
1 | case 我的飞机: |
写完了,是不是非常简单。恭喜你又学会了一个小技巧。
什么?我还没教你,仔细看图,在你设计分配矩阵的时候,只要你像我一样,把图画出来,然后根据图把系数填进函数,电机分配矩阵就已经完成了,是不是很爽。
对了这里的电机顺序指的是,你装机的时候,需要把一号电机,接在一号PWM输出对应的电调上。
你可以开心的装机去了,美滋滋。
顺便给你提个问题,你能根据电机分配矩阵确定对应的飞机安装方式吗?
举个栗子:
APM的“x”型四轴:
1 | case MOTOR_FRAME_TYPE_X: |
对应的装机结构图为:
快去试试分析一下其他机型的电机分配吧。