5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)

标题: KGJ飞控不同传统的算法 [打印本页]

作者: KGJ    时间: 2018-2-7 11:19
标题: KGJ飞控不同传统的算法
本帖最后由 KGJ 于 2018-2-7 15:52 编辑

KGJ飞控不同传统的算法

讲 KGJ 飞控算法之前,先讲个小故事。
Н.А.伯恩斯坦的《论灵活性及其发展》一书中的一个小故事:
有一则关于石头的古老故事。城市广场中心自古就有一块巨大的圆石。市参议会曾经宣布过搬走这块大石头的比赛。有位实业家打算花一千卢布建造一个大平台,装在大圆辊轴上,来拉走这块大石头。另一个人建议用炸yao把大石头炸碎成几小块搬运,整个工程只需花费七百卢布。这又来了一位农夫说:
“我能搬走这块石头,我只拿你五十卢布。”
“你打算怎么做?”
“紧靠大石头边上挖一个大坑,将石头丢进去,坑里挖出来的土摊平,铺在广场上。”
农民这么做了,给了它五十卢布,小说里写道,另外又加给他五十,算作奖赏切合实际的想象力。


这个故事告诉我们,要避免经验主义,本本主意、避免心理定势的负面作用,而要灵活有效的处理问题。

现在的四轴飞控的算法基本上都离不开双环PID欧拉角四元素互补滤波卡尔曼滤波,这些都是哪来的呢?我看基本上都是从国外抄搬过来的,国内的博士论文抄,硕士论文抄,现在的本科论文也在抄,不抄这些,就显示不出水平来,也就拿不到各种学位了。

其实四轴飞行器的自稳真的需要搞得那么复杂吗?我们是否回到原点去看看有没有别的,更好的路可走呢?

************************************************************
*    KGJ飞控算法仅使用陀螺仪传感器就可实现自稳功能!!!    *
************************************************************

有兴趣讨论 KGJ 飞控算法的可加入QQ群(310073926)讨论。

















作者: KGJ    时间: 2018-2-7 11:21
本帖最后由 KGJ 于 2018-2-7 18:47 编辑

KGJ 飞控板及四轴飞行器

(, 下载次数: 15)

(, 下载次数: 22)








作者: KGJ    时间: 2018-2-7 11:23
本帖最后由 KGJ 于 2018-2-7 11:25 编辑

KGJ 飞控算法的特点与演变

一、KGJ飞控算法的特点
1、操控特点
摇杆偏离中心位置的大小与飞行器倾斜角度相对应,摇杆回中,飞行器回到水平姿态,大家可能觉得这个没什么特别的呀,几乎任何飞控都有这个自稳功能呀,接着请看下一点!

2、传感器
该飞控仅使用陀螺仪,无需加速度计,大家看到这里是不是觉得有点小意外了,但可能仍有人觉得,是不是利用角速度积分得到了角度,从而实现了姿态角的控制,再接着往下看吧!

3、控制算法
没有任何姿态的解算,也没有复杂的PID控制,仅有一个陀螺仪数据的比例叠加到电机上,是不是觉得有点神奇了,如果觉得还有点意思,就请继续关注下面的详细介绍吧。




二、KGJ飞控算法的演变
1、KGJ飞控的硬件
KGJ飞控的硬件完全兼容KK V5.5版本,区别在于处理器换成了Arduino Nano模块,这样更便于开发调试,PC机上有一个类似MWC飞控的GUI的参数观察与调试,当然是相当简化的最基本内容。

2、Rolf R Bakke 的 KK 算法核心介绍
最早的KK飞控是由 Rolf R Bakke 设计的,其算法的核心采用了PI控制算法,是用汇编语言写成的,也是相当经典的,当然也有很多辅助功能(这些辅助功能我感觉没什么用),现将部分能说明问题的代码摘录如下:

;-*- Quadrocopter (Quadrotor) Controller V4.7X-*-
;-*-     All Code And Hardware Design         -*-
;-*-      By Rolf R Bakke,  April, juli 2010  -*-
………………………………………………
; M1,CW     M3,CCW
;   *         *
;    \       /
;     \    /
;      \ /
;       +
;      / \
;     /    \
;    /       \
;   *         *
; M2,CCW    M4,CW
………………………………………………
        b16mov MotorOut1,RxInCollective
        b16mov MotorOut2,RxInCollective
        b16mov MotorOut3,RxInCollective
        b16mov MotorOut4,RxInCollective
; 这一部分是将遥控接收的油门控制数据输出的四个电机的控制输出

        ;--- Calculate roll command output ---
        
        lds t, RollGyroDirection
        tst t
        brpl ma60
        
        b16neg GyroRoll

ma60:        b16fdiv GyroRoll, ScaleGyro                        ;scale inputs
        b16fdiv RxInRoll, ScaleStick

        b16mov CtrlCommand, GyroRoll                        ;calculate error
        b16add CtrlCommand, RxInRoll

        b16add IntegralRoll, CtrlCommand                 ;I

        b16mov Integral, IntegralRoll                        ;I-term limit
        b16ldi IntegralLimit, I_TermLimitRoll
        rcall ILimit  
        b16mov IntegralRoll, Integral

        b16mul CtrlCommand, GainPotP                        ; P gain

        b16mov Temp, IntegralRoll                        ; I gain
        b16mul Temp, GainPotI
        
        b16add CtrlCommand, Temp

; 上面这一段是计算横滚控制命令的 PI 修正

        ;--- Add roll command output to motor 1,2,3,4 ---

        b16add MotorOut1, CtrlCommand
        b16add MotorOut2, CtrlCommand
        b16sub MotorOut3, CtrlCommand
        b16sub MotorOut4, CtrlCommand

; 再将横滚的 PI 修正叠加到四个电机的输出

后面还有俯仰、偏航等几乎同样的算法,在此就不过多的赘述了。

但这里的核心是先求“摇杆控制数据”与“陀螺仪数据”的差,也就是“角速度误差”;再求的是“角速度误差的积分”;最后是“角速度误差” *P + “角速度误差的积分” * I,这是一个标准的PI算法。

这里提一个小插曲,网络上搜到的KK有两种说法,一个说是法国的开源项目,另一个说是韩国人开发的,据我所知后来发展的KK是韩国人做的,但前面这个肯定不是,从 Rolf R Bakke 的名字,和他最初的帖子 Build KapteinKUKs Simple and Low Part Count Quad, Hex and Tricopter Flight Controller 中的 KapteinKUK 来看,有点像是挪威人,这只是我的猜测,由于我的知识有限,也不能确切的获得答案。

3、德国人Minsoo Kim 修改的 KK 算法核心介绍
;-*-          四轴X模式控制器 V1.0        -*-
;-*-            所有代码和硬件设计        -*-
;-*-            作者:Rolf R Bakke        -*-
;-*-            日期:2010年4月           -*-
;-*-                                      -*-
;-*-  2010年10月,由Minsoo Kim修改的代码  -*-

;……………………………………………………
;M1 CW  *\     /* M2 CCW
;          \ /
;           +
;          / \
;M4 CCW */     \* M3 CW
;            
;……………………………………………………

        ;--- 油门混合到 4 个电机的输出 ---

        b16mov MotorOut1,RxInCollective
        b16mov MotorOut2,RxInCollective
        b16mov MotorOut3,RxInCollective
        b16mov MotorOut4,RxInCollective

        ;--- 计算横滚输出命令 ---

        b16load GainInRoll                                ;横滚比例输出
        ldi t, PotScaleRoll
        rcall FastDivide                                        ;除以 2^t(快速除法)
        
        lds t, RollGyroDirection                         ;读取陀螺仪方向
        tst t
        brpl ma60
        
        rcall NegateXY                                         ;取负值

ma60:        b16store Temp

        b16mul GyroRoll, Temp                        ;乘横滚陀螺仪

        
        b16load GainInRoll                                ;摇杆比例输出
        ldi t, StickScaleRoll
        rcall FastDivide                                        ;除以 2^t
        b16store Temp

        b16mul RxInRoll, Temp                         ;乘摇杆横滚输入


        b16add RxInRoll, GyroRoll                ;两个输出相加(摇杆+陀螺仪)

        
        ;--- 将横滚命令输出添加到 4 个电机 ---  Minsoo Kim (2010.09.09)
        ;b16ldi Temp, 1.5                                ;RxInRoll = RxInRoll * 1.5
        ;b16mul RxInRoll, Temp

        b16sub MotorOut2, RxInRoll
        b16sub MotorOut3, RxInRoll
        b16add MotorOut1, RxInRoll
        b16add MotorOut4, RxInRoll

德国人修改后的算法取消了积分环节 I,只留下了“角速度误差” *P,很多辅助功能还保留的,我真是有点不明白,陀螺仪的安装方向都已经确定了,还要保留陀螺仪的方向设置这项干什么,真是不可思议!

4、KK_C飞控算法核心介绍
KK_C 的作者是福建的 Gale,具体名字不详,这个程序在国内的影响还是比较大的,详情大家可参看下帖:
重磅:KK_C飞控软件下 载/详细说明书/完整源代码

和KK相比,KK_C 1.0版本增加了不少实用的功能:
(1)开机等待遥控器信号功能(保障使用安全)
(2)飞行器模式选择功能(免烧固件)
(3)全遥控器设置(免调电位器)
(4)软件消震动算法(可配置开/关)
(5)支持摇杆指数功能(可配置开/关)
(6)PI控制算法(电位器调节感度)
(7)333Hz高精度电调信号输出
(8)电位器正反向识别功能

作者是这样描述 KK_C 的:“我下载了KK的源码进行研究,比较麻烦的是,KK的源码是用汇编写的,很多人是看不懂的。…… 因此我花了几个晚上的时间,用C语言完整从零编写了KK飞控的源代码,并且增强了一些很有价值的功能,使得KK的使用更加方便。”


其他问题我也不讨论了,也仅谈谈其核心的 PI 控制算法。

核心代码如下:

// X Mode X模式
//     1   2
//       X
//     3   4

Motor1=MotorLimitValue(thr + ail - ele + rud);
Motor2=MotorLimitValue(thr - ail - ele - rud);
Motor3=MotorLimitValue(thr + ail + ele - rud);
Motor4=MotorLimitValue(thr - ail + ele + rud);

//MotorLimitValue 是限幅,很简单此处不讨论

其中 ail、ele、rud 如下:

thr=RxThr;        
ail=RxAil/4;
ele=RxEle/4;

//将陀螺仪信号累加到调节量上
ail+=GainAdj(GyroRol,GainRol)+GainAdj(GyroRolI,GainPit);
ele+=GainAdj(GyroPit,GainRol)+GainAdj(GyroPitI,GainPit);
rud=RxRud/4+GainAdj(GyroYaw,GainYaw);//+GainAdj(GyroYawI,GainPit);


//   感度调整
int GainAdj(int gyro,uchar gain)
{
         int r;
        r=gyro/8;
        r*=gain;                  
        return r/(128/8);
}



至此,我们先看 KK_C 的 P 算法,该算法是感度直接乘上陀螺仪的角速度值(注意这里不是角速度的误差值),也就是 P * Gyro,从这里我们已经看到,这不是一个 PID 算法中的 P 算法了。而且输出是将遥控器的摇杆控制量与陀螺仪*增益直接相加的,所以这里一步不知道是作者该写成 C 过程中的疏忽错误还是有意而为之(这在他公开发表的帖子里没看出是有意而为之的)!

关于 KK_C 的 I ,我们下面再来讨论。


//带回归计算积分值               
GyroRolI=GyroIntegral(GyroRolI,GyroRol);


//带限幅/带回归积分函数
int GyroIntegral(int v,int delta)
{
        //内部积分增益
        delta/=4;                //delta=-511~511 -> -127~127
        v+=delta;
        //限幅
        if(v>2000)         v=2000;
        if(v<-2000) v=-2000;
        //回归
        v/=2;
        return v;
}


这个函数,我们再加以简化,先去掉限幅,我们来看看这个函数可以简化成一个什么样的算式。

v = 0.5*v + 0.5*(delta/4)

这里 v 就是 KK_C 的积分,delta 就是零偏修正后的陀螺仪值,从上面这个式子,我们能得出一个什么结论呢?
这个式子是一个典型的一阶滤波算法,也就是对陀螺仪输出值的1/4进行了一个低通滤波(这个依然等效于陀螺仪的输出,KK飞控板的硬件上陀螺仪是经过RC低通滤波的),再乘上增益,最后与遥控器的控制量叠加在一起输出到电机。作者为什么这样做呢?那是因为前面的 P 项感度已经调到很大了,效果还不好,说明 P 值仍然偏小,为此增加这个所谓的积分项,感觉好一些了,其实作用就是将 P 又增大了一些而已,作者也说过,太大了会摆动,总之,这一切也就等效个 P,但注意这里仍然不是 P乘以“角速度误差”,也不是“角速度的积分”,仍然是个“角速度”。




作者: KGJ    时间: 2018-2-7 11:24
KGJ 飞控算法

一、典型 X 型四轴飞行器飞行原理


1、垂直运动-上升

4个电机的转速同时增加,带动四个桨叶产生的升力大于飞行器的重量。

2、垂直运动-下降

4个电机的转速同时减少,带动四个桨叶产生的升力小于飞行器的重量。

3、俯仰运动-前进

1、2减,3、4加,前面升力小,后面升力大,飞行器前倾前进。

4、俯仰运动-后退

1、2加,3、4减,前面升力大,后面升力小,飞行器后仰后退。

5、滚转运动-右侧飞

1、4加,2、3减,左侧升力大,右侧升力小,飞行器右倾右侧飞。

6、滚转运动-左侧飞

2、3加,1、4减,右侧升力大,左侧升力小,飞行器左倾左侧飞。

7、偏航运动-左转

1、3加,2、4减,飞行器左转。

8、偏航运动-右转

2、4加,1、3减,飞行器右转。

二、理想飞行器的控制算法

如何理解请结合前面我们讲的上升/下降、前后、左右以及左右转的分析图。

电机1 = 油门控制 – 俯仰控制 + 横滚控制 – 偏航控制
电机2 = 油门控制 – 俯仰控制 – 横滚控制 + 偏航控制
电机3 = 油门控制 + 俯仰控制 – 横滚控制 – 偏航控制
电机4 = 油门控制 + 俯仰控制 + 横滚控制 + 偏航控制



这是原理,实际中还要对遥控器的俯仰、横滚、偏航这几个控制分量进行标定,否则就会溢出超限,不能工作在最佳区间。

这个理想的控制算法,假设还是理想的情况下以前进为例,我方向摇杆往前推,后两个电机转速快,前两个电机转速慢,这样飞行器前倾,就实现了往前飞的目的,摇杆推的角度越大,飞行器前倾越厉害,往前飞行的速度就越快,这就实现了摇杆的动作量与倾角相对应的关系,这是不是很简单呀!

那么这个理想的控制算法有什么问题呢?问题就是实际情况并不理想,在各种不平衡以及扰动的情况下,飞行器会出现各种偏离,这就需要人不断的控制摇杆来修正,但人是反应是跟不上这种干扰造成的变化的,所以是不现实的。


三、KGJ 飞控实际控制算法原理

在各种扰动下,如果我们能想办法自动控制飞行器在三个正交坐标中的转动角速度都为 0,是不是就可实现飞行器的可操控性了。既然要控制“角速度”为 0,我们就需要角速度传感器,也就是陀螺仪,要实现三个正交轴的角速度都为 0,KK 飞控板是很合适的。

现在都流行开源硬件,所以我改造成 Arduino Nano 版的 KK 飞控硬件。另外现在大于250克的飞行器都不能随便乱飞了,所以我又改成控制有刷(空心杯)电机的小四轴,重量不超过90克,这样更安全,在室内都可随意飞了。

这样,我们在理想四轴的每个控制分量上都增加“角速度”控制分量,就能实现我们的目标,具体原理算式如下:

输出修正量 = 遥控给定值 + Kp×角速度(陀螺仪输出)

我们这里也可以说是 PID 算法中的 P 项,但要注意一点,我们应该这样去理解:

                Kp×(角速度 - 0

这里的 0 是 PID 算法中的目标值。



作者: KGJ    时间: 2018-2-7 11:29
本帖最后由 KGJ 于 2018-2-7 12:08 编辑

KGJ飞控的相关程序

程序下载见下链接:
http://www.geek-workshop.com/forum.php?mod=redirect&goto=findpost&ptid=36421&pid=142168

(, 下载次数: 19)










作者: KGJ    时间: 2018-2-7 11:33
KGJ 四轴飞行器硬件

1、KGJ 四轴飞行器电机布局图


2、KGJ 四轴飞行器系统连接图


3、KGJ 飞控原理图




作者: KGJ    时间: 2018-2-7 11:39
KGJ 四轴飞行器材料清单


http://www.geek-workshop.com/forum.php?mod=redirect&goto=findpost&ptid=36421&pid=142398


作者: KGJ    时间: 2018-2-7 11:40
KGJ 的 Mixly (米思齐)图形编程



相关Mixly的程序:
http://www.geek-workshop.com/forum.php?mod=redirect&goto=findpost&ptid=36421&pid=142460


作者: roland-c    时间: 2018-2-7 12:25
简化的飞控而已,没什么新的...

一般的四轴飞控三轴飞行原理可以如下理解:
角速度差=当前遥控杆量对应角速度-实际角速度
输出修正量 = KP×角速度差+ K* I(角速度差)d时间 - K*D(角速度差)d时间


作者: 永丰狼人    时间: 2018-2-7 13:28
多谢分享!

作者: KGJ    时间: 2018-2-7 16:03
roland-c 发表于 2018-2-7 12:25
简化的飞控而已,没什么新的...

一般的四轴飞控三轴飞行原理可以如下理解:

KGJ的确是很简单,就像前面的故事里所说的,属于“农民”的算法,这个与KK以及其他飞控不同的地方是,在仅有陀螺仪的情况下,摇杆的动作量对应的不是角速度(如果对应的是角速度的话,就没有自稳功能了),而是与角度有某种函数关系的相对应。而且PID控制的目标角速度是0,所以实现了一定程度上的自稳。

这个算法其实与直升机里的“锁尾”原理是一样的:当直升机在停悬状态受到侧风的吹袭时,尾舵会产生偏移的现象,此时传统型陀螺仪会送出控制讯号至尾舵舵机,以相反的方向抵制尾舵的偏移,当尾舵停止偏移时,陀螺仪的控制讯号也随之消失。若侧风持续地吹袭直升机时,会造成尾舵不断地偏移,此时陀螺仪会一直抵制尾舵的偏移,直到尾舵移动至下风处,这就是风标效应。


这个帖子想说明的就是实现四轴的基本飞行,其实没必要那么麻烦的


作者: roland-c    时间: 2018-2-7 16:52
KGJ 发表于 2018-2-7 16:03
KGJ的确是很简单,就像前面的故事里所说的,属于“农民”的算法,这个与KK以及其他飞控不同的地方是,在 ...

那就是基于三轴积分的伪自稳
振动大的时候,会慢慢往一边歪。


作者: KGJ    时间: 2018-2-7 18:58
roland-c 发表于 2018-2-7 16:52
那就是基于三轴积分的伪自稳
振动大的时候,会慢慢往一边歪。

看来你没有仔细看帖子,也没有仔细看算法,这个算法里根本就没有积分,只是控制的结果使得角速度为“零”,从而实现自稳,这个自稳也不是“伪自稳”,也是的自稳。而且这个算法实现的飞行控制其操作特点与通常的四轴“手动模式”与“自稳模式”也是不一样的。
跟“振动大的时候,会慢慢往一边歪”也无关。


KGJ 还有个好处,并不需要放置水平校准加速度计,只要解锁时,飞行器处于静止状态(不需要水平)即可。



作者: roland-c    时间: 2018-2-7 19:35
本帖最后由 roland-c 于 2018-2-7 19:36 编辑
KGJ 发表于 2018-2-7 18:58
看来你没有仔细看帖子,也没有仔细看算法,这个算法里根本就没有积分,只是控制的结果使得角速度为“零” ...

我回复这个帖子的时候,你的原帖还没有给出KK的代码和算法的具体分析呢,让我怎么准确理解你说的自稳和维持水平的标准自稳是不同的。。。那时候,我也并不知道你有没有把算法写全(代码我懒得看了)


对于一般的飞行,直机的尾桨控制PID都必须得上,而且要克服风标效应。我以后写直机的spF3/bf的调试的时候会细说









作者: roland-c    时间: 2018-2-7 19:41
p.s.直机的三轴陀螺(spF3,apm,pix之类的不算),
据我观察大致是这样的
主桨 输出修正量 = K*遥控给定值 + Kp*角速度(角速度差)+ KI*(角速度差的积分) - KD*(角速度差的积分) - KIL(对数积分消除)
尾桨比较简单,只是PID而已

作者: KGJ    时间: 2018-2-7 19:41
roland-c 发表于 2018-2-7 19:35
我回复这个帖子的时候,你的原帖还没有给出KK的代码和算法的具体分析呢,让我怎么准确理解你说的自稳和维 ...

我之前的帖子代码在审核过程中,但在审核通过前,我给出了各相关代码的链接地址。

直升机锁尾陀螺仪的工作原理

1、传统型陀螺仪的运作
当直升机在停悬状态受到侧风的吹袭时,尾舵会产生偏移的现象,此时传统型陀螺仪会送出控制讯号至尾舵舵机,以相反的方向抵制尾舵的偏移,当尾舵停止偏移时,陀螺仪的控制讯号也随之消失。若侧风持续地吹袭直升机时,会造成尾舵不断地偏移,此时陀螺仪会一直抵制尾舵的偏移,直到尾舵移动至下风处,这就是风标效应。

2、AVCS 陀螺仪的运作
当尾舵受到侧风吹袭而产生偏移的现象时,陀螺仪会抵制尾舵的偏移,同时陀螺仪会计算出偏移的角度,并持续送出控制讯号以抵抗侧风,因此即使侧风不停地吹袭直升机时,尾舵依然不会产生偏移。换言之,陀螺仪会自动修正因侧风所引起的尾舵偏移。当直升机执行自转的动作时,尾舵舵机会依据机体旋转的角速度而摆动,当直升机停止自转时,尾舵舵机会判断应停止的位置,这就是自动偏移功能。


作者: roland-c    时间: 2018-2-7 19:47
KGJ 发表于 2018-2-7 19:41
我之前的帖子代码在审核过程中,但在审核通过前,我给出了各相关代码的链接地址。

直升机锁尾陀螺仪的 ...

哦,抱歉,我接触直升机是2012年之后的事情了,传统陀螺仪(以及非锁尾陀螺仪)我从未接触过,产生了误解,默认这里讨论的所有的直升机陀螺仪都是PID陀螺仪了。


作者: roland-c    时间: 2018-2-7 19:48
帖子审核中。。。讨厌。。。


作者: 极速F1    时间: 2018-2-7 23:28
陀螺仪的零点漂移以及温度漂移呢?

作者: 极速F1    时间: 2018-2-7 23:38
所以,你得控制效果的是,水平,动杆,然后松杆,然后保持当前角度,还是说动杆,倾斜到一定角度,松杆。自动回中,老兄,你先分清楚手动,自稳,以及增稳哟,最早的机械陀螺时代,固定翼飞机稳定姿态,都是飞行员手动定平,然后陀螺仪维持,实际上一单收到强制的扰动,飞机侧倾之后是没办法回中的

作者: skypup    时间: 2018-2-8 00:49
电调输出影响角加速度,角加速度影响角速度,角速度影响姿态角。
楼主把第一步与第二步用一个算法整合了,第三步则忽略。

有没有实际飞行的录像,想向楼主学习一下。


作者: KGJ    时间: 2018-2-8 04:59
极速F1 发表于 2018-2-7 23:38
所以,你得控制效果的是,水平,动杆,然后松杆,然后保持当前角度,还是说动杆,倾斜到一定角度,松杆。自 ...

我这个控制效果是动杆,倾斜到一定角度,松杆。自动回中。


作者: KGJ    时间: 2018-2-8 05:05
极速F1 发表于 2018-2-7 23:28
陀螺仪的零点漂移以及温度漂移呢?

在实际飞行期间,电池电耗尽之前,没发现有影响。
如果仔细看算法和实际测试,就会发现陀螺仪的输出零飘在+/–1之内。


作者: KGJ    时间: 2018-2-8 05:12
本帖最后由 KGJ 于 2018-2-8 06:18 编辑
skypup 发表于 2018-2-8 00:49
电调输出影响角加速度,角加速度影响角速度,角速度影响姿态角。
楼主把第一步与第二步用一个算法整合了, ...

这个控制算法的核心就是,摇杆的动作量直接控制四个电机的转速,陀螺仪的闭环控制角速度为零,从而实现自稳。
这个算法与KK的不同之处在于:KK 的PID(无论是Rolf R Bakke,还是Minsoo Kim 修改的算法)算法,摇杆给定的是目标角速度,他们闭环控制的核心是摇杆动作量 - 陀螺仪输出的角速度 KGJ 的核心则是“0 - 陀螺仪输出的角速度”。

另外,大家没必要太纠结 PID 中的各项,P、PI、PD、PID 都统称为 PID,只不过系数不同而已,根据自己的实际控制效果作取舍。

实际飞行前面有段小视频,当时主要看悬停,下次再拍一段飞行范围稍大点的视频吧。

我是五十多岁才接触实际航模的,准确的说就是四轴飞行器,我现在也就会飞自稳模式,即使在自稳模式也只能做到对尾飞行,标准的KK算法,我在家里小客厅根本就不敢飞的,我的飞行水平是很烂的

这个论坛唯一不足的就是我无法上传附件




作者: darkromeo    时间: 2018-2-8 07:43
现在少见这样的帖子了,顶一下吧

作者: roland-c    时间: 2018-2-8 09:49
大致理解你的算法了。

不过现在的手动飞控,特别是直机陀螺仪,一般不再关注稳定性,而是关注飞行器的阶跃和冲激响应特性,所以设计思路明显不同。
要做机动,以及在狂风中飞行(5~8级),和室内飞行所使用的算法要求是完全不同的。

作者: 鹏鹏同学    时间: 2018-2-8 09:59
很多四轴玩厌了的玩家,想飞直升机,有一定的像真姿态的美观,多轴飞起来犹如一堆螺旋桨漂浮在空中,缺少乐趣。但是现在的直升机很闭塞很传统,以至于玩过四轴的玩家也无法上手直升机,不如给直升机写个飞控玩玩?

作者: KGJ    时间: 2018-2-8 10:29
这个原本是给中学生的创客教育做的一个方案,他们又想玩流行的东西,又想能自己编程,还能够理解控制原理和算法程序,现有教育类可编程的四轴飞行器并不是真正的飞控编程,而是对遥控器的操作编程,也就是替代人操控摇杆,所以编程的内容基本上都是“上升5秒 -- 前进4秒 -- 往左3秒 ……”。但实际情况是,中学生的课业压力大,基本上都没有时间去玩,所以转给非电子专业的新手去玩,如果不会代码编程的,也可用Mixly的图形编程方式来玩了。

作者: roland-c    时间: 2018-2-8 10:40
KGJ 发表于 2018-2-8 10:29
这个原本是给中学生的创客教育做的一个方案,他们又想玩流行的东西,又想能自己编程,还能够理解控制原理和 ...

如果给中学生看的话,非常好!

作者: KGJ    时间: 2018-2-8 11:38
skypup 发表于 2018-2-8 00:49
电调输出影响角加速度,角加速度影响角速度,角速度影响姿态角。
楼主把第一步与第二步用一个算法整合了, ...

上午在小客厅里又录了一小段视频,不知道是否符合你的要求。

?spm=a2h0k.8191407.0.0&from=s1.8-1-1.2[/media]


作者: 牛牛苑苑加油    时间: 2018-2-8 14:02
“我看基本上都是从国外抄搬过来的,国内的博士论文抄,硕士论文抄,现在的本科论文也在抄,不抄这些,就显示不出水平来,也就拿不到各种学位了。”
不知道lz什么水平,但这句话太以偏盖全,国内控制方面做得还是很好的,顶级期刊有很大一部分都是华人。


作者: KGJ    时间: 2018-2-8 19:16
本帖最后由 KGJ 于 2018-2-8 20:42 编辑
牛牛苑苑加油 发表于 2018-2-8 14:02
“我看基本上都是从国外抄搬过来的,国内的博士论文抄,硕士论文抄,现在的本科论文也在抄,不抄这些,就显 ...

第一,我这里用的是“基本上都”,这个“基本上”也就是“大体上”的意思,是一程度副词,是指十个中有九个或八个是这样的。而“都”是一范围副词,是指在不同层次、不同区域是这样的。
你说的“国内控制方面做得还是很好的,顶级期刊有很大一部分都是华人”这个可能就是十分之一,最多十分之二的人群了。


第二,“国内的博士论文抄,硕士论文抄,现在的本科论文也在抄”,这里用了一个“现在”,说明博士、硕士那是过去的事了,是在多旋翼飞行器普及的“前夜”的事了。


这种现象在我接触到的范围内的确比比皆是,这可能与我国改革开放之初学习国外的先进科学技术有关,由学习变成依赖性,再加上评价体系出现的问题,很多学习就变成了抄袭(很有技巧的抄袭),但愿随着发展,我国自主创新的东西越来越多,这种现象逐渐消失,但“八二定律”可能依然是存在的。



作者: skypup    时间: 2018-2-9 13:33
KGJ 发表于 2018-2-8 11:38
上午在小客厅里又录了一小段视频,不知道是否符合你的要求。

?spm=a2h0k.8191407.0.0&from=s1.8-1-1.2 ...

比我之前预期的要稳。


作者: KGJ    时间: 2018-2-9 14:04
skypup 发表于 2018-2-9 13:33
比我之前预期的要稳。

我自己飞的感觉跟没有定高的玩具飞行器差不多,与仅有MPU6050传感器的MWC飞控的效果也差不多,稳定,也很好操控。


作者: skypup    时间: 2018-2-9 16:41
KGJ 发表于 2018-2-9 14:04
我自己飞的感觉跟没有定高的玩具飞行器差不多,与仅有MPU6050传感器的MWC飞控的效果也差不多,稳定,也很 ...

根据我对 KGJ 算法的理解。飞起来的手感可能与 MWC 飞控不开 ANGLE,也不开 HORIZON 模式的操作方式一致。
MPU6050 不仅有陀螺仪的数据,还有三轴加速度计的数据。如果 MWC 开了 ANGLE 或者 HORIZON 模式之一,则松开遥控器的摇杆让它回中,飞机是自动修正到水平姿态的。
而不是,松开遥控器之后,飞机仅保持当前姿态,不会自主恢复水平。

看上去楼主飞的四轴是一个有刷电机+减速器动力的,可能会比较轻不太抗风,可以找一个没有风的较大的场地。试一试飞个四边航线(可以一直对尾飞),这样我可以有更直观的理解了。


作者: KGJ    时间: 2018-2-9 16:59
本帖最后由 KGJ 于 2018-2-9 17:37 编辑

我这个与MWC飞控的ANGLE模式是相同的,摇杆回中后,飞行器自动回到水平姿态呀!

KGJ 算法中根本就没有姿态运算,与KK算法是不同的,KK算法闭环控制的是角速度,但他的目标角速度是摇杆的偏移量,所以KK飞控摇杆回中时,角速度为0,保持回中前一时刻的姿态不变,不能回复到水平姿态,这也就是MWC飞控不开ANGLE模式时的情况,如果KGJ与此相同,我就不会发这个帖子了。
KGJ 实现姿态(稳态时)控制的方法,就是摇杆舵量在四个电机上的分配量,在摇杆回中时,四个电机产生的升力相同(通过摇杆微调消除四个升力的系统误差),陀螺仪的作用仅是抵抗外部的扰动,控制的角速度目标值是“零”,所以实现了稳定。在摇杆偏离中心某个位置时,四个电机产生升力对应的稳态差是一定的,所以可以保持某个姿态飞行。




作者: KGJ    时间: 2018-2-10 16:33
极速F1 发表于 2018-2-7 23:28
陀螺仪的零点漂移以及温度漂移呢?

今天没事测试和分析了 KGJ 飞控陀螺仪的零飘以及温度漂移,测试方法与结果如下。
1、每秒读取一次陀螺仪的数据
2、测试过程中有两种状态
(1)自然状态
(2)微型风扇吹陀螺仪表面
3、持续测试时间为25秒
4、原始数据变化范围:-2 ~ +3
5、滤波后的变化范围:0 ~ 2

陀螺仪感度调整的算法如下:
int SensitivityAdjustment(int x, char y) {
  int r;
  r = x / 4;
  r = r * y;
  return r / 8;
}


其中:x 为陀螺仪的角速度,y 为感度
从中我们可以看陀螺仪上述的零飘经 r = x / 4 整除运算后几乎没有任何影响。飞行器每次解锁时首先对陀螺仪进行校准,而空心杯四轴飞行器的有效飞行时间最多 8 分钟,所以在整个飞行过程中,陀螺仪的零飘和温飘没有任何影响。



作者: xaut    时间: 2018-3-5 21:45
熟悉的nano和kk。

作者: ezk    时间: 2018-6-20 01:53
相当同意极速F1的说法 楼主应该没有飞过手动的的多轴 也很少去室外飞

如果陀螺仪在d^2(theta)/dt^2数值很大的时候 这个控制器会失控 一个Kp解决不了问题 结果是又回到PID去了
同样在遥控输入的时候也会有这样的问题

为什么视频上看不出这样的效果呢 不知道楼主设置的looptime是多少 如果时间很长的话输出有点像低通滤波后的效果


现在的四轴飞控的算法基本上都离不开双环PID,欧拉角,四元素,互补滤波,卡尔曼滤波,这些都是哪来的呢?我看基本上都是从国外抄搬过来的,国内的博士论文抄,硕士论文抄,现在的本科论文也在抄,不抄这些,就显示不出水平来,也就拿不到各种学位了。

这一点我完全不赞同 楼主应该也没有PID真正工业环境下的经验 也没有太多学术经验 PID kalman fuzzylogic 这类控制器只是一个大框架
如果要求一个博士去研究一个新的控制算法出来 大多数情况也是辣鸡
现在学术是允许站在别人的肩膀上研究新东西 或者对大的理论细化优化在某一应用
很多细节的部分 光一个Iterm就可以让一个中等规模公司玩1年更不要说Dterm了
BF这几年的发展楼主可以去关注一下  RC input滤波 Iterm 和Dterm处理逻辑都是根据飞行要求优化的不错

作者: 南极仙翁    时间: 2018-6-20 19:52
技术贴,顶起。

作者: 飞碟机    时间: 2018-9-17 08:46
高人!

不知道能不能请楼主帮忙?!我有一个开发飞控系统的任务,希望找个高人帮帮忙。





欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://5imx.com./) Powered by Discuz! X3.3