我买的是机器人吸尘器,不是云间谍
Source: Dev.to
(请提供您想要翻译的具体文本内容,我将为您翻译成简体中文。)
背景:购买二手机器人
我没有购买这款机器人吸尘器,因为我并不急需自动清洁。
- 保修
- “别碰它,可能会弄坏”的心理障碍
- 必须“物有所值”才能进行实验的期望
全新的设备感觉像是从制造商那里借来的东西。
为什么选择此模型
机器人是 小米机器人拖把 Essential。
期望 vs 现实
- 机器人工作得很好。
- 用保险杠碰撞障碍物。
- 从轮编码器计算位置。
- 使用基本的方向和运动传感器。
没有 LiDAR。没有魔法。只有接触、数学和重试。而且效果出奇地好。
机械问题与维修
轮子问题
机器人已使用,轮子出现磨损。我的修复方法简单但有效:
- 给金属衬套加润滑油。
- 用一小管氰基丙烯酸酯胶(强力胶)填补受损的塑料座。
- 等待约 2 小时以完全固化。
- 拆下衬套并重新安装。
结果: 装配紧密,无晃动,轮子恢复正常。这是我首次确认该设备可修复的信号。
湿滑表面牵引(未解决)
仍有一个机械问题未解决:在湿滑表面的牵引力。
- 可能原因:下压力不足。
- 我正在进行实验,目标是在不超负荷电机的前提下实现可靠的牵引力。
湿式清洁系统
水喷嘴堵塞。趁机我还修复了为拖把布供水的小型水泵。
从按钮到控制:真正问题的起点
在修复机械问题后,机器人工作了……几乎。
- 走到它面前。
- 按下实体按钮。
- 看着它拼命尝试连接 Wi‑Fi,最终放弃。
恢复出厂设置也没有帮助。机器人想要 Wi‑Fi,但从未成功加入。
小米机器人拖把 Essential 内部结构
机器人有明确的内部层级:两个“大脑”。
电机控制大脑(MCU)
- 轮子编码器
- 碰撞传感器
- 陀螺仪和方向
- 导航逻辑
- 地图构建
基于可用的技术数据和对类似小米机器人的分析,这款 MCU 通常具备:
- 用于控制逻辑的 32 位 RISC 核心
- 专用 DSP 核心用于实时传感器处理
- 为导航和类似 SLAM 的计算优化的硬件块
- 用于固件和地图的外部闪存
MCU 并不关心 Wi‑Fi;它不了解云是什么。
连接大脑(ESP32)
- Wi‑Fi 连接
- 与小米云的通信
- OTA(空中)更新
- 转发指令和权限
它 不 驱动电机。
倾听而非猜测:UART 抓取
UART5 RX / TX → MCU
UART7 TX / RX → ESP32
为什么不直接使用 ESP32?因为我需要同时使用三个 UART 端口:
- MCU ↔ ESP32 通信
- ESP32 ↔ MCU 通信
- MCU 诊断端口(在释放 UART5 后再连接)
一块 Orange Pi 静默地嗅探所有流量:不注入、不修改,仅仅是观察。我在同一个终端窗口中同时读取诊断 UART 和官方 ESP32 UART 的数据。
观察
- 检测到错误指令。
- 诊断 UART 显示电机电流、编码器数值、陀螺仪读数以及内部标志。
启动清扫时的诊断输出示例:
Oc[3]=410 Ic[3]=-43 k p=101
Oc[3]=363 Ic[3]=-58
p offsg 213
gyrod=10029
sg 181
crc=15fb
STL start clean
default map enable:1
通过官方 UART 发送给 MCU 的指令会产生数值形式的状态码(ok、error…)。
MCU -> ESP32 : platform_name
ESP32 -> MCU : ok
MCU -> ESP32 : firmware_id
ESP32 -> MCU : ok
MCU -> ESP32 : mac_device ?
ESP32 -> MCU :
MCU -> ESP32 : “Can I request OTA updates?”
ESP32 -> MCU : ok
当明确 MCU 只是在向 ESP32 请求许可时,解决方案显而易见:采用最小化的 ESP32 固件架构,提供一个用于调试的串行终端、一个记录所有 UART 流量的日志器,以及双 UART 监控功能。
Current Status
ESP32 固件仍在开发中。核心系统的大部分功能已实现——约 80 % 完成。
- 双 UART 监控工作正常。
- 调度器、调度系统和多核系统已运行。
- 基本的类似 MIOT 的协议处理(JSON API)已实现。
- OTA 模块已集成,这将简化未来的修改(例如,连接显示屏)。
完成后,机器人将具备完整的本地控制、可靠的遥测以及可选的显示反馈——全部无需云端。
物理改装:用“头部”替换按钮
在软件和 UART 控制就绪后,下一步是实现物理可访问性。
- 将按钮 / UART 并行连接到 ESP32 和诊断端口。
- 临时安装按钮和 LED。
此物理改装实现了多个目标:
- 即使没有应用程序,也能直观地与机器人交互。
- 保持视觉状态指示简洁且易于观察。
- 在保留完整 MCU 控制的同时,可选择使用原始按钮。
可以把它想象成一个“指挥塔”——一个小型驾驶舱,为机器人赋予个性并提供清晰的界面。
如果重新设计这款机器人,我会做的改变
- 让云遥测可选,并明确基于权限。
- 为高级用户提供官方 UART 或 API。
- 允许轻松更换或扩展 LED 和按钮,以实现自定义界面。
- 包含模块化设计,以便附加显示屏或额外传感器。
这些改变将使工程师和爱好者能够:
- 了解机器人在做什么。
- 安全地自定义行为。
- 避免把一个简单的清洁机器人变成意外的云间谍。 😁