当前位置: 首页 > news >正文

【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中的栅格只不过是图形化的度量工具。
在这里插入图片描述

相关文章:

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

文章目录 例说mapserver静态地图参数1. Rviz中显示的地图2. mapserver保存地图详解3. 补充实验 例说mapserver静态地图参数 1. Rviz中显示的地图 在建图过程中&#xff0c;rviz会显示建图的实时情况&#xff0c;其输出来自于SLAM&#xff0c;浅蓝色区域为地图大小&#xff0c…...

【RapidAI】P0 项目总览

RapidAI 项目总览 ** 内容介绍 ** Author&#xff1a; SWHL、omahs Github&#xff1a; https://github.com/RapidAI/Knowledge-QA-LLM/ CSDN Author&#xff1a; 脚踏实地的大梦想家 UI Demo&#xff1a; ** 读者须知 ** 本系列博文&#xff0c;主要内容为将 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 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j < n 返回到达 nums[n…...

20230831-完成登录框的按钮操作,并在登录成功后进行界面跳转

登录框的按钮操作&#xff0c;并在登录成功后进行界面跳转 app.cpp #include "app.h" #include <cstdio> #include <QDebug> #include <QLineEdit> #include <QLabel> #include <QPainter> #include <QString> #include <Q…...

039 - sql逻辑操作符

前提&#xff1a; 做两个表employee和movie&#xff0c;用来练习使用&#xff1b; 表一&#xff1a;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是一种数据库连接技术&#xff0c;在不同的数据库之间进行数据传输和共享。它提供了一种透明的方法&#xff0c;让一个数据库访问另一个数据库的数据。 DbLink的优点是可以在多个数据库间实现数据共享&#xff0c;并且为不同数据库间的数据访问提供了便捷的…...

2.3 Vector 动态数组(迭代器)

C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 Vector<T> 动态数组&#xff08;模板语法&#xff09; 本文目标 1 熟悉迭代器设计模式&#xff1b; 2 实现数组的迭代器&#xff1b; 3 基于迭代器的容器遍历&#xff1b; 迭代器语法介绍 对迭…...

【ES6】Proxy的高级用法,实现一个生成各种 DOM 节点的通用函数dom

下面的例子则是利用get拦截&#xff0c;实现一个生成各种 DOM 节点的通用函数dom。 <body> </body><script>const dom new Proxy({}, {get(target, property) {return function(attrs {}, ...children) {const el document.createElement(property);for …...

气象站是什么设备?功能是什么?

气象站是一种用于测量和记录气象数据的设备。它通常是由各种传感器及其数据传输设备、固定设备和供电设备组成&#xff0c;可以测量风速、风向、温度、湿度、气压、降水量等气象要素&#xff0c;并将这些数据记录下来&#xff0c;以便进一步分析和研究。 气象站通常设置在广阔…...

227. 基本计算器 II Python

文章目录 一、题目描述示例 1示例 2示例 3 二、代码三、解题思路 一、题目描述 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-2^31, 2^31 - 1]的范围内…...

python中字典常用函数

字典常用函数 cmp(dict1,dict2) &#xff08;已删除&#xff0c;直接用>,<,即可&#xff09; 如果两个字典的元素相同返回0&#xff0c;如果字典dict1大于字典dict2返回1&#xff0c;如果字典dict1小于字典dict2返回-1。 先比较字典的长度&#xff0c;然后比较键&#x…...

leetcode88合并两个有序数组

题目&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&…...

Ceph入门到精通-Nginx 大量请求 延迟优化

优化nginx以处理大量请求并减少延迟可以通过以下几种方法实现&#xff1a; 调整worker_processes和worker_connections参数&#xff1a;增加worker_processes值可以增加nginx的进程数量&#xff0c;提高并发处理能力。增加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&#xff0c;前者是框架&#xff0c;类似与MFC&#xff0c;而后者是QT的编译器&#xff0c;也可以使用Visual studio编辑&#xff0c;编译需要其他的 Index of /new_archive/qt/5.8/5.8.0...

AIGC+思维导图:提升你的学习与工作效率的「神器」

目录 一、产品简介 二、功能介绍 2.1 AI一句话生成思维导图 2.2百万模版免费用 2.3分屏视图&#xff0c;一屏读写 2.4团队空间&#xff0c;多人协作 2.5 云端跨平台化 2.6 免费够用&#xff0c;会员功能更强大 2.7 支持多种格式的导入导出 三、使用教程 3.1 使用AI…...

javaScript:DOM元素的获取(静态/动态获取)

目录 一.dom元素获取的意义与使用场景 使用场景&#xff08;绝大多数js操作都需要dom操作&#xff09; 总结/疑问解答&#xff01; 二.DOM元素获取的常用方法&#xff08;重点&#xff09; 获取dom元素&#xff08;动态&#xff09; document.gerElementbyId() docume…...

数据结构前言

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

Docker基于alpine带glibc的小型容器image

由于程序是C写的&#xff0c;gc编译&#xff0c;找了几个容器&#xff0c;生成比较小的是debianslim和ubuntu&#xff0c;生成后的大小分别为88MB&#xff0c;和91MB&#xff0c;还是太大了&#xff0c;于是想起一些小型容器如busybox或者alpine自己装glibc&#xff0c;但是试了…...

Nginx教程

Nginx教程 01-Nginx简介02-windows安装Nginx03-Nginx目录结构04-Linux安装Nginx05-linux下源码安装nginx06-linux下nginx配置07-在docker中安装nginx08-源码安装和yum安装的区别09-Nginx运行组和运行用户10-卸载nginx11-nginx的基本原理和架构12-nginx是如何处理请求的13-nginx…...

直播预约|哪吒汽车岳文强:OEM和Tier1如何有效对接网络安全需求

信息安全是一个防护市场。如果数字化程度低&#xff0c;数据量不够&#xff0c;对外接口少&#xff0c;攻击成本高&#xff0c;所获利益少&#xff0c;自然就没有什么攻击&#xff0c;车厂因此也不需要在防护上花费太多成本。所以此前尽管说得热闹&#xff0c;但并没有太多真实…...

hiveserver2经常挂断的原因

hiveserver2经常挂断的原因 HiveServer2 经常挂断可能有多种原因&#xff0c;以下是一些可能导致挂断的常见原因&#xff1a; 资源不足&#xff1a;HiveServer2 需要足够的内存和 CPU 资源来处理查询请求。如果资源不足&#xff0c;可能会导致 HiveServer2 挂断。请确保在配置…...

openeuler 23.03 安装mysql 8.X

遇到一堆问题&#xff1a;直接从mysql官下载&#xff0c;都不行。下列是失败的&#xff1a; mysql80-community-release-el8-1.noarch.rpm mysql-8.0.34-1.el8.x86_64.rpm-bundle.tar mysql-8.1.0-1.el9.x86_64.rpm-bundle.tar 后来想从openeuler下载应该靠谱&#xff1a;ht…...

网络安全—0基础学习笔记(黑客)

一、前言 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以后再来解决. …...

react HashRouter 与 BrowserRouter 的区别及使用场景

一、简介 在单页面应用中&#xff0c;如何在切换页面后&#xff0c;不刷新浏览器呢&#xff1f;为了解决这个问题&#xff0c;有两种方法&#xff0c;就是hash路由模式、history路由模式&#xff0c;而 react router 的两种路由就是使用这两种路由模式。 二、区别 HashRouter…...

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)

https://www.cnblogs.com/henjay724/p/13770137.html 大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计。 在i.MXRT硬件那些事系列之《在串行NOR Flash XIP调试原理》一文中&#xff0c;痞…...

多目标应用:基于多目标向日葵优化算法(MOSFO)的微电网多目标优化调度MATLAB

一、微网系统运行优化模型 参考文献&#xff1a; [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、多目标向日葵优化算法 多目标向日葵优化算法&#xff08;Multi-objective sunflower optimization&#xff0c;MOS…...

智能安全科技,Vatee万腾为您服务

在智能科技的引领下&#xff0c;Vatee万腾将为您点亮投资之路&#xff0c;助您在金融市场中抓住机遇&#xff0c;实现财务目标。作为一家融合科技与投资的先锋平台&#xff0c;Vatee万腾致力于为投资者提供智能化的投资方案和支持。 Vatee万腾以其先进的智能科技为基础&#xf…...

Scala中的类型检查和转换,以及泛型,scala泛型的协变和逆变

Scala中的类型检查和转换&#xff0c;以及泛型 类型检查和转换 说明 &#xff08;1&#xff09; obj.isInstanceOf[T]&#xff1a;判断 obj 是不是T 类型。 &#xff08;2&#xff09; obj.asInstanceOf[T]&#xff1a;将 obj 强转成 T 类型。 &#xff08;3&#xff09; cla…...