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

文章目录

  • 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" withany of the following names:costmap_2dConfig.cmakecostmap_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_DEPENDENCIESgrid_map_coregrid_map_msgsgrid_map_rospcl_rosroscpp
)# 新增这行,使用系统安装的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.mzph.cn/news/7858.shtml

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

相关文章

labview 多线程同步

所谓通讯的同步是指多个线程同时进行或严格按照顺序执行,数据的严格性是指发送多少数据接收多少数据,不能出现数据丢失或重复接收的现象。 labview的同步机制有事件发生、集合点、通知器、信号量。 可以这么来记忆:事急(集&…

JavaScript |(一)JavaScript简介及基本语法 | 尚硅谷JavaScript基础实战

学习来源:尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 文章目录 📚JavaScript简介🐇 实现🐇JavaScript的特点 📚基本知识🐇编写位置🔥方式一:在标签中写(不推…

【超全面】Linux嵌入式干货学习系列教程

文章目录 一、前言二、Linux基础篇三、数据结构与算法基础三、Linux应用篇四、Linux网络篇五、ARM篇六、Linux系统移植篇七、Linux驱动篇八、Linux特别篇九、Linux项目篇 一、前言 博主学习Linux也有几个月了,在这里为广大朋友整理出嵌入式linux的学习知识&#xff…

zookeeper-3.7.1集群

1.下载&解压安装包apache-zookeeper-3.7.1-bin.tar.gz 解压到/app/ &改名zookeeper-3.7.1 [rootnode1 app]# tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C /app/ [rootnode1 app]# mv apache-zookeeper-3.7.1-bin zookeeper-3.7.1 ---- 删除docs [rootnode1…

【2023裸辞失业后之初学RocketMQ】

目录 RocketMQ概述MQ概述常见的MQ产品常见的协议 Rocket的安装和启动基本概念系统架构安装RocketMQ和控制台 RocketMQ概述 MQ概述 Message Queue:是提供消息队列服务的中间件,提供消息生产,存储,消费的全过程。 作用&#xff1a…

矩阵svd分解和矩阵的伪逆

真该好好学习一下Latex数学公式的语法和规则了,否则,连写个博客都没法写,这叫什么事! https://blog.csdn.net/ViatorSun/article/details/82826664 直接上数学博士写的ppt图(肯定比我在这里胡说八道强的多&#xff0…

css - Media Query

使用bootstrap的grid system可以在一个较为粗糙的范围得到较好的响应性,但是通过viewport可以看到网站在具体哪个像素点处变得丑陋,再通过css media query来精细调整网页布局。 可以通过media query来提高网页移动响应能力。

四、运算符(2)

本章概要 关系运算符 测试对象等价 逻辑运算符 短路 字面值常量 下划线指数计数法 位运算符 关系运算符 关系运算符会通过产生一个布尔(boolean)结果来表示操作数之间的关系。如果关系为真,则结果为 true,如果关系为假&#xf…

SpringBoot日志文件

1.日志有什么用? 日志是程序的重要组成部分,如果程序报错,我们可以通过日志发现和定位问题,同样日志也可以实现以下的功能: 记录用户登录日志,方便分析用户是否是正常登录还是恶意破解用户;记…

使用 OpenCV 和 GrabCut 算法进行交互式背景去除

一、说明 我想,任何人都可以尝试从图像中删除背景。当然,有大量可用的软件或工具能够做到这一点,但其中一些可能很昂贵。但是,我知道有人使用窗口绘画3D魔术选择或PowerPoint背景去除来删除背景。 如果您是计算机视觉领域的初学者…

network failed to load response data: no resource with given ide...

Chrome 开发者工具无法显示服务器正常返回的 HTTP 请求 - Failed to load response data 今天做开发时遇到一个问题,Chrome 开发者工具 network 标签里,虽然一个 HTTP 请求已经成功从服务器端返回,但是 Chrome 开发者工具里,仍然…

ArcGIS Engine 与 Visual Studio版本对照表

通过C#对于Arcgis的二次开发,需要Visual Studio版本需要与ArcGIS Engine对应,Visual Studio版本的或高或低都不能使ArcObjects SDK for microsoft.Net framework安装成功。下面是各个版本的对照表。 序号ArcEngine版本visual Studio版本Network版本110.…

Spring 的创建和使用

Spring 就是一个包含了众多工具方法的 IoC 容器。既然是容器那么它就具备两个最基本的功能 将对象存储到容器(Spring)中; 从容器中将对象取出来 在 Java 语言中对象也叫做 Bean,所以后面咱们再遇到对象就以 Bean 著称 一、创建 …

实训笔记7.25

实训笔记7.25 7.25笔记一、MapReduce的特殊使用场景1.1 通过MapReduce程序实现多文件Join操作1.1.1 通过在Reduce端实现join操作1.1.2 通过在Map端实现join操作 1.2 MapReduce中的计数器的使用1.2.1 计数器使用两种方式 1.3 MapReduce实现数据清洗 二、MapReduce的OutputFormat…

Linux笔记——搜索命令find、解压缩命令、vi编辑器、用户权限命令、系统信息相关命令讲解

系列文章目录 Linux笔记——磁盘进行分区与挂载介绍 Linux笔记——管道相关命令以及shell编程 Linux笔记——进程管理与网络监控技术讲解​​​​​​ Linux笔记——rpm与yum下载软件命令介绍 文章目录 系列文章目录 准备工作 一 搜索命令—— find 搜索 1.1 目标 1.…

html input 展示隐藏的密码

<!DOCTYPE html> <html> <meta http-equiv"Content-Type" content"text/html;charsetutf-8"/> <body><h2>登录表格</h2><form action"/action_page.php"><div class"container"><…

chrome查看浏览器内核日志

由于经常在网页上调试播放音视频&#xff0c;但是总遇到一些未知原因&#xff0c;导致无法正常播放&#xff0c;亟需查看浏览器内核日志&#xff0c;分析原因&#xff0c;做一下笔记。 (1) 查看浏览器快捷键属性 &#xff08;2&#xff09;在快捷键启动位置补充参数 --enable-…

菜鸡shader:L12 SD处理贴图制作时钟动画

文章目录 SD处理贴图Shader代码C#代码最后效果 SD处理贴图 呃呃感觉这节课&#xff0c;很大一部分都是在将怎么用SD来处理贴图&#xff0c;在这里就简单放一下课上的截图吧&#xff0c;我也跟着做了一下&#xff0c;虽然表盘十二个数排列间隔不一样&#xff0c;但还是稀碎地做…

脉冲频率、转速相关计算(信捷PLC C语言FC编程应用)

转速、线速度、角速度转换和计算关系请查看下面文章链接: 转速/线速度/角速度计算FC_RXXW_Dor的博客-CSDN博客里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力控制相关应用和算法,关于绕线机的绕线算法,大家可以参看…

12.Netty源码之整体架构脉络

Netty 整体架构脉络 Netty 的逻辑处理架构为典型网络分层架构设计&#xff0c;共分为网络通信层、事件调度层、服务编排层&#xff0c;每一层各司其职。 网络通信层 网络通信层的职责是执行网络 I/O 的操作。它支持多种网络协议和 I/O 模型的连接操作。当网络数据读取到内核缓冲…