【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)

在这里插入图片描述

文章目录

  • 例说mapserver静态地图参数
    • 1. Rviz中显示的地图
    • 2. mapserver保存地图详解
    • 3. 补充实验

例说mapserver静态地图参数

1. Rviz中显示的地图

在建图过程中,rviz会显示建图的实时情况,其输出来自于SLAM,浅蓝色区域为地图大小,黑色像素为障碍物占据栅格,白色区域为自由区域。
在这里插入图片描述

2. mapserver保存地图详解

rosrun map_server map_saver -f test

在这里插入图片描述
图片尺寸为 384 × 384 384\times 384 384×384,地图图片的尺寸不依赖于Gazebo和rviz的初始默认栅格,而是根据机器人探索情况动态增长

eog test.pgm

在这里插入图片描述

测试一下,当机器人跑的特别远时,地图尺寸会变化
在这里插入图片描述

打开配置文件vim test.yaml

image: test.pgm
resolution: 0.050000
origin: [-10.000000, -10.000000, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196

PGM是一种用于表示2D栅格地图的图像格式,通常在机器人导航和SLAM中使用。
image: test.pgm:

这行指定地图图像文件的名称,通常是以.pgm为扩展名的文件,包含了地图的栅格信息。
resolution: 0.050000:

这行指定了地图的分辨率,即每个像素的大小。在这个例子中,像素的边长为0.05单位(通常以米为单位)。
origin: [-10.000000, -10.000000, 0.000000]:

这行指定了地图的原点,也就是地图中(0, 0)栅格的位置。在这个例子中,原点的X坐标为-10,Y坐标为-10,Z坐标为0。这表示地图的左下角位于世界坐标系中的(-10, -10)位置。
在这里插入图片描述

实际上,地图的尺寸和分辨率是由SLAM算法指定的,笔者是gmapping算法,配置文件中,xminyminxmaxymax分别为地图的尺寸边界,delta为地图的分辨率

xmin: -10.0
ymin: -10.0
xmax: 10.0
ymax: 10.0
delta: 0.05

negate: 0:

这个参数通常用于指定地图的占据信息。如果值为0,表示地图中0值代表占据(occupied),而255值代表空闲(free)。如果值为1,表示地图中0值代表空闲,255值代表占据。
occupied_thresh: 0.65:

这个参数指定了栅格被认为是占据的概率阈值。在地图中,每个栅格通常用一个0到1之间的值表示占据的概率。如果概率大于或等于0.65,则该栅格被认为是占据的。
free_thresh: 0.196:

静态地图信息可以通过话题/map获取,其消息类型为nav_msgs::OccupancyGrid
消息解析

# This represents a 2-D grid map, in which each cell represents the probability of
# occupancy.Header header #MetaData for the map
MapMetaData info# The map data, in row-major order, starting with (0,0).  Occupancy
# probabilities are in the range [0,100].  Unknown is -1.
int8[] data

其中数据部分表明了,未知区域为-1,其他数值为占据概率,取值范围为[0,100],结合上面的配置,不难得出,在生成的地图中,取值65以上的点为黑色点,取值19.6以下的为白色点,灰色未知区域为-1

这个参数指定了栅格被认为是空闲的概率阈值。如果概率小于0.196,则该栅格被认为是空闲的。
Gazebo中的场景
在这里插入图片描述Gazebo中栅格数量为 20 × 20 20\times 20 20×20,每个栅格1米,地图大小 384 × 384 384\times 384 384×384,精度0.05m/pix,那么地图表达 19.2 × 19.2 m 19.2\times 19.2m 19.2×19.2m,基本一致

对于具体的地图坐标与换算算法(ROS实现),可参考
https://blog.csdn.net/weixin_47012067/article/details/121875590

在这里插入图片描述
在ROS的地图中,地图pgm是以像素为单位标记的,每个像素点(map.info.resolution)代表0.05m,即地图的分辨率(精度)为0.05m。

例如,下图上的星星,他的位置在像素层面上的坐标为 ( 400 , 150 ) (400, 150) (400,150),则 x : 400 x:400 x400像素, y : 150 y:150 y150像素。这个机器人距离地图原点的实际距离是:横坐标方向为 400 × 0.05 = 20 m 400 \times 0.05=20m 400×0.05=20m,纵坐标方向为 150 × 0.05 = 7.5 m 150 \times 0.05=7.5m 150×0.05=7.5m

在这里插入图片描述

3. 补充实验

实际上Gazebo和rviz中直接看到的栅格是图形化工具,与生成的地图没有直接关系
world文件中

<model name='ground_plane'><static>1</static><link name='link'><collision name='collision'><geometry><plane><normal>0 0 1</normal><size>100 100</size></plane></geometry><surface><friction><ode><mu>100</mu><mu2>50</mu2></ode><torsional><ode/></torsional></friction><contact><ode/></contact><bounce/></surface><max_contacts>10</max_contacts></collision><visual name='visual'><cast_shadows>0</cast_shadows><geometry><plane><normal>0 0 1</normal><size>100 100</size></plane></geometry><material><script><uri>file://media/materials/scripts/gazebo.material</uri><name>Gazebo/Grey</name></script></material></visual><self_collide>0</self_collide><kinematic>0</kinematic><gravity>1</gravity></link></model>

这个是地平面的尺寸,将其改为<size>30 30</size>明显变化了(灰色区域),但是其并非在rviz中的基本版面
在这里插入图片描述在Gazebo中点击World->GUI->grid
可以发现栅格数量和栅格大小都是可以指定的
在这里插入图片描述只是度量工具,沿墙有10个格子,每个格子1m,表明墙有10m
将栅格数量修改为10,栅格大小修改为2后,发现其占5个格子,仍然是10m,同时,所建的静态地图仍然为精度0.05,尺寸 384 × 384 384\times 384 384×384
rviz的栅格同样如此,也是可以指定数量和大小的,同样也不会影响建图,所以gazebo和rviz中的栅格只不过是图形化的度量工具。
在这里插入图片描述

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

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

相关文章

亲测有效:虚拟机安装gcc,报错Could not retrieve mirrorlist http://mirrorlist.centos.org

&#xff08;网卡配置资料&#xff09; 原因&#xff1a; 网络问题 报错详情&#xff1a; One of the configured repositories failed (未知),and yum doesnt have enough cached data to continue. At this point the onlysafe thing yum can do is fail. There are a few …

【python爬虫】3.爬虫初体验(BeautifulSoup解析)

文章目录 前言BeautifulSoup是什么BeautifulSoup怎么用解析数据提取数据 对象的变化过程总结 前言 上一关&#xff0c;我们学习了HTML基础知识&#xff0c;知道了HTML是一种用来描述网页的语言&#xff0c;又了解了HTML的基本结构。 认识了HTML中的常见标签和常见属性&#x…

时序预测 | MATLAB实现基于PSO-GRU、GRU时间序列预测对比

时序预测 | MATLAB实现基于PSO-GRU、GRU时间序列预测对比 目录 时序预测 | MATLAB实现基于PSO-GRU、GRU时间序列预测对比效果一览基本描述程序设计参考资料 效果一览 基本描述 MATLAB实现基于PSO-GRU、GRU时间序列预测对比。 1.MATLAB实现基于PSO-GRU、GRU时间序列预测对比&…

Ansible之playbooks剧本

Ansible之playbooks剧本 一.playbooks介绍 1.playbooks简述 &#xff08;1&#xff09;playbooks是ansible用于配置&#xff0c;部署&#xff0c;和管理被控节点的剧本。 &#xff08;2&#xff09;通过playbooks的详细描述&#xff0c;执行其中的tasks&#xff0c;可以让远…

什么是standard cell (标准单元) ?

参考文章&#xff1a; 聊一聊芯片后端的标准单元-standard cell - 知乎 (zhihu.com) standard cell中的7T和9T中的"T"指的是什么&#xff1f;或者是什么的缩写&#xff1f; - Layout讨论区 - EETOP 创芯网论坛 (原名&#xff1a;电子顶级开发网) - 数字后端基本概念介…

2023年7月京东彩妆市场品牌销售排行榜(京东数据挖掘)

鲸参谋监测的京东平台7月份彩妆市场销售数据已出炉&#xff01; 鲸参谋数据显示&#xff0c;7月份彩妆市场整体呈现下滑趋势。从大盘数据可知&#xff0c;京东7月的销量将近350万&#xff0c;环比下滑约38%&#xff0c;同比下滑约22%&#xff1b;销售额为5.1亿&#xff0c;环比…

JVM垃圾回收机制和常用算法(简洁版)

垃圾收集 (Garbage Collection,GC) 垃圾收集主要是针对堆和方法区进行。程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的&#xff0c;只存在于线程的生命周期内&#xff0c;线程结束之后就会消失&#xff0c;因此不需要对这三个区域进行垃圾回收。 判断一个对象是…

数据结构前言

一、什么是数据结构&#xff1f; 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 上面是百度百科的定义&#xff0c;通俗的来讲数据结构就是数据元素集合与数据元素集合或者数据元素与数据元素之间的组成形式。 举个…

操作系统(OS)与系统进程

操作系统&#xff08;OS&#xff09;与系统进程 冯诺依曼体系结构操作系统(Operator System)进程基本概念进程的描述&#xff08;PCB&#xff09;查看进程通过系统调用获取进程标示符&#xff08;PID&#xff09;通过系统调用创建进程&#xff08;fork&#xff09;进程状态&…

解决解析maven依赖加载卡住问题

首先找到用户设置文件的位置&#xff1a; 根据位置查找文件&#xff0c;没有则创建。 修改maven的默认镜像为阿里云镜像。 <mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/pub…

【C++】STL-函数对象 + 谓词

1.函数对象使用 #include <iostream> using namespace std;//STL-函数对象&#xff08;仿函数&#xff09;class MyAdd { public:int operator()(int v1, int v2){return v1 v2;} }; //1、函数对象在使用时&#xff0c;可以像普通函数那用调用&#xff0c;可以有参数&am…

视频汇聚/视频云存储/视频监控管理平台EasyCVR接入海康SDK协议后无法播放该如何解决?

开源EasyDarwin视频监控/安防监控/视频汇聚EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#…

基于nRF52840 Dongle配合Wireshark对Mesh网络抓包并解析(Nordic)

Mesh网络抓包解析 准备说明配置过滤解密分析 准备 1&#xff09;nRF52840 Dongle 2&#xff09;Mesh节点 3&#xff09;手机作为配网器&#xff08;苹果手机安装nRF Mesh APP&#xff09; 说明 1&#xff09;节点使用的例程目录&#xff1a;nrf5sdkformeshv500src\examples\…

java八股文面试[多线程]——阻塞队列

阻塞队列大纲&#xff1a; 什么是阻塞队列 阻塞队列&#xff1a;从名字可以看出&#xff0c;他也是队列的一种&#xff0c;那么他肯定是一个先进先出&#xff08;FIFO&#xff09;的数据结构。与普通队列不同的是&#xff0c;他支持两个附加操作&#xff0c;即阻塞添加和阻塞删…

【校招VIP】产品分析之活动策划宣传

考点介绍&#xff1a; 产品的上线运营是非常重要的。应该来说好的产品都是运营出来的&#xff0c;在一运营过程中难免会依靠策划活动来提高产品知名度、用户数。用户粘度等等指标一&#xff0c;如何策划一个成功的活动就显得非常重要。 产品分析之活动策划宣传-相关题目及解析…

存储数据恢复- raid5多块硬盘出现坏道的数据恢复案例

存储数据恢复环境&#xff1a; 某单位一台存储&#xff0c;1个机头4个扩展柜&#xff0c;有两组分别由27块和23块硬盘组建的RAID5阵列。其中由27块磁盘组建的那一组RAID5阵列崩溃&#xff0c;这组RAID5阵列存放是Oracle数据库文件。存储系统上层共划分了11个卷。 存储故障&…

爬虫到底难在哪里?

目录 爬虫到底难在哪里 怎么学习爬虫 注意事项 爬虫工具 总结 学习Python爬虫的难易程度因人而异&#xff0c;对于具备编程基础的人来说&#xff0c;学习Python爬虫并不困难。Python语言本身比较简单易学&#xff0c;适合初学者使用。 爬虫到底难在哪里 爬虫的难点主要包…

DevOps理念:开发与运维的融合

在现代软件开发领域&#xff0c;DevOps 不仅仅是一个流行的词汇&#xff0c;更是一种文化、一种哲学和一种方法论。DevOps 的核心理念是通过开发和运维之间的紧密合作&#xff0c;实现快速交付、高质量和持续创新。本文将深入探讨 DevOps 文化的重要性、原则以及如何在团队中实…

Vue中的指令

指令 指令 (Directives) 是带有 v- 前缀的特殊 attribute。指令 attribute 的值预期是单个 JavaScript 表达式。指令的职责是&#xff0c;当表达式的值改变时&#xff0c;将其产生的连带影响&#xff0c;响应式地作用于 DOM。 常用指令预期简短介绍v-showany显示隐藏元素&…