本帖最后由 gault 于 2013-6-7 14:08 编辑
为了能够有效的保证wifi的通信信号,目前正在研究AAT(天线自动跟踪系统)……
论坛上也有其他模友作一些相似的研究(最近才发现),我把链接放在最底下了,感兴趣的可以去看一下。我估计在多旋翼上应用这个方案应该说是比较成熟了,固定翼上最大的问题就是wifi通信距离。废话不多说,先看图。
好久没写程序了,努力捡了点Qt编程回来,写了个udp控制端,取代直接打命令。本是想集成开源的mavlink协议,然后就可以用开源的地面站直接控制就行了,搞了半天发现没啥意义,因为等这个方案验证了最终是要用apm之类的飞控来代替arduino开发板的,现在只需要验证一下wifi作为图传数传的可行性就行,换句话说就是能控制和传回数据就行。
总体思路是703n与arduino之间用串口通信,在703n上用socat将串口与一个UDP端口映射,然后在电脑上用这个程序去连接703n上的udp端口,这样就可以操作到arduino了。
把USB摇杆也整进来了,用USB摇杆可以多个通道同时控制。我到底在做什么?呵呵。。。貌似我要做的只是验证图传数传的可行性,而不是做wifi遥控器。。。今天把2.4g控和usb摇杆一起测试了,2.4g控制下发现动usb摇杆发现有很大的干扰,出身冷汗,以为真的是wifi和2.4g有干扰,后来证实是arduino上程序的问题,归根结底还是通信协议没设计好,看来集成mavlink协议还是有必要的。
设备清单:- 舵机 x 3
- 电机 x 1
- 电调 x 1
- 电池 x 1
- 2.4g接收 x 1
- 2.4g遥控 x 1 (未显示在图中)
- usb摄像头 x 1
- tp-link wr703n mini无线路由器 x 1 (刷openwrt,升级了rom和ram,加了外置天线)
- usb hub (4口) x 1
- usb连接线 x 2
- Arduino UNO + 传感器扩展板 x 1 (图中已经连在一块了)
硬件连接:
- 将2.4g信号线连接到Arduino指定数字引脚上,我的接收机是6通的,所以占用6个数字引脚。
- 电机,电调,电池正常连接(最后一步再上电),电调信号线和舵机信号线连接到Arduino指定数字引脚上,我这用了3个舵机和1个电调,所以占用4个数字引脚。
- 将Arduino与USB Hub用USB数据线连起来,作用是一方面给USB Hub供电,另一方面作为Arduino与路由器串口通信。
- 将无线路由器的电源口用USB线与USB Hub连接起来,作用是从USB Hub那里取电。
- 将USB Hub的USB接头插入无线路由器的USB口(非电源口,703n带一个USB接口的),作用是扩展路由器的USB口,因为我们要给路由器连接USB摄像头和Arduino开发板。
- 将USB摄像头插入USB Hub中。
- 通通连接好之后给电调插入锂电池上电,至此,所有硬件均已通电。
实验目的:
- 验证是否可以通过无线路由器+USB摄像头方案代替数传与图传模块。实验暂用Arduino作为飞控板,自己编写实验程序。实用方案可以采用Ardupilot-mega (APM 2.5)代替Arduino.
实验程序:
将控制分为两种模式:2.4g遥控器控制模式 + 串口终端控制模式。在任何模式下,另外一种模式均可取得控制权,但不能二者同时控制。
- 如果当前是串口终端控制模式,遥控器要想取得控制权只需拨动指定的空闲通道,我这里用的是襟翼通道,是个三向开关,只要随意拨动一档,遥控器马上取得控制权。此时,串口终端失去控制权。
- 如果当前是遥控器控制模式,串口终端要想取得控制权需要发送控制请求命令给无线路由器,路由器在成功应答后,串口终端马上取得控制权。此时,遥控器将失去控制权。
实验结果:
- 图像传回稳定,不受2.4g信号干扰。
- 遥控器模式控制精准,没有wifi信号干扰。
- 串口终端模式控制精准,不受2.4g信号干扰,遥测数据正常。
实验结论:
- tp-link wr703n mini无线路由器 + USB摄像头方案从理论上讲,可以代替普通数传与图传模块。
遗留问题:
- 相较于普通数传与图传模块,这里代替它们的设备是USB Hub, wr703n, usb摄像头以及若干USB数据线。如何减重?这里先想到的有去掉所有设备外壳,包括摄像头和wifi天线外壳,选用较轻较短的USB数据线,必要时重新焊接定制的USB线等。
- mini无线路由器信号发射距离和信号接收灵敏度如何?因为我们这里是需要遥控和测量+图像双向通信,即所谓的遥测再加一个图像,所以这两方面都需要考虑。增加了外置天线后效果如何?需要场测数据。另外,可以考虑连接大功率USB无线网卡(如8187l和rt3070)取代内置的无线模块。
To do list:- 拉距测试,预期1KM覆盖半径。两端均使用rt3070大功率USB无线网卡(标称发射功率400mv,峰值功率1000mw,烧得脑袋疼啊,呵呵)。飞机端使用高增益全向天线或蘑菇天线(一般2.4G图传用多少dbi的?),地面站使用14dbi高增益大面积平板天线。(BJ限号不让买车,真是不太方便出去场测啊,郁闷)
- 在无线路由器上将Arduino串口映射成一个UDP端口,在网上找到的资料,看来是不用写代码了,Linux能复用的东西就是多啊。(已完成)
- socat udp-l:14551,reuseaddr file:/dev/ttyACM0,nonblock,raw,echo=0,waitlock=/var/run/tty,b115200
复制代码- 研究mjpg-stream开源网络摄像头视频传输软件。一方面提高画面传输速率,目前画面传输的延迟大概在半秒左右(一般要求多少?FPV和UAV分开来说),在网上查到的资料是有一些udp,rtsp等协议的模块,但不稳定。另一方面,研究一下源码看看能不能直接在路由器上合成OSD(对于FPV有意义,对于UAV实际上没什么意义了,把遥测数据传回地面站在PC上合成肯定快得多,而且大部份地面站也支持这功能)。
相似研究:
最新想法:
mjpg-streamer传视频延迟大,500ms左右,而且运动画面效果也不佳。有可能是USB摄像头本身采集数据就很慢,我用的是中星微301芯片的摄像头,很低端的摄像头了,高端一点的摄像头可能会好点。因为mjpg-streamer本身并不作任何编码,只是把摄像头的每一贞画面拿出来再通过http转发,所以按理说不存在性能瓶颈。实测也是CPU占用很低,703n的CPU还很空闲。估计可能的的原因出在http上,http针对这种实时性要求很高的应用,显然是不适合的。现在能够想到的一是换高端摄像头,至少在电脑上用采集速度很快的,二是要想办法用其它实时性更高的协议,如rtp,udp等。
另外,拿iPhone做了实验,iPhone自带的摄像头照像速度很快路人皆知了,也是它的优势功能之一。iPhone有无线摄像头这样的应用,电脑上装上对应的驱动程序后会创建一个无线网络摄像头,就像使用正常的usb摄像头一样,QQ等聊天软件都能正常使用,而且速度很快。真的很快,比USB摄像头还要快,而且是无线的!!!不过如果这个方案要上iPhone,好像就没什么意义了。安卓也有类似的应用,不过安卓手机本身的取景速度和照像性能不敢恭维。
所以目前的想法如下,用手机代替USB摄像头,利用高性能拍照手机的摄像能力来达到准FPV和UAV的图传要求。其它模块功能保持不变。
实验程序:
|