ROS学习第四十二节——地图服务

news2024/12/23 17:09:58

https://download.csdn.net/download/qq_45685327/87721374

上一节我们已经实现通过gmapping的构建地图并在rviz中显示了地图,不过,上一节中地图数据是保存在内存中的,当节点关闭时,数据也会被一并释放,我们需要将栅格地图序列化到的磁盘以持久化存储,后期还要通过反序列化读取磁盘的地图数据再执行后续操作。在ROS中,地图数据的序列化与反序列化可以通过 map_server 功能包实现。

1.map_server简介

map_server功能包中提供了两个节点: map_saver 和 map_server,前者用于将栅格地图保存到磁盘,后者读取磁盘的栅格地图并以服务的方式提供出去。

map_server安装前面也有介绍,命令如下:

sudo apt install ros-<ROS版本>-map-server

2.map_server使用之地图保存节点(map_saver)

2.1map_saver节点说明

订阅的topic:

map(nav_msgs/OccupancyGrid)

  • 订阅此话题用于生成地图文件。

2.2地图保存launch文件

地图保存的语法比较简单,编写一个launch文件,内容如下:

nav02_map_save.launch

<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 是指地图的保存路径以及保存的文件名称。

SLAM建图完毕后,执行该launch文件即可。

source ./devel/setup.bash
roslaunch nav_demo nav02_map_save.launch

2.3保存结果解释2.3

xxx.pgm 本质是一张图片,直接使用图片查看程序即可打开。

xxx.yaml 保存的是地图的元数据信息,用于描述图片,内容格式如下:

#声明地图图片资源的路径
image: /home/xiaoming/demo2/src/nav_demo/map/nav.pgm
# 地图刻度尺单位是 米每像素
resolution: 0.050000
# 地图位姿(相对于rviz中的原点的位姿)
origin: [-50.000000, -50.000000, 0.000000]
# 占用阈值
negate: 0
# 空闲阈值
occupied_thresh: 0.65
# 取反
free_thresh: 0.196

解释:

  • image:被描述的图片资源路径,可以是绝对路径也可以是相对路径。

  • resolution: 图片分片率(单位: m/像素)。

  • origin: 地图中左下像素的二维姿势,为(x,y,偏航),偏航为逆时针旋转(偏航= 0表示无旋转)。

  • occupied_thresh: 占用概率大于此阈值的像素被视为完全占用。

  • free_thresh: 占用率小于此阈值的像素被视为完全空闲。

  • negate: 是否应该颠倒白色/黑色自由/占用的语义。

map_server 中障碍物计算规则:

  1. 地图中的每一个像素取值在 [0,255] 之间,白色为 255,黑色为 0,该值设为 x;
  2. map_server 会将像素值作为判断是否是障碍物的依据,首先计算比例: p = (255 - x) / 255.0,白色为0,黑色为1(negate为true,则p = x / 255.0);
  3. 根据步骤2计算的比例判断是否是障碍物,如果 p > occupied_thresh 那么视为障碍物,如果 p < free_thresh 那么视为无物。

备注:

  • 图片也可以根据需求编辑。

3.map_server使用之地图服务(map_server)

3.1map_server节点说明

发布的话题

map_metadata(nav_msgs / MapMetaData)

  • 发布地图元数据。

map(nav_msgs / OccupancyGrid)

  • 地图数据。

服务

static_map(nav_msgs / GetMap)

  • 通过此服务获取地图。

参数

〜frame_id(字符串,默认值:“map”)

  • 地图坐标系。

3.2地图读取

通过 map_server 的 map_server 节点可以读取栅格地图数据,编写 launch 文件如下:

nav03_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>

其中参数是地图描述文件的资源路径,执行该launch文件,该节点会发布话题:map(nav_msgs/OccupancyGrid)

3.3地图显示

首先运行刚刚编写的launch文件,发布地图文件的话题

roslaunch nav_demo nav03_map_server.launch

在 rviz 中使用 map 组件可以显示栅格地图:

经过尝试,发现没有/map话题,找到的方案是关闭一下roscore,再启动,然后在启动launch文件

roscore
roslaunch nav_demo nav03_map_server.launch
rostopic list
rviz

 打开rviz,添加map组件

订阅/map话题


另请参考:

  • map_server - ROS Wiki

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

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

相关文章

[译]理解 Rust 中的所有权

本文译者为 360 奇舞团前端开发工程师 原文标题&#xff1a;Understanding ownership in Rust 原文作者&#xff1a;Ukpai Ugochi 原文链接&#xff1a;https://blog.logrocket.com/understanding-ownership-in-rust/ 在 Stack Overflow 进行的开发人员调查中&#xff0c;Rust …

第二十六章 案例TodoList 之实现Footer组件

本小节&#xff0c;我们来实现最后的Footer组件的功能&#xff0c;它的功能主要有&#xff1a; 记录已完成和全部的任务列表数量点击【复选框】可以实现全选和全不选点击【删除已完成】按钮&#xff0c;可以将选中的任务项删除掉 实现已完成和全部的任务列表数量 步骤1&#…

提交Spark应用程序

文章目录 一&#xff0c;提交语法格式二&#xff0c;spark-submit常用参数三&#xff0c;案例演示 - 提交Spark自带的圆周率计算程序&#xff08;一&#xff09;Standalone模式&#xff0c;采用client提交方式&#xff08;二&#xff09;Standalone模式&#xff0c;采用cluster…

PMP第六版_1~3章

回想起来,距离上次看pmp已经过去一年多, 等着等着,第七版都出来了.自己还是没下决心考.第六版也都忘干净了.哎. 越来越不记事了.一转眼2023年了.哎…时间过得真快. 做个记录,顺便勉励自己吧. PMP 项目管理 按照十大知识领域来写的 要有美式思维 题干量大(因中英语言区别) 越…

Linux网络服务远程访问及控制SSH(你明目张胆的偏爱就是救赎)

文章目录 一、SSH的介绍及其相关知识点1.简介2.SSH的优点3.SSH的密钥登录 二、SSH的运用1.存放ssh服务端的配置文件2.白名单&黑名单3.存放ssh客户端的配置文件 三、ssh密钥登录操作1.密码验证2.秘钥对验证3.ssh远程登录SCP 远程复制SFTP获取服务端的文件 四、秘钥对的创建操…

nodejs+vue 校友录校友捐赠系统

校友录的设计与实现该系统面对的是用户和管理员&#xff0c;对于用户来说其最大的作用是在校友录的设计与实现前台查看校友活动、校友风采、校友捐赠、班级录、新闻中心、&#xff0c;其次进行交流园地。对管理员而言则是对用户、活动类型、校友活动、校友风采、校友捐赠、班级…

PCIE内核注册详解

代码结构 在Linux内核中&#xff0c;PCIe驱动程序的注册和处理涉及到许多文件&#xff0c;其中一些主要的文件包括&#xff1a; drivers/pci/pci.h&#xff1a;这个文件定义了PCIe驱动程序结构体和相关的函数。驱动程序需要包含这个头文件才能使用PCIe相关的函数和结构体。 d…

【观察者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型模式。它定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 观察者模式使用三个类Subject、Observer和Client。Subject…

ChatGPT热中的冷思考

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

taro之项目初始化模版

项目初始化模板 一直以来&#xff0c;在使用 Taro CLI 的 taro init 命令创建项目时&#xff0c;CLI 会提供若干内置模板给开发者选择。但是很多团队都有自己独特的业务场景&#xff0c;需要使用和维护的模板也不尽一致&#xff0c;因此 Taro 支持把项目模板打包成一个能力赋予…

思科模拟器 | 生成树协议STP、RSTP、HSRP配置

一、生成树协议STP 概念介绍&#xff1a; 生成树协议是一种网络协议&#xff0c;用于在交换机之间建立逻辑上的树形拓扑结构避免产生环路。为了完成这个功能&#xff0c;生成树协议需要进行些配置&#xff0c;包括根桥的选举、端口的状态切换等。 步骤明细&#xff1a; 使用思…

itop-3568 开发板系统编程学习笔记(21)PWM 应用编程

【北京迅为】嵌入式学习之Linux系统编程篇 https://www.bilibili.com/video/BV1zV411e7Cy/ 个人学习笔记 文章目录 在设备树打开 PWMsysfs 方式控制 PWMPWM 应用编程 在设备树打开 PWM RK3568 有 16 个 PWM 控制器&#xff0c;本文件将以 PWM0 为例进行实验&#xff0c;为什么…

如何在PowerShell中查找、添加、修改和删除环境变量:解决手动设置环境变量后报命令失效的问题

简介 PowerShell是Windows平台上的一种命令行工具&#xff0c;它可以方便地查找、添加、修改和删除环境变量。在本文中&#xff0c;LZ将介绍如何在PowerShell中进行这些操作。 查找环境变量 在PowerShell中查找环境变量非常简单。只需要使用Get-ChildItem命令&#xff0c;以…

LED驱动 中断

1、用字符设备驱动框架和平台设备驱动框架实现LED驱动 1.1 用字符设备驱动框架-----》led2 控制led2闪烁 1.应用层&#xff1a; 1 open&#xff08;“/dev/haha0”&#xff09; 2 while&#xff08;1&#xff09; ioctl&#xff08;fd&#xff0c;LED_ON&#xff09;&#xff…

java的社区养老服务系统 ssm空巢老人

创新点&#xff1a; 1、根据时间、类型统计用户下单记录&#xff0c;形成可视化图形&#xff08;饼状图&#xff09; 2、根据用户爱好推荐项目 包含模块&#xff1a;关于我们、联系我们、外链信息、资讯类型、服务资讯、服务类型、服务项目、案例类型、服务案例、讨论类型、讨论…

引入Tuning function design的自适应反步控制方法 上篇

引入Tuning function design的自适应反步控制方法 上篇 目录 引入Tuning function design的自适应反步控制方法 上篇尝试用推迟参数设计解决高阶不匹配系统的控制器设计问题问题描述控制器设计小结上一篇文章写了如何通过推迟参数设计的方法来解决不匹配条件下的系统反步控制设…

【原型设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;使你能够复制已有对象&#xff0c;而无需使代码依赖它们所属的类&#xff0c;同时又能保证性能。 这种模式是实现了一个原型接口&#xff0c;该接口用于创建当前对象的克隆。当直接创…

IT项目管理之软件测试

1. 定义 软件测试是使用人工或者自动的手段来运行或者测定某个软件系统的过程&#xff0c;其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。 在软件投入使用前&#xff0c;要经过一系列的严格测试&#xff0c;才能保证交付质量。 2. QC & QA &a…

会声会影导入视频是黑色的 会声会影导入视频只有声音

会声会影是一款功能很成熟的视频编辑软件&#xff0c;其友好的界面设计能照顾到初学者的需求&#xff0c;同时配置的强大功能可满足进阶者的需要。不过由于或硬件或软件的原因&#xff0c;可能会出现会声会影导入视频是黑色的&#xff0c;会声会影导入视频只有声音的问题。本文…

Docker的实际应用

一、 数据持久化 我们什么情况下要做数据持久化呢&#xff1f; 一定是在做容器之前先预判好哪些文件是要永久存储的&#xff0c; 而不会跟着它容器的一个生命周期而消失。 比如说配置文件、 日志文件、 缓存文件或者应用数据等等。 数据初始化有三种类型。 第一种 volumes&…