OpenIPC FPV设备,在软件层面,其体现功能的重要软件包的梳理,有助于更好的理解工作原理。
从软件部署的思路去考虑,我们将设备的软件大块的进行简单切割:
前面《OpenIPC开源IPC之工程框架》已经整体上介绍上面四大块内容整合工具Buildroot
。
本章将重点放在Application
上,期望通过梳理,将天空端和地面端的具体功能实现与源代码一一对应,以便更好的去维护和开发后续功能。
首先,从功能颗粒度的角度进行基本分析。
摄像视频采集 --> 视频数据发送 --> 视频数据接收 --> 摄像视频播放
MAVLink数据采集 --> MAVLink数据发送 --> MAVLink数据接收 --> OSD图层渲染
通过功能角度和数据角度分析,寻找对应软件包的方式关联的脚本或者代码证据,将整个流程串联起来。
BR2_PACKAGE_WIFIBROADCAST=y
WIFIBROADCAST_VERSION = 24.08
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 &
}
BR2_PACKAGE_DATALINK=y
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
stream_rx=144
stream_tx=16
link_id=7669206
frame_type=data
port_rx=14551
port_tx=14550
stream_rx=16
stream_tx=144
link_id=7669206
frame_type=data
port_rx=14651
port_tx=14650
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 &
}
注:天空端设备软件包。
BR2_PACKAGE_MAVFWD=y
MAVFWD_SITE_METHOD = git
MAVFWD_SITE = https://github.com/openipc/mavfwd
MAVFWD_VERSION = 70da7adbdbe36d371ca849c4a3bc3cadb54498d3
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 &
注:地面端设备软件包。
BR2_PACKAGE_MAVLINK_ROUTER=y
MAVLINK_ROUTER_SITE_METHOD = git
MAVLINK_ROUTER_SITE = https://github.com/mavlink-router/mavlink-router
MAVLINK_ROUTER_VERSION = 18c06da77563db9ba1b7c4173ff5cae1646b383e
[UdpEndpoint telemetry_tx]
Mode = Normal
Address = 127.0.0.1
Port = 14550
[UdpEndpoint telemetry_rx]
Mode = Server
Address = 0.0.0.0
Port = 14551
[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
mavlink-routerd &
mavlink-routerd -c /etc/mavlink.conf > /dev/null 2>&1 &
BR2_PACKAGE_MAJESTIC=y
请注意,这个代码并非全部开源。
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
BR2_OPENIPC_SOC_FAMILY="infinity6e"
BR2_OPENIPC_VARIANT="fpv"
通过链接下载应用程序:二进制+配置文件
注:地面端设备软件包。
BR2_PACKAGE_VDEC_OPENIPC=y
VDEC_OPENIPC_SITE = $(call github,openipc,silicon_research,$(VDEC_OPENIPC_VERSION))
VDEC_OPENIPC_VERSION = HEAD
### Port for video rx (default: 5000)
port=5600
### Mavlink port for telemetry (default: 14750)
mavlink_port=14750
vdec -p ${port} -d ${format} -c ${codec} -m ${mode} --mavlink-port ${mavlink_port} ${osd_variant} ${extra} > /dev/null 2>&1 &
wifibroadcast start
telemetry start
telemetry start
注:对于这块尚不是很清楚,待详查。
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
}
【1】OpenIPC开源FPV之工程编译
【2】OpenIPC开源FPV之工程框架
【3】Ardupilot & OpenIPC & 基于WFB-NG构架分析和数据链路思考