清洁机器人规划控制方案

news/2024/5/13 1:19:10

清洁机器人规划控制方案

作者联系方式
Forrest709335543@qq.com

文章目录

  • 清洁机器人规划控制方案
    • 方案简介
    • 方案设计
      • 模块链路
      • 坐标变换
      • 算法框架
    • 功能设计
      • 定点自主导航
      • 固定路线清洁
      • 区域覆盖清洁
      • 贴边沿墙清洁
      • 自主返航回充
    • 仿真测试
      • 仿真测试准备
      • 定点自主导航测试
      • 固定路线清洁测试
      • 区域覆盖清洁测试
      • 贴边沿墙清洁测试

方案简介

室内商用扫地/洗地机器人规划控制(PNC)方案。有以下功能包组成:

  • clean_msg:功能消息定义
  • clean_pnc:规划控制算法
  • clean_rviz:rviz仿真测试插件

目前PNC方案支持以下功能:

  • 定点自主导航
  • 固定路线清洁
  • 区域覆盖清洁
  • 贴边沿墙清洁
  • 自主返航回充

PNC方案在满足清洁机器人常见场景需求,除此之外,还支持以下特性:

  • 断点续接清洁
  • 清洁区域补漏
  • 虚拟墙设置
  • 禁止清洁区域设置
  • 动/静态覆盖清洁设置
  • 左/右沿墙清扫设置
  • 动态调节速度(根据距离障碍物远近调节)
  • 清洁数据统计(清洁轨迹、清洁率、面积、耗时等)
  • 不同底盘形状碰撞支持
  • 扫地/洗地清洁设备控制支持

方案设计

模块链路

lidar/camera/odom
lidar/camera/odom
robot pose
clean task
clean report
ctrl vel
clean ctrl
sensor
localization
pnc
map
application
robot

PNC模块相关输出/输出关系如上图所示:

  • 输入
    • 传感器数据、如lidar、camera等
    • 定位位姿
    • 地图数据
    • TF变化
  • 输出
    • 机器人控制指令
    • 清洁设备控制指令
    • 清洁任务数据,如状态、报告等

坐标变换

整体方案运行,需要相关TF支持,相关TF关系定义如下:

10hz mapping or lolicazation module
30hz chassis module
30hz static tf
30hz static tf
30hz static tf
30hz static tf
map
odom
odom_link
base_link
lidar
camera
imu

注意:这里引入odom_linkframe主要是有些底盘运动电机没有安装在底盘中心

算法框架

tasker
task
pnc
task_manager
decider
global_plan_decider
local_plan_decider
path_follow_decider
planner
astar_path_planner
dwa_path_planner
clean_path_planner
contours_path_planner
planners
deciders
navi_logic
pose_navigator
path_follower
area_cleaner
wall_follower
auto_charger
clean_system
sweep_clean_system
wash_clean_system
function_map
forbidden_clean_area
task_cleaned_area
cost_map
footprint_model
global_cost_map
local_cost_map
task_list
clean_tasks
  • task_manager:清洁任务执行管理器。接收上层发过来的任务队列,挨个进行执行。
    • task:导航任务定义描述,现支持以下五个导航任务:
      • pose_navigator:定点自主导航任务。可实现A到B点功能。
      • path_follower:固定路线清洁任务。可用于预定义路线清洁。
      • area_cleaner:区域覆盖清洁任务。可用于固定区域覆盖式清洁。
      • wall_follower:贴边沿墙清洁任务。可用于沿墙贴边清洁。
      • auto_charger:自主返航回充任务。机器人低电量时自主返航回充。
    • tasker:导航任务实现抽象。上述每个导航任务都是一个tasker,一般每个tasker由以下三部分组成:
      • planner:规划器。一个tasker可根据要实现的功能搭配多个planner,比如实现pose_navigator要搭配astar_path_planner和dwa_path_planner。现支持的planner有:
        • astar_path_planner:A*全局路径规划算法。用于A到B点路径生成
        • dwa_path_planner:DWA局部路径规划算法。用于路径跟踪。
        • clean_path_planner:覆盖路径规划算法。用于区域覆盖清洁路线生成。
        • contours_path_planner:沿墙路径规划算法。用于沿墙贴边清洁路径生成。
      • decider:决策器。一个tasker可根据要实现的功能搭配多个decider,比如实现pose_navigator要搭配global_plan_decider和local_plan_decider。现支持的decider有:
        • global_plan_decider:全局规划决策器。用于判断是否需要进行全局路径重规划。
        • local_plan_decider:局部规划决策器。用于局部路径规划失败处理。
        • path_follow_decider:路径跟踪决策器。用于路径跟踪停障等待和绕障处理。
      • navi_logic:导航逻辑。一个tasker可根据要实现的功能配合planner和decider进行调用逻辑组合,从而实现对应功能。
  • cost_map:代价地图。用于障碍物碰撞检测。
    • footprint_model:机器人碰撞模型描述。可根据机器人形状进行定义。
    • global_cost_map:全局代价地图。可用于全局规划路径和清洁规划路径生成。
    • local_cost_map:局部代价地图。可用于局部规划路径生成。
  • fuction_map:功能地图。用于相关清洁功能实现,比如禁止清洁区域。
    • forbidden_clean_area:禁止清洁区域。限定清洁环境中,某些区域只允许经过,不可以清洁。
    • task_cleaned_area:已清洁区域。用于清洁任务中,已经清洁区域统计,生成相关清洁报告。
  • clean_system:清洁设备控制器。用于扫地/洗地清洁设备开关控制。

功能设计

定点自主导航

定点自主导航任务,可实现A到B点功能。功能设计如下图所示:

pose_navigator
pnc
task_manager
decider
global_plan_decider
local_plan_decider
planner
astar_path_planner
dwa_path_planner
planners
deciders
navi_logic
navi_goal
cost_map
clean_task
  • 由astar_path_planner生成机器人当前位置到导航目标点全局路径。
  • 得到全局路径后,dwa_path_planner则进行跟踪控制。
  • 在导航过程中,global_plan_decider会判断全局路径可达性,如果当前全局路径不可达,则重新进行全局路径规划。
  • 在导航过程中,local_plan_decider会根据dwa_path_planner规划状态,进行局部路径规划失败处理。

固定路线清洁

固定路线清洁任务,可用于预定义路线清洁。功能设计如下图所示:

path_follower
pnc
task_manager
decider
global_plan_decider
local_plan_decider
path_follow_decider
planner
astar_path_planner
dwa_path_planner
planners
deciders
navi_logic
clean_path
cost_map
function_map
clean_system
clean_task
  • 首先机器人会根据pose_navigator一样的逻辑导航到离清洁路线最近点,然后开始清洁路线跟踪。
  • 清洁路线跟踪使用dwa_path_planner。
  • 在开始清洁路线跟踪后,path_follow_decider判断跟踪路线是否需要停障。
    • 如果遇到障碍物则进行停障等待。
    • 停障等待超时后,进行绕障继续跟踪清洁路线。
  • 在清洁路线跟踪过程中,local_plan_decider会根据dwa_path_planner规划状态,进行局部路径规划失败处理。

区域覆盖清洁

区域覆盖清洁任务,可用于固定区域覆盖式清洁。功能设计如下图所示:

area_cleaner
pnc
task_manager
decider
global_plan_decider
local_plan_decider
path_follow_decider
planner
astar_path_planner
dwa_path_planner
clean_path_planner
planners
deciders
navi_logic
clean_zone
cost_map
function_map
clean_system
clean_task
  • 首先机器人会根据pose_navigator一样的逻辑导航到离清洁区域内最近点。
  • 到达清洁区域内后,使用clean_path_planner进行清洁路线覆盖规划,并进行跟踪。
  • 清洁路线跟踪使用dwa_path_planner。
  • 在开始清洁路线跟踪后,path_follow_decider判断跟踪路线是否需要停障
    • 如果遇到障碍物则进行停障等待
    • 停障等待超时后,进行绕障继续跟踪清洁路线
  • 在清洁路线跟踪过程中,local_plan_decider会根据dwa_path_planner规划状态,进行局部路径规划失败处理。

贴边沿墙清洁

贴边沿墙清洁任务,可用于沿墙贴边清洁。功能设计如下图所示:

wall_follower
pnc
task_manager
decider
global_plan_decider
local_plan_decider
planner
astar_path_planner
dwa_path_planner
contours_path_planner
planners
deciders
navi_logic
along_wall_path
cost_map
function_map
clean_system
clean_task
  • 首先机器人会根据pose_navigator一样的逻辑导航到离沿墙清洁路径上最近点。
  • 到达最近后,使用contours_path_planner进行沿墙清洁路径规划,并进行跟踪。
  • 沿墙清洁路线跟踪使用dwa_path_planner。
  • 在清洁路线跟踪过程中,local_plan_decider会根据dwa_path_planner规划状态,进行局部路径规划失败处理。

自主返航回充

自主返航回充任务,机器人低电量时自主返航回充。功能设计如下图所示:

auto_charger
pnc
task_manager
decider
global_plan_decider
local_plan_decider
planner
astar_path_planner
dwa_path_planner
planners
deciders
navi_logic
navi_goal
cost_map
clean_task
  • 首先机器人会根据pose_navigator一样的逻辑导航到充电桩前方位置。
  • 然后进行充电桩对接控制。

仿真测试

功能仿真测试视频:

清洁机器人PNC方案演示

仿真测试准备

  • 安装部署好工程

  • 仿真地图确认:仿真地图放在cleanbot/clean_pnc/data/map目录下,目前该目录下有测试地图demo,如果想更换地图可按如下步骤:

    • 将要更换的地图放到cleanbot/clean_pnc/data/map目录下

    • 更改仿真器中cleanbot/clean_pnc/launch/pnc_simulator.launchtest_map_name参数:

      <launch><node name="clean_pnc_simulator" pkg="clean_pnc" type="clean_pnc_simulator" output="screen"><param name="map_file_dir"    value="$(find clean_pnc)/data/map/"/><param name="test_map_name"   value="demo"/></node>
      </launch>
      
  • 启动仿真程序:启动成功后,可看到如下rviz界面:

    roslaunch clean_pnc simulation_wash_robot.launch
    

    在这里插入图片描述

  • 初始化机器人位姿:在rviz软件显示窗口上,点击2D Pose Estimate按钮在地图上相应位置进行机器人位姿初始化

    在这里插入图片描述

  • 任务暂停/取消:在rviz软件显示窗口左下角,可进行任务暂停/取消操作

    在这里插入图片描述

定点自主导航测试

  • 下发导航目标点:在rviz软件显示窗口上,点击2D Nav Goal按钮在地图上相应位置进行导航目标点下发

在这里插入图片描述

  • 下发成功后可在rviz看到如下界面:

    在这里插入图片描述

  • 如果想在测试过程中增加障碍物,可在rviz软件显示窗口上,点击Publish Point按钮在地图上相应位置进行障碍物设置:

    在这里插入图片描述

固定路线清洁测试

  • 设定清洁路线:在rviz软件显示窗口上,点击custom_path按钮在地图上相应位置进行清洁路线标注

    • 按下键盘上的Enter按键下发任务
    • 按下键盘上的d按键重新绘制路线

    在这里插入图片描述

  • 下发成功后可在rviz看到如下界面:

    在这里插入图片描述

  • 如果想在测试过程中增加障碍物,可在rviz软件显示窗口上,点击Publish Point按钮在地图上相应位置进行障碍物设置:

    在这里插入图片描述

注意:任务完成后,机器人会主动导航返回任务起始点

区域覆盖清洁测试

  • 设定清洁区域:在rviz软件显示窗口上,点击clean_polygon按钮在地图上相应位置进行清洁区域标注

    • 按下键盘上的Enter按键下发任务
    • 按下键盘上的d按键重新绘制区域

    在这里插入图片描述

  • 下发成功后可在rviz看到如下界面:

    在这里插入图片描述

  • 如果想在测试过程中增加障碍物,可在rviz软件显示窗口上,点击Publish Point按钮在地图上相应位置进行障碍物设置:

在这里插入图片描述

注意:任务完成后,机器人会主动导航返回任务起始点

贴边沿墙清洁测试

  • 设定清洁区域:在rviz软件显示窗口上,点击along_wall按钮在地图上相应墙体位置进行沿墙启点下发

    在这里插入图片描述

  • 下发成功后可在rviz看到如下界面:

    在这里插入图片描述

  • 如果想在测试过程中增加障碍物,可在rviz软件显示窗口上,点击Publish Point按钮在地图上相应位置进行障碍物设置:

    在这里插入图片描述

注意:任务完成后,机器人会主动导航返回任务起始点


http://www.mrgr.cn/p/70281334

相关文章

ER系列路由器多网段划分设置指南

ER系列路由器多网段划分设置指南 - TP-LINK 服务支持 TP-LINK ER系列路由器支持划分多网段&#xff0c;可以针对不同的LAN接口划分网段&#xff0c;即每一个或多个LAN接口对应一个网段&#xff1b;也可以通过一个LAN接口与支持划分802.1Q VLAN的交换机进行对接&#xff0c;实现…

微信小程序导入微信地址

获取用户收货地址。调起用户编辑收货地址原生界面&#xff0c;并在编辑完成后返回用户选择的地址。 1&#xff1a;原生微信小程序接口使用API&#xff1a;wx.chooseAddress(OBJECT) wx.chooseAddress({success (res) {console.log(res.userName)console.log(res.postalCode)c…

Day02-作业(JavaScriptVue)

作业1&#xff1a;实现5秒之后&#xff0c;当前页面直接跳转到官网首页&#xff08;首页地址&#xff1a;https://www.itcast.cn&#xff09; 提示&#xff1a; 5秒之后&#xff0c;才触发某一个动作 素材&#xff1a; <!DOCTYPE html> <html lang"en"&…

【AGI】Copilot AI编程辅助工具安装教程

1. 基础激活教程 GitHub和OpenAI联合为程序员们送上了编程神器——GitHub Copilot。 但是&#xff0c;Copilot目前不提供公开使用&#xff0c;需要注册账号通过审核&#xff0c;我也提交了申请&#xff1a;这里第一期记录下&#xff0c;开启教程&#xff0c;欢迎大佬们来讨论…

【Linux】更换jdk版本

目录 一、前言二、查看jdk版本号1、项目中的版本号&#xff08;pom.xml&#xff09;2、服务器中的版本号 三、更换jdk版本1、创建java文件夹2、下载并解压JDK安装包①、下载jdk安装包②、移动到创建好的/usr/local/java路径下③、解压jdk安装包 四、删除原来的jdk版本1、删除原…

删除 iptables 中的规则

查看规则编号 要删除 iptables 中的规则&#xff0c;可以使用以下命令&#xff1a; 查看 iptables 中的规则&#xff0c;找到要删除的规则的编号&#xff1a; iptables -L --line-numbers删除指定编号的规则&#xff1a; iptables -D [chain] [rule-number]其中&#xff0c;…

设计模式再探——代理模式

目录 一、背景介绍二、思路&方案三、过程1.代理模式简介2.代理模式的类图3.代理模式代码4.代理模式还可以优化的地方5.代理模式的项目实战&#xff0c;优化后(只加了泛型方式&#xff0c;使用CGLIB的代理) 四、总结五、升华 一、背景介绍 最近在做产品过程中对于日志的统一…

c# 此程序集中已使用了资源标识符

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 CS1508 此程序集中已使用了资源标识符“BMap.NET.WindowsForm.BMapControl.resources” BMap.NET.WindowsForm D:\MySource\Decompile\BMap.NET.WindowsForm\CSC 1 活动 运行程序时&a…

网络安全(黑客)自学笔记

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一是市场需求量高&#xff1b; 二则是发展相对成熟入门…

【iOS】—— UIKit相关问题

文章目录 UIKit常用的UIKit组件懒加载的优势 CALayer和UIView区别关系 UITableViewUITableView遵循的两个delegate以及必须实现的方法上述四个必须实现方法执行顺序其他方法的执行顺序&#xff1a; UICollectionView和UITableView的区别UICollectionViewFlowLayout和UICollecti…

【Hadoop 01】简介

目录 1 Hadoop 简介 2 下载并配置Hadoop 2.1 修改/etc/profile 2.2 修改hadoop-env.sh 2.3 修改core-site.xml 2.4 修改hdfs-site.xml 2.5 修改mapred-site.xml 2.6 修改yarn-site.xml 2.7 修改workers 2.8 修改start-dfs.sh、stop-dfs.sh 2.9 修改start-yarn.sh、s…

Spring MVC异步上传、跨服务器上传和文件下载

一、异步上传 之前的上传方案&#xff0c;在上传成功后都会跳转页面。而在实际开发中&#xff0c;很多情况下上传后不进行跳转&#xff0c;而是进行页面的局部刷新&#xff0c;比如&#xff1a;上传头像成功后将头像显示在网页中。这时候就需要使用异步文件上传。 1.1 JSP页面 …

Abaqus 导出单元刚度矩阵和全局刚度矩阵

Abaqus 导出单元刚度矩阵和全局刚度矩阵 首次创建&#xff1a;2023.7.29 最后更新&#xff1a;2023.7.29 如有什么改进的地方&#xff0c;欢迎大家讨论&#xff01; 详细情况请查阅&#xff1a;Abaqus Analysis User’s Guide 一、Abaqus 导出单元刚度矩阵 1.生成单元刚度矩阵…

DevOps-Jenkins

Jenkins Jenkins是一个可扩展的持续集成引擎&#xff0c;是一个开源软件项目&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。 官网 应用场景 场景一 研发人员上传开发好的代码到github代码仓库需要将代码下载nginx服务器部署手动下载再…

Android 测试

工程目录图 1- Espresso 2- uiautomator Espresso 文档UI Automator文档ui-automator 英文文档 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 代码&#xff1a;testespresso 参考文献 Android 利用 espre…

jsonp劫持

jsonp劫持 什么是jsonjson语法规则浏览器的同源策略JSONPJSONP跨域请求的原理JSONP 的组成深入研究 JSONP劫持漏洞的学习JSONP劫持的原理漏洞利用过程 jsonp劫持举例 什么是json JSON指的是JavaScript对象表示法&#xff08; &#xfeff;JavaScript Object Notation&#xff…

Spring,SpringBoot,Spring MVC的区别是什么

1.Spring是什么 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃⽽庞⼤的社区&#xff0c;这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景&#xff0c;它可以让 Java 企业级…

【Android常见问题(五)】- Flutter项目性能优化

文章目录 知识回顾前言源码分析1. 渲染过程2. 分析工具3. 优化方法合理使用const关键词合理使用组件管理着色器编译垃圾 知识回顾 前言 项目迭代开发一定程度后&#xff0c;性能优化是重中之重&#xff0c;其中包括了包体积&#xff0c;UI 渲染、交互等多个方面。 通过 Flutt…

火山引擎AB测试:广告实验深度打通巨量引擎,高效测试广告素材

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近期&#xff0c;火山引擎AB测试DataTester上线了新版的广告AB实验&#xff0c;还推出了与巨量引擎深度打通的能力。用户可以在DataTester中直接进行广告落地页的创…

csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板

文章目录 ⭐前言⭐利用inscode免费开放资源&#x1f496; 在inscode搭建vue3tsant项目&#x1f496; 调整配置&#x1f496; antd 国际化配置&#x1f496; 用户store&#x1f496; 路由权限&#x1f496; 预览 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享…