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.mzph.cn/pingmian/49254.shtml

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

相关文章

【数据挖掘】词云分析

目录 1. 词云分析 2. Python 中的 WordCloud 库 1. 词云分析 词云(Word Cloud)是数据可视化的一种形式,主要用于展示文本数据中单词的频率和重要性。它具有以下几种主要用途和意义: 1. 文本分析 • 识别关键主题:通…

AI学习记录 - 图像识别的基础入门

代码实现,图像识别入门其实非常简单,这里使用的是js,其实就是把二维数组进行公式化处理,处理方式如上图,不同的公式代表的不同的意义,这些意义网上其实非常多,这里就不细讲了。 const getSpecif…

JavaScript构造函数小挑战

// 编码挑战 #1 /* 使用构造函数实现一辆汽车。一辆汽车有一个品牌和一个速度属性。speed 属性是汽车当前的速度,单位为 km/h; a. 执行一个 “accelerate ”方法,将汽车的速度提高 10,并将新速度记录到控制台; 3. a.…

VSCode python autopep8 格式化 长度设置

ctrl, 打开设置 > 搜索autopep8 > 找到Autopep8:Args > 添加项--max-line-length150

等保测评练习卷17

等级保护初级测评师试题17 姓名: 成绩: 判断题(101=10分)1. 关于安全区域边界的安全审计,三级系统的要求包括应对审计进程进行保护,防止未经授权的中断。( F ) 是安全计算环境的安全审计 2.…

秋招突击——7/22——复习{堆——前K个高频元素}——新作{回溯——单次搜索、分割回文串。链表——环形链表II,合并两个有序链表}

文章目录 引言复习堆堆——前K个高频元素个人实现复习实现二参考实现 新作单词搜索个人实现参考实现 分割回文串个人实现参考实现 环形链表II个人实现参考实现 两个有序链表个人实现 总结 引言 又是充满挑战性的一天,继续完成我们的任务吧!继续往下刷&a…

WebRTC QoS方法十三.2(Jitter延时的计算)

一、背景介绍 一些报文在网络传输中,会存在丢包重传和延时的情况。渲染时需要进行适当缓存,等待丢失被重传的报文或者正在路上传输的报文。 jitter延时计算是确认需要缓存的时间 另外,在检测到帧有重传情况时,也可适当在渲染时…

【目标检测实验系列】EMA高效注意力机制,融合多尺度特征,助力YOLOv5检测模型涨点(文内附源码)

1. 文章主要内容 本篇博客主要涉及多尺度高效注意力机制,融合到YOLOv5s模型中,增加模型提取多尺度特征的能力,助力模型涨点。(通读本篇博客需要7分钟左右的时间)。 2. 简要概括 论文地址:EMA论文地址 如下…

Blender材质-PBR与纹理材质

1.PBR PBR:Physically Based Rendering 基于物理的渲染 BRDF:Bidirection Reflectance Distribution Function 双向散射分散函数 材质着色操作如下图: 2.纹理材质 左上角:编辑器类型中选择,着色器编辑器 新建着色器 -> 新建纹理 -> 新…

音视频入门基础:H.264专题(17)——FFmpeg源码获取H.264裸流文件信息(视频压缩编码格式、色彩格式、视频分辨率、帧率)的总流程

音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

【开源库编译 | zlib】 zlib库最新版本(zlib-1.3.1)在Ubuntu(Linux)系统下的 编译 、交叉编译(移植)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

《书生大模型实战营第3期》入门岛 学习笔记与作业:Git 基础知识

文章大纲 Git 是什么?-- 分布式版本控制系统版本控制系统简介Git 基本概念1. 安装 Git1.1 Windows 系统1.2 Linux 系统 2. Git 托管平台3. 常用 Git 操作4. tips4.1 全局设置 vs. 本地设置4.2 如何配置4.3 验证设置4.4 Git 四步曲 5. 常用插件6. 常规开发流程 作业其…

js+css侧边导航菜单 可收缩

jscss侧边导航菜单 可收缩https://www.bootstrapmb.com/item/14774 创建一个可收缩的侧边导航菜单需要使用JavaScript来处理交互&#xff0c;而CSS则用来设置样式和动画效果。以下是一个简单的示例&#xff0c;展示了如何创建一个可收缩的侧边导航菜单。 HTML 结构 html<!…

重修之路1

我也不知道我现在处于个什么状态&#xff0c;我在以前写代码时知道部分方法如何使用&#xff0c;但是也仅限于此我并不了其如何实现&#xff0c;让我感到迷茫我是越来越菜了随着AI的发展它写出的代码简洁高效甚至让我有些看不懂&#xff0c;以至于我开始怀疑自己的JS基本功因此…

【接口测试】params传参与body传参区别

文章目录 一.params传参二.body传参三.两者区别说明 一.params传参 params传参一般用于get请求 params传参时,参数会附于URL后面以问号形式展示。 示例&#xff1a; http://ip地址:端口号/login?usernamexm&pwd111二.body传参 body传参一般用于post请求 body传参时需…

MacOS安装SDKMan管理Java版本

文章目录 1 简介2 安装与卸载2.1 安装2.2 卸载 3 使用3.1 查看其他工具&#xff1a;支持 Ant, Maven 等3.2 查看Java版本3.3 安装Java&#xff0c;加上相关的版本3.4 设置Java版本(全局)3.5 只在当前窗口生效3.6 卸载1 默认环境无法卸载 4 jdk安装的位置5 与IDEA集成参考 1 简介…

简单修改,让UE4/5着色器编译速度变快

简单修改&#xff0c;让UE4/5着色器编译速度变快 目录 简单修改&#xff0c;让UE4/5着色器编译速度变快 一、问题描述 二、解决方法 &#xff08;一&#xff09;硬件升级 &#xff08;二&#xff09;调整相关设置和提升优先级 1.调整相关设置 &#xff08;1&#xff09…

Pytorch 6

罗切斯特回归模型 加了激活函数 加了激活函数之后类 class LogisticRegressionModel(torch.nn.Module):def __init__(self):super(LogisticRegressionModel, self).__init__()self.linear torch.nn.Linear(1,1)def forward(self, x):# y_pred F.sigmoid(self.linear(x))y_p…

Java学习 - Spring Boot整合 Thymeleaf 实例

什么是 Thymeleaf Thymeleaf 是新一代的 Java 模板引擎&#xff0c;类似于 Velocity、FreeMarker 等传统引擎&#xff0c;其语言和 HTML 很接近&#xff0c;而且扩展性更高&#xff1b; Thymeleaf 的主要目的是将优雅的模板引入开发工作流程中&#xff0c;并将 HTML 在浏览器中…

MSPM0G3507学习笔记1:开发环境_引脚认识与点灯

今日速通一款Ti的单片机用于电赛&#xff1a;MSPM0G3507 这里默认已经安装好了Keil5_MDK 首先声明一下: 因为是速成&#xff0c;所以需要一定单片机学习基础&#xff0c;然后我写的也不会详细&#xff0c;这个专栏的笔记也就是自己能看懂就行的目标~~~ 文章提供测试代码解…