跳转至

AutoMavCmd 接口文档

简介

简述:该文件提供了PX4硬件在环仿真任务规划所需的MAVLink命令封装与控制能力,可实现延时等待和自定义无人机任务指令的时序管理。

在无人机自主任务仿真中,需要按照时序向飞控发送各类MAVLink控制指令,该模块专门针对任务规划场景设计,将常用的任务执行控制逻辑和指令发送功能封装为可直接调用的类。它适用于用户编写自定义自主任务脚本的场景,能够帮助用户便捷地编排任务流程,控制指令发送节奏,实现稳定的MAVLink指令与PX4飞控的交互。

快速开始

以下示例为四旋翼创建自动命令控制器,并通过命令字典执行解锁和 NED 位置控制。

参考例程:[RflySim安装路径]\RflySimAPIs\7.RflySimPHM\0.ApiExps\e15_CmdExp

import time

import AutoMavCmd
import PX4MavCtrlV4


mav = PX4MavCtrlV4.PX4MavCtrler(1)
mav.InitMavLoop()
time.sleep(0.5)
mav.initOffboard()
time.sleep(0.5)

# frame=1 表示四旋翼;FIDPro("2") 返回飞行命令字典
cmdCtrl = AutoMavCmd.CmdCtrl(mav, 1)
commands = cmdCtrl.FIDPro("2")
commands["1"]()                 # Arm
commands["3"]([0, 0, -20])     # QuadPos

环境与依赖

  • Python 环境>= 3.8.10
  • 依赖库UE4CtrlAPImathnumpytime
  • 前置准备:调用此接口前,必须先完成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)

进阶用法示例

以下示例复用模板的命令序列解析方式,依次处理命令类别、功能编号和可选参数。

参考例程:[RflySim安装路径]\RflySimAPIs\7.RflySimPHM\0.ApiExps\e15_CmdExp

import re
import time

import AutoMavCmd
import PX4MavCtrlV4


mav = PX4MavCtrlV4.PX4MavCtrler(1)
mav.InitMavLoop()
time.sleep(0.5)
mav.initOffboard()

cmdCtrl = AutoMavCmd.CmdCtrl(mav, 1)


def trigger(commandText):
    fields = re.findall(r"-?\d+\.?[0-9]*", commandText)
    functions = cmdCtrl.FIDPro(fields[0])
    if len(fields) > 2:
        functions[fields[1]]([float(value) for value in fields[2:]])
    else:
        functions[fields[1]]()
    return cmdCtrl.CID[fields[0]]


# 2=飞行命令、1=解锁;1=等待命令;2=飞行命令、3=位置控制
controlSequence = ["2,1", "1,1,5", "2,3,0,0,-20"]
for commandText in controlSequence:
    controller = trigger(commandText)
    while controller.isDone != 1:
        time.sleep(1 / 250.0)
        controller = trigger(commandText)

注意事项与避坑指南

  • 载具ID编号有效性:下发指令时需保证vehID参数与RflySim可视化配置界面中设置的载具编号一致,若编号不存在会导致指令直接丢失且不会抛出显性报错,建议批量操作前先单独测试单个载具的指令响应。
  • Wait等待指令与指令序列绑定要求Sleep类的等待方法需要和GetWaitseq绑定后才能生效,直接将等待指令加入普通指令序列GetCmdseq会导致等待逻辑失效,出现所有指令并发执行的问题。
  • 固定翼起飞等待要求:调用FixWingTakeOff后必须添加足够的等待时间或调用WaitResetForFixwing完成起飞滑跑与航向对准,否则后续航路点指令会导致固定翼起飞阶段失控偏离跑道。
  • 多帧指令下发内存管理:每次调用GetCmdseqGetWaitseq获取指令序列后,会清空原有缓存区,若需要保留已有指令需要提前单独存储指令序列,避免误清空已规划的任务指令。

更新日志

  • 2024-08-02: chore:为生成html格式API添加代码注释
  • 2024-07-18: fix:更新API主页索引
  • 2023-11-09: fix: 增加自动化安全评估的接口类文件