清洁机器人规划控制方案
清洁机器人规划控制方案
作者 | 联系方式 |
---|---|
Forrest | 709335543@qq.com |
文章目录
- 清洁机器人规划控制方案
- 方案简介
- 方案设计
- 模块链路
- 坐标变换
- 算法框架
- 功能设计
- 定点自主导航
- 固定路线清洁
- 区域覆盖清洁
- 贴边沿墙清洁
- 自主返航回充
- 仿真测试
- 仿真测试准备
- 定点自主导航测试
- 固定路线清洁测试
- 区域覆盖清洁测试
- 贴边沿墙清洁测试
方案简介
室内商用扫地/洗地机器人规划控制(PNC)方案。有以下功能包组成:
- clean_msg:功能消息定义
- clean_pnc:规划控制算法
- clean_rviz:rviz仿真测试插件
目前PNC方案支持以下功能:
- 定点自主导航
- 固定路线清洁
- 区域覆盖清洁
- 贴边沿墙清洁
- 自主返航回充
PNC方案在满足清洁机器人常见场景需求,除此之外,还支持以下特性:
- 断点续接清洁
- 清洁区域补漏
- 虚拟墙设置
- 禁止清洁区域设置
- 动/静态覆盖清洁设置
- 左/右沿墙清扫设置
- 动态调节速度(根据距离障碍物远近调节)
- 清洁数据统计(清洁轨迹、清洁率、面积、耗时等)
- 不同底盘形状碰撞支持
- 扫地/洗地清洁设备控制支持
- …
方案设计
模块链路
PNC模块相关输出/输出关系如上图所示:
- 输入
- 传感器数据、如lidar、camera等
- 定位位姿
- 地图数据
- TF变化
- 输出
- 机器人控制指令
- 清洁设备控制指令
- 清洁任务数据,如状态、报告等
坐标变换
整体方案运行,需要相关TF支持,相关TF关系定义如下:
注意:这里引入
odom_link
frame主要是有些底盘运动电机没有安装在底盘中心
算法框架
- 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进行调用逻辑组合,从而实现对应功能。
- planner:规划器。一个tasker可根据要实现的功能搭配多个planner,比如实现pose_navigator要搭配astar_path_planner和dwa_path_planner。现支持的planner有:
- task:导航任务定义描述,现支持以下五个导航任务:
- cost_map:代价地图。用于障碍物碰撞检测。
- footprint_model:机器人碰撞模型描述。可根据机器人形状进行定义。
- global_cost_map:全局代价地图。可用于全局规划路径和清洁规划路径生成。
- local_cost_map:局部代价地图。可用于局部规划路径生成。
- fuction_map:功能地图。用于相关清洁功能实现,比如禁止清洁区域。
- forbidden_clean_area:禁止清洁区域。限定清洁环境中,某些区域只允许经过,不可以清洁。
- task_cleaned_area:已清洁区域。用于清洁任务中,已经清洁区域统计,生成相关清洁报告。
- clean_system:清洁设备控制器。用于扫地/洗地清洁设备开关控制。
功能设计
定点自主导航
定点自主导航任务,可实现A到B点功能。功能设计如下图所示:
- 由astar_path_planner生成机器人当前位置到导航目标点全局路径。
- 得到全局路径后,dwa_path_planner则进行跟踪控制。
- 在导航过程中,global_plan_decider会判断全局路径可达性,如果当前全局路径不可达,则重新进行全局路径规划。
- 在导航过程中,local_plan_decider会根据dwa_path_planner规划状态,进行局部路径规划失败处理。
固定路线清洁
固定路线清洁任务,可用于预定义路线清洁。功能设计如下图所示:
- 首先机器人会根据pose_navigator一样的逻辑导航到离清洁路线最近点,然后开始清洁路线跟踪。
- 清洁路线跟踪使用dwa_path_planner。
- 在开始清洁路线跟踪后,path_follow_decider判断跟踪路线是否需要停障。
- 如果遇到障碍物则进行停障等待。
- 停障等待超时后,进行绕障继续跟踪清洁路线。
- 在清洁路线跟踪过程中,local_plan_decider会根据dwa_path_planner规划状态,进行局部路径规划失败处理。
区域覆盖清洁
区域覆盖清洁任务,可用于固定区域覆盖式清洁。功能设计如下图所示:
- 首先机器人会根据pose_navigator一样的逻辑导航到离清洁区域内最近点。
- 到达清洁区域内后,使用clean_path_planner进行清洁路线覆盖规划,并进行跟踪。
- 清洁路线跟踪使用dwa_path_planner。
- 在开始清洁路线跟踪后,path_follow_decider判断跟踪路线是否需要停障
- 如果遇到障碍物则进行停障等待
- 停障等待超时后,进行绕障继续跟踪清洁路线
- 在清洁路线跟踪过程中,local_plan_decider会根据dwa_path_planner规划状态,进行局部路径规划失败处理。
贴边沿墙清洁
贴边沿墙清洁任务,可用于沿墙贴边清洁。功能设计如下图所示:
- 首先机器人会根据pose_navigator一样的逻辑导航到离沿墙清洁路径上最近点。
- 到达最近后,使用contours_path_planner进行沿墙清洁路径规划,并进行跟踪。
- 沿墙清洁路线跟踪使用dwa_path_planner。
- 在清洁路线跟踪过程中,local_plan_decider会根据dwa_path_planner规划状态,进行局部路径规划失败处理。
自主返航回充
自主返航回充任务,机器人低电量时自主返航回充。功能设计如下图所示:
- 首先机器人会根据pose_navigator一样的逻辑导航到充电桩前方位置。
- 然后进行充电桩对接控制。
仿真测试
功能仿真测试视频:
清洁机器人PNC方案演示
仿真测试准备
-
安装部署好工程
-
仿真地图确认:仿真地图放在
cleanbot/clean_pnc/data/map
目录下,目前该目录下有测试地图demo
,如果想更换地图可按如下步骤:-
将要更换的地图放到
cleanbot/clean_pnc/data/map
目录下 -
更改仿真器中
cleanbot/clean_pnc/launch/pnc_simulator.launch
的test_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
按钮在地图上相应位置进行障碍物设置:
注意:任务完成后,机器人会主动导航返回任务起始点
相关文章:

清洁机器人规划控制方案
清洁机器人规划控制方案 作者联系方式Forrest709335543qq.com 文章目录 清洁机器人规划控制方案方案简介方案设计模块链路坐标变换算法框架 功能设计定点自主导航固定路线清洁区域覆盖清洁贴边沿墙清洁自主返航回充 仿真测试仿真测试准备定点自主导航测试固定路线清洁测试区域…...

设计模式 - 工厂模式
一、 简单工厂(Simple Factory Pattern) 1、概念 一个工厂对象决定创建出哪一种产品类的实力,但不属于GOF23种设计模式。 简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创…...

elementUI this.$confirm 文字大小样式
dangerouslyUseHTMLString:true // message部分 以html片段处理 customClass //MessageBox 的自定义类名 整个comfirm框自定义类名 cancelButtonClass // 取消按钮的自定义类名 confirmButtonClass // 确定按钮的自定义类名<style> .addcomfirm{width: 500px; } .a…...
Kafka的TimingWheel
Kafka的TimingWheel是Kafka中的一个时间轮实现,用于管理和处理延迟消息。时间轮是一种定时器的数据结构,可以高效地管理和触发定时事件。 在Kafka中,TimingWheel用于处理延迟消息的重试。当Kafka生产者发送消息到Kafka集群,但由于某些原因导致消息发送失败,生产者会将这些…...

第2集丨webpack 江湖 —— 创建一个简单的webpack工程demo
目录 一、创建webpack工程1.1 新建 webpack工程目录1.2 项目初始化1.3 新建src目录和文件1.4 安装jQuery1.5 安装webpack1.6 配置webpack1.6.1 创建配置文件:webpack.config.js1.6.2 配置dev脚本1.7 运行dev脚本 1.8 查看效果1.9 附件1.9.1 package.json1.9.2 webpa…...

Python(Web时代)——初识flask
flask简介 介绍 Flask是一个用Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。它是BSD授权的,一个有少量限制的免费软件许可。它使用了 Werkzeug 工具箱和 Jinja2 模板引擎。 Flask 的设计理念是简单、灵活、易于扩展&a…...

二、SQL-5.DQL-8).案例练习
1、查询年龄为20,21,22,23岁的员工信息 select * from emp where age in(20, 21, 22, 23) and gender 女; 2、查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工 select * from emp where gender 男 && age between 2…...
浙大数据结构第五周之05-树7 堆中的路径
题目详情: 将一系列给定数字依次插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。 输入格式: 每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-1…...

C# Modbus TCP上位机测试
前面说了三菱和西门子PLC的上位机通信,实际在生产应用中,设备会有很多不同的厂家生产的PLC,那么,我们就需要一种通用的语言,进行设备之间的通信,工业上较为广泛使用的语言之一就是Modbus。 Modbus有多种连…...
instr字符查找函数(oracle用instr来代替like)
instr函数:字符查找函数。其功能是查找一个字符串在另一个字符串中首次出现的位置。 instr函数在Oracle/PLSQL中是返回要截取的字符串在源字符串中的位置。 语法 instr( string1, string2, start_position,nth_appearance ) 参数 string1:源字符串&am…...
trie树的一点理解
这个是最简单的数据结构:因为只需要记住两句话就能完美的写出简洁优雅的代码 1. 每次都是从根节点开始看(或者说从第零次插入的东西开始遍历,son[][]里面存的是第几次插入) 2每次遍历都是插入和查询的字符串 #include<iostream> using namespace …...

Linux CentOS监控系统的运行情况工具 - top/htop/glances/sar/nmon
在CentOS系统中,您可以使用以下工具来监控系统的运行情况: 1. top: top 是一个命令行工具,用于实时监控系统的进程、CPU、内存和负载情况。您可以使用以下命令来启动 top: top 输出 2. htop: htop 是一…...
Qt开发(2)——windows下调用外部程序
一、QProcess::start 1.阻塞性 start是非阻塞函数,但是这里的waitForFinished是阻塞的 2. 调用外部压缩程序7z // 目标压缩路径 QString zipFilePath destinationFolder "/" zipFileName; QStringList arguments{"a&qu…...
PostgreSQL查看数据库对象大小
PostgreSQL查看数据库对象大小 PostgreSQL查看数据库对象大小1、查看某个数据库大小2、查看多个数据库大小3、按顺序查看索引大小4、查看所有对象的大小 PostgreSQL查看数据库对象大小 1、查看某个数据库大小 select pg_size_pretty(pg_database_size(tzqdb));2、查看多个数据…...

给el-table实现列显隐
用过若依的都知道,在使用el-table 时候,实现列显隐效果是要给每个列加v-if 判断的,这种代码过于繁琐,于是翻看el-table包的代码,调试后发现内部的【插入】和【删除】两个方法可以达到我们要的效果。 项目不提供源码&a…...

为Android构建现代应用——应用架构
选择风格(Choosing a style) 我们将依照Google在《应用架构指南》中推荐的最佳实践和架构指南来构建OrderNow的架构。 这些定义包括通过各层定义组件的一些Clean Architecture原则。 层次的定义(Definition of the layers) 在应用程序中,我们将定义以下主要层次…...
49:字符串的新增方法
字符串的新增方法 String.fromCodePoint()String.raw()实例方法:codePointAt()实例方法:normalize()[实例方法:includes(), startsWith(), endsWith()](https://es6.ruanyifeng.com/#docs/string-methods#实例方法:includes(), s…...

Kaggle图表内容识别大赛TOP方案汇总
赛题名称:Benetech - Making Graphs Accessible 赛题链接:https://www.kaggle.com/competitions/benetech-making-graphs-accessible 赛题背景 数以百万计的学生有学习、身体或视力障碍,导致人们无法阅读传统印刷品。这些学生无法访问科学…...

DAY2,Qt(继续完善登录框,信号与槽的使用 )
1.继续完善登录框,当登录成功时,关闭登录界面,跳转到新的界面中,来回切换页面; ---mychat.h chatroom.h---两个页面头文件 #ifndef MYCHAT_H #define MYCHAT_H#include <QWidget> #include <QDebug> /…...
【设计模式】设计原则-开闭原则
单一职责原则 定义 当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。作用 1、方便测试;测试时只需要对扩展的代码进行测试。 2、提高代码的可复用性;粒…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...