当前位置: 首页 > news >正文

OpenIPC开源IPC之重要源码包

OpenIPC开源IPC之重要源码包

  • 1. 源由
  • 2. 分析
    • 2.1 功能角度
    • 2.2 数据角度
  • 3. 软件包
    • 3.1 wfb-ng
      • 3.1.1 目标板配置
      • 3.1.2 软件版配置
      • 3.1.3 视频数据发送 & 接收
    • 3.2 datalink
      • 3.2.1 目标板配置
      • 3.2.2 软件版配置
      • 3.2.3 数据发送 & 接收
    • 3.3 *mavfwd
      • 3.3.1 目标板配置
      • 3.3.2 软件版配置
      • 3.3.3 MAVLink数据采集&接收
    • 3.4 *mavlink-router
      • 3.4.1 目标板配置
      • 3.4.2 软件版配置
      • 3.4.3 MAVLink数据采集&接收
    • 3.5 majestic
      • 3.5.1 目标板配置
      • 3.5.2 软件版配置
      • 3.5.3 摄像视频采集
    • 3.6 *vdec-openipc
      • 3.6.1 目标板配置
      • 3.6.2 软件版配置
      • 3.6.3 视频播放&OSD渲染
  • 4. 启动
    • 4.1 数据链路启动
      • RF链路
      • LTE链路
    • 4.2 视频链路启动
  • 5. 参考资料

1. 源由

OpenIPC FPV设备,在软件层面,其体现功能的重要软件包的梳理,有助于更好的理解工作原理。

从软件部署的思路去考虑,我们将设备的软件大块的进行简单切割:

  1. 设备引导代码:uboot
  2. 操作系统代码:Linux
  3. 基础文件系统:FileSystem(含基础功能代码)
  4. 功能执行代码:Application

前面《OpenIPC开源IPC之工程框架》已经整体上介绍上面四大块内容整合工具Buildroot

本章将重点放在Application上,期望通过梳理,将天空端和地面端的具体功能实现与源代码一一对应,以便更好的去维护和开发后续功能。

2. 分析

首先,从功能颗粒度的角度进行基本分析。

2.1 功能角度

  • 天空端
  1. 摄像视频采集
  2. 视频数据发送
  3. MAVLink数据采集
  4. MAVLink数据发送
  • 地面端
  1. 视频数据接收
  2. 摄像视频播放
  3. MAVLink数据接收
  4. OSD图层渲染

2.2 数据角度

  • 视频流
摄像视频采集  --> 视频数据发送 --> 视频数据接收 --> 摄像视频播放
  • MAVLink数据流
MAVLink数据采集 --> MAVLink数据发送 --> MAVLink数据接收 --> OSD图层渲染

3. 软件包

通过功能角度和数据角度分析,寻找对应软件包的方式关联的脚本或者代码证据,将整个流程串联起来。

3.1 wfb-ng

3.1.1 目标板配置

  • devices/ssc338q_fpv_openipc-urllc-aio/br-ext-chip-sigmastar/configs/ssc338q_fpv_openipc-urllc-aio_defconfig#L103
BR2_PACKAGE_WIFIBROADCAST=y

3.1.2 软件版配置

  • general/package/wifibroadcast/wifibroadcast.mk#L7
WIFIBROADCAST_VERSION = 24.08

3.1.3 视频数据发送 & 接收

  • general/package/wifibroadcast/files/wifibroadcast#L109-L117
start_drone_wfb() {wfb_tx -p "$stream" -u "$udp_port" -R "$rcv_buf" -K "$keydir/$unit.key" -B "$bandwidth" \-M "$mcs_index" -S "$stbc" -L "$ldpc" -G "$guard_interval" -k "$fec_k" -n "$fec_n" \-T "$pool_timeout" -i "$link_id" -f "$frame_type" -C 8000 "$wlan" > /dev/null &
}start_gs_wfb() {wfb_rx -c "$udp_addr" -u "$udp_port" -p "$stream" -K "$keydir/$unit.key" -i "$link_id" "$wlan" > /dev/null &
}

3.2 datalink

3.2.1 目标板配置

  • devices/ssc338q_fpv_openipc-urllc-aio/br-ext-chip-sigmastar/configs/ssc338q_fpv_openipc-urllc-aio_defconfig#L102
BR2_PACKAGE_DATALINK=y

3.2.2 软件版配置

  • general/package/datalink/files/telemetry#L13-L16
if [ ! -f /usr/bin/telemetry_rx ] && [ ! -f /usr/bin/telemetry_tx ]; thenln -s /usr/bin/wfb_rx /usr/bin/telemetry_rxln -s /usr/bin/wfb_tx /usr/bin/telemetry_tx
fi
  • general/package/datalink/files/telemetry_drone.conf#L15-L20
stream_rx=144
stream_tx=16
link_id=7669206
frame_type=data
port_rx=14551
port_tx=14550
  • general/package/datalink/files/telemetry_gs.conf#L15-L20
stream_rx=16
stream_tx=144
link_id=7669206
frame_type=data
port_rx=14651
port_tx=14650

3.2.3 数据发送 & 接收

-general/package/datalink/files/telemetry

start_drone_telemetry() {if [ "$one_way" = "false" ]; thentelemetry_rx -p "$stream_rx" -u "$port_rx" -K "$keydir/$unit.key" -i "$link_id" "$wlan" > /dev/null &fitelemetry_tx -p "$stream_tx" -u "$port_tx" -K "$keydir/$unit.key" -B "$bandwidth" \-M "$mcs_index" -S "$stbc" -L "$ldpc" -G "$guard_interval" -k "$fec_k" -n "$fec_n" \-T "$pool_timeout" -i "$link_id" -f "$frame_type" "$wlan" > /dev/null &
}start_gs_telemetry() {if [ "$one_way" = "false" ]; thentelemetry_tx -p "$stream_tx" -u "$port_tx" -K "$keydir/$unit.key" -B "$bandwidth" \-M "$mcs_index" -S "$stbc" -L "$ldpc" -G "$guard_interval" -k "$fec_k" -n "$fec_n" \-T "$pool_timeout" -i "$link_id" -f "$frame_type" "$wlan" > /dev/null &fitelemetry_rx -p "$stream_rx" -u "$port_rx" -K "$keydir/$unit.key" -i "$link_id" "$wlan" > /dev/null &
}

3.3 *mavfwd

注:天空端设备软件包。

3.3.1 目标板配置

  • devices/ssc338q_fpv_openipc-urllc-aio/br-ext-chip-sigmastar/configs/ssc338q_fpv_openipc-urllc-aio_defconfig#L105
BR2_PACKAGE_MAVFWD=y

3.3.2 软件版配置

  • general/package/mavfwd/mavfwd.mk#L7-L9
MAVFWD_SITE_METHOD = git
MAVFWD_SITE = https://github.com/openipc/mavfwd
MAVFWD_VERSION = 70da7adbdbe36d371ca849c4a3bc3cadb54498d3

3.3.3 MAVLink数据采集&接收

-general/package/datalink/files/telemetry#L42-L43

			mavfwd --channels "$channels" --master "$serial" --baudrate "$baud" -p 100 -t -a "$aggregate" \--out 127.0.0.1:$port_tx --in 127.0.0.1:$port_rx > /dev/null &

3.4 *mavlink-router

注:地面端设备软件包。

3.4.1 目标板配置

  • br-ext-chip-hisilicon/configs/hi3536dv100_fpv_defconfig#L109
BR2_PACKAGE_MAVLINK_ROUTER=y

3.4.2 软件版配置

  • general/package/mavlink-router/mavlink-router.mk#L7-L9
MAVLINK_ROUTER_SITE_METHOD = git
MAVLINK_ROUTER_SITE = https://github.com/mavlink-router/mavlink-router
MAVLINK_ROUTER_VERSION = 18c06da77563db9ba1b7c4173ff5cae1646b383e
  • general/package/mavlink-router/files/mavlink_drone.conf#L8-L16
[UdpEndpoint telemetry_tx]
Mode = Normal
Address = 127.0.0.1
Port = 14550[UdpEndpoint telemetry_rx]
Mode = Server
Address = 0.0.0.0
Port = 14551
  • general/package/mavlink-router/files/mavlink_gs.conf#L5-L25
[UdpEndpoint external_use]
Mode = Server
Address = 0.0.0.0
Port = 14550[UdpEndpoint vdec]
Mode = Normal
Address = 127.0.0.1
Port = 14750[UdpEndpoint telemetry_tx]
Group = wfb
Mode = Normal
Address = 127.0.0.1
Port = 14650[UdpEndpoint telemetry_rx]
Group = wfb
Mode = Server
Address = 127.0.0.1
Port = 14651

3.4.3 MAVLink数据采集&接收

  • general/package/mavlink-router/files/S97mavlink#L7
			mavlink-routerd &
  • general/package/datalink/files/telemetry#L40
			mavlink-routerd -c /etc/mavlink.conf > /dev/null 2>&1 &

3.5 majestic

3.5.1 目标板配置

  • devices/ssc338q_fpv_openipc-urllc-aio/br-ext-chip-sigmastar/configs/ssc338q_fpv_openipc-urllc-aio_defconfig#L71
BR2_PACKAGE_MAJESTIC=y

3.5.2 软件版配置

请注意,这个代码并非全部开源。

  • general/package/majestic/majestic.mk#L7-L10
MAJESTIC_SITE = https://openipc.s3-eu-west-1.amazonaws.com
MAJESTIC_SOURCE = majestic.$(MAJESTIC_FAMILY).$(MAJESTIC_VARIANT).master.tar.bz2
MAJESTIC_LICENSE = PROPRIETARY
MAJESTIC_LICENSE_FILES = LICENSE
  • devices/ssc338q_fpv_openipc-urllc-aio/br-ext-chip-sigmastar/configs/ssc338q_fpv_openipc-urllc-aio_defconfig#L33-L34
BR2_OPENIPC_SOC_FAMILY="infinity6e"
BR2_OPENIPC_VARIANT="fpv"

3.5.3 摄像视频采集

通过链接下载应用程序:二进制+配置文件

3.6 *vdec-openipc

注:地面端设备软件包。

3.6.1 目标板配置

  • br-ext-chip-hisilicon/configs/hi3536dv100_fpv_defconfig#L105
BR2_PACKAGE_VDEC_OPENIPC=y

3.6.2 软件版配置

  • general/package/vdec-openipc/vdec-openipc.mk#L7-L8
VDEC_OPENIPC_SITE = $(call github,openipc,silicon_research,$(VDEC_OPENIPC_VERSION))
VDEC_OPENIPC_VERSION = HEAD
  • general/package/vdec-openipc/files/vdec.conf
### Port for video rx (default: 5000)port=5600### Mavlink port for telemetry (default: 14750)mavlink_port=14750

3.6.3 视频播放&OSD渲染

  • general/package/vdec-openipc/files/S98vdec#L22
    vdec -p ${port} -d ${format} -c ${codec} -m ${mode} --mavlink-port ${mavlink_port} ${osd_variant} ${extra} > /dev/null 2>&1 &

4. 启动

4.1 数据链路启动

RF链路

  • general/package/datalink/files/S98datalink#L40
wifibroadcast start
  • general/package/wifibroadcast/files/wifibroadcast#L139
telemetry start

LTE链路

  • general/package/datalink/files/S98datalink#L36
telemetry start

4.2 视频链路启动

注:对于这块尚不是很清楚,待详查。

  • general/package/majestic/files/S95majestic#L7-L18
start() {ulimit -c unlimitedecho "/tmp/core.majestic" > /proc/sys/kernel/core_patternecho -n "Starting $DAEMON: "start-stop-daemon -b -m -S -q -p "$PIDFILE" -x "$DAEMON" -- $DAEMON_ARGSif [ $? -eq 0 ]; thenecho "OK"elseecho "FAIL"fi
}

5. 参考资料

【1】OpenIPC开源IPC之工程编译
【2】OpenIPC开源IPC之工程框架
【3】Ardupilot & OpenIPC & 基于WFB-NG构架分析和数据链路思考


http://www.mrgr.cn/news/16946.html

相关文章:

  • 常使用的前端构建优化策略
  • 2024年Linux内核社区关于large folio的关键进展
  • PCL-直通滤波
  • 617. 合并二叉树
  • 【AI 绘画】更快?更省显存?支持 FLUX?使用绘世启动器安装 SD WebUI Forge
  • 【王树森】Few-Shot Learning小样本学习 (1/3): 基本概念(个人向笔记)
  • AutoGen 检索增强生成(RAG)功能解析
  • 拥抱开源拥护国产|暴雨打造最强AI的服务器操作系统!
  • 前端进阶| 深入学习面向对象设计原则
  • Oracle(98)如何启用审计?
  • 结构化数据、半结构化数据、非结构化数据
  • 30Kg载重1小时长续航油电混动无人机技术详解
  • 部署project_exam_system项目——及容器的编排
  • 客户端、APP、Desktop和H5的区别
  • 【深度遍历】【排列组合】【力扣】有重复字符串的排列组合
  • 智慧警用装备管理系统|支持国产化
  • 博客园-awescnb插件-geek皮肤优化-目录优化
  • 网络编程学习:TCP/IP协议
  • 苍穹外卖项目前端DAY01
  • 域渗透应急响应