多机器人编队避障算法(1)
文章目录
- 前言
- 一、基于感知的避障
- 1.基于感知的Epuck2避障思路(理论)
- 2.基于感知的Epuck2避障实现(现实)
- 3.距离传感器结合红外传感器修复避障Bug
- 4.问题
- 5.代码逻辑图
- 二、基于人工势场力的避障
- 1.基于人工势场的Epuck2避障思路(理论)
- 2.基于人工势场力的Epuck2避障实现(现实)
- 三、两种避障方法的对比分析
- 总结
前言
今天闲的没事,正好是10/24,CSDN有活动,就把之前做的一些多机器人编队避障算法(主要是纯控制避障)梳理小结下( •̀ ω •́ )✧
一、基于感知的避障
1.基于感知的Epuck2避障思路(理论)
Ri为人工势场的斥力项,假设在k时刻机器人可得到一定范围内的障碍物坐标Xobs ,障碍物会对机器人 的速度产生一个斥力的影响R:
R的计算公式为:
其中M为障碍物个数,dm为探测距离,在此时刻避障响应R(k)会对机器人的速度控制产生一个影响。
2.基于感知的Epuck2避障实现(现实)
在Epuck2实机避障时,最终的控制输出Ui是线速度和角速度。
其中position_difference和angular_difference是机器人与期望位置/角度的差值。
avoid_delta按照上述公式进行计算。
然后当Epuck2探测到障碍物距离小于0.1m时,计算产生避障项使linear_velocity为负值机器人远离障碍物,并且产生正向或反向的角速度使机器人转向。当与障碍物距离大于0.1m时避障项为0,机器人向期望位置前进。
3.距离传感器结合红外传感器修复避障Bug
前面所说的Epuck2避障思路,但最终呈现出的效果却是机器人在障碍物前徘徊,无法绕过障碍物。
原因是机器人接近障碍物后,距离小于0.1m后产生反方向的速度,使距离拉大。当距离大于0.1m后避障项为0,机器人又受到引力作用向前,进而又使距离缩小,虽然会产生角速度使机器人转向,但只要靠近障碍物距离小于0.1m即产生反方向速度使机器人无法前进,原地徘徊。
解决:没有对人工势场项进行更改,而是通过距离和红外传感器反馈的距离来细化何时添加避障项,进行避障。
如图所示为Epuck2距离传感器(ToF)和8个红外传感器(Prox)的位置,通过代码可以分别获得他们检测到的与障碍物的距离信息(距离传感器的探测距离为2m,红外传感器的探测距离为0.05m)。
距离传感器探测到的距离记为r,8个红外传感器探测到的距离依次记为p0,p1,p2…p7(依图中标号)。
(1)避障项avoid_delta的计算
避障项的计算不变,但触发条件改变,之前通过动捕计算机器人中心位置与障碍物中心位置的距离(是否小于0.1)进行触发。改为由Epuck2前方的1个距离传感器和4个红外传感器触发,如图所示。
程序设置当r小于0.08m或p0,p1,p7,p6返回的探测距离中有一个小于0.04m时,表明机器人的前侧方遇到障碍物,返回测得的最小距离代入公式计算 ,否则将其赋值为0
(2) 机器人线速度的计算
当机器人前侧方遇到障碍物后,计算产生了一个负的避障项avoid_delta,在乘以设定的系数k_avoid,使其与期望位置产生的正向速度叠加,最终产生一个负的线速度,使机器人向远离障碍物方向移动。
当机器人传感器没有检测到障碍物时,避障项avoid_delta为0,机器人根据与期望位置的距离产生正的引力(线速度),使其朝着期望位置移动。
(3) 机器人角速度的计算
为了模拟出机器人受到(目标点吸引力和障碍物斥力叠加产生的合力)的效果,对机器人的角速度进行以下设计。
3.1)当障碍物位于机器人前进方向的右侧
如图所示当机器人前进方向的右侧出现障碍物时,受到目标位置引力和障碍物位置斥力的叠加,应产生向前进方向左侧的力。
我是这样模拟给这个力的:如图所示当机器人前进方向右侧遇到障碍物时,机器人右侧的两个红外传感器能够检测到与障碍物的距离p0,p1,当他们中有一个的距离小于0.04m时就产生这样一个角速度:
由于检测到障碍物时计算产生的 项为负,前面加负号产生一个正的角速度,使机器人逆时针旋转,并且为了使机器人不因 项产生负的线速度使机器人后退,设置当机器人角速度绝对值大于0时(即机器人旋转时),机器人线速度赋值为0。
如图所示,当转到机器人右侧的两个红外传感器检测到与障碍物的距离都大于0.04m时, avoid_delta项变为0,机器人的角速度为0,机器人停止旋转。但并没有结束,为了使机器人朝目标位置移动,此时会判断当前机器人角度与期望航向角的差值,若差值大于设定的阈值,即产生角速度使差值减小。
这样又会使机器人产生负的角速度,转向障碍物,以至于机器人在原地来回偏转,我通过位于机器人轮子旁的红外传感器p3来解决这个问题,当机器人位于图3.4所示的位置时,判断红外传感器p3返回的距离信息,如果小于0.045m,把角速度设置为0,这样当机器人的角速度为0,当机器人角速度为0时允许产生线速度,并且机器人前侧的距离和红外传感器测得的障碍物距离大于设定值, avoid_delta项为0,产生正的线速度使机器人前进。当机器人前进到如图所示位置时。
红外传感器测得的距离p3大于设定值0.045m,此时再根据当前角度与期望航向角的差值计算产生负的角速度,使机器人顺时针偏转绕开障碍物朝着目标位置前进。
3.2)当障碍物位于机器人前进方向的左侧
基本思路相同,在机器人左侧红外传感器检测到p7,p6小于0.04m时,产生一个负的角速度使机器人顺时针旋转,绕过障碍物。
3.3)其他情况
除了这两种情况,还有可能是恰好障碍物位于机器人前进方向的正中间(只有距离传感器测得的距离r小于设定值),或者是遇到墙壁障碍物(前侧所有障碍物检测的距离都小于设定值)。此时不论机器人朝那个方向旋转都可以。
4.问题
虽然解决了机器人的避障问题,但理论方面并没有改进,只是在实机实验的过程中,遇到问题解决问题,相当于人为的把所有可预见的情况,设置了相应的机器人应对办法,好处是直接,坏处是泛化性差,可能有一些没有预见到的复杂情况,只用不断测试完善才能确保机器人的避障效果。并且根据机器人与障碍物距离计算产生的避障项作用不大不能很好体现出其优势。
5.代码逻辑图
距离传感器(ToF)测得的距离为r,红外传感器顺时针旋转依次测得距离依次为p1,p2,p3….p7,代码逻辑如下:
基于感知的避障
二、基于人工势场力的避障
1.基于人工势场的Epuck2避障思路(理论)
前一个方法虽然通过人工势场公式给机器人加了引力斥力,但力是根据机器人与目标点/障碍物间的距离作用于机器人的线速度和角速度。由于通过距离远近来改变力的大小而影响速度,故没办法控制力的方向。为能够实现当机器人陷入局部最优时给机器人速度方向垂直的力,引入方向向量设计如下:
2.基于人工势场力的Epuck2避障实现(现实)
以机器人前方方向左侧遇到障碍物进行受力分析,并说明代码实现思路:
基于人工势场力的避障
三、两种避障方法的对比分析
首先是两种避障方法的路径结果对比,设置相同的起始位置(0.229,0.367),目标位置设为(2,0.367),在前进方向设置障碍物如图所示。
分别采用两种不同的避障策略,记录各策略三次避障的路径结果如下:首先采用基于传感器感知的避障方法,路径结果记录如下。
(1) 基于传感器感知的避障
(2) 基于人工势场加速度方向垂直力的避障方法
总结
这两种方法都存在较大的问题,也简单的尝试了将这两种方法应用于多机器人编队中,但结果远远低于预期,两种方法存在相同的缺陷,在编队行进过程中一旦遇到障碍物,编队就离散后面也很难继续保持编队前进。
目前也看了一些其他的避障方法,发现做出很好实机效果的多机编队,绝大多数采用基于轨迹引导的避障方法(代表EGO-Swarm多无人机编队),这种方法具有很大的优势,本文采用的两种避障方法遇到障碍物不断试探着去通过,而基于轨迹引导的避障具有预见性,在遇到障碍物前就已经开始规划进而调整整个编队中每个个体的控制策略,确保在避障的同时维持较好的编队效果。
写好多字了,就这样吧,还有一个基于二次规划的多机编队避障,下次再写o( ̄▽ ̄)ブ
相关文章:

多机器人编队避障算法(1)
文章目录 前言一、基于感知的避障1.基于感知的Epuck2避障思路(理论)2.基于感知的Epuck2避障实现(现实)3.距离传感器结合红外传感器修复避障Bug4.问题5.代码逻辑图 二、基于人工势场力的避障1.基于人工势场的Epuck2避障思路(理论)2.基于人工势场力的Epuck2避障实现(现实) 三、两…...

【网站项目】SpringBoot401超市收银系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
KD树详解:多维数据高效搜索的利器
摘要 在处理多维数据时,如何高效地进行搜索与查询成为一个关键问题。KD树(K-Dimensional Tree)作为一种高效的多维数据结构,广泛应用于计算机视觉、机器人导航、数据库检索等领域。本文将详细介绍KD树的基本概念、结构、构建算法…...
从裸机到70B大模型2:基础设施设置与脚本
从裸机到70B大模型2:基础设施设置与脚本 随着深度学习技术的不断发展,神经网络模型的规模逐渐扩大,从单个模型到大型70B模型,所需的计算资源和存储空间也在不断增加。为了训练这些大型模型,我们需要一套高效的基础设施…...

shodan4,挂黑网站查找,弱口令网站搜索
myip参数 shodan myip(查看自己的出口IP,哪个地址链接的公网)挂黑网站查找 我们今天看一看找一下,有些已经被黑的网站好吧,就是利用shodan查看一下哪些网站已经被黑了。 shodan search -limit 10 -fields ip_str,port http.title:hacked b…...
spring boot 整合Knife4j
项目依赖配置 在本项目中,我们使用了以下关键依赖,以支持 Spring Boot 和 API 文档生成。 1. Spring Boot 版本 为了构建一个可靠和高效的 Spring Boot 应用程序,我们使用以下父级依赖: <parent><groupId>org.springframework.boot</groupId><art…...

攻防世界的新手web题解
攻防世界引导模式 1、disabled_button 好,给了一个按钮,第一道题目就不会做 看的wp<input disabled class"btn btn-default" style"height:50px;width:200px;" type"submit" value"flag" name"auth&q…...

【国潮来袭】华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布:鸿蒙诞生以来最大升级,碰一碰、小艺圈选重磅上线
在昨日晚间的原生鸿蒙之夜暨华为全场景新品发布会上,华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布。 华为官方透露,截至目前,鸿蒙操作系统在中国市场份额占据 Top2 的领先地位,拥有超过 1.1 亿 的代码行和 6…...
pytest 单元框架里,前置条件
1.使用 setup 函数级的(setup_function、teardown_function)只对函数用例生效,而且不在类中使用类级的(setup_class、teardown_class)在类中使用,类执行之前运行一次,类执行之后运行一次 类中方…...

数字IC后端实现 | Innovus各个阶段常用命令汇总
应各位读者要求,小编最近按照Innovus流程顺序整理出数字IC后端项目中常用的命令汇总。限于篇幅,这次只更新到powerplan阶段。有了这份Innovus常用命令汇总,学习数字IC后端从此不再迷路!如果大家觉得这个专题还不错,想继…...

MySQL全文索引检索中文
MySQL全文索引检索中文 5.7.6版本不支持中文检索,需要手动修改配置 ft_min_word_len 1 ,因为默认配置 4 SHOW VARIABLES LIKE ft%; show VARIABLES like ngram_token_size;配置 修改 MySQL 配置文件 vim /etc/my.cnf在配置的 [mysqld] 下面添加**ft_…...

pikachu靶场-Cross-Site Scripting(XSS)
sqli-labs靶场安装以及刷题记录-dockerpikachu靶场-Cross-Site Scripting pikachu靶场的安装刷题记录反射型xss(get)反射型xss(post)存储型xssDOM型xssDOM型xss-xxss盲打xss之过滤xss之htmlspecialcharsxss之href输出xss之js输出 pikachu靶场的安装 刷题记录 反射型xss(get) …...
在数据库访问中,使用localhost、127.0.0.1和IP地址有什么差异
在数据库访问中,使用127.0.0.1和IP地址(在本地环境中通常指的是局域网IP或环回地址)的速度差异,实际上是非常微小的,甚至在很多情况下可以忽略不计。不过,为了更深入地理解这个问题,我们可以从以…...

C语言 | Leetcode C语言题解之第513题找树左下角的值
题目: 题解: #define MAX_NODE_SIZE 10000int findBottomLeftValue(struct TreeNode* root){int ret;struct TreeNode** queue (struct TreeNode **)malloc(sizeof(struct TreeNode) * MAX_NODE_SIZE);int head 0;int tail 0;queue[tail] root;whil…...
人工智能:改变未来生活与工作的无尽可能
随着科技的飞速发展,人工智能(AI)正成为推动全球变革的重要力量。无论是在医疗、企业,还是日常生活中,AI技术通过赋能各行业,正在深刻地改变我们的生活和工作方式。这些变化为我们提供了便捷与效率的同时&a…...

讲一讲 kafka 的 ack 的三种机制?
大家好,我是锋哥。今天分享关于【K讲一讲 kafka 的 ack 的三种机制?】面试题?希望对大家有帮助; 讲一讲 kafka 的 ack 的三种机制? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka的消息确认机制&…...

若依框架部署到服务器后头像资源访问404
排错过程 第一开始以为是代理出问题了 官网给出的解决方案 第一种是用代理后端接口,第二种是重写路径直接访问静态文件 接口通过捕获profile开头的路径/profile/avatar…,转为/home…/avatar找到我们在该路径下的文件 但是我想了一下,我ngin…...

纯GO语言开发RTSP流媒体服务器-RTSP推流直播、本地保存录像、录像回放、http-flv及hls协议分发
温馨提示:我们分享的文章是给需要的人,不需要的人请绕过,文明浏览,误恶语伤人! 前言 在软件开发中遇到使用流媒体音视频的行业比较多,如安防监控系统、无人机巡逻视频上云处理、直播平台、教育与企业培训…...

el-table相关的功能实现
1. 表格嵌套表格时,隐藏父表格的全选框 场景:当table表格设置复选(多选)功能时,如何隐藏表头的复选框,不让用户一键多选。 <el-table :header-cell-class-name"cellClass">// 表头复选框禁…...

衡石分析平台系统分析人员手册-展示类控件创建富文本攻略
富文本 富文本控件是一种常见的控件,可用来展示文本信息、用户属性信息,在数据分析中起到辅助分析的功能。 富文本常见的使用场景有: 仅展示纯文本信息。在富文本中展示数据集字段、指标、参数等信息。使用富文本展示用户属性相关信息。在…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...