AGV 导航方法总体设计与分析

2023-11-05 12:44

本文主要是介绍AGV 导航方法总体设计与分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

导航方案设计 导航方法分为三个部分——路径规划、实时定位、轨迹纠正。

视觉定位模块

主要有三个工作任务:利用二维码定位对 AGV 初始位姿 进行矫正,保证 AGV 初始运动时其运动轨迹能够与道路平行;利用 ORBSLAM 定位能够实时的获得 AGV 在车库中的位姿;当 AGV 接近车位时,利 用二维码再次对 AGV 的位姿进行矫正,保证 AGV 能够准确的进入车位。定 位模块按照内容分一共分为两部分,二维码视觉定位和 ORB-SLAM 定位。 二维码视觉定位模块中,使用 ARToolKitPlus 库提供的二维码。在二维码识 别的过程中,利用模板匹配提高了 ID 识别的速度,在定位计算中利用 RPP 算法消除了局部最小值带来的错误解。ORB-SLAM 系统构建的是稀疏点云, 具有良好的实时性。在系统搭建的过程中使用跟踪法、局部地图、词袋法等, 多次优化保证了定位精度。同时系统加入了闭环检测,保证系统在大场景、 长时间建图定位的鲁棒性。

路径规划模块

为了提高定位模块的实时性,我们采用构建 ORB 特征的稀疏点云地图。 但稀疏点云地图不具备几个特征,不能像传统栅格地图可以进行路径规划。 为了解决这个问题,我们采用后台通信模式。后台根据施工图纸等信息建立 车库的全局栅格地图,在全局栅格地图中进行路径规划,将路径信息通过通 信的方式下发给定位导航层,对路径信息进行动作解析,得到相应的运动控 制命令。底层对运控命令的解析,得到电机转速从而实现动作反应。这种路 径规划模式存在一个新问题,全局地图要与 ORB 稀疏点云地图之间建立准 确的联系,确保定位信息、路径信息坐标系之间转换的正确性。所以在 AGV 执行导航任务前,借助二维码辅助信息完成建立坐标系关系的建立。对已知 世界坐标的二维码识别,获得 AGV 的初始位姿并对其进行矫正。确保 AGV 初始行走的初始轨迹平行坐标轴。在 SLAM 系统初始化完成时,通过记录当 帧中相机在二维码坐标系中的位姿,从而获得世界坐标系到稀疏点云坐标系 的变换矩阵。二维码在世界坐标系之中的姿态通过人工示教法获得。

轨迹纠正模块

将后台发过来的全局路径以坐标点对序列的形式下发过来,根据我们应用场景及相关算法 。对这些点对进行划分,将全局路径划分为各段直线的局部路径,并根据 局部路径信息进行动作解析得到速度控制命令。由于机械误差、路面不平等 多方面原因,小车不能严格的按我们预期的轨迹行进,会发生偏离。为了保 证 AGV 在运动过程中不偏离预期的轨迹路线,需要对轨迹进行纠正。利用 ORB-SLAM 视觉的实时定位信息与理想预期轨迹对比,根据理想位置和当前 位置可以得到 AGV 的轨迹偏离误差值,针对误差设计控制律使误差值收敛, 最终求解出小车的线速度和角速度使小车向理想轨迹靠拢。由于底层的一个 响应周期内可能完不成 AGV 轨迹跟踪控制预期的动作,在 AGV 运动的过程 中轨迹偏离误差值一直都存在并且随时间的成收敛趋势,所以理论上讲 AGV 在运动的过程中在不断逼近预期轨迹,其收敛效果与底层硬件反应,算法参数的选择有直接关系。在真实应用场景里,AGV 行进的路径都为直线,且在运动前通过二维码对 AGV 的姿态进行矫正,所以真实轨迹与理想轨迹之间 的误差值不会太大。

这篇关于AGV 导航方法总体设计与分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/349957

相关文章

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

python 3.8 的anaconda下载方法

《python3.8的anaconda下载方法》本文详细介绍了如何下载和安装带有Python3.8的Anaconda发行版,包括Anaconda简介、下载步骤、安装指南以及验证安装结果,此外,还介... 目录python3.8 版本的 Anaconda 下载与安装指南一、Anaconda 简介二、下载 An

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何