5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
楼主: c_nmusic
打印 上一主题 下一主题

共轴双桨自动驾驶直升机

[复制链接]
641
 楼主| 发表于 2009-1-27 12:36 | 只看该作者
上一架四轴,刚刚能飞,下午就被老总拿走了。我连录像都没来得及拍呢。:em17:

最近重新做一架新的,这回尝试使用德国人的I2C电调。春节前从网上订购了一些电调板,花了几天时间焊好,调试好。

机架部分改动不大,不过由于测试过电流消耗,所以这次就没用很重的香蕉插,转而使用对空插头和JST插。测试过拉力还不错,就是不知道对于震动会不会造成接触不良。



用3位的插头和插座,线路能比以前简单些,维护起来也方便了,不用担心插反。



春节前做的电路板,可以把电源分出来,还有2组I2C总线。这样就不用焊线焊出5个插头了,整个电路板比那根线可轻多了。


可惜德国人的飞控板一直没调通,加速度计、陀螺仪的数据总是自己变来变去。德文的配置程序也看不大明白。看来只好等春节后问卖家了。

欢迎继续阅读楼主其他信息

642
 楼主| 发表于 2009-1-30 16:48 | 只看该作者
控制电路基本完工,下面就要修改代码以便使用I2C电调了。

643
发表于 2009-1-31 13:16 | 只看该作者
看了两天看完,正在学习单片机技术,感觉楼主强!强!强!
再问一下现在做不做单旋翼直机飞控?
644
 楼主| 发表于 2009-1-31 21:17 | 只看该作者
慢慢再做单旋翼的。
645
 楼主| 发表于 2009-1-31 21:21 | 只看该作者
已经可以成功调用I2C电调了,比预想的简单些。
不过现在10寸桨快没有了,只好等上班后再多买一些再试飞。
646
发表于 2009-2-1 03:27 | 只看该作者
楼主太有才了!!

外星人来临的时代快到了!!
647
 楼主| 发表于 2009-2-2 17:52 | 只看该作者
花了几天ARM9板的原理图,累了,今天就研究GPS吧。

把以前买的几种GPS模块都测试了一下,包括天线。发现小的天线信号不好,找到星的速度很慢。干脆把一个吸盘天线给拆了,发现里面就是一个标准的陶瓷天线。:em15: 于是我直接把线剪短就可以用到四轴上了。天线外面的塑料壳还保留,还能起到保护作用呢。

可以读到GPS数据后,下面的想法是利用一片M8把串口的GPS数据解析出来,然后我好用I2C进行访问。于是下面就是搜索GPS的数据格式。

贴一些我找到的相关资料:
nmea数据如下:
$GPGGA,121252.000,3937.3032,N,11611.6046,E,1,05,2.0,45.9,M,-5.7,M,,0000*77
$GPRMC,121252.000,A,3958.3032,N,11629.6046,E,15.15,359.95,070306,,,A*54
$GPVTG,359.95,T,,M,15.15,N,28.0,K,A*04
$GPGGA,121253.000,3937.3090,N,11611.6057,E,1,06,1.2,44.6,M,-5.7,M,,0000*72
$GPGSA,A,3,14,15,05,22,18,26,,,,,,,2.1,1.2,1.7*3D
$GPGSV,3,1,10,18,84,067,23,09,67,067,27,22,49,312,28,15,47,231,30*70
$GPGSV,3,2,10,21,32,199,23,14,25,272,24,05,21,140,32,26,14,070,20*7E
$GPGSV,3,3,10,29,07,074,,30,07,163,28*7D

说明:NMEA0183格式以“$”开始,主要语句有GPGGA,GPVTG,GPRMC等

1、 GPS DOP and Active Satellites(GSA)当前卫星信息

$GPGSA,<1>,<2>,<3>,<3>,,,,,<3>,<3>,<3>,<4>,<5>,<6>,<7><CR><LF>

<1>模式 :M = 手动, A = 自动。
<2>定位型式 1 = 未定位, 2 = 二维定位, 3 = 三维定位。
<3>PRN 数字:01 至 32 表天空使用中的卫星编号,最多可接收12颗卫星信息。
<4> PDOP位置精度因子(0.5~99.9)
<5> HDOP水平精度因子(0.5~99.9)
<6> VDOP垂直精度因子(0.5~99.9)
<7> Checksum.(检查位).


2、 GPS Satellites in View(GSV)可见卫星信息
$GPGSV, <1>,<2>,<3>,<4>,<5>,<6>,<7>,?<4>,<5>,<6>,<7>,<8><CR><LF>

<1> GSV语句的总数
<2> 本句GSV的编号
<3> 可见卫星的总数,00 至 12。
<4> 卫星编号, 01 至 32。
<5>卫星仰角, 00 至 90 度。
<6>卫星方位角, 000 至 359 度。实际值。
<7>讯号噪声比(C/No), 00 至 99 dB;无表未接收到讯号。
<8>Checksum.(检查位).

第<4>,<5>,<6>,<7>项个别卫星会重复出现,每行最多有四颗卫星。其余卫星信息会于次一行出现,若未使用,这些字段会空白。

3、Global Positioning System Fix Data(GGA)GPS定位信息

$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>

<1> UTC时间,hhmmss(时分秒)格式
<2> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<3> 纬度半球N(北半球)或S(南半球)
<4> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<5> 经度半球E(东经)或W(西经)
<6> GPS状态:0=未定位,1=非差分定位,2=差分定位,6=正在估算
<7> 正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)
<8> HDOP水平精度因子(0.5~99.9)
<9> 海拔高度(-9999.9~99999.9)
<10> 地球椭球面相对大地水准面的高度
<11> 差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
<12> 差分站ID号0000~1023(前面的0也将被传输,如果不是差分定位将为空)


4、Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐定位信息

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>

<1> UTC时间,hhmmss(时分秒)格式
<2> 定位状态,A=有效定位,V=无效定位
<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<4> 纬度半球N(北半球)或S(南半球)
<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<6> 经度半球E(东经)或W(西经)
<7> 地面速率(000.0~999.9节,前面的0也将被传输)
<8> 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(000.0~180.0度,前面的0也将被传输)
<11> 磁偏角方向,E(东)或W(西)
<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

5、 Track Made Good and Ground Speed(VTG)地面速度信息
$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh<CR><LF>
<1> 以真北为参考基准的地面航向(000~359度,前面的0也将被传输)
<2> 以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)
<3> 地面速率(000.0~999.9节,前面的0也将被传输)
<4> 地面速率(0000.0~1851.8公里/小时,前面的0也将被传输)
<5> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)


http://www.cnblogs.com/kaixin110/archive/2007/12/28/1018557.html
一、十进制转换成经纬度
把经纬度转换成十进制的方法很简单
如下就可以了
     Decimal Degrees = Degrees + minutes/60 + seconds/3600
例:57°55'56.6" =57+55/60+56.6/3600=57.9323888888888
114°65'24.6"=114+65/60+24.6/3600=结果自己算!
  
如把经纬度  (longitude,latitude) (205.395583333332,57.9323888888888)
转换据成坐标(Degrees,minutes,seconds)(205°23'44.1",57°55'56.6")。
步骤如下:

1, 直接读取"度":205

2,(205.395583333332-205)*60=23.734999999920 得到"分":23

3,(23.734999999920-23)*60=44.099999995200 得到"秒":44.1

采用同样的方法可以得到纬度坐标:57°55'56.6"

通过两个点的经纬度计算距离 (http://www.cnblogs.com/panyee/archive/2006/07/04/442771.html)
从google maps的脚本里扒了段代码,没准啥时会用上。大家一块看看是怎么算的。

private const double EARTH_RADIUS = 6378.137;
private static double rad(double d)
{
   return d * Math.PI / 180.0;
}

public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
   double radLat1 = rad(lat1);
   double radLat2 = rad(lat2);
   double a = radLat1 - radLat2;
   double b = rad(lng1) - rad(lng2);
   double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +
    Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));
   s = s * EARTH_RADIUS;
   s = Math.Round(s * 10000) / 10000;
   return s;
}
648
发表于 2009-2-3 04:24 | 只看该作者
LZ果然是高手,应该属于院校派,但你的调节方法太过复杂,什么遗传算法都用上了,但对于这样的固定反馈系数的控制系统,效果一定不会好,根据我做的各种东西来看,简捷是最好的,一般就是P,然后是I(类似锁尾陀螺的数字积分,容易实现收敛。计算时候耗费内存),一般不使用D调节!更别使用其他的怪异算法,闭合反馈的控制PID包打天下!
649
 楼主| 发表于 2009-2-3 13:37 | 只看该作者
现在就是只用PID就飞了。:em15:

可是如果总是重复旧的东西,就没有意思了。所以上来先尝试一下遗传算法,在实践中检验一下这个东西到底能做什么,不能做什么。
650
发表于 2009-2-3 16:24 | 只看该作者

回复 651楼 的帖子

LZ水平很高,电脑软件,硬件,PROTEL、3D、ARM什么的都这么擅长,钦佩呀!。。。呵呵。期望以后出更精彩的东西。:em24:
651
 楼主| 发表于 2009-2-3 17:03 | 只看该作者

回复 652楼 的帖子

都只是皮毛而已啊,现学现卖啊。:em15:
652
 楼主| 发表于 2009-2-3 17:06 | 只看该作者
成功利用M8解码GPS的NMEA数据,本来只是很简单的事情,可惜电路板的一个布线错误害我刷不进去程序耽误了好久。
真是郁闷啊,画了这么多块板了,依旧有马虎引起的错误。



可以成功解码数据,在GPS完成定位后,可以亮绿灯告诉我。
小的陶瓷天线就是不大灵,要放到外面几分钟后才能定位完成。
653
发表于 2009-2-3 21:19 | 只看该作者
http://autopilot.sourceforge.net/rev2.2.html
楼主有没有看过这个网站,如果用这个网站介绍的东西做个无人飞控或平衡仪还需要什么?
654
 楼主| 发表于 2009-2-4 09:19 | 只看该作者
这个网站用了一个 iPAQ 做导航处理计算。应该在目前的几个开源飞控/平衡仪网站里算是最大个的了。估计重量小不了。恐怕必须450级别的才能带起来。

其它部分,都是标准的——3轴陀螺仪和3轴加速度计。不过这个陀螺仪芯片不知道好买不。
655
发表于 2009-2-4 11:02 | 只看该作者
就是有点重,但程序是不是好写进?能不能用其它的陀螺仪芯片?你有没有其它的这样的网站给发个链接好吗?

[ 本帖最后由 sunliang 于 2009-2-4 11:08 编辑 ]
656
 楼主| 发表于 2009-2-4 11:44 | 只看该作者
我知道的有
http://www.recherche.enac.fr/paparazzi/wiki/index.php/Main_Page
不过这个是给固定翼做平衡仪的,具有一定的自主飞行能力。
还有 http://vicacopter.com/ ,也是比较不错的。

这2个都没有用一个PDA做数据处理,重量重不说,万一摔坏了可就损失大了。
657
 楼主| 发表于 2009-2-4 15:02 | 只看该作者
一个标准的吸盘式GPS天线拆开后...



正面,就是一个陶瓷天线



背面,盖子下面有些电感什么的。

GPS 模块上机!



天线装中间,塑料壳继续保留,避免把陶瓷天线摔坏。





按照设计,电源板上的M8负责将GPS的串口数据转换成I2C可以访问的,GPS模块相对体积小,随便找个地方就装下了。

下面就是代码了,在摄像头的ARM9没有做出来以前,不知道用GPS可以抑制漂移到什么程度。
658
 楼主| 发表于 2009-2-6 16:54 | 只看该作者
搞定了GPS的NMEA里的ddmm.mmmm坐标到GoogleEarth的坐标转换。现在GPS的坐标可以直接通过GoogleEarth来检验是否正确了。

其实是非常简单的。
比如:GPS返回ddmm.mmmm格式的一个坐标 3958.2399,这里39表示dd,也就是度,58表示分。这2个和GoogleEarth里的一样,不用转换。唯一需要调整的就是后面的这个2399。将这个分变成GoogleEarch里的秒就可以了,也就是*60。

输入:3958.2399
直接得出度和分,也就是39度58分,下面的2399要写成0.2399,然后*60=0.2399*60=14.394。所以最后换成GoogleEarth的坐标就是39度58分14.394秒,也就是 39 58'14.394'',再配合上东西经度和南北纬度,就可以直接在GoogleEarth里看到了。

找了N多帖子,才找到将这个小数点分变成秒的方法。:em15:
659
 楼主| 发表于 2009-2-6 17:01 | 只看该作者
今天还把整个SD卡的访问全都变成标准的对FAT文件系统的访问。这样日志就可以按照文件一个一个记录下去了,不再像以前只能保留最后一次的信息。

不过由于采用的EFSL库自己带有一个缓存,所以如果在记录尚未保存到SD卡的情况下拔电源,有可能造成SD卡上的文件系统被破坏。为解决这个问题花了我2天的时间。

首先尝试AT91SAM7S256自己的掉电中断,不好使。在1.8V掉电的时候SD卡已经没有足够的电力完成写操作了。然后又尝试检测主电池电压,也不好使。拔电源的时候从11.1V降到0V的时间太短。最后还是在记录模块里做手脚,记录50次以后就把整个文件关闭,然后卸载文件系统,让数据完全写回。最后再重新打开。效果还不错,已经拔插电源很多次了,SD卡上的数据一直没丢了。
660
发表于 2009-2-6 23:15 | 只看该作者
GPS 部分还有很多可改进的
新的GPS芯片一般都支持广域差分了,可以在2m内
但一般要发command 才能打开
另在飞的时候有差分信号的话,可以1m内
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

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