多机器人编队避障算法(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">// 表头复选框禁…...
衡石分析平台系统分析人员手册-展示类控件创建富文本攻略
富文本 富文本控件是一种常见的控件,可用来展示文本信息、用户属性信息,在数据分析中起到辅助分析的功能。 富文本常见的使用场景有: 仅展示纯文本信息。在富文本中展示数据集字段、指标、参数等信息。使用富文本展示用户属性相关信息。在…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
