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

本文主要是介绍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,即可看到一张在表面差值后的栅格地图:

请添加图片描述
用户可以在文件中使用不同的世界(表面)和不同的插值设置interpolation_demo.yaml.
可视化以绿色和黄色显示地面实况,插值结果以红色和紫色显示。
此外,该演示还计算最大和平均插值误差,以及单个插值查询所需的平均时间。

网格地图具有四种不同的插值方法(按照精度增加和复杂性增加的顺序):

  • NN - 最近邻(最快,但最不准确);
  • 线性- 线性插值;
  • 三次卷积- 分段三次插值。使用三次卷积算法实现;
  • Cubic - 三次插值(最慢,但最准确)。

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


Reference:

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



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



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

这篇关于grid map算法1之Ubuntu18.04+ROS-melodic编译安装grid_map栅格地图及示例运行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/163690

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Win安装MySQL8全过程

《Win安装MySQL8全过程》:本文主要介绍Win安装MySQL8全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Win安装mysql81、下载MySQL2、解压文件3、新建文件夹data,用于保存数据库数据文件4、在mysql根目录下新建文件my.ini

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http