ROS实践(五)机器人自动导航(robot_navigation)

news2025/3/16 23:16:05

目录

一、知识点

1. 定位

2. 路径规划

(1)全局路径规划

(2)局部路径规划

3. 避障

二、常用工具和传感器

三、相关功能包

1. move_base(决策规划)

2. amcl(定位)

3. costmap_2d(代价地图)

4. global_planner(全局规划器)

5. local_planner(局部规划器)

6. map_server(地图)

四、导航流程框架

五、navigation导航实验

1. 前提准备

2. 实验步骤

 六、附录(参数配置文件)

1. amcl_params.yaml(定位)

2. costmap_common_params.yaml(代价地图)

3. dwa_local_planner_params.yaml(dwz动态路径规划)

4. global_costmap_params.yaml (全局代价地图)

5. global_planner_params.yaml(全局规划器)

6.  local_costmap_params.yaml (局部代价地图)

7. move_base_params.yaml(决策规划)

8. teb_local_planner_params.yaml (路径规划)


        机器人导航是指机器人在环境中自主地从一个地点移动到另一个地点的过程。这个过程涉及到多个关键技术,包括定位、路径规划、避障等。机器人导航通常包括以下几个重要部分。

一、知识点

1. 定位

定位是机器人确定自己在环境中的位置的过程。常用的定位方法包括:

(1)GPS定位:适用于室外环境,利用卫星信号确定机器人的位置。

(2)里程计(Odometry):根据轮子的转动来估算机器人的位置,但容易受到误差累积的影响。

(3)激光雷达(Lidar)/传感器定位:利用激光扫描仪或其他传感器获取环境数据,进行位置修正。常用的方法有:①粒子滤波(Particle Filter):常用于基于激光雷达的定位。扩展②卡尔曼滤波(EKF):用于融合多个传感器数据。

(4)视觉定位(SLAM):通过相机和其他传感器(如激光雷达)进行同时定位与地图构建。

2. 路径规划

        路径规划是机器人从起点到目标点之间寻找一条最佳路径的过程。路径规划可以分为以下几种:

(1)全局路径规划

        全局路径规划是在已知整个环境地图的情况下进行的路径规划。它的目标是找到一条从起点到终点的最优路径,这条路径通常是在不考虑动态障碍物的情况下计算得出的。全局路径规划常用的算法包括:

① A*算法
        A*算法是一种启发式搜索算法,它结合了最佳优先搜索的高效性和Dijkstra算法的完备性。A算法使用启发式函数来估计从当前节点到目标节点的代价,从而指导搜索过程。这个启发式函数通常基于欧几里得距离或曼哈顿距离等简单度量。A*算法广泛应用于静态障碍物环境中的路径规划,因为它能够高效地找到最短路径。

② Dijkstra算法
       Dijkstra算法是一种基于图的路径搜索算法,它适用于所有边的权重为正数的图。该算法从起点开始,逐步扩展最短路径树,直到包含终点。在每一步中,它选择具有最小累积权重的边来扩展树。虽然Dijkstra算法不直接考虑目标节点的启发式信息,但它保证了找到从起点到图中所有其他节点的最短路径。在全局路径规划中,Dijkstra算法可以用于在权重图中找到最短路径,其中权重可能代表距离、时间或其他相关成本。

(2)局部路径规划

        局部路径规划是在全局路径的基础上,考虑动态障碍物和环境变化进行的路径规划。它的目标是生成一条能够安全避开动态障碍物并沿全局路径前进的局部路径。常见的局部规划方法包括:

① 动态窗口法(DWA)
        动态窗口法是一种基于采样的局部路径规划算法,它考虑了机器人的动力学约束(如速度和加速度限制)。DWA算法在速度空间中采样多个速度组合,并模拟这些速度组合在未来一段时间内的轨迹。然后,它根据这些轨迹的成本函数(通常考虑与障碍物的距离、与全局路径的偏差等因素)来选择最优速度。DWA算法能够实时响应动态环境的变化,并生成平滑且安全的局部路径。

② 虚拟力场(VFH)
       虚拟力场方法是一种基于势场的局部路径规划算法。它将环境表示为一个由吸引力和排斥力组成的力场。目标点产生吸引力,而障碍物产生排斥力。机器人根据这些力的合力来决定其运动方向。VFH方法的一个变种是基于当前环境的危险度图来生成避障路径。危险度图根据障碍物的位置、速度和形状等信息来评估环境中每个点的危险程度。机器人然后根据危险度图来选择安全的路径。

        需要注意的是,局部路径规划算法通常与全局路径规划算法结合使用。全局路径规划提供了一条大致的路径方向,而局部路径规划则负责在这条路径上安全地避开动态障碍物。这种结合使用的方法能够充分利用两种规划算法的优点,从而提高机器人的导航性能和安全性。

3. 避障

        概念:在自动导航系统中,避障是保证机器人安全行驶的关键环节。避障技术的核心目标是在机器人行进过程中检测环境中的障碍物,并通过合理的路径调整或规划,使机器人能够绕过障碍物,安全抵达目标位置。

        原理:机器人在执行导航任务时,会通过传感器(如激光雷达、深度相机、超声波传感器等)实时感知周围环境,并将数据输入到代价地图(costmap)中。代价地图会根据障碍物的距离和分布情况,为不同区域赋予不同的“代价”(cost),数值越高表示该区域的行进风险越大。在路径规划过程中,机器人会优先选择代价较低的区域前进,避免进入高代价区域,即避开障碍物。在某些情况下,如果机器人无法找到合适的避障路径,move_base 会触发恢复行为(Recovery Behaviors),如原地旋转寻找可行路径或向后退避,以尝试重新规划路线。如果恢复行为仍然失败,机器人会进入导航失败状态,等待新的指令或外部干预。

全局避障

        在全局路径规划阶段(通常由 global_planner 组件完成),机器人基于静态地图计算一条从起点到目标点的最优路径,并尽可能避开已知障碍物。然而,由于环境可能发生变化,例如出现新的障碍物或动态物体,单纯的全局规划无法满足实时避障的需求。

局部避障

        在机器人行进过程中,局部规划器(如 DWAPlanner)会持续接收传感器数据,检测行进路径上的动态障碍物,并进行路径调整。如果前方出现障碍物,局部规划器会尝试计算新的可行路径,使机器人绕开障碍物继续前进。

二、常用工具和传感器

1. 激光雷达(LiDAR)

         通过发射激光束并测量返回时间来计算与障碍物的距离,能够提供高精度的2D或3D环境建模,广泛用于SLAM(同步定位与地图构建)、路径规划、避障、目标跟踪等。2D LiDAR常用于室内机器人,3D LiDAR适用于自动驾驶、无人机测绘等复杂环境,常见型号包括Velodyne VLP-16、Hokuyo UST-10LX等。

2. RGBD相机

        结合RGB和彩色图像和深度信息,提供环境的3D感知能力,可用于地图构建、目标识别、障碍物检测、人脸识别、手势控制等。常见的RGBD相机有Intel RealSense、Microsoft Kinect、Orbbec Astra等,广泛应用于机器人视觉、AR/VR、自动化检测等领域。

3. 超声波传感器

        通过发射超声波并测量回波时间计算与障碍物的距离,适用于短距离障碍物检测,常用于自动泊车、无人机避障、水下探测、工业自动化等领域。其成本低、体积小,但受噪声和材质影响较大,常见型号如HC-SR04、MaxBotix MB1040。

4. IMU(惯性测量单元)

         由加速度计、陀螺仪(有时包含磁力计)组成,用于测量机器人姿态、角速度、加速度等信息,常用于惯性导航、姿态估计、运动跟踪等。IMU可单独使用,也可与GPS、LiDAR、里程计融合以提高定位精度,常见型号有MPU6050、BNO055、VectorNav VN-100等。

5. 轮式里程计(Odometry)

        通过测量轮子的旋转角度计算机器人在平面上的运动轨迹,适用于短时间内的相对位置估计,但存在累积误差,因此常与IMU、LiDAR、视觉SLAM结合使用以提高定位精度,广泛应用于移动机器人、自主导航、AGV(自动导引车)等。

三、相关功能包

   robot_navigation是一个基于ROS(Robot Operating System)的导航堆栈,设计用于处理复杂的室内和室外环境。robot_navigation是一个由第三方团队开发并开源的导航堆栈项目。它基于ROS系统构建,提供了全面的导航功能,并支持多种算法和应用场景。

        该项目的目的是简化机器人系统的集成,通过提供一套全面的导航工具包,使得开发者可以专注于特定的应用需求而不是基础架构的构建。

        下面这些组件虽然都是相对独立的功能包,但它们在ROS的导航堆栈中紧密协作,共同实现机器人的自主导航功能。robot_navigation并不是一个具体的软件包名,而是可能指代整个导航堆栈或相关软件包的集合。在ROS的官方文档和社区中,这些组件通常被归类为导航堆栈的一部分。相关功能包如下:

1. move_base(决策规划)

        move_base是ROS导航栈中的核心节点,负责机器人自主导航过程中路径规划和避障的关键决策。它的主要作用是接收目标位置,并结合环境地图信息,计算一条从当前位置到目标点的可行路径,同时在机器人运动过程中不断调整路径以应对动态环境变化。

        move_base包含多个关键组件:全局规划器、局部规划器、全局代价地图、局部代价地图以及恢复行为(recovery behaviors)。全局规划器(global planner)用于计算从当前机器人位置到目标点的整体路径,它通常基于静态地图,并在机器人首次规划或遇到较大障碍时重新计算路径。局部规划器(local planner)则负责机器人在实际行进过程中的路径微调,它结合局部代价地图(local costmap)来实时避障,确保机器人可以顺利绕开动态障碍物。

        move_base通过action API(一个异步通信机制)与客户端交互,并订阅多个ROS话题来接收传感器数据、地图信息及机器人运动状态。例如,它会订阅里程计数据(odometry)、激光雷达数据(LaserScan)以及传感器生成的代价地图信息,从而实时评估行进环境,确保机器人能够避开障碍物,最终顺利抵达目标位置。

2. amcl(定位)

  • 定义:amcl(Adaptive Monte Carlo Localization)是ROS中的一个软件包,专门用于机器人在已知的静态地图中进行自主定位。
  • 功能:它基于自适应蒙特卡洛定位算法(AMCL),使用粒子滤波的方式结合激光雷达数据与地图信息,持续估算并优化机器人的位姿(位置和朝向)。在实际应用中,amcl可以帮助机器人在复杂环境中保持准确定位,使其能够基于自身位置进行路径规划和导航。由于该节点具有高度可配置性,用户可以根据具体应用需求调整参数,以适应不同类型的机器人平台和环境特征,提高定位的稳定性和精度。
  • 应用场景:在已知地图中,机器人可以使用amcl进行定位,并根据当前位置进行路径规划。amcl节点高度可配置,可以根据实际需求调整参数。

3. costmap_2d(代价地图)

  • 定义:costmap_2d是ROS中的一个功能包,专门用于构建代价地图,为机器人提供环境感知能力。
  • 功能:代价地图表示环境中每个位置的“成本”,每个区域会根据障碍物的距离、机器人行驶的安全性等因素分配不同的代价。代价地图是一种栅格化的环境表示方式,其中每个单元格(栅格)都被赋予一个数值,以反映该区域的“代价”或通行风险。这个代价通常基于障碍物的距离、机器人行驶的安全性、动态环境因素等计算得出。例如,靠近障碍物的区域会被赋予较高的代价,而开阔、安全的区域代价较低,使得机器人在路径规划时更倾向于选择低代价区域行进。costmap_2d对于机器人导航至关重要,它帮助move_base等导航组件生成可行路径,确保机器人能够高效地避开障碍物,同时优化行进路线,以提高导航的稳定性和安全性。

4. global_planner(全局规划器)

        全局规划器用于在已知的地图上规划从起点到目标点的最优路径。它通常使用A*、Dijkstra或其他基于图搜索的方法来计算路径,并生成一条全局轨迹。

        全局规划的核心思想:是基于栅格地图或拓扑地图构建搜索空间,然后利用启发式搜索或动态规划算法,计算从起点到终点的最优路径。这条路径不考虑局部障碍物的动态变化,而是基于静态环境计算的。因此,全局规划器的主要目的是提供一个长距离的导航路径,供局部规划

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【小沐学Web3D】three.js 加载三维模型(React)

文章目录 1、简介1.1 three.js1.2 react.js 2、three.js React结语 1、简介 1.1 three.js Three.js 是一款 webGL(3D绘图标准)引擎,可以运行于所有支持 webGL 的浏览器。Three.js 封装了 webGL 底层的 API ,为我们提供了高级的…

软考教材重点内容 信息安全工程师 第19章 操作系统安全保护

19.1.1 操作系统安全概念 一般来说,操作系统的安全是指满足安全策略要求,具有相应的安全机制及安全功能,符合特定的安全标准,在一定约束条件下,能够抵御常见的网络安全威胁,保障自身的安全运行及资源安全。…

【机器学习】基于t-SNE的MNIST数据集可视化探索

一、前言 在机器学习和数据科学领域,高维数据的可视化是一个极具挑战但又至关重要的问题。高维数据难以直观地理解和分析,而有效的可视化方法能够帮助我们发现数据中的潜在结构、模式和关系。本文以经典的MNIST手写数字数据集为例,探讨如何利…

【Pycharm】Pycharm无法复制粘贴,提示系统剪贴板不可用

我也没有用vim的插件,检查了本地和ubutnu上都没有。区别是我是远程到ubutnu的pycharm,我本地直接控制windowes的pycharm是没问题的。现象是可以从外部复制到pycharm反之则不行。 ctl c ctlv 以及右键 都不行 参考:Pycharm无法复制粘贴&…

Flink-学习路线

最近想学习一下Flink,公司的实时需求还是不少的,因此结合ai整理了一份学习路线,记录一下。 当然,公司也有Scala版本Flink框架,也学习了一下。这里只说Java版本 1. Java基础 目标: 掌握Java编程语言的基础知识。 内容…

Atcoder ABC397-D 题解

https://atcoder.jp/contests/abc397/tasks/abc397_dhttps://atcoder.jp/contests/abc397/tasks/abc397_d 题目描述: 确定是否存在一对正整数,使得 思路: 首先对方程进行转化 设 即 接下来确定的范围 根据立方差公式 因此,我们可以从到来…

K8S学习之基础二十七:k8s中daemonset控制器

k8s中DaemonSet控制器 ​ DaemonSet控制器确保k8s集群中,所有节点都运行一个相同的pod,当node节点增加时,新节点也会自动创建一个pod,当node节点从集群移除,对应的pod也会自动删除。删除DaemonSet也会删除创建的pod。…

神经网络的基本知识

感知机 输入:来自其他 n 个神经元传递过来的输入信号 处理:输入信号通过带权重的连接进行传递, 神经元接受到总输入值将与神经元的阈值进行比较 输出:通过激活函数的处理以得到输出 感知机由两层神经元组成, 输入层接受外界输入信号传递给…

PostgreSQL技术内幕26:PG聚合算子实现分析

文章目录 0.简介1.概念说明2.朴素聚集3.Group by聚集3.1 哈希聚集3.2 分组聚集 0.简介 聚合算子在聚合函数在数据分析、报告生成和统计计算中扮演着重要角色,通过对多行数据进行计算,将多个输入值压缩为单一输出值,如求和、平均值、计数等。…

【RS】OneRec快手-生成式推荐模型

note 本文提出了一种名为 OneRec 的统一生成式推荐框架,旨在替代传统的多阶段排序策略,通过一个端到端的生成模型直接生成推荐结果。OneRec 的主要贡献包括: 编码器-解码器结构:采用稀疏混合专家(MoE)架构…

mac安装navicat及使用

0.删除旧的 sudo rm -Rf /Applications/Navicat\ Premium.app sudo rm -Rf /private/var/db/BootCaches/CB6F12B3-2C14-461E-B5A7-A8621B7FF130/app.com.prect.NavicatPremium.playlist sudo rm -Rf ~/Library/Caches/com.apple.helpd/SDMHelpData/Other/English/HelpSDMIndexF…

【HTML】二、列表、表格

文章目录 1、列表1.1 无序列表1.2 有序列表1.3 定义列表 2、表格2.1 定义2.2 表格结构标签2.3 合并单元格 1、列表 列表分为: 无序列表有序列表定义列表:一个标题下有多个小分类 1.1 无序列表 ul嵌套li,ul是无序列表,li是列表…

​​​​​​​大语言模型安全风险分析及相关解决方案

大语言模型的安全风险可以从多个维度进行分类。 从输入输出的角度来看,存在提示注入、不安全输出处理、恶意内容生成和幻觉错误等风险; 从数据层面来看,训练数据中毒、敏感信息泄露和模型反演攻击是主要威胁; 模型自身则面临拒绝服务和盗窃的风险; 供应链和插件的不安全引…

windows平台的ffmpeg编译使用

windows平台的ffmpeg编译使用 一、现状 本人使用libgdx开发galGame,发现扩展包gdx-video不支持mp4,不能忍,正好看到官网有支持自定义编译的文档,所以操作一下,自定义编译。本文重点在于操作windows平台,linux平台太简单了。 整个过程包括如下几个步骤。 二、代码下载…

FFMPEG录制远程监控摄像头MP4

手绘效果图 上图是录制功能的HTML前端页面,录制功能和解码视频放在一起。录制功能关键是录制(开始录制按钮)、停止录像按钮。当点击“录制”的时候则会开始录制MP4文件, 当点击停止的时候就会停止录制MP4。经过录制后,则会生成MP4,并放到我的RV1126的/tm…

centos操作系统上传和下载百度网盘内容

探序基因 整理 进入百度网盘官网百度网盘 客户端下载 下载linux的rpm格式的安装包 在linux命令行中输入:rpm -ivh baidunetdisk_4.17.7_x86_64.rpm 出现报错: 错误:依赖检测失败: libXScrnSaver 被 baidunetdisk-4.17.7-1.x8…

Rubick:基于 Electron 的开源插件化桌面效率工具箱

Rubick 是一款基于 Electron 构建的开源桌面工具箱,专为追求高效办公和个性化体验的用户设计。它通过自由集成丰富的插件,让用户能够根据自己的需求打造极致的桌面端效率工具。 软件命名由来Rubick 的名字来源于《DOTA2》中的英雄 Rubick(拉…

ruoyi-vue部署

ruoyi源码类型 Ruoyi源码 编译打包后,直接部署tomcat服务器 Ruoyi-vue 前后端分离版 前端部署到nginx 后端部署到tomcat RuoYi-Cloud 微服务版 RuoYi-app 移动端版 RuoYi-vue 前后端分离版 环境 JDK>=1.8 MySQL >= 5.7 Maven >= 3.0 Node >= 12 Redis…

LLM论文笔记 23: Meta Reasoning for Large Language Models

Arxiv日期:2024.6.17机构:THU / MSRA 关键词 meta-reasoning推理方法prompt engineering 核心结论 1. 提出Meta Reasoning prompting,MRP是一种系统提示方法,能够帮助LLM动态选择最合适的推理方法,从而提升其灵活性和…

【最后203篇系列】015 几种消息队列的思考

背景 队列还是非常重要的中间件,可以帮助我们:提高处理效率、完成更复杂的处理流程 最初,我觉得只要掌握一种消息队列就够了,现在想想挺好笑的。 过去的探索 因为我用python,而rabbitmq比较贴合快速和复杂的数据处…