智能设备自动回充电(调研)
智能扫地机器人(以云鲸、石头、科沃斯等主流品牌为例)的“自动回充”功能是一个多技术融合的典型应用。其执行过程可以分解为触发条件、路径规划与导航、对接执行三个阶段。
一、触发条件
- 低电量阈值:这是最常见的原因。当电池电量低于预设值(通常为 15%-20%),机器人会主动中断清扫,启动回充流程。
- 任务完成:整个清扫或拖地任务完成后,自动返回充电座。
- 手动指令:通过 App 或物理按键发送“回充”指令。
- 基站召回:部分高端型号(如带有自动集尘、自动洗拖布功能的基站)在完成特定任务(如集尘、清洗拖布)后,基站会主动发出信号召回机器人。
- 寻找基站失败:在开始清扫前,如果机器人发现电量不足,会先寻找基站充电,此时也触发回充流程。
二、路径规划与导航
我们选择的方案是:基于 SLAM 的智能路径规划。
简单来说,就是如何找到回去的路?
这是技术的核心,不同品牌和型号的方案有差异,但主流可以分为两大类:
方案 A:基于传感器的传统方案(早期及中端型号常用)
这种方式不依赖精确的地图,更像是一个“寻踪回家”的过程。
- 信号探测:充电座本身是一个信号源。它会持续向前方发射红外线(IR)信号或无线电(RF)信号,形成一个信号扇区。
- 盲区规划:当机器人在信号范围内(通常是以基站为圆心,半径 3-5 米的扇形区域),它会通过机身上的红外接收传感器,像“盲人摸象”一样调整方向,直至对准信号最强的中心线,然后沿直线驶向充电座。
- 盲区搜索(核心难点):如果机器人在信号范围外(即“盲区”),它需要依靠其他策略:
- 沿墙行驶 + 随机碰撞:机器人可能会先移动到房间边缘,然后沿着墙壁行驶,同时探测红外信号。一旦进入信号区,立刻转为上述的信号追踪模式。
- 基于上次路径的记忆:一些机器人会粗略记录离开充电座时的路径和转弯,尝试反向回溯这段路径。
- 缺点:效率较低,在复杂环境中可能找不到家,甚至会卡住。
方案 B:基于 SLAM 的智能路径规划(当前主流及高端型号方案)
这是像云鲸 J4、石头 G20、科沃斯 X2 等型号采用的方式,体验非常流畅。
- 建图与定位:
- 机器人通过LDS 激光雷达(LiDAR) 或 视觉传感器(VSLAM),在清扫时已经构建了完整的家庭环境地图。
- 同时,它通过轮子编码器(里程计)、惯性测量单元(IMU) 和激光/视觉数据进行实时定位,始终知道自己在地图中的精确位置(X, Y 坐标和朝向)。
- 全局路径规划:
- 当回充触发时,机器人明确知道充电座在地图中的固定坐标(首次发现充电座时就已标记)。
- 路径规划算法(如 A、D 算法)会计算从当前位置到充电座坐标的最优路径。这条路径会智能地绕开已知的障碍物和禁区,选择最短、最畅通的路线。
- 局部避障与微调:
- 在沿规划路径行驶时,机器人的前视传感器、3D 结构光或双目视觉系统会实时探测路径上突然出现的障碍物(如人脚、宠物、移动的椅子),并进行动态避让,然后重新规划局部路径。
三、对接执行
找到充电座只是第一步,精准对接是最后的关键一步。这个过程通常分为粗对准和精对准。
- 粗对准:通过上述的导航方式,机器人以一定的角度和位置精度驶向充电座。
- 精对准与物理导引:
- 充电座前方有两个突出的金属充电触片,其底座通常设计有物理导轨。
- 机器人的底部前方有对应的金属接触点,以及配合导轨的凹槽或斜面。
- 当机器人靠近时,即使有厘米级的偏差,物理导轨也能将机器人的车轮“引导”至正确位置,确保充电触片准确接触。
- 信号确认:
- 部分充电座在机器人驶入时,会通过红外信号告诉机器人“微调左/右”。
- 当机器人检测到充电触片接通、电压稳定后,会停止所有电机,进入充电状态,并向 App 发送“已成功回充”的通知。
四、技术实践
1. 采购设备汇总
- 2D 单线激光雷达
- 轮式里程计
- 惯性测量单元
2. 软件架构
硬件就绪后,你需要软件。ROS 是机器人操作系统的事实标准,它将硬件驱动、SLAM 算法、路径规划等模块化,极大地简化了开发。
- 操作系统:在开发板上安装 Ubuntu, 然后安装 ROS(推荐
ROS Noetic用于 Ubuntu 20.04,或ROS2 Humble)。 - 驱动:安装你采购的传感器(激光雷达、IMU)的 ROS 驱动包。
- SLAM 算法包(核心):
- 激光 SLAM:
gmapping:经典,适合小范围、线性运动。hector_mapping:对 IMU 和高速运动支持较好,但不优化里程计。cartographer(谷歌出品):强烈推荐。它专门为低成本的传感器(如 RPLIDAR A1)设计,集成了IMU 和里程计进行多传感器融合,能生成非常高质量的 2D 栅格地图,且提供回环检测,消除累积误差。这正是你需要的。
- 视觉 SLAM:
ORB-SLAM2/3、RTAB-Map(支持深度相机)。
- 激光 SLAM:
- 导航算法包:
move_base。它集成了全局规划器(如global_planner)和局部规划器(如dwa_local_planner),可以接收你建好的地图,并指挥你的小车从 A 点移动到 B 点,实现自动回充的路径规划部分。
3. 代码实现
- 硬件集成:将所有传感器牢固安装在小车上,正确接线。
- 底层驱动开发:
- 编写/配置电机驱动节点,订阅
/cmd_vel(速度指令)话题,并发布/odom(里程计)话题。 - 配置并启动激光雷达和 IMU 的驱动节点,确保能发布
/scan和/imu/data话题。
- 编写/配置电机驱动节点,订阅
- 传感器融合与 SLAM 建图:
- 启动
cartographer节点。在 ROS 中,你需要编写一个.lua配置文件,在其中明确声明你使用的传感器源:luaTRAJECTORY_BUILDER_2D.use_imu_data = true -- 启用IMU TRAJECTORY_BUILDER_2D.use_odometry = true -- 启用里程计 - 使用
rosbag记录/scan、/imu、/odom数据,或者直接遥控小车在办公室内行走。cartographer会实时融合这些数据,构建并优化地图。 - 建图完成后,使用
cartographer的工具将地图保存为.pgm(图像)和.yaml(元数据)文件。
- 启动
- 定位与导航:
- 启动
amcl(自适应蒙特卡洛定位)节点,它负责在已知地图中实时定位你的小车。 - 启动
move_base节点,加载你保存的地图。 - 此时,你可以在 RViz 可视化工具中,给小车指定一个目标点(比如充电座坐标),
move_base就会自动规划路径并控制小车到达。
- 启动