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

多机器人编队避障算法(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文件,帮助大学选题。赠送开题报告模板&#xff…...

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 好&#xff0c;给了一个按钮&#xff0c;第一道题目就不会做 看的wp<input disabled class"btn btn-default" style"height:50px;width:200px;" type"submit" value"flag" name"auth&q…...

【国潮来袭】华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布:鸿蒙诞生以来最大升级,碰一碰、小艺圈选重磅上线

在昨日晚间的原生鸿蒙之夜暨华为全场景新品发布会上&#xff0c;华为原生鸿蒙 HarmonyOS NEXT&#xff08;5.0&#xff09;正式发布。 华为官方透露&#xff0c;截至目前&#xff0c;鸿蒙操作系统在中国市场份额占据 Top2 的领先地位&#xff0c;拥有超过 1.1 亿 的代码行和 6…...

pytest 单元框架里,前置条件

1.使用 setup 函数级的&#xff08;setup_function、teardown_function&#xff09;只对函数用例生效&#xff0c;而且不在类中使用类级的&#xff08;setup_class、teardown_class&#xff09;在类中使用&#xff0c;类执行之前运行一次&#xff0c;类执行之后运行一次 类中方…...

数字IC后端实现 | Innovus各个阶段常用命令汇总

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

MySQL全文索引检索中文

MySQL全文索引检索中文 5.7.6版本不支持中文检索&#xff0c;需要手动修改配置 ft_min_word_len 1 &#xff0c;因为默认配置 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地址有什么差异

在数据库访问中&#xff0c;使用127.0.0.1和IP地址&#xff08;在本地环境中通常指的是局域网IP或环回地址&#xff09;的速度差异&#xff0c;实际上是非常微小的&#xff0c;甚至在很多情况下可以忽略不计。不过&#xff0c;为了更深入地理解这个问题&#xff0c;我们可以从以…...

C语言 | Leetcode C语言题解之第513题找树左下角的值

题目&#xff1a; 题解&#xff1a; #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…...

人工智能:改变未来生活与工作的无尽可能

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;正成为推动全球变革的重要力量。无论是在医疗、企业&#xff0c;还是日常生活中&#xff0c;AI技术通过赋能各行业&#xff0c;正在深刻地改变我们的生活和工作方式。这些变化为我们提供了便捷与效率的同时&a…...

讲一讲 kafka 的 ack 的三种机制?

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

若依框架部署到服务器后头像资源访问404

排错过程 第一开始以为是代理出问题了 官网给出的解决方案 第一种是用代理后端接口&#xff0c;第二种是重写路径直接访问静态文件 接口通过捕获profile开头的路径/profile/avatar…&#xff0c;转为/home…/avatar找到我们在该路径下的文件 但是我想了一下&#xff0c;我ngin…...

纯GO语言开发RTSP流媒体服务器-RTSP推流直播、本地保存录像、录像回放、http-flv及hls协议分发

温馨提示&#xff1a;我们分享的文章是给需要的人&#xff0c;不需要的人请绕过&#xff0c;文明浏览&#xff0c;误恶语伤人&#xff01; 前言 在软件开发中遇到使用流媒体音视频的行业比较多&#xff0c;如安防监控系统、无人机巡逻视频上云处理、直播平台、教育与企业培训…...

el-table相关的功能实现

1. 表格嵌套表格时&#xff0c;隐藏父表格的全选框 场景&#xff1a;当table表格设置复选&#xff08;多选&#xff09;功能时&#xff0c;如何隐藏表头的复选框&#xff0c;不让用户一键多选。 <el-table :header-cell-class-name"cellClass">// 表头复选框禁…...

衡石分析平台系统分析人员手册-展示类控件创建富文本攻略

富文本​ 富文本控件是一种常见的控件&#xff0c;可用来展示文本信息、用户属性信息&#xff0c;在数据分析中起到辅助分析的功能。 富文本常见的使用场景有&#xff1a; 仅展示纯文本信息。在富文本中展示数据集字段、指标、参数等信息。使用富文本展示用户属性相关信息。在…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...