OpenHD改造实现廉价高清数字图传(树莓派+PC)—(一)概述
OpenHD改造实现廉价高清数字图传(树莓派zero + ubuntu PC )——(一)概述
一、缘由
数字图传网上有开源的解决方案,最为出名的应该就是OpenHD了。如果按照官方网站的内容,构建起来也不是很复杂,直接可以烧录两个TF卡就能完成。但是,你需要用到两个树莓派板卡,而且地面站用的树莓派板块还要配单独的显示屏和电源。官方网站提供的这个,确实是一个比较独立完整的解决方案,适合直接上手使用。
但是我在想:为什么不能用普通的linux PC作为地面站的显示呢?这样我就带个笔记本电脑就能出去了,既简单,成本又低。树莓派现在涨价非常厉害,所以如果直接抛开树莓派,使用普通的ubuntu笔记本电脑显示图传画面,岂不是很方便么?
基于这个目的,我准备开始研究一下,将OpenHD的代码直接移植到我的ubuntu电脑上,直接在地面站上显示视频画面。
注意:这篇文章不是介绍OpenHD如何使用和配置的(网上已经有很多),主要是介绍如何将OpenHD进行改造,深入OpenHD内部探索一下软件实现机理,并且将它进一步的简化和移植,变成几个独立的可执行的linux程序,不需要地面站树莓派,而是直接使用普通电脑直接接收视频和OSD信息,便于部署和使用。
二、改造内容
基于OpenHD的现有解决方案,我主要改造两个方面:
一是将原OpenHD的地面端进行了深度改造和替换。实现在普通ubuntu电脑上显示图传视频和osd信息;
二是将空中端软件进行轻量化改造。不用烧写整个镜像,可以在现有的树莓派上运行图传程序即可。只保留最简单的软件功能,多余的一概不要,确保最精最简。
三、价格成本
基于廉价原则,尽可能缩短一切开支。
特别是将地面显示换成了普通的ubuntu笔记本电脑。相比原来的解决方案,可以至少节省下一个树莓派4B、一个显示屏、相关地面供电设备等(当然,如果你要说你没有ubuntu笔记本电脑,那我也就没办法了...)。同时,wifi模块可以在淘宝上淘一个比较便宜的,只要是相关能用的芯片即可。主要材料清单和价格如下。
1、树莓派zero w,1套(含TF卡、散热片等小件),276元,用于天空端。(PS: 这是2021年8月的价格,2022年8月貌似已经涨到500元了!后续考虑使用其他的国产的其他 PI 进行替代,价格只要100多)
2、树莓派摄像头500W像素 CameraV1.3,1个,17元(不带支架),用于采集视频图像
3、RTL8812AU千兆USB无线网卡(TX-AC88),2个(含8dB天线),53元*2=106元,用于发送图像和飞行数据。如果要效果好,推荐用华硕的华硕的ac56(RTL8812AU),但价格贵。
4、1800mah锂电池,1个,90元,用于给航模上的树莓派供电
5、5V 3A 低纹波稳压电源(77RC),1个,15元,用于将锂电池电压转换为树莓派可用的电压
6、笔记本电脑,1台,0元(默认你有,不用买了。。),用于在地面显示视频和飞行信息
7、天线(可选),可以先用网卡自带的天线,后面可以再升级。
总价格:504元!
四、连接关系
OpenHD数字图传使用普通的linux板卡作为机载电脑,一般使用树莓派zero或者3b mini作为机载端,主要考虑是体积、重量和供电等原因。在机载电脑上连接摄像头获取高清的数字图像,再通过wifi网卡将数据广播到地面设备上;地面站原先的方案使用的也是树莓派板卡,考虑到显示等原因,使用3B+或者4B以上的版本更加合适。
本方案基本原理和OpenHD保持一致,但需要进行移植改造。具体连接如图所示。
硬件连接示意图
天空端设备连接实物图(缺飞控)
这里有几个注意点。
1、关于图传供电
由于飞控涉及飞行的安全,电源最好与树莓派分开供电。因此,这里飞控可以认为是单独的一套系统,就不此详细描述。飞控串口与树莓派串口连接的时候,注意要共地。
2、关于网卡供电
由于网卡的功耗比较大,树莓派USB的口可能不足以给网卡提供充足的电流,因此就需要将网卡的USB线进行改造,数据口还是接到树莓派板卡,但是供电直接接到稳压模块上进行供电。
其实这也不是最优的,官方网站不推荐使用USB接口接网卡,因为飞行中的震动容易将USB接口脱落,这是很危险的!因此,如果可以,将USB几根线先单独焊接在树莓派上,确保万无一失。
建议按照官网的示意图进行改造,我这里只是在地面测试,所以就没有这样改。
官网的示意图
3、关于地面接收
官方网站推荐的是两个网卡来接收,这也可以达到最好的接收效果。
4、关于稳压模块
官网上说的是要低纹波的稳压模块,这样可以防止对树莓派的损伤。
5、关于天线和USB线等
官方网站说天线要原理网卡的USB线,防止干扰;
其他各个线都要短一些,能焊死的都焊死。
五、主要软件
主要涉及到以下几个软件模块。
1、wifibroadcast
在天空端和地面端都有这个软件,用于提供底层的通信。该通信模式并非wifi方式,不使用TCP或UDP协议,不使用IP协议,而是直接将数据打包成MAC层数据帧,使用rawsocket进行广播发送,可以认为将网卡作为无线电台直接使用。接收方只要在相同的频率就可以接收数据帧。
这样做的好处就是,类似模拟信号传输,不用建立连接,也不用基于复杂的TCP/IP等协议栈,底层不存在发送、回执等,丢掉一两个数据帧不会重传,效率很高。因为在空中,有时候会被干扰或者丢包,如果这个时候发生连接断开,则图传会立刻没有内容,并需要建立wifi连接、建立tcp连接、链路层还会可能重传等,这期间可能图像一点都看不到,这显然不符合使用场景。我们需要的就像模拟图传一样的广播模式,接收到什么就显示什么。这里有一些自己自定义的协议,甚至还可以加密。
此外,因为我们使用的是特殊的模式,底层的网卡驱动也是需要单独编译的,这也才能支持我们直接使用rawsocket进行数据注入和发送。
后面会详细展开讨论原理,以及如何将这些程序从OpenHD中剥离处理,实现数据的收发,如何编译网卡驱动,以及部分程序脚本的编写等。
OpenHD改造实现廉价高清数字图传(树莓派+PC)—(二)Wifibroadcast Wifi广播通信_hoopertsau的博客-CSDN博客_openhd
WiFibroadcast发送程序
2、OpenVG和libshape库
官方的OpenHD显示飞控回传的数据,底层使用的是OpenVG进行绘制。OpenVG类似与OpenGL,主要是在嵌入式设备上用于显示矢量图形和绘图的,它只是一个标准接口,依赖各厂商基于不同的硬件进行实现。如果是用树莓派,系统会自带一个OpenVG的实现,可以直接使用,比较方便。但是如果是ubuntu普通电脑,必须要找一个合适的实现,这里我用的是AmanithVG,是一个商业软件。
实际上,OpenHD实际上并不是直接调用OpenVG接口的,因为OpenVG的接口还是比较复杂的,直接在上面绘制图形会比较费劲。因此,有人在OpenVG上封装了一个图形库libshape,简化了接口调用细节,让程序员可以集中精力开发上层图形显示应用。这个库是基于树莓派硬件环境的,因此要移植到PC上,后面将重点讨论如何移植。
OpenHD改造实现廉价高清数字图传(树莓派+PC )—(三)OpenVG和libshapes在PC上的移植_hoopertsau的博客-CSDN博客
使用OpenVG和libshape绘制的太阳、地球和其他星球
3、OSD数据发送和显示软件
我的飞控硬件是pixhawk,飞控软件是PX4,通过飞控的串口输出OSD数据,串口和树莓派连接,这样天空端的树莓派就可以得到osd数据了,使用的是mavlink协议。
随后,树莓派通过wifibroadcast程序,将osd数据直接透传,向地面广播。地面站PC使用WiFibroadcast接收到后,数据也是mavlink协议的。解析后,就可以调用libshape进行绘图了。
OSD显示软件也是需要简单改造。另外值得一说的是,我们看到的OSD画面里面的那些元素,实际上不是直接绘制出来的,而是一些特殊字符,这些字符是通过自定义的字体文件icon.tff来定义,绘制时直接调用的是文字绘制函数,让我感到很惊讶,不过这也确实比较简洁。因为大量的元素都是字符,所以在在移植的时候,对于自定义字体的加载和显示问题卡住了好久,后面将重点展开讨论。
OpenHD改造实现廉价高清数字图传(树莓派+PC )—(四)OSD数据传输和画面显示_hoopertsau的博客-CSDN博客
OSD显示画面(背景是透明的)
4、视频发送和显示软件
视频采集使用的是树莓派自带的命令行程序raspivid,并通过管道将数据直接通过WiFibroadcast软件进行广播发送。
接收端收到后,使用gstreaming进行解码和显示,这个库还是很厉害的,二次开发也比较方便,后面会重点介绍。
OpenHD改造实现廉价高清数字图传(树莓派+PC)—(五)gstreamer视频采集、传输和显示_hoopertsau的博客-CSDN博客
5、地面端视频与OSD显示软件整合
现在,我们已经有了地面OSD显示软件和视频显示软件两个独立的软件了,但是如何将这两个东西叠加到一起显示呢?主要基于X11窗口编程,将两个软件功能整合到一起,将OSD的背景设置成透明,这也就可以实现叠加显示了。这部分也卡了很久,后面会重点介绍如何实现的。
OpenHD改造实现廉价高清数字图传(树莓派+PC)—(六)OSD和视频画面整合显示_hoopertsau的博客-CSDN博客
将OSD画面和视频画面整合后的效果
六、显示效果
视频显示效果,延迟:200ms左右
后面,我将会找时间慢慢讲述改造的步骤,今天就写到这里啦~~
更多推荐
所有评论(0)