ROS2入门到精通—— 2-8 ROS2实战:机器人安全通过狭窄区域的方案

0 前言

室内机器人需要具备适应性和灵活性,以便在狭窄的空间中进行安全、高效的导航。本文提供一些让机器人在狭窄区域安全通过的思路,希望帮助读者根据实际开发适当调整和扩展

1 Voronoi图

Voronoi图:根据给定的一组“种子点”,将平面划分为各个区域,每个区域内的所有点到该区域的种子点的距离比到其他任何种子点的距离都近

Voronoi diagram特征:

  • 每个泰森多边形仅含有一个离散点数据
  • 泰森多边形内的点到相应离散点的距离最近
  • 位于泰森多边形边上的点到其两边的离散点的距离相等,两边离散点的垂直平分线

在这里插入图片描述

在这里插入图片描述如图所示,使用维诺图可以保证机器人行走在狭窄区域的最中间位置,从而可以安全通过狭窄区域

实现思路:
(1)环境建模:对机器人所在环境建模,并生成包含障碍物和可行区域的地图(利用建图算法)
(2)生成Voronoi图:使用环境地图,通过计算生成Voronoi图
(3)路径规划:基于生成的Voronoi图,应用A*或DP找到最优路径
(4)局部跟踪:跟踪找到的最优路径,在执行过程中,机器人可能会使用实时感知数据动态避障,确保在狭窄区域不会与障碍物发生碰撞

使用voronoi planner的优点:有效将机器人的路径规划和避障结合起来,考虑了环境的局部特征,使机器人能够选择相对较宽的通道穿越狭窄区域,提高了导航的效率和安全性

2 代价地图

A*算法会贴着障碍物走,过窄门等狭窄环境效果不好,容易撞上去,这时候可以调大代价地图中的膨胀层

(1) Global Costmap
全局代价地图主要用于全局的路径规划器
包含的图层:

  • Static Map Layer:静态地图层,通常都是SLAM建立完成的静态地图,包含了环境中固定不变的信息,如墙壁等,静态地图层提供了机器人导航的基本参考
  • Obstacle Map Layer:障碍地图层,用于动态记录传感器感知到的障碍物信息,确保机器人能够避开这些障碍物
  • Inflation Layer:膨胀层,在以上两层地图上进行膨胀(向外扩张),以避免机器人的外壳会撞上障碍物

(2) Local Costmap
局部代价地图主要用于局部的路径规划器
包含的图层有:

  • Obstacle Map Layer:障碍地图层,用于动态记录传感器感知到的障碍物信息
  • Inflation Layer:膨胀层,在障碍地图层上进行膨胀(向外扩张),以避免机器人的外壳会撞上障碍物

自定义代价地图层:根据业务需求进行临时设置的地图数据,根据特定的场景或任务,在代价地图中添加自定义的代价信息,如优先避让某些区域或者设置特定的路径约束等

实现思路:

  • 动态调整膨胀层参数
  • 自定义代价地图插件

3 按照预先给定的路径给控制器去跟踪

实现思路:

  • 方案一:键盘控制实车录制路径,然后录制的路径作为全局路径给局部控制器去跟踪
  • 方案二:写一个脚本让实车到达指定目标点再进行下一次跟踪,例如过门,一遍导不出去,会撞到门,像如下图将一个目标点拆分为多个目标点(原先是(1)->(4),现在变成(1)->(2)->(3)->(4))
    在这里插入图片描述
  • 方案三:在Rviz上或者网页B端点几个点,每个点之间用直线或贝塞尔或B样条,生成你想要的全局路径给局部控制器去跟踪

4 通过二次规划的方法帮助机器人在狭窄区域中实现路径规划和避障

实现思路:

  • 环境建模:机器人通过SLAM算法,利用传感器数据建图
  • 路径生成:根据上面的环境建模,生成一条全局路径穿过狭窄区域(Voronoi算法)
  • 路径优化:得到的初始路径可能不是最优的或者不满足机器人动力学约束,接下来使用二次规划的方法对初始路径进行优化。路径的二次规划方法可以考虑机器人的动力学模型和环境约束,生成一个在狭窄通道中最优的可行路径
  • 约束建模:将机器人的动力学约束和环境约束表示为一组等式或者不等式约束。动力学约束可以包含速度、加速度、转弯半径,环境约束可以包含避开障碍物或保持一定的安全距离
  • 代价函数定义:根据具体的应用场景定义
  • 优化求解
  • 路径执行:求解的路径给局部控制器去跟踪

机器人导航通过狭窄区域是一个具有挑战性的任务,本文讨论了四种方法:voronoi、costmap、预先给定路径、二次规划优化全局路径,这些方法提供了一种思路和参考,可以根据实际需求改进和扩展

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu22.04系统安装nodejs 14 保姆级教程

下载软件包 从NodeSource 的官方源下载并安装 Node.js 14.x 版本的软件包,适用于 Debian 和 Ubuntu 系统: curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - 更新软件源 更新软件源 sudo apt-get update 下载bodejs14 下载nodejs14 sud…

Jenkins卡在等待界面解决方法

一、问题 部署jenkins服务器出现Please wait while Jenkins is getting ready to work。 二、原因分析 jenkins里面文件指向国外的官网,因为防火墙的原因连不上。 三、解决方法 将配置文件里面的url换成国内镜像: (1)修改配…

WEB攻防-通用漏洞-SQL 读写注入-MYSQLMSSQLPostgreSQL

什么是高权限注入 高权限注入指的是攻击者通过SQL注入漏洞,利用具有高级权限的数据库账户(如MYSQL的root用户、MSSQL的sa用户、PostgreSQL的dba用户)执行恶意SQL语句。这些高级权限账户能够访问和修改数据库中的所有数据,甚至执行…

2024/7/23 英语每日一段

As malware has improved and evolved, it has pushed defense software to require constant connection and more extensive control. That deeper access also introduces a far higher possibility that security software—and updates to that software—will crash the …

RabbitMQ入门详解

前言 本篇文章将详细介绍rabbitmq的基本概念知识,以及rabbitmq各个工作模式在springboot中如何使用。 文章目录 介绍 简介 RabbitMQ 核心 生产者与消费者 Exchange Queue 工作模式 简单模式 工作队列模式 发布订阅模式 路由模式 主题模式 SpringBoot中…

java算法day21

java算法day21 77 组合216 组合总和Ⅲ17 电话号码的数字组合39 组合总和 这个阶段所要解决的问题都是有关回溯算法。 所以说解法基本上都是围绕回溯算法模板来完成。回溯算法可以这样总结,树形结构,横向遍历,纵向递归。递归出口收货结果并终…

(十九)原生js案例之h5地里位置信息与高德地图的初使用

h5 地里位置信息 1. 获取当前位置信息 window.onload function () {const oBtn document.querySelector("#btn");const oBox document.querySelector("#box");oBtn.onclick function () {window.navigator.geolocation.getCurrentPosition(function (…

c++----模版进阶

c----模版初阶:http://t.csdnimg.cn/PiYoD 一.非类型模版参数 模板参数除了可以是类型,还可以是常量。 例如: 这样就可以在类中使用这个n常量。 -------------------------------------------------------------------------------------…

鸿蒙OS物联网创新应用实训解决方案

摘要: 随着物联网技术的飞速发展,各种智能设备和传感器正在以前所未有的速度融入我们的日常生活。华为推出的鸿蒙操作系统(HarmonyOS)作为一款面向全场景、多设备、无缝连接的分布式操作系统,为物联网领域带来了全新的…

机器学习 | 回归算法原理——最小二乘法

Hi,大家好,我是半亩花海。很早便想学习并总结一本很喜欢的机器学习图书——立石贤吾的《白话机器学习的数学》,可谓通俗易懂,清晰形象。那就在此分享并作为学习笔记来记录我的学习过程吧!本章的回归算法原理基于《基于…

【时序约束】读懂用好Timing_report

一、静态时序分析: 静态时序分析(Static Timing Analysis)简称 STA,采用穷尽的分析方法来提取出整个电路存在的所有时序路径,计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足时序要求&a…

centos系统mysql主从复制(一主一从)

文章目录 mysql80主从复制(一主一从)一、环境二、服务器master1操作1.开启二进制日志2. 创建复制用户3. 服务器 slave1操作4. 在主数据库中添加数据 mysql80主从复制(一主一从) 一、环境 准备两台服务器,都进行以下操…

linux系统安装python3和pip

一、安装python 1、安装依赖环境 yum install gcc -y yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel yum install zlib zlib-devel openssl -y yum install openssl…

Qt源码交叉编译带openssl的Qt版本

一.背景 近期项目由于对接的后台服务是https的,之前交叉编译的Qt是不带openssl的,为了能支持https,必须要重新编译Qt。 二.环境 环境准备: Ubuntu版本 :18.04; openssl 版本:1.1.1.g&#xff1b…

vscode 搭建 golang 开发环境

介绍 在 vscode 搭建 go 的开发环境需要区分两个方向: go 1.19.0 及其更高版本go 1.19.0 之前的版本 为什么这么分,因为 vscode-go 插件自带的工具安装脚本全部都是装最新版的各类工具,这些工具中有部分要求 go 1.19.0 以上才能安装成功。…

手写RPC-令牌桶限流算法实现,以及常见限流算法

为什么需要服务限流、降级 分布式架构下,不同服务之间频繁调用,对于某个具体的服务而言,可能会面临高并发场景。在这样的情况下,提供服务的每个服务节点就都可能由于访问量过大而引起一系列问题,比如业务处理耗时过长、…

SpringBoot把nacos配置注入时数据注入时出现莫名错误

一、错误详情 我在nacos的配置a是003457 但是注入的数据是1839 二、解决方法 通过加号可以解决这个问题: 数据正确了:

【BUG】已解决:SyntaxError: invalid syntax

SyntaxError: invalid syntax 目录 SyntaxError: invalid syntax 【常见模块错误】 【解决方案】 常见原因及解决方法 解决步骤 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职…

Ubuntu22.04离线安装nginx

下载安装包 nginx nginx下载地址,选stable的即可,传到服务器上面,记住上传路径 提示: 下面的openssl,zlib,pcre也可以不下载也可以,我这里是考虑到完全离线下载的情况openssl 这个是https需要弄得,如果生产…

【JavaScript】箭头函数

具体讲解 之前写 this 的指向时就提到过箭头函数,但是由于其比较复杂,还是单独开一篇来讲箭头函数。 箭头函数,箭头函数不能作为构造函数,没有原型 prototype,不能 new。 在箭头函数中,this 关键字指向的是…