在Mission Planner地面站中使用 Python 脚本

Mission Planner地面站的一个很酷的功能是它可以运行 Python 脚本,这是将程序功能扩展到内置功能之外的一种简单方法。它还能与其他 dll 和模块轻松集成,远远超出Mission Planner地面站的原始范围。

概述

从机器人杂技表演到脚本驱动任务,您都可以轻松对无人机进行编程。目前支持 Python 2.x,最高可达 2.7(Mission Planner地面站使用的是 IronPython 内部)

除了常规的 Python 命令外,您还可以使用这些特殊的任务计划程序命令:

cs.变量名 = 当前状态

可以使用计划器中状态选项卡上的任何变量。

脚本.方法名称(...)

选项有

  • 脚本.睡眠(毫秒)

  • 脚本.ChangeParam(名称、值)

  • Script.GetParam(name)

  • 脚本.ChangeMode(模式) (与模式设置屏幕 "自动 "中显示的相同)

  • >;Script.WaitFor(string,timeout)

  • Script.SendRC(channel,pwm,sendnow)

下面是一个例子,告诉一架多旋翼飞行器在空中翻滚!

打印 '启动脚本';
对于   范围(1,9):
    脚本.发送RC(,1500,假的)
    脚本.发送RC(3,脚本.获取参数('rc3_min';),正确)

脚本.睡眠(5000)

虽然 cs.纬度 == 0:
    打印 等待 GPS';
    脚本.睡眠(1000)

打印 有 GPS;
加入 = 10 * 13
打印 加入
脚本.发送RC(3,1000,假的)
脚本.发送RC(4,2000,正确)
cs.信息.清晰()
脚本.等待('上膛电机';,30000)
脚本.发送RC(4,1500,正确)
打印 '载具上膛!';
脚本.发送RC(3,1700,正确)

虽然 cs.选一 <; 50:
    脚本.睡眠(50)

脚本.发送RC(5,2000,正确) # acro
脚本.发送RC(1,2000,假的) # 滚动
脚本.发送RC(3,1370,正确) # 节流阀/电门

虽然 cs.滚动 >; -45: # 上半部分 0 - 180
    脚本.睡眠(5)

虽然 cs.滚动 <; -45: # -180 - -45
    脚本.睡眠(5)

脚本.发送RC(5,1500,假的) # 稳定
脚本.发送RC(1,1500,正确) # 水平卷
脚本.睡眠(2000) # 2 秒钟稳定
脚本.发送RC(3,1300,正确) # 节流回陆
悸动 = 1350 # 将下降

虽然 cs.选一 >; 0.1:
    脚本.睡眠(300)

脚本.发送RC(3,1000,假的)
脚本.发送RC(4,1000,正确)
脚本.等待(解除发动机上膛';,30000)
脚本.发送RC(4,1500,正确)

打印 '滚动完成';

Mission Planner地面站向 Python 公开的类

Mission Planner地面站使用以下代码公开类:

../_images/mission_planner_scripts.jpg

将类链接到 python

范围.设置变量(变量名, 类实例);

暴露了以下类别

  • scope.SetVariable("MAV"、 MainV2.comPort);

  • scope.SetVariable("cs"、 MainV2.comPort.MAV.cs);

  • scope.SetVariable("Script"、 此);

  • scope.SetVariable("mavutil"、 此);

您可以在这里添加自己的类。现在,让我们探讨一下使用这些类可以在脚本中使用的重要方法和属性。

班级名称 脚本.cs

Python 变量: 脚本 , mavutil

方法

说明

bool ChangeParam(字符串参数,浮点值)

浮点数 GetParam(字符串参数)

bool ChangeMode(字符串模式)

改变飞行模式

bool SendRC(int channel,ushort pwm,bool sendnow)

发送 Chxout 值。

班级名称 CurrentState.cs

Python 变量: cs

方法

类型

说明

滚动

浮动

滚动(度)

沥青

浮动

螺距(度)

打呵欠

浮动

偏航/航向(度)

纬度

浮动

纬度(度)

lng

浮动

经度(度)

地道

浮动

地面航线(度)

选一

浮动

高度(距离)

altoffsethome

浮动

高度原点偏移(距离)

GPS 状态

浮动

GPS 状态

gpshdop

浮动

GPS HDOP

satcount

浮动

卫星计数

altd100

浮动

海拔 / 100

altd1000

浮动

海拔 / 1000

空速

浮动

空速(速度)

目标速度

浮动

空速目标(速度)

地速

浮动

地面速度(速度)

垂直速度

浮动

垂直速度(速度)

wind_dir

浮动

风向(度)

风速

浮动

风速(速度)

ax, ay, az

浮动

x,y,z 轴加速度值

gx, gy, gz

浮动

陀螺仪的 x、y、z 值

mx, we, mz

浮动

x,y,z 中的磁力值

故障安全

bool

故障安全激活与否

rxrssi

浮动

CHX1IN, CHX2IN, .... CHX8IN

浮动

输入通道从 1 到 8

CH1OUT, CHX2OUT, .... CHX8OUT

浮动

输出通道形式 1 至 8

导航滚动

浮动

滚动目标(度)

航距

浮动

俯仰目标(度)

导航轴承

浮动

目标方位(度)

目标轴承

浮动

目标方位(度)

wp_dist

浮动

到下一个航点的距离(距离)

alt_error

浮动

高度误差(距离)

ber_error

浮动

轴承误差(距离)

aspd_error

浮动

空速误差(速度)

wpno

浮动

飞行模式

模式

字符串

飞行模式

二聚体

浮动

爬升率(速度)

总计

int

超过目标时间(秒)

distTraveled

浮动

行驶距离 (dist)

空中时间

浮动

空气中时间(秒)

转率

浮动

转弯率(速度)

半长轴

浮动

转弯半径(距离)

电池电压

浮动

电池电压(伏)

剩余电池

浮动

电池剩余电量 (%)

当前

浮动

电池电流(安培)

主页Alt

浮动

DistToHome

浮动

绝对压力值

press_abs

浮动

绝对压力值

声纳排列

浮动

声纳范围(米)

声纳电压

浮动

声纳电压(伏特)

上膛

bool

如果 "上膛 "为 True

请注意,虽然这些属性都是读/写属性,但写入其中某些属性可能会破坏状态。例如,使用 Script.ChangeMode(xmode) 而不是 cs.mode = xmode。

班级名称 MavLink.cs

Python 变量: MAV

方法

说明

bool setParam(字符串参数名,浮点值)

与 Script.ChangeParam() 相同

bool doARM (bool armit)

使用时一定要小心。

字节 getWPCount ( )

获取航点计数。

使用 CPython 标准库

您可以在脚本顶部添加这一行(用驱动器上的任何文件夹替换 "c:\python27\lib"),从常规 Python 2.x 文件夹导入标准库:

舶来品 系统
系统..追加(r"c:/python27/lib";)

例如,在这里我们要导入 serial、os 和 threading 库,它们分别位于典型 Python 2.7 安装的两个文件夹中。首先附加这三个库的特定文件夹路径,我们就可以用下一个 "import "命令导入它们:

舶来品 系统
系统..追加(r"c:\Python27\Lib\site-packages";)
系统..追加(r"c:\Python27\Lib";)
舶来品 串行, os, 线程

教程和示例脚本