grid map学习笔记1之Ubuntu18.04+ROS-melodic编译安装grid_map栅格地图及示例运行

news2024/12/22 18:32:56

文章目录

  • 0 引言
  • 1 安装依赖和编译
    • 1.1 安装依赖
    • 1.2 下载编译
  • 2 运行示例
    • 2.1 simple_demo
    • 2.2 tutorial_demo
    • 2.3 iterators_demo
    • 2.4 image_to_gridmap_demo
    • 2.5 grid_map_to_image_demo
    • 2.6 opencv_demo
    • 2.7 resolution_change_demo
    • 2.8 filters_demo
    • 2.9 interpolation_demo

0 引言

苏黎世的grid map是一种用于环境建图的算法,也称为Occupancy Grid Mapping(占据栅格地图)。该算法将环境划分为一系列正方形的栅格,每个栅格表示环境中的一个小区域。栅格的状态可以是占据(occupied)、自由(free)或未知(unknown),用于表示栅格内是否有障碍物或是否可以通过。在建图过程中,机器人通过传感器获取环境的信息,将该信息转换为栅格地图的形式,并利用栅格地图进行定位和路径规划等任务,具有较高的实时性和可扩展性。该算法已被广泛应用于机器人导航、自主驾驶等领域。
请添加图片描述
grid map包含多个子工程文件,以下是子工程的简要介绍:

  1. grid_map_core:包含grid map类的定义,实现了所有grid map的核心算法和数据结构。
  2. grid_map_ros:提供了与ROS(Robot Operating System)集成所需的功能和节点,包括地图的发布和订阅、转换等。
  3. grid_map_msgs:定义了ROS消息的格式,用于传输grid map的数据。
  4. grid_map_cv:提供了与OpenCV(Open Source Computer Vision Library)集成所需的功能,包括图像与grid map的转换、图像处理等。
  5. grid_map_visualization:提供了用于可视化grid map的工具和节点,包括rviz插件、Matlab接口等。
  6. grid_map_filters:提供了一些用于grid map滤波的函数和类,如高斯滤波、中值滤波、形态学滤波等。
  7. grid_map_loader:提供了用于从文件中加载grid map的函数和类,如从ROS bag文件中加载、从图片文件中加载等。

这些子工程提供了grid map库的核心功能和一些扩展功能,可以方便地与ROSOpenCV等其他库进行集成,使得grid map的应用更加方便和灵活。

👉 grid map github:https://github.com/ANYbotics/grid_map
·
本文系统环境:

  • Ubuntu18.04
  • ROS-melodic
  • OpenCV3.2.0
  • Eigen 3.3.4
  • PCL 1.8.1

1 安装依赖和编译

可以直接安装,但如果想进一步学习源码和实现原理,建议源码安装,以下是直接安装的命令:

# sudo apt-get install ros-$ROS_DISTRO-grid-map
sudo apt-get install ros-melodic-grid-map

1.1 安装依赖

grid_map_core 子工程仅取决于线性代数库eigen

sudo apt-get install libeigen3-dev

其他子工程主要依赖的有OpenCV, pcl等,OpenCV一般都装过了,这里仅贴出pcl的安装,本文是安装了pcl1.8大版本,可先下载 pcl 1.8.1 版本(点击Source code(zip)

先安装pcl1.8.1所需的依赖库:

sudo apt-get update  
sudo apt-get install git build-essential linux-libc-dev
sudo apt-get install cmake cmake-gui
sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install mpi-default-dev openmpi-bin openmpi-common 
sudo apt-get install libflann1.9 libflann-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libvtk7.1-qt libvtk7.1
sudo apt-get install libqhull* libgtest-dev
sudo apt-get install freeglut3-dev pkg-config
sudo apt-get install libxmu-dev libxi-dev
sudo apt-get install mono-complete
sudo apt-get install openjdk-8-jdk openjdk-8-jre

然后解压下载的pcl1.8.1源码,并进入到pcl1.8.1文件夹中:

mkdir build
cd build
cmake ..
make -j4
sudo make install

测试pcl是否安装成功的话,可用pcl_viewer xxx.pcd
如果没有pcd文件,可去点云库PCL(Point Cloud Library)的学习资源汇总下载rabbit.pcd

pcl_viewer rabbit.pcd

请添加图片描述

1.2 下载编译

为了最大限度地提高性能,请确保以发布(Release)模式构建:

cd catkin_grid_map/src
git clone https://github.com/anybotics/grid_map.git
cd ../
catkin_make -DCMAKE_BUILD_TYPE=Release

编译后出现如下costmap_2d库的错误:

CMake Error at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
  Could not find a package configuration file provided by "costmap_2d" with
  any of the following names:

    costmap_2dConfig.cmake
    costmap_2d-config.cmake

安装 costmap-2d 库即可

sudo apt-get install ros-melodic-costmap-2d

编译又报了一个有关yaml-cpp 库的错误:

~/catkin_grid_map/devel/lib/libgrid_map_pcl.so: undefined reference to `typeinfo for YAML::BadConversion'
~/catkin_grid_map/devel/lib/libgrid_map_pcl.so: undefined reference to `YAML::BadConversion::~BadConversion()'
~/catkin_grid_map/devel/lib/libgrid_map_pcl.so: undefined reference to `vtable for YAML::BadConversion'
grid_map/grid_map_pcl/CMakeFiles/grid_map_pcl_loader_node.dir/build.make:332: recipe for target '~/catkin_grid_map/devel/lib/grid_map_pcl/grid_map_pcl_loader_node' failed

应该是工程中yaml-cpp库的问题,仔细检查后,只有grid_map_pcl子工程目录的CMakelists.txt需要用到yaml-cpp,根据上述报错也是定位到该CMakelists.txt,如下,增加find_package(yaml-cpp REQUIRED)进行尝试:

set(CATKIN_PACKAGE_DEPENDENCIES
	grid_map_core
	grid_map_msgs
	grid_map_ros
	pcl_ros
	roscpp
)

# 新增这行,使用系统安装的yaml-cpp 进行尝试
find_package(yaml-cpp REQUIRED)

find_package(OpenMP QUIET)

重新执行catkin_make -DCMAKE_BUILD_TYPE=Release,发现编译通过:

[ 91%] Built target octomap_to_gridmap_demo
[ 92%] Built target filters_demo
[ 94%] Built target grid_map_to_image_demo
[ 95%] Built target iterators_demo
[ 98%] Built target grid_map_pcl
Consolidate compiler generated dependencies of target grid_map_pcl_loader_node
[100%] Linking CXX executable ~/catkin_grid_map/devel/lib/grid_map_pcl/grid_map_pcl_loader_node
[100%] Built target grid_map_pcl_loader_node

2 运行示例

2.1 simple_demo

simple_demo演示了一个使用栅格地图库的简单示例。此ROS节点创建一个栅格地图,向其添加数据并发布它,可用RVIZ查看可视化结果,命令如下:

# source 激活grid_map环境
# 后面的演示就不再source
source ~/catkin_grid_map/devel/setup.bash
roslaunch grid_map_demos simple_demo.launch

启动后,如下所示在rviz中即可看到一张栅格地图:

请添加图片描述

2.2 tutorial_demo

tutorial_demogrid map库功能的扩展演示。命令如下:

roslaunch grid_map_demos tutorial_demo.launch

启动后,如下所示在rviz中即可看到一张栅格地图:

请添加图片描述

2.3 iterators_demo

iterators_demo展示grid map迭代器的用法,命令如下:

roslaunch grid_map_demos iterators_demo.launch

启动后,如下所示在rviz中即可看到一张动态迭代的栅格地图:
请添加图片描述

2.4 image_to_gridmap_demo

image_to_gridmap_demo演示了如何将数据从图像转换为栅格地图,命令如下:

roslaunch grid_map_demos image_to_gridmap_demo.launch

启动后,如下所示在rviz中即可看到一张由图片转换的栅格地图:
请添加图片描述

2.5 grid_map_to_image_demo

grid_map_to_image_demo演示了如何将栅格地图保存到图像。命令如下,其中/grid_map是栅格地图的topic_file后面需要写要保存图像的路径和名字:

rosrun grid_map_demos grid_map_to_image_demo _grid_map_topic:=/grid_map _file:=/home/$USER/Desktop/grid_map_image.png

可以结合2.4等,保存栅格地图。

2.6 opencv_demo

opencv_demoOpenCV功能的帮助下演示了地图操作,命令如下:

roslaunch grid_map_demos opencv_demo.launch

启动后,如下所示在rviz中即可看到一张栅格地图:
请添加图片描述

2.7 resolution_change_demo

resolution_change_demo 显示如何在OpenCV图像缩放方法的帮助下更改栅格地图的分辨率,命令如下:

roslaunch grid_map_demos resolution_change_demo.launch

启动后,如下所示在rviz中即可看到一张栅格地图:
请添加图片描述

2.8 filters_demo

filters_demo使用一系列ROS过滤器来处理栅格地图。从地形图的高程开始,该演示使用多个过滤器展示如何计算表面正常,使用镶嵌物填充孔,平滑/模糊地图并使用数学表达式来检测边缘,计算粗糙度和遍历性。过滤器链设置在filters_demo_filter_chain.yaml文件中配置,启动命令:

roslaunch grid_map_demos filters_demo.launch

2.9 interpolation_demo

interpolation_demo 显示了结果表面上不同插值方法的结果,命令如下:

roslaunch grid_map_demos interpolation_demo.launch

启动后,如下所示在rviz中勾选两个 grid maptopic,即可看到一张在表面差值后的栅格地图:

请添加图片描述
至此,成功编译安装grid map栅格地图,并运行多个示例熟悉grid map.


Reference:

  • https://github.com/anybotics/grid_map



须知少时凌云志,曾许人间第一流。



⭐️👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍🌔

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

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

相关文章

java项目之个人交友网站(ssm+mysql+jsp)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的个人交友网站。技术交流和部署相关看文章末尾! 开发环境: 后端: 开发语言:Java 框架&…

计算机启动过程uefi+gpt方式

启动过程: 一、通电 按下开关,不用多说 二、uefi阶段 通电后,cpu第一条指令是执行uefi固件代码。 uefi固件代码固化在主板上的rom中。 (一)uefi介绍 UEFI,全称Unified Extensible Firmware Interface&am…

基于C#的无边框窗体动画效果的完美解决方案 - 开源研究系列文章

最近在整理和编写基于C#的WinForm应用程序,然后碰到一个其他读者也可能碰到的问题,就是C#的Borderless无边框窗体的动画效果问题。 在Visual Studio 2022里,C#的WinForm程序提供了Borderless无边框窗体的样式效果,但是它没提供在无…

scrollIntoView()定位元素显示导致页面上移解决方法?

文章目录 项目场景:问题描述原因分析:解决方案:1、使用fixed固定定位父级元素2、控制父元素的scrollTop 项目场景: 在项目中需要根据当前组件的componentId来定位到页面的顶部显示。 问题描述 本来想着使用最传统的方法&#xff0…

MYSQL 练习2

练习2 创建company数据库在数据库中根据以下图示创建表,表结构如下,并插入以下数据,完成下面的sql。 ​ 表结构如下: salgrade表 salrade表数据 完成以下SQL编写: 修改emp表中sal字段为salary查找年薪在20000到3000…

JavaScript布尔逻辑

布尔逻辑是一种逻辑学上的分支,涉及真和假的值。布尔逻辑中使用的运算符仅返回真或假结果,这些运算符包括取反、与、或等。布尔逻辑通常用于电子学、计算机科学和数学等领域,其中真和假的值对于决策和控制流程非常重要。在计算机编程中&#…

60个AIGC专业术语手册;5种大模型微调方法总结;大模型创业潮成败点评;AIGC通用大模型产品测评报告 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 ChatGLM 金融大模型挑战赛,冠军送12B模型授权30W算力 GLM大模型联合安硕信息、阿里云、魔搭社区、北京交通大学&#xff0…

【并发专题】线程池ThreadPoolExecutorl底层原理源码分析

目录 前置知识课程内容一、线程池1.基本介绍2.Executor接口3.线程池的重点属性ctl字段RUNNING字段SHUTDOWN字段 二、线程池的创建及参数解读三、核心源码解读 学习总结 前置知识 Q1:终止一个线程的方法有哪些? 答:通常有4个方法。其中前2个是…

机械制造三维虚拟仿真实训的优点

机械制造三维虚拟仿真实训系统是一种基于计算机技术的机械原理仿真软件,它可以模拟各种机械系统的运动和受力情况,帮助用户深入了解机械原理的工作原理和应用。该系统采用三维建模技术,将机械系统的各个部分进行数字化建模,并通过…

科研院所用泛微搭建信创办公平台,统一办公,业务融合,安全便捷

国家全面推动重要领域的信创改造工作,要求到2027年底,对综合办公、经营管理、生产运营等系统实现“应替尽替、能替则替”。 科研机构作为智力、知识密集型机构,承载着大量数据、信息资产,数字化程度高,业务系统多样&a…

阿里云部署 ChatGLM2-6B 与 langchain+ChatGLM

1.ChatGLM2-6B 部署 更新系统 apt-get update 安装git apt-get install git-lfs git init git lfs install 克隆 ChatGLM2-6B 源码 git clone https://github.com/THUDM/ChatGLM2-6B.git 克隆 chatglm2-6b 模型 #进入目录 cd ChatGLM2-6B #创建目录 mkdir model #进入目录 cd m…

MySql增删改查基础

目录 1.基本操作 1.1新增 1.2查询 1.2.1指定查询 1.2.2排序查询 1.2.3分页查询 1.3修改 1.4删除 2.进阶操作 2.1键值约束 2.1.1主键约束 2.1.2唯一键约束 2.1.3非空约束 2.1.4默认值 2.1.5自增属性 ​编辑 2.1.6外键约束 2.1.7check子句 3.表的设计 3.1ER关…

海上港口三维数据可视化展示提升应急救援效率

3D可视化技术可以将复杂数据转化为生动的图形和模型,使得数据的关联和趋势更加明确和易于理解。通过使用3D模型和图形,我们可以更直观地观察数据之间的关系,发现隐藏在数据背后的规律和模式。例如,在工业领域,利用3D可…

jdk,jre和jvm三者的关系和区别

目录 一、三者的关系 二、JDK的概念 三、JRE的概念 四、JVM的概念 五、三者区别 一、三者的关系 从图中可以清楚地看到,他们之间的关系是JDK包含JRE, JRE又包含JVM。 因此,JDK包含JRE和JVM。 JDK JRE Java 开发工具包 [Java,Javac,Javadoc,Javap…

Python实现九宫格数独小游戏

1 问题 有1-9个数字,将他们填入一个3*3的九宫格中,使得他们的每行,每列,以及对角线上的和相等,且要求每个格子的数字不可以重复。使用python列出所有可能的组合。示例如下: 2 方法 每行,列,对角…

#pragma region用法

简介 #pragma region 是VS(Visio Studio)所特有的预处理语法(其他IDE或者Cmake会报错),其可以用来收缩或者展开一段代码。 #pragma region MyRegion// ...Code content #pragma endregion 其中,MyRegion 即给这代码块所定义的名…

【python中级】将字符串按照固定长度分割

【python中级】将字符串按照固定长度分割 1、背景2、代码1、背景 近期有将图片进行base64编码成字符串的工作,参考博客: 【python中级】 base64编码将图片数据转化为成字符串 https://jn10010537.blog.csdn.net/article/details/131894686 我将图片编码成字符串后,再写到p…

地震反演基础知识1

文章目录 地震反演基础知识11. 基础知识1.1 正演反演1.2 地震数据1.3 速度模型1.4 道1.5 FWI的端到端深度学习1.6 传统FWI vs. DL-FWI 2. 数据信息2.1 数据集的层级关系2.2 SEG盐体数据2.3 OpenFWI数据集 地震反演基础知识1 1. 基础知识 1.1 正演反演 正演 根据地下介质的参…

electron的electron-packager打包运行和electron-builder生产安装包过程,学透 Electron 自定义 Dock 图标

electron的electron-packager打包运行和electron-builder生产安装包过程 开发electron客户端程序,打包是绕不开的问题。 macOS 应用构建,看似近在咫尺,实则坑坑致命。 场景:mac笔记本打包,以及生产出可交付的软件安装…

自学网络安全(黑客)的误区

前言 网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。 一、网络安全学习的误区 1.不要…