基于C++的GridMap2D 代码和公式

在这里插入图片描述
膨胀半径
在这里插入图片描述

这段代码主要是关于在二维地图上计算点之间距离的几个函数,同时也包含了查询地图上特定坐标点的距离和值的函数。我们逐一来解释每个函数的作用:

在这里插入图片描述

  1. worldDist(unsigned x1, unsigned y1, unsigned x2, unsigned y2):

    • 这个函数计算两个地图坐标之间的距离(以米为单位)。它接受两个点的 x 和 y 坐标作为输入,并通过调用 worldDist(const cv::Point& p1, const cv::Point& p2) 实现计算。
  2. worldDist(const cv::Point& p1, const cv::Point& p2):

    • 这个函数也是计算两个地图坐标之间的距离,但它接受的是 cv::Point 类型的点。它通过调用 GridMap2D::pointDist(p1, p2) 来计算两点之间的欧几里得距离,然后乘以地图的分辨率 m_mapInfo.resolution,将距离从像素单位转换成米。
  3. pointDist(const cv::Point& p1, const cv::Point& p2):

    • 这个函数计算两个点之间的欧几里得距离。它首先调用 pointDist2(p1, p2) 来计算点之间的距离平方,然后取平方根得到实际的距离。
  4. pointDist2(const cv::Point& p1, const cv::Point& p2):

    • 这个函数计算两个点之间的距离平方,使用的是欧几里得距离公式的平方形式,避免了计算平方根,可以用于性能敏感的场合。
  5. distanceMapAt(double wx, double wy)distanceMapAtCell(unsigned int mx, unsigned int my):

    • 这两个函数分别返回世界坐标下(wx, wy)和地图单元格坐标下(mx, my)的距离值(以米为单位)。如果指定的坐标超出地图范围,返回 -1
  6. binaryMapAt(double wx, double wy)binaryMapAtCell(unsigned int mx, unsigned int my):

    • 这两个函数分别在世界坐标和地图单元格坐标下返回地图的值。如果指定的坐标超出地图范围,返回 0

公式

对于两点之间的距离平方,给定点 p1 和 p2,其公式为:

距离平方 (Dist^2) = (x1 - x2)^2 + (y1 - y2)^2

这里,x1, y1 是点 p1 的坐标,x2, y2 是点 p2 的坐标。
欧几里得距离,即两点之间的直线距离,可以通过取距离平方的平方根来得到:

欧几里得距离 (Dist) = sqrt((x1 - x2)^2 + (y1 - y2)^2)

当我们要将这个距离转换为实际的世界距离(单位为米)时,我们需要将其与地图的分辨率相乘:

世界距离 (World Dist) = Dist × 分辨率

这里的 “分辨率” 表示每个地图单元(或像素)代表的实际距离,从而使我们能够将像素距离转换为实际的物理距离。

在这里插入图片描述
这段代码定义了一个地图处理类,主要用于机器人导航和地图管理。该类提供了从 ROS 的 OccupancyGrid 消息初始化地图、将地图数据转换回 OccupancyGrid 消息、从 OpenCV 的 Mat 对象初始化地图、更新内部距离图、获取地图信息等功能。下面是每个方法和变量的详细解释:

  1. setMap(const nav_msgs::OccupancyGridConstPtr& grid_map, bool unknown_as_obstacle = false):

    • 从 ROS 的 OccupancyGrid 消息初始化地图。如果 unknown_as_obstacle 设置为 true,那么未知区域将被视为障碍物。
  2. toOccupancyGridMsg() const:

    • 将当前地图数据转换回 ROS 的 nav_msgs::OccupancyGrid 消息格式。
  3. setMap(const cv::Mat& binary_map):

    • 从一个 OpenCV 的 Mat 对象初始化地图。这通常用于从二进制(黑白)图像创建地图,mapInfo(尤其是分辨率)保持不变。
  4. updateDistanceMap():

    • 重新计算内部的距离图。在手动更改网格地图数据之后需要调用此方法。
  5. getInfo() const:

    • 返回地图的元数据(nav_msgs::MapMetaData),包含分辨率、尺寸等信息。
  6. getResolution() const:

    • 返回地图的分辨率,即地图上每个像素代表的实际距离。
  7. getFrameID() const:

    • 返回地图的 tf 帧 ID(通常是 “/map”),这是地图在 ROS tf(坐标变换系统)中的标识符。
  8. distanceMap() constbinaryMap() const:

    • 分别返回内部的距离图和二进制图的 cv::Mat 对象。距离图中的每个像素值代表该点到最近障碍物的距离,二进制图中,通常使用特定的值标记自由空间和障碍物。
  9. size() const:

    • 返回二进制图像的尺寸,注意这里的 x/y 坐标是与图像的高度/宽度相反的。
  10. FREEOCCUPIED:

    • 分别代表自由空间和障碍物的像素值。自由空间为 255(白色),障碍物为 0(黑色)。
    • 因为这里表示的一种概率,同时更加容易分析图像

通过这些方法和变量,可以有效地管理和查询地图数据,适用于机器人的路径规划和导航任务。

具体代码:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

navicat连接本地虚拟机centos7下mysql

1 环境准备 1.1 VM16和centos7 VMware历史版本下载 VMware最新版下载 这里下载需要注册账号,验证码输入不了的话在右上角把语言改为英语就好 centos7下载教学 激活码百度即可,或者这个 VM16安装centos7教学 1.2 mysql 直接安装mariadb MariaDB数据库…

JAVA- SPRINGBOOT+VUE 大文件断点续传

版本:6.5.40 代码:up6-jsp-springboot: Web大文件上传-jsp-springboot示例 - Gitee.com nosql示例 nosql示例不需要进行任何配置,可以直接访问测试。 SQL示例 1.创建数据库 2.配置数据库连接 3.自动下载maven依赖 4.启动项目 启动成功 6.访…

代码随想录算法训练营Day57 ||leetCode 583. 两个字符串的删除操作 || 72. 编辑距离

647. 回文子串 dp[i][j]表示第i位开始&#xff0c;第j位结束的字符串是否为回文串 class Solution { public:int countSubstrings(string s) {vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));int result 0;for (int i s.size() - 1…

【C语言】 gets()puts()fgets()fputs()字符串输入输出函数的用法

文章目录 C语言中的字符串输入输出函数&#xff1a;gets、puts、fgets与fputsgets函数puts函数fgets函数fputs函数 C语言中的字符串输入输出函数知识点总结结语 C语言中的字符串输入输出函数&#xff1a;gets、puts、fgets与fputs 在C语言中&#xff0c;处理字符串的输入和输出…

Workman(php)实时推送示例(thinkphp)与问题排查

workman workerman是一款开源高性能PHP应用容器&#xff0c;它大大突破了传统PHP应用范围&#xff0c;被广泛的用于互联网、即时通讯、APP开发、硬件通讯、智能家居、物联网等领域的开发。 业务场景 目前接触到的场景大致分为两类&#xff1a; 物联网方面&#xff1b;设备传…

聊聊多模态大模型处理的思考

多模态&#xff1a;文本、音频、视频、图像等多形态的展现形式。目前部门内业务要求领域大模型需要是多模态——支持音频/文本。从个人思考的角度来审视下&#xff0c;审视下多模态大模型的实现方式。首先就要区分输入与输出&#xff0c;即输入的模态与输出的模态。从目前来看&…

为什么微软、谷歌没做成,第一个干这件事反而是亚马逊?

相信大家都熟悉云服务、云存储等应用&#xff0c;但是你知道是哪家公司最先提出这个概念的吗&#xff1f; 是的&#xff0c;微软、苹果还是英特尔&#xff1f; 事实上&#xff0c;事实并非如此。 亚马逊是全球第一个推出云服务的公司。 Web于2006年首次推出&#xff0c;即如今…

Mudbox 2025新版中文---数字雕刻与纹理绘画新境界

Mudbox 2025是一款功能强大的3D建模软件&#xff0c;以其卓越的建模能力和高效的创作工具而备受瞩目。它支持纹理烘烤、三维层、多分辨率网格编辑等功能&#xff0c;为用户提供了直观且易于操作的用户界面。 Mudbox 2025新版中文下载 功能特色&#xff1a; 强大的建模与雕刻能…

SpringBoot中的异步多线程使用及避坑指南

处理请求时需要考虑到系统的性能和响应速度。特别是在处理大量请求或者需要进行耗时操作时&#xff0c;采用异步多线程处理是一种常见的解决方案。Spring Boot提供了Async注解来支持异步方法调用&#xff0c;结合合适的线程池配置&#xff0c;可以很容易地实现异步多线程处理&a…

在 fstab文件中配置 UUID方式自动挂载数据盘、swap、目录(**)

linux如何挂在硬盘&#xff0c;自动挂载和手动挂载&#xff08;详细说明&#xff09;https://gitcode.csdn.net/65eedcea1a836825ed7a06f4.html 解决linux重启后磁盘挂载失效的问题 https://blog.csdn.net/sugarbliss/article/details/107033034 linux /etc/fstab 文件详细说…

非wpf应用程序项目【类库、用户控件库】中使用HandyControl

文章速览 前言实现方法1、首先需要在NuGet包管理器中添加HandyControl包&#xff1b;2、在Properties目录下添加DesignTimeResources&#xff1b;3、将其中内容替换为官网中于App.xaml添加的内容 参考文章 坚持记录实属不易&#xff0c;希望友善多金的码友能够随手点一个赞。 共…

windows 下用使用api OCI_ConnectionCreate连接oracle报错 TNS:无法解析指定的连接标识符

背景&#xff0c;两台服务器系统一样&#xff0c;oracle版本一样&#xff0c;其中一台服务器在运行程序的时候报错 TNS:无法解析指定的连接标识符 但是PL/SQL可以正常连接&#xff0c;怀疑是oracle配置文件的原因 tnsnames.ora配置文件大概作用&#xff1a;是Oracle客户端的网…

Git的原理和使用(四):理解分布式版本控制系统与远程仓库的相关配置

目录 远程操作 理解分布式版本控制系统 远程仓库 新建远程仓库 克隆远程仓库 向远程仓库推送 拉取远程仓库 配置Git 忽略特殊文件 为命令配置别名 标签管理 理解标签 创建标签 操作标签 远程操作 理解分布式版本控制系统 1、每个人的电脑都是一个完整的版本库&…

文案智能ai改写工具,文案改写很强大

文案智能ai改写工具可以说是文案编辑人员的得力助手&#xff0c;我们都知道文案的最终定稿还要经过后期的修改&#xff0c;基本也没有文案一写就立刻通过的&#xff0c;甚至有的文案是经过文案编人员多次改写通过&#xff0c;所以文案智能ai改写工具在文案修改的过程中起了很大…

机器人是怎么计时的(通用定时器 - 时基单元)

目录 一&#xff0c;引言 二&#xff0c;机器人的“大脑” 三&#xff0c;时基单元介绍 1&#xff0c;定时器框图 2&#xff0c;时基单元 &#xff08;1&#xff09;预分频器 &#xff08;2&#xff09;CNT计数器 &#xff08;3&#xff09;自动重装载寄存器 四&#…

Lilishop商城(windows)本地部署【docker版】

Lilishop商城&#xff08;windows&#xff09;本地部署【docker版】 部署官方文档&#xff1a;LILISHOP-开发者中心 https://gitee.com/beijing_hongye_huicheng/lilishop 本地安装docker https://docs.pickmall.cn/deploy/win/deploy.html 命令端页面 启动后docker界面 注…

【python】flask模板渲染引擎Jinja2中的模板继承,简化前端模块化开发

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

FPGA时钟资源详解(2)——Clock-Capable Inputs

FPGA时钟系列文章总览&#xff1a;FPGA原理与结构&#xff08;14&#xff09;——时钟资源https://ztzhang.blog.csdn.net/article/details/132307564 目录 一、概述 1.1 为什么使用CC 1.2 如何使用CC 二、Clock-Capable Inputs 2.1 SRCC 2.2 MRCC 2.3 其他用途 2.3.1…

Ubuntu 系统下安装 Redis

目录 一、上传 Redis 安装包并解压缩 二、编译 1、安装gcc&#xff0c;不然后面编译报错 2、开始编译 三、生成后台服务 四、修改配置文件 1、设置密码 2、设置后台启动 五、启动服务 一、上传 Redis 安装包并解压缩 tar -zxvf redis-6.0.2.tar.gz 二、编译 1、安装g…

对话 Mines of Dalarnia: Web3 游戏创新,社区驱动与公链共建

作者&#xff1a;stellafootprint.network 嘉宾&#xff1a;Manfred Pack&#xff0c;Mines of Dalarnia 游戏开发总监 采访者&#xff1a;Alex Cooper&#xff0c;Footprint Analytics 北美社区与 BD 负责人 在区块链游戏领域&#xff0c;去中心化和玩家经济正在颠覆传统游戏…
最新文章