| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> Navigation实训整理 -> 正文阅读 |
|
[人工智能]Navigation实训整理 |
NavigationNavigation实训整理乱七八糟的东西记了很多,放在这做个纪念吧 1. SLAM和Navigation整体流程SLAM即实时定位与建图技术,要点有两点即定位和建图。定位要求能都依据里程计和imu的信息并结合雷达的修正得到实时准确位置。而建图则依据雷达或相机的信息,并据此得到该位置处环境中实物的距离和方位角,通过某种算法得到代价栅格地图。
定位的核心是维护一条准确且实时更新的从map到base_link的TF树;路径规划的核心是生成global_costmap和local_costmap并调用路径规算法。 2. Navigation运行了那些节点,各有何特点:AMCL:通过雷达实时信息与静态地图匹配计算出对里程计长距离移动引起的误差进行修正;
move_base:全局路径规划、局部避障、速度指令生成; Laser启动节点:发布laser信息,为amcl和move_base提供scan信息; Imu/编码器里程计启动节点:用于生成odom信息; mapserver:通过Service/Topic方式向move_base提供静态地图; 此部分内容基本上是第一部分Navigation导航元功能包几部分内容的实现,基本的配置方式可参见奥特学院ROS ,该文本第七章有基本方法介绍。需要注意的是,此部分内容为仿真实现真实的机器人在静态TF发布和/odom到/base_footprint坐标的发布有些不同。 3. 导航涉及到哪些坐标变换:实体机器人导航时主要维护一条TF树:
而当仿真或者实体机器人经过rviz显示时还需要经由robot_state_publisher和joint_state_publisher两个节点来发布机器人信息,涉及urdf模型中包括车轮、辅助支撑link等所有link的TF变换; 4. 各个TF变换都由谁来发布和维护建图和导航过程中主要涉及的坐标系有地图坐标系(/map)、里程计坐标系(/odom)、机器人基坐标系(/base_footprint)、雷达坐标系(/laser)、imu安装坐标系(/imu);若在rviz中展示机器人模型需要包括车轮、底盘支撑架等一系列link的位置; 对于这些TF的发布和维护,有几种不同方式,
这些坐标系和TF的配置一般在move_base需要的yaml文件、urdf文件、雷达或者imu的启动launch文件中。 比较难理解的是AMCL维护的/odom和/map的变换,它涉及到了两种定位方式的融合,最终以连续定位偏差额形式输出,这块内容这个博客讲的很好:AMCL定位 5. map的一生:
本质上是一张包含了障碍物等空间信息的二维图片,每一个像素代表一定的距离,因此可以通过PS或者opencv、matlab等来进行后续平滑处理。此外,也可由CAD生成图片,直接将施工图转为map图片。 激光slam-- .pgm格式地图分析及修改方法 6.map和/map坐标系、odom和/odom坐标系关系:
7. 代价地图代价地图的生成方式如,即继承父类后分三层来生成,分别为静态层、基本障碍层和膨胀层。对于具体的流程不必了解太多,大体如下图所示,其实例化过程由costmap_2D功能包来完成,具体由cottmap2DROS这一类函数来实现。 8. scan的一生雷达是导航中很重要的一部分,他可以提供机器人到周围环境的距离和相位角信息,它的作用如下:
需要注意的有两点,一是雷达和imu一样,也有相应的filter功能包可以对/scan数据进行相应处理后再发送到各节点;二是雷达的/scan信息也可以由摄像头点云数据经功能包处理得到; 宕开一笔—— move_base实现流程这一套下来从整体上,在功能包层梳理了Navigation实现流程和一些注意事项,但熟悉这一套也只能成为一名光荣的——“调参侠”。SLAM和Navigation中最为核心的永远是算法,具体到Navigation,是全局规划器和本地规划器,想要能做个性化开发和应用,甚至算法研究必须能在这上面下点功夫。 而做路径规划离不了move_base和Movebase类,最好的方式是读源码(开源真香) 目前在龟速学习中,下阶段希望可以写出一个简单的全局规划器并实现调用 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 23:19:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |