Ardupilot OpenIPC 基于WFB-NG构架分析和数据链路思考

Ardupilot & OpenIPC & 基于WFB-NG构架分析和数据链路思考

  • 1. 源由
  • 2. OpenIPC安装
    • 2.1 安装
    • 2.2 配置
      • 2.2.1 天空端配置文件
      • 2.2.2 地面端配置文件
    • 2.3 当前配置选择
  • 3. WFB-NG安装
    • 3.1 RTL8812AU安装
      • 3.1.1 驱动安装
      • 3.1.2 定位设备
    • 3.2 wfb-ng安装
      • 3.2.1 传输层安装
      • 3.2.2 配置调整
    • 3.3 wfb-ng-osd安装
      • 3.3.1 编译安装
      • 3.3.2 使用事项
    • 3.4 video-viewer安装
  • 4. 总结
  • 5. 参考资料

1. 源由

最近入手一套OpenIPC(SCC338Q+IMX415+Hi3536DV100+RTL8812AU),为了更好的配合GPU的AI运算,进行视频图像分析,初步计划如下:

  1. 天空端:视频(伴机电脑)
  2. 地面端:GPU视频分析/决策+遥控+地面站

为此,前面的准备工作:

  • ArduPilot飞控之Gazebo + SITL + MP的Jetson Orin环境搭建
  • ArduPilot开源飞控之lida2003套机+伴机电脑首飞
  • ubuntu22.04@Jetson Orin Nano之OpenCV安装
  • Linux 36.2@Jetson Orin Nano之Hello AI World!
  • ubuntu22.04@laptop OpenCV Get Started
  • ExpressLRS硬件实测性能分析

当然,这些仅仅是已经做过的一些,对于上面的设想,远远不够,不过我们始终在靠近我们的愿景!

接下来,就将实时视频这块内容增加进来,已经知道的链路大概已经有很多条了,整理下:

a)【视频链路】IMX415 ==> SCC338Q ==> RTL8812AU ==> Hi3536DV100 ==> FPV Goggles/Display
b)【视频链路】IMX415 ==> SCC338Q ==> RTL8812AU ==> Hi3536DV100 ==> Ground Control Station
c)【视频链路】IMX415 ==> SCC338Q ==> RTL8812AU ==> Jetson Orin Nano (GPU/AI)
d)【视频链路】IMX415 ==> SCC338Q ==> Raspberry Pi3B+ (GPU/CPU/AI)
e)【控制链路】FC <== SCC338Q <== RTL8812AU <== Hi3536DV100 <== Ground Control Station
f)【控制链路】FC <== RC Receiver <== RC Transmitter <== RC Controller
e)【控制链路】FC <== SCC338Q <== RTL8812AU <== Jetson Orin Nano (GPU/AI)
g)【控制链路】FC <== SCC338Q <== RTL8812AU <== Raspberry Pi3B+ (GPU/CPU/AI)

注:这里不考虑中继等问题,因为中继进来,整个链路就更加复杂了。

2. OpenIPC安装

  • Alternative open firmware for your IP camera

2.1 安装

略. 后续根据情况再做展开,目前可以看做是一个开源的黑匣子,它的底层实现依赖于WFB-NG。

2.2 配置

2.2.1 天空端配置文件

  • /etc/wfb.conf
# cat /etc/wfb.conf
### unit: drone or gs
unit=drone

wlan=wlan0
region=00
### By default used channel number, but, you may set freq instead. For ex: 2387M
channel=64
frequency=
txpower=20
driver_txpower_override=20
bandwidth=20
stbc=0
ldpc=0
mcs_index=1
stream=0
link_id=7669206
udp_port=5600
rcv_buf=456000
frame_type=data
fec_k=8
fec_n=12
pool_timeout=0
guard_interval=long
  • /etc/majestic.yaml
# cat /etc/majestic.yaml
system:
  staticDir: /var/www
  webPort: 80
  httpsPort: 443
  plugins: false
  buffer: 1024
isp:
  antiFlicker: disabled
  exposure: 20
  aGain: 40
  sensorConfig: /etc/sensors/imx415_fpv.bin
image:
  mirror: false
  flip: false
  rotate: 0
  contrast: 50
  hue: 50
  saturation: 50
  luminance: 50
video0:
  enabled: true
  codec: h265
  fps: 60
  bitrate: 2048
  rcMode: cbr
  gopSize: 1
  size: 1024x768
video1:
  enabled: false
  codec: h264
  size: 704x576
  fps: 15
jpeg:
  enabled: false
  qfactor: 50
  fps: 5
osd:
  enabled: false
  font: /usr/share/fonts/truetype/UbuntuMono-Regular.ttf
  template: "%d.%m.%Y %H:%M:%S"
  posX: 16
  posY: 16
audio:
  enabled: false
  volume: 30
  srate: 8000
  codec: opus
  outputEnabled: false
  outputVolume: 30
rtsp:
  enabled: true
  port: 554
nightMode:
  enabled: false
  irCutSingleInvert: false
  colorToGray: true
  irSensorPinInvert: false
motionDetect:
  enabled: false
  visualize: false
  debug: false
records:
  enabled: false
  path: /mnt/mmcblk0p1/%F/%H.mp4
  maxUsage: 95
outgoing:
  enabled: true
  server: udp://127.0.0.1:5600
  naluSize: 1200
watchdog:
  enabled: true
  timeout: 300
hls:
  enabled: false
onvif:
  enabled: false
ipeye:
  enabled: false
youtube:
  enabled: false

2.2.2 地面端配置文件

  • /etc/wfb.conf
# cat /etc/wfb.conf
### unit: drone or gs
unit=gs

wlan=wlan0
region=00
### By default used channel number, but, you may set freq instead. For ex: 2387M
channel=64
frequency=
txpower=20
driver_txpower_override=20
stream=0
link_id=7669206
udp_addr=127.0.0.1
udp_port=5600
telemetry=true
  • /etc/vdec.conf
# cat /etc/vdec.conf
### Port for video rx (default: 5000)

port=5600

### Codec: h264 or h265 (default: h264)

codec=h265

### Incoming data format: stream or frame (default: stream)

format=frame

### Screen output mode:
# 720p60       - 1280 x 720  @ 60 fps
# 1080p60      - 1920 x 1080 @ 60 fps
# 1024x768x60  - 1024 x 768  @ 60 fps
# 1366x768x60  - 1366 x 768  @ 60 fps
# 1280x1024x60 - 1280 x 1024 @ 60 fps
# 1600x1200x60 - 1600 x 1200 @ 60 fps
# 2560x1440x30 - 2560 x 1440 @ 30 fps

mode=1024x768x60

### Mavlink port for telemetry (default: 14750)

mavlink_port=14750

### Osd: none, simple or custom for use own lvgl based osd (custom osd binary need to be upload to /usr/bin directory) (default: simple)

osd=simple

### Records archive (Mount ssd, set up full path to records archive, file names generated automatically. example: /mnt/sda1/recorder)

records=

### Extra param (write in one line split by space):

#    --ar [mode]        - Aspect ratio mode               (Default: keep)
#      keep             - Keep stream aspect ratio
#      stretch          - Stretch to output resolution
#      manual           - Manual image size definition

#    --ar-bg-r [Value]  - Fill color red component      (Default: 0)
#    --ar-bg-g [Value]  - Fill color green component    (Default: 0)
#    --ar-bg-b [Value]  - Fill color blue component     (Default: 0)

#    --ar-x [Value]     - Image position X
#    --ar-y [Value]     - Image position Y
#    --ar-w [Value]     - Image width
#    --ar-h [Value]     - Image height

#    --bg-r [Value]     - Background color red      (Default: 0)
#    --bg-g [Value]     - Background color green    (Default: 96)
#    --bg-b [Value]     - Background color blue     (Default: 0)

extra="--bg-r 30 --bg-g 0 --bg-b 30"

2.3 当前配置选择

鉴于手头测试设备的限制,为了更好的使用,配置如下:

  • 分辨率:1024x768 //配合一台VGA液晶显示器
  • 编解码:H265 //SCC338Q & Hi3536DV100 支持
  • 编码率:60FPS //Hi3536DV100 支持最高的解码率
  • WiFi频点:channel=64

注:H265编解码存在花屏现象,可能与底层分包组装有关,详见:How to configure 720P@120fps on wfb_gs on ubuntu(not OpenIPC gs)
#336

3. WFB-NG安装

  • ubuntu22.04@laptop安装&配置wfb-ng

3.1 RTL8812AU安装

3.1.1 驱动安装

$ sudo apt-get install dkms
$ git clone -b v5.2.20 git@github.com:svpcom/rtl8812au.git
$ cd rtl8812au/
$ sudo ./dkms-install.sh

3.1.2 定位设备

如果设备正确安装了,那么将会看到类似下面的输出:

$ nmcli

...
wlan1: unmanaged
        "Realtek RTL8812AU 802.11a/b/g/n/ac 2T2R"
        wifi (rtl88xxau_wfb), 20:0D:B0:32:DA:3A, hw, mtu 4052
...

注:这里笔者环境WiFi设备为Realtek RTL8812AU 802.11a/b/g/n/ac 2T2R 设备号:wlan1

3.2 wfb-ng安装

3.2.1 传输层安装

之前已经定位WiFi设备为wlan1,安装地面站:

$ git clone -b stable git@github.com:svpcom/wfb-ng.git
$ cd wfb-ng
$ sudo ./scripts/install_gs.sh wlan1

注:Jetson Orin平台安装时,会存在问题,需要修复安装脚本,详见:[Jetson Orin] wfb-ng/env/bin/pip: No such file or directory

3.2.2 配置调整

  1. 调整通信频点与SCC338Q channel=64一致
$ sudo cat /etc/wifibroadcast.cfg
[common]
wifi_channel = 64     # 161 -- radio channel @5825 MHz, range: 5815–5835 MHz, width 20MHz
                       # 1 -- radio channel @2412 Mhz,
                       # see https://en.wikipedia.org/wiki/List_of_WLAN_channels for reference
wifi_region = 'BO'     # Your country for CRDA (use BO or GY if you want max tx power)

[gs_mavlink]
peer = 'connect://127.0.0.1:14550'  # outgoing connection
# peer = 'listen://0.0.0.0:14550'   # incoming connection

[gs_video]
peer = 'connect://127.0.0.1:5600'  # outgoing connection for
                                   # video sink (QGroundControl on GS)
  1. 配置地面站与天空端的秘钥
$ wfb_keygen
Drone keypair (drone sec + gs pub) saved to drone.key
GS keypair (gs sec + drone pub) saved to gs.key

$ ls
drone.key  gs.key
  • drone.key --> 天空端 /etc/drone.key
  • gs.key --> 地面端 /etc/gs.key

3.3 wfb-ng-osd安装

3.3.1 编译安装

$ sudo apt-get install libcairo2-dev gstreamer1.0-tools libgstreamer1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly libgstreamer-plugins-base1.0-dev
$ make osd

3.3.2 使用事项

$ ./osd --help
./osd: invalid option -- '-'
./osd [-p mavlink_port] [-P rtp_port] [ -R rtsp_url ] [-4] [-5] [-j rtp_jitter] [-x] [-a] [-w screen_width]
Default: mavlink_port=14551, rtp_port=5600, rtsp_url=none, codec=h264, rtp_jitter=5, screen_width=1920
WFB-ng OSD version 23.12.15.60076-1acd315d
WFB-ng home page: <http://wfb-ng.org>
  • 鉴于当前OpenIPC使用venc/vdec进行编解码,所以无法被用于RTP相兼容的majectic streamer。
  • 若真想要尝试使用,需要在调整OpenIPC的venc0_P0_MAIN/venc1_P0_MAIN进程,暂不深入分析。目前在Jetson Orin平台上可以使用gstDecoder解码。

3.4 video-viewer安装

鉴于前面谈到的编解码问题,若要在Jetson Orin平台上能够对OpenIPC现在venc编码视频流进行解码,可以简单使用video-viewer这个工具,但是性能上现在看来并不理想,因为平台使用了GPU和CPU来介入。也许切换到常规RTP编解码会有更好的效果。

关于工具的安装,这里不再展开,感兴趣的朋友可以自行阅读:Linux 36.2@Jetson Orin Nano之Hello AI World!

4. 总结

鉴于:

  1. 目前最新数据720P@120FPS响应时间35~40ms延迟,具备FPV四轴高速飞行要求
  2. wfb_ng是传输层代码,在进行视频传输的同时,具备小数据电传链路功能
  3. wfb_ng是加密传输,开源代码
  • wfb-ng 开源工程结构&代码框架简明介绍

以下链路分析:

  • 相对传统链路:
    a)【视频链路】IMX415 ==> SCC338Q ==> RTL8812AU ==> Hi3536DV100 ==> FPV Goggles/Display
    b)【视频链路】IMX415 ==> SCC338Q ==> RTL8812AU ==> Hi3536DV100 ==> Ground Control Station
    e)【控制链路】FC <== SCC338Q <== RTL8812AU <== Hi3536DV100 <== Ground Control Station
    f)【控制链路】FC <== RC Receiver <== RC Transmitter <== RC Controller

  • 大数据分析链路:
    c)【视频链路】IMX415 ==> SCC338Q ==> RTL8812AU ==> Jetson Orin Nano (GPU/AI)
    d)【视频链路】IMX415 ==> SCC338Q ==> Raspberry Pi3B+ (GPU/CPU/AI)
    e)【控制链路】FC <== SCC338Q <== RTL8812AU <== Jetson Orin Nano (GPU/AI)
    g)【控制链路】FC <== SCC338Q <== RTL8812AU <== Raspberry Pi3B+ (GPU/CPU/AI)

Raspberry Pi3B+(Companion Computer)和Jetson Orin(DataCenter) 组成了大数据决策和边缘AI的构架模型。

  • DataCenter负责广域范围内的分析和决策
  • CompanionComputer负责局域范围内的分析和决策

在这里插入图片描述

以上是根据FPV无人机方面的一些简单想法(实际应用还可以进行适当的调整部署,以适应实际应用需求)。随着技术的发展,今后科技发展在各个领域都将会逐步形成细分的领域大数据决策和边缘AI应用,这也是为什么我们非常看好《一种部件生命期监测方法》在细分应用领域具有指导意义的重要原因。

好了,废话不多说,上点这套OpenIPC(SCC338Q+IMX415+Hi3536DV100+RTL8812AU) + Jetson Orin Nano的视频,感性认识下ubuntu22.04@Jetson Orin Nano安装WFB-NG&OpenIPC性能。

为什么说感性,因为测试环境配置都不高:(有过有朋友能提供更好的测试环境,那倒是可以考虑测下极限)

  1. 台式老显示器 1024x768@60Hz
  2. 裸奔测试屏幕1920x1080@60Hz
  3. 非高速拍摄&记录设备,使用老式小米手机
  4. 计时器显示屏幕2736x1824@59.96Hz (SurfacePro6)

注:受到venc/vdec编码器的影响,Jetson Orin似乎并不太支持这个解码流,效果不好。

OpenIPC(SCC338Q+IMX415+Hi3536DV100+RTL8812AU)性能测试

上述配置摄像头端(SCC338Q+IMX415+RTL8812AU)是能够满足720P@120FPS H265的,从延时报告的数据,大约能做到30~40ms。

实际看电视的效果,大家感受下:

ssc338q+imx415+nvr3536 OpenIPC看视频

5. 参考资料

【1】 wfb-ng Release 23.01镜像无头烧录&配置(1)
【2】 wfb-ng Release 23.01镜像无头烧录&配置(2)
【3】wfb-ng 锁定WiFi接口
【4】Linux 36.2@Jetson Orin Nano之基础环境构建
【5】Aocoda-RC H743Dual BMI270x2飞控,支持Ardupilot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/566420.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WordPress social-warfare插件XSS和RCE漏洞【CVE-2019-9978】

WordPress social-warfare插件XSS和RCE漏洞 ~~ 漏洞编号 : CVE-2019-9978 影响版本 : WordPress social-warfare < 3.5.3 漏洞描述 : WordPress是一套使用PHP语言开发的博客平台&#xff0c;该平台支持在PHP和MySQL的服务器上架设个人博客网站。social-warfare plugin是使用…

Kimi Chat四大更新详细解读!模型能力提升,支持语音输入输出!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

clickhouse数据去重函数介绍(count distinct)

非精确去重函数&#xff1a;uniq、uniqHLL12、uniqCombined 精确去重函数&#xff1a;uniqExact、groupBitmap 测试数据量&#xff1a;2000w 结论&#xff1a; 1.整形值精确去重场景&#xff0c;groupBitmap 比 uniqExact至少快 2x 2.groupBitmap仅支持无符号整形值去重&#x…

【LAMMPS学习】八、基础知识(3.6)计算热导率

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

我的一些 35+ 前同事的现状

大家好&#xff0c;我是坤哥&#xff0c;好久不见&#xff0c;今天简单和大家聊一下我目前观察到的前同事的现状 今年和一些前同事简单聊过&#xff0c;他们的现状如下&#xff1a; A: 去新西兰做 iOS 开发快 10 年了&#xff0c;马上就要拿到永久居留证了&#xff0c;他说在新…

hcip实验 — 路由策略实验

目录 实验拓扑 实验要求 实验思路 实验步骤 1.配置接口及环回ip 2.配置ospf协议及rip协议 3.在R2上进行路由引入 4.在R2上进行路由过滤 5.在R4上进行路由过滤&#xff08;地址前缀列表&#xff09; 6.在R2 RIP进程上配置静默接口使RIP报文无法进入OSPF区域 实验拓扑 …

Hadoop实战——MapReduce-字符统计(超详细教学,算法分析)

目录 一、前提准备工作 启动hadoop集群 二、实验过程 1.虚拟机安装先设置端口转发 2.上传对应文件 3.编写Java应用程序 4. 编译打包程序 5. 运行程序 三、算法设计和分析 算法设计 算法分析 四、实验总结 实验目的&#xff1a;给定一份英文文本&#xff0c;统计每个…

ResNet详解

一、认识ResNet ResNet&#xff08;Residual Network&#xff09;是一种深度神经网络结构&#xff0c;被广泛应用于图像分类、目标检测和语义分割等计算机视觉任务中。它是由微软亚洲研究院的何凯明等人于2015年提出的&#xff0c;通过引入残差连接&#xff08;residual conne…

携程 Java 暑期实习一面:HashMap 的 key 可以设置为 null 吗?那 ConcurrentHashMap 呢?

更多大厂面试内容可见 -> http://11come.cn 携程 Java 暑期实习一面&#xff1a;HashMap 的 key 可以设置为 null 吗&#xff1f;那 ConcurrentHashMap 呢&#xff1f; Java 基础 1、Java 中有哪些常见的数据结构&#xff1f; 图片来源于&#xff1a;JavaGuide Java 中常…

【数学归纳法 反证法】菲蜀定理

裴蜀定理&#xff08;或贝祖定理&#xff0c;Bzout’s identity&#xff09;得名于法国数学家艾蒂安裴蜀&#xff0c;说明了对任何整数a、b和它们的最大公约 数d&#xff0c;关于未知数x和y的线性不定方程&#xff08;称为裴蜀等式&#xff09;&#xff1a;若a,b是整数,且&…

C++异常和断言

C异常 异常的理念看似有前途&#xff0c;但实际的使用效果并不好。编程社区达成的一致意见是&#xff0c;最好不要使用这项功能。C98引入异常规范&#xff0c;C11已弃用。 例如&#xff1a;我们输入1时抛出异常。 #include <iostream> #include <vector> #includ…

macbook内存怎么清理?2024年有哪些好用的软件

当你的MacBook运行缓慢时&#xff0c;这很可能是因为内存&#xff08;RAM&#xff09;满了。内存是计算机的临时存储区&#xff0c;用于存放当前正在使用的程序和数据。当内存满时&#xff0c;MacBook就会使用硬盘作为临时内存&#xff0c;这大大降低了运行速度。那么&#xff…

Hadoop3:HDFS、YARN、MapReduce三部分的架构概述及三者间关系(Hadoop入门必须记住的内容)

一、HDFS架构概述 Hadoop Distributed File System&#xff0c;简称HDFS&#xff0c;是一个分布式文件系统。 1&#xff09;NameNode(nn)&#xff1a;存储文件的元数据&#xff0c;如文件名&#xff0c;文件目录结构&#xff0c;文件属性&#xff08;生成时间、副本数、文件…

基于Tensorflow完成mnist数据集的数字手写体识别

基于Tensorflow完成mnist数据集的数字手写体识别 关于知识背景CNNFCNN 关于数据集新的改变 关于知识背景 CNN 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是一种具有局部连接、权值共享等特点的深层前馈神经网络&#xff08;Feed…

【CAD打开提示未处理异常C0000027(c0000027h)的两种解决方法。】

cad打开提示错误c0000027h的第一种解决方法 去掉区域里的beta语言勾选。 https://autodesk8.com/cad/86.html 如果第一种方法没解决&#xff0c;尝试第二种方法大概率能解决 点击autoremove的扩展功能&#xff0c;输入c0000027点击搜索&#xff0c;然后双击出现的这个按钮既可…

【AI开发:音频】一、GPT-SoVITS整合工具包的部署问题解决(GPU版)

前言 目前GPT-SoVITS的合成效果比较不错&#xff0c;相比较其他厂商的产品要规整的多。众多厂家中也是国内使用最多的一款了&#xff0c;并且这个整合包里携带了&#xff0c;除背景音、切割、训练、微调、合成、低成本合成等一些列完整的工具&#xff0c;也可以作为API进行使用…

近年数一,数二难度如何,听说24是像张宇那样的题?

直接上分数&#xff01; “估分一百零几&#xff0c;平时李林130-140&#xff0c;张八110-125的样子&#xff0c;超越做的分数也是100出头。” 24学长说&#xff1a; “远离李林张八&#xff01;张四没做不评价。” “李林张八暑假前做完当作打基础即可。超越才是真题难度”…

利用regress绘制拟合图,利用Slope的趋势分析(5)

code如下&#xff1a; % SCD,积雪日数 % SCS,积雪初日 % SCM,积雪终日% SCS SCD SCM clc; clear; % 读取 Excel 表 excel_file E:\work\2024年\April20\积雪作图\tif文件\excel表\SCS.xlsx; % Excel 文件路径 data readtable(excel_file);datavalue data{:,2:end}; year (…

【工具-pip】

工具-pip ■ pip-工具■ pip-安装■ pip-卸载■ pip-帮助■ pip- 批量安装库■ 批量卸载库■ 提高pip下载速度 ■ pip-工具 pip 是 Python 标准库中的一个包&#xff0c;这个包是用来管理 Python 第三方库。 通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、…

【分治算法】Hanoi塔问题Python实现

文章目录 [toc]问题描述Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;Python基础 学习指南&#xff1a;Python学习指南 问题描述 设 a a a、 b b b、 c c c是三个塔座&#xff0c;开始时&#xff0c;在塔座 a a a上有一叠共 n n n个圆盘&#xff0c;这些圆盘…