iB86/.qoder/quests/project-analysis.md

795 lines
13 KiB
Markdown
Raw Permalink Normal View History

# ASR5515机器人控制应用项目分析
## 项目概述
ASR5515机器人控制应用是一个基于Android平台的多功能机器人控制系统专为智能机器人硬件平台设计。该应用集成了面部表情动画、串口通信、WebSocket网络通信、音频处理和硬件控制等多个核心功能模块形成了一个完整的机器人交互控制系统。
### 核心特性
- **面部表情系统**:支持动态表情动画播放和管理
- **串口硬件通信**与ASR5515芯片进行实时数据交换
- **网络实时通信**通过WebSocket与云端AI服务进行语音交互
- **音频处理引擎**集成Opus编解码器实现高质量音频传输
- **硬件控制系统**GPIO和电机精确控制
- **触摸检测支持**:内核级头部触摸检测
## 技术架构
### 架构概览
```mermaid
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. 机器人面部动画系统
#### 模块架构
```mermaid
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. 串口通信系统
#### 通信架构
```mermaid
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网络通信
#### 通信流程
```mermaid
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. 音频处理系统
#### 音频处理流程
```mermaid
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控制架构
```mermaid
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
**电机控制**
- 垂直运动校准
- 角度精确控制
- 传感器状态监控
- 最大/最小角度检测
## 数据流架构
### 音频数据流
```mermaid
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
```
### 硬件控制数据流
```mermaid
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控制架构
```mermaid
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
**电机控制**
- 垂直运动校准
- 角度精确控制
- 传感器状态监控
- 最大/最小角度检测
## 数据流架构
### 音频数据流
```mermaid
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
```
### 硬件控制数据流
```mermaid
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小时