elevation mapping学习笔记1之Ubuntu18.04+ROS-melodic编译安装elevation mapping高程图及示例运行

news2025/1/11 14:11:57

文章目录

  • 0 引言
  • 1 安装依赖
    • 1.1 grid map
    • 1.2 Eigen
    • 1.3 kindr
    • 1.4 Point Cloud Library (PCL)
  • 2 编译和问题解决
  • 3 运行示例
    • 3.1 turtlesim3_waffle_demo
    • 3.2 simple_demo 和 Ground Truth Demo

0 引言

苏黎世开源的elevation mapping指的是苏黎世联邦理工学院(ETH Zurich)开发并开源的一个数字高程模型(Digital Elevation ModelDEM)处理工具,名为elevation,它可以用于处理和分析高程数据,生成高质量的数字高程模型,支持多种高程数据格式和多种高程插值方法。如下图所示,这个高程图项目让机器人在爬楼梯等方面更加稳定。

请添加图片描述

苏黎世开源的elevation mapping工程包含两个子工程elevation_mappingelevation_mapping_demos,以下是每个子工程的简要介绍:

  • data:这个子文件夹包含了一些测试数据和示例数据,这些数据可用于测试和演示elevation mapping工具的功能和性能。

  • doc:这个子文件夹包含了elevation mapping工具的文档和说明,包括使用指南、API文档、开发者文档等等。

  • include:这个子文件夹包含了elevation mapping工具的头文件,这些头文件定义了elevation mapping工具中使用的各种数据类型、函数和类等等。

  • lib:这个子文件夹包含了elevation mapping工具所依赖的第三方库和工具,例如GDALBoostzlib等等。

  • src:这个子文件夹包含了elevation mapping工具的源代码,包括数据下载和处理模块、数据处理和分析模块、数字高程模型生成和输出模块、用户接口模块等等。

  • test:这个子文件夹包含了elevation mapping工具的测试代码和测试数据,用于测试elevation mapping工具的正确性和稳定性。

  • tools:这个子文件夹包含了一些与elevation mapping工具相关的辅助工具,例如数据转换工具、可视化工具等等。

这些子工程提供了elevation mapping库的核心功能和一些demo演示功能,使得elevation mapping工具更加完善和易于使用。

👉 elevation mapping github:https://github.com/ANYbotics/elevation_mapping
·
本文系统环境:

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

1 安装依赖

1.1 grid map

首先安装 grid map 栅格地图库:

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

1.2 Eigen

elevation mapping 工程需要线性代数库eigen

sudo apt-get install libeigen3-dev

1.3 kindr

直接源码安装即可:

git clone https://github.com/ANYbotics/kindr.git
cd kindr
mkdir build && cd build
cmake .. -DUSE_CMAKE=true
sudo make install

1.4 Point Cloud Library (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

请添加图片描述

2 编译和问题解决

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

mkdir -p ~/ele_map_ws/src
cd ~/ele_map_ws/src

git clone https://github.com/anybotics/elevation_mapping.git
git clone https://github.com/ANYbotics/kindr_ros.git

cd ..
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
catkin build

catkin build 编译后出现如下错误,kindr_ros 库的原因:

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

    kindrConfig.cmake
    kindr-config.cmake

解决办法:可以修改catkin buildcatkin_make 来进行编译

cd ~/ele_map_ws
rm -rf build devel logs
catkin_make -DCMAKE_BUILD_TYPE=Release

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

[ 94%] Linking CXX shared library ~/ele_map_ws/src/ele_map/devel/lib/libelevation_mapping_library.so
[ 94%] Built target elevation_mapping_library
Scanning dependencies of target elevation_mapping
[ 97%] Building CXX object elevation_mapping/elevation_mapping/CMakeFiles/elevation_mapping.dir/src/elevation_mapping_node.cpp.o
[100%] Linking CXX executable ~/ele_map_ws/src/ele_map/devel/lib/elevation_mapping/elevation_mapping
[100%] Built target elevation_mapping

3 运行示例

3.1 turtlesim3_waffle_demo

turtlesim3_waffle_demoelevation mapping高程图功能库利用搭载realsense仿真相机的turtlebot3仿真机器人不断运动生成高程图的示例,但首先要安装turtlebot3仿真机器人:

## 安装turtlebot3 仿真机器人库
sudo apt install ros-melodic-turtlebot3*

安装需要一段时间,安装完毕后,如下命令,启动两个终端,来演示turtlesim3_waffle_demo

# 终端1,激活环境
source ~/ele_map_ws/devel/setup.bash
roslaunch elevation_mapping_demos turtlesim3_waffle_demo.launch
# 终端2,启动并控制仿真机器人
export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

在第二个终端,用 s 键控制小车暂停,而 w a d x 分别对应控制小车前进 左转 右转 后退

启动后,发现rviz并没有生成高程图,而且发现终端1报错:

import rospkg
ModuleNotFoundError: No module named 'rospkg'

很明显是缺少rospkg库,直接执行pip install rospkg 安装,但是确定已经安装了,还是出现这个问题;
思考片刻后,针对python3,也安装rospkg,直接执行pip3 install rospkg 安装,这次安装后,问题不再出现。

重新启动后,又出现新的问题:

"~/ele_map_ws/src/elevation_mapping/elevation_mapping_demos/scripts/tf_to_pose_publisher.py", line 5, in <module>
    import tf
  File "/opt/ros/melodic/lib/python2.7/dist-packages/tf/__init__.py", line 30, in <module>
    from tf2_ros import TransformException as Exception, ConnectivityException, LookupException, ExtrapolationException
  File "/opt/ros/melodic/lib/python2.7/dist-packages/tf2_ros/__init__.py", line 38, in <module>
    from tf2_py import *
  File "/opt/ros/melodic/lib/python2.7/dist-packages/tf2_py/__init__.py", line 38, in <module>
    from ._tf2 import *
ImportError: dynamic module does not define module export function (PyInit__tf2)

...

[ERROR] [1690378396.561700432, 1.420000000]: Could not get pose information from robot for time 0.273000. Buffer empty?
[ERROR] [1690378414.259410433, 18.109000000]: Could not get pose information from robot for time 17.450000. Buffer empty?
...

可以定位到是由于~/ele_map_ws/src/elevation_mapping/elevation_mapping_demos/scripts/tf_to_pose_publisher.pypython脚本出现的问题,再联想上一个问题,针对python3,安装pip3 install rospkg才解决问题,打开tf_to_pose_publisher.py脚本,发现默认用的是python3,但ROS melodic默认用的是python2,而Ubuntu20.04ROS noetic默认用的是python3

所以直接修改/tf_to_pose_publisher.py脚本中的第一行#!/usr/bin/env python3#!/usr/bin/env python2.

重新启动后,问题成功解决;

如下所示在rviz中即可看到控制的小车在运动,仿真realsense相机朝前方实时画面,右边在运动到走道附近也会生成elevation mapping高程图:

请添加图片描述

3.2 simple_demo 和 Ground Truth Demo

Ground Truth Demoelevation mapping高程图功能的真值示例演示,但首先要编译point_cloud_io库:

cd ~/ele_map_ws/src 
git clone https://github.com/ANYbotics/point_cloud_io.git
cd .. 
catkin_make -DCMAKE_BUILD_TYPE=Release

编译时point_cloud_io遇到新问题:

~/ele_map_ws/src/point_cloud_io/src/Read.cpp:11:10: fatal error: filesystem: No such file or directory

解决办法:
首先修改~/ele_map_ws/src/point_cloud_io/src/Read.cpp文件:

// 修改1: #include <filesystem> 替换成 #include <experimental/filesystem>
// #include <filesystem>
#include <experimental/filesystem>

// 修改2:两处std::filesystem 替换成 std::experimental::filesystem
bool Read::readFile(const std::string& filePath, const std::string& pointCloudFrameId) {
  // if (std::filesystem::path(filePath).extension() == ".ply") {
  if (std::experimental::filesystem::path(filePath).extension() == ".ply") {
    // Load .ply file.
    pcl::PointCloud<pcl::PointXYZRGBNormal> pointCloud;
    if (pcl::io::loadPLYFile(filePath, pointCloud) != 0) {
      return false;
    }

    // Define PointCloud2 message.
    pcl::toROSMsg(pointCloud, *pointCloudMessage_);
  }
#ifdef HAVE_VTK
  // else if (std::filesystem::path(filePath).extension() == ".vtk") {
  else if (std::experimental::filesystem::path(filePath).extension() == ".vtk") {
    // Load .vtk file.
    pcl::PolygonMesh polygonMesh;
    pcl::io::loadPolygonFileVTK(filePath, polygonMesh);

CMakeLists.txt 中添加-lstdc++fs


target_link_libraries(read
  ${catkin_LIBRARIES}
  -lstdc++fs
)

重新编译不再报错,编译完成后,如下,启动两个终端,来演示simple_demoGround Truth Demo

# 终端1,激活环境
source ~/ele_map_ws/devel/setup.bash
roslaunch elevation_mapping_demos simple_demo.launch

或者Ground Truth Demo

# 终端2,激活环境
source ~/ele_map_ws/devel/setup.bash
roslaunch elevation_mapping_demos ground_truth_demo.launch

启动后,都提示 [ WARN] [1690391331.761879154] : Parameter 'point_cloud_topic' is deprecated, please use 'input_sources' instead的问题,其实就是配置文件中的点云topic需要更改成数据中的点云topic,手边暂时没数据就不试了,后续有空再补。
simple_demoGround Truth Demo分别在以下两个文件中修改:

  • ~/ele_map_ws/src/elevation_mapping/elevation_mapping_demos/config/robots/simple_demo_robot.yaml
  • ~/ele_map_ws/src/elevation_mapping/elevation_mapping_demos/config/robots/ground_truth_demo.yaml

请添加图片描述

至此,成功编译安装elevation mapping高程图,并安装turtlebot3机器人仿真库,搭配turtlebot3机器人运行示例熟悉elevation mapping,同时也熟悉了一个Ground Truth Demo,进一步熟悉elevation mapping.


Reference:

  • https://github.com/ANYbotics/elevation_mapping
  • https://blog.csdn.net/BIT_HXZ/article/details/127297351



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



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

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

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

相关文章

TypeScript -- 类

文章目录 TypeScript -- 类TS -- 类的概念创建一个简单的ts类继承 public / private / protected-- 公共/私有/受保护的public -- 公共private -- 私有的protected -- 受保护的 其他特性readonly -- 只读属性静态属性 -- static修饰ts的getter /setter抽象类abstract TypeScrip…

【ArcGIS Pro二次开发】(53):村规制表、制图【福建省】

这篇算是村规入库的一个延续。 村庄规划中有一些图纸是需要严格按照规范制图&#xff0c;或形成一定规范格式的。 这些图纸的制作基本算是机械式的工作&#xff0c;可以用工具来代替人工。 一、要实现的功能 如上图所示&#xff0c;在【村庄规划】组&#xff0c;新增了两个工…

虚拟机中的win10连不上网怎么办?

安装VMware 16和在其中安装win10系统参考这篇&#xff0c;很有详细且有用。 这篇主要记录我安装后发现虚拟机中win10连不上网了&#xff0c;查了好多&#xff0c;终于有一个方法弄好了。 1.打开主机的网络连接 双击所连接的网络的属性——>共享 &#xff0c;将小勾勾全部勾…

UE5 动画蓝图模板(Animation Blueprint Template)

文章目录 前言准备内容创建动画蓝图使用动画蓝图模板示例1示例2总结前言 本文基于虚幻5.2版本介绍制作动画蓝图模板,本教程要求使用虚幻5.0及以上版本。 准备内容 使用第三人称游戏内容包,已添加可忽略。 选择第三人称游戏,添加到项目。 创建动画蓝图 在 Characters 文件…

前端vue2 全局水印效果

最近写项目遇到一个需求&#xff0c;全局显示水印&#xff0c;不管在哪个路由都要显示。 想要实现的效果&#xff1a; 新建shuiyin.js文件 // 定义水印函数 const addWatermark ({container document.body, // 水印添加到的容器&#xff0c;默认为 bodywidth "200px&…

java代码审计6之ssrf

文章目录 1、java支持的网络请求协议&#xff1a;2、Java 中能发起⽹络请求的类2.1、仅⽀持 HTTP/HTTPS 协议的类2.2、⽀持 sun.net.www.protocol 所有协议的类2.3、审计关键词 3、靶场3.1、漏洞代码13.2、ftp协议读取技巧3.3、无回显之探测内网3.4、无回显之探测文件 之前的文…

代码随想录额外题目| 链表 ●234回文链表●143重排链表 ●141环形链表

#234回文链表 简单方法很简单&#xff08;转成vector判断&#xff09;&#xff0c;难的方法有点难, 很巧妙 简单方法&#xff1a; bool isPalindrome(ListNode* head) {vector<int> vec;ListNode* curhead;while(cur){vec.push_back(cur->val);curcur->next;}i…

Window和linux使用samba实现文件共享

开发环境 开发平台&#xff1a;IMX6 虚拟机环境&#xff1a;Ubuntu16.04 Samba版本&#xff1a;3.4.17 目的 实现无论IMX6作为客户端还是服务端&#xff0c;IMX6系统下与window系统、ubuntu系统文件共享。 Samba移植 下载Samba源码,这个网上一搜大把&#xff0c;我用的版本…

C++ | 构造与析构

目录 普通构造 构造函数基础 显示调用与隐式调用 explicit关键字 初始化列表 拷贝构造 拷贝构造的写法 深拷贝和浅拷贝 拷贝构造的调用时机 返回值优化 析构函数 析构函数基础 析构函数的作用 注意事项 如果无法调用构造函数&#xff0c;那么就无法实例化出对象…

python进阶书籍的推荐 知乎,python入门后如何进阶

本篇文章给大家谈谈python进阶书籍的推荐 知乎&#xff0c;以及python入门后如何进阶&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 1、Python应该怎么学_python应该怎么学 想要学习Python&#xff0c;需要掌握的内容还是比较多的&#xff0c;对于自学的同…

java设计模式之模板模式(结合示例)

文章目录 &#x1f4cb;模板模式概念&#x1f4d6;组成要素&#x1f516;代码示例 &#x1f4c8;总结 &#x1f4cb;模板模式概念 在Java中&#xff0c;模板模式&#xff08;Template Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个操作中的算法框架&#xf…

Unity游戏源码分享-街机捕鱼2017版本

Unity游戏源码分享-街机捕鱼2017版本 完整的单机游戏 功能玩法&#xff0c;积分系统都已经齐全的了。 项目源码地址&#xff1a;https://download.csdn.net/download/Highning0007/88105459

音视频——帧内预测

H264编码(帧内预测) 在帧内预测模式中&#xff0c;预测块P是基于已编码重建块和当前块形成的。对亮度像素而言&#xff0c;P块用于44子块或者1616宏块的相关操作。44亮度子块有9种可选预测模式&#xff0c;独立预测每一个44亮度子块&#xff0c;适用于带有大量细节的图像编码&…

C语言中的函数(超详细)

C语言中的函数&#xff08;超详细&#xff09; 一、函数概述二、C语言中函数的分类1.库函数2.自定义函数三、函数的参数1.实际参数&#xff08;实参&#xff09;2.形式参数&#xff08;形参&#xff09;四、函数的调用1.传值调用2.传址调用五、函数的嵌套调用和链式访问1.嵌套调…

【手机】三星手机刷机解决SecSetupWizard已停止

三星手机恢复出厂设置之后&#xff0c;出现SecSetupWizard已停止的解决方案 零、问题 我手上有一部同学给的三星 GT-S6812I&#xff0c;这几天搞了张新卡&#xff0c;多余出的卡就放到这个手机上玩去了。因为是获取了root权限的&#xff08;直接使用KingRoot就可以&#xff0…

C++ 提高编程

C 提高编程 主要针对C泛型编程和STL技术 一、 模板 1、 概念 模板就是建立通用的模具&#xff0c;大大提高代码的复用性 模板特点 模板不可以直接使用&#xff0c;它只是一个框架 ​ 模板的通用并不是万能的 2、 函数模板 C 另一种编程思想为泛型编程&#xff0c;主要利用的…

ChatGPT如何帮助学生学习

​ 一些教育工作者担心学生可能使用ChatGPT作弊。因为这个AI工具能写报告和计算机代码&#xff0c;画出复杂图表……甚至已经有许多学校把ChatGPT屏蔽。 研究发现&#xff0c;学生作弊的主要原因是想考得好。是否作弊与作业和考试的打分方式有关&#xff0c;所以这与技术的便…

浅谈前端跨平台框架

概述 前端跨端实践是指在开发过程中&#xff0c;使用统一的代码库或框架来实现在不同平台上运行的应用程序。 这种实践旨在减少重复开发和维护成本&#xff0c;并提高开发效率和用户体验。 以下是一些前端跨端实践的方法和技术&#xff1a; 响应式设计&#xff08;Responsiv…

0-虚拟机补充知识

虚拟机克隆 如果想要构建服务器集群&#xff0c;没有必要一台一台的去进行安装&#xff0c;只要通过克隆就可以。 快速获得多台服务器主要有两种方式&#xff0c;分别为&#xff1a;直接拷贝操作和vmware的克隆操作 直接拷贝 将之前安装虚拟机的所有文件进行拷贝&#xff0…

聊聊单片机编程测量电机的电流

要测量电机的电流&#xff0c;可以使用电流传感器来实现。常见的电流传感器有霍尔效应传感器和电阻式传感器。 在单片机编程中&#xff0c;可以通过 ADC&#xff08;模拟数字转换器&#xff09;模块来实现对电流传感器输出电压的采样和转换。下面是一个简单的步骤&#xff1a;…