目录
基本概念:
清洁机器人包括泳池清洁,商用清洁,扫地机,覆盖率测试家用机器人的其中一项测试,其测试目标在于测试机器人清洁有效覆盖面积。
覆盖率介绍:
通常家用机器人在进行2D建图,制作出2D栅格地图后同步生成弓字形清扫轨迹曲线,国外又叫Z字形清扫轨迹曲线,机器人会沿着轨迹曲线进行清扫操作,在清扫的过程中同步进行轨迹控制,清扫过程中通过真值系统测试实际的机器人清扫区域,包括一次覆盖率,二次覆盖率,三次覆盖率,实际的测试清扫覆盖率不可能达到100%,具体效果依赖于轨迹规划和控制算法,达到80%以上已经可以满足工作要求。
真值系统介绍:
真值系统的实现原理简述如下,LDS单线激光雷达进行cartographer建图,生成2d栅格地图后,根据生成的地图文件,加载地图文件,运行cartographer定位并调用轨迹规划算法,仿真测试实际覆盖率,一般以第一次机器人位形空间经过的栅格填充初始概率值,并进行颜色标记表示第一次覆盖率,以重复清扫覆盖栅格增加栅格概率值表示二次覆盖率并加深颜色标记,最后把所有走过的栅格区域面积分别除以地图栅格总面积得到整体覆盖率。即完成覆盖率的计算和实际清洁效率测试。
覆盖率计算代码如下:
#include <sys/prctl.h>
#include <sys/syscall.h>
#include "calculate_footprint.hpp"
namespace xm_utils {
CalculateFootprint::CalculateFootprint() {
footprint_robot_.points.resize(4);
footprint_robot_.points[0] = Eigen::Vector2f(-0.22, 0.2);
footprint_robot_.points[1] = Eigen::Vector2f(-0.22, -0.2);
footprint_robot_.points[2] = Eigen::Vector2f(0.22, -0.2);
footprint_robot_.points[3] = Eigen::Vector2f(0.22, 0.2);
footprint_suction_.points.resize(4);
footprint_suction_.points[0] = Eigen::Vector2f(0.08, 0.148);
footprint_suction_.points[1] = Eigen::Vector2f(0.08, -0.148);
footprint_suction_.points[2] = Eigen::Vector2f(0.1, -0.148);
footprint_suction_.points[3] = Eigen::Vector2f(0.1, 0.148);
footprint_brush_front_.points.resize(4);
footprint_brush_front_.points[0] = Eigen::Vector2f(0.178, 0.149);
footprint_brush_front_.points[1] = Eigen::Vector2f(0.178, -0.149);
footprint_brush_front_.points[2] = Eigen::Vector2f(0.22, -0.149);
footprint_brush_front_.points[3] = Eigen::Vector2f(0.22, 0.149);
footprint_brush_back_.points.resize(4);
footprint_brush_back_.points[0] = Eigen::Vector2f(-0.22, 0.149);
footprint_brush_back_.points[1] = Eigen::Vector2f(-0.22, -0.149);
footprint_brush_back_.points[2] = Eigen::Vector2f(-0.178,