跳转至

api 接口文档

简介

简述:本文件是RflySimSDK无人机仿真平台的无人机控制核心模块,提供了无人机控制基类、不同通讯控制模式以及PID控制器实现,支撑各类无人机控制算法的开发与部署。

该模块面向无人机开发与仿真测试场景,是用户实现自定义无人机控制逻辑的基础依赖。其中Ctrl类提供了无人机控制的基础框架,CtMode类支持不同的控制通讯模式选择(其中Redis模式仅企业版提供支持),适配不同版本平台的开发需求;提供的PID类针对控制调用间隔稳定的场景做了适配,不在控制器内部重复计算时间间隔,而是通过PID参数直接完成控制量调整,简化了固定频率控制场景下的参数调试过程,适合无人机位置控制、姿态控制等各类常规固定频率控制任务使用。

快速开始

最简可用示例,复制后修改最少配置即可运行。

from RflySimSDK.ctrl import Ctrl
import time

# 1. 初始化控制对象,默认使用本机UDP连接,控制ID为1的无人机
copter_ctrl = Ctrl(copter_id=1, ip="127.0.0.1")

# 2. 初始化控制循环,使用位置控制模式(ct_mode=2对应位置控制),不启用offboard模式
copter_ctrl.init_loop(ct_mode=2, offboard=False)

# 3. 等待解锁和初始化完成
time.sleep(3)

# 4. 命令无人机起飞到NED坐标系下10米高度(NED下高度为负,所以此处填-10)
copter_ctrl.takeoff(height=-10)

# 5. 等待起飞完成
time.sleep(10)

# 6. 保持悬停,循环发送控制指令保持连接
while True:
    # 发送空指令保持位置悬停
    if copter_ctrl.is_full_send():
        time.sleep(0.01)

环境与依赖

  • Python 环境>= 3.8.10
  • 依赖库DllSimCtrlAPIPX4MavCtrlV4numpytime
  • 前置准备:调用此接口前,必须先完成RflySimSDK的初始化并导入RflySimSDK.ctrl模块。

核心接口说明

该模块 api.py 包含了配置变量、辅助函数及核心业务类。

全局常量与枚举定义

本节列出模块中所有可直接引用的全局常量和枚举定义。

独立常量


全局/独立函数


Ctrl

PX4 飞控控制类,继承自PX4MavCtrler,提供对无人机的基础控制功能,支持仿真与实物场景连接。

功能说明:初始化Ctrl对象,建立与PX4飞控(仿真或实物)的连接。 参数列表 (Args)

参数名 类型 默认值 说明
copter_id 1 无人机编号,用于区分多机场景中的不同无人机
ip 127.0.0.1 飞控连接的IP地址,本地仿真默认使用本地回环地址
com udp 通信协议类型,可选udp(网络通信,仿真常用)或串口通信
port 0 通信端口号,0表示自动分配端口
simulink_dll False 是否为Simulink动态链接库仿真模式,True时适配Simulink联合仿真

返回值 (Returns):无 异常 (Raises):无

init_loop(ct_mode="2", offboard=False)

功能说明:初始化控制循环,设置控制模式与offboard选项 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
ct_mode None "2" 控制模式参数
offboard None False 是否启用offboard模式

返回值 (Returns):无 异常 (Raises):无


is_full_send()

功能说明:检查是否已完成全量指令发送 参数列表 (Args):无参数 返回值 (Returns):布尔值,True表示已完成全量发送,False表示未完成 异常 (Raises):无


takeoff(height=0, pos_x=0, pos_y=0)

功能说明:执行无人机起飞操作,该高度为NED坐标系下的高度,PX4版本的固定翼支持指定起飞后位置,综合模型只支持指定高度 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
height None 0 NED坐标系下的起飞目标高度,单位m
pos_x None 0 NED坐标系下起飞目标x坐标,单位m,仅PX4版本固定翼支持
pos_y None 0 NED坐标系下起飞目标y坐标,单位m,仅PX4版本固定翼支持

返回值 (Returns):无 异常 (Raises):无


return_home(height=0)

功能说明:执行返航操作,水平位置移动到Home点,高度保持当前设置值不变 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
height None 0 返航过程的保持高度,单位m

返回值 (Returns):无 异常 (Raises):无


land(height=0)

功能说明:执行降落操作,将高度降落到Home点对应高度 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
height None 0 降落目标高度,单位m

返回值 (Returns):无 异常 (Raises):无


send_pos_ned(pos=None, yaw=None)

功能说明:发送NED坐标系下的位置控制指令,PX4版本时每架飞机坐标相对于起飞点,综合模型时坐标相对UE中心;差异来自综合模型使用真实位置控制,PX4使用滤波后位置控制 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
pos None None NED坐标系下x,y,z方向位置,单位m
yaw None None 目标偏航角,单位rad

返回值 (Returns):无 异常 (Raises):无


send_pos_speed_fw(pos=None, speed=None)

功能说明:为固定翼综合模型发送同时包含位置与速度的控制指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
pos None None 目标位置,单位m
speed None None 目标飞行速度

返回值 (Returns):无 异常 (Raises):无


send_pos_global(pos=None, yaw=None)

功能说明:发送全局坐标系下的位置控制指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
pos None None 全局坐标系下目标位置
yaw None None 目标偏航角,单位rad

返回值 (Returns):无 异常 (Raises):无


send_vel_ned(vel=None, yaw_rate=None)

功能说明:发送NED坐标系下的速度控制指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
vel None None NED坐标系下x,y,z方向目标速度,单位m/s
yaw_rate None None 目标偏航角速度,单位rad/s

返回值 (Returns):无 异常 (Raises):无


send_vel_body(vel=None, yaw_rate=None)

功能说明:发送机体坐标系下的速度控制指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
vel None None 机体坐标系下x,y,z方向目标速度,单位m/s
yaw_rate None None 目标偏航角速度,单位rad/s

返回值 (Returns):无 异常 (Raises):无


send_acc(acc=None)

功能说明:发送加速度控制指令,仅适用于旋翼无人机;NED坐标系下x,y方向响应非常灵敏,z方向为了定高响应缓慢 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
acc None None NED坐标系下期望加速度,单位m/s²

返回值 (Returns):无 异常 (Raises):无


send_att_thrust(att=None, thrust=None)

功能说明:发送姿态与油门控制指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
att None None 欧拉角[滚转角、俯仰角、偏航角],单位rad
thrust None None 油门控制量

返回值 (Returns):无 异常 (Raises):无


send_att(att=None)

功能说明:发送姿态控制指令 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
att None None 欧拉角[滚转角、俯仰角、偏航角],单位rad

返回值 (Returns):无 异常 (Raises):无


send_cruise_speed_fw(speed=None)

功能说明:设置固定翼巡航速度,仅支持固定翼,对应QGC参数FW_AIRSPD_TRIM,速度限制范围为10-20m/s,默认值为15m/s,速度限制定义在src/modules/fw_pos_control_l1/fw_pos_control_l1_params.c 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
speed None None 固定翼目标水平巡航速度,单位m/s

返回值 (Returns):无 异常 (Raises):无


send_cruise_radius_fw(radius=None)

功能说明:设置固定翼盘旋半径,仅支持固定翼,对应QGC参数NAV_LOITER_RAD;设置超出范围的值在QGC中会显示修改,但实际不会超过范围 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
radius None None 固定翼盘旋半径,单位m,有效范围25m-1000m,正常误差可达10-20m

返回值 (Returns):无 异常 (Raises):无

get_vehicle_id()

功能说明:获取当前控制载具的ID 参数列表 (Args): 无参数 返回值 (Returns):返回载具ID,默认从1开始编号 异常 (Raises):无


get_time_s()

功能说明:获取当前仿真时间 参数列表 (Args): 无参数 返回值 (Returns):当前仿真时间,单位为秒 异常 (Raises):无


get_pos_ned()

功能说明:获取当前载具在NED坐标系下的位置 参数列表 (Args): 无参数 返回值 (Returns):PX4返回局部NED坐标系下的位置,每一架飞机都以起飞点为原点;综合模型返回全局NED(相对UE中心)位置,格式为[north, east, down],单位为米 异常 (Raises):无


get_pos_ned_global()

功能说明:获取当前载具在全局NED坐标系下的位置 参数列表 (Args): 无参数 返回值 (Returns):返回全局NED(相对UE中心)位置,格式为[north, east, down],单位为米 异常 (Raises):无


get_pos_global()

功能说明:获取当前载具在WGS84坐标系下的经纬度高度 参数列表 (Args): 无参数 返回值 (Returns):WGS84坐标系下位置,格式为[纬度, 经度, 高度],单位为度、度、米 异常 (Raises):无


get_home_pos()

功能说明:获取当前载具Home点在WGS84坐标系下的位置 参数列表 (Args): 无参数 返回值 (Returns):WGS84坐标系下Home点位置,格式为[纬度, 经度, 高度],单位为度、度、米 异常 (Raises):无


get_vel_ned()

功能说明:获取当前载具在NED坐标系下的速度 参数列表 (Args): 无参数 返回值 (Returns):NED坐标系下速度,格式为[north速度, east速度, down速度],单位为m/s 异常 (Raises):无


get_acc()

功能说明:获取当前载具在载体坐标系下的加速度,目前仅综合模型支持该功能 参数列表 (Args): 无参数 返回值 (Returns):载体坐标系中加速度,格式为[x轴加速度, y轴加速度, z轴加速度],单位为m/s² 异常 (Raises):无


get_euler()

功能说明:获取当前载具的欧拉角姿态 参数列表 (Args): 无参数 返回值 (Returns):欧拉角姿态,格式为[滚转, 俯仰, 偏航],单位为弧度 异常 (Raises):无


get_angular_rate()

功能说明:获取当前载具的角速度 参数列表 (Args): 无参数 返回值 (Returns):载体坐标系下的角速度,格式为[x轴角速度, y轴角速度, z轴角速度],单位为弧度/秒 异常 (Raises):无


get_quaternion()

功能说明:获取当前载具姿态的四元数描述,目前仅综合模型支持返回四元数 参数列表 (Args): 无参数 返回值 (Returns):四元数描述的姿态,格式为[w, x, y, z] 异常 (Raises):无


get_actuator_speed()

功能说明:获取各电机的转速 参数列表 (Args): 无参数 返回值 (Returns):电机转速列表,每个元素单位为转/min,顺序对应电机编号 异常 (Raises):无


get_max_vel_xy()

功能说明:获取载具设置的最大水平速度 参数列表 (Args): 无参数 返回值 (Returns):最大水平速度,单位为m/s 异常 (Raises):无


get_max_vel_z()

功能说明:获取载具设置的最大竖直速度 参数列表 (Args): 无参数 返回值 (Returns):最大竖直速度,单位为m/s 异常 (Raises):无


get_max_acc_xy()

功能说明:获取载具设置的最大水平加速度 参数列表 (Args): 无参数 返回值 (Returns):最大水平加速度,单位为m/s² 异常 (Raises):无

get_max_acc_z()

功能说明:获取无人机最大竖直加速度 参数列表 (Args): 无参数 返回值 (Returns)float 最大竖直加速度,单位为 m/s² 异常 (Raises):无

CtMode

无人机通信模式管理类,用于定义和判断RflySim平台中无人机与仿真环境的不同通信模式,其中Redis模式仅企业版支持。该类预定义了多种常用通信模式常量,方便开发者直接调用。

__init__()

功能说明:初始化 CtMode 类实例 参数列表 (Args): 无参数 返回值 (Returns)

  • CtMode 实例对象

异常 (Raises): 无


set(mode)

功能说明:设置当前实例的通信模式 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
mode int - 需要设置的通信模式,可使用该类预定义的常量,如 CtMode.UDP_FullCtMode.MAVLink_Full

返回值 (Returns)

异常 (Raises): 无


is_udp_full()

功能说明:判断当前通信模式是否为UDP全模式 返回值 (Returns)

  • bool: 若当前为UDP全模式返回 True,否则返回 False

异常 (Raises): 无


is_udp_simple()

功能说明:判断当前通信模式是否为UDP简化模式 返回值 (Returns)

  • bool: 若当前为UDP简化模式返回 True,否则返回 False

异常 (Raises): 无


is_mav_full()

功能说明:判断当前通信模式是否为MAVLink全模式 返回值 (Returns)

  • bool: 若当前为MAVLink全模式返回 True,否则返回 False

异常 (Raises): 无


is_mav_simple()

功能说明:判断当前通信模式是否为MAVLink简化模式 返回值 (Returns)

  • bool: 若当前为MAVLink简化模式返回 True,否则返回 False

异常 (Raises): 无


is_mav_no_send()

功能说明:判断当前通信模式是否为MAVLink只接收不发送模式 返回值 (Returns)

  • bool: 若当前为MAVLink只接收不发送模式返回 True,否则返回 False

异常 (Raises): 无


is_mav_no_gps()

功能说明:判断当前通信模式是否为MAVLink无GPS模式 返回值 (Returns)

  • bool: 若当前为MAVLink无GPS模式返回 True,否则返回 False

异常 (Raises): 无


is_redis_full()

功能说明:判断当前通信模式是否为Redis全模式(仅企业版支持) 返回值 (Returns)

  • bool: 若当前为Redis全模式返回 True,否则返回 False

异常 (Raises): 无


is_redis_simple()

功能说明:判断当前通信模式是否为Redis简化模式(仅企业版支持) 返回值 (Returns)

  • bool: 若当前为Redis简化模式返回 True,否则返回 False

异常 (Raises): 无


is_udp()

功能说明:判断当前通信模式是否属于UDP类型(包含全模式和简化模式) 返回值 (Returns)

  • bool: 若当前为UDP类型通信模式返回 True,否则返回 False

异常 (Raises): 无


is_mav()

功能说明:判断当前通信模式是否属于MAVLink类型(包含所有MAVLink相关模式) 返回值 (Returns)

  • bool: 若当前为MAVLink类型通信模式返回 True,否则返回 False

异常 (Raises): 无


is_redis()

功能说明:判断当前通信模式是否属于Redis类型(包含全模式和简化模式,仅企业版支持) 返回值 (Returns)

  • bool: 若当前为Redis类型通信模式返回 True,否则返回 False

异常 (Raises): 无


is_full()

功能说明:判断当前通信模式是否为全量传输模式(包含UDP全模式、MAVLink全模式、Redis全模式) 返回值 (Returns)

  • bool: 若当前为全量传输模式返回 True,否则返回 False

异常 (Raises): 无

示例

from RflySimSDK.ctrl import CtMode

# 初始化通信模式实例并设置为MAVLink全模式
mode = CtMode()
mode.set(CtMode.MAVLink_Full)

# 判断通信模式类型
print(mode.is_mav())        # 输出: True
print(mode.is_full())       # 输出: True
print(mode.is_udp())        # 输出: False

预定义类常量

常量名 类型 说明
UDP_Full int 0 UDP全通信模式
UDP_Simple int 1 UDP简化通信模式
MAVLink_Full int 2 MAVLink全通信模式
MAVLink_Simple int 3 MAVLink简化通信模式
MAVLink_NoSend int 4 MAVLink只接收不发送模式
MAVLink_NoGPS int 5 MAVLink无GPS输入模式
Mavlink_Vision int 6 MAVLink视觉定位模式
Redis_Full int 7 Redis全通信模式(仅企业版支持)
Redis_Simple int 8 Redis简化通信模式(仅企业版支持)

PID

本控制器适用于调用时间间隔在一个常值附近的情形,在控制器中不计算时间间隔,通过PID参数进行调整,常用于无人机飞行控制中固定周期的偏差调节场景。

__init__(p=0.0, i=0.0, d=0.0)

功能说明:初始化PID控制器,设置比例、积分、微分三个系数 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
p float 0.0 比例系数,用于调节比例控制增益
i float 0.0 积分系数,用于消除稳态误差
d float 0.0 微分系数,用于抑制偏差变化,提高系统稳定性

返回值 (Returns)

  • PID 实例对象

异常 (Raises)


pid(err)

功能说明:根据输入的偏差值计算PID控制输出量 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
err float - 当前控制偏差,即设定值减实际值

返回值 (Returns)

  • float: 计算得到的PID控制输出量

异常 (Raises)

示例

# 创建比例系数0.5,积分系数0.1的PID控制器
pid_ctrl = PID(p=0.5, i=0.1)
# 输入当前偏差计算控制输出
output = pid_ctrl.pid(err=2.0)

reset()

功能说明:重置PID控制器的积分累积项和历史偏差,清除过往控制状态 返回值 (Returns)

异常 (Raises)

示例

pid_ctrl = PID(1.0, 0.2, 0.05)
pid_ctrl.reset()

进阶用法示例

展示复杂组合场景(如多类协作、异步控制、批量操作)

import RflySimSDK.ctrl as rfly_ctrl
import time
from concurrent.futures import ThreadPoolExecutor

# 多旋翼+固定翼多机编队协同起飞进阶示例
# 1. 初始化多架不同类型无人机的控制与通信模式
vehicles = [
    {"id": 1, "type": "multirotor", "ctrl": rfly_ctrl.Ctrl(), "mode": rfly_ctrl.CtMode()},
    {"id": 2, "type": "fixedwing", "ctrl": rfly_ctrl.Ctrl(), "mode": rfly_ctrl.CtMode()},
    {"id": 3, "type": "multirotor", "ctrl": rfly_ctrl.Ctrl(), "mode": rfly_ctrl.CtMode()},
]

# 批量设置全量UDP通信模式
for veh in vehicles:
    veh["mode"].set(veh["mode"].is_udp_full())
    veh["ctrl"].init_loop(veh_id=veh["id"])

# 异步批量起飞,避免顺序起飞等待浪费时间
def async_takeoff(veh):
    if veh["type"] == "multirotor":
        return veh["ctrl"].takeoff(target_alt=5.0)
    return True

with ThreadPoolExecutor(max_workers=3) as executor:
    results = list(executor.map(async_takeoff, vehicles))
time.sleep(8)  # 等待所有无人机稳定达到起飞高度

# 编队位置控制,结合PID修正位置误差
pid_x = rfly_ctrl.PID(kp=1.2, ki=0.1, kd=0.05)
pid_y = rfly_ctrl.PID(kp=1.2, ki=0.1, kd=0.05)
formation_offset = [(0, 2), (-2, 0), (0, -2)]
leader_ned = [0, 0, -5]

for step in range(100):
    for idx, veh in enumerate(vehicles):
        target_x = leader_ned[0] + formation_offset[idx][0]
        target_y = leader_ned[1] + formation_offset[idx][1]
        if veh["type"] == "multirotor":
            vel_x = pid_x.pid(target_x - veh["current_x"])
            vel_y = pid_y.pid(target_y - veh["current_y"])
            veh["ctrl"].send_vel_body(vx=vel_x, vy=vel_y, vz=0, yaw_rate=0)
        else:
            veh["ctrl"].send_pos_speed_fw(north=target_x, east=target_y, down=-5, airspeed=12)
    # 更新领机位置后循环
    leader_ned[0] += 0.5
    time.sleep(0.1)

# 批量返航降落
for veh in vehicles:
    veh["ctrl"].return_home()
time.sleep(20)
for veh in vehicles:
    veh["ctrl"].land()

注意事项与避坑指南

  • 初始化必须匹配通信模式:调用Ctrl.init_loop()前必须先通过CtMode.set()设置对应通信模式,若模式设置不匹配会导致控制指令无法正常下发,仿真中无任何报错但无人机不响应控制。
  • 固定翼与多旋翼控制方法不可混用send_pos_speed_fw是固定翼专用的位置速度控制接口,直接用于多旋翼不会生效;多旋翼的速度控制接口send_vel_body也不适用于固定翼的定高飞行逻辑。
  • PID控制器使用前需重置状态:重复利用同一个PID控制器控制不同无人机或者切换控制任务时,必须调用PID.reset()清除积分累积项,否则会产生超调量异常增大的问题。
  • 满发送模式需匹配链路带宽:若使用is_udp_full/is_mav_full这类全量数据发送模式,需要保证仿真网络带宽足够,若出现丢包严重可切换为is_udp_simple简化发送模式降低带宽占用。

更新日志

  • 2026-03-03: feat:SDK增加IP处理机制,兼容本地版上云
  • 2024-09-09: 更新Mavlink_Vision的仿真模式
  • 2024-07-18: fix:更新API主页索引
  • 2023-11-09: feat: 增加云兼容接口