上一篇使用网上淘的WiFi模块自己刷了官方的固件,实现了AP模式,可以通过无线实现一个地面站连接多个无人机(Pixhawk控制板),其实是为这篇做的铺垫。
一直想实现利用GPS来实现多个无人机之间的防碰撞能,查找了Pixhawk的内部参数,没有找到跟GPS防碰撞直接相关的参数。
之后找了两个主流的地面站软件MissionPlanner和QGroundControl,想通过二次开发来实现,做了一段发现对于我来说比较困难。
后来又发现了官方支持Lua脚本,Lua脚本工作时需要上传到Pixhawk的控制板上,通过给定函数接口可以获取当前设备的GPS信息,但是要实现与其他设备实时通讯的功能还在开发中, 与论坛里官方人员讨论链接.
再之后发现MissionPlanner支持Python脚本,但是是用IronPython实现,所以有一些库不支持,比如Numpy,但是够用了,如果非要用矩阵可以度娘搜索Mapack.dll,然后导入脚本中。
本篇主要记录在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等。
如果有大神欢迎在评论区讨论。