跳转至

NetSimAPIV4 接口文档

简介

简述:该文件提供了RflySim无人机仿真平台与PX4飞控之间的网络通信核心接口,实现仿真环境下的数据收发交互功能。

该模块是RflySim仿真框架中通信层的核心实现,负责对接仿真端与飞控端的网络连接,支持仿真环境中无人机状态、控制指令等各类数据的稳定交互,是整个仿真任务正常运行的数据传输基础。

它适用于所有基于RflySim平台的无人机仿真任务场景,无论是单无人机还是多无人机集群仿真,都可以通过该模块提供的类完成网络连接建立、飞控数据收发等核心通信操作。

快速开始

以下示例将 1 号无人机的状态数据点对点转发给 2 号无人机。运行前需要启动对应的 CopterSim 和 PX4 实例。

参考例程:[RflySim安装路径]\RflySimAPIs\9.RflySimComm\0.ApiExps\e1.RflyNetAPIExps\1.P2PSendData

import time

import NetSimAPIV4
import PX4MavCtrlV4 as PX4MavCtrl
import ReqCopterSim


CopterID = 1

# 获取 1 号 CopterSim 地址,并请求其向本机回传数据
req = ReqCopterSim.ReqCopterSim()
targetIP = req.getSimIpID(CopterID)
req.sendReSimIP(CopterID)

# 创建飞控通信和网络仿真实例
mav = PX4MavCtrl.PX4MavCtrler(CopterID, targetIP)
net = NetSimAPIV4.NetSimAPI(mav)
mav.InitMavLoop()
time.sleep(2)

# 将本机收集到的无人机数据转发给 2 号无人机
net.enUavForward(2)

环境与依赖

  • Python 环境>= 3.8.10
  • 依赖库copyctrl.IpManagercv2mathnumpyospymavlinkpymavlink.dialects.v20socketstructsysthreadingtime
  • 前置准备:调用此接口前,必须先完成网络通信相关的环境配置并确保仿真端网络连接就绪。

核心接口说明

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

全局常量与枚举定义

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

独立常量


全局/独立函数


UAVSendData

用于无人机数据发送的基础数据类,一般作为网络仿真接口中数据传输的基础类型使用。

__init__()

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

  • UAVSendData 实例对象

异常 (Raises): 无


NetSimAPI

网络仿真API接口类,用于RflySim中网络仿真相关的通信交互。

__init__(MavOrCopterID="1")

功能说明:初始化网络仿真API实例,绑定对应的飞行器ID。 参数列表 (Args)

参数名 类型 默认值 说明
MavOrCopterID Any "1" 绑定的MAV或飞行器ID,标识当前实例对应的无人机对象

返回值 (Returns):None 异常 (Raises):无异常抛出

enUavForward(CopterIDList=[0], Interval=0)

功能说明:开启指定无人机的MAVLink数据网络转发 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
CopterIDList None [0] 需要开启转发的无人机ID列表
Interval None 0 转发时间间隔,0表示立即启动持续转发
返回值 (Returns)
异常 (Raises):无

enNetForward(PortList=[60000], targetIP="224.0.0.10", Interval=0)

功能说明:开启指定端口和目标地址的网络数据转发 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
PortList None [60000] 需要开启转发的目标端口列表
targetIP None 224.0.0.10 转发目标IP地址,默认使用组播地址
Interval None 0 转发时间间隔,0表示立即启动持续转发
返回值 (Returns)
异常 (Raises):无

endNetForward()

功能说明:停止所有正在进行的网络转发 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


netResetSendList()

功能说明:清空需要转发数据的无人机发送列表 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


netAddUavSendList(uavList=[])

功能说明:向需要转发数据的无人机发送列表中添加指定无人机 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
uavList None [] 需要添加到发送列表的无人机ID列表
返回值 (Returns)
异常 (Raises):无

netResetReqList()

功能说明:清空需要请求数据的无人机请求列表 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


netAddUavReqList(uavList=[])

功能说明:向需要请求数据的无人机请求列表中添加指定无人机 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
uavList None [] 需要添加到请求列表的无人机ID列表
返回值 (Returns)
异常 (Raises):无

StartReqUavData(uavList=[])

功能说明:启动对指定无人机数据的定时请求任务 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
uavList None [] 需要请求数据的无人机ID列表
返回值 (Returns)
异常 (Raises):无

EndReqUavData()

功能说明:停止所有无人机数据请求任务 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


sendReqUavLoop()

功能说明:执行单次无人机数据请求循环,向请求列表中所有无人机发送数据请求 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


netForwardBuf(buf)

功能说明:将指定缓冲区的数据转发到所有已配置的网络目标 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
buf None 需要转发的二进制数据缓冲区
返回值 (Returns)
异常 (Raises):无

getMavEvent()

功能说明:获取接收到的MAVLink事件数据 参数列表 (Args):无参数 返回值 (Returns):接收到的MAVLink事件对象 异常 (Raises):无


StartNetRecOwn()

功能说明:启动仅接收本机仿真无人机数据的网络接收线程 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


StartNetRec(MultiPort=60000, MultiIP="224.0.0.10")

功能说明:在指定组播地址和端口启动网络数据接收线程 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
MultiPort None 60000 接收数据的组播端口号
MultiIP None 224.0.0.10 接收数据的组播IP地址
返回值 (Returns)
异常 (Raises):无

endNetLoop()

功能说明:停止所有网络接收和数据转发循环线程,关闭网络服务 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无

getMavMsgNet()

功能说明:获取网络接收到的最新MAVLink消息 参数列表 (Args): 无参数 返回值 (Returns):最新接收到的MAVLink消息对象 异常 (Raises):无


getUavData(CopterID)

功能说明:获取指定ID无人机的最新仿真数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
CopterID None 目标无人机的ID编号

返回值 (Returns):指定ID无人机的最新仿真数据 异常 (Raises):无

进阶用法示例

以下示例广播 1 号无人机的数据,同时接收并遍历网络中的其他无人机状态。

参考例程:[RflySim安装路径]\RflySimAPIs\9.RflySimComm\0.ApiExps\e1.RflyNetAPIExps\2.BroadSendData

import time

import NetSimAPIV4
import PX4MavCtrlV4 as PX4MavCtrl
import ReqCopterSim


CopterID = 1
req = ReqCopterSim.ReqCopterSim()
targetIP = req.getSimIpID(CopterID)
req.sendReSimIP(CopterID)

mav = PX4MavCtrl.PX4MavCtrler(CopterID, targetIP)
net = NetSimAPIV4.NetSimAPI(mav)
mav.InitMavLoop()
time.sleep(2)

# 不指定目标 ID 时广播本机无人机数据
net.enUavForward()
time.sleep(2)

# 启动网络接收,收到的数据保存在 UavData 中
net.StartNetRec()
while True:
    for uav in net.UavData:
        print("UAV", uav.CopterID, ":", uav.uavGlobalPos)
    time.sleep(1)

注意事项与避坑指南

  • 转发状态一致性:同时使用enUavForwardenNetForward开启双向转发后,任务结束必须调用对应endNetForward关闭转发,否则会导致下一回合仿真端口占用冲突,无法正常启动通信。
  • 列表修改顺序:添加或修改发送/请求列表前,必须先调用netResetSendListnetResetReqList清空原有配置,否则会重复添加配置项,导致通信数据重复发送、接收端解析出错。
  • 循环请求调用方式sendReqUavLoop是阻塞式循环方法,直接在主线程调用会卡住后续任务逻辑,必须将其放到单独的守护线程中异步运行,才能实现主任务与通信的协同。
  • 请求生命周期管理:启动批量无人机数据请求前必须调用StartReqUavData完成初始化,任务结束后调用EndReqUavData终止请求,未配对调用会导致内存泄漏,长时间仿真后会出现帧率下降甚至程序崩溃。

更新日志

  • 2026-03-03: feat:SDK增加IP处理机制,兼容本地版上云
  • 2025-09-11: fix: 增加Linux端口复用的支持
  • 2024-07-18: fix:更新API主页索引
  • 2024-06-13: fix: 更新组网接口
  • 2024-05-27: fix: 更新通信接口类
  • 2024-05-23: 新增Python网络通信接口的API文档
  • 2024-05-23: fix: 完善网络通信接口类
  • 2024-05-14: fix: 增加缓存,确保通信正常。
  • 2024-05-13: fix: 更新数据转发接口,支持广播飞机状态,并被所有飞机订阅
  • 2024-03-03: fix: 增加对组播的异常处理,防止断网情况下,初始化报错。
  • 2023-10-24: feat: 修复部分bug
  • 2023-10-23: feat: Add all Python common labs