AutoMavCmd 接口文档¶
简介¶
简述:该文件提供了PX4硬件在环仿真任务规划所需的MAVLink命令封装与控制能力,可实现延时等待和自定义无人机任务指令的时序管理。
在无人机自主任务仿真中,需要按照时序向飞控发送各类MAVLink控制指令,该模块专门针对任务规划场景设计,将常用的任务执行控制逻辑和指令发送功能封装为可直接调用的类。它适用于用户编写自定义自主任务脚本的场景,能够帮助用户便捷地编排任务流程,控制指令发送节奏,实现稳定的MAVLink指令与PX4飞控的交互。
快速开始¶
最简可用示例,复制后修改最少配置即可运行。
from RflySimVision import VisionClient # 导入视觉客户端获取无人机mav对象
from RflySimSDK.phm.AutoMavCmd import Command # 导入本模块的主命令类
# 1. 连接PX4无人机mav对象(使用默认配置连接RflySim仿真环境中的无人机)
vision = VisionClient()
mav = vision.get_vehicle() # 获取仿真中第一个无人机的mav对象
# 2. 初始化命令控制对象
cmd = Command(mav=mav)
# 3. 解锁无人机
cmd.Arm()
print("无人机已解锁")
# 4. 控制四旋翼飞到目标位置(x=0m, y=0m, z=2m)
target_position = [0, 0, 2]
cmd.QuadPos(pos=target_position)
print(f"已发送位置指令到目标位置{target_position}")
# 等待10秒后降落解锁
import time
time.sleep(10)
# 这里可以发送位置到地面,再上锁
cmd.QuadPos([0,0,0])
time.sleep(5)
cmd.DisArm()
print("无人机已上锁完成任务")
环境与依赖¶
- Python 环境:
>= 3.8.10 - 依赖库:
UE4CtrlAPI、math、numpy、time - 前置准备:调用此接口前,必须先完成RflySimSDK的初始化配置并连接好仿真环境与飞控。
核心接口说明¶
该模块 AutoMavCmd.py 包含了配置变量、辅助函数及核心业务类。
全局常量与枚举定义¶
本节列出模块中所有可直接引用的全局常量和枚举定义。
独立常量¶
无
全局/独立函数¶
无
Sleep 类¶
用于在无人机任务航线规划中添加等待类任务,支持普通时间等待和固定翼重置等待,配合MAVLink指令任务执行流程使用。
__init__(mav)¶
功能说明:初始化Sleep类实例,绑定MAV连接对象
参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
mav |
MavlinkInterface |
是 | - | MAVLink通信接口对象,用于和无人机飞控进行指令交互 |
返回值 (Returns):
Sleep实例对象
异常 (Raises): 无
Wait(times)¶
功能说明:添加等待指定时长的任务指令,在任务执行过程中停留设定时间后再执行后续任务 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
times |
float |
是 | - | 需要等待的时长,单位为秒 |
返回值 (Returns):
- 无
异常 (Raises): 无
示例:
from RflySimSDK.phm.AutoMavCmd import Sleep
from RflySimSDK.communication import MavlinkInterface
# 初始化MAV连接
mav = MavlinkInterface()
# 创建Sleep实例,添加10秒等待任务
sleep_task = Sleep(mav)
sleep_task.Wait(10)
WaitResetForFixwing(targetPos)¶
功能说明:为固定翼无人机添加等待位置重置的任务指令,将固定翼重置到指定目标位置后再继续执行后续任务 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
targetPos |
list[float] |
是 | - | 目标重置位置,格式为[N, E, D],单位为米,对应北东地坐标系 |
返回值 (Returns):
- 无
异常 (Raises): 无
示例:
from RflySimSDK.phm.AutoMavCmd import Sleep
from RflySimSDK.communication import MavlinkInterface
# 初始化MAV连接
mav = MavlinkInterface()
# 创建Sleep实例,添加固定翼位置重置等待任务,重置到原点上方100米
sleep_task = Sleep(mav)
target_pos = [0, 0, -100]
sleep_task.WaitResetForFixwing(target_pos)
Command 类¶
该类用于为 RflySim 仿真环境中的不同载具(多旋翼无人机、固定翼无人机、无人艇等)提供MAVLink指令封装,支持解锁、上锁、位置控制、速度控制等常用飞行与航行控制操作。
__init__(self, mav)¶
功能说明:初始化 Command 类实例,绑定MAV连接对象
参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
mav |
mavutil.mavlink_connection |
是 | - | PX4无人机的MAVLink连接对象 |
返回值 (Returns):
Command实例对象
异常 (Raises): 无
Arm()¶
功能说明:发送载具解锁指令,允许载具启动动力系统 参数列表 (Args): 无 返回值 (Returns): 无 异常 (Raises): 无
DisArm()¶
功能说明:发送载具上锁指令,关闭载具动力系统 参数列表 (Args): 无 返回值 (Returns): 无 异常 (Raises): 无
QuadPos(pos)¶
功能说明:发送多旋翼无人机位置控制指令,控制无人机飞到指定目标位置 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
pos |
list[float] |
是 | - | 目标位置数组,格式为[N, E, D],单位:米 |
返回值 (Returns): 无 异常 (Raises): 无
FixWingPos(pos)¶
功能说明:发送固定翼无人机位置导航指令,控制固定翼飞向指定目标航路点 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
pos |
list[float] |
是 | - | 目标航路点位置数组,格式为[N, E, D],单位:米 |
返回值 (Returns): 无 异常 (Raises): 无
USVPos(pos)¶
功能说明:发送无人艇位置控制指令,控制无人艇开到指定目标位置 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
pos |
list[float] |
是 | - | 目标位置数组,格式为[N, E],单位:米 |
返回值 (Returns): 无 异常 (Raises): 无
QuadVel(vel)¶
功能说明:发送多旋翼无人机速度控制指令,控制无人机以指定速度飞行 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
vel |
list[float] |
是 | - | 目标速度数组,格式为[vN, vE, vD],单位:m/s |
返回值 (Returns): 无 异常 (Raises): 无
USVVel(vel)¶
功能说明:发送无人艇速度控制指令,控制无人艇以指定速度航行 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
vel |
list[float] |
是 | - | 目标速度数组,格式为[vN, vE],单位:m/s |
返回值 (Returns): 无 异常 (Raises): 无
USVGroundSpeed(vel)¶
功能说明:设置无人艇地速控制目标 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
vel |
float |
是 | - | 目标地速大小,单位:m/s |
返回值 (Returns): 无 异常 (Raises): 无
UAVLand(pos)¶
功能说明:发送无人机自主降落指令,控制无人机在指定位置降落 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
pos |
list[float] |
是 | - | 降落位置数组,格式为[N, E],单位:米 |
返回值 (Returns): 无 异常 (Raises): 无
FixWingTakeOff(targetpos)¶
功能说明:发送固定翼无人机起飞指令,控制固定翼从当前位置起飞到目标高度 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
targetpos |
list[float] |
是 | - | 起飞目标位置数组,格式为[N, E, D],单位:米 |
返回值 (Returns): 无 异常 (Raises): 无
FixWingSetCruiseRadius(radius)¶
功能说明:设置固定翼无人机定圆巡逻的圆半径 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
radius |
float |
是 | - | 定圆巡逻的半径,单位:米 |
返回值 (Returns): 无 异常 (Raises): 无
FaultInject(param)¶
功能说明:注入仿真故障,用于测试载具故障下的应对逻辑 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
param |
any |
是 | - | 故障注入参数,定义故障类型和故障参数 |
返回值 (Returns): 无 异常 (Raises): 无
示例:
from RflySimSDK.phm.AutoMavCmd import Command
# 绑定MAV连接后初始化指令对象
cmd = Command(mav)
# 解锁载具
cmd.Arm()
# 控制多旋翼飞到指定位置
cmd.QuadPos([10, 0, -2])
# 控制无人机降落
cmd.UAVLand([0, 0])
# 上锁载具
cmd.DisArm()
CmdCtrl 类¶
用于RflySim仿真环境中无人机MAVLink命令序列的控制与处理,配合PX4飞控实现自动任务指令的处理调度。
__init__(mav, frame)¶
功能说明:初始化CmdCtrl类实例,绑定MAVLink接口与坐标框架 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
mav |
是 | - | MAVLink通信接口对象,用于和飞控进行指令交互 | |
frame |
是 | - | 坐标系框架对象,定义指令使用的坐标参考系 |
返回值 (Returns):
CmdCtrl实例对象
异常 (Raises): 无
GetWaitseq()¶
功能说明:获取当前等待执行的命令序号 返回值 (Returns):
- 当前等待执行的命令序列编号
异常 (Raises): 无
GetCmdseq()¶
功能说明:获取当前正在执行的命令序号 返回值 (Returns):
- 当前正在执行的命令序列编号
异常 (Raises): 无
FIDPro(cmdCID)¶
功能说明:处理指定ID的飞行指令任务 参数列表 (Args):
| 参数名 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
cmdCID |
是 | - | 需要处理的飞行指令ID,标识具体要执行的指令任务 |
返回值 (Returns):
- 指令处理结果
异常 (Raises): 无
示例:
from RflySimSDK.phm.AutoMavCmd import CmdCtrl
# 绑定已初始化的MAV接口和坐标系
cmd_ctrl = CmdCtrl(mav, frame)
# 获取当前正在执行的命令序号
current_seq = cmd_ctrl.GetCmdseq()
# 处理指定ID的飞行指令
cmd_ctrl.FIDPro(current_seq)
进阶用法示例¶
展示复杂组合场景(如多类协作、异步控制、批量操作)
以下示例实现了固定翼无人机+多旋翼无人机+水面无人艇三平台协同任务的异步规划控制,先依次完成各载具的起飞、航路点航段规划,再通过FIDPro实现多任务帧的批量下发与同步等待:
from RflySimSDK.phm.AutoMavCmd import Command, CmdCtrl, Sleep
# 1. 初始化各载具指令与同步对象
cmd = Command()
ctrl = CmdCtrl()
# 2. 批量完成各载具起飞解锁
cmd.Arm(vehID=1) # 固定翼解锁起飞准备
cmd.FixWingTakeOff(vehID=1, targetAlt=100)
cmd.Arm(vehID=2) # 多旋翼解锁
cmd.Arm(vehID=3) # 无人艇解锁
# 3. 异步规划不同载具的位置航路点
waypoints_quad = [(31.2, 121.5, 80), (31.21, 121.51, 80)]
waypoints_fw = [(31.19, 121.49, 100), (31.22, 121.52, 100)]
waypoints_usv = [(31.205, 121.495, 0), (31.215, 121.505, 0)]
for wp in waypoints_quad:
cmd.QuadPos(vehID=2, lat=wp[0], lon=wp[1], alt=wp[2])
for wp in waypoints_fw:
cmd.FixWingPos(vehID=1, lat=wp[0], lon=wp[1], alt=wp[2])
for wp in waypoints_usv:
cmd.USVPos(vehID=3, lat=wp[0], lon=wp[1], alt=wp[2])
# 4. 添加同步等待:等待固定翼完成对准航路点修正后再批量执行
ctrl.FIDPro()
Sleep.WaitResetForFixwing(vehID=1, waitTime=10)
# 5. 批量发送指令并等待所有任务完成
cmdSeq = ctrl.GetCmdseq()
waitSeq = ctrl.GetWaitseq()
ctrl.sendCmdAndWait(cmdSeq, waitSeq)
# 6. 任务完成后统一降落
cmd.UAVLand(vehID=1)
cmd.UAVLand(vehID=2)
cmd.USVVel(vehID=3, velX=0, velY=0)
ctrl.sendCmdAndWait(ctrl.GetCmdseq(), ctrl.GetWaitseq())
注意事项与避坑指南¶
- 载具ID编号有效性:下发指令时需保证vehID参数与RflySim可视化配置界面中设置的载具编号一致,若编号不存在会导致指令直接丢失且不会抛出显性报错,建议批量操作前先单独测试单个载具的指令响应。
- Wait等待指令与指令序列绑定要求:
Sleep类的等待方法需要和GetWaitseq绑定后才能生效,直接将等待指令加入普通指令序列GetCmdseq会导致等待逻辑失效,出现所有指令并发执行的问题。 - 固定翼起飞等待要求:调用
FixWingTakeOff后必须添加足够的等待时间或调用WaitResetForFixwing完成起飞滑跑与航向对准,否则后续航路点指令会导致固定翼起飞阶段失控偏离跑道。 - 多帧指令下发内存管理:每次调用
GetCmdseq和GetWaitseq获取指令序列后,会清空原有缓存区,若需要保留已有指令需要提前单独存储指令序列,避免误清空已规划的任务指令。
更新日志¶
2024-08-02: chore:为生成html格式API添加代码注释2024-07-18: fix:更新API主页索引2023-11-09: fix: 增加自动化安全评估的接口类文件