Skip to content

扫地机器人

扫地机器人是强化学习和机器人技术的经典应用场景之一。它涉及路径规划、环境感知、避障、覆盖率优化等核心问题,是学习机器人开发的良好切入点。


项目版本

扫地机器人项目主要分为两个版本:

  1. 基于 ROS 的仿真版本:在 Gazebo 仿真环境中实现,使用 ROS 框架进行通信和控制
  2. 基于强化学习的版本:使用 RL 算法(如 DQN/PPO)训练智能体学习清扫策略

核心技术问题

覆盖路径规划 (Coverage Path Planning)

扫地机器人的首要任务是覆盖整个可达区域,同时尽量减少重复清扫。

传统方法:

  • 弓字形(Boustrophedon)路径:像耕田一样来回走,简单但需要精确定位
  • 螺旋形路径:从中心或边缘开始螺旋清扫
  • 分区覆盖:先将空间分成若干子区域,然后对每个子区域分别规划路径

基于RL的方法:

  • 将房间网格化,智能体在每个格子上选择移动方向
  • 奖励设计:覆盖新区域 +1,重复访问 -0.1,撞墙 -1,全部覆盖 +100
  • 状态表示:当前位置 + 已覆盖区域的二值地图 + 传感器读数

SLAM (同步定位与建图)

扫地机器人需要在未知环境中同时完成定位和建图:

  • 激光 SLAM:使用 LiDAR 传感器,精度高但成本较高(如 Roborock)
  • 视觉 SLAM:使用摄像头,成本低但计算量大(如 iRobot Roomba j 系列)
  • 惯性导航 + 编码器:低成本方案,精度较差,适合入门级产品

避障

  • 红外/超声波传感器:检测近距离障碍物
  • 碰撞传感器:物理接触检测,作为最后的安全保障
  • 深度相机/3D ToF:获取障碍物的三维信息,实现更智能的避障
  • AI视觉识别:识别电线、鞋子、宠物粪便等特定障碍物并主动规避

简单RL实现思路

使用 OpenAI Gym 风格定义扫地机器人环境:

import gymnasium as gym
import numpy as np

class CleaningRobotEnv(gym.Env):
    def __init__(self, grid_size=10):
        self.grid_size = grid_size
        self.action_space = gym.spaces.Discrete(4)  # 上下左右
        self.observation_space = gym.spaces.Box(
            low=0, high=1,
            shape=(grid_size, grid_size, 2),  # 通道0:障碍物, 通道1:已清扫
            dtype=np.float32
        )

    def reset(self):
        self.robot_pos = [0, 0]
        self.cleaned = np.zeros((self.grid_size, self.grid_size))
        self.cleaned[0][0] = 1
        return self._get_obs(), {}

    def step(self, action):
        # 移动机器人
        dx, dy = [(0,-1), (0,1), (-1,0), (1,0)][action]
        new_x = np.clip(self.robot_pos[0] + dx, 0, self.grid_size - 1)
        new_y = np.clip(self.robot_pos[1] + dy, 0, self.grid_size - 1)

        # 计算奖励
        reward = -0.1  # 步数惩罚
        if self.cleaned[new_x][new_y] == 0:
            reward = 1.0  # 覆盖新区域
        self.robot_pos = [new_x, new_y]
        self.cleaned[new_x][new_y] = 1

        # 检查是否完成
        coverage = self.cleaned.sum() / self.cleaned.size
        done = coverage >= 0.95

        return self._get_obs(), reward, done, False, {"coverage": coverage}

参考

  • Choset, "Coverage of Known Spaces: The Boustrophedon Cellular Decomposition", Autonomous Robots, 2000
  • ROS Navigation Stack

评论 #