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

前言

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

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

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

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

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

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

Python脚本函数

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

官方的接口函数的寻找主要通过C#的源码,像MAVLinkInterface.csMAVList.csMAVState.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。我这里sysidcompid都为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.csMAVList.csMAVState.cs等。
如果有大神欢迎在评论区讨论。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值