当前位置: 首页 > news >正文

机器人控制算法——TEB算法—Obstacle Avoidance and Robot Footprint Model(避障与机器人足迹模型)

1.How Obstacle Avoidance works

1.1处罚条款

避障是作为整体轨迹优化的一部分来实现的。显然,优化涉及到找到指定成本函数(目标函数)的最小成本解(轨迹)。简单地说:如果一个计划的(未来)姿势违反了与障碍物的期望分离,那么成本函数的成本必须增加。理想情况下,在这些情况下,成本函数值必须是无穷大的,否则优化器可能会更好地完全拒绝这些区域。然而,这将需要优化器处理硬约束(即求解非线性程序)。teb_local_planner放弃了考虑硬约束的能力,以便更好地考虑效率。将硬约束转化为软约束,从而得到具有有限代价的二次罚项。
在这里插入图片描述
上图显示了一个示例处罚条款(针对避障)。到障碍物的允许最小欧几里得距离(参数 m i n o b s t a c l e d i s t min_obstacle_dist minobstacledist)设置为0.2米。因此,0.2米以下的距离会导致非零成本。现在假设优化问题包含更多的成本项。其中一些是相互冲突的,例如时间最优性。因此,优化器可能会考虑到一个小的违规(因此也会考虑到小的惩罚),以最小化整个组合成本函数。这里有两个选项可以调整行为:
1. 调整优化权重(按比例缩放单个成本,此处为参数weight_obstacle)。但是,如果选择过高的值,优化问题就会变得病态,从而导致较差的便利性行为。
2. 通过添加“额外边距”来改变参数。通过在min_obstacle_dist参数中添加一个小的额外裕度,您可以将成本值隐式地增加到0.2m。您可以使用单个参数penalty_ epsilon同时移动所有惩罚项,但要小心,因为这样做会极大地影响优化结果。

1.2 局部最优解

请注意,优化器本身只能找到局部最优的解决方案。想象一下,机器人可能被两个障碍物横向包裹。惩罚项确实是非零的,但优化器会被卡住(达到这个局部最小值),因为将相应的姿势横向移动到其中一个障碍物会进一步增加总成本。您可以使用test_optim_node轻松尝试(请参阅教程设置和测试优化,并关闭同源类规划)。行为应类似于下图中的行为:
在这里插入图片描述
轨迹无法跳过障碍物。即使是姿势本身也被推离障碍物之间的区域(红色箭头)。显然,在实践中应该避免这种情况。因此,同源类规划算法寻求(拓扑)替代解决方案,而可行性检查(见下文)在实际指挥机器人之前拒绝了这样的解决方案。

1.3位势和障碍之间的关联

下图显示了一个常见规划场景的快照:
在这里插入图片描述该场景由一个移动机器人组成,该机器人在前往当前目标时接近多边形障碍物。计划(离散)轨迹由多个机器人姿态组成。规划者的目标是根据所需的时间分辨率(参数dt_ref)来安排每两个连续的姿势。请注意,实际分辨率不是固定/冻结的,因为优化器需要调整转换时间以寻求时间最优性。
对于避障,计划姿势和障碍物之间的距离必须从下方界定。图中的示例轨迹由8个可变姿势组成(起始姿势和目标姿势是固定的)。您可能同意,为了实现无碰撞轨迹,需要进行多次距离计算(优化器多次调用成本函数值的计算)。为了加速优化,实现了专用的关联策略。
对于每个障碍物(点/占用的成本图单元、线、多边形),定位计划轨迹的最接近姿态(见图)。根据参数obstacle_poses_affected的值,还考虑了最近姿态的受影响邻居。在随后的优化步骤中只考虑该选定的姿态子集(这里是3个姿态,因此是3个惩罚项)。分别在no_inner_iterations(参数)之后重复关联过程。在每个外部优化迭代obstacle_poses_affected的值会略微影响障碍物周围轨迹的平滑度。此外,更大的障碍需要更多的连接姿势,以避免不可错过的捷径。您也可以选择一个较高的值(>轨迹长度),以便将所有姿势与每个障碍物连接起来。
注意,机器人足迹模型被考虑用于距离计算,因此对于所需的计算资源至关重要。以下部分对详细信息进行了总结。

2.Robot Footprint Model 机器人足迹模型

出于优化目的,机器人足迹模型近似机器人的2D轮廓。该模型对于距离计算的复杂性以及计算时间至关重要。因此,机器人足迹模型构成了一个专用参数,而不是从通用的costmap_2d参数加载足迹。优化占地面积模型可能与成本图占地面积模型不同(后者用于可行性检查,请参阅下一节)。
封装外形模型是使用参数服务器选择和配置的。您可以将以下参数结构添加到teb_local_planner配置文件中:

TebLocalPlannerROS:footprint_model: # types: "point", "circular", "line", "two_circles", "polygon"type: "point"radius: 0.2 # for type "circular"line_start: [-0.3, 0.0] # for type "line"line_end: [0.3, 0.0] # for type "line"front_offset: 0.2 # for type "two_circles"front_radius: 0.2 # for type "two_circles"rear_offset: 0.2 # for type "two_circles"rear_radius: 0.2 # for type "two_circles"vertices: [ [0.25, -0.05], [0.18, -0.05], [0.18, -0.18], [-0.19, -0.18], [-0.25, 0], [-0.19, 0.18], [0.18, 0.18], [0.18, 0.05], [0.25, 0.05] ] # for type "polygon"

默认示意图模型的类型为“点”。注意,封装外形发布到~/teb_markers,并且可以在rviz中可视化(例如用于验证)。
重要提示:对于类似汽车的机器人,姿态[0,0]位于后轴(旋转轴)!
以下段落描述了所有不同的类型:

2.1迹线类型:点

机器人被建模为单个点。对于这种类型,需要最少的计算时间。

2.2迹线类型:圆形

机器人被建模为一个具有给定半径~/footprint_model/radius的简单圆。距离计算类似于点型机器人的计算,但有了例外,机器人的半径被添加到每个函数调用的参数min_obstacle_dist中。你可以通过选择一个点型机器人并事先将半径添加到最小障碍物距离来消除这种额外的添加。

2.3示意图类型:线条

直线机器人适用于在纵向和横向方向上表现出不同扩展/长度的机器人。可以使用参数/footprint_model/line_start和/footprint _model/line _end(每个[x,y]坐标)来配置线(段)。机器人(旋转轴)假定为[0,0](单位:米)。请确保通过进一步调整参数min_obstacle_dist来封装整个机器人(参见以下示例)。在这里插入图片描述
你也可以看看“两个圆”模型。

2.4示意图类型:两个圆圈

另一种近似机器人轮廓的可能性包括定义两个圆。每个圆由沿机器人x轴的偏移和半径来描述:/footprint_model/front_offset、/footprint _model/front_radius、~/foot print_model/rear_offset和~/footprint_model/rear_radius。偏移可能为负。
请参考下图作为示例:在这里插入图片描述
对于每个相关的机器人姿势,需要进行两次距离计算。

2.5迹线类型:多边形

可以通过定义闭合多边形来合并复杂模型。多边形是根据顶点列表定义的(为每个顶点提供x和y坐标)。假设机器人的旋转轴位于[0,0](单位:米)。请不要重复第一个顶点,因为多边形是自动关闭的。请记住,每增加一条边都会显著增加所需的计算时间!您可以从成本图通用参数文件中复制足迹模型。

3可行性检查

在优化器返回轨迹之后,在将速度命令发送到机器人之前,进行可行性检查。此检查的目的是识别优化器可能产生的无效/不可行轨迹(请记住:软约束、局部极小值等)。
目前,该算法从当前机器人姿势开始迭代前n个姿势(n=~/pability_check_no_poses(parameter!)),并检查这些姿势是否没有碰撞。为了检测是否发生碰撞,将使用成本图足迹(请参见导航教程)!因此,这个验证模型可能比用于优化的封装外形更复杂(请参阅上面的一节)。
由于优化器可能无法完全收敛,因此不应选择过高的值~/probability_check_no_poses:形象地说,当机器人向目标移动时,可以纠正(遥远)未来的小障碍违规行为。
如果您在狭窄的环境中驾驶,请确保正确配置避障行为(本地规划器和全局规划器)。否则,局部规划器可能会拒绝不可行的轨迹(从它的角度来看),但相比之下,全局规划器可能进一步认为所选的(全局)计划是可行的:机器人可能会被卡住。

Reference
1.Obstacle Avoidance and Robot Footprint Model

相关文章:

机器人控制算法——TEB算法—Obstacle Avoidance and Robot Footprint Model(避障与机器人足迹模型)

1.How Obstacle Avoidance works 1.1处罚条款 避障是作为整体轨迹优化的一部分来实现的。显然,优化涉及到找到指定成本函数(目标函数)的最小成本解(轨迹)。简单地说:如果一个计划的(未来&…...

谷歌浏览器报错:VM108:5 crbug/1173575, non-JS module files deprecated.

报错 解决 控制台调整为fast 3G...

Google Colab免费GPU使用教程

目录 前言一、Google Colab介绍二、使用步骤1、创建谷歌云盘2、创建一个新的Colab Notebook3、设置免费的GPU4、挂载Google Drive5、运行代码 三、防止掉线措施四、参考 前言 有时候本地跑代码可能耗时比较久,而且还会耽误你本地电脑的使用,购买云服务器…...

C++标准模板(STL)- 类型支持 (数值极限,C 数值极限接口)

C 数值极限接口 参阅 std::numeric_limits 接口 定义于头文件 <cstdint> PTRDIFF_MIN (C11) std::ptrdiff_t 类型对象的最小值 (宏常量) PTRDIFF_MAX (C11) std::ptrdiff_t 类型对象的最大值 (宏常量) SIZE_MAX (C11) std::size_t 类型对象的最大值 (宏常量) SIG_ATOMI…...

Eclipse Xtext 实现PLC ST 语言到C的转换

Eclipse Xtext 是开发领域专用语言&#xff08;DSL&#xff09;的工具。例如数据库的SQL 语言&#xff0c;PLC 的ST 语言都是一种领域专用语言。在开放自动化领域&#xff0c;提倡基于模型的设计方法。DSL 是描述模型的强有力工具。 在开发PLC 程序IDE时&#xff0c;开发ST编译…...

Django中ORM框架的各个操作

我们会好奇&#xff0c;python这么简洁的语言&#xff0c;数据查询是如何做的呢&#xff1f;我将进一步详细和深入地介绍Django中ORM框架的各个方面&#xff0c;包括MySQL的增删改查和复杂查询。让我们分步骤进行。 ORM框架介绍 Django的ORM框架是一个用于与数据库进行交互的工…...

leetcode 583. 两个字符串的删除操作、72. 编辑距离

两个字符串的删除操作 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 "sea…...

flutter 创建插件

资料&#xff1a; flutter与原生通信的方式简介 - 简书 完整流程 Flutter 集成 Golang 多语言跨端开发基础案例 - 知乎 https://www.cnblogs.com/webabcd/p/flutter_lib_plugin_plugin_ios.html 步骤1、创建插件 我创建的插件名字是konnect_im_sdk 选择的语言是 java和swi…...

Framework之旅 -- 后台Recent基础扫盲篇

如果想了解一个事物&#xff0c;是需要展开然后在优化记忆结构的&#xff0c;优化记忆在于后期的个人领悟能力&#xff0c;展开流水账如下&#xff0c;仅为个人记忆笔记&#xff0c;梳理结构有待优化。 TaskDescription&#xff0c;直译看就是task相关的说明了。 看看包含什么…...

全光谱护眼灯有哪些?2023全光谱护眼台灯推荐

随着电子设备的不断普及&#xff0c;手机、平板电脑、显示器、电视机等几乎是家家户户的必备品&#xff0c;也正因为眼睛有那么多时间、那么多机会去盯着屏幕&#xff0c;所以如今近视低龄化现象也越来越严重了。随着科技的不断发展&#xff0c;台灯的发展也越来越多样化&#…...

【JavaEE初阶】 定时器详解与实现

文章目录 &#x1f334;定时器是什么&#x1f38b;Java标准库中的定时器&#x1f332;模拟实现定时器&#x1f6a9;定时器的构成&#x1f4cc;第一步&#xff1a;MyStack类的建立&#x1f4cc;第二步&#xff1a;创建MyTimer类&#x1f4cc;第三步&#xff1a;解决相关问题 &am…...

基于YOLOv8模型和WiderPerson数据集的行人目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型和WiderPerson数据集的行人目标检测系统可用于日常生活中检测与定位行人目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标…...

COSCon'23 开源社文创丨 给开源人一点“color see see”

成都城市限定 “小O在成都”行李箱贴纸 成都限定行李箱贴纸把小O和特色元素相融合 当小O遇到成都 在云端漫步的蓝色小章鱼 掉落到这座热情似火的城市&#xff0c; 结识了大熊猫朋友 学会了四川麻将 吃到了红油串串... 快带着小O来一场自由的旅游吧&#xff01; “你也要尝尝竹子…...

C++前缀和算法的应用:从仓库到码头运输箱子原理、源码、测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 双指针 单调双向队列 题目 你有一辆货运卡车&#xff0c;你需要用这一辆车把一些箱子从仓库运送到码头。这辆卡车每次运输有 箱子数目的限制 和 总重量的限制 。 给你…...

【面试HOT100】链表树

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于LeetCodeHot100进行的&#xff0c;每个知识点的修正和深入主要参考…...

了解 Elasticsearch 自动生成的文档 _id:重复是一个问题吗?

Elasticsearch 中自动生成的文档 ID 当你在未指定 ID 的情况下对文档建立索引时&#xff0c;Elasticsearch 会自动为该文档生成唯一的 ID。 该 ID 是 Base64 编码的 UUID&#xff0c;由多个部分组成&#xff0c;每个部分都有特定的用途。 ID 生成过程针对索引速度和存储效率进…...

量子信息处理器可能能够提供高度压缩的生成对抗学习任务的版本

量子信息处理在生成对抗学习任务中的应用可能性&#xff0c;以及量子信息处理器在表示高维向量和执行线性代数运算上的优势。 举个例子 假设底层数据由M个在N维实数或复数空间中的归一化向量~vj组成&#xff0c;使得数据的&#xff08;归一化&#xff09;协方差矩阵为C (1/M…...

linux-守护进程daemon

linux-守护进程daemon 代码实现 main.c运行结果 代码实现 main.c //pName&#xff1a;程序名 //facility&#xff1a; 守护进程&#xff0c;输出日志类型 302页 #include<signal.h> #include<syslog.h> #include<fcntl.h> static int daemon_proc 0; #defin…...

Kafka Tool(Kafka 可视化工具)安装及使用教程

Kafka Tool&#xff08;Kafka 可视化工具&#xff09;安装及使用教程 Kafka Tool 工具下载 下载地址 http://www.kafkatool.com/download.html 下载界面 不同版本的Kafka对应不同版本的工具&#xff0c;个人使用的是2.11&#xff0c;所以下载的是最新的2.0.8版本&#xff…...

【大揭秘】美团面试题:ConcurrentHashMap和Hashtable有什么区别?一文解析!

正文 亲爱的小伙伴们&#xff0c;大家好&#xff01;我是小米&#xff0c;一个热爱技术分享的程序员&#xff0c;今天我为大家带来了一篇有关美团面试题的热门话题&#xff1a;ConcurrentHashMap 和 Hashtable 有什么区别。这个问题在Java面试中常常被拿来考察对多线程编程的理…...

YC 总裁开源了自己亲手写的 AI Agent 大脑,1 周就 1 万点赞。

还记得之前那个特别火的 GStack 吗?我前几天也发过文章介绍过。就是 Y Combinator 现任总裁兼 CEO Garry Tan 开源的那套专门给 AI 写代码用的 Skill 工作流&#xff0c;目前 7 万 Star。每天有 3 万开发者在用&#xff0c;在 Claude Code 圈子里基本算是贼火模板了。就在前几…...

nli-MiniLM2-L6-H768快速上手:金融研报摘要主题分类(科技/宏观/行业)

nli-MiniLM2-L6-H768快速上手&#xff1a;金融研报摘要主题分类&#xff08;科技/宏观/行业&#xff09; 1. 工具简介 nli-MiniLM2-L6-H768是一款基于cross-encoder/nli-MiniLM2-L6-H768轻量级NLI模型开发的本地零样本文本分类工具。它专为解决传统文本分类需要大量标注数据和…...

不同水质检测标准不同

一、生活饮用水检测标准&#xff08;核心常用&#xff09;执行标准&#xff1a;《生活饮用水卫生标准》&#xff08;GB 5749-2022&#xff09;&#xff0c;配套检验方法为《生活饮用水标准检验方法》&#xff08;GB/T 5750-2023&#xff09;&#xff0c;自2023年4月1日起实施&a…...

别再手动扫码了!Python + Requests库模拟QQ空间登录全流程详解(附避坑指南)

Python自动化登录QQ空间&#xff1a;从扫码原理到完整实现 每次打开QQ空间都要掏出手机扫码&#xff0c;是不是觉得有点麻烦&#xff1f;作为开发者&#xff0c;我们完全可以用代码实现自动化登录。本文将深入解析QQ空间扫码登录背后的技术原理&#xff0c;并手把手教你用Pytho…...

分布式事务终极解决方案:Seata原理与落地实践

分布式事务终极解决方案&#xff1a;Seata原理与落地实践 在微服务架构中&#xff0c;分布式事务一直是开发者面临的难题。传统的事务管理方式难以应对跨服务的数据一致性需求&#xff0c;而Seata&#xff08;Simple Extensible Autonomous Transaction Architecture&#xff…...

打卡信奥刷题(3154)用C++实现信奥题 P7725 珍珠帝王蟹(Crab King)

P7725 珍珠帝王蟹&#xff08;Crab King&#xff09; 题目背景 在一次航程中&#xff0c;你偶然发现了被一片礁石环绕的帝王蟹&#xff0c;被月岛能量侵蚀的它又与月光有着怎样的联系呢&#xff1f;似乎只有击败它才能见分晓。 题目描述 帝王蟹可以通过镶嵌宝石触发战斗&#x…...

告别串口不够用:手把手教你用WK2124芯片为树莓派/香橙派扩展4个UART

树莓派/香橙派串口扩展实战&#xff1a;WK2124芯片全攻略 当你在树莓派或香橙派上连接多个传感器、执行器或通信模块时&#xff0c;原生串口数量不足的问题常常成为开发瓶颈。WK2124这颗SPI转4串口芯片&#xff0c;能以不到20元的成本完美解决这个痛点。本文将带你从硬件连接到…...

如何在Home Assistant中实现美的智能家电的本地网络控制:3步完成终极本地化方案

如何在Home Assistant中实现美的智能家电的本地网络控制&#xff1a;3步完成终极本地化方案 【免费下载链接】homeassistant-midea-air-appliances-lan This Home Assistant custom component adding support for controlling Midea air conditioners and dehumidifiers on loc…...

Bili2Text:3分钟将B站视频转为文字稿的免费终极方案

Bili2Text&#xff1a;3分钟将B站视频转为文字稿的免费终极方案 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾为整理B站视频内容而反复观看同一片段…...

键盘输入抖动过滤:用开源工具拯救老化的机械键盘

键盘输入抖动过滤&#xff1a;用开源工具拯救老化的机械键盘 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是否遇到过打字时按键重复…...