领航-跟随型编队 (六)避障问题综述

2023-05-16

领航-跟随型编队避障问题指编队在运动过程中,领航机器人根据某种方式获取与识别前方障碍物,同时编队整体采取一定方法及时规避障碍物与防止内部碰撞,涉及到障碍物检测、编队避障规划、编队避碰协调,运动控制等问题。本文在总结现有文献的基础上,将编队避障问题主要分解为在以下几个方面[7-10]:

(1) 避障规划与避碰协调问题。即在实现单个移动机器人路径规划问题的基础上,如何建立一个控制模型并以某种运动规则实现个体间的协调合作任务。结合编队,针对不同的避障环境:单障碍物,多障碍物,静态障碍物,动态障碍物,以及根据障碍物的不同类型、大小、位置以及编队系统的尺寸、个体数量,拟定定量表达式,以确定避障避碰方式。

(2) 运动控制问题。控制编队避障过程中的编队队形变换,结束后的恢复初始队形等,使整个编队系统的运动状态趋于一致。

(3) 编队体系结构。一定灵活性、容错性的编队结构模型,使拥有局部感知功能的编队根据环境信息进行队形保持与动态地队形变换,保证编队作为一个整体顺利通过障碍区域。编队体系结构是编队避障控制的前提,也是编队进行信息交互的基本框架。

(4) 编队交互通讯。实现编队避障,需要单机与多机,多机与多机等相互通讯,包含其位置信息、速度、加速度信息以及环境信息等,机器人相互之间的实时通讯数据庞大,处理速度要求高,且存在时延、时有时无且带宽受限等非理想条件约束,如何设计编队内部的底层通信协议,以提高整个系统的实时性,也是亟需解决的问题。

(5) 编队环境感知。需要采取一定方法明确周围是何种环境类型:单障碍物、多障碍物,静态障碍物,动态障碍物,有时根据情况在此基础上还需进一步考虑是否需要明确障碍物的大小、形状等具体信息。

(6) 编队协作定位。包含编队与障碍物之间以及编队内部机器人之间的定位。编队避障时的各个角色的精确定位比较困难,避障过程实质是一个动态复杂、多机耦合的过程,需及时调整编队内部机器人的相对位置以及编队与周围障碍物的相对位置,定位的准确程度直接影响编队避障与避碰的效果。

1.2.3 国内外研究现状

目前根据躲避局部静态障碍物时,编队的拆分情况,可大致分为两种避障策略:编队拆分避障与编队整体避障。

(1)编队拆分避障

编队拆分避障指编队内部不再维持原有控制,而是独立避障,只要在安全范围内机器人不相互碰撞即可,等避障结束后再重新恢复联系,相当于每个机器人独立进行在线避障。转化为单机避障路径规划问题。

按照机器人对环境的掌握情况,避障路径规划分为:(1)全局路径规划(静态或离线路径规划),是指机器人在了解运行环境的详细信息后所做的路径规划。(2)局部路径规划(在线或动态路径规划),是指移动机器人对于运行环境不了解,通过传感器实时探测环境信息的路径规划。将常用的路径规划算法主要有栅格法[11]、可视图法[12]、模糊逻辑法[13]、RTT算法[14] 、遗传算法[15] 等,对比优缺点如表1-1所示。

表1-1 常用路径规划方法及比较

路径规划方法

优点

缺点

在线或离线

栅格法

技术成熟,用栅格表示地图,在处理障碍物的形状大小时,避免了复杂计算。

栅格大小影响了存储环境信息的信息量大小,也影响机器人路径规划的准确性和时间。

离线

可视图法

将搜索最优路径的问题转化为经过各顶点可视直线从起点到目标点的最短距离问题,搜索时间短

不考虑机器人自身的大小,导致机器人在实际避障中可能碰触障碍物,灵活性不好,对传感器精度要求高。

离线

模糊逻辑法

通过传感器获得环境信息,实时性强,利用先验知识进行路径规划,容易实现,操作简单。

依赖传感器,对称环境的路径规划容易产生振荡甚至死锁。预先制定的先验经验不一定完备,计算量随障碍物数目增加,影响规划结果。

在线

RRT算法

无预处理,适应复杂外部环境,较高的搜索效率,无需路径转换。

对全局环境有较大的依赖性,常应用在外部环境先验内环境中,且在自主避障与导航中实时性较差。

在线

遗传算法

采用并行化的方式,直接对机器人路径采用概率化,自适应方式搜索,保证路径规划中求解路径的最优性。

运算慢,进行路径规划时要占据较大的存储空间和运算时间,编码合理性和效率问题较难处理

在线

考虑到编队避障对环境约束极为敏感,需要针对不同的环境类型,对编队进行不同的避障路径规划,均衡上述各算法的优缺点和应用范围,不必拘泥一种路径规划方法,有时几种算法的混合,基于某种方法的改进,或许可为编队提供更为适合的路径规划。

(2)编队整体避障

编队整体避障指编队内部维持原有控制,通过动态调节队形进行在线避障。主要有以下方法:

1人工势场法

人工势场法将统筹路径规划,轨迹跟踪,以及内部协调规划为一体,通过构建势场函数,使其根据约束信息自适应动态的确定反馈控制律,驱动编队整体协调在线避障[16-20]。

文献[16] 将领航-跟随编队控制方法与人工势场法相结合,实现在未知环境下控制多移动机器人编队避障。

文献[18] 采用人工势场法进行编队避障控制,通过引力协调编队队形,通过斥力协调避障避碰,同时采用人工势场法为编队整体提供沿期望轨迹的自主导航控制,保持编队整体连通性,并成功远离障碍物。

uploading.4e448015.gif正在上传…重新上传取消

图 1-6 基于人工势场法的编队避障避碰,a文献[16],b文献[18]

人工势场法可令编队在避障时根据环境约束,动态调节编队避障队形。但其缺点是,如果用于编队避障控制的势函数选择不够恰当,尤其是包含的各种比例参数的调节不当,就会造成编队成员之间、成员与障碍物之间的碰撞,且当遇到复杂的障碍物环境,尤其是狭长甬道式障碍物,或多种交叉凹型障碍物,编队中机器人往往会表现出运动徘徊往复甚至停滞等现象导致避障失败,该方法亦存在局部极小等问题。

2模型预测控制法

文献[21] 将提出的FSC-MPC方法用于处理机器人编队避障避碰的问题,MPC强大的对移动机器人的非完整约束的处理能力,有效地解决了编队中领航机器人运动混乱时,跟随机器人可以在有限的时间内跟踪上领航机器人,且保持期望的队形。

文献[22] 将模型预测控制器与人工势场法相结合,避障避碰时由人工势场法生成罚函数来规避障碍物,同时避免内部同类碰撞。

文献[23] 通过预测避碰避障距离,同时维持机器人之间相互通讯,采用模型预测控制器使机器人与障碍物,以及编队内部相互规避碰撞。

3固定队形变换法

文献[24] 采用有向无环图表示编队内部控制图,并预先枚举出机器人所有可能的控制图,采用反馈线性化控制方法,实现了在障碍物环境下任意两个队形之间的切换。

 uploading.4e448015.gif转存失败重新上传取消  uploading.4e448015.gif转存失败重新上传取消

图 1-7 文献[24]障碍物环境下任意两个队形之间的切换

文献[25] 针对某一任务编队何时发生队形变换,通过设定编队重构队形误差模型,使机器人从预设队形知识库中匹配适于当前环境的队形,且使队形误差达到最小。

文献[26] 提出了一种动态队形变换避障策略:预设队形知识库,局部避障时通过队形变换最优效率求解模型从队形知识库选取匹配队形,协调避碰。以及其他一些类似的队形变换策略[27-28] 。

4基于行为法

基于行为法[29] 是一类模拟生物反应式行为机制的编队控制方法,无全局先验知识,直接通过传感器感知周围环境的变化,根据反馈来采取相应的运动行为,因此在面对未知环境时具有更好的鲁棒性、实时性,原理如图1-8所示。

uploading.4e448015.gif转存失败重新上传取消

图 1-8 基于行为法的编队控制原理

采用基于行为法[30] 进行编队控制时,通过设计几种基本的行为与直接的协调机制,使多移动机器人在有障碍物环境下运动到目标点。基于行为法的核心之一是行为协调机制即权值设计,其中曹志强等[32] 利用遗传算法来决定控制权重,以使编队中成员选择合适的行为响应来保持队形和规避障碍物。

该方法的缺陷是多机器人系统的行为难以预测,无法实现精确的队形保持与队形变换,比较适用于大规模松散编队,并不太适用于严格的编队控制,而且其无法显性定义群体行为,只存在全局涌现现象,很难用数学方法对系统进行稳定性分析。

在行为法的基础上,Antonelli教授[33-34]提出基于零空间的行为法NSB(null-space-based behavioral)方法。该方法将多机系统看作一个过约束系统,并定义多个基本行为的优先级,将低优先级行为的速度映射到高优先级行为的速度的零空间上。

uploading.4e448015.gif转存失败重新上传取消uploading.4e448015.gif转存失败重新上传取消

图 1-9 文献[33]基于行为法编队控制

近几年,文献[35-36]将多机编队结合代数图论进行编队避障研究,将避障避碰问题转换为图拓扑结构的柔性改变。另外,还有其他一些新的避碰避障控制方法[37-41]用于编队避障研究中,使得多机器人系统能够协同避障。

uploading.4e448015.gif转存失败重新上传取消uploading.4e448015.gif转存失败重新上传取消

图 1-10 文献[35]编队避障避碰

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

领航-跟随型编队 (六)避障问题综述 的相关文章

  • 程序的几种常用格式文件

    span class hljs keyword int span span class hljs keyword global span span class hljs keyword int span calculate span cla
  • 2020年北航计算机学院面向对象第一单元总结

    文章目录 一 基于度量来分析自己的程序结构第一次作业第二次作业第三次作业 二 分析自己程序的bug三 分析自己发现别人程序bug所采用的策略四 应用对象创建模式来重构五 对比和心得体会 一 基于度量来分析自己的程序结构 第一次作业 第一次作
  • keil调试模式下能运行 烧录到板子中不能运行

    一 程序中使用了printf函数 1 现象 在debug模式下可以运行 xff0c 脱离debug模式无法运行 2 原因 在程序中使用了printf函数 xff0c 但是却没有包含keil的微库 xff0c 或者对于printf函数没有进行
  • 洛谷P4180 次小生成树学习

    题目链接 BJWC2010 严格次小生成树 洛谷 严格次小生成树是指第二小的生成树 总的思路是先求最小生成树 xff08 设最小生成树的总花费sum xff09 xff0c 把每条边都标记 xff0c 再遍历没被标记的边 xff0c 此时这
  • Codeforces 758D 贪心

    Ability To Convert time limit per test 1 second memory limit per test 256 megabytes input standard input output standard
  • Docker入门

    官网地址 概述 场景1 xff1a 不同语言开发的应用程序部署到同一操作系统上 xff0c 往往操作系统需要根据相应的语言来配置 xff0c 如果配置发生冲突就无法完成部署 这时候我们需要对这2个应用进行隔离 xff0c 使它们运行所依赖的
  • Debian11系统安装

    下载 下载地址 VMware创建虚拟机 1 Host only模式 xff1a 所有虚拟机可以相互访问 xff0c 但和真实的物理网络环境是隔离开的 xff0c 此模式下的IP信息是由host only虚拟网络的DHCP服务器来分配的 xf
  • Debian11之Jdk安装

    参考这里
  • Debian11之 Containerd1.7.x 安装及配置

    官网 介绍 1 K8S发布的CRI xff08 Container Runtime Interface xff09 统一了容器运行时接口 xff0c 凡是支持CRI的容器运行时的皆可作为K8S的底层容器运行时 xff0c 而Docker 没
  • Debian11之基于kubeadm安装K8S(v1.26.0) 集群

    硬件要求 1 Master主机 xff1a 2核CPU 4G内存 20G硬盘 2 Node主机 xff1a 4 43 核CPU 8G 43 内存 40G 43 硬盘 2 集群中的所有机器的网络彼此均能相互连接 xff08 公网和内网都可以
  • Debian11之Rancher2.7.x安装

    前言 Rancher 是一个为开源容器打造的容器管理平台 Kubernetes 管理工具 xff0c 使得开发者可以随处运行 Kubernetes xff08 Run Kubernetes Everywhere xff09 xff0c 满足
  • AirSim学习(1)-介绍,安装,unity测试

    home AirSim是一款基于虚幻引擎的无人机 汽车等模拟器 我们现在也有一个实验性的Unity版本 它是开源的 xff0c 跨平台的 xff0c 支持使用流行的飞行控制器 如PX4和ArduPilot 进行软件在环模拟 xff0c 并支
  • 华为设备默认console密码

    admin 64 huawei com Admin 64 huawei com Admin 64 huawei huawei com huawei 64 123 huawei Change Me
  • 华为交换机批量加入 Vlan 方法

    华为交换机单独加入vlan太麻烦 xff0c 思科有批量加入vlan的方法 xff0c 华为也有 要求 1 6口划分到vlan2 6 12口划分到vlan3 13 18口划分到vlan4 19 24口划分到vlan5 25 26 加入tru
  • [golang]Go常见问题:# command-line-arguments: ***: undefined: ***

    今天遇见一个很蛋疼的问题 xff0c 不知道是不是我配置的问题 xff0c IDE直接run就报错 问题描述 在开发代码过程中 xff0c 经常会因为逻辑处理而对代码进行分类 xff0c 放进不同的文件里面 xff1b 像这样 xff0c
  • Qt之利用系统空闲

    Qt之利用系统空闲 如何利用系统空闲 xff0c 处理指定函数 xff1f To make your application perform idle processing by executing a special function w
  • [linux][c++]linux c++ 通过xcb库获取屏幕大小

    linux c 43 43 通过xcb库获取屏幕大小 include lt stdio h gt include lt xcb xcb h gt clang 43 43 main cpp o main 96 pkg config cflag
  • 金蝶K/3 跟踪语句_业务单据

    跟踪语句 业务单据 BOM select from t TableDescription where Ftablename like 39 ICBOM 39 select from t FieldDescription where FTab
  • [python][企业微信]企业微信自动打卡Python脚本,价值一万元的自动打卡脚本

    coding utf 8 import datetime import os import random import time import schedule 引入uiautomator库 from pip vendor import r

随机推荐

  • [golang] golang文件读写 os.OpenFile(fileName,os.O_APPEND|os.O_WRONLY,os.ModeAppend)

    golang golang文件读写 os OpenFile fileName os O APPEND os O WRONLY os ModeAppend 读写文件要用到的OS包 func OpenFile name string flag
  • [OHIF-Viewers]医疗数字阅片-医学影像-Cornerstone

    时常会听到圈内的朋友抱怨 34 学不动了 34 确实如此 xff0c 前端技术的横向发展和迭代速度实在是太快了 xff0c 然而人的精力却是有限的 xff0c 在中高级的技术进阶阶段 xff0c 广撒网式的学习方式往往会适得其反 那些调侃程
  • deepin remmina 采用源码编译,在菜单栏添加菜单

    usr bin env xdg open Desktop Entry Encoding 61 UTF 8 Type 61 Application X Created By 61 Categories 61 chat Icon 61 org
  • [零散笔记]deepin系统Rust 国内镜像加速

    deepin系统Rust国内镜像加速 span class token function vim span cargo config 粘贴 source crates io registry 61 34 https github com r
  • [在 Linux 上构建 Windows 程序]

    在 Linux 上构建 Windows 程序 文章目录 在 Linux 上构建 Windows 程序 64 toc 首次设置 MSVC Rust MSVC 工具链 Microsoft Windows SDKs 链接 MSVC 首次设置 GN
  • luogu P2078 朋友 基础并查集 联通块的个数

    题目背景 小明在A公司工作 xff0c 小红在B公司工作 题目描述 这两个公司的员工有一个特点 xff1a 一个公司的员工都是同性 A公司有N名员工 xff0c 其中有P对朋友关系 B公司有M名员工 xff0c 其中有Q对朋友关系 朋友的朋
  • ubuntu focal InRelease 没有数字签名 解决办法

    E 无法下载 http ppa launchpad net morphis anbox support ubuntu dists focal InRelease 403 Forbidden IP 185 125 190 52 80 E 仓库
  • Qt笔记---QMenu添加自定义菜单

    Qt笔记 QMenu添加自定义菜单 QMenu用于显示菜单栏交互 xff0c 使用QAction作为选项添加 xff0c 生成的菜单栏为默认样式 默认样式 xff1a 想要在菜单栏上显示一些其他的部件组成的选项 xff0c 可以使用QMen
  • 怎样关闭ubuntu 鼠标悬停自动点击

    终端运行 mousetweaks s
  • 将C盘虚拟机迁移到D盘

    之前没有注意把虚拟机创建在了C盘 xff0c 现在C盘空间不足 xff0c 需要迁移到D盘 首先需要关闭CentOS16虚拟机 xff0c 关闭之后 xff0c 复制整个虚拟机文件夹 把CentOS16复制到D盘这个目录下 xff1a 打开
  • VS2019 + CUDA11.0开发环境配置

    VS2019 43 CUDA11 0开发环境配置 确认系统是否支持安装VS2019安装CUDA11 0实例程序 确认系统是否支持 确认自己的设备是否支持CUDA11 0 打开NVIDIA控制面板 xff0c 一般N卡的设备都在鼠标右键就有
  • 排序算法:选择排序

    1 什么是选择排序 xff1f xff08 摘抄自百度百科 xff09 选择排序 xff08 Selection sort xff09 是一种简单直观的排序算法 它的工作原理是 xff1a 第一次从待排序的数据元素中选出最小 xff08 或
  • markdown-it 介绍,以及使用,自定义规则

    markdown it markdown it 是前端的一个 markdown 解析库 xff0c 将 markdown 解析成 Token 流 网上都有很多详细的 token 流解析过程 xff0c 请先简单看一遍 markdown it
  • apt-get update 报错

    sudo apt get update 报错 E 无法解析软件包文件 var lib apt lists ppa launchpad net rabbitvcs ppa ubuntu dists xenial main i18n Trans
  • Tiny210裸机开发初体验

    从昨天开始搞了一下Tiny210的裸机 xff0c 长时间没玩有点生疏了 由于开发板光盘自带裸机程序例程 xff0c 所以先跑一下简单的点灯 xff0c 打通调试通路然后再进行学习 首先使用了方法1 xff1a 参考国嵌视频烧录superb
  • System Verilog——C语言调用SV对象中的方法

    本文接上一篇文章 xff0c 即调用System Verilog 任务的C 任务 xff0c 简介如下 https blog csdn net qq 31348733 article details 101000399 如何在C语言中调用S
  • 程序设计思维与实践 Week15 作业

    ZJM 与纸条 ZJM 的女朋友是一个书法家 xff0c 喜欢写一些好看的英文书法 有一天 ZJM 拿到了她写的纸条 xff0c 纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物 ZJM 想知道自己收到的礼物是不是就是她送的 x
  • 利用Python的scrapy框架爬取手游排行前几名的手游信息

    初学scrapy框架 Scrapy是一个为了爬取网站数据 xff0c 提取结构性数据而编写的应用框架 可以应用在包括数据挖掘 xff0c 信息处理或存储历史数据等一系列的程序中 有关于scrapy的教学与基础知识这里不做解释 xff0c 感
  • 【ORB-SLAM3】CMake Error at CMakeLists.txt:37 (message): OpenCV > 2.4.3 not found.

    项目场景 xff1a ZED2相机配置使用ORB SLAM3 ZED2相机配置使用ORB SLAM3 xff0c 出现关于opencv的报错 问题描述 CMake Error at CMakeLists txt 37 message Ope
  • 领航-跟随型编队 (六)避障问题综述

    领航 跟随型编队避障问题指编队在运动过程中 xff0c 领航机器人根据某种方式获取与识别前方障碍物 xff0c 同时编队整体采取一定方法及时规避障碍物与防止内部碰撞 xff0c 涉及到障碍物检测 编队避障规划 编队避碰协调 xff0c 运动