OpenIPC开源FPV之Adaptive-Link安装
OpenIPC开源FPV之Adaptive-Link安装
- 1. 源由
- 2. 介绍
- 2.1 天空端安装
- 2.2 地面端安装
- 3. 问题汇总
- 3.1 安装脚本问题
- 3.2 网络安装问题
- 3.3 非SSC30KQ/SSC338Q硬件
- 3.4 代码疑问
- 4. 总结
- 5. 后续
1. 源由
鉴于飞行过程,发现一些马赛克现象,且60FPS桌面30FPS的录影有些许卡顿。
- OpenIPC SSC30KQ IMX335 + Ardupilot 4.5.6 + 梅岭隧道南入口 FPV飞行
- OpenIPC地面站OSD + Ardupilot 4.5.6 + 梅家坞山坳 FPV飞行
为了更好的确保FPV飞行质量:
- 提高图像的清晰度
- 保证图像流畅性
- 更好应对穿越场景
引入Adaptive Link
势在必行!
2. 介绍
前面,已经简单的介绍了关于OpenIPC Adaptive Link的原理和逻辑:
【1】OpenIPC开源FPV之Adaptive-Link工程解析
【2】OpenIPC开源FPV之Adaptive-Link天空端代码解析
【3】OpenIPC开源FPV之Adaptive-Link地面站代码解析
接下去,我们将进行安装,以便更好的后续在上面的场景上进行验证。
2.1 天空端安装
$ cd /etc
$ curl -L -o alink_install.sh https://raw.githubusercontent.com/sickgreg/OpenIPC-Adaptive-Link/refs/heads/main/alink_install.sh
$ chmod +x alink_install.sh
$ ./alink_install.sh drone install
$ reboot
2.2 地面端安装
$ curl -L -o alink_install.sh https://raw.githubusercontent.com/sickgreg/OpenIPC-Adaptive-Link/refs/heads/main/alink_install.sh
$ sudo chmod +x alink_install.sh
$ sudo ./alink_install.sh gs install
3. 问题汇总
3.1 安装脚本问题
- Install gs adaptive link failed #14
不过在jetson-fpv
中,会通过补丁的方式进行修正,并且所有安装方式都会使用菜单方式进行安装,详见:How to install the jetson-fpv?
3.2 网络安装问题
由于天空端采用了网络安装方式,因此,由于网络问题导致无法安装成功。
建议通过代理,可参考:apt-get通过代理更新系统
3.3 非SSC30KQ/SSC338Q硬件
因为,目前安装方式仅支持上述两个硬件,若需要其他硬件版本,可以参考以下方式自行编译:
- Build scripts for goke|hi3516|star6b0|star6e|star6c targets on x86 #13
3.4 代码疑问
- 【OSD】“pnlt%d xtx%ld idr%d” string lost #15
- 【WiFi】Which is the best profile for the 8812EU currently?
- 【WiFi】WIP: Add support for RTL8812EU-based Wi-Fi adapters for FPV firmware #1344
- 【Version】stucked “initializing… 6.3Mb FPS:60 54% tx34c rssi-44, snr15 fec1 pnlt0 xtx0 i” #17
- 【Version】[Request] Version control of adaptive link
- 【Version】Build scripts for goke|hi3516|star6b0|star6e|star6c targets on x86
- 【Version】 add exective attribute to bash files #12
4. 总结
通过实际楼道环境测试显示,H265最低比特率在2.2Mbps,最高在10Mbps左右。
实际情况,待天气好转,现场实测!
注意:目前该链路动态适配正在不断完善和开发,因此,很多情况会发生变化。上述仅供参考,谢谢!欢迎大家留言,指正,谢谢!
5. 后续
鉴于当前官方版本尚未进入版本管控,且在OpenIPC较新固件master+9fbdc40, 2025-02-15
版本上无法使用最新的adaptive link
。
基于这些,我们做了一个兼容的版本,供大家使用,操作步骤如下:
- 更新最新的OpenIPC固件(晚于2025-02-15)
- 下载代码
git clone https://github.com/SnapDragonfly/OpenIPC-Adaptive-Link.git
- 检出ssc30kq分支
git checkout build_for_ssc30kq
- 编译最新版本
./build.sh star6e
- 使用新构建的二进制
alink_drone
- BL-M8812EU2 功率表格更新
$ cat /etc/txprofiles.conf
# <ra - nge> <gi> <mcs> <fecK> <fecN> <bitrate> <gop> <Pwr> <roiQP> <bandwidth> <qpDelta>
999 - 999 long 0 12 15 3332 5.0 61 0,0,0,0 20 -12
1000 - 1150 long 0 12 15 3333 5.0 60 0,0,0,0 20 -12
1151 - 1300 long 1 12 15 6667 5.0 59 12,6,6,12 20 -12
1301 - 1700 long 2 12 15 10000 5.0 58 12,6,6,12 20 -12
1701 - 1950 long 3 12 15 12500 5.0 56 8,4,4,8 20 -12
1951 - 2001 short 3 12 15 14000 5.0 56 4,0,0,4 20 -12
- 配置更新
$cat /etc/alink.conf
### alink_drone settings ###### Allow power settings defined in txprofiles.conf
allow_set_power=1### weights - how much consideration alink_drone puts on gs rssi vs snr
rssi_weight=0.3
snr_weight=0.7### if gs heartbeat lost for x ms, set link low (fallback)
fallback_ms=1000
# keep link low for min x s
hold_fallback_mode_s=3### limit time between any link change and the next
min_between_changes_ms=150
# wait x seconds before increasing link speed
hold_modes_down_s=4### smooth out rssi/snr readings for link increase / decrease
hysteresis_percent=15
hysteresis_percent_down=5
exp_smoothing_factor=0.1
exp_smoothing_factor_down=1.0### allow lost GS packet to request new keyframe
allow_request_keyframe=1
# allow drone driver-tx_dropped to request new keyframe
allow_rq_kf_by_tx_d=1
# limit time between keyframe requests
request_keyframe_interval_ms=100
# request a keyframe at every link changes
idr_every_change=0### enable higher quality in center of image
roi_focus_mode=0### penalise link by this amount per packet above alarm (0 = disabled)
fec_rec_penalty=0
# allow fec below alarm value
fec_rec_alarm=2
# limit penalty to
max_fec_rec_penalty=150
apply_penalty_for_s=1### attempt to help encoder bitrate spikes by strategically lowering FPS when on high resolutions
allow_spike_fix_fps=0### Command templates - Don't change these unless you know what you are doing
powerCommand="iw dev wlan0 set txpower fixed %d"
fpsCommandTemplate="echo 'setfps 0 %d' > /proc/mi_modules/mi_sensor/mi_sensor0"
qpDeltaCommand="curl localhost/api/v1/set?video0.qpDelta=%d"
mcsCommand="wfb_tx_cmd 8000 set_radio -B %d -G %s -S 1 -L 1 -M %d"
bitrateCommand="curl -s 'http://localhost/api/v1/set?video0.bitrate=%d'"
gopCommand="curl -s 'http://localhost/api/v1/set?video0.gopSize=%f'"
fecCommand="wfb_tx_cmd 8000 set_fec -k %d -n %d"
roiCommand="curl -s 'http://localhost/api/v1/set?fpv.roiQp=%s'"
idrCommand="curl localhost/request/idr"
customOSD=&L%d0&F%d&B &C tx&Wc
reboot
重启OpenIPC
相关文章:

OpenIPC开源FPV之Adaptive-Link安装
OpenIPC开源FPV之Adaptive-Link安装 1. 源由2. 介绍2.1 天空端安装2.2 地面端安装 3. 问题汇总3.1 安装脚本问题3.2 网络安装问题3.3 非SSC30KQ/SSC338Q硬件3.4 代码疑问 4. 总结5. 后续 1. 源由 鉴于飞行过程,发现一些马赛克现象,且60FPS桌面30FPS的录…...
[杂学笔记]OSI七层模型作用、HTTP协议中的各种方法、HTTP的头部字段、TLS握手、指针与引用的使用场景、零拷贝技术
1.OSI七层模型作用 物理层:负责光电信号的传输,以及将光电信号转化为二进制数据数据链路层:主要负责将收到的二进制数据进一步的封装为数据帧报文。同时因为数据在网络中传递的时候,每一个主机都能够收到报文数据,该层…...
RK3568开发笔记-AD7616调试笔记
目录 前言 一、AD7616介绍 高分辨率 高速采样速率 宽模拟输入范围 集成丰富功能 二、原理图连接 三、设备树配置 四、内核驱动配置 五、AD芯片测试 总结 前言 在嵌入式数据采集领域,将模拟信号精准转换为数字信号至关重要。AD7616 作为一款性能卓越的 16 位模数转换器…...

Unity摄像机与灯光相关知识
一、Inspector窗口 Inspector窗口可以查看和编辑对象的属性以及设置 其中包含各种组件,例如用Cube对象来举例 1.Sphere(Mesh)组件: 用来决定对象的网格属性,例如球体网格为Sphere、立方体网格为Cube 2.Mesh Renderer组件: 用来设置…...

AI前端革新金融风控:ScriptEcho助力高效开发
1. 引言:金融风控的挑战与前端效率需求 在当今快速变化的金融环境中,风险评估和反欺诈已成为金融机构运营的核心。金融风控不仅关乎企业的盈利能力,更直接影响着整个金融体系的稳定。一个强大的风控系统需要能够实时监控、分析并预测潜在的风…...
STM32--SPI通信讲解
前言 嘿,小伙伴们!今天咱们来聊聊STM32的SPI通信。SPI(Serial Peripheral Interface)是一种超常用的串行通信协议,特别适合微控制器和各种外设(比如传感器、存储器、显示屏)之间的通信。如果你…...

CryptoJS库中WordArray对象支持哪些输出格式?除了toString() 方法还有什么方法可以输出吗?WordArray对象的作用是什么?
前言:这里只说js用的CryptoJS库里的相关内容,只用js来进行代码操作和讲解。 这里网上相关的帖子很少,不得已问了很长时间AI 想引用CryptoJS库情况分两种,一种是html引用,另一种是在Nodejs里引用。 一、引用CryptoJS库…...

第六次作业
一.对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 。 LVS-NAT模式的优势 配置简单:NAT模式的配置相对容易,无需复杂的网络设置,适合初学者和小型网络环境。 网络架构灵活:由于使用了NAT技术…...
八、Spring Boot:RESTful API 应用
创建第一个 Spring Boot RESTful API 应用 在现代 Web 开发中,RESTful API 是一种非常流行的设计风格,它基于 HTTP 协议,提供了简单、灵活的方式来构建网络应用。Spring Boot 作为一款强大的微服务框架,提供了丰富的工具和支持&a…...
Pytorch实现之混合成员GAN训练自己的数据集
简介 简介:提出一种新的MMGAN架构,使用常见生成器分布的混合对每个数据分布进行建模。由于生成器在多个真实数据分布之间共享,高度共享的生成器(通过混合权重反映)捕获分布的公共方面,而非共享的生成器捕获独特方面。 论文题目:MIXED MEMBERSHIP GENERATIVE ADVERSARI…...
微信小程序网络请求与API调用:实现数据交互
在前几篇文章中,我们学习了微信小程序的基础知识、数据绑定、事件处理以及页面导航与路由。这些知识帮助我们构建了具备基本交互功能的小程序。然而,一个完整的应用通常需要与服务器进行数据交互,例如获取用户信息、提交表单数据等。本文将深入探讨微信小程序的网络请求与AP…...
Cramér-Rao界:参数估计精度的“理论底线”
Cramr-Rao界:参数估计精度的“理论底线” 在统计学中,当我们用数据估计一个模型的参数时,总希望估计结果尽可能精确。但精度有没有一个理论上的“底线”呢?答案是有的,这就是Cramr-Rao界(Cramr-Rao Lower …...
nv docker image 下载与使用命令备忘
1,系统需求 Requirements for GPU Simulation GPU Architectures Volta, Turing, Ampere, Ada, Hopper NVIDIA GPU with Compute Capability 7.0 CUDA 11.x (Driver 470.57.02), 12.x (Driver 525.60.13) Supported Systems CPU architectures x86_64, ARM…...

C#连接sql server
连接时,出现如下提示: ERROR [IM014] [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配 原因是odbc的驱动和应用程序的架构不一致。我的odbc如下所示: 显示为64位,而c#程序显…...

汽车智能制造企业数字化转型SAP解决方案总结
一、项目实施概述 项目阶段划分: 蓝图设计阶段主数据管理方案各模块蓝图设计方案下一阶段工作计划 关键里程碑: 2022年6月6日:项目启动会2022年12月1日:系统上线 二、总体目标 通过SAP实施,构建研产供销协同、业财一…...
vue2项目打包后js文件过大, 首次加载缓慢
vue2项目打包后js文件过大, 首次加载缓慢 安装插件 npm i compression-webpack-plugin6.1.1 -D配置vue.config.js const CompressionWebpackPlugin require(compression-webpack-plugin)module.exports {configureWebpack: {plugins:[new CompressionWebpackPlugin({filen…...
数据安全_笔记系列06:数据生命周期管理(存储、传输、使用、销毁)深度解析
数据安全_笔记系列06:数据生命周期管理(存储、传输、使用、销毁)深度解析 数据生命周期管理(存储、传输、使用、销毁)详解 数据生命周期管理(Data Lifecycle Management, DLM)是围绕数据从创建…...
机器学习数学基础:32.斯皮尔曼等级相关
斯皮尔曼等级相关教程 一、定义与原理 斯皮尔曼等级相关系数(Spearman’s rank - correlation coefficient),常用 ρ \rho ρ表示,是一种非参数统计量,用于衡量两个变量的等级之间的关联程度。它基于变量的秩次&…...
【AI-39】深度学习框架包含哪些内容
深度学习框架(如 PyTorch、TensorFlow)是用于构建和训练神经网络的工具,它们提供了底层的计算库、优化算法、张量操作等功能。而transformers库是基于这些深度学习框架构建的高级库,它封装了许多预训练模型和相关的工具࿰…...

uniapp h5支付宝支付
第1种,创建个div插入到body中 const div document.createElement(div); div.innerHTML 后端返回的form表单字符串; document.body.appendChild(div); document.forms[0].submit(); div.remove(); 第2种 <template> <view v-html"formAliPay"…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...