在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地面站使用以下代码公开类:
范围.设置变量(变量名, 类实例);
暴露了以下类别
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, 线程