搜索
bottom↓
回复: 226

4轴姿态控制算法讨论贴

[复制链接]

出0入0汤圆

发表于 2008-6-12 11:53:42 | 显示全部楼层 |阅读模式
说是4轴姿态控制,其实其它航模飞行器一样适用,本质应该都是惯性导航
为了简化模型,首先我们将输入部分的遥控器信号、数传电台信号、GPS信号、气压计信号等全部排除
只保留3轴陀螺仪 + 3轴加速度 六路输入信号,输出3路分别与XYZ轴的相对夹角
输入6路全部浮点变量,分别为:GYRO_X、GYRO_Y、GYRO_Z【单位:度/秒】、ACC_X、ACC_Y、ACC_Z【单位:mG】
输出3路全部浮点数,分别为:ANGLE_X、ANGLE_Y、ANGLE_Z,求简洁算法


再引入一个陀螺仪采样间隔时间常量dT,默认为20mS

为了表现算法结果,用DELPHI + DIRECT X SDK做了一个展示程序
左上部是输入的6路信息,结果绘制为屏幕中间那个简单四轴模型的姿态
本帖只讨论算法不讨论硬件,请坛子里诸位高人一起参与,群策群力啊!


(原文件名:GYRO.gif)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2008-6-12 12:53:38 | 显示全部楼层
占个沙发.

出0入0汤圆

 楼主| 发表于 2008-6-12 14:01:55 | 显示全部楼层
咋一到关键地方大家都卡壳啊?那么多对4轴有兴趣的人呢?
大家畅所欲言,胡说乱讲也没关系啊,单枪匹马就没乐趣拉

出0入54汤圆

发表于 2008-6-12 14:13:39 | 显示全部楼层
抱歉对控制算法一窍不通,呵呵
有一点不明白,既然知道了陀螺仪的角度变化,似乎加速度变化没必要了
我觉得依照陀螺仪的角度变化来实时纠正就ok了,至于加速度变化,我觉得可以放在导航里面使用该数据
当然,如果要完成一些复杂的动作,可能仅仅靠角度变化没法控制姿态

出0入54汤圆

发表于 2008-6-12 14:13:56 | 显示全部楼层
以上都是乱说的,哈哈

出0入0汤圆

 楼主| 发表于 2008-6-12 14:43:07 | 显示全部楼层
to : 【4楼】 mutoudonggua 木头东瓜

呵呵,大家乱说没关系啊,讨论嘛!
不过姿态控制只有陀螺仪是不行的,陀螺仪输出的是角速度信号,角速度与时间的积分可以算出历史偏转角度
但是这个积分过程是有误差的,经过一定时间的累积最后的姿态就不可信了

举个例子:比如4轴本来水平的,忽然X轴来了一阵妖风把它吹歪了30度,在吹的过程中我们的陀螺仪检测到旋转变化
输出了一系列大大小小的角速度信号,我们把它们与时间的做积分运算,算出比原始状态总共倾斜了29.5度,于是纠正之
加上纠正执行动作的误差,最后只纠正了29度,那么妖风持续吹啊吹,几十次后
就算妖风停了,陀螺仪也不输出信号了,但是4轴已经快翻了,因为陀螺仪最后根本不知道自己相对地面已经倾斜几十度了
不能只靠陀螺仪就是因为它没有绝对参照物,所以无论CPU选的多牛/积分过程多精确,都无法避免误差累计

呵呵,我也不知道我表达清楚了没!

出0入54汤圆

发表于 2008-6-12 14:47:06 | 显示全部楼层
明白你的意思了,可用加速度传感器来矫正误差,避免翻车

出0入54汤圆

发表于 2008-6-12 14:48:00 | 显示全部楼层
和加速度传感器结合能知道目前四轴的状态吧,比如姿态,运行速度等等

出0入0汤圆

 楼主| 发表于 2008-6-12 15:13:41 | 显示全部楼层
一般情况下有这六路信号就能基本稳住了
3轴加速度传感器在飞行器静止和匀速运动时可以判断出重力加速度方向
结合陀螺仪信号+重力加速度方向信息不断校正之,最原始版的姿态控制逻辑就出来了

但是加速度传感器是不区分【重力加速度】与【运动加速度】的,在复杂外界情况下还是有问题

再举个妖风的例子:
4轴原状态水平悬停在1000米高空,假设突然有一股强妖风把它吹翻(头朝下),从Z轴正方向吹向负方向(自顶向下)
妖风之强正好让4轴飞行器以两个G的加速度向下运动,那末我们按照上面说讲的逻辑判断出来的姿态正好就反了180度
那么4轴这时会检测到一个G的加速度信号,并且认为自己很水平姿态很好,但实际上很快用不了多久它就快撞地了

其实人在没有视觉绝对参照物的前提下,一样会犯4轴的错误:
比如4轴足够大且密封,一个人站在里面,如果4轴在外力作用下,以2G的加速度向地面垂直运动
我们在地面看这个人,他会头朝下、脚朝上站在天花板上,他丝毫不会感觉到任何危险
如果他手里端着一晚水,虽然水面朝向地面,水依然很平静不会洒出
但实际上他很快就会和4轴一起撞地了

不过我们做4轴航模的姿态控制,未必需要考虑这么强的外力影响,毕竟这种强【妖风】不是随时都能遇到的
在没有外部影响,或影响相对较小时,3轴陀螺仪+3轴加速度就搞定了

出0入0汤圆

发表于 2008-6-12 15:19:44 | 显示全部楼层
我的意见:
1、发布一套完整的算法测试环境,自由下载
2、把算法写入动态链接库
3、发布一个运行姿态参数输入模块(参数可以修改,也可以短时间固定)
4、把算法的源程序按照阶段贴出来,大家可以自行下载编译,然后使用测试环境进行验证
如果有什么好意见就贴出来,最好的就是提供一些性能改正的数据和其它证据,大家跟贴进行讨论,群众的眼睛是雪亮的,再优选其中的精华纳入下一版发布。

出0入0汤圆

发表于 2008-6-12 15:24:17 | 显示全部楼层
补充几句,测试环境就是象疯子贴的这种图形界面就可以,外加几个动态库,当然,如果把源码贴出来,相信会有更多的人帮你完善,Delphi我不熟,VC凑合搞搞。
开源的麻烦是松散管理,维护难度大,好处是代码升级快,性能也不错,要考验嬷嬷站长的管理能力了。
过于严密的组织容易扼杀创造性,松散的组织不好管理,呵呵,难题呀

出0入0汤圆

 楼主| 发表于 2008-6-12 15:29:55 | 显示全部楼层
to :【9楼】 thomasdu

想法不错,但实施有困难,其中第2点【把算法写入动态链接库】就很难做到
除非你写真实的程序而非算法描述,而这个程序并不简单
在没有算法理论没有得到确认前,不值得投入精力去编程的
所以建议大家先讨论,只要能描述清楚、让别人可理解、可讨论就行
无论大家用什么“语言”或“形式”

出0入0汤圆

发表于 2008-6-12 15:32:40 | 显示全部楼层
现在需要疯子做的事情 可 以 是:

0、目标定义也是要的哈,可动态调整,短期最好不变
如果接受我上面的建议,则:
1、模块的划分、模块的调用接口定义
2、飞行姿态传感器参数定义,参数传输接口
3、飞行控制输出参数定义、参数传输接口
4、飞行态外部干扰因素比如风速。。。。。定义,初期可以完全为0,后期完善需要
否则
goto END.

今后,建议使用一个文本文件,组织成数据库结构形式,进行仿真的LOG记录,个人可以发布自己的LOG,然后也可以根据LOG回放仿真结果

END:

出0入0汤圆

发表于 2008-6-12 15:41:03 | 显示全部楼层
to :【9楼】 thomasdu  

想法不错,但实施有困难,其中第2点【把算法写入动态链接库】就很难做到
除非你写真实的程序而非算法描述,而这个程序并不简单
在没有算法理论没有得到确认前,不值得投入精力去编程的
所以建议大家先讨论,只要能描述清楚、让别人可理解、可讨论就行
无论大家用什么“语言”或“形式”
==================================
我认为你可以先定义模块和接口,不要着急编程,然后把任务分派出来,坛子里面的高手应该很多,可以加快进度
接口的定义形式可以很简单,例如:

struct FLY_PARAM
{
   速度、方向。。。。。
}

struct CTL_PARAM
{
}

CTL_PARAM *GetCTLInfo(FLY_PARAM &pParam)
{
     运算
     return CTL_PARAM * xxx
}

就完成了算法模块接口的设计了,我说的不一定严谨,是一个意思,仅供参考

出0入0汤圆

 楼主| 发表于 2008-6-12 15:41:25 | 显示全部楼层
to :【12楼】 thomasdu

你说的“疯子”指是我吗?还是其他人?

出0入0汤圆

发表于 2008-6-12 15:45:33 | 显示全部楼层
就是你,feng_matrix,你难道不疯吗?
^_~

出0入0汤圆

 楼主| 发表于 2008-6-12 16:25:23 | 显示全部楼层
哦,承蒙“夸奖”啊!

定义模块和接口就我一个不行啊,需要【阿莫】和【火腿】来参与,毕竟他们主导这个项目的
而且听【阿莫】讲【火腿】应该是高人,以后AVR32等条件成熟后,做这些工作会很快搞定的,现在先简单讨论讨论吧!


1楼的DIRECT X程序中我已经做入COM口通信程序,我自己定了个类似GPS串口信号格式用于调试陀螺仪:

$GYRO + 陀螺仪X轴 + 陀螺仪Y轴 + 陀螺仪Z轴 + 加速度X轴 + 加速度Y轴 + 加速度Z轴 + 0x0D + 0x0A

这是一个实际的数据串(16进制),取自我自己DIY的3轴陀螺仪的输出:
0x24 0x47 0x59 0x52 0x4F 0x02 0x00 0x02 0x01 0x01 0xFE 0x01 0xF2 0x01 0xFA 0x02 0x71 0x0D 0x0A

包头5字节,包体2×6=12字节,包尾2字节,共19字节,无论什么串口设备
只要按上面的格式向COM1发送陀螺仪+加速度信号,它就可接收并处理到3D页面上

陀螺仪运转视频见贴【60】楼:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=966857&bbs_page_no=1&bbs_id=1025

出0入0汤圆

发表于 2008-6-12 16:51:57 | 显示全部楼层
看了,行动很快哈,疯子就是不一样。
也就是说,输入参数的物理接口已经有了,在同一入口加一个逻辑接口,方便将来大家输入一致的姿态参数,比如,用你定义的数据格式,输入一批参数,以观察算法计算后的结果输出。
甚至不劳你亲自动手,把源码放上来,过几天就有人自动领回去做好放回来,嘿嘿

出0入0汤圆

 楼主| 发表于 2008-6-12 16:58:01 | 显示全部楼层
【17楼】 thomasdu

OURAVR 里用C的比较多,有空我把1楼的程序改成C++ BUILDER的贴出来吧,你说的其实就是个函数定义

出0入0汤圆

 楼主| 发表于 2008-6-12 17:10:12 | 显示全部楼层
看到“国防科大及反引力”贴比“算法”贴人气旺多了,郁闷!

出0入0汤圆

发表于 2008-6-12 17:15:10 | 显示全部楼层
那个贴,昨天晚上我就回复了,结果今天一看,回复被删除了,晕

出0入0汤圆

发表于 2008-6-12 18:38:23 | 显示全部楼层
学习中

出0入0汤圆

发表于 2008-6-12 18:49:36 | 显示全部楼层
用模糊控制。再高级点的就给4轴建一个数学模型,直接用数字式控制。PID和模糊控制之类的只能算模拟逼近式的控制方法
每次开机都自动标定一次水平姿态,问题应该就不大了
就是如何排除飞行时候机体振动引入干扰有一定难度

出0入0汤圆

发表于 2008-6-12 19:16:49 | 显示全部楼层
惯性导航系统的误差会在时间上积累,所以首先精度要高,还有就是要不断修正,根据ADXL330的说明(见下图)它对重力加速度是有输出的,这样可以用来探测水平,安装正确的芯片,只有一个轴输出时,就是水平位置,可以用来修正陀螺对地水平的偏差。偏航(方向)的偏差在这里不是很重要(可以用GPS)修正。

我感觉应该约定一个名称:

陀螺系统其实就是指可以保持一个姿态不变(一定时间内)的一个平台,陀螺有这种特性,所以一般叫陀螺,但是现在更多是使用三轴加速度计来计算出“虚拟”陀螺,陀螺只能指示姿态(就是俯仰,偏航,横滚),但是要计算飞行器的轨迹就要有三轴线加速度系统,(比如:算出向左,向上,向前运动了多少米)),而惯性导航系统就是上面两者的组合。

所以我们这里可不可以称为:三轴加速度系统(不叫陀螺系统)。三轴线加速度系统以资区别。合起来就是惯性导航系统。




(原文件名:QQ截图未命名.jpg)

出0入0汤圆

发表于 2008-6-12 19:21:54 | 显示全部楼层
还有20ms的采样间隔是不够的,要有足够的精度,并且要滤除干扰,最少要5倍与20ms,就是4ms。最好2ms。

出0入0汤圆

发表于 2008-6-12 19:28:21 | 显示全部楼层
还有关于动力系统,我一直在想。电机的输入功率和电流,电压有关。算出输入功率不难,输出功率可以用拉力表征,这样加个拉力计,可以自适应调到最佳效率或者最大输出。满足不同工况要求。不过螺旋桨变距,下一步再说吧

出0入0汤圆

发表于 2008-6-12 22:15:18 | 显示全部楼层
我到是特别想了解下GY401的算法,1轴陀螺,但是可以达到锁尾的效果
【24楼】 kennyzhao 说的很好,减少采样时间就可以减少误差,但是减少并不是避免,误差是无可避免的并且会不断累计,这样误差还是可能造成4轴都已经倾斜40度或者更多以后它自己还以为自己是水平的
要是可以想办法达到401的水平,起飞前定一个中立位置,起飞后就三轴锁定了,就可以达到平衡的效果
积分算角度累积量肯定是有误差的,但是要是配合3轴加速度我想还是有办法的
设想即使是横测偏转30度后角度传感器默认水平,此时4轴出力平衡,若没有风的影响下,4桨形成的桨平面如同机翼一般,4轴将顺倾斜方向滑下,此时加速度应该顺Z轴向下与Y轴方向,且夹角可算,此夹角和实际倾角方向一样而大小不同,但是已经可以告诉4轴,机身并不如陀螺想象中那么稳定了,已经倾斜且方向已知.
如果是我,变选择各打50大板,一个说平的,一个说倾斜了,那么就按照3轴加速度计算出来的角度的一半来定义4角倾斜的角度,再输出到动力上,进行一半角度的调整,那么实际上经过调整以后4轴依然存在倾斜,但是角度已经变小,且再进入以上循环后角度还会继续减小,这样,4轴在不进行运动操作且无风的状况下就可以做到实际倾角无限接近与传感器测量倾角.
再者,我门设定的是30度倾角后才开始修正,要是一出现倾角变化就开始修正,那么4轴应该处于一个相对稳定的状态.

如果并非在飞行过程中,电脑测试时,完全可以用3轴加速度代替3轴陀螺来修正角度偏差,但是在飞行过程中则不可取,我觉得可以采取各打50大板的方法来取角度

以上仅是自己的一点想法,漏洞百出,就是随便说下自己的想法,希望大家指教!

出0入0汤圆

发表于 2008-6-12 22:51:41 | 显示全部楼层
其实用积分计算出偏移了多少度再修正的方法是其中一种方法。还可以直接使用角偏转加速度或偏转者角速度的大小来输出,算法要看看书,想不起来了

出0入0汤圆

发表于 2008-6-12 23:32:21 | 显示全部楼层
【27楼】 kennyzhao

陀螺和加速度传感器都有一个固定的响应范围,采样率过高没什么大意义,还会加大处理压力。


"根据ADXL330的说明(见下图)它对重力加速度是有输出的,这样可以用来探测水平,安装正确的芯片,只有一个轴输出时,就是水平位置,可以用来修正陀螺对地水平的偏差"

这个我认为不可行,因为传感器是不知道什么时候是重力加速度。

出0入0汤圆

发表于 2008-6-13 04:43:26 | 显示全部楼层
【27楼】 kennyzhao  

陀螺和加速度传感器都有一个固定的响应范围,采样率过高没什么大意义,还会加大处理压力。


"根据ADXL330的说明(见下图)它对重力加速度是有输出的,这样可以用来探测水平,安装正确的芯片,只有一个轴输出时,就是水平位置,可以用来修正陀螺对地水平的偏差"

这个我认为不可行,因为传感器是不知道什么时候是重力加速度。


××××××××××××××××××


当只有一个轴输出,另为两个轴没有输出时,而且这个轴是垂直与飞行器安装的时候,这时飞行器就是水平的。。。。。。。。

出0入0汤圆

发表于 2008-6-13 04:50:35 | 显示全部楼层
说是4轴姿态控制,其实其它航模飞行器一样适用,本质应该都是惯性导航
为了简化模型,首先我们将输入部分的遥控器信号、数传电台信号、GPS信号、气压计信号等全部排除
只保留3轴陀螺仪 + 3轴加速度 六路输入信号,输出3路分别与XYZ轴的相对夹角
输入6路全部浮点变量,分别为:GYRO_X、GYRO_Y、GYRO_Z【单位:度/秒】、ACC_X、ACC_Y、ACC_Z【单位:mG】
输出3路全部浮点数,分别为:ANGLE_X、ANGLE_Y、ANGLE_Z,求简洁算法



××××××××××××××××××××××××××××××××

算的时候可以不用浮点。用整数(大数),绝对值没有意义,相对值才是要的东西。比如:

传感器输出1.01V和输出101v是一样的,但是算起来101要比1.01要快,不会有运算误差(我指一直保持他是整数,最后再除或者开方)。。。。。。。。。。。。。。

出0入0汤圆

发表于 2008-6-13 08:26:10 | 显示全部楼层
【30楼】 kennyzhao

你这个想法只适合静态的状态下,我举个例子:"比如加速度传感器水平安装的,

但飞行时四轴竖了起来,可能Z轴会测量出1g的加速度(因为四轴可能在做Z轴方

向的加速运动),Y轴因为可能做自由落体运动输出会0g,X轴因为没有加速度也

也为0g,那这时怎么判断是否水平呢?"

出0入0汤圆

 楼主| 发表于 2008-6-13 09:11:37 | 显示全部楼层
【31楼】 kennyzhao

用8位单片做混控,保持整个算法的非负处理是有好处的,但超过8位数值计算,要自己处理一些基本运算规则比较麻烦
考虑到 阿莫 打算用AVR32这种牛片,所以才说用浮点数表示,其实陀螺仪、加速度直接采样值都是非负整数

出0入0汤圆

 楼主| 发表于 2008-6-13 09:48:43 | 显示全部楼层
【22楼】 fengpc

用模糊控制。再高级点的就给4轴建一个数学模型,直接用数字式控制。PID和模糊控制之类的只能算模拟逼近式的控制方法
每次开机都自动标定一次水平姿态,问题应该就不大了
就是如何排除飞行时候机体振动引入干扰有一定难度

——————————————————————————

我把陀螺仪与主混控部分拆分开来,也有这层考虑,目前我陀螺仪及加速度芯片采样用了一片16MHZ的M8或20MHZ的M48
然后通过400KHZ的TWI(I2C)总线将6路输出传递给主控板,这样做的目地有以下几点:
1.模块化设计,可以将开发难度细分,方便不同人同时开发不同部分
2.利于组件升级,比如以后用ENC-03陀螺仪10位采样精度不能满足要求,可以用AD的陀螺仪芯片重新设计之
  只要保证通信接口统一原主控板硬件不用做任何修改
3.16MHZ的M8可以全速用来采样,并可独立在软件上对采样信号做过滤,一定程度上可以处理机体周期振动带来的数据波动
  这样可以让主控MPU完全专心于控制,不用花精力在采样及滤波上
4.缺点是硬件上增加了PCB板的个数,及一片M8

出0入0汤圆

发表于 2008-6-13 09:51:02 | 显示全部楼层
GPS可以提供很高的绝对位置和速度精度,误差不随时间积累,INS可以提供短时间内的高精度姿态和位置数据,误差随时间积累。把它们组合起来,可以优势互补。
比较GPS/INS获得的外方位值和空中三角测定值,前者可以达到相机位置精度10-15cm,姿态精度15ms。
用GPS/INS直接测得的相机的位置和姿态值,再利用空间前向交叉点(Spatial Forward Intersection),在飞行高度2000米时,可获得地面水平精度20cm以内,垂直精度30cm以内 (Wewel et al.,1998;Hutton and Lithopoulos ,1998) 。

出0入0汤圆

发表于 2008-6-13 09:57:01 | 显示全部楼层
我觉得“螺仪与主混控部分”拆分开来这样好,便于模块化,同意LZ观点。

出0入0汤圆

发表于 2008-6-13 10:00:15 | 显示全部楼层
惯导系统是从初始条件开始靠积分运算来推算导航参数的。纯惯导系统的精度在开始工作时或者较短的时间内很高,但是从初始对准开始,它的误差就是随时间积累的,精度随时间增加而降低,陀螺漂移是造成这种积累性误差的主要原因。要想有效减弱惯导系统的积累性误差,就需要用一种误差不随时间积累的导航系统数据作为外部信号频繁校正惯导系统。
GPS作为几何定位系统,误差不随时间积累,但是,其动态可靠性差,噪声大,受外部因素影响比较多,数据输出率也比较低。
因此,GPS/IMU组合的POS系统中,二者可以互补,各取所长:绝对精度高的GPS数据,作为外部量测输入,在运动过程中频繁修正IMU,以控制其误差随时间积累;而短时间内高精度的IMU定位结果,可以很好解决GPS动态环境中的信号失锁和周跳问题。不仅如此,IMU还可以辅助GPS接收机增强其抗干扰能力,提高捕获和跟踪卫星信号的能力。
二者能组合起来最好不过了。

出0入0汤圆

发表于 2008-6-13 10:07:28 | 显示全部楼层
闭环GPS辅助的惯性导航算法:
捷联式惯性导航器: 进行初始对准(初始值由GPS提供,找到当地水平面)并实现力学编排,由IMU测量的加速度和角速度计算出位置、速度和角度。
Kalman滤波器: 把GPS定位数据和IMU得到的位置数据比较,求出IMU的漂移误差,典型比较频率是1秒。
闭环误差控制器: 把Kalman滤波求得的误差用于校正IMU积分后的位置,并且也校正积分前的观测量。
平滑滤波器: 通过前向和后向误差处理,得到误差的最优估计值,只是后处理时用(应该使用完整的前向数据和后向数据)
前向误差控制器: 用误差的最优估计值拟合得到的POS数据,得到平滑的航迹线,则航迹线上各点的POS数据都得到。本项也只是在后处理时使用。



(原文件名:未命名.jpg)



出0入0汤圆

发表于 2008-6-13 10:09:31 | 显示全部楼层
【32楼】 bluemidi
就是用于校准不是测量.惯导系统的精度足够,可以几分钟几小时校准一次,不是几个ms校准(测量)一次......

出0入0汤圆

发表于 2008-6-13 10:12:44 | 显示全部楼层
【19楼】 feng_matrix
看到“国防科大及反引力”贴比“算法”贴人气旺多了,郁闷!
不用郁闷,本来动态环境下姿态的求解就是一件不太好做的事情,这个算法需要沉下心慢慢玩的。这段时间在补AVR的课,主要是做了块开发板,一个最小系统板和下载器,快做完了,做完了就努力去做做算法方面的事了。

出0入0汤圆

 楼主| 发表于 2008-6-13 10:19:47 | 显示全部楼层
to :【39楼】 xj_1232005

这个图是经典配置,做的完善GPS是不可少的
先独立讲IMU是为了简化模型,让更多的高人参与进来啊!

出0入0汤圆

发表于 2008-6-13 10:35:10 | 显示全部楼层
【40楼】 kennyzhao

你说的方式不能作为校准的基础。

出0入4汤圆

发表于 2008-6-13 12:35:32 | 显示全部楼层
为什么要去控制飞行器的角度呢?
为何不直接控制X Y方向的加速度为0

出0入0汤圆

 楼主| 发表于 2008-6-13 13:06:44 | 显示全部楼层
【44楼】 ilan2003 小松工程

不知自身姿态
如何输出控制?

出0入0汤圆

发表于 2008-6-13 14:43:34 | 显示全部楼层
【41楼】 xj_1232005
积分:209
派别:
等级:------
来自:
【19楼】 feng_matrix  
看到“国防科大及反引力”贴比“算法”贴人气旺多了,郁闷!  
不用郁闷,本来动态环境下姿态的求解就是一件不太好做的事情,这个算法需要沉下心慢慢玩的。这段时间在补AVR的课,主要是做了块开发板,一个最小系统板和下载器,快做完了,做完了就努力去做做算法方面的事了。  
__________________________
专注做好每一件小事,不求一天两天成为高手,只求不断有提高。

=====================================================
定义一套接口,用PC机进行算法仿真,这样,只要有电脑的人都可以参与,不必都到AVR上面才能做。

出0入4汤圆

发表于 2008-6-13 15:19:27 | 显示全部楼层
X的加速度是由左右两个螺旋桨的推理不平衡引起的
Y的加速度是由前后两个螺旋桨的推理不平衡引起的

出0入0汤圆

发表于 2008-6-13 15:56:05 | 显示全部楼层
to 【47楼】 ilan2003 小松工程
也有可能是因为侧风引起的

出0入0汤圆

发表于 2008-6-13 16:24:38 | 显示全部楼层
to 【楼主位】 feng_matrix,

算出三个角度都为零并不能说明没有漂移。 建议把这个考虑进去

出0入0汤圆

发表于 2008-6-13 19:04:38 | 显示全部楼层
还是亲自搭建一个平台,做实验,

一切以数据说话,呵呵!

出0入0汤圆

发表于 2008-6-14 13:15:23 | 显示全部楼层
好深奥啊,先学学

出0入0汤圆

发表于 2008-6-14 16:23:44 | 显示全部楼层
有个问题请教 搂主。

  “我把陀螺仪与主混控部分拆分开来,也有这层考虑,目前我陀螺仪及加速度芯片采样用了一片16MHZ的M8或20MHZ的M48
然后通过400KHZ的TWI(I2C)总线将6路输出传递给主控板,这样做的目地有以下几点:
1.模块化设计,可以将开发难度细分,方便不同人同时开发不同部分
2.利于组件升级,比如以后用ENC-03陀螺仪10位采样精度不能满足要求,可以用AD的陀螺仪芯片重新设计之
  只要保证通信接口统一原主控板硬件不用做任何修改
3.16MHZ的M8可以全速用来采样,并可独立在软件上对采样信号做过滤,一定程度上可以处理机体周期振动带来的数据波动
  这样可以让主控MPU完全专心于控制,不用花精力在采样及滤波上
4.缺点是硬件上增加了PCB板的个数,及一片M8。”


搂主 使用2片单片机 来做飞控姿态控制对吗?   16MHZ的M8 专做 传感器采样及过滤  把处理后的信息传给 主控制单片机是马?

16MHZ的M8 和主控 单片机是通过什么口子通信?  这样 隔了一层会不会出现 控制滞后?

出0入0汤圆

 楼主| 发表于 2008-6-15 17:30:56 | 显示全部楼层
to :【52楼】 IC_SO

TWI 400KHZ 通信速度很快,us级,4轴控制到ms级就不错了,不是一个数量级

出0入0汤圆

发表于 2008-6-15 18:46:45 | 显示全部楼层
搬个板凳坐下来慢慢研究。

出0入0汤圆

发表于 2008-6-15 19:11:24 | 显示全部楼层
关于监测水平
可以用滚珠开关阵列来做啊!
滚组开关正向或反向倾斜2-5度就能值变化的。

(原文件名:倾角监测.JPG)

出0入0汤圆

发表于 2008-6-15 23:09:04 | 显示全部楼层
【55楼】 mljda 技术是人性

积分:852
派别:
等级:------
来自:全国各地
关于监测水平
可以用滚珠开关阵列来做啊!
滚组开关正向或反向倾斜2-5度就能值变化的。
=========================================
静态物体还行,飞行状态太复杂,搞不定
举例:汽车是水平的,急刹车的时候,这个检测方法立刻失效

出0入0汤圆

发表于 2008-6-15 23:51:11 | 显示全部楼层
明白楼上了。

出0入0汤圆

 楼主| 发表于 2008-6-16 17:29:58 | 显示全部楼层
自己顶一下,坛子里不是有北航和哈工大搞飞控的高人嘛,给我们指点一二呀!

出0入0汤圆

发表于 2008-6-16 18:02:58 | 显示全部楼层
可以先假设飞行器是一个质点,简化计算

出0入0汤圆

发表于 2008-6-17 15:02:38 | 显示全部楼层
捷联惯导的飞行中误差消除只能用GPS吗?还有没有别的办法?
另外比较系统的惯性导航教材中还考虑到了地球的几何形状以及引力方向,提供了消除地理航迹角误差的算法。看起来好复杂。

出0入0汤圆

发表于 2008-6-17 15:13:11 | 显示全部楼层
在静止和匀速直线运动的状态(近似), 可以读从三轴加速度传感器得到绝对的倾角, 用来修正陀螺仪的漂移(误差)。
在非上状态, 就只能通过陀螺仪得到相对的倾角。

其实在飞行过程中,(非悬停状态),绝对的倾角意义不大。单靠陀螺仪就可以胜任。 当依靠陀螺仪把飞行状态变成近似静止或匀速直线运动, 就可以依靠三轴加速度传感器的读数取得绝对的角度(并修正陀螺仪误差)。 这时再慢慢把飞行器修正到绝对的静止

出0入0汤圆

发表于 2008-6-17 15:37:27 | 显示全部楼层
就是的
高人出来指点下嘛
都不说话呢

出0入0汤圆

发表于 2008-6-19 15:16:38 | 显示全部楼层
回61F,如何确定飞行器已被调回静止状态?因为加速度传感器是可以测量重力的。
如果想通过调静止来找重力矢量,那就应该把重力方向定义为未知量。在飞行过程中测到一个数值上与g相等、方向不同的加速度就一定是重力吗?比如飞行器朝北做水平匀加速运动,同时均匀加速下降,这时候可能会测量到一个倾斜的与g等值的加速度。仅从数值上判断其与g相等就认为飞行器已静止是不正确的。

出0入0汤圆

发表于 2008-6-19 17:37:05 | 显示全部楼层
楼上说的 有理,另外 靠角速度 和加速度  来算出 角度后  控制电机; 为何不直接 用角度传感器(sca100T)?   搂住能给解释一下吗?

出0入0汤圆

发表于 2008-6-19 17:43:36 | 显示全部楼层
63楼】 Alex_rcpilot

先假设x轴指向正北, z轴指向地面

静止(或匀速直线运动)的时候对于三轴加速度传感器来说x,y轴输出为0, z轴输出为g, |x|+|y|+|z|=g
当你所说的情况, x输出为a, y轴0, z轴为g+b 这个时候 |x|+|y|+|z|=|a|+0+|g+b|>g

可以明确的一点是,只要飞行器不是静止或者匀速直线运动,就能够监测到三轴的绝对值和大于重力加速度.
当然也有例外, 当飞行器反过来z轴对地面,以2g的加速度上升, 也就是说b=-2g,检测就会有问题. 不过这个可能性几乎等于零

反而静止还是匀速直线运动比较难于区分.

出0入0汤圆

发表于 2008-6-19 17:46:02 | 显示全部楼层
【64楼】 zhcool_521

请问这个角度传感器原理? 能否在运动中测量, 测量频率可以去到多少.

测量角度无非几个方法1. 加速度, 2. 加速度配合陀螺, 3, 磁场. 请你说说你说的传感器是什么原理?

出0入0汤圆

发表于 2008-6-19 20:44:53 | 显示全部楼层
想深入研究这个,但是现在暂时没时间。等我事业上有进展后,我也可以帮忙。关键是现在创业初期,连自己都养不活,还得老老实实的努力工作。我们这样的男人嘛,如果有了事业,家庭双丰收,我想是很愿意投入到这些项目里面来的。那一直是我的梦想。

出0入0汤圆

发表于 2008-6-20 00:30:36 | 显示全部楼层
加速度要放到半径上       没有角速度的好弄

出0入0汤圆

发表于 2008-6-20 14:47:45 | 显示全部楼层
sca100T 内部原理 没看过,  网上 好多其应用资料,是一数字接口的倾角传感器。

出0入0汤圆

发表于 2008-6-20 14:48:45 | 显示全部楼层
feng_matrix    先 说一下 你前端时间的  处理方法。  供大家讨论!

出0入0汤圆

 楼主| 发表于 2008-6-20 15:22:22 | 显示全部楼层
很早以前坛子上就有了,你翻很老的帖子里有


再上个新图:

(原文件名:四轴PID算法.jpg)

出0入0汤圆

发表于 2008-6-20 17:45:05 | 显示全部楼层
这种控制方法是 需要遥控器干预的,  现在不是 作自动 悬停吗? 不需要任何外界 的干预。

另外,还想问一下, 当时 你是如何判断 普通 商用电调满足不了四轴使用的?  依靠什么数据转向作 电调的?

出0入0汤圆

发表于 2008-6-20 17:56:02 | 显示全部楼层
16MHZ的M8 专做 传感器采样及过滤    -----   这个单片机  作采样,滤波;  滤波 采用滑动滤波吗?
滑动滤波:
unsigned int Filter_32(unsigned int *dp)
{       
        unsigned int          i;
        unsigned int          temp;
        temp = 0;
        for(i=0;i<32;i++) temp += dp;
        i = temp>>5;
        return(i);
}

这个单片机是否作 pid 处理? 还是在另一单片机做pid处理? 另,pid处理是用的简单增量式?

datas = Filter_8(GYR_X) - GYRx_REF;
Elev = (datas*3 - Elev_1*6 + Elev_2*2)/30;
Elev_2 = Elev_1;
Elev_1 = datas;

出0入0汤圆

发表于 2008-6-20 17:58:32 | 显示全部楼层
feng_matrix 你的msn怎么老不在线? 什么时候能有机会请教请教。

出0入0汤圆

 楼主| 发表于 2008-6-20 21:29:26 | 显示全部楼层
【73楼】 zhcool_521

我用两种:移动平均法或移动加权平均法
移动平均法就是:(历史平均+当前值)/2
移动加权平均就是:【历史平均×(采样次数-1)】/采样次数 + 【当前值 /采样次数】
移动平均法当前值权重大,移动加权平均法历史权重大,采样次数越多,历史越大
这两个算法用单片机都好做,占用内存也很少,数组平均法采样多路占内存太多了

这个是个汇编16位的移动平均
//ADC采样移动平均算法,main_temp1/main_temp0中是当前值,r_adcomp1/r_adcomp0中是历史平均值
ADC_AVERAGE:
        clc;
        adc r_adcomp0, main_temp0;
        adc r_adcomp1, main_temp1;
        clc;
        lsr r_adcomp1;
        ror r_adcomp0;
        ret;

出0入0汤圆

 楼主| 发表于 2008-6-20 23:12:25 | 显示全部楼层
to : 【73楼】 zhcool_521

无论怎么过滤,记得切换通道后第一次采样值抛弃,此值非常不准
这个没啥道理,我试了很多次都这样,非要2次及以后才准

出0入0汤圆

发表于 2008-6-21 10:39:18 | 显示全部楼层
feng_matrix  其他问题还没有回答呢?

这个单片机是否作 pid 处理? 还是在另一单片机做pid处理? 另,pid处理是用的简单增量式?

这种控制方法是 需要遥控器干预的,  现在不是 作自动 悬停吗? 不需要任何外界 的干预。

另外,还想问一下, 当时 你是如何判断 普通 商用电调满足不了四轴使用的?  依靠什么数据转向作 电调的?

出0入0汤圆

发表于 2008-6-21 11:12:16 | 显示全部楼层
通过角速度和加速度,计算出 当前姿态角α。 然后  螺旋桨的升力=飞行器的重力/2  * ctg α
                                              相对螺旋桨的升力=飞行器的重力/2 *(1 - ctg α)

出0入0汤圆

 楼主| 发表于 2008-6-21 16:18:56 | 显示全部楼层
to :【73楼】 zhcool_521

我的陀螺仪可以直接接在主控MCU,也可以独立用一片M8或M48处理后,再将数字信号通过TWI传递到主控MCU
如果陀螺仪独立用一片MCU处理数据,则采样及滤波可以在这片MCU上处理,个人认为仅限于滤波比较好
快速有效的提供原始陀螺仪、加速度数据供主控MCU使用即可,不要做PID的算法加工
控制算法集中在主控中进行,如果一个大系统中级联了很多子PID系统或其它算法控制
我不知道该如何处理相互关系,除非各部分控制对象不同

出0入0汤圆

 楼主| 发表于 2008-6-21 16:56:08 | 显示全部楼层
to : 【77楼】 zhcool_521

关于遥控器的问题,我的意见很明确:初步飞控系统一定要遥控器。
个人认为,做机器人或飞行控制有个原则:
基于负反馈的自动控制系统有充分技术基础的,我们还是可以花精力去实现的
基于行为的控制系统还是谨慎定目标,其实理论都还比较缺乏,不要说实践经验了。
网上四轴图片资料有很多,你看到有几个不用遥控器的?

电子工程师容易认为,我们的飞控上有了陀螺仪、加速度计、电子罗盘、GPS等等
飞控自身就知道自身什么状态了,那么想做什么就做什么,不用人参与就可以做事情了
其实能知道自身是什么是一会事,能知道自己下一步该干什么是另一回事

没有遥控器的一架自控航模,接通电源后它该干些什么呢?
自检、起飞、稳定悬停、按给定航线飞行、到达目的地、完成任务、返航、确认降落场地、降落等等
这里面涉及的问题非常多,这些都是基于行为的任务,要做到其中任何一个,都需要飞行器对外部环境的诸多参数进行处理
复杂性远不是控制飞行器内部几个传感器那么简单,飞控可以识别自我状态,但要飞控识别外部环境就难了

其实我一直认为,我在主控中加上遥控器接收电路是为了简化系统难度的
给你一个只有动力控制与惯导系统的硬件,让你写飞控程序,其实很难下手的。

出0入0汤圆

 楼主| 发表于 2008-6-21 17:08:43 | 显示全部楼层
关于普通电调的问题,以前已经讨论过了,去翻翻与kb6mcc讨论帖子吧
重复一下我个人的理解:

航模商品无刷电调是可以用的,但前提是你的四轴硬件要满足一定条件
在不考虑外部干扰因素的前提下,4轴的机械机构一旦确定,包含4轴几何形状、半径、电机、桨
整个系统就有了一个固有旋转【侧翻、仰俯】周期或速度
如果4轴控制系统,包含陀螺仪、通信、电调、电机的整体响应速度
快于硬件系统的固有周期,则系统可稳定之,效果看个人用的混控算法
反之如果控制周期大于固有周期,那就先天不足,无论什么混控算法都没用
这就是我理解的4轴稳定充要条件

kb6mcc曾经谈到一个经验值,四轴整体直径小于50cm,商品无刷电调可能会有问题
我没法验证这个经验值,而且不能肯定大于50cm是否就一定可以
我第一次用分立元件手焊的四轴系统,就比较小,大概40cm不到,用的是好盈的电调
做好的四轴稳定性极差,以至于最后完全摔坏

出0入0汤圆

 楼主| 发表于 2008-6-21 17:12:35 | 显示全部楼层
to :zhcool_521

以上3贴纯属个人观点,仅供参考,你可以完全不信的

出0入0汤圆

发表于 2008-6-24 11:18:40 | 显示全部楼层
没有参照物还不简单了啊,你给装置里面固定一个参照物,测相对偏差应该就可以了吧

出0入0汤圆

发表于 2008-6-24 14:40:36 | 显示全部楼层
【83楼】 sunsanpi521
积分:1
派别:
等级:------
来自:
没有参照物还不简单了啊,你给装置里面固定一个参照物,测相对偏差应该就可以了吧  
   
==================================

说起来容易,做起来难啊

出0入0汤圆

发表于 2008-6-25 11:56:41 | 显示全部楼层
控制过程可分为这么几个阶段:

一阶段:  传感器采样+滤波      速度越快越好,得出数据越精准越好。
二阶段:  传感器数据处理      在飞行器姿态发生变化时。 要考虑到  每个浆承受重力的变化(角度变化引起的重心偏移)+ 每个浆垂直向上升力的变化(角度变化引起)+  高度变化引起的四个浆的总升力的变化。  其中的每种变化 都是一种pid处理,然后通过矩阵算法把它柔和起来变成4个电机的控制量。

feng_matrix   不知你前端时间的算法是否使这样?

出0入0汤圆

 楼主| 发表于 2008-6-25 17:36:24 | 显示全部楼层
一是采样没错的,二我看了两遍没看懂,不好意思

出0入0汤圆

发表于 2008-6-26 08:45:08 | 显示全部楼层
二阶段:  把采样得到的数据, 通过一种算法得出角度(或其他) ,  分别控制4 电机。
  


在飞行器姿态发身变化时,引起飞行器 自身发身变化的因素有:1.角度变化引起的重心偏移(每个浆承受总重力的比例发生变化);2.每个浆垂直向上升力的变化;3.四个浆的总升力的变化(高度变化引起的)。
依据这个来做算法。

出0入0汤圆

发表于 2008-6-26 12:06:31 | 显示全部楼层
PWM ESC 是可以满足大多的4轴正常飞行. 4轴3D飞行就一定要考虑用i2c ESC了
附上的视频是用普通(PWM)的无刷速度控制器短飞行。

点击此处下载 ourdev_327062.zip(文件大小:24.32M) (原文件名:esc.mpg.zip)

我的四轴整体直径 = 70cm

出0入0汤圆

发表于 2008-6-26 13:43:08 | 显示全部楼层
楼上的,你的桨是哪里买的?电机是多少KV的?

出0入0汤圆

发表于 2008-6-26 13:50:03 | 显示全部楼层
楼上的,  Motor = Towerpro 2410-09/ 840KV  Props  = epp1045.国外邮购

出0入0汤圆

发表于 2008-6-27 08:59:05 | 显示全部楼层
我的老图片为马达回应时间与框架大小一起之间的关系。 您能发现,无论什么混控算法都没用 , 因为有很多其他因素会影响马达回应时间. 除非设计自己精确的马达、框架,ESC和有效负荷。

如果每个轴(X,Y and Z)由用户自行pid处理. 将给许多用户自行设计框架、选择马达和推进器.


(原文件名:size.jpg)

出0入0汤圆

发表于 2008-6-28 08:34:52 | 显示全部楼层
kb6mcc  看见你的飞行录像真羡慕。  用 商用电调  飞起来了。轴整体直径 = 70cm(是 从安装电机的地方算得马?)  自重多少?
直径80cm 自重3kg,以你的经验,响应速度能跟得上马(或者 电调+电机+螺旋桨   的相应时间多快理论上就能飞起来)?

出0入0汤圆

发表于 2008-6-28 08:36:19 | 显示全部楼层
feng_matrix   我给你发过邮件  。 不知道 你收到 没有。  期盼你的回复!

出0入0汤圆

 楼主| 发表于 2008-6-28 23:35:41 | 显示全部楼层
TO : 【93楼】 zhcool_521

收到邮件,你也想DIY四轴呢?还是用在其它地方?

出0入0汤圆

发表于 2008-6-29 00:18:34 | 显示全部楼层
是的,不过想做个稍微大点的四轴。  前段时间 用ewts82,测试过一些数据。感觉太慢,所以想换个角速度传感器!

出0入0汤圆

发表于 2008-6-29 04:45:12 | 显示全部楼层
To: 【92楼】 zhcool_521

                      大儿童的玩具only...:-) 直径80cm 自重3kg用普通(PWM)的无刷速度控制器是可以的.

我的70cm四轴是 从安装电机的地方算得.  自重1 .8KG    http://www.youtube.com/watch?v=Usitb_NoxHA

相应时间多快理论 =  螺旋桨旋转在4000RPMS (这是相当高的在四轴的应用)螺旋桨需要15毫秒为一轮换.  

飞行控制器的闭环回应时间相当重要
但是
普通无刷速度控制器可以回应8-10ms是可以的

出0入0汤圆

发表于 2008-6-29 09:28:53 | 显示全部楼层
你用的是10寸浆,我用的是18寸浆,我的起飞转速在2500RPMS 左右。 我前段时间的实验数据是:从单片机改变控制脉宽,到感觉升力在变化的时间估计有200ms(初始转速为500RPMS改变为1500RPMS)。

出0入0汤圆

发表于 2008-6-29 09:37:12 | 显示全部楼层
最近我也在做 关于传感器的实验  。 角速度用的ewt82,感觉一般,想换所以enc03.  我很同意楼主的想法,通过传感器数据计算出当前角度;无论飞行器是加速运动还是匀速运动,测出的角度都是正确的,这样再控制4电机 才不会出问题。
但我现在的 实验很难做到,不知kb6mcc 有什么高见?

出0入0汤圆

发表于 2008-6-29 10:53:06 | 显示全部楼层
我从未使用过ewts82或enc-03。  但ewts82是比其他传感器慢的。

adxrs300是昂贵,但它运作非常好和mlx90609-r2也是非常好的传感器。
由于传感器总是安装在框架中间,因此它需要有好灵敏性.

出0入0汤圆

发表于 2008-6-30 16:43:24 | 显示全部楼层
即使 用adxrs300,也存在   采集角速度数据输出角度不准  的问题。我用的adxrs150试验过了。  不知kb6mcc 有什么高见?

出0入0汤圆

发表于 2008-6-30 23:34:19 | 显示全部楼层
角速度数据用卡尔曼滤波器可以计算出的.

http://www.youtube.com/watch?v=1DDEH2n2_hY

http://diydrones.com/profiles/blog/show?id=705844%3ABlogPost%3A23188

http://jordii07.googlepages.com/ArduIMUFinal.txt
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 17:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表