无人机开发-图传技术

2023-05-16

2016年,是中国无人机市场的元年,无人机能够一跃进入大众视野,并迅速在大众市场火热发展,是很多人始料未及的。从刚开始的空中摄录,到后来的实时摄录,方便的无人机图传功能无疑为无人机加足了筹码,赚足了眼球。博主就来分析一下无人机图传技术。

一.观念

从“图传”的叫法可以发现,这并非一个专业的定义,大概是从某些资深航模玩家口中发展而来。专业的航空航天器并没有独立的视频图像传输设备。图传的概念只存在于消费类无人机领域

二.限制

1.成本:

不必去怀疑可以通讯多快多远,无线通讯技术发展到今天,没有人怀疑火星传回的1080P图像了。
百公里以上无人机图传并非不可实现,但百万元以上的价格也相对昂贵。
目前市场上的1080P图传产品售价基本均在1700美元以内,成本也就成为了消费类无人机图传设计的第一条限制。

2.法律:

中国无线电管理的最高法律文件是《中华人民共和国无线电管理条例》,立法机关为国务院和中央军委,由各级无线电管理机构执行监管。如果使用者希望给图传单独申请执照,则需要该图传首先获得《无线电发射设备型号核准证》,其依据是国家《无线电频率划分规定》中的有关无线电发射设备技术指标的规定。取得专业电台执照并不是不可操作,只是在消费类无人机领域没有办法推广。
对于专业航空航天器来说,频谱划分时已留有专门的测控频段,而消费类无人机只能老老实实地屈就于ITU-R(ITU Radio Communication Sector,国际通信联盟无线电通信局)的ISM频段(Industrial Scientific Medical,工业化科学医疗频段)。

13.56Mhz、27.12Mhz、40.68MHz、433Mhz、915Mhz、2.4Ghz、5.8GHz都是1W以内无需执照发射的;

433MHz及以下频段通常很难满足高清图传的带宽要求;
915Mhz频段有一半已经被GSM占用;
L波带宽并不富裕;
S波段的2.4GHz也就成了1080P获得远距离的首选,但4K或者更高清晰度的图传设计者却很难在S波段的带宽上找到便宜;
C波段的5.8G则可以做得更宽,不过相同发射功率和接收灵敏度下5.8G与2.4G相比通讯距离仅为41.4%,并且其衰减对水气更敏感,实际通讯距离则不到30%,两者各有利弊。

 

 

图1 无线频谱

三.编码技术

1.软/硬件结构:OpenMAX IL + Venus
2.编码标准:H.264(APQ8074)/H.265(APQ8053)
3.码率控制:CBR(Constant Bit Rate)网络传输中所谓的 CBR 一般是 ABR(平均码率),即单位时间内的平均码率恒定,编码输出有缓冲可以起到平滑波动的作用。


图2 码率
4.码率/帧率自适应:Dynamic video rate adaptation (rave)是Qualcomm提供的算法库,基于变化的Wi-Fi带宽和信道质量,计算出合适的视频流码率和帧率,这有助于最大限度地减少延迟和图像损坏问题。
5.I帧间隔调整:30fps帧率下,30帧或者60帧一个I帧。能在较低的码率下达到较高的图像质量。
6.I帧重传:如果I帧丢失或者损坏,图像会有较长时间的卡顿。当接收端反馈此情况,发送端立即重传I帧,会减少卡7.顿时间。
8.I帧携带SPS/PPS信息:缺少SPS/PPS信息,接收端将不能正确解码,所以流中需要带这些信息,防止断线重连后黑屏。
四.通用协议

 

1.RTP

1.1.协议简单,易组入
1.2.jrtp开源库:X许可,几乎无限制。
1.3.针对H.264/H.265编码特点进行优化:不同的组包策略。
1.4.扩展可配置发包间隔:平衡码率波动,防止瞬时码率过大。
1.5.使用RTP扩展头:传递帧号,用于算法的数据同步。
1.6.使用内存池:减少模块间内存拷贝,降低延迟。

 

 

图3 RTP

2.RTSP

2.1.支持组播:Live555开源库
2.2.LGPLv2.1许可,可以在商业软件中引用。
2.3.相关类说明


图4 RTSP相关类
2.4.数据传递示意图:RTSP server接收到RTSP开始后,PreviewH264OnDemandMediaSubsession创建了H264PreviewSouce类和H264VideoStreamDiscreteFramer类之后H264PreviewSouce通过队列从Rtspsink中获取h264数据,经过处理后发送到手机端。

 

 

 


图5 RTSP 数据流

3.图传开发中遇到的问题

实时播放过程,最难解决的问题是图像卡顿,图像花瓶问题,图像在各个手机表现不一样,在性能好的手机上面,会出现图像抖动厉害的情况等等。


要解决图像卡顿的问题,先要知道卡顿的原因: 
1.由数据在传输过程中丢失,没有数据,造成的卡顿 
2.app端接收不及时,造成数据丢失而引起的卡顿 
3.为了减少花屏,而造成的卡顿,比如说刚好丢失了i帧,为了后面显示不花屏,会对后面的p帧进行抛掉,直到下一个i帧才开始显示

我们都知道花屏的原因是因为丢帧造成的,比如说丢失了 i帧,关键帧,后面的p帧送去给ffmpeg解码得到的图像是花屏,或者马赛克等等(也有一种是大p,小p的说法,这里就不详细说了),【注意,这个传输过程没有用到b帧,整个传输过程只有两种帧 i帧,个p帧】,多一点花屏,可以减少卡顿,客户更能接受的是卡顿,而不是花屏。

解决方案: 
第一个问题:由数据在传输过程中丢失,没有数据,造成的卡顿,有外部环境的影响,也有图传板信号的稳定性影响等等,app端没有很好的解决方法,无非就两个选择,一个是tcp传输,一个是udp传输。根据实测,tcp效果更好一点。 
tcp :数据传输过程,能保正数据的完整,所以花屏少点,距离相对upd会近一点, 
udp:传输过程不保证数据的完整性,容易花屏,距离比较远

第二个问题:app端接收不及时,造成数据丢失而引起的卡顿,我这里遇到的情况是这样的,之前的接收数据跟解码同一个线程,显示另外一个线程,这样就有一种情况就是解码不及时,会造成接收线程阻塞,从而影响了数据的接收(udp),解决方案是接收数据自己一个线程,解码跟显示一个线程,中间通过缓存队列来进行数据的共享,即增加缓存,基本所有的在线播放都是用这个方式。

第三个问题:就客户需求而定,我这里为了不花屏,会直接丢掉

项目使用mpv+EventBus的方式非常灵活,模块的替换,复用,重写都很灵活,而且java层没有特殊必要,一般都不会动,优化各个方面都是在jni层,也主要是图传的优化,这样也方便版本的迭代,要不客户版本升级要多痛苦。

分享是人类进步的源泉,可参考:

http://blog.csdn.net/ad3600/article/details/54706102

http://blog.csdn.net/tpyangqingyuan/article/details/54574977
 

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

无人机开发-图传技术 的相关文章

  • 爆炸了!但YYDS

    正文共 xff1a 2962字 预计阅读时间 xff1a 8分钟 成功发射 xff0c 但在空中爆炸了 这一刻 xff0c 我们都仰望星空 北京时间 4 月 20 日晚 9 点半 xff0c 随着倒计时声音的结束 xff0c 在 Space
  • 赞爆了!Tabby 这款开源工具真的好用!

    点击上方 小麦大叔 xff0c 选择 置顶 星标公众号 福利干货 xff0c 第一时间送达
  • 惠普暗影精灵VMware安装CentOS7显示[此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态]

    进入BIOS页面开启CPU虚拟化处理技术 电脑开机时按 ESC 键进入系统启动菜单 然后按F10进入BIOS页面 xff0c 开启 处理器虚拟化技术
  • Python的main函数

    在 Python 中 xff0c 程序的入口点通常指的是一个特定的函数 xff0c 即 main 函数 这个函数是程序的起点 xff0c 也是程序的入口 xff0c 通过调用 main 函数 xff0c 程序开始执行 在 Python 中
  • CMakeList静态库多层嵌套问题 undefined reference to

    前言 被一个问题缠绕了很长时间 xff0c 这两天花精力好好研究了一下 xff0c 总算解决了 xff0c 翻过来看 xff0c 就是自己不注意造的很多小问题 我的想法是把一些代码封装起来 xff0c 但是有些部分要求能让现场工作同事有一定
  • gazebo仿真环境中 加入传感器

    1 传感器加入自己的模型中需要那些步骤 1 节点说明 xff0c 链接关系 lt robot name 61 test gt lt link name 61 34 link1 34 gt lt link name 61 34 link2 3
  • 以下为Windows NT 下的32 位C++程序,请计算sizeof 的值

    char str 61 Hello char p 61 str int n 61 10 请计算 sizeof str 61 sizeof p 61 sizeof n 61 答案 6 4 4 void Func char str 100 请计
  • vue实现显示10条数据点击查询看更多

    vue实现显示10条数据点击查询看更多 要求如下 当页面的数据超过10条时只显示10条 且显示 点我查看更多喔 每次点击 页面数据增加10条 思路解析 如题 假设有20条数据 只显示10条 点击查看更多按钮 span class token
  • 433和2.4G无线通信比较

    DSSS 2 4G无线数据传输系统优势 一 很正常的升级换代 xff1a 系统工作的长期稳定性和可靠性 xff0c 是一个无线通信系统最重要的指标 由于一般433兆及915兆产品使用的是低频窄带通信技术 xff0c 它们的工作频率范围很窄5
  • Android adb dumpsys 命令总结

    adb shell dumpsys 有哪些命令可以用 xff0c 可以使用adb shell service list来查看 查看package这个service的帮助信息 adb shell dumpsys package h 查看act
  • 在STM32中实现ROS节点——Rosserial的用法

    目录 内容介绍前言生成要移植到stm32的自定义消息和服务生成针对stm32的移植库包roslibs在Mdk中实现C和C 43 43 代码混合编译修改mdk配置修改stm32 ROS通讯接口驱动测试补充说明 内容介绍 本文介绍如何将stm3
  • ubuntu下用apt-get install 安装软件时出现 initramfs-tools错误

    错误提示 xff1a gzip stdout No space left on device E mkinitramfs failure cpio 141 gzip 1 update initramfs failed for boot in
  • ubuntu虚拟机下桥接模式,静态ip上网

    近期使用VM安装了ubuntu12 10玩玩 xff0c 途中也遇到了许多问题 xff0c 安装完成后 xff0c 系统默认是选择NAT连接方式的 xff0c 可以直接通过火狐浏览器上网 xff08 不需任何设置 xff0c 系统自己配置好
  • Windows下安装GTK+(整理)

    以下为网上摘的 xff0c 自己把它整理在了一起 WINDOWS下实现GTK 43 GTKMM的编程 xff08 一 xff09 下载软件包 1 下载dev C 43 43 开发软件 xff08 我的版本是4 9 9 2 xff09 2 下
  • windows gtk+开发环境搭建方法详解(图解)

    GTK 43 开发环境搭建 工欲善其事 必先利其器 首先介绍一下GTK 43 开发环境的搭建 网上很多所谓的GTK的开发环境的搭建基本都是抄来抄去 也不知道有没有人使用他们介绍的方法搭建并编译成功 很不幸的是我使用他们写的方法没有搭建成功
  • GTK在Linux下的安装

    linux gtk 是linux平台下的图形界面开发接口 xff0c 它不同于qt xff0c 它是完全免费的 xff0c Qt是基于c 43 43 的商业开发包 xff0c 涉及版权等问题 xff0c gtk则是基于c的全免费的 xff0
  • android SDK下各目录的用途,以及在不同系统下哪些是通用的。

    Android SDK 目录下有很多文件夹 xff0c 主要都是干什么的呢 1 add ons 这里面保存着附加库 xff0c 比如google Maps xff0c 当然你如果安装了OPhone SDK xff0c 这里也会有一些类库在里
  • Linux系统文件系统基础罗列

    Linux 文件系统是linux的一个十分基础的知识 xff0c 同时也是学习linux的必备知识 本文将站在一个较高的视图来了解linux的文件系统 xff0c 主要包括了linux磁盘分区和目录 挂载基本原理 文件存储结构 软链接硬链接
  • 至今互联网上收集最全的精品教育资源【转载+补充】

    海慧为您奉上 xff01 xff01 xff01 操作指引 xff1a 第一步 xff1a 注册一个360云盘账号 xff0c 注册地址 xff1a yunpan 360 cn xff0c 拥有自己的账号和密码 第二步 xff1a 下载36
  • Linux Android 真机调试配置

    1 USB 链接手机 xff0c 打开USB调试 2 在终端中输入lsusb命令 xff0c 查看USB设备信息 xff0c 找到手机对应的USB信息 eg Bus 002 Device 003 ID 12d1 1035 Huawei Te

随机推荐

  • 【ROS2】类ROS1的rate定时器写法(c++&python例子)

    在ROS2官方教程里 xff0c 代码和ROS1例程有很大不同 xff0c 大部分节点都使用了类的写法 xff0c 并且用到了很多C 43 43 的新功能 其中 xff0c 发布消息是采用了一个定时器timer xff0c 并且注册一个回调
  • C++中STL常用容器的优点和缺点

    我们常用到的STL 容器 有vector list deque map multimap set和multiset xff0c 它们究竟有何区别 xff0c 各自的优缺点是什么 xff0c 为了更好的扬长避短 xff0c 提高程序性能 xf
  • APM飞控学习之路:5 串口概述与收发调试

    云中谁寄锦书来 xff0c 雁字回时 xff0c 月满西楼 当无人机在空中飞翔时 xff0c 从APM飞控到飞手之间有几条看不见的 风筝线 xff08 1 xff09 2 4GHz的遥控 xff1b xff08 2 xff09 433 91
  • 【Android车载系列】第3章 车载通讯CAN协议

    1 CAN总线的基本概念以及由来 1 1 简介 CAN 总线即控制器局域网总线 CAN xff0c Controller Area Network 是一种用于实时应用的串行通讯协议总线 xff0c 被公认为最有发展前景的现场总线之一 由 B
  • 经典面试题---linux启动流程

    linux启动流程 xff1a power on gt BIOS加电自检 xff0c 根据引导顺序启动 gt MBR gt grub stage2 gt boot grub grub conf gt 加载内核和ramfs文件系统 gt in
  • APM添加超声模块及定高程序分析

    给飞控添加新的模块 xff0c 通常的做法是写驱动文件 xff0c 然后用uORB订阅消息 xff0c 这种方法已经有文章介绍了 xff0c 下面介绍另一种更加简洁的方法 硬件连接 UARTD xff08 ttyS2 xff09 超声 Bo
  • 光流定点若干问题分析

    一 光流摄像头移动速度快慢对结果的影响 实际测试发现 xff0c 在一定高度水平慢速移动光流摄像头20个单位长度 xff0c 光流累加值为6 9 Pixel xff0c 水平快速移动光流摄像头20个单位长度 xff0c 光流累加值为50 6
  • 光流定点程序梳理

    本文主要分析飞控获取到光流数据之后 xff0c 如何实现定点 xff0c 至于光流算法 xff0c 不在本文讨论范围内 官网介绍的PX4 Flow采用STM32F4作为主控 xff0c 定点效果不错 xff0c 但价格稍贵 xff0c 而且
  • 关于SM2加密验签的操作

    对接银行的统一收单系统 xff0c 用到SM2加密验签流程 xff1a 1 xff1a 统一收单系统对接平台商户需要向CFCA申请复合证书 xff0c 一个用于商户签名 xff0c 另外一个用于报文加密 2 xff1a 平台商户入驻成功后
  • Vue脚手架运行报错multi-word-component-names

    问题描述 Vue脚手架运行的报错 error Component name Union should always be multi word vue multi word component names You may use speci
  • ucosIII学习总结

    看到以前写的ucos博客还有人看 xff0c 感到很欣慰 xff0c 写篇博客给刚学习ucos的同学一些建议 xff0c 希望对你们的学习有所帮助 写在前面 xff0c 当初学ucos完全是误打误撞 xff0c 从单片机一路走来 xff0c
  • Ubuntu 18.04 手动配置分区并安装

    环境说明 安装环境 xff1a VMWare WorkStations Pro 15 5 1 操作系统 xff1a ubuntu 18 04 4 desktop amd64 CPU xff1a 4 核 内存 xff1a 8 GB 磁盘 xf
  • Make 命令(持续更新)

    一 背景 Make是最常用的构建工具 xff0c 诞生于1977年 xff0c 主要用于C语言的项目 但是实际上 xff0c 任何只要某个文件有变化 xff0c 就要重新构建 的项目 xff0c 都可以用Make构建 make只是一个根据指
  • linux c++ 服务器端开发面试必看书籍

    摘自别人博客 xff0c 地址 xff1a http blog csdn net qianggezhishen article details 45951095 打算从这开始一本一本开始看 题外话 xff1a 推荐一个 github 上的
  • K8s网络实战分析之service调用

    在上一篇文章K8s网络实战分析之Calico ipip模式中 xff0c 我们通过Pod之间进行ping操作 xff0c 对基于Calico IPIP模式的K8s网络进行了实战学习与分析 单单进行Pod Pod的访问只是K8s的基础功能 x
  • RTK(Real - time kinematic,实时动态)载波相位差分技术

    GPS和RTK区别在于 xff1a 二者bai指代du不同 二者作用不同 二者原理不同 1 二者指代不同 xff1a RTK是载波dao相位差分技术 xff0c 是实时处理两个测量站载波相位观测量的差分方法 xff1b GPS是全球定位系统
  • RTK+GPS提高定位精度原理解析

    RTK 43 GPS提高定位精度原理解析 xff08 一个小白写给另一个小白系列 xff09 GPS定位原理回顾RTK基本概念RTK组成RTK传输差分示意RTK数据链接坐标转换RTK应用后记 我们在上一篇文章导航定位系统的原理解析 xff0
  • GPS、RTK、PPK三种定位技术的原理及应用

    一 GPS技术 1 原理 之前做过集成GPS功能的产品 xff0c 对这种不以定位为主要功能的产品 xff0c 精度是没有要求的 xff0c 例如我只是用它来得到当前社区的位置 xff0c 一般的GPS模块都能满足要求 理论上 xff0c
  • AT命令与ppp协议

    AT 即Attention xff0c AT指令集是从终端设备 Terminal Equipment xff0c TE 或数据终端设备 Data Terminal Equipment xff0c DTE 向终端适配器 Terminal Ad
  • 无人机开发-图传技术

    2016年 xff0c 是中国无人机市场的元年 xff0c 无人机能够一跃进入大众视野 xff0c 并迅速在大众市场火热发展 xff0c 是很多人始料未及的 从刚开始的空中摄录 xff0c 到后来的实时摄录 xff0c 方便的无人机图传功能