地面站MissionPlanner利用Python脚本实现GPS防撞

您所在的位置:网站首页 missionplanner二次开发后可做商业用途吗 地面站MissionPlanner利用Python脚本实现GPS防撞

地面站MissionPlanner利用Python脚本实现GPS防撞

2024-07-17 22:09| 来源: 网络整理| 查看: 265

目录 前言Python脚本函数

前言

上一篇使用网上淘的WiFi模块自己刷了官方的固件,实现了AP模式,可以通过无线实现一个地面站连接多个无人机(Pixhawk控制板),其实是为这篇做的铺垫。

一直想实现利用GPS来实现多个无人机之间的防碰撞能,查找了Pixhawk的内部参数,没有找到跟GPS防碰撞直接相关的参数。

之后找了两个主流的地面站软件MissionPlanner和QGroundControl,想通过二次开发来实现,做了一段发现对于我来说比较困难。

后来又发现了官方支持Lua脚本,Lua脚本工作时需要上传到Pixhawk的控制板上,通过给定函数接口可以获取当前设备的GPS信息,但是要实现与其他设备实时通讯的功能还在开发中, 与论坛里官方人员讨论链接.

再之后发现MissionPlanner支持Python脚本,但是是用IronPython实现,所以有一些库不支持,比如Numpy,但是够用了,如果非要用矩阵可以度娘搜索Mapack.dll,然后导入脚本中。

本篇主要记录在Python脚本的主要函数接口,以防以后忘记

Python脚本函数

首先官方文档中有了很多接口的介绍,也有一些实例,但是对多机之间的控制没有提及太多。

官方的接口函数的寻找主要通过C#的源码,像MAVLinkInterface.cs,MAVList.cs,MAVState.cs等。

可能已经内置加载了很多库,有些函数使用的时候没有 import也能使用,比如 MAVLink、Mission Planner等。

print后直接空格加被打印内容,不需要加()比如: print ‘Start Script’ 获得当前活跃设备的参数,比如ID信息: id_1 = Script.GetParam('SYSID_THISMAV') 获得当前活跃设备的飞行模式: mode_1 = cs.mode 获得当前活跃飞机的经纬度: lat_1 = cs.lat lng_1 = cs.lng

接下来是多设备间的操作 获得当前地面站(MissionPlanner)连接的设备总数: MAVcounts = MAV.MAVlist.Count 获得当前地面站连接的设备ID: MAVids = MAV.MAVlist.GetRawIDS() 注意 这里的获得的MAVids是没有顺序的,也可能有一定的规律,但不是从小到大排列的,并且这里得到的数是sysid*256+compid的结果 对指定的设备进行操作需要用到设备的ID,其中sysid表示设备的ID号,即全部参数表里的SYSID_THISMAV。而compid是组件的ID,为1时就表示的是控制板本身,在本篇Pixhawk。我这里sysid和compid都为1了。 获取指定设备的经纬度: lat = MAV.MAVlist[sysid, compid].cs.lat lng = MAV.MAVlist[sysid, compid].cs.lng 设置设备为指定的飞行模式: MAV.setMode(sysid, compid, "Guided") 获取指定设备的参数数量: counts = MAV.MAVlist[sysid, compid].param.Count 以上是多设备操作中的一些函数接口,更多的接口可以参考上文给出的C#源码MAVLinkInterface.cs,MAVList.cs,MAVState.cs等。 如果有大神欢迎在评论区讨论。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3