遥控器核心逻辑是:手柄MCU固件负责极速响应物理输入,Android手机负责富媒体交互与中继,机器狗负责核心运动控制。
1、系统软件可划分为三个核心层级,通过异构协议进行耦合
1.1 感知输入层 (MCU 固件):物理按键/摇杆信号采集 -> 协议封装
1.2 交互与中转层 (Android App):数据转发 -> UI 渲染 -> 视频流解码。
1.3 核心执行层 (Linux Robot OS):指令解析 -> 运动学计算 -> 电机驱动 & 视频流推流。
2、各模块详细技术解决方案
2.1 遥控器手柄(MCU 固件)
硬件选型:推荐 STM32F4 或 ESP32-S3。
技术方案:
协议选型:USB HID (推荐) ,将手柄伪装成标准的“游戏手柄”。
优点: Android 系统原生支持,插上即用,延迟最低。
采集逻辑:
摇杆:12-bit ADC 采样,实现死区补偿和指数映射算法。
按键:GPIO 中断或 10ms 定时扫描,硬件消抖。
通信:通过 USB-C 接口与手机连接(从设备模式)。
- 2 Android 手机设备(控制中心)
技术栈选型:Kotlin + NDK (C++)。
UI 框架:Jetpack Compose。
高性能组件:视频流渲染走 C++ (GStreamer/FFmpeg) 结合 OpenGLES/Vulkan,通过 JNI 与 Kotlin 通信,避免 Java 层的 GC 导致视频卡顿。
功能模块:
InputDispatcher 监听:捕获 GenericMotionEvent和KeyEvent。
网络引擎:使用 Netty (UDP) 进行控制信令传输,保证高并发和低延迟。
图传模块:集成 GStreamer Android SDK。
2.3 机器狗端 (Linux OS )
技术方案:
指令接入:编写一个 joy_bridge 节点,接收 Android 发来的 UDP 包,并转换为 ROS2 标准的 sensor_msgs/msg/Joy 或自定义控制指令。
图传推流:使用 Rockchip MPP (或 Nvidia NVENC) 硬件编码器,将摄像头数据压缩为 H.264,封装为 RTP 包发出。
安全看门狗:在控制器节点设置 Timeout 检测,若 200ms 未收到遥控器包,自动进入保护状态。
3、 Android 端遥控软件选型与 AOSP 修改建议
3.1 软件代码选型建议
四足狗状态数据刷新极快(IMU、足端力反馈等),Jetpack Compose 的重组机制配合 StateFlow 能更高效地处理高频数据。
通信协议选型:使用 Protobuf。在 Android 和 Linux 之间定义统一的 .proto 文件,确保按键事件到机器狗解析过程中的数据紧凑且无类型偏差。
3.2. 是否需要修改 Android AOSP?
一般情况下不需要修改 AOSP 底层,但需要进行“系统级应用”权限配置。
3.2.1 无需修改的情况:
如果手柄走 标准 USB HID 协议,Android 系统会将按键自动识别为 KeyEvent。Android App 只需要在 onKeyDown 或 onGenericMotionEvent 中监听即可。
3.2.2 建议修改/配置的情况:
沉浸式模式与按键拦截:如果你希望屏蔽手机的“返回键”、“Home键”以防止操作员误触退出,通常需要通过 Device Administration (设备管理器) 模式 或修改 AOSP 的 PhoneWindowManager 来禁用系统导航栏。
USB 自动拉起:在 AOSP 的 UsbHostManager 中配置特定的 vendor-id,实现手柄一插上,你的 App 自动弹出并获得 USB 权限,无需用户点确认框。
驱动优化:如果物理手柄有特殊的震动反馈或背光灯控制(非标准 HID 协议),则需要在 Linux Kernel 层添加对应的驱动代码。
4、完整解决方案工作流 (时序逻辑)
4.1 初始化:手柄 MCU 通过 USB 握手,Android 识别为输入设备。
Android App 通过 Wi-Fi Direct (P2P) 与机器狗建立长连接。
4.2 输入采集:操作员按下按键,MCU 毫秒级上报 HID 报文。
4.3 App 处理:
控制链:App 接收输入 -> 转换指令 -> UDP 异步发送(加密/校验)。
反馈链:GStreamer 接收 RTP 包 -> 硬件解码 -> 渲染到 Compose AndroidView 画布。
4.4 机器狗执行:机器狗节点接收 UDP 指令 -> 注入运动学控制循环 (Locomotion Loop) -> 电机转动。
5、 核心技术指标建议
端到端控制延迟:应控制在 30ms 以内。
图传延迟:在 1080P/30fps 下,应控制在150ms以内。
抗丢包率:UDP 通道需配合简单的 ARQ (自动重传请求) 或前向纠错 (FEC),保证在 Wi-Fi 信号抖动时控制不中断。