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

标题: 共轴双桨自动驾驶直升机(二)之四轴飞行器篇 [打印本页]

作者: c_nmusic    时间: 2009-5-20 21:31
标题: 共轴双桨自动驾驶直升机(二)之四轴飞行器篇
上一篇共轴双桨自动驾驶直升机,由于论坛管理原因被关闭了,因为这个帖子已经持续一年了。

下面只好新开帖子,继续记录制作过程。


书归正传,最近几天一直在研究为什么我的四轴总是抖动。今天在和feng_matrix交流的过程中,被他的一个问题“为什么积分总是在正半轴”给提醒,想到也许是四轴重量配比不均匀,导致四轴无法依靠重力稳定在平衡位置。结果造成积分必须持续纠正,引起震荡。

经过分析,我认为这个可能性很大。这样下面就比较明确了,继续研究MK的代码,将其中修改了陀螺仪中立点的部分也搞明白,这样我的四轴就可以自动适应负载变化,不再抖动了。

(, 下载次数: 293)

[ 本帖最后由 c_nmusic 于 2009-5-20 21:43 编辑 ]
作者: 营口烟头    时间: 2009-5-20 22:13
没看动 沙发:em15:
作者: 逆行远方    时间: 2009-5-20 23:56
看过楼主上一篇帖子,支持下!
作者: zgchen    时间: 2009-5-21 09:43
标题: 修改好了没有啊!实验一下啊!
:em04:
作者: cxhai    时间: 2009-5-22 00:12
:em04:
作者: c_nmusic    时间: 2009-5-22 07:36
这2天在我的四轴上试验了一下,发现一个很关键的问题——如果陀螺仪中立点没有变化,为了能够自动补充重心改变引起的不平衡,而手动调整了中立点,最大的问题是这样积分就会一下子变化很大,是根本无法继续做到平衡的。

看起来我的问题还需要自己想办法。

目前我在查的地方有几个:
1、机架配重不对称,目前是容易左右晃动,所以我检查了一下左右的配重。除了发现多了一个铜柱外没有什么太大差异。
2、姿态控制频率一致性不够。由于加入了SD卡,所以那个文件系统时不时地要写一下SD,这样就会造成延迟。引起频率变化从425Hz到470Hz都有。也许这个会引起积分变化,引起晃动。这个是目前重点怀疑的。
3、P参数过大。这个也会引起震动,因为过大的P会把陀螺仪震动也放大,引起机身震动。这个我前几天试飞只用P后已经调整到一个比较合适的参数了。
作者: eew11    时间: 2009-5-22 11:07
:em15:
作者: nomoneyiv    时间: 2009-5-22 18:41
标题: 你好!
调整的不是陀螺仪的中立点吧,,调整的是方向杆量的中立点吧,

这就相当于,人为进行部分校正,手工修改姿态。

这样,陀螺仪的积分量,就不会捣乱了!
作者: c_nmusic    时间: 2009-5-22 21:43
原帖由 nomoneyiv 于 2009-5-22 18:41 发表
调整的不是陀螺仪的中立点吧,,调整的是方向杆量的中立点吧,

这就相当于,人为进行部分校正,手工修改姿态。

这样,陀螺仪的积分量,就不会捣乱了!


我参考MK的代码,看到他里面有调整陀螺仪中立点的部分。
但是我的目地是想达到调整方向杆量的功能。可惜没有在MK的代码里看到。

现在看起来,也许是别的部分的代码起到了这个作用。
作者: c_nmusic    时间: 2009-5-22 21:47
今天稳定性有了点收获。

我把四个马达都换掉了,以前用的850KV的马达有一个桨夹被一次倒扣给撞弯了,然后只要高转速就会非常抖,抖到手根本拿不住。而另外2个马达就没这个问题。由于桨夹没有单卖的,只好把4个马达全都换了。现在也是新西达2212 1000KV的马达了。

经过这个调整后,现在水平方向已经比较平稳了,以前的晃动被消除了。不过前后又开始晃动,真是按下葫芦瓢又起。不过这回的抖动我知道原因——重心配比不平衡,由于我这个四轴并不是完全对称的机架,以前手工设置的马达调整量不完全正确,所以四轴自己拉平后一撤掉调整量就又歪了,于是就开始晃动。

现在的姿态调整频率已经稳定到500Hz,这是拿示波器量过确认的。我把SD卡部分的代码放到了main里,这样就不用担心姿态调整中断被打扰了。给我的感觉现在有可能上到1000Hz的调整速度呢。
作者: 麒逢    时间: 2009-5-22 23:24
:em26:
作者: c_nmusic    时间: 2009-5-23 15:20
今天继续有所收获。

本来是根据MK的四轴来调整我的四轴I参数的,我发现MK的四轴在倾斜45度后马达转速加倍,于是我就用这个来调整我的I参数,可缺发现了这个问题。

(, 下载次数: 176)

陀螺仪积分放一阵子不动会自己衰减下去。这个以前还没注意到过。

又仔细看了看MK的数据,他的没有这个问题。

(, 下载次数: 177)

陀螺仪积分和加速度配合的很好。

可这时为什么呢?忽然我想到以前看到单没有引起注意的一个参数:ACC_AMPLIFY。

在MK的融合算法的即时融合里,我注意到他用加速度计去补偿陀螺仪的积分,这2种风马牛不相及的东西居然可以放到一起,这个ACC_AMPLIFY起到了关键的作用。它将加速度计的数据放大,做到和积分差不多,然后才能用来补偿。而我犯的错误就是直接拿原始的加速度计数据去补偿了,结果怎么算积分也是偏大,这就造成了陀螺仪积分逐渐地被越衰减越小。

重新设置的放大倍数为3的ACC_AMPLIFY参数后,四轴地积分曲线终于正常了,不再会衰减了。
(, 下载次数: 187)
作者: c_nmusic    时间: 2009-5-23 15:53
下面这个图可以看出有没有对陀螺仪积分进行调整的区别。

(, 下载次数: 171)
看到这个图以后,我就明白了MK后面的针对陀螺仪的0点调整代码里的一些参数是怎么来的了。

[ 本帖最后由 c_nmusic 于 2009-5-23 16:02 编辑 ]
作者: nomoneyiv    时间: 2009-5-23 18:05
标题: 你好
期待你的继续,我的有机会了,也会加入你的讨论中!呵呵!:em19:
作者: huqingpp    时间: 2009-5-24 11:19
楼主你好,一直关注你的帖子。能不能吧你参考的老外的源码发一份给我,我也学习学习。
huqingpp@yahoo.com.cn
谢谢
作者: VTOL    时间: 2009-5-24 13:20
关注中!:em00:
作者: c_nmusic    时间: 2009-5-24 13:47
原帖由 huqingpp 于 2009-5-24 11:19 发表
楼主你好,一直关注你的帖子。能不能吧你参考的老外的源码发一份给我,我也学习学习。
huqingpp@yahoo.com.cn
谢谢


这里下:
(, 下载次数: 442)
作者: c_nmusic    时间: 2009-5-24 16:34
今天搞定了视频http://www.mikrokopter.de/ucwiki/VideoAbspielen?id=181 里的那个挂相机的动作,终于明白了为什么MK的可以做到这种稳定。

我的四轴现在也可以在重心变化的时候保持稳定了,原因很简单,就是因为陀螺仪。

在挂上重物后,四轴一起飞,势必往重的方向倾斜,这就产生了一个这个方向的角速度。可以角速度可以被陀螺仪检测到并由PID处理。由于处理频率很快,所以基本没有时间让这个角速度产生位移就处理完了。这就形成了在外部看来四轴完全不受重心改变的影响。这个效果并不需要特殊的代码就可以做到,实在是很巧妙的。核心就是一个相当大的I参数,大到可以产生足够的拉力把重物拉起来。
作者: c_nmusic    时间: 2009-5-24 17:23
今天还把陀螺仪温飘的修正代码加上了,不过在试飞的时候并没有出现过调整动作。

   // deviation of gyro nick integral (IntegralNick is corrected by averaged acc sensor)
   IntegralErrorNick  = IntegralNick2 - IntegralNick;
   Reading_IntegralGyroNick2 -= IntegralErrorNick;

   cnt = 1;// + labs(IntegralErrorNick) / 4096;
   CorrectionNick = 0;
   if((labs(MeanIntegralNick_old - MeanIntegralNick) < MOVEMENT_LIMIT) || (FCParam.Kalman_MaxDrift > 3* 16))
   {
    if(IntegralErrorNick >  ERROR_LIMIT2)
    {
     if(last_n_p)
     {
      cnt += labs(IntegralErrorNick) / ERROR_LIMIT2;
      CorrectionNick = IntegralErrorNick / 8;
      if(CorrectionNick > 5000) CorrectionNick = 5000;
      AttitudeCorrectionNick += CorrectionNick / BALANCE_NUMBER;
     }
     else last_n_p = 1;
    }
    else  last_n_p = 0;
    if(IntegralErrorNick < -ERROR_LIMIT2)
    {
     if(last_n_n)
     {
      cnt += labs(IntegralErrorNick) / ERROR_LIMIT2;
      CorrectionNick = IntegralErrorNick / 8;
      if(CorrectionNick < -5000) CorrectionNick = -5000;
      AttitudeCorrectionNick += CorrectionNick / BALANCE_NUMBER;
     }
     else last_n_n = 1;
    }
    else  last_n_n = 0;
   }
   else
   {
    cnt = 0;
    BadCompassHeading = 1000;
   }
   if(cnt > ParamSet.DriftComp) cnt = ParamSet.DriftComp;
   if(cnt * 16 > FCParam.Kalman_MaxDrift) cnt = FCParam.Kalman_MaxDrift / 16;
   // correct Gyro Offsets
   if(IntegralErrorNick >  ERROR_LIMIT)   AdNeutralNick += cnt;
   if(IntegralErrorNick < -ERROR_LIMIT)   AdNeutralNick -= cnt;

这是MK的0点调整代码,再解说之前,先看看为什么需要进行温飘调整。

还是这个图:
(, 下载次数: 197)

通过这个图可以很明确地看出来,如果不进行温飘调整,到后来陀螺仪会越偏越大,直到超过加速度计的调整范围。
在实际测试中,如果让马达转2分钟,在没有0点调整代码的情况下,会明显感觉四轴开始慢慢地向一边歪,而程序则将这个歪的位置认为是平衡位置。

看到这个图,我们大概也可以明白如何进行0点调整了。那就是我们需要比较陀螺仪的原始数据的积分和我们经过调整后的积分值之间的差异,如果这个差异过大,那么说明我们需要动一下0点了。MK的流程也差不多是这样,只是他写的比较复杂。

   // deviation of gyro nick integral (IntegralNick is corrected by averaged acc sensor)
   IntegralErrorNick  = IntegralNick2 - IntegralNick;
   Reading_IntegralGyroNick2 -= IntegralErrorNick;

这部分,就是计算陀螺仪原始数据积分和调整后积分的差异的。IntegralNick2,Reading_IntegralGyroNick2  是陀螺仪原始数据积分,IntegralNick是经过加速度计调整后的积分,IntegralErrorNick  就是他们的差异。
第一行求出差异,第二行将这个差异从陀螺仪的原始积分里去掉,Reading_IntegralGyroNick2 这个是真正在AD部分用的陀螺仪原始数据积分。这个去掉的动作很重要,否则的话一旦积分差异超过上限,就会一直调整下去。

下面的部分就是根据这个差异进行判断,其实很多时候代码执行起来是这样的:
   cnt = 1;
   // correct Gyro Offsets
   if(IntegralErrorNick >  ERROR_LIMIT)   AdNeutralNick += cnt;
   if(IntegralErrorNick < -ERROR_LIMIT)   AdNeutralNick -= cnt;

关键部分就是:
  if(IntegralErrorNick >  ERROR_LIMIT)   AdNeutralNick += cnt;
   if(IntegralErrorNick < -ERROR_LIMIT)   AdNeutralNick -= cnt;

其中ERROR_LIMIT是(BALANCE_NUMBER * 4),意思是如果我们每次进行积分,2个数据差异都有4,那么说明我们确实应该调整一下中立点了。
代码简化成上面的形式就容易理解多了,就是看一下差异,如果超过ERROR_LIMIT那么就对陀螺仪中立点增加1,如果小于-ERROR_LIMIT,那么就减1。
而这个差异是执行了BALANCE_NUMBER次计算后的,也就是积分要在0.5秒内差出这么多才可以。条件还是很严格的。

不过MK还多想了一些,还想到了如果在这0.5秒内一下子差出(BALANCE_NUMBER * 16)的情况:
cnt = 1;// + labs(IntegralErrorNick) / 4096;
   CorrectionNick = 0;
   if((labs(MeanIntegralNick_old - MeanIntegralNick) < MOVEMENT_LIMIT) || (FCParam.Kalman_MaxDrift > 3* 16))
   {
    if(IntegralErrorNick >  ERROR_LIMIT2)
    {
     if(last_n_p)
     {
      cnt += labs(IntegralErrorNick) / ERROR_LIMIT2;
      CorrectionNick = IntegralErrorNick / 8;
      if(CorrectionNick > 5000) CorrectionNick = 5000;
      AttitudeCorrectionNick += CorrectionNick / BALANCE_NUMBER;
     }
     else last_n_p = 1;
    }
    else  last_n_p = 0;
    if(IntegralErrorNick < -ERROR_LIMIT2)
    {
     if(last_n_n)
     {
      cnt += labs(IntegralErrorNick) / ERROR_LIMIT2;
      CorrectionNick = IntegralErrorNick / 8;
      if(CorrectionNick < -5000) CorrectionNick = -5000;
      AttitudeCorrectionNick += CorrectionNick / BALANCE_NUMBER;
     }
     else last_n_n = 1;
    }
    else  last_n_n = 0;
   }

首先,如果上次的陀螺仪积分平均值和这次的差异不大,那么去判断是否需要调整中立点。具体为什么,不知道,有待后续研究。
下面就是判断的流程,如果积分差异超过ERROR_LIMIT2,也就是(BALANCE_NUMBER * 16),且出现了2次(last_n_p标志位),那么我们根据这个积分差异来计算cnt这个调整量的数值。
然后根据差异算出AttitudeCorrectionNick 的调整量。

不过我比较怀疑有多大几率陀螺仪0点会一下子飘很多,一般情况下都是慢慢飘的,所以我怀疑这部分复杂逻辑在实际飞行时有没有起到很多的作用。
作者: angersuper    时间: 2009-5-25 16:44
我是来学习的
作者: dengchengen    时间: 2009-5-26 17:12
学习ING,没看懂
作者: c_nmusic    时间: 2009-5-27 16:34
又仔细看了看MK的控制部分的代码,因为从我买的四轴的实际动作来看,我以前的理解有误。

仔细研究了以后,发现几个以前的理解错误:
1、Looping_Nick、Looping_Roll指的是四轴飞3D时在空中翻跟头时用的变量,而不是一般的方向控制。
2、那些融合代码,目地都是让陀螺仪积分紧跟加速度计,而不是试图让四轴维持在水平位置。

所以当有方向操作时,虽然四轴会倾斜,但也不能无限制倾斜,还是会被积分限制住。而不像我以前的算法,被积分给拉回平衡位置。
这和我以前的理解不大一样,让我更佩服MK了。

修改代码后,现在方向操作更加平稳了,遥控器上的微调也可以派上用场了。

现在的问题是,陀螺仪温飘看起来比预期的大。刚才试飞的时候,四轴自己越来越往后飞,我的前进舵量都打到头了,最后还是无法控制它了。
看来要放宽一下陀螺仪的0点修正代码。
作者: c_nmusic    时间: 2009-5-28 22:11
今天,四轴上的控制板光荣退役。不知道是哪里的问题,只要稳压模块焊上,总是过不了多久就出现奇怪的现象。也许是板子有问题吧,等到7805一发热就会出现短路。而用外部BEC供电就没问题。

按照设计,这块板还能用到火狐200上。

(, 下载次数: 92)

(, 下载次数: 77)

(, 下载次数: 82)

成功安装完毕,下面只要连上接收机,然后调整代码就变成一个直升机的平衡仪了。
不过这个要等四轴差不多稳定后才会轮到,放到这里稍微跑题一下。:em15:
作者: lhting    时间: 2009-5-29 09:02
看不懂,怎么没视频呢
作者: 空军上校    时间: 2009-5-29 10:32
好高深``看不懂
作者: male    时间: 2009-5-29 14:34
我看有一点像股市图
作者: zgchen    时间: 2009-5-29 22:35
标题: 四轴运用在直机上???
:em15:
作者: c_nmusic    时间: 2009-5-29 22:40
标题: 回复 #27楼
为什么不呢?
作者: donovan    时间: 2009-5-29 23:52
我看过MK的代码,一直没看懂!非常佩服楼主。希望此贴继续更新。
作者: 40560335    时间: 2009-5-30 00:02
这东西能做什么用呢!~
作者: c_nmusic    时间: 2009-5-30 20:32
最近几天一直在查这个电源的问题。现在看起来78D05不适合这种11.1V的输入电压。
即使我现在只消耗270mA的电流,但将11.1V降压到5V消耗的功率就有(11.1-5)*0.27=1.647W。
虽然在7805的芯片手册上我没有找到1W对应的发热温度,但在1117S的手册上有写,在没有散热片的情况下1W可以产生160度左右的问题。

这就不奇怪了,这个板子现在的现象就是加电一会儿然后自己断电,类似温度过热保护。有时候保护失效还会将5V的输出变成的11V输入电压,为此还爆了一个电容。

现在用了一个好赢的外置BEC来供电,好贵的东西。下一个板准备将这部分都分开,单独一个小板,避免温度干扰。

经过测试,温度干扰基准电压源比我预想的要严重。在78D05工作的情况下,2分钟后加速度计数据自己变大4,这纯是基准电压变化的结果。所以我的四轴总是飞一阵子然后开始往一个方向漂,怎么都改正不了。现在换用外部BEC后,放置4分钟,各个传感器的变化都在接受范围内。不过有意思的是垂直安装的陀螺仪温飘居然最大,比2个贴的要大不少。奇怪的现象,按理说垂直安装散热应该最好啊。
作者: dengcheng    时间: 2009-6-1 08:31
标题: 你是如何处理加速度计振动时的采集数据的准确性.

作者: c_nmusic    时间: 2009-6-1 09:11
标题: 回复 #32楼
目前是通过加快采样频率,500Hz,稍微降低移动平均移动期,目前是4次,来找到一个响应速度和数据准确性的平衡点。
作者: c_nmusic    时间: 2009-6-1 17:58
今天继续试飞,换上了德国的EPP1045桨,确实震动小多了。

今天对平衡算法又有些新的理解:
1、那个长期,即时的陀螺仪积分和加速度计的融合,都是针对下一次PI的,而不是当前的这次。我以前都以为是针对当前的呢,结果相当于把误差放大了,造成晃动。

2、对于那个长期融合,看起来MK基本没发挥作用。首先是这个调整量非常小,我按照MK的参数运算后得到的几乎没有超过1的,最大也不过0.5。在MK的代码里他用了整数,所以我分析这部分代码和没有差不多。另外我把我的代码里的这部分调整去掉后,得到的效果和MK的非常接近了。离平衡位置的调整“死区”非常小,而加上这部分代码后情况就变糟糕了。

明天继续试飞,还是要拿实践来检验的。
作者: donovan    时间: 2009-6-2 13:41
继续关注
作者: earhart    时间: 2009-6-3 17:11
开新帖了,顶一下~~~
作者: c_nmusic    时间: 2009-6-4 14:36
上一个最新的视频。

http://vhead.blog.sina.com.cn/player/outer_player.swf?auto=0&vid=21405754&uid=1407327420

有2-3级的风。

这次看了一下能飞多高,不过发现飞太高了以后我自己都不知道它在往哪个方向飞。
第一个马达上装的灯在白天根本就看不见。
PS:那个女声是我妈,不要搞错喽。:em15:

[ 本帖最后由 c_nmusic 于 2009-6-4 17:00 编辑 ]
作者: c_nmusic    时间: 2009-6-9 14:49
最近又调整了一下策略,准备上S3C2440的ARM9处理器,跑Linux系统,再配合USB口的WIfi模块实现四轴间和PC间互联。有了802.11g的54Mbps的速度,完全可以做到实时视频数据传输了,2440的400Mhz处理器也可以实现视频数据压缩。

因为要上摄像头,所以ARM9不可避免。有了arm9后,完全可以用价格更低,但性能更好的wifi模块来代替Zigbee无线模块。

居然以前都没想到过,真是做晕头了。
作者: hankls0007    时间: 2009-6-9 15:19
楼主你太强了,什么时候搞定了我订购一架
作者: thl315    时间: 2009-6-9 16:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: donovan    时间: 2009-6-12 10:22
飞得不错。
另外想问一下:楼主的四轴现在能做到像MK的视频里那样,不用控制自主悬停吗?楼主目前用的是AVR处理器吗?
作者: c_nmusic    时间: 2009-6-12 13:01
原帖由 donovan 于 2009-6-12 10:22 发表
飞得不错。
另外想问一下:楼主的四轴现在能做到像MK的视频里那样,不用控制自主悬停吗?楼主目前用的是AVR处理器吗?

目前没有做GPS,所以无操作的话四轴会自己被风吹走。
目前用了AVR和ARM7这2种处理器。
作者: c_nmusic    时间: 2009-6-14 22:08
新的ARM9的板子到了,可以装摄像头了。
下面就要在Linux下调通这个,然后再调通Wifi,就有得玩了。:em15:
作者: donovan    时间: 2009-6-14 23:40
一直没看明白MK代码里 FCParam.Kalman_MaxFusion,FCParam.Kalman_k,FCParam.Kalman_MaxDrift等的变量是干什么用的。所以想请教楼主。

比如FCParam.Kalman_k的值在234句赋值为 -1,然后在后面好像就没有变化了。但是这个变量好像很重要。

我看的是killagreg英文标注的0.71h代码,谢谢指教。
作者: c_nmusic    时间: 2009-6-15 09:09
看fc.c里SetNeutral函数的末尾,在那里有定义。
我估计这个变量一直没有使用呢,MK的代码不是完全都在工作的。
有些是预留的。
作者: c_nmusic    时间: 2009-6-18 18:29
经过这些天的努力,终于,出图像了.... :em15:

(, 下载次数: 145)

左边那个小小的模块就是无线模块,直接走Wifi的。

(, 下载次数: 115)

这是摄像头和ARM9的板,还有一个USB集线器在上面一点。

(, 下载次数: 150)

这是通过Wifi实时传过来的摄像头画面,中兴微的便宜摄像头效果比较一般。

对于PC来说这不算什么,不过在Linux下还是要费些功夫才能都搞定的。
作者: c_nmusic    时间: 2009-6-27 10:11
花了一个星期的时间,给这个摄像头部分一个完整的解决。
刚开始时使用的中星微301摄像头,直接可以输出MJPG数据流,所以问题很简单,稍微配置一下就可以出图像。但这个摄像头体积比较大,重量也很重,不大适合装到四轴上。于是我又开始搜索新的摄像头。

跑到电脑市场,买了2个目前主流的免驱动摄像头。不出我的意料,果然接上Linux不认,于是就开始疯狂搜索驱动。可惜中星微没有提供一个Linux的驱动,只好在老外的代码里搜索。最后还是通过升级Linux内核到最新的2.6.30,然后利用里面的UVC驱动把摄像头驱起来了。

下面就要找到一个合适的摄像头服务器软件,也是花了很大的功夫。在Linux下,摄像头接口有V4L和V4L2。大多数比较早的程序都只支持V4L,结果不支持我的免驱动摄像头。最后找到了一款MJPG-Streamer(http://mjpg-streamer.sf.net/),这个利用插件的模式可以支持2种接口。

本来已经很简单了,但我忘记加一个参数,导致这个程序非要用从摄像头获取MJPEG数据才能正常工作。我以为这个软件又不行了呢。最后每办法了,只好研究起S3C2440里自带的CMOS摄像头接口,配合Linux下的一个驱动自己写了一个MJPG-Streamer输入插件,才算最终出图像。

(, 下载次数: 132)

刚才在PC上研究了一下,发现只要多加一个参数,我目前的程序已经是做到摄像头通吃了。不管是有驱还是无驱还是CMOS摄像头,都可以支持了。:em24: ,应该算是一个比较完美的解决方案了。

不过目前的问题就是,如果摄像头没有硬件压缩,依靠2440自己来软压JPG,速度上不去。在320x240的情况下勉强能到10FPS。这个有点郁闷,但是目前没有好办法了,先这样吧。
作者: c_nmusic    时间: 2009-6-28 17:41
上一个最新的四轴照片。

(, 下载次数: 110)

夏天的“清凉版”,为了减轻重量到处镂空。现在全重控制在850克了。
今天GPS、气压传感器、电子罗盘都放上去了。现在换用便宜的天地飞-6A遥控器,把天线立起来,目前看还不错。

等到周一板子到了就可以把ARM9、Wifi、摄像头装上去了。
作者: luoluo4413    时间: 2009-6-28 23:08
看了一两个小时,想请教楼主一下,我想把普通的PC用摄像头改成无线传输,接受端用废弃的手机做监控,实现起来难吗,没什么基础,能提供现成的资料最好。谢谢:loveliness:
作者: c_nmusic    时间: 2009-6-29 08:45
标题: 回复 #49楼
实现起来有相当难度,不如去网上买现成的还比较省钱。

一般PC的摄像头都是USB接口,这个本身没有无线功能,所以需要外加板子才能做到无线。而接收端,一般手机要么红外,要么蓝牙,但是都没有提供视频显示的功能。要达到你的目的,你需要破解手机操作系统。或者干脆只用一个显示屏。难度都很大的。
作者: uan2008    时间: 2009-6-29 10:20
佩服呀:em26:
想请教下楼主:你以前的板子是怎样实现与计算机通讯的呢?用到了什么无线模块吗?
我比较菜啊,问的问题不知道楼主看不看得明不白:em04:
作者: c_nmusic    时间: 2009-6-29 11:30
以前用的就是一般的433Mhz的无线数传模块,电子市场有很多种,我选了体积比较小的一种。
作者: 失速飞行    时间: 2009-7-5 16:59
借宝地请教楼主一个问题<br />
我想用单片机模拟一下遥控器的PPM输出,叠加到遥控器上,就像你第一个帖子里做的那样。今天看了下控的输出,比较奇怪,好像是以低电平宽度表示舵量呢。网上的资料都是以高电平宽度表示舵量,是我理解错了还是这个控本来就是这样,各个厂家不一样?尽管编码方式都是一样的。红圈是油门通道,处于关闭状态,其余通道置中。

[ 本帖最后由 失速飞行 于 2009-7-5 17:03 编辑 ]
作者: c_nmusic    时间: 2009-7-5 17:40
如果你接的是接收机最后输出到舵机的那个信号,那部分是高电平表示舵量,因为那里PPM信号已经被“拆散”了。

如果你接的是发射机或者遥控器的一个PPM总合的信号,那么这里的信号是出于原始的PPM波形,就像你上面的图那样,低到高电平变换表示一个新的通道开始,而后面的低电平表示这个通道的脉宽。

其实就是一个有没有被解码的PPM的区别。
作者: 失速飞行    时间: 2009-7-5 20:22
啊,明白了,非常感谢:em26:
作者: 失速飞行    时间: 2009-7-8 20:56
标题: 再次请教楼主
其实我也不好意思老在楼主的帖子里问问题,不过实在没办法:em17: ,麻烦楼主了
我用AVR模拟PPM信号驱动舵机,输出信号是周期20ms,1.5ms的高电平,结果舵机左右摆个不停,为什么呢?和和高电平的电压有关系吗?视频如下:
http://vhead.blog.sina.com.cn/player/outer_player.swf?auto=0&vid=22556904&uid=66495474

代码是这样写的(Mega16L,8PU)
void main()
{
  DDRD=0x30;
//WGM=15,周期20ms, 频率50HZ,占空比OCR1A 50% ,OCR1B 7.5%(1.5ms)
TCCR1B = 0x00;
TCNT1H = 0xB1;
TCNT1L = 0xE1;
OCR1AH = 0x4E;
OCR1AL = 0x1F;
OCR1BH = 0x05;
OCR1BL = 0xDC;
TCCR1A = 0x63;
TCCR1B = 0x1A;
}
作者: c_nmusic    时间: 2009-7-8 21:36
一般来说,我比较喜欢通过定时器来切换IO口的状态。而不是用PWM来输出PPM。因为PWM的控制过于细致了,PPM用不到那么细。

舵机抖动就是输出的PPM信号不完全一致,有的时候过宽有的时候过窄,如果你确定20ms的周期没有错误的话。

http://bbs.5imx.com/bbs/viewthre ... ;page=26#pid3319190
这个是我写的包括PPM采集和输出的代码,有兴趣你可以参考一下。我只是利用定时器改变一下IO口的状态,没有用到PWM。
作者: 失速飞行    时间: 2009-7-8 21:58
谢谢楼主,我换你说的方法再试试。
----------------------------------------------------------
换了方法还是不行,偶快崩溃了……
实在不行换了个舵机,先前用的辉盛9g,换了一个辉盛标准舵机sg-5010,无抖动;再换一个辉盛5g,正常;甚至使用第一次的代码还是正常。很郁闷,也许辉盛9g比较挑剔,居然第一个就拿了它做实验,太打击人了。

[ 本帖最后由 失速飞行 于 2009-7-9 02:00 编辑 ]
作者: c_nmusic    时间: 2009-7-9 08:28
辉圣9克对PPM的要求比5g更严格,这个问题我也遇到过。应该说是9g比5g灵敏。
如果你输出的PPM波形完全正确,是不会抖动的。我想不应该是找舵机适应你的程序,而是你来适应舵机。
作者: 失速飞行    时间: 2009-7-9 08:47
是的,应该还是程序不够仔细。
我没有专业的示波器,用的是一个声卡虚拟示波器。看从接收机上发出的信号频率很稳定,而程序输出的信号频率却在不断跳动,对这个问题很是不解。我用的是一块AVR学习板,如果只是输出占空比50%的PWM,频率很稳定,但如果改变占空比,示波器上频率值就跳个不停。
用通过定时器来切换IO口的状态的方法同样存在这个问题,实在想不出问题出在哪
------------------------------------------------------------------------
终于解决了!不是波形的问题,而是电源!我的单片机采用电脑的USB供电,以前使用1602液晶的时候就存在明显的闪烁现象。想到这点后,改成3节干电池给单片机供电,现在辉盛9g工作完全正常了。不过,这种电源问题对我来说实在太隐蔽了!

[ 本帖最后由 失速飞行 于 2009-7-9 17:55 编辑 ]
作者: c_nmusic    时间: 2009-7-9 21:56
呵呵,恭喜恭喜。这就是硬件,到处都有可能出问题。
作者: 追风2k    时间: 2009-7-11 13:17
studying now..............
作者: c_nmusic    时间: 2009-7-15 20:56
最近一直在组装四轴。

本来以为很简单的,可新装的第一架四轴就不能飞稳,真是头大了。机架、程序、芯片什么的都是完全一样的,但就是无法飞稳。
用替换的方法,将测试用的电路板换到新四轴上,可以飞稳。证明和机架振动无关了,可问题到底出在哪里呢。

今天,仔细比较了2个板的陀螺仪振动情况,我认为问题出在板厚上。我测试用的板制版厂弄错了,给我做成1.6mm厚度,而新的板是1.2mm厚度。这点厚度差异也许就是问题的关键。

(, 下载次数: 85)

1.2mm厚度的控制板震动曲线


(, 下载次数: 108)

1.6mm厚度同样位置的震动曲线

对比可以看出,板子厚的明显震动更加“稀薄”一些。
作者: 失速飞行    时间: 2009-7-16 16:57
楼主下次做个3mm的板试试 ,板越厚,飞得越稳:em15:
作者: c_nmusic    时间: 2009-7-16 20:10
好主意!:em15:
作者: shadowsnow    时间: 2009-7-16 22:01
上面那个看不懂:em17:
作者: quyafeng    时间: 2009-7-22 10:42
最近我也在焊四轴,不过跟楼主比就是啥也不懂了, 还望高手不吝赐教.
作者: c_nmusic    时间: 2009-8-2 19:48
最近在忙合同的事,一直在完成一些细节方面的工作。
今天把淘宝上买的亚托PU胶贴上了,感觉有点晃,不过从数据上看减震效果还是可以的。

(, 下载次数: 77)

可以和上面几个图比较一下。
作者: a61874321    时间: 2009-8-3 12:35
高难度 看不来:em17:
作者: quyafeng    时间: 2009-8-7 14:41
楼主可以加我QQ吗?我的四轴刚刚焊好,向你学习!
作者: c_nmusic    时间: 2009-8-7 20:29
加你了。
作者: c_nmusic    时间: 2009-8-20 11:44
(, 下载次数: 78)

好贵的箱子,因为体积很大,半人高,也很重,差不多有10斤大米那么重了。
不过效果看起来不错,像个东西了。:em15:

目前的四轴已经调通ARM9+摄像头,漂移识别的代码也在测试中。
所有的MCU上的程序都可以通过TF卡自动升级,不再需要JTAG编程了。
实时视频也做到了30fps,看起来ARM9还是蛮强大的呢。
作者: eew11    时间: 2009-8-20 12:18
请教楼主,摄像头能做成16:9的吗,fpv那样感觉好点,只是现成的貌似都是4:3的,数字和模拟的都这样
作者: c_nmusic    时间: 2009-8-20 12:53
目前买到的摄像头都是这样的,传感器的布局就是4:3的,如果你乐意损失一些像素的话,是可以按照16:9来做。
作者: 征服蓝天    时间: 2009-8-20 15:00
标题: 没有最牛只有更牛的!
:em26:
作者: 鸟蚊子    时间: 2009-8-20 20:23
标题: 楼主住那里,我搬你家隔壁去
:em15:
作者: 机车精灵    时间: 2009-8-20 22:04
有成套 出售了?
作者: colahacker    时间: 2009-8-20 22:10
我有几个问题想问你,,,希望你能解答我哦

1:计算机是怎样发射信号给飞机的,是你自己做的模块吗?

2:计算机上的控制程序是你自己编写的吗?

3:你是学什么专业的啊,或者说你是做什么工作的啊?


呵呵,希望你不要误会,,我对你搞的这些技术非常的感兴趣,可惜我是什么都不会啊....

一直想自学无线电,可是苦于根本不知道如何入门

我QQ:848105,或者你的QQ多少,告诉我,加你,指导一下我,可以嘛,谢谢啦:em00:
作者: xf_112    时间: 2009-8-20 22:21


比CCTV展示的军方的强很多
作者: 慢慢熬    时间: 2009-8-20 23:07
:em15: 想找你帮我做个板,USB电脑摄像头输出到彩色显示屏幕上就可以,就是直接西安市功能就可以了!可以的话冒个炮
作者: COBRA_SIEMEN    时间: 2009-8-21 07:36
好像很专业哦,学习了。
作者: 黄蓉    时间: 2009-8-21 10:30
:em26: 很好玩呀,能普及就好了.
作者: c_nmusic    时间: 2009-8-21 16:32
平显和到网页的数据流都调通,可以和Google Earth联动了。
(, 下载次数: 71)
作者: c_nmusic    时间: 2009-8-21 19:32
原帖由 colahacker 于 2009-8-20 22:10 发表
我有几个问题想问你,,,希望你能解答我哦

1:计算机是怎样发射信号给飞机的,是你自己做的模块吗?

2:计算机上的控制程序是你自己编写的吗?

3:你是学什么专业的啊,或者说你是做什么工作的啊?


呵呵,希望你不 ...

无线模块是买的,自己没本事做哦。
控制程序全部是自己完成的,这个没有卖的。
我是软件出身的,硬件纯粹是门外汉。
作者: wangwen916    时间: 2009-8-21 23:53
楼主今天也在,佩服,对你的图象对比有兴趣,不知道可以共享不?
作者: c_nmusic    时间: 2009-8-22 09:04
代码不能公开,但这个思路其实很简单。
1、对原始图像进行灰度化处理,每个点的RGB颜色信息利用一个公式转换成255级的灰度。
2、对亮度进行最大化处理,扫描图像里的最亮和最暗的点,然后把这个亮度差异放大到0-255范围内,就是计算出一个放大倍数,然后对所有的像素都进行放大。
3、对图像降低灰度等级,我目前把它降到了16级灰度。255/16一等分,所有像素都除以这个数值就得到了降低后的灰度。
4、进行图像比较,比如原始图的0,0座标开始到320,0和新的图像进行比较,统计出相同的颜色数量,然后计算发现相同颜色和总比较像素的一个百分比。下面用原始图像的1,0点到320,0和新图像比较,又可以得到一个百分比。这样一直比较下去,就可以知道原始图像从哪里开始和新图像的重合部分最大。同样Y座标也是如此。

这种方法基本没什么算法,非常简单,但效率不高,如果图像差异大的话需要反复比较相当多次才能找到重合部分。
(, 下载次数: 71)
目前已经可以识别这种模糊图像。

[ 本帖最后由 c_nmusic 于 2009-8-22 09:06 编辑 ]
作者: 独一无二    时间: 2009-8-23 11:24
标题: 没看懂
偶也没看懂  学习学习
作者: wangwen916    时间: 2009-8-23 14:01
谢谢提示,我好好琢磨琢磨...呵呵
作者: c_nmusic    时间: 2009-8-27 09:51
到目前为止,已经调试了2架四轴,发现MK代码里的长期融合还是必不可少的。

虽然我最开始测试的四轴,经过“千锤百摔”后陀螺仪性能达到相当稳定的程度,只依靠加速度计的即时融合就可以修正好积分偏差。但并不是所有的四轴都是这样,我后来做的几个就都都有积分越来越大的问题。这会引发一个非常严重的问题——长时间飞行后四轴会越来越歪,歪到遥控器必须满舵量才能让四轴飞平。数据显示原因就是积分越来越大,而修正量总是不够大,虽然在小幅度范围内积分有大有小,但总体趋势是越来越大。

在反复调整螺旋桨、机架试图减小振动没有效果后,我只好手动加了一个让积分衰减的代码:
        if (nIntegralPitch > 0.0)
        {
                nIntegralPitch -= 0.01;
        }
       
        if (nIntegralPitch < 0.0)
        {
                nIntegralPitch += 0.01;
        }
       

        if (nIntegralRoll > 0.0)
        {
                nIntegralRoll -= 0.01;
        }
       
        if (nIntegralRoll < 0.0)
        {
                nIntegralRoll += 0.01;
        }
这样一来就不再出现越来越偏的问题了。

这段代码看起来的执行效果和MK的长期融合非常接近,但由于只是盲目地增大或者减小积分,导致四轴漂移比较大,在平衡位置10度左右就无法拉平了。所以今天我就重新启用MK的长期融合逻辑,只是把衰减量由原来的/16改成/32,这样调整量也基本在0.0X附近。刚才试飞效果不错,漂移明显减小了。
作者: prettyface    时间: 2009-8-27 17:28
标题: 看了搂住的帖子
怎么觉得晃悠,
我晕啊,
太厉害了!
基本没有我看得懂的:em19:
作者: JH071027    时间: 2009-8-31 10:22
xuexiyix!!!!!!!!!
作者: colahacker    时间: 2009-9-1 21:07
哎,代码拆成字母我全都认识

(*^__^*) 嘻嘻
同样软件工程出身,差别砸就那么大腻
作者: colahacker    时间: 2009-9-2 23:16
我也想学习相关的技术

无线电啦,电子什么的,有什么好的教材或书籍推荐一下嘛

今天特意跑别的城市的大书店转了一圈,没有找到,主要是不知道什么样的适合自己

麻烦你了,不胜感激

我是计算机专业,没有电子方面的基础
作者: c_nmusic    时间: 2009-9-4 08:57
书不是主要的,兴趣是最主要的。

如果你对这方面兴趣非常浓厚,那你自己就会找到最适合你的书。

老实说,我目前买的书基本都没翻过呢,倒是淘宝上买的开发板还是提供了不少帮助。
作者: pxx    时间: 2009-9-15 10:49
能不能提供些开始学习的资料?

偶是做程序开发的,也在CE上开发过办公应用。

现在的系统能完成的功能已经非常强大,很多手机的CPU现在都上400MHZ。

不过和模型连在一起没有折腾过,看到有很多电路要自己设计,像电路的设计的基础在哪看?

比如需要哪些哪些模块之类。
作者: pxx    时间: 2009-9-15 11:19
偶最想知道的是,如何通过践入系统上跑的程序来控制设备?

如何和外接设备进行通信?也是用串口的AT指令么?还是其它接口。在没有驱动的情况下,如何进行开发?

偶用一个淘汰下来的智能手机能否去实现这些??
作者: c_nmusic    时间: 2009-9-15 19:09
模型一般用不了那么高的CPU来进行控制,我四轴上用来控制姿态的处理器只要50MHz就可以了。
用那些类似智能手机的“封闭系统”来控制外部设备的话,恐怕你只有串口可以用。如果你自己设计电路那么能更灵活些。
如果你想从头开始,那么还是找一个标准的开发板来比较实际,一般都会提供全部资料和驱动。

[ 本帖最后由 c_nmusic 于 2009-9-15 19:12 编辑 ]
作者: c_nmusic    时间: 2009-10-10 09:08
前一段时间,研究了一下如何利用GPS的坐标实现自动航线。不过为了便于控制,这个实验我用了一个小车来做,而不是四轴飞行器。

(, 下载次数: 68)
履带小车,右边红色的是3轴电子罗盘
(, 下载次数: 76)
右边的是蓝牙模块

利用四轴上的控制板,外加一个3轴的电子罗盘(MK的四轴上用的那种),配合上GPS,一起装到履带小车上,最后挂上遥控器,硬件部分就OK了。

软件部分,主要是如何将目标的GPS坐标和当前的位置进行处理,转换成车头的朝向和方向信息。以前总以为这部分会很复杂,实际想明白后其实很简单。知道2个坐标的X,Y以后,就可以得出从(0,0)点到这2个坐标点的角度,利用反正切函数。这样就得到了目标坐标的车头朝向和当前的车头朝向,剩下的就只要驱动马达进行转向,让这2个朝向相同就可以了。航向对准后,只要向前开就OK了。

由于小车没有左右漂移的本领,而四轴有,所以对于四轴来说,飞航向还可以有另外一种方法,就是不改变航向,直接漂移过去。这个算法让我花了一点时间,后来想明白后应该针对当前的机头朝向对应的直角坐标系的4个象限进行分别处理。比如如果当前朝向位于0到90度之间,当目标坐标的X大于当前位置的X时,我们需要超前飞,而对于Y坐标则是反过来。其它象限也是如此,根据实际情况决定是否要和坐标的数值相同或者相反。反而更简单,连三角函数都不用了。

在实际测试中,虽然算法没有问题,但由于云层影响,GPS模块收到的数据和实际的相差几十米。本该是掉头开回来的,结果确给我来了个右转90度然后自己跑掉了。于是后面我就研究了一下差分GPS。

在搜集到的资料里,通常的差分GPS(DGPS)需要一个差分基站,用RTCM SC-104格式广播差分数据,然后GPS接收段利用专门的接收机接收并解码这些数据,通过GPS模块的差分通道传递过去,以此来实现修正的功能。

我在网上也找到了另外一种实现方法,当中没有用到特殊的RTCM SC-104广播和相应的接收设备。而是利用Internet来传递这些数据(http://www.wsrcc.com/wolfgang/gps/dgps-ip.html)。反正对于GPS模块来说,只要在正确的端口收到正确的数据就可以了,无所谓是不是通过无线过来的。可惜这个服务器提供的数据都是位于国外的差分基站的返回信息,通过研究网页上的代码,发现他们也只不过将RTCM SC-104接收机的信息转换成TCP/IP包发过来了,并没有实现自己的纠正代码。也就是说,如果我不能在本地建立一个RTCM的基站和接受设备,我是没法利用这中方法实现DGPS的。

基本是又回到原点,不过又Google了一阵子后,发现了另外一种类型的DGPS(http://www.mapopen.com/issue/show_22.htm)。这种更简单——位置差分。

算法非常简单:只要我知道当前位置的GPS坐标(不用精确,只要维持不变即可),我还知道GPS给我返回的当前坐标,这样我就可以计算出这2个坐标之间的差异。这个差异就包含了卫星钟误差、星历误差、电离层误差、对流层误差等,可以通过传递这个差异数据来消除这部分的误差。于是我就利用笔记本的蓝牙接口和以前买的蓝牙模块把小车和PC间搭起了无线链路,以1Hz的频率传递这个差异数据。不过目前由于使用的是不同的GPS模块,外加天线不同以及设备自身的干扰,效果还不是很明显。等有时间了用完全相同的2个硬件来测试一下,理论上应该能达到很高的精度。

[ 本帖最后由 c_nmusic 于 2009-10-10 09:33 编辑 ]
作者: c_nmusic    时间: 2009-10-10 09:47
最近,也抽了点时间研究了一下迷你版四轴。


在淘宝上的“我的飞行梦”店铺里找到小的正反桨,使迷你四轴成为可能。通过测试,获得了一些拉力数据,总的来说情况并不乐观。

(, 下载次数: 88)
测试拉力用的,放到一个0.1克分辨率的电子称上就可以知道拉力

单个螺旋桨拉力:7.4克
4个螺旋桨拉力:29.6克,这就是我们的全部了。

4个7mm空心杯马达:2.5克X4=10克
4个螺旋桨:0.8克X4=3.2克
锂电:3.7克X2=7.4克
3个陀螺仪:0.3克X3=0.9克
MCU: 0.3克
LM324: <0.1克
1117S: <0.1克
TF卡座+TF卡:0.8克
蓝牙模块:1克

目前剩余拉力:5.9克。

剩下的还有一个机架和控制电路板,还是和以前一样,我还是准备拿PCB来做。1.2mm厚度的电路板,以前做的一块,3916平方毫米的面积,10.3克。这么算下来,这个迷你四轴的电路板总面积必须面积<2242平方毫米才有可能飞起来。
(, 下载次数: 77)
目前的机架,上面是一个10寸的GWS三页桨。这个机架估计重量4.3克。
(, 下载次数: 80)
将要用到的部分零件

[ 本帖最后由 c_nmusic 于 2009-10-10 09:50 编辑 ]
作者: c_nmusic    时间: 2009-10-10 09:58
通过这段时间的研究,发现自己对机器人、人工智能领域非常有兴趣,想在这一领域做一定的工作。希望在北京从事这些领域的公司如果有意向接纳我,请发邮件到 cnmusic@163.net 与我联系。谢谢!

[ 本帖最后由 c_nmusic 于 2009-10-18 08:32 编辑 ]




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