【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算法,配置文件中,
xmin、ymin、xmax、ymax分别为地图的尺寸边界,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 x:400像素, y : 150 y:150 y:150像素。这个机器人距离地图原点的实际距离是:横坐标方向为 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中的栅格只不过是图形化的度量工具。

相关文章:
【ROS】例说mapserver静态地图参数(对照Rviz、Gazebo环境)
文章目录 例说mapserver静态地图参数1. Rviz中显示的地图2. mapserver保存地图详解3. 补充实验 例说mapserver静态地图参数 1. Rviz中显示的地图 在建图过程中,rviz会显示建图的实时情况,其输出来自于SLAM,浅蓝色区域为地图大小,…...
【RapidAI】P0 项目总览
RapidAI 项目总览 ** 内容介绍 ** Author: SWHL、omahs Github: https://github.com/RapidAI/Knowledge-QA-LLM/ CSDN Author: 脚踏实地的大梦想家 UI Demo: ** 读者须知 ** 本系列博文,主要内容为将 RapidAI 项目逐…...
初识c++
文章目录 前言一、C命名空间1、命名空间2、命名空间定义 二、第一个c程序1、c的hello world2、std命名空间的使用惯例 三、C输入&输出1、c输入&输出 四、c中缺省参数1、缺省参数概念2、缺省参数分类3、缺省参数应用 五、c中函数重载1、函数重载概念2、函数重载应用 六、…...
【面试经典150题】跳跃游戏Ⅱ
题目链接 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j < n 返回到达 nums[n…...
20230831-完成登录框的按钮操作,并在登录成功后进行界面跳转
登录框的按钮操作,并在登录成功后进行界面跳转 app.cpp #include "app.h" #include <cstdio> #include <QDebug> #include <QLineEdit> #include <QLabel> #include <QPainter> #include <QString> #include <Q…...
039 - sql逻辑操作符
前提: 做两个表employee和movie,用来练习使用; 表一:employee -- 创建表employee CREATE TABLE IF NOT EXISTS employee(id INT NOT NULL AUTO_INCREMENT,first_name VARCHAR(100) NOT NULL,last_name VARCHAR(100) NOT NULL,t…...
DbLInk使用
DbLInk介绍 DbLink是一种数据库连接技术,在不同的数据库之间进行数据传输和共享。它提供了一种透明的方法,让一个数据库访问另一个数据库的数据。 DbLink的优点是可以在多个数据库间实现数据共享,并且为不同数据库间的数据访问提供了便捷的…...
2.3 Vector 动态数组(迭代器)
C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 Vector<T> 动态数组(模板语法) 本文目标 1 熟悉迭代器设计模式; 2 实现数组的迭代器; 3 基于迭代器的容器遍历; 迭代器语法介绍 对迭…...
【ES6】Proxy的高级用法,实现一个生成各种 DOM 节点的通用函数dom
下面的例子则是利用get拦截,实现一个生成各种 DOM 节点的通用函数dom。 <body> </body><script>const dom new Proxy({}, {get(target, property) {return function(attrs {}, ...children) {const el document.createElement(property);for …...
气象站是什么设备?功能是什么?
气象站是一种用于测量和记录气象数据的设备。它通常是由各种传感器及其数据传输设备、固定设备和供电设备组成,可以测量风速、风向、温度、湿度、气压、降水量等气象要素,并将这些数据记录下来,以便进一步分析和研究。 气象站通常设置在广阔…...
227. 基本计算器 II Python
文章目录 一、题目描述示例 1示例 2示例 3 二、代码三、解题思路 一、题目描述 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-2^31, 2^31 - 1]的范围内…...
python中字典常用函数
字典常用函数 cmp(dict1,dict2) (已删除,直接用>,<,即可) 如果两个字典的元素相同返回0,如果字典dict1大于字典dict2返回1,如果字典dict1小于字典dict2返回-1。 先比较字典的长度,然后比较键&#x…...
leetcode88合并两个有序数组
题目: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终&…...
Ceph入门到精通-Nginx 大量请求 延迟优化
优化nginx以处理大量请求并减少延迟可以通过以下几种方法实现: 调整worker_processes和worker_connections参数:增加worker_processes值可以增加nginx的进程数量,提高并发处理能力。增加worker_connections参数的值可以增加每个worker进程可…...
Vulnstack----5、ATTCK红队评估实战靶场五
文章目录 一 环境搭建二 外网渗透三 内网信息收集3.1 本机信息收集3.2 域内信息收集 四 横向移动4.1 路由转发和代理通道4.2 抓取域用户密码4.3 使用Psexec登录域控4.4 3389远程登录 五、痕迹清理 一 环境搭建 1、项目地址 http://vulnstack.qiyuanxuetang.net/vuln/detail/7/ …...
QT 5.8
QT与Qt Creator,前者是框架,类似与MFC,而后者是QT的编译器,也可以使用Visual studio编辑,编译需要其他的 Index of /new_archive/qt/5.8/5.8.0...
AIGC+思维导图:提升你的学习与工作效率的「神器」
目录 一、产品简介 二、功能介绍 2.1 AI一句话生成思维导图 2.2百万模版免费用 2.3分屏视图,一屏读写 2.4团队空间,多人协作 2.5 云端跨平台化 2.6 免费够用,会员功能更强大 2.7 支持多种格式的导入导出 三、使用教程 3.1 使用AI…...
javaScript:DOM元素的获取(静态/动态获取)
目录 一.dom元素获取的意义与使用场景 使用场景(绝大多数js操作都需要dom操作) 总结/疑问解答! 二.DOM元素获取的常用方法(重点) 获取dom元素(动态) document.gerElementbyId() docume…...
数据结构前言
一、什么是数据结构? 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 上面是百度百科的定义,通俗的来讲数据结构就是数据元素集合与数据元素集合或者数据元素与数据元素之间的组成形式。 举个…...
Docker基于alpine带glibc的小型容器image
由于程序是C写的,gc编译,找了几个容器,生成比较小的是debianslim和ubuntu,生成后的大小分别为88MB,和91MB,还是太大了,于是想起一些小型容器如busybox或者alpine自己装glibc,但是试了…...
从231MB到69.5MB:我是如何优化Emby信息推送Docker镜像体积的(Python Alpine实战)
从231MB到69.5MB:Python Alpine实战中的Docker镜像瘦身艺术 在资源受限的云环境或边缘设备上部署服务时,Docker镜像体积直接决定了部署效率和资源利用率。一个典型的场景是:当你在凌晨三点通过SSH连接到树莓派部署更新时,发现需要…...
dji 妙算3编译ffmpeg启用h264_nvmpi h264_nvenc硬件加速
1. nvidia-codec-headers #版本 12.0.16 cd nv-codec-headers#更改Makefile文件,指定安装目录 vim Makefile PREFIX /open_app/user_installMakefile文件更改后如下所示make && make install2. nvidia-l4t-jetson-multimedia-api 下载包 wget https://repo…...
3分钟搞定AdGuard浏览器扩展安装:终极广告拦截与隐私保护指南
3分钟搞定AdGuard浏览器扩展安装:终极广告拦截与隐私保护指南 【免费下载链接】AdguardBrowserExtension AdGuard browser extension 项目地址: https://gitcode.com/gh_mirrors/ad/AdguardBrowserExtension AdGuard浏览器扩展是一款功能强大的开源广告拦截工…...
用快马AI快速原型:十分钟搭建可视化算术表达式编译器
最近在学习编译原理,发现很多概念特别抽象,特别是词法分析、语法分析这些环节。正好在InsCode(快马)平台上尝试做了一个可视化算术表达式计算器,把整个编译过程直观展示出来,效果意外地好。分享下我的实现思路,特别适合…...
全栈实战:在快马平台从零到一开发一个可部署的极客日报应用
今天想和大家分享一个最近在InsCode(快马)平台上完成的实战项目——极客日报全栈应用开发。这个项目从零开始,完整实现了前后端分离的Web应用开发流程,特别适合想系统性学习全栈开发的同学参考。 项目架构设计 整个应用采用经典的三层架构:前…...
Dress Code高分辨率虚拟试衣数据集:计算机视觉时尚研究的终极实战指南
Dress Code高分辨率虚拟试衣数据集:计算机视觉时尚研究的终极实战指南 【免费下载链接】dress-code 项目地址: https://gitcode.com/gh_mirrors/dre/dress-code Dress Code是由意大利摩德纳大学研究团队开发的高分辨率多类别虚拟试衣数据集,为计…...
C 里面如何使用链表 list
1. 学生时代, 那会学习 C 数据结构, 比较简单 struct person {int id;char name[641];struct person * next; }; 类似上面这样, 需要什么依赖 next 指针来回调整, 然后手工 print F5 去 debug 熬. 2. 刚工作青年时代, 主要花活, 随大流类似 #pragma once#include "stru…...
实战指南:基于快马ai与ubuntu24.04从零部署高可用个人博客系统
今天想和大家分享一个实战项目:在Ubuntu 24.04上从零部署一个高可用的个人博客系统。这个系统不仅前后端分离,还用到了Nginx反向代理和Gunicorn应用服务器,非常适合想学习全栈开发的朋友练手。 系统架构设计 整个博客系统采用经典的前后端分离…...
从安装到实战:基于快马AI生成openclaw的网站内容监控应用项目
最近在做一个网站内容监控的小工具,尝试用openclaw框架来实现自动化采集和变更检测。这个项目从环境搭建到功能实现踩了不少坑,记录下完整过程给有类似需求的同学参考。 环境准备与openclaw安装 openclaw的安装其实挺简单,直接用pip就能搞定…...
PHP使用ffmpeg实现视频随机截图并转成图片
安装FFmpeg软件在CentOS 7系统上安装FFmpeg需要添加第三方仓库并执行安装命令:123sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.rosudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm…...

