ROS Navigation之map_server完全详解
0. 写在最前面
建议收藏:
本文持续更新地址:https://haoqchen.site/2018/11/27/map_server/
本文将介绍自己在看ROS的Navigation stack中的map_server包源代码时的一些理解。作者的ROS版本是indigo,map_server版本是1.12.13。如有错误,欢迎在评论中指正。
左侧专栏还在更新其他Navigation包源码解读哦,关注一波?
如果觉得写得还不错,就请收藏一下啦~~~后续想把整个Navigation看了。
1. package.xml与CMakeLists.txt
package介绍中说,mapserver提供了一个ROS节点,该节点通过一个ROS Service来提供地图数据,同时提供了一个命令行程序来动态地将生成的地图保存到文件中
。其依赖一些库,特别需要注意的是sdl-image(用来加载地图图片)
、yaml-cpp(配置中用到挺多yaml文件的)
和tf
。
CMakeLists中定义生成以下:
- image_loader动态库,详见第2章
- map_server可执行程序,详见第3章
- map_saver可执行程序,详见第4章
- 其余是test和安装的步骤,不是重点就不看了
2. image_loader动态库
3. map_server可执行程序
在main函数中定义了一个
MapServer
对象。在该对象的构造函数中,通过描述文件和ROS参数服务器获得地图相应参数后,调用[image_loader动态库][image_loader动态库]中的loadMapFromFile
函数将地图加载到私有成员nav_msgs::GetMap::Response map_resp_
中。然后提供一个名为
static_map
的服务,回调函数是MapServer::mapCallback
。关于ROS服务器和客户端是什么,不懂的可以看ROS教程编写简单的服务器和客户端 (C++)。该服务器做的就是将地图map_resp_
深拷贝给客户端。amcl中就是通过这个服务获得地图的接着发布一个内容为
nav_msgs::MapMetaData
,名为map_metadata
的话题。
time map_load_time
float32 resolution
uint32 width
uint32 height
geometry_msgs/Pose origin
nav_msgs::MapMetaData
的信息如上,应该只是一些地图的基本信息,查找了一下,基本没人订阅这个话题,除了一个test。
- 最后发布一个内容为
nav_msgs::OccupancyGrid
,名为map
的话题,并将加载到的map_resp_.map
发布上去。
std_msgs/Header header
nav_msgs/MapMetaData info
int8[] data
nav_msgs::OccupancyGrid
的信息如上。就是地图了。查了一下发现,GMapping中也会往map
这个话题发布消息。除了一些test节点,目前只发现amcl中有在一定条件下订阅map
这个话题。然而据我了解,amcl中实际也没有订阅话题,而是直接通过上述的服务器来获得地图的。
4. map_saver可执行程序
需要注意的是,如果你是想保存Cartographer生成的地图,是需要对源代码做一些修改的。因为Cartographer的map格式跟GMapping中的格式不太一样。具体不一样如下:
point type | GMapping value | Cartographer value |
---|---|---|
free | 0 | 0-N |
occupied | 100 | M-100 |
unknown | -1 | -1 & N-M |
我按照这个不同对map_server包做了一些修改,详情看github:https://github.com/HaoQChen/map_server。如果觉得有用,记得star一下哦。
参考
- map_server官网
喜欢我的文章的话Star一下呗Star
版权声明:本文为白夜行的狼原创文章,未经允许不得以任何形式转载
ROS Navigation之map_server完全详解相关推荐
- [置顶] ros的navigation之———gmapping应用详解(in ros)
gmapping是一个比较完善的地图构建开源包,使用激光和里程计的数据来生成二维地图. 博主最近也一直在使用gmapping,在前期着实被它卡了好久,因为好多东西不明白(原谅我是ros小白). 现 ...
- ROS学习:URDF语法详解一link篇
ROS学习:URDF语法详解一link篇 1.概述 1.1 URDF语法详解_robot 1.2 URDF语法详解_link 1.2.3.案例需求:分别生成长方体.圆柱与球体的机器人部件 1.概述 参 ...
- ROS(11)move_base详解
11. move_base详解 11.1. move_base配置参数解读 参考链接:https://blog.csdn.net/banzhuan133/article/details/9023925 ...
- Navigation组件的使用详解
Navigation 是 JetPack 中的一个组件,用于方便的实现页面的导航,所以抽象出了一个 destination 的概念,大部分情况一个 destination 就表示一个 Fragment ...
- ROS中的多坐标变换详解(示例+代码)
目录 坐标变换的数学基础 多坐标变换与静态/动态坐标变换的不同之处 tf坐标转换的实质 多坐标变换 静态/动态坐标变换 坐标系相对关系的发布 命令行形式:another_static_pub.laun ...
- Android 官方架构组件 Navigation 使用详解
前言 前段时间,我在做项目开发的时候对Fragment的管理遇到几个小问题,总觉得在现阶段封装好的Fragment管理器不太优雅.这成为我下决心学习Jetpack在很早之前推出的Navigation库 ...
- ROS入门笔记(七):详解ROS文件系统
ROS入门笔记(七):详解ROS文件系统 文章目录 01 Catkin编译系统 1.1 Catkin特点 1.2 Catkin工作原理 1.3 使用`catkin_make`进行编译 02 Catki ...
- ios navigation的返回按钮长按_Android Jetpack架构组件 — Navigation入坑详解 [转]
前言 这是最近看见的觉得比较有意思的文,希望对大家的学习有帮助. Navigation 直接翻译即为导航,它是 Android Jetpack 组件之一,让单 Activity 应用成为首选架构.应用 ...
- 四.卡尔曼滤波器(EKF)开发实践之四: ROS系统位姿估计包robot_pose_ekf详解
本系列文章主要介绍如何在工程实践中使用卡尔曼滤波器,分七个小节介绍: 一.卡尔曼滤波器开发实践之一: 五大公式 二.卡尔曼滤波器开发实践之二: 一个简单的位置估计卡尔曼滤波器 三.卡尔曼滤波器(EK ...
最新文章
- 工具库 --- Validator (JS正则)
- oracle dbms_output.put不输出
- ++和--操作符分析
- 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改
- 七月在线 《关键点检测概览与环境配置》
- bzoj1016 [JSOI2008]最小生成树计数
- java redirect 跨域_如何解决跨域重定向携带参数的问题?不使用将参数拼接在重定向url末尾的方式...
- ASP.NET中禁止继承IIS中web.config根目录的配置
- Spring Boot Java应用代码混淆介绍
- mysql java.util.date_jdbc-java.sql.date和java.util.date之间转换
- 数据库设计原则与开发规范,你知道多少?
- php微信自动登录,利用php怎么实现一个自动登录微信并获取昵称的功能
- Key为数字的Json数据标准化成标准Json格式
- 计算机名汉字 oracle,修改计算机名对ORACLE的影像
- linux创建2g文件,创建一个2G的文件(Linux命令dd)
- 华为内部的关于IC验证的经验总结
- mysql中工资表,( 13 ) 数据库中有工资表 , 包括 “ 姓名 ” 、 “ 工资 ” 和 “ 职称 ” 等字段 , 现要对不同职称的职 - 赏学吧...
- php yii的优缺点,YII2框架的优缺点是什么
- 【小白CV教程】YOLOv5+Deepsort实现车辆行人的检测、追踪和计数
- 关于MAC安装包文件损坏解决办法
热门文章
- MyEclipse如何复制项目、无法修改web-context-root问题解决办法/ Repeated column in mapping for entity
- 处理OSS上传失败一例
- Android使用Put方式提交数据
- 11-04Physics-Aware Learning-based Longitudinal Vehicle Trajectory Prediction in Congested Traffic
- 网络营销方法:15种常见的网络营销方式
- 彻底解决PPt一直弹出mathtype错误信息
- Scrum板与Kanban如何抉择?敏捷工具:plcbpb板与按照kjuaoxnu
- 中国经济增长预期上调至8.5%;亚马逊药店提供常见处方药;中国外汇储备激增236亿美元…| 洞悉跨境
- 网站静态化——前后端分离(下)
- 毕业设计 RFID智能门禁系统 - 单片机 物联网 嵌入式