# 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
通道: 单声道
位深: 16bit
帧大小: 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小时