wfb-ng 开源工程结构&代码框架简明介绍

2023-05-16

wfb-ng 开源工程结构&代码框架简明介绍

  • 1. 获取开源代码
    • 1.1 开源代码版本
    • 1.2 克隆开源代码
  • 2. 了解工程情况
    • 2.1 支持特性&功能
    • 2.2 安装&文档链接
    • 2.3 快速使用指南(树莓派)
      • 2.3.1 天空端命令
      • 2.3.2 地面端命令
      • 2.3.3 RTL8812AU 驱动安装
    • 2.4 详细安装指南(树莓派)
  • 3. Makefile结构
  • 4. 工程目录结构
  • 5. 参考资料

1. 获取开源代码

1.1 开源代码版本

首先,获取代码的步骤很便捷的,直接通过github下载来获取,要注意的是版本号。

注:目前(截止发稿日)wfb-ng相对稳定,提出的问题和新增的功能都不多,代码框架应该改动不会太大。

$ git log -n 1
commit 02942ce0d52150a4ac75a4ed59680ef453042fb9 (HEAD -> master, origin/master, origin/HEAD)
Author: Vasily Evseenko <svpcom@gmail.com>
Date:   Tue Feb 7 21:25:03 2023 +0300

    Update codec settings

1.2 克隆开源代码

然后,要确保系统上已经安装git工具。通过clone命令将代码下载到本地,版本问题请大家自行匹配,这里为了确保一致性,所以将代码版本记录下来了(其实这个对学习来说并不太重要,主要是方法论)。

$ git clone git@github.com:svpcom/wfb-ng.git

2. 了解工程情况

了解工程最简单的方法,就是阅读README。通常github上code页面显示的就是README.md文件,在浏览器上格式更美观(当然vi也是可以的)。
这里摘要部分内容,做个情况了解,为后续研读提供方向。

2.1 支持特性&功能

  • 1:1 map of RTP to IEEE80211 packets for minimum latency (doesn’t serialize to byte steam)
  • Smart FEC support (immediately yeild packet to video decoder if FEC pipeline without gaps)
  • Bidirectional mavlink telemetry. You can use it for mavlink up/down and video down link.
  • IP-over-WFB tunnel support. You can transmit ordinary ip packets over WFB link. Note, don’t use ip tunnel for high-bandwidth transfers like video or mavlink. It use less efficient FEC coding and doesn’t aggregate small packets.
  • Automatic TX diversity (select TX card based on RX RSSI)
  • Stream encryption and authentication (libsodium)
  • Distributed operation. It can gather data from cards on different hosts. So you don’t limited to bandwidth of single USB bus.
  • Aggreagation of mavlink packets. Doesn’t send wifi packet for every mavlink packet.
  • Enhanced OSD for Raspberry PI (consume 10% CPU on PI Zero) or any other system which supports gstreamer (Linux X11, etc). Compatible with any screen resolution. Supports aspect correction for PAL to HD scaling.
  • Provides IPv4 tunnel for generic usage

2.2 安装&文档链接

这里提供了两个文档链接,供读者阅读:

  • PX4-Guide
  • Setup HowTo

2.3 快速使用指南(树莓派)

  1. 通过Release下载(*.img.gz)文件映像
  2. 使用工具(Raspberry Pi Imager/balena/dd命令等)刷写固件镜像到tf卡上
  3. 插入图传使用的WiFi大功率无线网卡
  4. 重启树莓派,并登录系统进行天空端/地面端配置

注1:如果需要备份可采用dd命令sudo dd bs=4M if=/dev/sdb of=/home/daniel/wfb-ng_23.01.001-rpi3-daniel.img。
注2:烧录方式可参考:Raspbian镜像无头烧录

2.3.1 天空端命令

启动天空端wfb_ng

$ sudo systemctl start wifibroadcast@drone

天空端wfb_ng状态查询

$ sudo systemctl status wifibroadcast@drone

天空端wfb_ng日志查询

sudo journalctl -xu wifibroadcast@drone

停止天空端wfb_ng

$ sudo systemctl stop wifibroadcast@drone

视频采集命令(CTRL + C 退出)

$ raspivid -n  -ex fixedfps -w 1280 -h 720 -b 4000000 -fps 30 -t 0 -o - \
				| gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=35 ! udpsink sync=false host=127.0.0.1 port=5602

or

$ gst-launch-1.0 v4l2src do-timestamp=true io-mode=mmap device=/dev/video0 \
				extra-controls="controls,image_stabilization=1,h264_profile=4,h264_i_frame_period=60,h264_level=11,power_line_frequency=1,exposure_metering_mong=1,exposure_dynamic_framerate=0,scene_mode=0,video_bitrate_mode=1,video_bitrate=2000000,repeat_sequence_header=1" \
				! video/x-h264,profile=high,width=1280,height=720,framerate=30/1,stream-format=byte-stream \
				! h264parse disable-passthrough=true ! rtph264pay config-interval=1 pt=96 mtu=1400 aggregate-mode=zero-latency ! udpsink host=127.0.0.1 port=5602 sync=false

功能使能/去使能命令(使能后,进程随系统自启动)

$ sudo systemctl enable wifibroadcast@drone
$ sudo systemctl disable wifibroadcast@drone
$ sudo systemctl enable fpv-camera
$ sudo systemctl disable fpv-camera

2.3.2 地面端命令

启动地面端wfb_ng

$ sudo systemctl start wifibroadcast@gs

地面端wfb_ng状态查询

$ sudo systemctl stop wifibroadcast@gs

地面端wfb_ng日志查询

sudo journalctl -xu wifibroadcast@gs

停止地面端wfb_ng

$ sudo systemctl stop wifibroadcast@gs

地面端维测命令(CTRL + C 退出)

$ wfb-cli gs

视频播放命令(CTRL + C 退出)

$ gst-launch-1.0 udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
               ! rtph264depay ! avdec_h264 ! clockoverlay valignment=bottom ! autovideosink fps-update-interval=1000 sync=false

or

$ gst-launch-1.0 udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
               ! rtph264depay ! avdec_h264 ! clockoverlay valignment=bottom ! xvimagesink sync=false

功能使能/去使能命令(使能后,进程随系统自启动)

$ sudo systemctl enable wifibroadcast@gs
$ sudo systemctl disable wifibroadcast@gs
$ sudo systemctl enable fpv-video
$ sudo systemctl disable fpv-video
$ sudo systemctl enable osd
$ sudo systemctl disable osd

2.3.3 RTL8812AU 驱动安装

安装dkms

$ sudo apt-get install dkms

获取工程

$ git clone -b v5.2.20 https://github.com/svpcom/rtl8812au.git

一键安装

$ cd rtl8812au/
$ sudo ./dkms-install.sh

or
$ cd rtl8812au && make && sudo make install

2.4 详细安装指南(树莓派)

请参考:

  • wfb-ng Release 23.01镜像无头烧录&配置(1)
  • wfb-ng Release 23.01镜像无头烧录&配置(2)

3. Makefile结构

wfb-ng采用了Unix-style工程结构,也是笔者非常喜欢的一种软件工程组织方式。

Makefile
 ├──> C代码
 │   ├──> wfb_keygen
 │   ├──> wfb_rx
 │   ├──> wfb_tx
 │   └──> all_bin: wfb_rx wfb_tx wfb_keygen
 ├──> python代码
 │   ├──> wfb-cli 
 │   ├──> wfb-test-latency
 │   └──> wfb-server
 └──> 工程目标
     ├──> env //python环境
     ├──> rpm:  all_bin env //rpm包
     ├──> deb:  all_bin env //deb包
     ├──> bdist: all_bin
     ├──> clean //工程清理
     ├──> test //测试
     ├──> gs.key //生成drone.key & gs.key
     └──> all: all_bin gs.key test

4. 工程目录结构

  • wfb_ng下主要是python代码,实现wfb-cli/wfb-test-latency/wfb-server
  • src下主要是C代码,实现wfb_keygen/wfb_rx/wfb_tx
  • scripts下主要是程序在linux系统上所用到的脚本和配置文件
  • doc下主要是一些技术资料
.
├── doc
│   ├── Analysis of Injection Capabilities and Media Access of IEEE 802.11 Hardware in Monitor Mode.pdf
│   ├── enhanced_setup.dot
│   ├── logo-big.png
│   ├── logo-small.png
│   ├── Makefile
│   ├── mimo_for_dummies.pdf
│   └── wfb-ng-std-draft.md
├── LICENSE.txt
├── Makefile
├── README.md
├── scripts
│   ├── 98-wifibroadcast.conf
│   ├── default
│   │   └── wifibroadcast
│   ├── install_gs.sh
│   ├── rx_standalone.sh
│   ├── sample_voice_radio.sh
│   ├── systemd
│   │   ├── fpv-camera.service
│   │   ├── fpv-video.service
│   │   └── osd.service
│   ├── tx_standalone.sh
│   ├── video_test_sink.sh
│   ├── video_test_src.sh
│   ├── wifibroadcast
│   ├── wifibroadcast.service
│   └── wifibroadcast@.service
├── setup.py
├── src
│   ├── fec.c
│   ├── fec.h
│   ├── ieee80211_radiotap.h
│   ├── keygen.c
│   ├── radiotap.c
│   ├── rx.cpp
│   ├── rx.hpp
│   ├── tx.cpp
│   ├── tx.hpp
│   ├── wifibroadcast.cpp
│   └── wifibroadcast.hpp
├── stdeb.cfg
├── version.py
└── wfb_ng
    ├── cli.py
    ├── common.py
    ├── conf
    │   ├── __init__.py
    │   ├── local.cfg
    │   └── master.cfg
    ├── config_parser.py
    ├── __init__.py
    ├── latency_test.py
    ├── mavlink_protocol.py
    ├── mavlink.py
    ├── proxy.py
    ├── server.py
    ├── tests
    │   ├── __init__.py
    │   ├── test_proxy.py
    │   ├── test_tuntap.py
    │   └── test_txrx.py
    └── tuntap.py

8 directories, 55 files

5. 参考资料

【1】Raspbian镜像无头烧录
【2】wfb-ng Release 23.01镜像无头烧录&配置(1)
【3】wfb-ng Release 23.01镜像无头烧录&配置(2)
【4】FPV Camera(RPI3+V2.1) | wfb_ng Release 23.01 | Ubuntu 20.04 xfce软解测试
【5】FPV Camera(RPI3+V2.1) | wfb_ng Release 23.01 | ubuntu 20.04 gnome软解测试

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wfb-ng 开源工程结构&代码框架简明介绍 的相关文章

  • BetaFlight深入传感设计之十:传感器物理特性方向对齐

    BetaFlight深入传感设计之十 xff1a 传感器物理特性方向对齐 1 对齐定义2 常见对齐方式3 自定义对齐方式4 总结5 参考资料6 补充 xff1a gyro 43 mag对齐方式 AHRS Attitude and Headi
  • ArduPilot飞控AOCODARC-H7DUAL固件编译

    ArduPilot飞控AOCODARC H743DUAL固件编译 1 编译目标 xff08 AOCODARC H743DUAL xff09 2 硬件支持包 xff08 APM AOCODARC H743DUAL xff09 3 编译步骤3
  • 四轴FPV手动训练进阶步骤

    四轴FPV手动训练进阶步骤 1 目的2 训练2 1 基本操作训练2 1 1 滞空训练2 1 2 基本动作2 1 3 位置保持 2 2 基本控制训练2 2 1 转弯 Turn 2 2 2 翻滚 Roll 2 2 3 翻转 Flips 2 3
  • 数据库binlog(二进制日志binary log)

    二进制日志中存储的内容称之为事件 xff0c 每一个数据库更新操作 Insert Update Delete xff0c 不包括Select 等都对应一个事件 mysql binlog基本原理 简书 jianshu com https ww
  • 四轴异常炸机分析讨论集锦

    四轴异常炸机分析讨论集锦 0 异常 amp 炸机 汇总目的1 AT9SPro 43 R12DSM 300米信号丢失炸机2 PID参数异常 起飞 Takeoff Runaway 炸机3 接收机信号干扰 炸机4 GPS救援 RC控制信号丢失炸机
  • Github工程中的Markdown语言应用

    Github工程中的Markdown语言应用 1 介绍2 工具2 1 下载链接2 2 编辑界面2 3 插件安装 3 基本操作3 1 标题编写3 2 正文编写3 3 代码块编写3 4 加粗倾斜3 5 有序列表3 6 无序列表3 7 行内代码编
  • iNavFlight之MSP DJI协议分析

    iNavFlight之MSP DJI协议分析 1 iNav串行口通信1 1 iNav 串口任务1 2 调用逻辑 2 iNav串行抽象2 1 框架代码2 2 MSP DJI 协议处理 3 DJI协议相关实现3 1 DJI串口初始化3 2 DJ
  • iNavFlight之MSP DJI协议天空端请求报文

    iNavFlight之MSP DJI协议天空端请求报文 1 报文格式 请求 2 报文标志 flag 3 报文命令 cmd 4 参考资料 MSP DJI协议是用于DJI天空端与飞控端之间的通信协议 xff0c 其工作模式符合C S经典设计 这
  • iNavFlight之MSP DJI协议飞控端请求应答

    iNavFlight之MSP DJI协议飞控端请求应答 1 报文格式2 报文标志 flag 3 报文命令 cmd 4 请求应答 amp 反馈报文4 1 DJI MSP API VERSION4 2 DJI MSP FC VARIANT4 3
  • 大疆Tello UDP控制协议接口

    大疆Tello UDP控制协议接口 1 设计架构2 UDP报文格式2 1 控制报文2 2 查询报文2 3 状态报文 3 命令集3 1 控制报文 控制命令3 2 控制报文 设置命令3 3 查询报文 读取命令 4 状态报文 这里介绍了大疆Tel
  • 蓝牙无线自制串口模块连接穿越机配置工具

    蓝牙无线自制串口模块连接穿越机配置工具 1 目的2 验证环境3 BLE SPP验证4 BT SPP验证5 参考资料6 补充资料 windows10配置全过程截图6 1 添加设备 搜索蓝牙串口设备6 2 连接 选中SnapAirUnit设备6
  • 传感模块:MATEKSYS Optical Flow & LIDAR 3901-L0X

    传感模块 xff1a MATEKSYS Optical Flow amp LIDAR 3901 L0X 1 模块介绍2 规格参数3 使用方法Step1 接线方式Step2 安装方式Step3 使用范围 4 存在问题 思考 4 1 MATEK
  • iNavFlight之MSP v2 Sensor报文格式

    iNavFlight之MSP v2 Sensor报文格式 1 MSP v2传感报文介绍2 MSP v2协议格式3 MSP v2传感代码流程4 MSP v2 传感器4 1 光流传感报文 MSP2 SENSOR RANGEFINDER4 2 测
  • 自制肥鲨HDO2电源降压延长线,支持3S~6S动力电池

    自制肥鲨HDO2电源降压延长线 xff0c 支持3S 6S动力电池 1 问题源由2 破题思路2 1 10元大钞搞定2 2 两个毛爷爷搞定 3 解决方案4 最终延长线产出4 1 裸照4 2 成品 5 花絮6 参考资料 1 问题源由 源由 xf
  • java中for、foreach、stream性能比较

    在开发中循环遍历一个数组经常会用到 xff0c jdk8推出了一些新特性 xff0c 对循环做了比较 xff0c 通过代码亲测 xff0c 记录一下 xff01 1 for循环 public static void main String
  • 自制肥鲨HDO2电源升压延长线

    自制肥鲨HDO2电源升压延长线 1 问题源由2 解决方案3 材料准备4 最终延长线产出4 1 裸照4 2 成品 5 参考资料 1 问题源由 之前我们介绍了 自制肥鲨HDO2电源降压延长线 xff0c 支持3S 6S动力电池 xff0c 主要
  • iNavFlight之RC遥控MSP协议

    iNavFlight之RC遥控MSP协议 1 RC摇杆MSP协议2 地面站配置 amp MSP遥控器2 1 iNav地面站 配置2 2 iNav地面站 MSP遥控器 3 RC摇杆总体逻辑框架3 1 摇杆信息获取3 2 摇杆信息处理3 3 摇
  • iNavFlight之RC遥控CRSF协议

    iNavFlight之RC遥控CRSF协议 1 遥控器电传框架设计1 1 场景分析1 2 逻辑框架1 2 1 电传信息获取1 2 2 电传信息处理1 2 3 电传初始化 1 3 模块化设计 2 CRSF电传报文2 1 CRSF电传报文格式2
  • iNavFlight之电传MAVLink协议

    iNavFlight之电传MAVLink协议 1 业务逻辑框架2 MAVLink电传报文2 1 MAVLink电传报文格式2 2 iNav支持地面站报文 接收 2 3 iNav支持飞控报文 发送 3 MAVLink报文处理4 参考资料 本章
  • PX4模块设计之四十七:mavlink模块

    PX4模块设计之四十七 xff1a mavlink模块 1 mavlink模块简介2 模块入口函数mavlink main3 mavlink模块重要函数3 1 Mavlink start3 2 Mavlink task main3 3 Ma

随机推荐

  • SVN工程转Git工程&Github托管

    SVN工程转Git工程 amp Github托管 1 介绍2 autoAudioTest之SVN转Github步骤Step 1 工作环境 ubuntu Step 2 安装升级必要软件Step 3 转换脚本Step 4 检查软件运行环境Ste
  • iNav飞控AOCODARC-F7MINI固件编译

    iNav飞控AOCODARC F7MINI固件编译 1 编译目标 xff08 AOCODARC F7MINI xff09 2 编译步骤Step 1 软件配置环境准备Step 2 获取开源代码Step 3 构建命令介绍Step 4 厂家目标板
  • BetaFlight飞控AOCODARC-F7MINI固件编译

    BetaFlight飞控AOCODARC F7MINI固件编译 1 编译目标 xff08 AOCODARC F7MINI xff09 2 编译步骤Step 1 软件配置环境准备Step 2 获取开源代码Step 3 构建命令介绍Step 4
  • Google AIY Vision Kit安装及国内配置

    Google AIY Vision Kit安装及国内配置 1 AIY Vision Kit组装环节Step 1 xff1a 收集其他附件选择1 xff1a 使用AIY项目应用程序选择2 xff1a 使用显示器 鼠标和键盘 Step 2 xf
  • WiFi monitor模式的配置和运行检查(Ubuntu系统)

    WiFi monitor模式的配置和运行检查 1 WiFi monitor模式介绍2 WiFi monitor模式查看Step1 xff1a 确保计算机上有安装硬件WiFi无线网卡Step2 xff1a 安装必要的工具Step 3 xff1
  • github上的源码编译成.hpi插件

    目录 1 xff0c vim安装 安装 Maven 编译源码生成 hpi 2 xff0c windos 安装idea 安装maven idea设置maven 将github上的源码拉进并编译 成功 近期做jenkins监控github xf
  • BetaFlight统一硬件资源简单配置修改

    BetaFlight统一硬件资源简单配置修改 1 源由2 资源配置注意事项3 资源配置文件修改验证步骤Step 1 xff1a 确认硬件修改内容Step 2 xff1a 资源配置文件修改Step 3 xff1a 验证配置文件Step 4 x
  • SSH远程登录RaspberryPi命令行响应缓慢问题

    SSH远程登录RaspberryPi命令行响应缓慢问题 1 问题2 分析3 解决3 1 去掉PAM部分鉴权模块3 2 去掉sshd的DNS设置3 3 无线WiFi信号优化方法一 xff1a ifconfig操作方法二 xff1a 内核自动检
  • ESP32-FPV-Camera介绍和使用

    ESP32 FPV Camera介绍和使用 1 编译目标2 编译步骤Step 1 软件配置环境准备Step 2 获取开源代码Step 3 2 4G WiFi频段选择Step 4 要确保2 4G WiFi网卡处于Monitor状态Step 5
  • DIY-BETAFPV和DIY(ESP-01F+E19-900M20S2模块)915MHz信号测试对比

    DIY BETAFPV和DIY xff08 ESP 01F 43 E19 900M20S2模块 xff09 915MHz信号测试对比 1 前提条件2 实测效果2 1 起点附近 xff08 距离3m左右 xff09 2 2 30m米距离 xf
  • Raspbian镜像无头烧录

    Raspbian镜像无头烧录 1 源由2 需求3 分析4 步骤4 1 删除tf卡分区内容4 2 balena烧录镜像4 3 配置USB直接登录4 4 配置WiFi 2 4G网络登录4 5 修改登录账号密码4 6 数据同步和弹出tf卡 5 登
  • wfb-ng Release 23.01镜像无头烧录&配置(1)

    64 TOC wfb ng Release 23 01镜像无头烧录 amp 配置 1 最近打算搭一个数字图传系统 xff0c 并进行一些简单测试 xff0c 在刚开始烧录阶段就遇到各种问题 当然 xff0c 主要的问题就是不熟悉 xff0c
  • wfb-ng 锁定WiFi接口

    wfb ng 锁定WiFi接口 1 源由2 需求3 分析4 步骤4 1 确认网卡MAC地址4 2 修改udev配置文件4 3 配置重载 amp 重启4 4 确认逻辑网卡接口4 6 修改wfb ng逻辑WiFi通信接口 5 参考资料6 补充资
  • apt-get通过代理更新系统

    apt get通过代理更新系统 1 源由2 需求3 分析4 步骤4 1 安装CCProxy4 2 配置CCProxy4 3 apt get更新4 4 apt get升级4 5 apt get安装 5 补充资料 命令行设置代理6 参考资料 1
  • wfb-ng Release 23.01镜像无头烧录&配置(2)

    64 TOC wfb ng Release 23 01镜像无头烧录 amp 配置 2 1 简介 在wfb ng Release 23 01镜像无头烧录 amp 配置 1 的基础上 xff0c 整理天空端step by step配置过程 2
  • FPV Camera(RPI3+V2.1) | wfb_ng Release 23.01 | ubuntu20.04 gnome软解测试

    64 TOC FPV Camera RPI3 43 V2 1 wfb ng Release 23 01 ubuntu20 04 gnome软解测试 1 简介 最近搭建了基于树莓派和wfb ng通信的FPV摄像头方案 xff0c 该方案能解决
  • 【机器学习】pd.get_dummies()

    get dummies 是利用pandas实现one hot encode的方式 机器学习之One Hot Encoding详解 简书 jianshu com https www jianshu com p cb344e1c860a one
  • FPV Camera(RPI3+V2.1) | wfb_ng Release 23.01 | Ubuntu 20.04 xfce软解测试

    64 TOC FPV Camera RPI3 43 V2 1 wfb ng Release 23 01 Ubuntu 20 04 xfce软解测试 1 简介 与其他Linux桌面系统相比 xff0c Xfce消耗更少的CPU xff0c 仅
  • Mobility Radeon HD 4530 @ubuntu20.04 显卡驱动不支持[GPU无法使用]

    Mobility Radeon HD 4530 64 ubuntu20 04 显卡驱动不支持 GPU无法使用 1 源由2 显卡型号3 驱动安装3 1 问题1 xff1a 内核version h文件缺失3 2 问题2 xff1a 驱动编译失败
  • wfb-ng 开源工程结构&代码框架简明介绍

    wfb ng 开源工程结构 amp 代码框架简明介绍 1 获取开源代码1 1 开源代码版本1 2 克隆开源代码 2 了解工程情况2 1 支持特性 amp 功能2 2 安装 amp 文档链接2 3 快速使用指南 树莓派 2 3 1 天空端命令