跳转至

RflyADBLib 接口文档

简介

简述:该文件提供无人机集群通信所需的ADB连接、串口通信与WiFi控制功能,支持集群无人机下位机设备的连接管理与指令交互。

本模块是RflySim无人机集群仿真与实飞系统的配套通信工具模块,针对实飞场景下多无人机机载设备的统一管理开发,封装了不同通信方式的基础操作。支持通过ADB、串口、WiFi三种主流通信方式对接机载嵌入式设备,可完成设备连接状态检测、连接启动与断开、网络状态检测、设备地址识别等常用操作,能够为集群任务的下位机指令下发、状态回传提供底层通信支撑。

该模块主要适用于实飞无人机集群的设备调试、任务部署场景,开发者可以基于本模块快速实现多机载设备的批量通信管理,无需从零搭建不同通信方式的底层逻辑,适配RflySim平台的集群开发流程。

快速开始

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

from RflySimSDK.swarm import RflyADBLib

# 自定义发送命令函数,可根据实际ADB连接方式修改实现
def my_send_command(cmd):
    """示例发送命令函数,实际使用时替换为你的ADB命令发送实现"""
    import subprocess
    result = subprocess.check_output(cmd, shell=True, text=True)
    print(f"命令输出: {result}")
    return result

# 1. 初始化wifi命令控制对象,传入自定义的命令发送函数
wifi_ctrl = RflyADBLib.wifi_command(send_command_function=my_send_command)

# 2. 打开板载wifi
wifi_ctrl.open_wifi()

# 3. 获取当前wifi连接状态
wifi_state = wifi_ctrl.statu_wifi()
print(f"当前wifi状态: {wifi_state}")

# 4. 打印当前连接的wifi名称(SSID)
wifi_ctrl.current_wifi()

环境与依赖

  • Python 环境>= 3.8.10
  • 依赖库osppadb.clientreserialsignalsubprocesssystime
  • 前置准备:调用此接口前,需要确保已经正确连接设备并完成串口或adb、wifi相关通信环境的配置准备。

核心接口说明

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

全局常量与枚举定义

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

独立常量


全局/独立函数

extract_specific_mac(text, interface_name="wlan0")

功能说明:从给定文本中提取指定网络接口对应的MAC地址。 参数列表

  • text (Any): 包含网络接口信息的源文本,通常为系统网络配置查询输出
  • interface_name (Any): 目标网络接口名称,默认为wlan0

返回值

  • str | None: 成功提取则返回对应MAC地址字符串,未找到则返回None

异常: 无


ping_ip(ip_address)

功能说明:检测指定IP地址是否能通过ping命令连通。 参数列表

  • ip_address (Any): 待检测连通性的目标IP地址

返回值

  • bool: ping成功返回True,否则返回False

异常: 无


start_adb(path)

功能说明:启动ADB(Android调试桥)服务,可指定ADB工具所在路径。 参数列表

  • path (Any): ADB可执行文件所在的目录路径

返回值

  • None: 无返回值

异常: 无


check_device_connected()

功能说明:检查是否有Android设备通过ADB成功连接。 参数列表: 无 返回值

  • bool: 有设备连接返回True,否则返回False

异常: 无


stop_adb()

功能说明:停止ADB服务,关闭连接。 参数列表: 无 返回值

  • None: 无返回值

异常: 无


signal_handler(sig, frame)

功能说明:信号处理函数,用于捕获处理程序退出信号,执行资源清理操作后退出程序。 参数列表

  • sig (Any): 待处理的信号编号
  • frame (Any): 当前栈帧对象

返回值

  • None: 无返回值

异常: 无


SerialCommunication

用于通过串口实现无人机端与计算机端的通信,支持串口命令发送、数据读取和串口连接关闭,适用于RflySim集群开发场景下的串口通信。

__init__(port, baudrate, debug_mode)

功能说明:初始化串口通信对象,打开指定参数的串口连接 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
port str "COM4" 串口设备名称,Windows系统一般为COMx格式,Linux系统一般为/dev/ttyUSBx格式
baudrate int 115200 串口通信波特率
debug_mode bool False 是否开启调试模式,开启后会输出通信调试信息

返回值 (Returns)

  • SerialCommunication 实例对象

异常 (Raises): 无


send_command(command)

功能说明:向串口发送指定的命令字符串 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
command str - 需要发送的串口命令字符串

返回值 (Returns)

异常 (Raises): 无


read_serial_data()

功能说明:从串口读取返回的响应数据 参数列表 (Args): 无 返回值 (Returns)

  • str: 读取到的串口数据字符串

异常 (Raises): 无


close_serial()

功能说明:关闭当前打开的串口连接,释放串口资源 参数列表 (Args): 无 返回值 (Returns)

异常 (Raises): 无

示例

# 初始化串口通信对象
serial_comm = SerialCommunication(port="COM4", baudrate=115200, debug_mode=True)
# 发送AT指令
serial_comm.send_command("AT")
# 读取串口返回数据
response = serial_comm.read_serial_data()
print(response)
# 关闭串口连接
serial_comm.close_serial()

adb_communication

用于实现基于ADB协议的无人机设备通信,提供ADB命令发送和通信管理功能,适用于群控无人机场景中移动设备的交互通信。

__init__(debug_mode=False)

功能说明:初始化ADB通信对象,配置调试模式选项 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
debug_mode bool False 是否开启调试模式,开启后会输出额外的调试日志信息

返回值 (Returns)

  • adb_communication 实例对象

异常 (Raises): 无


send_command(cmd)

功能说明:向连接的ADB设备发送指定命令,并获取命令执行结果 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
cmd str - 需要发送执行的ADB命令字符串

返回值 (Returns)

  • str: ADB命令执行后的输出结果

异常 (Raises): 无

示例

# 初始化ADB通信对象
adb_comm = adb_communication(debug_mode=True)
# 发送获取设备列表的ADB命令
result = adb_comm.send_command("devices")
print(result)

wifi_command

用于实现基于WiFi通道的集群无人机指令发送管理,依赖传入的发送回调函数完成指令传输。

__init__(send_command_function)

功能说明:构造WiFi指令发送管理对象,传入指令发送的回调处理函数。 参数列表 (Args)

参数名 类型 说明
send_command_function None 实际发送WiFi指令的回调函数,用于执行具体的指令下发操作

返回值 (Returns):无返回值,构造对象实例。 异常 (Raises):无异常抛出。

open_wifi()

功能说明:打开wifi 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


current_wifi()

功能说明:检查无线网络接口(wlan0)的连接状态,并打印出当前连接的无线网络名称(SSID) 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


statu_wifi()

功能说明:获取当前wifi的状态 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


close_wifi()

功能说明:关闭wifi 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


get_ip()

功能说明:获取连接wifi的IP 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


create_wifihot(SSID="AP_150_HOT", PASSWD="droneyee", CHANNEL=11)

功能说明:创建热点 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
SSID Any AP_150_HOT 热点名称
PASSWD Any droneyee 热点密码
CHANNEL Any 11 热点信道

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


modify_wifihot_ip(IPADDRESS=None)

功能说明:修改热点IP,不建议使用 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
IPADDRESS Any None 热点新IP地址

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


get_wifihot_passwd()

功能说明:获取热点的密码 参数列表 (Args): 无参数 返回值 (Returns):无返回值 异常 (Raises):无


connect_wifi(WIFI_SSID=None, WIFI_PASSWD=None)

功能说明:连接wifi 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
WIFI_SSID Any None 待连接WiFi的名称(SSID)
WIFI_PASSWD Any None 待连接WiFi的密码

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


echo_cmd(cmd=None, mode="0")

功能说明:进行相机参数设置,cmd为追加的命令,mode=0为追加,1为覆盖 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
cmd Any None 追加的设置命令
mode Any 0 写入模式,0为追加,1为覆盖

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


replace_cmd(cmd=None, place=None, path=None)

功能说明:cmd为期望替换的命令,place代表替换内容的行数,path为修改文件的路径 注:对camera_upd/config.yaml修改时,对应位置为: enable:5/13 ip:9/17 compress_rate:8/16 相机路径:/home/marvsmart/camera_udp/config.yaml 自启动路径:/etc/./rc.local 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
cmd Any None 期望替换的目标命令内容
place Any None 需要替换内容所在的行数
path Any None 需要修改的文件的路径

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


replace_cam_ip(ip=None, cam=None)

功能说明:修改相机IP,其中IP是期望的IP(字符串格式),cam是修改哪个相机(0或1) 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
ip Any None 期望设置的相机IP,字符串格式
cam Any None 需要修改的相机编号,取值为0或1

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


replace_cam_compress(rate=None, cam=None)

功能说明:修改相机图片压缩率,其中rate是期望的图片压缩率,cam是修改哪个相机(0或1) 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
rate Any None 期望设置的图片压缩率
cam Any None 需要修改的相机编号,取值为0或1

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


replace_cam_ehable(enable=None, cam=None)

功能说明:修改相机使能状态,其中enable是期望的相机使能状态,cam是修改哪个相机(0或1) 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
enable Any None 期望设置的相机使能状态
cam Any None 需要修改的相机编号,取值为0或1

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


replace_mav_link(ip=None, port="15502")

功能说明:设置mavlink回传的ip地址和端口 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
ip Any None mavlink回传的目标IP地址
port Any 15502 mavlink回传的目标端口

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

aotuStartWIFI(SSID="AP_150_HOT", PASSWD="droneyee", CHANNEL=11, enable=1)

功能说明:用于设置自动启动WIFI热点或关闭 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
SSID AP_150_HOT WIFI热点名称
PASSWD droneyee WIFI热点密码
CHANNEL 11 WIFI热点信道
enable 1 1表示开启自动启动热点,0表示关闭

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


openCam()

功能说明:打开板载相机服务 参数列表 (Args):无参数 返回值 (Returns):无 异常 (Raises):无


getMac()

功能说明:获取开发板无线网卡的MAC地址 参数列表 (Args):无参数 返回值 (Returns):无线网卡的MAC地址字符串 异常 (Raises):无


setStaticIp(SSID, ip)

功能说明:为指定SSID的WIFI连接设置静态IP地址 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
SSID 需要设置静态IP的WIFI名称
ip 要设置的静态IP地址

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


pingIp(ip)

功能说明:ping指定IP地址,检测网络连通性 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
ip 需要检测连通性的目标IP地址

返回值 (Returns):ping操作的输出结果 异常 (Raises):无

进阶用法示例

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

import asyncio
from RflySimSDK.swarm import SerialCommunication, wifi_command

# 多类协作+异步批量配置无人机机群WiFi热点场景
async def config_swarm_wifi_async(serial_dev_list, hot_ip_prefix, hot_passwd):
    # 存储所有已连接设备对象,方便后续统一关闭释放资源
    connected_devices = []
    for idx, dev_port in enumerate(serial_dev_list):
        # 同时初始化串口通信和WiFi控制类
        serial_comm = SerialCommunication(dev_port, baudrate=115200)
        wifi_comm = wifi_command(serial_comm)
        connected_devices.append((serial_comm, wifi_comm))

        # 批量配置每个节点的热点IP和密码
        new_hot_ip = f"{hot_ip_prefix}.{idx+10}"
        # 异步提交配置任务,避免单设备阻塞整体流程
        asyncio.create_task(config_single_device(wifi_comm, new_hot_ip, hot_passwd))

    # 等待所有配置完成,统一资源释放
    await asyncio.sleep(10)
    for serial_comm, _ in connected_devices:
        serial_comm.close_serial()

async def config_single_device(wifi_comm: wifi_command, target_ip, passwd):
    # 先关闭现有WiFi连接,再创建自定义热点
    wifi_comm.close_wifi()
    # 修改热点IP后生效配置
    wifi_comm.modify_wifihot_ip(target_ip)
    # 创建热点并验证配置成功
    wifi_comm.create_wifihot()
    current_passwd = wifi_comm.get_wifihot_passwd()
    print(f"热点创建完成,当前密码:{current_passwd},配置IP:{target_ip},当前状态:{wifi_comm.statu_wifi()}")

if __name__ == "__main__":
    # 假设有4台无人机,批量初始化热点
    device_ports = ["/dev/ttyUSB0", "/dev/ttyUSB1", "/dev/ttyUSB2", "/dev/ttyUSB3"]
    asyncio.run(config_swarm_wifi_async(device_ports, "192.168.1", "RflySwarm2024"))

注意事项与避坑指南

  • 串口资源释放:使用SerialCommunication类完成通信后,必须调用close_serial方法释放串口资源,否则会导致后续程序无法打开同一串口设备,引发权限占用报错。
  • WiFi配置操作顺序:修改无人机热点IP前需要先调用close_wifi关闭现有连接或热点,修改完成后再重新调用create_wifihot才能让新IP配置生效,直接修改不会更新生效。
  • WiFi状态读取说明:调用statu_wifi获取WiFi连接状态前,需要先调用current_wifi刷新当前连接信息,否则会返回上一次的缓存状态,导致状态判断错误。
  • ADB通信权限校验:使用adb_communication类的send_command发送无人机控制指令前,需要确保电脑已经开启ADB调试权限、授权了设备访问,否则指令会被设备拒绝,无返回结果。

更新日志

  • 2024-08-29: 修改为自动获取路径方式
  • 2024-08-20: fix:完善API索引
  • 2024-08-15: fix: 更新adb库