开源飞控初探:地面站和SDK
Posted hursing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源飞控初探:地面站和SDK相关的知识,希望对你有一定的参考价值。
按照原意,不会带上天,在地面上能控制飞机的系统,都叫地面站,包括PC软件、手机App等。地面站可通过串口、TCP、UDP等多种连接,以MAVLink数据协议向飞控发命令。
载人飞机上的触控屏也会集成SDK具有控制功能,这是特例,在飞控端来看触控屏仍是一种“地面站”。
MissionPlanner
仅支持Windows。
官网地址:https://ardupilot.org/planner/
源码地址:https://github.com/ArduPilot/MissionPlanner/
编译
安装Visual Studio 2022 社区版。安装过程中,选择组件时,点击更多,导入配置"vs2022.vsconfig" (从https://raw.githubusercontent.com/ArduPilot/MissionPlanner/master/vs2022.vsconfig下载)。
clone仓库后,
git submodule update --init --recursive
用VS打开项目工程,直接编译即可。
如果报错某个类在net461找不到,可以修改对应工程的目标target。ExtLibs/BSE.Windows.Forms/BSE.Windows.Forms.csproj和ExtLibs/BaseClasses/BaseClasses.csproj,net461;netstandard2.0改为netstandard2.0
编译release版,debug版不通过。
使用说明
请参考百度出来的中文文章。MissionPlanner使用说明(持续更新) - 怒飞垂云 | 无人机知识库
源码分析
没有官方的说明文档。组织得不算好,暂略。
QGroundControl
跨所有平台。
官网地址:http://qgroundcontrol.com/
源码仓库地址:https://github.com/mavlink/qgroundcontrol。一个仓库可编译出所有平台的包。
开发者帮助文档(中文):https://dev.qgroundcontrol.com/master/zh/
安装包下载地址:https://github.com/mavlink/qgroundcontrol/releases
用户帮助文档:https://docs.qgroundcontrol.com/master/en/
文档非常完善,没必要搬运,请直接看官方信息。基于Qt开发,工程架构非常清晰。
Pixhawk
产品列表:https://pixhawk.org/products/
硬件标准开源地址:https://github.com/pixhawk/Pixhawk-Standards
硬件介绍请参考:Pixhawk系统架构介绍_dayL_W的博客-CSDN博客_pixhawk
PX4
官网地址:https://px4.io/
源码仓库地址:https://github.com/PX4/PX4-Autopilot
开发者指南(中文):https://docs.px4.io/master/zh/development/development.html
用户指南(中文):https://docs.px4.io/master/zh/
完档很完善,没必要搬运了。
pymavlink
MAVLink基础库的python生成脚本项目,本身也是一个工具库,可以用pip install pymavlink安装,支持python3.7或以下。提供了一些工具类,可以在python环境收发解析MAVLink消息。请参考 https://mavlink.io/en/mavgen_python/
Telemetry Log(.tlog)
地面站和SDK都会记录从连接上飞控起收发MAVLink消息的日志,文件后缀名为.tlog。每次连接上就有一个文件,文件名是时间。
用Mission Planner可以把tlog转成txt或csv。下面是一段txt的示例,每行就是一条MAVLink消息,跟帧格式是对应的。请参考Serialization · MAVLink Developer Guide
2022/6/6 9:44:44 FD 5 0 0 0 0 0 0 mavlink_heartbeat_t custom_mode 0 type 6 autopilot 0 base_mode 0 system_status 0 mavlink_version 0 sig Len 17 crc16 58784
2022/6/6 9:44:44 FD 1C 0 0 FE 22 1 1E mavlink_attitude_t time_boot_ms 3759481 roll 0.002049405 pitch 0.00155601 yaw -1.098183 rollspeed 0.0002265193 pitchspeed 0.0003532104 yawspeed 0.0008397771 sig Len 40 crc16 52130
也可以用下面自己写的脚本,基于pymavlink开发。
#!/usr/bin/env python
from pymavlink import mavutil
import time
import sys
raw_path=sys.argv[1]
logfile = mavutil.mavlogfile(raw_path)
content = "time,vesion,len,seq,sid,cid,msg,field1,field2,field3,field4,field5,field6,field7,field8,field9,field10\\n"
count = 0
while True:
msg = logfile.recv_msg()
count += 1
if count == 70:
pass
if msg == None:
break
if hasattr(msg, "reason") and msg.reason == "Bad prefix":
continue
num_time = msg._timestamp
frame_time = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(num_time))
frame_time += ".0:03d".format(int(num_time * 1000 % 1000))
version = msg.get_msgbuf()[0]
if version == 254:
mavver = "v1"
elif version == 253:
mavver = "v2"
else:
continue
header = msg.get_header()
# print(frame_time, mavver, "," + str(header.mlen), "seq=" + str(msg.get_seq()),"sid=" + str(msg.get_srcSystem()), "cid=" + str(msg.get_srcComponent()))
if msg.get_srcSystem() == 0 or msg.get_srcComponent() == 0:
continue
content += frame_time + "," + mavver + "," + str(header.mlen) + "," + str(msg.get_seq()) + "," + str(msg.get_srcSystem()) + "," + str(msg.get_srcComponent())
for (k,v) in msg.to_dict().items():
if k == "mavpackettype":
content += "," + str(msg.get_msgId()) + "/" + v
else:
content += "," + k + "="
if k == "command":
try:
content += str(v) + "/" + mavutil.mavlink.enums['MAV_CMD'][v].name
except:
content += str(v)
else:
content += str(v)
content += "\\n"
logfile.close()
filepath = raw_path[:-4] + "csv"
csv = open(filepath, "w")
csv.write(content)
csv.close()
需要安装python3.7以及pip install pymavlink。给脚本传入tlog的路径即会在tlog所在目录生成csv文件。
android DroneKit
DroneKit-Android是3DR公司为Android应用程序开发的地面站开源SDK,支持控制ArduPilot的所有车机类型。因为基于MAVLink,所以也兼容应用了MAVLink的所有飞行器。
源码仓库地址:https://github.com/dronekit/dronekit-android。
2017年已停止更新。官网android.dronekit.io/也打不开,DNS错误。
DroneKit在MAVLink Java库的基础上,实现了连接功能,且用android background service来解耦出连接端和控制端。在service中运行的连接端自动实现了心跳、查询类型/能力/参数列表等地面站的必要操作,连接方式可支持TCP、UDP、USB、蓝牙、点对点WiFi。控制端封装了service的通信和底层MAVLink消息的收发,可通过函数进行mission航线规划、实时查看摄像头画面、校准磁力计等高级操作。
其它Android SDK
赞助PX4的DroneCode基金会的旗下项目:https://github.com/mavlink/MAVSDK-Java。提供了高层API,仍在更新。
爱好者的MAVLink实现:https://github.com/dronefleet/mavlink。已停止更新。
以上是关于开源飞控初探:地面站和SDK的主要内容,如果未能解决你的问题,请参考以下文章