跳转至

IpManager 接口文档

简介

简述:该文件定义了IpManager类,用于统一管理RflySim仿真平台中通信交互所需的IP地址与端口配置。

在RflySim无人机仿真框架中,地面站、飞控、仿真环境等不同组件往往运行在不同的网络节点或进程上,需要统一的IP地址信息管理来保障各模块间的网络通信正常建立。该模块负责维护各类通信链路对应的地址配置信息,为SDK中其他通信控制模块提供统一的地址查询与管理入口,适用于多机仿真、分布式仿真等需要区分不同节点通信地址的场景,简化了IP配置的维护与调用流程。

快速开始

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

from RflySimSDK.ctrl.IpManager import IpManager

# 检查IP配置文件是否存在且路径有效
exists, config_path = IpManager.is_valid()
print(f"IP配置文件状态: 存在={exists}, 路径={config_path}")

# 检测当前程序是否运行在Docker/K8s容器中
in_container = IpManager.is_container()
print(f"当前是否运行在容器中: {in_container}")

# 获取配置文件中的本机IP,获取失败使用默认127.0.0.1
local_ip = IpManager.get_local_ip()
print(f"获取到的本机IP地址为: {local_ip}")

# 也可自定义获取失败时的默认IP
custom_default_ip = "192.168.1.100"
local_ip_custom = IpManager.get_local_ip(custom_default_ip)
print(f"自定义默认IP后的本机IP地址为: {local_ip_custom}")

环境与依赖

  • Python 环境>= 3.8.10
  • 依赖库jsonos
  • 前置准备:调用此接口前,必须先正确配置RflySim SDK的IP连接相关参数并完成SDK环境初始化。

核心接口说明

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

全局常量与枚举定义

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

独立常量


全局/独立函数


IpManager

IP地址管理工具类,用于从配置文件中获取RflySim平台各组件(RflySim3D、CopterSim、QGroundControl)的IP地址,同时支持环境检测和配置校验,适配本地和分布式仿真场景。


is_valid()

功能说明:检查IP配置文件路径是否有效,且配置文件是否存在。 参数列表 (Args): 无参数 返回值 (Returns)

  • tuple: 第一个元素为bool表示配置是否有效,第二个元素为str表示配置文件路径

异常 (Raises)


is_container()

功能说明:检测当前程序是否运行在容器环境(Docker/K8s等)中。 参数列表 (Args): 无参数 返回值 (Returns)

  • bool: 若运行在容器中返回True,否则返回False

异常 (Raises)


get_local_ip(original_ip)

功能说明:从配置文件获取本机IP地址。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
original_ip Any | 否 |127.0.0.1` 查找失败或不需要查找时返回的默认IP地址

返回值 (Returns)

  • str: 本机IP地址字符串

异常 (Raises)

示例

from RflySimSDK.ctrl import IpManager
local_ip = IpManager.get_local_ip()
print("本机IP为:", local_ip)

get_rflysim3d_ip(original_ip)

功能说明:获取RflySim3D的IP地址。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
original_ip Any 127.0.0.1 查找失败或不需要查找时返回的默认IP地址

返回值 (Returns)

  • str: RflySim3D IP地址字符串

异常 (Raises)

示例

from RflySimSDK.ctrl import IpManager
rflysim3d_ip = IpManager.get_rflysim3d_ip()
print("RflySim3D IP为:", rflysim3d_ip)

get_coptersim_ip(copter_id, original_ip)

功能说明:获取指定飞机ID对应的CopterSim IP地址,当CopterSim与SDK不在同一台计算机时,会自动请求CopterSim将数据发送到本机。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
copter_id Any None 目标飞机的ID号
original_ip Any 127.0.0.1 查找失败或不需要查找时返回的默认IP地址

返回值 (Returns)

  • str: CopterSim IP地址字符串

异常 (Raises)

示例

from RflySimSDK.ctrl import IpManager
# 获取ID为1的无人机对应的CopterSim IP
coptersim_ip = IpManager.get_coptersim_ip(1)
print("CopterSim IP为:", coptersim_ip)

get_qgc_ip(original_ip)

功能说明:获取QGroundControl地面站的IP地址。 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
original_ip Any 127.0.0.1 查找失败或不需要查找时返回的默认IP地址

返回值 (Returns)

  • str: QGC IP地址字符串

异常 (Raises)


进阶用法示例

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

针对多无人机协同仿真集群的组网场景,我们可以结合IpManager实现批量IP有效性校验,同时配合多机控制模块完成异构仿真组件的IP地址自动适配。例如针对同时运行PX4仿真、RflySim3D渲染以及QGC地面站的多节点分布式部署场景,可以批量获取不同服务的IP并提前完成连通性校验,避免仿真启动后出现连接失败问题,示例代码如下:

from RflySimSDK.ctrl import IpManager
import concurrent.futures

# 异步批量校验多个仿真组件IP的连通性
def check_ip_valid(service_name, get_ip_method):
    ip = get_ip_method()
    return (service_name, ip, IpManager.is_valid(ip))

# 需要校验的服务列表,覆盖不同类型仿真组件
service_list = [
    ("RflySim3D", IpManager.get_rflysim3d_ip),
    ("CopeliSim仿真", IpManager.get_coptersim_ip),
    ("QGC地面站", IpManager.get_qgc_ip)
]

# 异步批量校验,提升大规模集群场景下的启动效率
with concurrent.futures.ThreadPoolExecutor() as executor:
    futures = [executor.submit(check_ip_valid, name, method) for name, method in service_list]
    for future in concurrent.futures.as_completed(futures):
        service_name, ip, is_valid = future.result()
        if is_valid:
            print(f"{service_name} IP {ip} 连通性正常")
        else:
            print(f"警告:{service_name} IP {ip} 无法连通,请检查网络配置")

# 获取本机IP用于跨设备分布式仿真组网
local_ip = IpManager.get_local_ip()
print(f"本机组网IP为:{local_ip}")

该方案实现了异步批量IP校验,能够适配多机分布式集群仿真、异构组件协作的复杂场景,提前排查网络配置问题。

注意事项与避坑指南

  • 多网卡环境IP获取异常get_local_ip()方法默认优先获取活跃网卡的IP,如果设备存在多个物理网卡或虚拟网卡(如VPN、Docker虚拟网卡),可能会获取到错误的内网IP,需要手动根据网段过滤确认正确的组网IP。
  • 容器部署网络判断失效:如果将仿真组件部署在Docker容器中,is_container()方法仅能识别默认网络配置下的容器环境,自定义桥接网络或主机网络模式下可能无法正确识别,需要手动配置IP映射规则。
  • IP有效性校验范围限制is_valid()方法仅校验IP格式是否正确与基础连通性,无法校验对应端口是否开放或仿真服务是否正常启动,连通性校验通过后仍需添加服务启动状态判断逻辑。
  • 依赖环境配置错误IpManager类的所有方法依赖RflySim核心配置文件读取IP信息,如果SDK初始化失败或配置文件缺失,所有获取IP的方法都会返回默认占位地址,使用前需要确认SDK已经完成正确初始化。

更新日志

  • 2026-03-03: feat:SDK增加IP处理机制,兼容本地版上云