OpenHD改造实现廉价高清数字图传(树莓派+PC)—(一)概述

2023-05-16

一、缘由       

        数字图传网上有开源的解决方案,最为出名的应该就是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左右

后面,我将会找时间慢慢讲述改造的步骤,今天就写到这里啦~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenHD改造实现廉价高清数字图传(树莓派+PC)—(一)概述 的相关文章

  • STM32F407VET6 普通 IO 口模拟串口发送数据

    1 只实现了 xff0c 使用普通 IO 口模拟串口的发送 xff0c 没有实现接收 2 由于是模拟发送的是 TTL 电平 xff0c 所以在使用串口助手验证发送数据的准确性时 xff0c 应该使用 USB 转 TTL xff0c 而不能使
  • 虹科知识分享|关于阻塞函数和非阻塞函数

    在CAN和LIN相关的开发库里 xff0c 不可避免的会出现 收 和 发 的函数 如何快速有效的处理数据 xff0c 是开发中重要的事项 但实际上单路CAN由于波特率的限制 xff0c 数据量并不会很大 xff1a 以常用的500k为例 x
  • 车用技术总线 | 从应用角度了解下LIN总线

    注意 xff1a 本文约4850字 xff0c 完整阅读时间约13分钟 主要内容 LIN总线概述 LIN总线的应用 示例 xff1a LIN总线和CAN总线的窗户控制 LIN总线的信号报文 记录LIN总线数据 LIN总线数据记录应用案例 本
  • 工业通讯 | CAN基础内容详解(二)——物理层

    往期回顾 工业通讯 CAN基础内容详解 xff08 一 xff09 物理层主要完成设备间的信号传送 xff0c 把各种信号转换成物理信号 xff0c 并将这些信号传输到其他目标设备 在这一层中 xff0c CAN bus对信号电平 通信时使
  • 04ROS中的头文件与源文件

    ROS中的头文件与源文件 本节主要介绍ROS的C 43 43 实现中 xff0c 如何使用头文件与源文件的方式封装代码 xff0c 具体内容如下 设置头文件 xff0c 可执行文件作为源文件 xff1b 分别设置头文件 xff0c 源文件与
  • TX2系统安装

    手头新拿到块TX2 xff0c 从零开始搞 xff0c 特此记录以备后续查看 xff0d 2017 07 16 乐 参考官方网址 JetPack下载网址 准备刷机环境 下载JetPack L4T 3 1 linux x64 run pc环境
  • 单片机是嵌入式的子类

    1系统组成结构上的区别 xff08 1 xff09 单片机基本结构 单片机由运算器 控制器 存储器 输入输出设备构成 xff08 2 xff09 嵌入式系统成部分 嵌入式系统一般由嵌入式微处理器 外围硬件设备 嵌入式操作系统 特定的应用程序
  • STM32串口协议概念及结构体初始化详解+串口点灯+串口收发程序

    文章目录 一 串口通信协议简介1 RS232标准2 USB转串口3 原生的串口到串口 二 初始化结构体解1 USART初始化结构体2 同步时钟初始化结构体3 编程时需要用到的固件库函数 三 串口点灯代码实现1 USART C文件2 USAR
  • 无人机光流定位系列——(一)原理剖析

    这次参加深圳的高交会 xff0c 在qualcomm展区看到了多款mini无人机 xff0c 大家稍微细心一点就可以发现这些无人机都使用了一种叫光流定位的技术 xff0c 很多人可能都还不明白光流定位是个什么东西 xff0c 是如何进行定位
  • 现代控制理论2——状态空间分析法

    注 xff1a 本文是在MOOC平台上学习西北工业大学 现代控制理论基础 xff08 郭建国 赵斌 郭宗易 xff09 的课程进行随笔记录与整理 一 状态空间描述的相关概念 1 系统模型包括 xff1a 内部结构 xff0c 以及内部结构反
  • 输出调节——内模原理(1)

    浏览了百度和部分文献 xff08 主要为 xff1a 调节问题系统综述 xff0c 线性系统的内模原理 xff09 xff0c 在此尝试进行一些归纳 一 问题描述 输出调节问题 xff1a output regulation problem
  • RGB-D相机建图——2、openvins安装、测试与连接自己设备

    基础内容贴推荐 xff1a https zhuanlan zhihu com p 93814423 https blog csdn net weixin 39752599 article details 105906652 https zh
  • RGB-D相机建图——3、使用kalibr进行相机标定

    Kalibr 视觉惯性校准工具箱 官方网站 xff1a https github com ethz asl kalibr Kalibr是一个工具箱 xff0c 可以解决以下校准问题 xff1a 多摄像机校准 xff1a 具有非全局共享重叠视
  • 02.构建项目流程梳理及总结

    02 构建项目流程梳理及总结
  • Nuttx学习入门

    Nuttx学习 NuttX 是一个实时操作系统 RTOS xff0c 强调标准合规性和占用空间小 可从 8 位扩展到 64 位微控制器环境 xff0c NuttX 中的主要管理标准是 POSIX 和 ANSI 标准 NuttX 的主要环境依

随机推荐

  • 软件测试之如何介绍自己的项目

    测试人员在找工作的过程中 xff0c 通常有一个问题是很难绕开的 就是要如何向别人介绍自己之前做过的项目 要解决这个问题 xff0c 大致可以分为如下几个步骤 xff1a 1 对项目进行基本介绍 2 说明自己负责测试的模块 3 针对部分模块
  • FreeRTOS多任务管理

    文章目录 1 任务1 1 任务简介1 2 任务调度1 3 任务的状态 就绪态 运行态 阻塞态 挂起态 1 4 空闲任务 2 动态创建两个任务2 1 定义动态内存空间的堆2 2 定义任务函数2 3 定义 任务控制块 指针2 4 动态创建任务
  • 计算机类期刊投稿心得 [ 添加中...现35种 ]

    1 杂志名称 计算机应用研究 杂志文章包含专业 建模 xff0c 仿真 xff0c 网络 xff0c 人工智能 xff0c 比较杂 投稿联系方式 http www arocmag com 注册在线投稿审稿 投稿费用 250元 页 杂志级别
  • Minix下的汇编

    Minix下的汇编 大多数的编译器 xff0c 如Turbo C C 43 43 xff0c Borland C C 43 43 xff0c M C C 43 43 xff0c GCC xff0c VC 43 xff0c 编译过程都是 xf
  • 解决Xshell 7 报错 “要继续使用此程序,您必须应用最新的更新或使用新版本”

    1 先创建一个文本文档 xff0c 同时把该文档名称和后缀改为xshell7 bat xff1b 2 打开编辑这个xshell7 bat文件 xff0c 并且把以下文字复制进去 xff0c 注意set XSHELL 61 这一项需要改成你自
  • 多任务操作系统的任务切换

    在学习OS时 xff0c 对于多任务操作系统的任务切换 xff0c 一直不能理解 xff1a 控制权是怎么么回到调度程序上的 xff1f 记得在描述任务切换时 xff0c 一般都是这么描述的 xff1a 在每一个时钟滴答 xff0c 都将检
  • Minix下的汇编2

    似乎minix平台并没有带一个真正的汇编编译器 xff0c 看看makefile xff0c 几乎都是清一色的用cc来编译汇编代码的 而且 xff0c 即使是一个最简单功能的汇编程序 xff0c 也少不了一个 main 标签 在minix的
  • 原来在/var/spool/mail中

    fetchmail会把从mail server收到的邮件投递到 var spool mail 中去 而mutt也会自动地到 var spool mail里取信 xff0c 解码 xff0c 并显示 但 xff0c fetchmail的速度不
  • 汉字编码标准与识别(一)代码页(Code Page)初识

    BBS水木清华站 精华区 发信人 yanglc 魂归燕园 别理我 xff0c 烦着呢 信区 Linux 标 题 汉字编码标准与识别 一 发信站 BBS 水木清华站 Sat Apr 29 17 19 05 2000 http www linu
  • 让xpdf支持中文(C++primer中文版)

    首先到http www linuxfans org nuke modules php name 61 Site Downloads amp op 61 geninfo amp did 61 2385下载一个打了补丁的xpdf 安装 xff0
  • Xpdf-3 for MDK

    http www linuxfans org nuke modules php name 61 Site Downloads amp op 61 geninfo amp did 61 2385 Xpdf 3 for MDK 类别 其它软件
  • 不同公司的牛

    本文转自 C 43 43 Builder 研究 http www ccrun com other go asp i 61 264 amp d 61 sgz5id 传统公司 xff1a 你有两头母牛 你卖掉一头 xff0c 买了一头公牛 你的
  • 从词法分析开始

    刚开始时 xff0c 用lex的确是很方便 xff0c 但是这样却不能将词法分析的思想实践出来 最好的方法还是自己写一个lex 当然龙书上写得很详细了 xff0c 但是写得再详细 xff0c 把它实现出来还是很难的 我的计划是 xff1a
  • Python 获取当前路径几种方法

    Python 获取当前路径的几种方法 绝对路径 1 os path 方法 span class token comment coding utf 8 span span class token comment usr bin python
  • [pixhawk笔记]2-飞行模式

    本文翻译自px4官方开发文档 xff1a https dev px4 io en concept flight modes html xff0c 有不对之处 xff0c 敬请指正 pixhawk的飞行模式如下 xff1a MANUAL xf
  • 扩展卡尔曼滤波详解

    Extened Kalman Filter 简单介绍 卡尔曼滤波详解讲解的基本的卡尔曼滤波算法是通过一个线性随机差分方程来估计当前状态 xff0c 但是如果状态估计关系以及测量关系使非线性的怎么办 xff0c 而且在实际使用中大部分的问题都
  • 关于PX4中的高度若干问题

    飞行的高度是如何测量的 xff1f 地面的高度和海平面的高度差别很大 xff0c 飞控又是如何有效判别进行降落的 xff1f 这是我脑子里的疑问 搜索的一圈发现很少有人讨论这方面的问题 xff0c 于是本次我就直接看一下源代码 xff0c
  • 基于4G网卡和树莓派zero实现低延时数字图传(250-300ms左右)

    方案本身并不复杂 xff0c 都是采用成熟的产品 xff0c 只需要几个命令行就能解决问题 0 准备工作 硬件 xff1a 树莓派zero 4G网卡 linux台式机 笔记本 虚拟机 软件 xff1a raspivid netcat nc
  • 树莓派zero w 使用AV接口连接电视机

    树莓派zero本身板子上有一个mini HDMI xff0c 但是我看到好像板子上还有一个小接口 xff0c 上面写着TV xff0c 感觉应该可以输出AV信号 xff0c 于是网上搜索了一番 xff0c 果然可以 首先 xff0c 手工做
  • OpenHD改造实现廉价高清数字图传(树莓派+PC)—(一)概述

    一 缘由 数字图传网上有开源的解决方案 xff0c 最为出名的应该就是OpenHD了 如果按照官方网站的内容 xff0c 构建起来也不是很复杂 xff0c 直接可以烧录两个TF卡就能完成 但是 xff0c 你需要用到两个树莓派板卡 xff0