13 KiB
13 KiB
ASR5515机器人控制应用项目分析
项目概述
ASR5515机器人控制应用是一个基于Android平台的多功能机器人控制系统,专为智能机器人硬件平台设计。该应用集成了面部表情动画、串口通信、WebSocket网络通信、音频处理和硬件控制等多个核心功能模块,形成了一个完整的机器人交互控制系统。
核心特性
- 面部表情系统:支持动态表情动画播放和管理
- 串口硬件通信:与ASR5515芯片进行实时数据交换
- 网络实时通信:通过WebSocket与云端AI服务进行语音交互
- 音频处理引擎:集成Opus编解码器实现高质量音频传输
- 硬件控制系统:GPIO和电机精确控制
- 触摸检测支持:内核级头部触摸检测
技术架构
架构概览
graph TB
subgraph "应用层"
MainActivity[MainActivity主控制器]
RobotFaceManager[面部动画管理器]
end
subgraph "业务逻辑层"
SerialPortHelper[串口通信助手]
WebSocketManager[WebSocket管理器]
OpusUtils[音频编解码工具]
GpioManager[GPIO管理器]
MotorController[电机控制器]
end
subgraph "协议层"
ASR5515Protocol[ASR5515通信协议]
WebSocketProtocol[WebSocket消息协议]
end
subgraph "JNI接口层"
OpusJNI[Opus音频库JNI]
end
subgraph "硬件抽象层"
SerialPort[串口硬件接口]
GPIO[GPIO硬件接口]
AudioHardware[音频硬件接口]
end
subgraph "内核层"
TouchDriver[头部触摸检测驱动]
end
MainActivity --> RobotFaceManager
MainActivity --> SerialPortHelper
MainActivity --> WebSocketManager
MainActivity --> OpusUtils
MainActivity --> GpioManager
MainActivity --> MotorController
SerialPortHelper --> ASR5515Protocol
WebSocketManager --> WebSocketProtocol
OpusUtils --> OpusJNI
SerialPortHelper --> SerialPort
GpioManager --> GPIO
OpusUtils --> AudioHardware
TouchDriver --> GPIO
分层架构设计
系统采用分层架构模式,从上至下分为:
层级 | 职责 | 主要组件 |
---|---|---|
应用层 | UI交互和业务流程控制 | MainActivity, RobotFaceAnimationManager |
业务逻辑层 | 核心功能实现和管理 | 各种Manager和Helper类 |
协议层 | 通信协议定义和解析 | ASR5515Protocol, WebSocket协议 |
JNI接口层 | Java与C++代码桥接 | Opus音频库JNI |
硬件抽象层 | 硬件接口封装 | SerialPort, GPIO, Audio接口 |
内核层 | 底层驱动程序 | 头部触摸检测驱动 |
核心功能模块
1. 机器人面部动画系统
模块架构
classDiagram
class RobotFaceAnimationManager {
-Context context
-ImageView targetView
-Handler uiHandler
-Map~Integer, AnimationDrawable~ animationCache
+loadFaceAnimation(int animationId)
+setSpeed(float speed)
+release()
-preloadAnimations()
}
class MainActivity {
-RobotFaceAnimationManager animationManager
-Handler handler
+playRandomFaceAnimation()
}
MainActivity --> RobotFaceAnimationManager
核心特性
- 动画资源管理:支持预加载和缓存机制
- 随机表情切换:每20秒自动切换随机表情
- 动画速度控制:可动态调整播放速度
- 内存优化:智能缓存和资源释放
2. 串口通信系统
通信架构
sequenceDiagram
participant App as MainActivity
participant Manager as ASR5515DeviceManager
participant Helper as SerialPortHelper
participant Protocol as ASR5515Protocol
participant Device as ASR5515硬件
App->>Manager: 初始化设备管理器
Manager->>Helper: 创建串口连接
Helper->>Device: 打开串口(/dev/ttyS3)
App->>Manager: 发送设备检查请求
Manager->>Protocol: 创建检查命令帧
Protocol->>Helper: 发送二进制数据
Helper->>Device: 写入串口数据
Device->>Helper: 返回响应数据
Helper->>Protocol: 解析响应帧
Protocol->>Manager: 返回设备信息
Manager->>App: 触发回调通知
协议规范
命令类型 | 命令字 | 功能描述 |
---|---|---|
设备检查 | 0x0065/0x0066 | 查询设备基本信息 |
设备重启 | 0x0067/0x0068 | 控制设备重启 |
佩戴检测 | 0x0105/0x0106 | 检测设备佩戴状态 |
心率测量 | 0x00C9/0x00CA | 心率数据采集 |
血氧测量 | 0x00CB/0x00CC | 血氧数据采集 |
ECG测量 | 0x00CD/0x00CE | 心电图数据采集 |
数据帧格式
[命令字(2字节)] + [序列号(2字节)] + [数据长度(2字节)] + [数据载荷(N字节)]
3. WebSocket网络通信
通信流程
stateDiagram-v2
[*] --> Disconnected
Disconnected --> Connecting: connect()
Connecting --> Connected: onOpen()
Connecting --> Disconnected: onError()
Connected --> Authenticated: sendHello()
Authenticated --> InCall: sendStart()
InCall --> Listening: sendListen()
InCall --> Playing: receiveBinaryAudio()
Listening --> Playing: AI开始说话
Playing --> Listening: AI说话结束
InCall --> Authenticated: sendEnd()
Connected --> Disconnected: disconnect()
消息协议
消息类型 | 方向 | 描述 |
---|---|---|
hello | 客户端→服务端 | 建立连接握手 |
start | 客户端→服务端 | 开始语音会话 |
listen | 客户端→服务端 | 开始监听用户语音 |
stt | 服务端→客户端 | 语音识别结果 |
tts | 服务端→客户端 | 语音合成结果 |
abort | 客户端→服务端 | 中断AI回答 |
end | 客户端→服务端 | 结束会话 |
4. 音频处理系统
音频处理流程
flowchart LR
A[麦克风输入] --> B[AudioRecord]
B --> C[PCM数据采集]
C --> D[Opus编码]
D --> E[WebSocket发送]
F[WebSocket接收] --> G[Opus解码]
G --> H[PCM数据]
H --> I[AudioTrack播放]
I --> J[扬声器输出]
subgraph "编解码参数"
K[采样率: 16000Hz<br/>通道: 单声道<br/>位深: 16bit<br/>帧大小: 960samples]
end
音频参数配置
参数 | 值 | 说明 |
---|---|---|
采样率 | 16000 Hz | 语音通信标准采样率 |
声道配置 | 单声道 | 优化传输效率 |
音频格式 | 16位PCM | 标准音频格式 |
Opus帧大小 | 960 samples | 60ms音频帧 |
比特率 | 32000 bps | 平衡质量与带宽 |
5. 硬件控制系统
GPIO控制架构
classDiagram
class GpioManager {
+exportGpio(int pin)
+setDirection(int pin, String direction)
+setValue(int pin, int value)
+getValue(int pin)
+unexportGpio(int pin)
}
class MotorController {
-boolean isInitialized
+init()
+controlVerticalCalibration()
+rotateVerticalToAngle(int direction, int speed, int angle)
+getVerticalCurrentAngle()
+getVerticalMaxAngle()
+getVerticalMinAngle()
+release()
}
GpioManager <-- MotorController
控制功能特性
GPIO管理
- 引脚导出和配置
- 方向设置(输入/输出)
- 电平控制(高/低)
- 蓝牙电源管理(GPIO 75)
电机控制
- 垂直运动校准
- 角度精确控制
- 传感器状态监控
- 最大/最小角度检测
数据流架构
音频数据流
flowchart TD
A[用户语音] --> B[AudioRecord采集]
B --> C[PCM数据缓冲]
C --> D[Opus编码器]
D --> E[WebSocket发送]
E --> F[云端AI处理]
F --> G[AI语音响应]
G --> H[WebSocket接收]
H --> I[Opus解码器]
I --> J[PCM播放缓冲]
J --> K[AudioTrack播放]
K --> L[扬声器输出]
M[麦克风控制] --> |状态切换| B
N[播放状态检测] --> |自动切换| M
硬件控制数据流
flowchart LR
A[应用层指令] --> B[设备管理器]
B --> C[协议封装]
C --> D[串口发送]
D --> E[ASR5515硬件]
E --> F[传感器数据]
F --> G[串口接收]
G --> H[协议解析]
H --> I[数据处理]
I --> J[回调通知]
J --> K[UI更新]
性能优化策略
内存管理
- 动画缓存策略:预加载和智能释放
- 音频缓冲区优化:动态调整缓冲区大小
- 弱引用使用:避免Activity内存泄漏
- 资源及时释放:在onDestroy中清理所有资源
线程优化
- 单独的音频处理线程:避免阻塞主线程
- 异步设备通信:串口操作在后台线程执行
- UI更新优化:使用Handler进行线程间通信
电源管理
- 动态帧率控制:根据电量和温度调整动画帧率
- 智能麦克风控制:AI说话时自动关闭麦克风
- GPIO电源管理:及时关闭不需要的硬件模块
测试策略
单元测试覆盖
- 协议解析测试:验证ASR5515协议的正确性
- 音频编解码测试:确保Opus编解码质量
- GPIO控制测试:验证硬件控制的准确性
- WebSocket通信测试:测试网络连接稳定性
集成测试场景
- 端到端语音通信:完整的语音交互流程
- 硬件联调测试:与实际硬件设备的集成测试
- 压力测试:长时间运行和高频操作测试
- 异常处理测试:网络断开、硬件故障等异常情况
性能测试指标
- 音频延迟:端到端语音延迟 < 200ms
- 内存使用:稳定运行内存占用 < 100MB
- CPU使用率:正常负载下CPU占用 < 30%
- 电池续航:连续运行时间 > 8小时| 声道配置 | 单声道 | 优化传输效率 | | 音频格式 | 16位PCM | 标准音频格式 | | Opus帧大小 | 960 samples | 60ms音频帧 | | 比特率 | 32000 bps | 平衡质量与带宽 |
5. 硬件控制系统
GPIO控制架构
classDiagram
class GpioManager {
+exportGpio(int pin)
+setDirection(int pin, String direction)
+setValue(int pin, int value)
+getValue(int pin)
+unexportGpio(int pin)
}
class MotorController {
-boolean isInitialized
+init()
+controlVerticalCalibration()
+rotateVerticalToAngle(int direction, int speed, int angle)
+getVerticalCurrentAngle()
+getVerticalMaxAngle()
+getVerticalMinAngle()
+release()
}
GpioManager <-- MotorController
控制功能特性
GPIO管理
- 引脚导出和配置
- 方向设置(输入/输出)
- 电平控制(高/低)
- 蓝牙电源管理(GPIO 75)
电机控制
- 垂直运动校准
- 角度精确控制
- 传感器状态监控
- 最大/最小角度检测
数据流架构
音频数据流
flowchart TD
A[用户语音] --> B[AudioRecord采集]
B --> C[PCM数据缓冲]
C --> D[Opus编码器]
D --> E[WebSocket发送]
E --> F[云端AI处理]
F --> G[AI语音响应]
G --> H[WebSocket接收]
H --> I[Opus解码器]
I --> J[PCM播放缓冲]
J --> K[AudioTrack播放]
K --> L[扬声器输出]
M[麦克风控制] --> |状态切换| B
N[播放状态检测] --> |自动切换| M
硬件控制数据流
flowchart LR
A[应用层指令] --> B[设备管理器]
B --> C[协议封装]
C --> D[串口发送]
D --> E[ASR5515硬件]
E --> F[传感器数据]
F --> G[串口接收]
G --> H[协议解析]
H --> I[数据处理]
I --> J[回调通知]
J --> K[UI更新]
性能优化策略
内存管理
- 动画缓存策略:预加载和智能释放
- 音频缓冲区优化:动态调整缓冲区大小
- 弱引用使用:避免Activity内存泄漏
- 资源及时释放:在onDestroy中清理所有资源
线程优化
- 单独的音频处理线程:避免阻塞主线程
- 异步设备通信:串口操作在后台线程执行
- UI更新优化:使用Handler进行线程间通信
电源管理
- 动态帧率控制:根据电量和温度调整动画帧率
- 智能麦克风控制:AI说话时自动关闭麦克风
- GPIO电源管理:及时关闭不需要的硬件模块
测试策略
单元测试覆盖
- 协议解析测试:验证ASR5515协议的正确性
- 音频编解码测试:确保Opus编解码质量
- GPIO控制测试:验证硬件控制的准确性
- WebSocket通信测试:测试网络连接稳定性
集成测试场景
- 端到端语音通信:完整的语音交互流程
- 硬件联调测试:与实际硬件设备的集成测试
- 压力测试:长时间运行和高频操作测试
- 异常处理测试:网络断开、硬件故障等异常情况
性能测试指标
- 音频延迟:端到端语音延迟 < 200ms
- 内存使用:稳定运行内存占用 < 100MB
- CPU使用率:正常负载下CPU占用 < 30%
- 电池续航:连续运行时间 > 8小时