清洁机器人规划控制方案

清洁机器人规划控制方案

作者联系方式
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.mzph.cn/news/6106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++技能树】Vector类解析与模拟实现

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法…感兴趣就关注我bua&#xff01; Vector 0.Vector简介1.Vector常用接口1.1constructor构造函数1.2 iteratorsort与findfindsort 1.3 Capacity相关接口1.4 Modify相关接口 2. Vector模拟实…

linux:secureCRT通过pem证书远程访问服务器

参考&#xff1a; secureCRT通过pem证书远程访问服务器_Fengshana的博客-CSDN博客 总结&#xff1a; 配置公钥即可

前端vue uni-app仿美团下拉框下拉筛选组件

在前端Web开发中&#xff0c;下拉筛选功能是一种非常常见的交互方式&#xff0c;它可以帮助用户快速选择所需的选项。本文将介绍如何利用Vue.js和uni-app框架来实现一个高效的下拉筛选功能。通过使用这两个强大的前端框架&#xff0c;我们可以轻松地创建具有响应式用户操作的下…

Sublime Text 4 激活教程(Windows+Mac)

下载安装 官网 https://www.sublimetext.com 点击跳转 2023.7.21 版本为4143 Windows激活方式 一、激活License方式 入口在菜单栏中"Help” -> “Enter License” 注意格式&#xff0c;可能会过期失效&#xff0c;失效就用方式二 Mifeng User Single User License E…

Linux底层

一. arm基础知识 基础&#xff1a;c语言 具有一定硬件基础 特点---》前后联系 arm目标&#xff1a; 看懂简单的汇编代码 会看电路图、芯片手册 学会如何用软件控制硬件思想 解决问题的办法 谈谈对嵌入式的理解&#xff1f; 以计算应用为中心&#xff0c;软硬件可裁剪的…

Cloudreve搭建云盘系统,并实现随时访问

文章目录 1、前言2、本地网站搭建1.环境使用2.支持组件选择3.网页安装4.测试和使用5.问题解决 3、本地网页发布1.cpolar云端设置2.cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#xff0c;一时间公…

ONNX Runtime 加速深度学习(C++ 、python)详细介绍

ONNX Runtime 加速深度学习(C 、python)详细介绍 本文在 https://blog.csdn.net/u013250861/article/details/127829944 基础上进行了更改&#xff0c;感谢原作&#xff01; ONNXRuntime(Open Neural Network Exchange)是微软推出的一款针对ONNX模型格式的推理框架&#xff0c…

妙记多 Mojidoc PC端(Mac 端+windows端)Beta版本正式上线!

你们呼唤了无数次的妙记多 Mojidoc PC客户端 Beta版本正式上线啦&#xff01; 感谢300位妙友积极参与内测&#xff0c;给予了我们很多非常有效的意见和建议&#xff01;我们会根据用户反馈不断优化和修复相关功能&#xff0c;在此感谢妙友们一直以来的支持&#xff5e; PC端拥…

SkyWalking链路追踪中span全解

基本概念 在SkyWalking链路追踪中&#xff0c;Span&#xff08;跨度&#xff09;是Trace&#xff08;追踪&#xff09;的组成部分之一。Span代表一次调用或操作的单个组件&#xff0c;可以是一个方法调用、一个HTTP请求或者其他类型的操作。 每个Span都包含了一些关键的信息&am…

小程序 methods方法互相调用 this.onClickCancel is not a function

背景 做了一个自定义的弹出对话窗口&#xff0c;主要是自定义一些文本颜色。 问题 但是点击按钮事件&#xff1a;取消与确认&#xff0c;调用了同一个接口&#xff0c;然后想着走不同方法&#xff0c;需要调用methods其他方法。然后报错了&#xff1a; VM1081 WAService.js:…

行为型模式 - 状态模式

概述 【例】通过按钮来控制一个电梯的状态&#xff0c;一个电梯有开门状态&#xff0c;关门状态&#xff0c;停止状态&#xff0c;运行状态。每一种状态改变&#xff0c;都有可能要根据其他状态来更新处理。例如&#xff0c;如果电梯门现在处于运行时状态&#xff0c;就不能进…

C语言数据在内存中的存储

目录 前言 本期内容介绍 一、数据类型的介绍 1.1类型的意义&#xff1a; 1.2C语言中是否有字符串类型&#xff1f; 1.3类型的基本归类 整型家族&#xff1a; 浮点型&#xff08;实型&#xff09;家族&#xff1a; 构造&#xff08;自定义&#xff09;类型&#xff1a;…

STM32外设系列—TB6612FNG

本文涉及到定时器和串口的知识&#xff0c;详细内容可见博主STM32速成笔记专栏。 文章目录 一、TB6612简介二、TB6612使用方法2.1 TB6612引脚连接2.2 控制逻辑2.3 电机调速 三、实战项目3.1 项目简介3.2 初始化GPIO3.3 PWM初始化3.3 电机控制程序3.4 串口接收处理函数 一、TB66…

优化transformer

使用transformer而导致的时间长&#xff0c;可能会由于self-attention计算Query和key的值才导致的时间长&#xff0c;也可能会因为feed forward中的计算导致时间长。这里我们只针对第一种情况下进行优化。 第一种情况&#xff1a;有些问题&#xff0c;我们可能不需要看整个句子…

【问题总结】基于docker-compose实现nginx转发redis

目录&#xff1a; 文章目录 需求简介&#xff1a;Q1: nginx的http模块和http模块有什么不同Q2: 可以都使用stream模块进行配置吗 Docker环境下如何转发1 修改docker-compose2 修改nginx.conf3 测试连接 需求简介&#xff1a; 需要在192.168.3.11的ngnix上&#xff0c;转发192.…

前端 | ( 十)HTML5简介及相关新增属性 | 尚硅谷前端html+css零基础教程2023最新

学习来源&#xff1a;尚硅谷前端htmlcss零基础教程&#xff0c;2023最新前端开发html5css3视频 系列笔记&#xff1a; 【HTML4】&#xff08;一&#xff09;前端简介【HTML4】&#xff08;二&#xff09;各种各样的常用标签【HTML4】&#xff08;三&#xff09;表单及HTML4收尾…

MyBatis学习笔记——4

MyBatis学习笔记——4 一、MyBatis的高级映射及延迟加载1.1、多对一1.1.1、第一种方式&#xff1a;级联属性映射1.1.2、第二种方式&#xff1a;association1.1.3、第三种方式&#xff1a;分步查询 1.2、一对多1.2.1、第一种方式&#xff1a;collection1.2.1、第二种方式&#x…

Web后端开发总结

后端web开发大致流程 和对应的核心技术 对应技术的来源 springMVC可以理解为spring框架中的web开发框架 springMVCSpringMybatis就是我们熟知的ssm框架了

golang单元测试及mock总结

文章目录 一、前言1、单测的定位2、vscode中生成单测 二、构造测试case的注意事项1、项目初始化2、构造空interface{}3、构造结构体的time.Time类型4、构造json格式的test case 三、运行单测文件1、整体运行单测文件2、运行单个单测文件报错&#xff08;1&#xff09;command-l…