ros建图
1.1Gmapping算法
Gmapping是一个基于2D激光雷达使用RBPF(Rao-Blackwellized Particle Filters)算法完成二维栅格地图构建的SLAM(Simultaneous Localization And Mapping)算法。
目前比较常用的建图算法。构建大地图时所需内存和计算量都会增加,因此 不适合构建大场景地图。因为没有回环检测,所以在回环闭合时可能会造成地图 错位
1.2Hector算法
Hector slam 利用高斯牛顿方法解决 scan-matching 问题,对传感器要求较高。其无需使用里程计,所以在不平坦区域实现建图的空中无人机及地面小车具有运用的可行性,利用已经获得的地图对激光束点阵进行优化,估计激光点在地图的表示,和占据网络的概率。获得激光点集映射到已有地图的刚体变换,为避免局部最小而非全局最优出现,地图使用多分辨率。
不需要里程计,人抱着小车走也可以建图。效果不如 gmapping,适合因条 件限制没有里程计的机器人。 建图时转向速度尽量缓慢,建议 0.1rad/s 以下
1.3Karto算法
KartoSLAM是基于图优化的方法,用高度优化和非迭代 cholesky矩阵进行稀疏系统解耦作为解,图优化方法利用图的均值表示地图,每个节点表示机器人轨迹的一个位置点和传感器测量数据集,箭头的指向的连接表示连续机器人位置点的运动,每个新节点加入,地图就会依据空间中的节点箭头的约束进行计算更新。
与 gmapping 差不多,更适合用于创建大地图,同时其地图刷新比较慢。
1.4cartographer算法
Cartographer 是一种在 Google 公司开发的开源 SLAM(Simultaneous Localization and Mapping)算法,用于构建环境地图并同时定位机器人。Cartographer 算法基于激光雷达和 IMU 等传感器数据,可以实现高精度的建图和定位,适用于多种类型的机器人应用。
直接订阅 odom,不需要 robot_pose_ekf。其 tf 发布频率 200HZ 大于 robot_pose_ekf 的 20HZ,
robot_pose_ekf 发布的 tf 会被覆盖.
建图建议:一般建图时小车速度越慢,其效果就会越好
map_server简介
7.2.2 导航实现02_地图服务 · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程
map_server功能包中提供了两个节点: map_saver 和 map_server,前者用于将栅格地图保存到磁盘,后者读取磁盘的栅格地图并以服务的方式提供出去。
1.安装map_server
sudo apt install ros-<ROS版本>-map-server
2.map_server使用之地图保存节点(map_saver)
编写一个launch文件
其中 mymap 是指地图的保存路径以及保存的文件名称。
<launch>
<arg name="filename" value="$(find mycar_nav)/map/nav" />
<node name="map_save" pkg="map_server" type="map_saver" args="-f $(arg filename)" />
</launch>
其中 mymap 是指地图的保存路径以及保存的文件名称。
3.map_server使用之地图服务(map_server)
读取地图,编写launch文件
<launch>
<!-- 设置地图的配置文件 -->
<arg name="map" default="nav.yaml" />
<!-- 运行地图服务器,并且加载设置的地图-->
<node name="map_server" pkg="map_server" type="map_server" args="$(find mycar_nav)/map/$(arg map)"/>
</launch>
Navigation工作框架
功能包amcl:协助定位
功能包move_base:订阅目标位置话题,发布速度命令
amcl功能包
amcl功能包主要作用是补偿定位累计误 差。 订阅小车位置(TF坐标base_footprint)和 雷达信息,计算小车在地图上的位置 偏差,然后发布map到odom_combined 的TF转换。 amcl根据雷达信息计算base_footprint在 map上的位置误差,再通过在map和 base_footprint中间添加一个TF: odom_combined来进行误差补偿。
move_base功能包
路径规划器
代价地图
参数配置文件
未完待续