|
自己的飞控做了一段时间飞得不是很好,所以决定做个MWC来玩玩, 今天下午试飞的时候,却发现了MWC程序里面的一个BUG, 而MWC已经被这么多人用过,没有见谁报过类似问题, 所以就放在论坛上让各位‘旁观者’ 看看是怎么回事。 (程序来源于MWC 2.3)
事情是这样的,话说试飞时,推油门后发现,飞机会往一个方向自旋, 开始以为是YAW方向PID的余差, 但是加了I后没有任何效果,而且经过观察,自旋的速度是加速的,会越来越快,觉得应该是YAW方向由于方向定义错误导致了正反馈,所以就开始排查YAW方向的正反,结果就发现了一个BUG。。。
下图是MWC自己定义的电机图
10 和 11装的是正桨,3和9装的是反桨
当10和11加速时, 机体 顺 时针旋转。
当3 和9 加速时, 机体 逆 时针旋转。
以下是程序里, 电机出力的分配
#define YAW_DIRECTION 1
#define PIDMIX(X,Y,Z) rcCommand[THROTTLE] + axisPID[ROLL]*X + axisPID[PITCH]*Y + YAW_DIRECTION * axisPID[YAW]*Z
#ifdef QUADX
motor[0] = PIDMIX(-1,+1,-1); //REAR_R
motor[1] = PIDMIX(-1,-1,+1); //FRONT_R
motor[2] = PIDMIX(+1,+1,+1); //REAR_L
motor[3] = PIDMIX(+1,-1,-1); //FRONT_L
简单的说就是 FRONT_R (10) 和 REAR_L (11) 两个电机与YAW方向PID输出 同 方向。
FRONT_L (3) 和 REAR_R (9) 两个电机与YAW方向PID输出 反 方向。
以下是程序里, YAW 方向PID的控制程序。
error = rc - imu.gyroData[YAW];
PTerm = (int32_t)error*conf.pid[YAW].P8>>6;
axisPID[YAW] = PTerm + ITerm;
同时,我们知道MPU6050 里陀螺仪的正方向都是逆时针的。
===============================那么重点来了======================================================
假设:
1.机体Z轴上现在发生了逆时针自旋;
2.遥控器偏航方向输入0.
3. YAW方向PID I参数为0, 没有积分作用。
那么可以得出 imu.gyroData[YAW] 为正数 , rc = 0。
得到 error = 0 - imu.gyroData[YAW] 为负数 ,乘上系数以后, 最后 axisPID[YAW] =负数.
那么根据上诉电机出力的分配
FRONT_R (10) 和 REAR_L (11) 两个电机与YAW方向PID输出 同 方向。
FRONT_L (3) 和 REAR_R (9) 两个电机与YAW方向PID输出 反 方向。
可以得到, 10 和 11两个电机转速减弱, 3 和 9两个电机转速增加。 而再根据MWC定义的四轴结构来看, 当3 和 9 两个电机转速增加时, 机体逆时针旋转, 从而和假设的方向一致形成正反馈。。。。。
===============================后续===============================================
由于如一开始我说的那样,MWC这么多人在用, 就算是有BUG,应该也会有很多人报出来, 所以,我又通过MWC的GUI来验证我上诉的结论, 以免还是由于我自己配置错误导致这样的问题。
可是GUI的显示和我的结论一致, 机体逆时针旋转时, GUI显示陀螺仪Z方式输出为正, 电机 3 和 9 加速 10 和 11 减速。而且最关键的是, 改了程序以后,YAW方向就正常了。。。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|