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

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 ]; then
	ln -s /usr/bin/wfb_rx /usr/bin/telemetry_rx
	ln -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" ]; then
		telemetry_rx -p "$stream_rx" -u "$port_rx" -K "$keydir/$unit.key" -i "$link_id" "$wlan" > /dev/null &
	fi
	telemetry_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" ]; then
		telemetry_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 &
	fi
	telemetry_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 unlimited
	echo "/tmp/core.majestic" > /proc/sys/kernel/core_pattern


	echo -n "Starting $DAEMON: "
	start-stop-daemon -b -m -S -q -p "$PIDFILE" -x "$DAEMON" -- $DAEMON_ARGS
	if [ $? -eq 0 ]; then
		echo "OK"
	else
		echo "FAIL"
	fi
}

5. 参考资料

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


http://www.kler.cn/a/291637.html

相关文章:

  • 数据库基本概念学习笔记
  • WebSocket实战,后台修改订单状态,前台实现数据变更,提供前端和后端多种语言
  • jmeter常用配置元件介绍总结之配置元件
  • 《基于 PySpark 的电影推荐系统分析及问题解决》
  • Quartus+Nios II for eclipse问题合集
  • 【算法】【优选算法】前缀和(下)
  • Redis八种数据结构简介
  • pytorch 自定义Dataset类
  • CAS单点登录说明文档
  • EdgeGallery:聚焦 5 大行业场景,MEC 开源平台将 5G 能力拓展到边缘_边缘mec平台
  • Redis 讲解运行模式:单机、主从、哨兵、集群使用场景和区别
  • OpenCV 100道面试题及参考答案(7万字长文)
  • 第4章 汇编语言和汇编软件
  • 【C++】static作用总结
  • 【ORACLE】独有的函数
  • 数据结构代码集训day13(适合考研、自学、期末和专升本)
  • 华为认证是什么?HCIA/HCIP/HCIE是什么?
  • Java8对接三方流式接口,并实时输出(GPT)
  • 【数据库】Oracle和Mysql的区别
  • 多媒体应用设计师需要掌握多种软件
  • 动态化-鸿蒙跨端方案介绍
  • C++day6
  • MySQL5.7.36之主从复制增强半同步复制-centos7
  • Linux下数据库相关知识点及SQLite3相关知识,和callback回调函数
  • 【区块链 + 供应链】长虹生产物料质量信息管理系统 | FISCO BCOS应用案例
  • 初始QT!