激光雷达建立地图算法介绍

建图算法:

1. hector_slam

要求: 高更新频率、小测量噪声的激光扫描仪,不需要里程计,可手持建图。

在hector_slam程序中,最重要的是hector_mapping节点:

(1)订阅的主题:

scan(类型:sensor_msgs/LaserScan):激光雷达的扫描数据,通常由设备的运行的节点提供,例如:hokuyo node

syscommand(类型:std_msgs/String) : 系统命令,直接受“reset”,当接受该命令时,重设map frame 和robot 位置到初始的状态。

(2)发布的主题:

map_metadata(类型:nav_msgs/MapMetaData):发布地图Meta数据,其余节点可以获取到map元数据,锁定并且定期更新。

map(类型:nav_msgs/OccupancyGrid):发布地图栅格数据,其余节点可以获取到map数据,锁定并且定期更新。

slam_out_pose(类型:geometry_msgs/PoseStamped):无协方差的预估机器人姿态。

poseupdate(类型:geometry_msgs/PoseWithCovarianceStamped):使用高斯预估不确定性的预估机器人姿态。

(3)服务:

dynamic_map(类型:nav_msgs/GetMap):使用该服务,获取地图数据。

(4)需要的tf

->base_fram激光雷达坐标系与基坐标系之间的变换,通常是固定值,由robot_state_publisher或者a tf static_transform_publisher发布。

(5)提供的tf

map->odom :在map坐标系中预估的robot姿态,当pub_map_odom_transform为true时发布。

2. gmapping_slam: tutorial

目前激光2Dslam用得最广的方法,gmapping采用的是RBPF的方法,优点是定位准确,但需要完整的硬件平台。

更能实现的需求:

基于激光雷达

RB粒子滤波算法

二位栅格地图

机器人里程计信息

OpenSlam算法

输出地图话题:nav_msgs/OccupancyGrid

主要节点:slam_gmapping

该slam_gmapping节点发生在sensor_msgs /激光扫描信息,并建立一个映射(nav_msgs / OccupancyGrid)。可以通过ROS 主题或服务检索地图。

1)订阅主题

tf(tf / tfMessage) :需要进行激光,基准和测距的相关框架转换,即激光雷达坐标系与基坐标系之间的变换。

scan (sensor_msgs / LaserScan):激光扫描从中创建地图。

2)发布主题

map_metadata(nav_msgs / MapMetaData):从此主题获取地图数据,将其锁定并定期更新。

map(nav_msgs / OccupancyGrid):从此主题获取地图数据,将其锁定并定期更新

〜entropy (std_msgs / Float64):机器人姿态分布的熵的估计值(较高的值表示较大的不确定性)。

3)服务

dynamic_map(nav_msgs / GetMap):调用此服务以获取地图数据。

4 必需的tf转换

<传入激光数据的框架> → base_link :通常是固定值,由robot_state_publisher或tf static_transform_publisher定期广播。

base_link → odom:通常由里程表系统(例如,移动基座的驱动器)提供,

5 提供tf转换

地图 → odom :在地图框架内的机器人姿势的当前估计。

3. karto_slam

karto_slam是基于图优化的方法,用高度优化和非迭代cholesky矩阵进行稀疏系统解耦作为解。图优化方法利用图的均值表示地图,每个节点表示机器人轨迹的一个位置点和传感器测量数据集,箭头的指向的连接表示连续机器人位置点的运动,每个新节点加入,地图就会依据空间中的节点箭头的约束进行计算更新。

karto_slam的ROS版本,其中采用的稀疏点调整(the Spare Pose Adjustment(SPA))与扫描匹配和闭环检测相关。landmark越多,内存需求越大,然而图优化方式相比其他方法在大环境下制图优势更大.在某些情况下karto_slam更有效,因为他仅包含点的图(robot pose),求得位置后再求map。

4. core_slam

core_slam是为了更加简单容易地理解性能损失最小化的一种slam算法。将算法简化为距离计算与地图更新的两个过程, 第一步,每次扫描输入,用基于简单的粒子滤波算法来计算距离,粒子滤波的匹配器用于激光与地图的匹配,每个滤波器粒子代表机器人可能的位置和相应的概率权重,这些都依赖之前的迭代计算。选择好最好的假设分布,即低权重粒子消失,新粒子生成。在更新步骤,扫描得到的线加入地图中,当障碍出现时,围绕障碍点绘制调整点集,而非仅一个孤立点。

系统总体框架

整个移动机器人的控制系统如上图所示。

具体的各功能模块之间的任务结构如下图所示,其中base_controller节点将订阅的cmd_vel信息通过串口或其它通信接口发送给下位机(嵌入式控制板)。下位机中根据机器人运动学公式进行解算,将机器人速度转换为每个轮子的速度,然后通过CAN总线(或其它总线接口)将每个轮子的转速发送给电机驱动板控制电机转动。电机驱动板对电机转速进行闭环控制(PID控制),并统计单位时间内接收到的编码器脉冲数,计算出轮子转速。

base_controller节点将接收到的cmd_vel速度信息转换为自定义的结构体或union类型的数据(自定义的数据类型中可以包含校验码等其它信息),并通过串口发送控制速度信息(speed_buf)或读取机器人传回的速度信息 (speed_buf_rev)。base_controller节点正确读取到底层(比如嵌入式控制板)传回的速度后进行积分,计算出机器人的估计位置和姿态,并将里程计信息和tf变换发布出去。

ROS gmapping导航包,要求的2 个 输入,一是激光数据,另一个是里程计信息

里程计又包含2方面的信息:

一是位姿(位置和角度),即(x, y,θ)

二是速度,即(前进速度v和转向速度ω)

里程计信息的数据获取的途径是:

1、采用ROS里的package: laser_scan_matcher

首先laser_scan_matcher 这个包,这个包能根据/scan 数据发布2D位姿的数据, 我们是否可以根据2D位姿数据来转换成表示位置的下x,y, z 以及表示姿态的四元数。

速度的获取:根据2D位姿和时间变量,来计算前进速度和转向速度。2D位姿数据包含:float64 x, float64 y, float64 theta,根据dt 时间里dx,dy,dtheta, 就可以算出前进速度,和转向速度。如果2D位姿数据足够精准,基本都用不上陀螺仪校准。

2、采用电机编码器来获取

ROS-激光雷达建立地图算法介绍相关推荐

  1. RIKIBOT-FX4多线激光雷达与LIO-SAM算法构建三维地图

    目录 简介 硬件环境的准备 lio_sam环境准备 多线激光雷达环境准备 录制数据包 播放数据包建图 关键参数配置 交流方式 简介 前面几篇文章介绍了多线激光雷达转单线,多线激光雷达用cartogra ...

  2. Cartographer使用3D激光雷达建立2D导航图(概率栅格地图)

    Cartographer使用3d激光雷达建2d图 1.尝试过的方法 1.1 参考官方demo_backpack_3d.launch文件,直接建图 1.2在线或离线生成pbstream文件,再转成pgm ...

  3. SLAM无人车计算地图坐标,ros中计算地图坐标,rosweb计算画布对应的坐标(含代码,含公式,超详细),开发跨系统地图导航必备算法【可实现qt,android,c#,mfc,html等地图开发】

    ros中计算地图坐标,rosweb计算画布对应的坐标 视频讲解: SLAM无人车计算地图坐标,图片像素坐标公式推导 1.订阅话题 /map nav_msgs::OccupancyGrid 这个消息中可 ...

  4. 计算机视觉算法——基于深度学习的高精地图算法(HDMapNet / VectorMapNet / MapTR / VectorNet)

    计算机视觉算法--基于深度学习的高精地图算法(HDMapNet / VectorMapNet / MapTR / VectorNet) 计算机视觉算法--基于深度学习的高精地图算法(HDMapNet ...

  5. 八叉树建立地图并实现路径规划导航

    构建语义地图时,用的是 octomap_server和 semantic_slam: octomap_generator,不过还是整理下之前的学习笔记. 一.Octomap 安装并使用Octomap_ ...

  6. TF 在ROS基本作用和简单介绍

    摘自:https://www.cnblogs.com/li-yao7758258/p/7672521.html TF 在ROS基本作用和简单介绍 学之之博未若知之之要知之之要未若行之之实 2019-0 ...

  7. 草莓采摘机器人——ROS导航(三)ROS自适应蒙特卡罗定位算法(ACML)理解

    草莓采摘机器人--ROS导航(三) ROS自适应蒙特卡罗定位算法(AMCL)理解 在详细解释ROS工作原理与步骤之前, 我想先Mark一下自适应蒙特卡罗定位算法的原理与思想. 毕竟算法才是王道. AM ...

  8. REDIS09_LBS出现背景、GEO算法介绍、算法步骤、剖析、邻近网格位置推算

    文章目录 ①. LBS出现的背景 ②. 重新认识经纬度 ③. 感性认识GeoHash ④. Geohash算法介绍 ⑤. Geohash算法步骤 ⑥. 更深入剖析GeoHash ⑦. 邻近网格位置推算 ...

  9. ROS开发实践(十三)——ROS中SLAM地图(.pgm格式)编辑软件的安装与使用

    一.应用背景 在ROS机器人通过SLAM算法构建好场景地图之后,为了保证ROS机器人的运行效果,我们通常会对场景地图进行修改,这里所说的场景地图通常为 .pgm 格式的文件,如下图所示. 二.地图编辑 ...

最新文章

  1. C/C++中switch用法的一种替换方式
  2. Java中的断言(assert)
  3. C# 关键字Event
  4. Linux2.6中的Slab层
  5. Codeforces Round #368 (Div. 2) problem: (C) Pythagorean Triples
  6. Linux下mysql新建账号及权限设置
  7. java登录界面命令_Java命令行界面(第29部分):自己动手
  8. html div bgcolor,HTML body bgcolor transparent
  9. CentOS设置服务开机自动启动【转】
  10. Docker学习文档之二 搭建环境-Linux环境
  11. 《数据结构教程》(李春葆 主编)课后习题【练习题6】
  12. Python PyCrypto,Paramiko模块安装和使用
  13. 视频教程-java后台+微信小程序 实现完整的点餐系统-微信开发
  14. 数据结构C语言双向循环链表,数据结构和算法(双向链表和双向循环链表)
  15. MATLAB | 好看的相关系数矩阵图绘制
  16. 2微信小程序的UI设计
  17. 基于GL Pipeline与光线追踪技术的融合实现的台球模拟器
  18. 管理培训决定企业生死的5个层面
  19. PowerBI动态M查询参数
  20. 商易通-预约挂号详情页面-预约确认(三十五)

热门文章

  1. 服务器2012系统关机,远程服务器2012关机
  2. ACID 原子性Atomicity,一致性Consistency,隔离性Isolation,持久性Durability
  3. Web端测试六大类型
  4. linux下mkdirs方法乱码,linux 解压zip中文乱码问题
  5. java数组基础知识巩固
  6. 小米10新品发布会,AIoT时代,必须了解的前沿高端技术
  7. Linux重要命令-weget
  8. WebGIS的大众化服务
  9. Python-鲤鱼王升级
  10. LFI 临时文件RCE总结