myAgv的slam算法学习以及动态避障下篇

引言

在之前的一篇文章中有提到购入了一台myAGV,以树莓派4B为控制核心的移动机器人。上篇文章中向大家介绍了myAGV如何实现建图、导航以及静态避障,但我们深知,这只是机器人自主导航能力的基础。在实际应用场景中,机器人需要面对复杂的动态环境,如人流、障碍物等,如何实现可靠的动态避障,是我们不断探索和挑战的问题。在本文中,我们将分享我们在探索动态避障方面的实践和经验,希望能够为其他创客开发者和机器人爱好者提供一些参考和启发。

如果想知道上篇介绍了些什么,点击这个连接

产品

在此之前,还是在介绍一下myAGV,我使用的这款机器人。

myAGV是一款大象机器人公司出品的移动机器人,由树莓派4B为控制核心,内置Ubuntu18系统,ROS编译环境;360°激光雷达,内置高清摄像头。它采用了竞赛级别的麦克纳姆车轮和带有金属框架的全包裹设计。

动态避障

动态避障是指在移动机器人或自动驾驶汽车等智能移动设备在行进过程中,通过实时感知周围环境的变化,采取相应的措施以避免与障碍物发生碰撞的技术。动态避障需要实时感知环境的变化,如监测障碍物的位置、大小、形状、运动状态等,然后通过对这些信息的处理和分析,生成相应的行动指令,使机器人或汽车能够避免与障碍物发生碰撞并继续前进。

下面分享了一个视频,内容关于无人飞机进行快速动态避障的记录。

突然起来的障碍物,需要立即避开它,避免造成无人机的损伤。今天我们要实现的是myAGV在自动导航的时候也能够及时的躲避障碍物。

大象机器人提供的动态避障算法是基于TEB和DWA算法。

TEB算法

TEB(Timed-Elastic-Band)是一种用于轨迹优化的算法,可用于机器人的动态避障和路径规划。主要对全局路径规划器生成的初始全局轨迹进行后续修正,从而优化机器人的运动轨迹,属于局部路径规划。在轨迹优化过程中,该算法拥有多种优化目标,包括但不限于:整体路径长度、轨迹运行时间、与障碍物的距离、通过中间路径点以及机器人动力学、运动学以及几何约束的符合性。

起始点和目标点状态都有全局规划器制定,中间插入N个控制橡皮筋形状的控制点。这个路径是可以变形的,变形的条件就是所有约束条件,当作橡皮筋的外力,例如距离障碍物的距离,移动机器人的最大速度,最大角速度,最大转弯半径等。依靠这些约束条件来保证移动机器人的安全和稳定。

TEB算法具体实现的过程如下:

  1. 根据机器人当前位置和目标位置,生成一条初始路径。
  2. 将路径表示为一系列时间段上的线段,称为轨迹片段。每个轨迹片段表示机器人在一个时间段内沿着一条直线运动的轨迹。
  3. 对每个轨迹片段进行优化,以满足机器人的运动约束和避障需求。优化目标是使轨迹片段的长度和运动时间最小,同时避免与障碍物发生碰撞。
  4. 将优化后的轨迹片段拼接在一起,形成机器人的最终运动轨迹。如果机器人遇到障碍物,可以重新生成轨迹片段,并进行优化。

TEB算法的优点是可以在运动中实时避开障碍物,并可以处理机器人的动态运动。同时,TEB算法可以结合其他的避障算法,例如基于模型预测控制的算法,提高避障效果。

DWA算法

DWA(Dynamic Window Approach)是一种用于机器人动态避障的算法。该算法旨在在机器人的运动范围内搜索最优的运动轨迹,以避开障碍物。DWA算法通过将机器人的运动轨迹表示为一组(v,w)速度和角速度的组合,然后对这些组合进行搜索和评估,找到最优的运动轨迹。

DWA算法的具体实现过程如下:

  1. 根据机器人当前位置和目标位置,生成一组速度和角速度的候选集合,称为速度窗口。
  2. 对速度窗口中的每个速度和角速度组合,计算机器人在接下来的一段时间内所能到达的位置,即运动轨迹。
  3. 对每个运动轨迹进行评估,以确定是否与障碍物发生碰撞。评估的方法包括计算轨迹上的代价函数,例如与障碍物的距离和速度等。
  4. 根据评估结果,选择代价函数最小的运动轨迹,并将该轨迹作为机器人的运动指令。

这个视频能够辅助了解DWA算法。

TEB-DWA算法

TEB在实现动态避障方面具有一定的优势。然而,TEB算法也存在一些局限性,其中包括:

  • 对初始路径依赖性强:TEB算法的性能很大程度上依赖于初始路径的质量。如果初始路径存在较大的偏差或错误,TEB算法很可能会陷入无法解决的困境。
  • 对环境模型的依赖性强:TEB算法需要准确的环境模型,包括障碍物的位置和形状等信息。如果环境模型存在偏差或误差,TEB算法可能会出现路径规划错误的情况。
  • 对计算资源的要求高:TEB算法需要进行大量的计算和优化,时间复杂度较高,对计算资源的要求也较高。

DWA算法也具有能对轨迹进行搜索和评估,选出最优路径解,但也有一定的局限性:

  • 无法处理高速运动的障碍物:DWA算法是基于机器人的运动模型和环境感知,通过搜索和评估速度和角速度的组合,找到最优的运动轨迹,以避开障碍物。然而,在高速运动的障碍物出现时,DWA算法可能无法及时感知和处理,从而导致机器人的碰撞和安全问题。
  • 对环境模型的要求较高:DWA算法需要机器人具有较好的环境感知能力,以获取环境中障碍物的位置、形状和大小等信息。如果环境模型不准确或者不完整,DWA算法可能无法正确地评估运动轨迹的代价函数,从而导致机器人的错误运动和避障失败。
  • 无法处理不确定的环境:DWA算法是基于静态环境的假设,即环境中的障碍物位置不会发生变化。然而,在一些不确定的环境中,例如动态障碍物频繁出现的场景,DWA算法可能无法有效地避开障碍物,从而导致机器人的碰撞和安全问题。
  • 难以处理多机器人协同避障:DWA算法通常是针对单个机器人的避障问题进行设计的,难以处理多机器人协同避障的问题。在多机器人协同避障时,需要考虑机器人之间的相互作用和协调,从而进行更加复杂和高级的避障算法设计。

为了解决TEB和DWA算法的局限性,实现更加精细和高效的动态避障和路径规划,有人提出了TEB-DWA算法,TEB-DWA算法的核心思想是通过将TEB算法和DWA算法的优点结合起来,设计出一种更加精细和高效的动态避障算法。具体来说,TEB-DWA算法采用TEB算法的弹性带方法,实现路径规划和优化,同时采用DWA算法的速度窗口方法,实现速度和角速度的搜索和评估,从而实现机器人的动态避障和路径规划。

teb-dwa算法的实现过程是啥

TEB-DWA算法的实现过程主要分为以下几个步骤:

  1. 机器人运动模型的建立:根据机器人的运动约束和动力学模型,建立机器人的运动模型,用于计算机器人的运动轨迹和速度约束。
  2. 环境感知和障碍物检测:通过机器人的传感器获取环境中障碍物的位置、形状和大小等信息,进行障碍物检测和分类,以确定机器人的运动路径和避障策略。
  3. 弹性带路径规划:根据机器人的起点和终点,利用弹性带方法生成机器人的运动路径,并考虑机器人的运动约束和避障需求,以实现路径规划和优化。
  4. 速度窗口搜索和评估:根据机器人的运动模型和环境感知信息,利用DWA算法搜索机器人的最优速度和角速度组合,并评估每个速度和角速度组合的代价函数,以确定机器人的运动轨迹和避障策略。
  5. 运动控制和执行:根据计算得到的最优速度和角速度组合,利用控制算法实现机器人的运动控制和执行,以实现机器人的动态避障和路径跟踪。

实际操作

在ROS中,可以使用Move Base包来实现TEB-DWA算法。Move Base是ROS中常用的路径规划和导航包,提供了多种路径规划算法和导航功能,包括TEB-DWA算法。下面是使用ROS中TEB-DWA算法的步骤:

  1. 安装Move Base包:在ROS中安装Move Base包,可以使用以下命令:“sudo apt-get install ros--move-base
  2. 配置Move Base参数:在使用TEB-DWA算法之前,需要配置Move Base的参数。可以使用move_base.launch文件来配置参数,例如设置机器人的起点和终点、地图信息、运动约束和避障参数等。可以根据具体的应用场景和任务需求,进行参数的调整和优化。
  3. 运行Move Base节点:在配置好参数之后,可以使用以下命令来启动Move Base节点:”roslaunch move_base move_base.launch
  4. 发布目标点:在运行Move Base节点之后,可以使用move_base/goal话题来发布机器人的目标点。例如使用rostopic pub命令来发布目标点:
  5. 监听机器人状态和反馈:在机器人开始运动之后,可以使用/move_base/status话题来监听机器人的状态和反馈信息。例如使用rostopic echo命令来监听状态和反馈信息:

建图

我们快速的建图,进行避障的实验。

打开终端运行命令,启动雷达

cd myagv_ros
source ./devel/setup.bash
roslaunch myagv_odometry myagv_active.launch

然后运行gmapping算法建图

roslaunch myagv_navigation myagv_slam_laser.launch

动态避障

我们使用默认的配置,看看效果如何。

这似乎看起来实现了动态避障,但是似乎看起来有些许的愚蠢,在发现障碍物的时候还绕了一圈扫描环境。

调整了一下 规划的频率(planned frequency)重新进行了一次测试。

这样看起来效果就好多了。

总结

对myAGV也使用了有一段的时间了,首先我是十分喜欢它的外观的,很酷炫,没有结构件在外面展露出来,内部包裹的很好,发生了碰撞也会有一定的保护作用。其次是它配套的资料都非常地详细,能够提供一个快速上手地模板使用,对于刚接触一款全新未知的产品很有帮助。

使用下来的整体感受还是不错的,连接显示器就能够使用,基于树莓派也有很多的社区能够提供帮助,有许多优秀的案例。此外也有一些需要提升的地方,在进行建图的时候,有时候并不是那么的准确,可能是因为外壳的原因?遮挡住了雷达的范围。也希望使用时间上能够更长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/38809.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Segment Tree 线段树算法(java)

线段树算法 Segment Tree 线段树算法代码演示 蓄水池算法 Segment Tree 线段树算法 什么是线段树算法: 线段树(Segment Tree)是一种基于树结构的数据结构,用于解决区间查询问题,例如区间最大值、最小值、区间和等。线段…

Learning Enriched Features for Fast Image Restoration and Enhancement 论文阅读笔记

这是2022年TPAMI上发表的大名鼎鼎的MIRNetv2,是一个通用的图像修复和图像质量增强模型,核心是一个多尺度的网络 网络结构整体是残差的递归,不断把残差展开可以看到是一些残差块的堆叠。核心是多尺度的MRB。网络用的损失函数朴实无华&#x…

Vue电商项目--登录与注册

登录注册静态组件 刚刚报了一个错误,找不到图片的资源 assets文件夹--放置全部组件共用静态资源 在样式当中也可以使用符号【src别名】。切记在前面加上 注册业务上 先修改原先的接口成这个按钮 然后把input框里面的数据保存到data中 注册业务下 就是点击获…

1. HTML5的新特性

HTML5的新增特性主要是针对于以前的不足, 增了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题,基本是IE9以上版本的浏览器才支持, 如果不考虑兼容性问题,可以大量使用这些新特性。 1.1 HTML5 新增的语义化标签 ●<header> : 头部标签 ●<nav&…

什么是Heatmap(热图)图表?用DHTMLX可实现快速构建

DHTMLX Chart是DHTMLX最新发布的JavaScript UI小部件库的核心内容之一&#xff0c;这个图表小部件收到了几个重要的更新&#xff0c;但其中最引人注目的是一个新的数据可视化选项——日历热图。 DHTMLX专注于JavaScript和HTML5 UI小部件和库&#xff0c;以帮助开发人员更快地构…

爬虫相关知识与面试题目

常见的反爬虫和应对方法 参考:https://www.cnblogs.com/bsdr/p/5151891.html 0x01 常见的反爬虫 这几天在爬一个网站&#xff0c;网站做了很多反爬虫工作&#xff0c;爬起来有些艰难&#xff0c;花了一些时间才绕过反爬虫。在这里把我写爬虫以来遇到的各种反爬虫策略和应对的…

python selenium.webdriver 爬取政策文件

文章目录 获取文章链接批量爬取政策文件应用selenium爬取文件信息数据处理导出为excel 获取文章链接 获取中央人民政府网站链接&#xff0c;进入国务院政策文件库&#xff0c;分为国务院文件和部门文件&#xff08;发改委、工信部、交通运输部、市场监督局、商务部等&#xff…

uni.app开发小程序如何获取当前经纬度、位置信息以及如何重新发起授权定位

uni.app开发小程序如何获取当前经纬度、位置信息以及如何重新发起授权定位 前提 先去微信小程序后台申请 wx.getLocation接口1.引入下载的高德小程序SDK2.data中定义所需变量3.onLoad中获取实例 并调用获取经纬度 位置方法4.定义获取定位经纬度 位置信息方法5.用户拒绝授权后,可…

架构训练营学习笔记3-5:消息队列备选架构设计实战

本文属于架构训练营学习笔记系列&#xff1a;模块3的案例讲解 总的来说&#xff0c;这篇从更高的维度去讲&#xff0c;而不是关注消息队列的常见问题&#xff1a;比如消息如何发送&#xff0c;消息如何不丢失 &#xff0c;消息如何不重复。总体上分为2部分&#xff1a;利益干系…

数据可视化:揭开数据的视觉奇迹

随着大数据时代的到来&#xff0c;我们面临着海量的数据&#xff0c;如何从中获取有价值的信息成为一项重要的挑战。数据可视化作为一种强大的工具&#xff0c;通过图表、图形和交互界面&#xff0c;将数据转化为可视化的形式&#xff0c;帮助我们更好地理解和分析数据。 数据可…

用OpenCV进行图像分割--进阶篇

1. 引言 大家好&#xff0c;我的图像处理爱好者们&#xff01; 在上一篇幅中&#xff0c;我们简单介绍了图像分割领域中的基础知识&#xff0c;包含基于固定阈值的分割和基于OSTU的分割算法。这一次&#xff0c;我们将通过介绍基于色度的分割来进一步巩固大家的基础知识。 闲…

kafka(一)

一&#xff1a;kafka架构介绍 1. Brokers kafka集群包括一个或者多个服务器&#xff0c;服务器的节点叫做broker。 2. Topic 类似于数据库中的table。物理上不通的topic会分开存储。一个topic的消息会存储在多个broker上。但是在读取的时候&#xff0c;只要选择好topic&…

autok3s k3d rancher研究

参考 功能介绍 | Rancher文档AutoK3s 是用于简化 K3s 集群管理的轻量级工具&#xff0c;您可以使用 AutoK3s 在任何地方运行 K3s 服务。http://docs.rancher.cn/docs/k3s/autok3s/_index 什么是 AutoK3s k3s是经过完全认证的 Kubernetes 产品&#xff0c;在某些情况下可以替…

Docker 容器生命周期:创建、启动、暂停与停止----从创建到停止多角度分析

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

vue 限制表情输入

在main.js中加入下列代码 import emoji from ./util/emojiVue.directive(emoji,emoji) 在util文件夹中加入emoji.js 下列代码 const findEle (parent, type) > { return parent.tagName.toLowerCase() type ? parent : parent.querySelector(type)}const emoji {bi…

小程序MobX创建store并实现全局数据共享

查看小程序根目录中是否存在package.json文件 在项目根目录运行cmd 没有package.json文件输入npm init -y初始化一下,初始化一个包管理 安装MobX npm install --save mobx-miniprogram4.13.2 mobx-miniprogram-bindings1.2.1 小程序菜单栏工具–构建npm 根目录创建store文…

Hive概述

Hive 一 Hive基本概念 1 Hive简介 学习目标 - 了解什么是Hive - 了解为什么使用Hive####1.1 什么是 Hive Hive 由 Facebook 实现并开源&#xff0c;是基于 Hadoop 的一个数据仓库工具&#xff0c;可以将结构化的数据映射为一张数据库表&#xff0c;并提供 HQL(Hive SQL)查询…

Dcat-admin使用 Alpine 双向数据绑定

介绍 Alpine.js 这东西真的轻量级&#xff0c;和vue相似&#xff0c;和 livewire 同一个作者&#xff0c;推荐大家使用&#xff0c;可以平替jquery 效果 实现 在 bootstrap.php 引入js Admin::headerJs([https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-y/alpinejs/3.9.0/…

掘金量化—Python SDK文档—4.数据结构

目录 Python SDK文档 4.数据结构 4.1数据类 Tick - Tick 对象 报价quote - (dict 类型) Bar - Bar 对象 L2Order - Level2 逐笔委托 L2Transaction - Level2 逐笔成交 4.2交易类 Account - 账户对象 Order - 委托对象 ExecRpt - 回报对象 Cash - 资金对象 Position - 持仓对象…

Windows操纵kafka

这里写目录标题 启动kafk创建一个测试主题查看所有主题查看first详细信息修改分区数(分区数只能增加 不能减少)删除主题生产者生产数据消费命令 启动kafk 安装目录下 .\bin\windows\kafka-server-start.bat .\config\server.properties创建一个测试主题 安装目录下 .\bin\wi…