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

Open FPV VTX开源代码之树莓派3B+ Bookworm部署更新

Open FPV VTX开源代码之树莓派3B+ Bookworm部署更新

  • 1. 源由
  • 2. 状态
  • 3. 更新
  • 4. OpenIPC修改
    • 4.1 原始`telemetry`脚本
    • 4.2 脚本`telemetry`差异

1. 源由

现在OpenIPC的msposd做了部分更新:

  • 【支持】betaflight/inav/ardupilot图标库(支持仅支持其中一个)
  • 【支持】地面站OSD/嵌入式OSD功能(前期停留在研发测试阶段)
  • 【问题】目前启动脚本/端口规划方面尚未定型

本地之前的一套树莓派 Bookworm Rover需要更新下配置脚本。

2. 状态

【1】wfb-ng 开源代码之树莓派3B+ Bookworm无线配置
【2】msposd 开源代码之树莓派3B+ Bookworm部署
【3】libcamera_mon 开源代码之树莓派3B+ Bookworm部署

3. 更新

虽然从脚本上看,目前OpenIPC并未支持Ground Station OSD功能。

  • [Feature] Support msposd ground station OSD

但是相信会很快支持,为此 jetson-fpv 先行切换到MAVLink端口14551作为地面站OSD的UDP接收端口。

$ diff -uN fpv-drone.sh /usr/local/bin/fpvdrone/fpv-drone.sh
--- fpv-drone.sh        2025-01-19 17:42:24.987273259 +0800
+++ /usr/local/bin/fpvdrone/fpv-drone.sh        2025-01-19 17:26:43.352025597 +0800
@@ -6,8 +6,8 @@

 # Start the wfb_tx process
 /usr/bin/wfb_tx \
-  -p 17 \
-  -u 14560 \
+  -p 16 \
+  -u 14551 \
   -K /etc/drone.key \
   -B 20 \
   -M 1 \
@@ -30,6 +30,7 @@

 /usr/local/bin/fpvdrone/libcamera_mon &

+sleep 5
 # Start libcamera-vid and pipe its output to GStreamer while logging to /tmp/libcamera/logs
 /usr/bin/libcamera-vid \
   --verbose \
@@ -50,7 +51,7 @@
 /usr/local/bin/fpvdrone/msposd \
   --master /dev/ttyUSB0 \
   --baudrate 115200 \
-  --out 127.0.0.1:14560 \
+  --out 127.0.0.1:14551 \
   --matrix 11 \
   --ahi 1 \
   -r 30 \

4. OpenIPC修改

  • 增加UDP 14551端口报文发送
  • 调整地面站OSD配置的msposd命令

4.1 原始telemetry脚本

root@openipc-ssc338q:~# cat telemetry.bak
#!/bin/sh
fw=$(grep "BUILD_OPTION" "/etc/os-release" | cut -d= -f2)
keydir=/etc

if [ -e /etc/datalink.conf ]; then
        . /etc/datalink.conf
fi

if [ -e /etc/telemetry.conf ]; then
        . /etc/telemetry.conf
fi

if [ ! -e /usr/bin/telemetry_rx ] || [ ! -e /usr/bin/telemetry_tx ]; then
        ln -fs /usr/bin/wfb_rx /usr/bin/telemetry_rx
        ln -fs /usr/bin/wfb_tx /usr/bin/telemetry_tx
fi

start_drone_telemetry() {
        if [ "$router" -lt 2  ]; then
                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 &
        fi
}

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 &
}

case "$1" in
        start)
                echo "Loading MAVLink telemetry service..."
                if [ "$router" -eq 1 ] || [ "$fw" = "lte" ]; then
                        mavlink-routerd -c /etc/mavlink.conf > /dev/null 2>&1 &
                else
                        if [ "$router" -eq 2  ]; then
                                msposd --channels "$channels" --master "$serial" --baudrate "$baud"  \
                                        --out 127.0.0.1:$(($port_tx + 1)) -osd -r "$fps" --ahi "$ahi" > /dev/null &
                        else
                                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 &
                        fi
                fi

                if [ "$fw" = "fpv" ] || [ "$fw" = "venc" ]; then
                        start_${unit}_telemetry
                fi
                ;;

        stop)
                echo "Stopping telemetry services..."
                killall -q telemetry_rx
                killall -q telemetry_tx
                killall -q mavlink-routerd
                killall -q mavfwd
                killall -q msposd
                ;;

        *)
                echo "Usage: $0 {start|stop}"
                exit 1
                ;;
esac

4.2 脚本telemetry差异

root@openipc-ssc338q:~# diff -uN telemetry.bak  /usr/bin/telemetry
--- telemetry.bak
+++ /usr/bin/telemetry
@@ -23,6 +23,10 @@
                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 &
+       else
+               telemetry_tx -p "$stream_tx" -u "$(($port_tx + 1))" -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
 }

@@ -43,7 +47,7 @@
                else
                        if [ "$router" -eq 2  ]; then
                                msposd --channels "$channels" --master "$serial" --baudrate "$baud"  \
-                                       --out 127.0.0.1:$(($port_tx + 1)) -osd -r "$fps" --ahi "$ahi" > /dev/null &
+                                       --out 127.0.0.1:$(($port_tx + 1)) -r "$fps" --ahi "$ahi" > /dev/null &
                        else
                                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 &


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

相关文章:

  • 【深度学习入门】深度学习知识点总结
  • 【mptcp】ubuntu18.04和MT7981搭建mptcp测试环境操作说明
  • Linux(LAMP)
  • Flutter:自定义Tab切换,订单列表页tab,tab吸顶
  • 软件测试入门—用例设计中的场景图和状态迁移图
  • Redis支持数据类型详解
  • vs2022配置qt5.9.9开发环境jom和rc问题
  • C语言基础------练习2
  • [实现Rpc] 项目设计 | 服务端模块划分 | rpc | topic | server
  • 【分布式知识】Spring Cloud Gateway实现跨集群应用访问
  • 算法 | 递归与递推
  • 大语言模型LMM学习路线—从入门到进阶
  • [OpenGL]实现屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO)
  • 大一计算机的自学总结:随机快速排序及随机快速算法
  • 学习一下强化学习
  • C语言之整数转换英文表示
  • 机器学习(6):K 近邻算法
  • VirtualBox can‘t enable the AMD-V extension
  • 扬帆数据结构算法之雅舟航程,漫步C++幽谷——LeetCode刷题之移除链表元素、反转链表、找中间节点、合并有序链表、链表的回文结构
  • 剑指Offer|LCR 040.最大矩形
  • Solidity06 Solidity变量数据存储和作用域
  • 安装centos7之后问题解决
  • 根除埃博拉病毒(2015MCM美赛A)
  • 嵌入式入门(一)-STM32CubeMX
  • c++中的链表list
  • 【Android】创建基类BaseActivity和BaseFragment