OpenHD改造实现廉价高清数字图传(树莓派+PC )—(四)OSD数据传输和画面显示

2023-05-16

前面三篇文章分别讲了整体情况,wifibroadcast,以及OpenVG的移植等

OpenHD改造实现廉价高清数字图传(树莓派zero + ubuntu PC )——(一)概述_hoopertsau的博客-CSDN博客_openhd

OpenHD改造实现廉价高清数字图传(树莓派zero + ubuntu PC )——(二)Wifibroadcast Wifi广播通信_hoopertsau的博客-CSDN博客_openhd OpenHD改造实现廉价高清数字图传(树莓派zero + ubuntu PC )—(三)OpenVG和libshapes在PC上的移植_hoopertsau的博客-CSDN博客

这一篇文章重点说说OSD软件的移植,也是就是显示看到的那个浮在视频上面的画面。

一、OSD软件

        该软件可以独立拿出来运行,也是OpenHD里面最主要的一个软件之一。

        该程序位于wifibroadcast-osd目录下,是osd显示的主程序。刚才上面一篇文章介绍了两个底层库是它的主要显示支撑,libshapes和OpenVG实现在屏上绘制OSD动态叠的画面,表示飞机的各类状态。

        这个osd程序用了大量的FIFO和共享内存,通过这些来与其他程序配合使用。另外,还会输出一些记录文件。

        要想这个程序相对独立的运行,这些FIFO和共享内存,也是需要剥离可移植的重点,

二、FIFO

        FIFO是linux中一种进程通信的方式。通过mkfifo 指令可以创建一个fifo,可以把它当文件一样进行操作,一个程序可以对它write(),另一程序对它进行read(),从而实现进程间通信。

        osd显示的数据源是PX4飞控上发出来的mavlink消息,经过wifi广播发送到地面端的rx程序,然后rx将数据写入一个fifo中,最后osd程序不断读取这个fifo获得数据,并驱动画面变化。

        主要数据流如下所示。

PX4----serial_port--->Pi(Air)

~~~~~~~~wifibroadcast~~~~~~~~~~

rx----->/var/run/openhd/telemetryfifo1 -----> osd

        除此之外,不还有很多fifo,但都是通过wifbroadcast从rx上收数据,只是用作不同的用途,看一下定义。      

# telemetryfifo1: local display, osd
# telemetryfifo2: secondary display, hotspot/usb-tethering
# telemetryfifo3: recording
# telemetryfifo4: wbc relay
# telemetryfifo5: mavproxy downlink
# telemetryfifo6: serial downlink

        主要用到的就是第一个,因此在使用osd程序前,需要手动初始化一下这个fifo,重启电脑之后这个fifo就会消失,因此每次用osd之前都要创建这个fifo,否则无法使用,也会报错。位置在/var/run/openhd/telemetryfifo1。

sudo mkdir /var/run/openhd/
sudo mkfifo /var/run/openhd/telemetryfifo1
sudo chmod 777 /var/run/openhd/telemetryfifo1

# 从wifibroadcast接收udp数据包,直接传递给这个fifo,用于osd程序读取数据
netcat -ukl 14550 > /var/run/openhd/telemetryfifo1 &

三、共享内存

        Linux进程之间还可以通过共享内存来交换数据。

        共享内存使用shm_open()函数,可以类似文件一样打开,得到文件描述符fd后,可以通过mmap()函数将它映射到一个内存地址上,这样就可以直接操作这个地址,实现对共享内存的读写。

        在linux系统中,共享内存被抽象成一个设备文件,在文件夹/dev/shm/下,可以ls查看。

        OpenHD里面用到的共享内存比较多,也比较乱,还没有完全梳理清楚,但是基本上都是用来传递状态使用的,涉及到发送方和接收方,天空端和地面端都有收发。

        在接收方,有下列共享内存,用来存放接收相关的状态信息。

wifibroadcast_rx_status_0
wifibroadcast_rx_status_1
wifibroadcast_rx_status_rc
wifibroadcast_rx_status_sysair 
wifibroadcast_rx_status_uplink

        在发送方,有下列共享内存,用来存放待发送各类状态数据。

wifibroadcast_tx_status_0:主要的状态都在这个共享内存里。

wifibroadcast_rx_status_3:看了一下代码,比较混乱。在sharedmem_init_tx中初始化了一下;在rssitx中打开了这个共享内存,然后读取这里的数据。uplink_function脚本里面有使用tx_telemetry程序用3号端口对外发送数据。

四、测试运行

  1. 使用wifibroadcast作为数据传输的通道,注意:可以与视频传输指定不同的port,这样可以实现视频和OSD数据同时传输
  2. 发送端的树莓派使用串口接收pixhawk的TELM2的数据,格式是MAVLINK;接收到后,通过管道输入给wfb进行广播;
  3. 接收端wfb收到后,重定向输出到fifo中,供OSD程序读取;
  4. Osd程序读取fifo,并显示OSD画面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenHD改造实现廉价高清数字图传(树莓派+PC )—(四)OSD数据传输和画面显示 的相关文章

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

    测试人员在找工作的过程中 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
  • OpenHD改造实现廉价高清数字图传(树莓派+PC)—(二)Wifibroadcast Wifi广播通信

    上一篇文章重点介绍了数字图传的整体构建思路 xff0c 以及主要的软件模块和最终效果 接下来几篇文章将针对其中的几个主要关键技术点进行阐述 一方面是为了将这些知识点做一个整理记录 xff0c 方便后续查阅 xff0c 另一方面也是将学习到知
  • OpenHD改造实现廉价高清数字图传(树莓派+PC )—(四)OSD数据传输和画面显示

    前面三篇文章分别讲了整体情况 xff0c wifibroadcast xff0c 以及OpenVG的移植等 OpenHD改造实现廉价高清数字图传 xff08 树莓派zero 43 ubuntu PC xff09 xff08 一 xff09