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、预先给定路径、二次规划优化全局路径,这些方法提供了一种思路和参考,可以根据实际需求改进和扩展

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

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

相关文章

嵌入式C++、ROS 、OpenCV、SLAM 算法和路径规划算法:自主导航的移动机器人流程设计(代码示例)

在当今科技迅速发展的背景下,嵌入式自主移动机器人以其广泛的应用前景和技术挑战吸引了越来越多的研究者和开发者。本文将详细介绍一个嵌入式自主移动机器人项目,涵盖其硬件与软件系统设计、代码实现及项目总结,并提供相关参考文献。 项目概…

手持式气象检测设备:便携科技,气象探测

一、手持式气象检测设备:小巧身躯,大能量 手持式气象检测设备,顾名思义,是一种可以手持操作的气象监测工具。它集成了温度、湿度、气压、风速风向等多种传感器,能够实时获取气象数据,并通过显示屏或手机APP…

实战解读:Llama Guard 3 Prompt Guard

前序研究:实战解读:Llama 3 安全性对抗分析 近日,腾讯朱雀实验室又针对 Llama 3.1 安全性做了进一步解读。 2024年7月23日晚,随着Llama3.1的发布,Meta正式提出了“Llama系统”的概念,通过系统级的安全组件对…

Sentinel限流规则详解

上一期教程讲解了 Sentinel 的快速入门:Sentinel快速入门,这一期主要讲述 Sentinel 的限流规则 簇点链路 簇点链路就是项目内的调用链路(Controller -> Service -> Mapper),链路中被监控的每个接口就是一个资源…

Nginx 如何处理 WebSocket 连接?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会! 文章目录 Nginx 如何处理 WebSocket 连接?一、WebSocket 连接简介二、Nginx 处理 WebSocket 连接的基本原理三、配置 Nginx 支持 WebSocket 连接四、Nginx 中的…

苍穹外卖(一)之环境搭建篇

Ngnix启动一闪而退 启动之前需要确保ngnix.exe的目录中没有中文字体,在conf目录下的nginx.conf文件查看ngnix的端口号,一般默认为80,若80端口被占用就会出现闪退现象。我们可以通过logs/error.log查看错误信息,错误信息如下&…

边界网关IPSEC VPN实验

拓扑: 实验要求:通过IPSEC VPN能够使PC2通过网络访问PC3 将整个路线分为三段 IPSEC配置在FW1和FW2上,在FW1与FW2之间建立隧道,能够传递IKE(UDP500)和ESP数据包,然后在FW1与PC2之间能够流通数据…

Linux网络:传输层协议TCP(二)三次挥手四次握手详解

目录 一、TCP的连接管理机制 1.1三次握手 1.2四次挥手 二、理解 TIME_WAIT 状态 2.1解决TIME_WAIT 状态引起的 bind 失败的方法 三、理解CLOSE_WAIT状态 一、TCP的连接管理机制 在正常情况下, TCP 要经过三次握手建立连接, 四次挥手断开连接 1.1三次握手 三次握手顾名思…

基于微信小程序+SpringBoot+Vue的资料分享系统(带1w+文档)

基于微信小程序SpringBootVue的资料分享系统(带1w文档) 基于微信小程序SpringBootVue的资料分享系统(带1w文档) 校园资料分享微信小程序可以实现论坛管理,教师管理,公告信息管理,文件信息管理,文件收藏管理等功能。该系统采用了Sp…

LINUX 孤儿进程和僵尸进程

1、孤儿进 一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作 为了释放子进程的占用的系统资源: 进程结束之后&#xf…

pyenv-win | python版本管理,无需卸载当前版本

系统:windows,且已安装git。 使用 pyenv-win 在Windows中管理多个python版本,而无需卸载当前版本。安装步骤如下: 安装 pyenv-win 1. 安装 Git 和 pyenv-win: git clone https://github.com/pyenv-win/pyenv-win.git %USERPRO…

ControlNet on Stable Diffusion

ControlNet on Stable Diffusion 笔记来源: 1.Adding Conditional Control to Text-to-Image Diffusion Models 2.How to Use OpenPose & ControlNet in Stable Diffusion 3.ControlNet与DreamBooth:生成模型的精细控制与主体保持 4.Introduction t…

Git(分布式版本控制系统)(fourteen day)

一、分布式版本控制系统 1、Git概述 Git是一种分布式版本控制系统,用于跟踪和管理代码的变更,它由Linux、torvalds创建的,最初被设计用于Linux内核的开发。Git允许开发人员跟踪和管理代码的版本,并且可以在不同的开发人员之间进行…

代码随想录算法训练营day6 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1.两数之和

文章目录 哈希表键值 哈希函数哈希冲突拉链法线性探测法 常见的三种哈希结构集合映射C实现std::unordered_setstd::map 小结242.有效的字母异位词思路复习 349. 两个数组的交集使用数组实现哈希表的情况思路使用set实现哈希表的情况 202. 快乐数思路 1.两数之和思路 总结 今天是…

VINS-Fusion 回环检测pose_graph_node

VINS-Fusion回环检测,在节点pose_graph_node中启动。 pose_graph_node总体流程如下: 重点看process线程。 process线程中,将订阅的图像、点云、位姿时间戳对齐,对齐后分别存入image_msg、point_msg、pose_msg。pose_msg为VIO后端优化发布的位姿。 一、创建关键帧keyFram…

opencascade AIS_ManipulatorOwner AIS_MediaPlayer源码学习

前言 AIS_ManipulatorOwner是OpenCascade中的一个类,主要用于操纵对象的交互控制。AIS_ManipulatorOwner结合AIS_Manipulator类,允许用户通过可视化工具(如旋转、平移、缩放等)来操纵几何对象。 以下是AIS_ManipulatorOwner的基…

【Drone】drone编译web端 防墙策略 | 如何在被墙的状态drone顺利编译npm

一、drone编译防墙版本 1、web端drone kind: pipeline type: docker name: ui steps:- name: build_projectimage: node:20-slim depends_on: [clone]volumes:- name: node_modulespath: /drone/src/node_modulescommands:- pwd- du -sh *- npm config set registry https://…

免费【2024】springboot 毕业生学历证明系统

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

SQL labs-SQL注入(二)

环境搭建参考 SQL注入(一) 一,SQL labs-less2。 http://192.168.61.206:8001/Less-2/?id-1 union select 1,2,group_concat(username , password) from users-- 与第一关没什么太大的不同,唯一区别就是闭合方式为数字型。 二…

超火爆AI工具——Vozo:一键重写视频脚本、重新配音!

最近有一款短视频工具——Vozo AI非常火热,上线即登Product Hunt榜首,且已蝉联3天。 它的全名是Vozo Rewrite & Redub,Rewrite意味着重新编写,Redub代表重新配音,它能够根据提示词,重新生成视频脚本并能…