清洁机器人规划控制方案

清洁机器人规划控制方案

作者联系方式
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按钮在地图上相应位置进行障碍物设置:

    在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/42951.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot项目的创建

等待maven下载完成 删除无用文件 此时我们就创建成功了

在外远程NAS群晖Drive - 群晖Drive挂载电脑磁盘同步备份【无需公网IP】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

Windows11的VS201x编译OpenCV+Contrib+CUDA

(1) CUDA下载&#xff0c;注意要和cudnn版本号相关。 我安装的是cuda11.0,注意VS2015不能编译CUDA11&#xff0c;所以用VS2015的话需要下载CUDA 10。因为更高的版本目前还没有cudnn。 (2) 下载和安装VS2015。 (3) 下载和解压CMake。 CMake地址&#xff1a; Releases Kitw…

Linux中docker的基本操作

文章目录 一、docker概述1.1 什么是docker1.2 Docker与虚拟机的特性区别1.3 容器在内核中支持2种重要技术1.4 docker的核心概念 二、安装docker三、Docker 镜像操作四、Docker 容器操作 一、docker概述 1.1 什么是docker 是一个开源的应用容器引擎&#xff0c;基于go语言开发…

js 在浏览器窗口关闭后还可以不中断网络请求

有个需求&#xff0c;我们需要在用户发送数据过程中&#xff0c;如果用户关闭了网页(包括整个浏览器关闭)&#xff0c;不要中断数据传递 目前XMLHttpRequest对象是不支持的 http服务器 为了测试效果我们用nodejs写了个http服务器代码 文件名为httpServer.js如下&#xff0c;…

基于深度学习淡水鱼体重智能识别模型研究

工作原理为&#xff1a;首先对大众淡水鱼图片进行数据清洗并做标签分类&#xff0c;之后基于残差网络ResNet50模型进行有监督的分类识别训练&#xff0c;获取识别模型。其次通过搭建回归模型设计出体重模型&#xff0c;对每一类淡水鱼分别拟合出对应的回归方程&#xff0c;将获…

Transformer 模型实用介绍:BERT

动动发财的小手&#xff0c;点个赞吧&#xff01; 在 NLP 中&#xff0c;Transformer 模型架构是一场革命&#xff0c;极大地增强了理解和生成文本信息的能力。 在本教程[1]中&#xff0c;我们将深入研究 BERT&#xff08;一种著名的基于 Transformer 的模型&#xff09;&#…

Jmeter 如何并发执行 Python 脚本

目录 1. 前言 2. Python 实现文件上传 3. Jmeter 并发执行 4. 最后 1. 前言 JMeter 是一个开源性能测试工具&#xff0c;它可以帮助我们更轻松地执行性能测试&#xff0c;并使测试结果更加可靠。Python 是一种广泛使用的编程语言&#xff0c;它可以用于开发各种软件和应用…

017-从零搭建微服务-系统服务(四)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

数学建模入门-如何从0开始,掌握数学建模的基本技能

一、前言 本文主要面向没有了解过数学建模的同学&#xff0c;帮助同学们如何快速地进行数学建模的入门并且尽快地在各类赛事中获奖&#xff0c;或者写出优秀的数学建模论文。 在本文中&#xff0c;我将从什么是数学建模、数学建模的应用领域、数学建模的基本步骤、数学建模的技…

DevOps系列文章之 Git知识大全

这里是结合实际业务场景输出。 使用的 Git版本&#xff1a;git version 2.24.0 命令 git log 查看日志&#xff0c;常规操作&#xff0c;必备 # 输出概要日志,这条命令等同于 # git log --prettyoneline --abbrev-commit git log --oneline# 指定最近几个提交可以带上 - 数…

SpringBoot整合SpringData JPA

SpringBoot整合SpringData JPA 下一节直通车 JPA的一对一、一对多、多对多查询 简介 JPA(Java Persistence API)意即Java持久化API&#xff0c;是Sun官方在JDK5.0后提出的Java持久化规范&#xff08;JSR 338&#xff0c;这些接口所在包为javax.persistence&#xff0c;详细…

【《Spring Boot微服务实战(第2版)》——一本关于如何在Spring Boot中构建微服务的全面指南】

使用Spring Boot框架构建基于Java的微服务架构&#xff0c;将应用程序从小型单体架构蜕变为由多个服务组成的事件驱动架构。这个最新版本围绕服务发现、负载均衡、路由、集中式日志、按环境配置和容器化等知识点&#xff0c;循序渐进地讲述微服务架构、测试驱动的开发和分布式系…

Mac 预览(Preview)丢失PDF标注恢复

感谢https://blog.csdn.net/yaoyao_chen/article/details/127462497的推荐&#xff01; 辛苦用预览在pdf上做的阅读标记&#xff0c;关闭后打开全丢失了&#xff0c;推荐尝试下网站导入文件进行恢复&#xff1a; 直接使用该网页应用PDF Annotation Recovery 或者访问该项目&a…

下载|GitLab 2023 年 DevSecOps 全球调研报告:安全左移深入人心、AI/ML 蔚然成风

目录 谁应该对应用程序安全负主要责任&#xff1f; 安全实践的最大挑战 AI 驱动研发&#xff0c;提升研发效率 各个角色使用的工具数量是多少&#xff1f; 一体化 DevSecOps 平台有哪些优势&#xff1f; 56%、74%、71%、65%、57% 这些数字和 DevSecOps 结合在一起&#xf…

MySQL一些知识

六、MySQL命令参数 七、远程登录 use mysql 八、SQL语句和常见的SQL操作 九、数据库和表的创建及插入 指定字段名称&#xff0c;按照表的字段名称顺序写&#xff1a; 指定字段名称&#xff1a; 字段名称可以不全部指定&#xff1a;

K8s Service网络详解(二)

Kube Proxy Kubernetes 在设计之初就充分考虑了针对容器的服务发现与负载均衡机制。 Service 资源&#xff0c;可以通过 kube-proxy 配合 cloud provider 来适应不同的应用场景。 Service相关的事情都由Node节点上的 kube-proxy处理。在Service创建时Kubernetes会分配IP给Ser…

vue3-Vite原理

1. vite的优势 1. 极速的服务启动2. 轻量快速的预加载.....2. 对vite的理解&#xff08;和webpack对比说明&#xff09; webpack要经过打包&#xff0c;然后在开发阶段启动服务器vite不需要打包 下图的"准备"就是编译的意思。 css的内容会编译程一个字符串。 组件会…

海盗王基于golang重制版的商城服务端

海盗王原始的商城服务端&#xff0c;附带有很多其他功能&#xff08;如GM留言管理&#xff0c;商品管理接口&#xff09;&#xff0c;配置起来非常麻烦&#xff0c;而且运行时问题也很多&#xff0c;经常会出现弹出停止响应&#xff0c;无法正常提供服务。 在很早的时候&#x…

系统架构设计师-软件架构设计(1)

目录 一、软件架构的概念 1、架构的本质 2、架构的作用 二、架构发展历史 三、架构的 “4 1” 视图 1、逻辑视图&#xff08;Logical View&#xff09; 2、开发视图&#xff08;Development View&#xff09; 3、进程视图&#xff08;Process View&#xff09; 4、物理视图…