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 - 依赖库:
os、ppadb.client、re、serial、signal、subprocess、sys、time - 前置准备:调用此接口前,需要确保已经正确连接设备并完成串口或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库