ubuntu18.04 编译HBA 并实例运行

news2025/1/12 16:17:43

HBA是一个激光点云层级式的全局优化的程序,他的论文题目是:HBA: A Globally Consistent and Efficient Large-Scale LiDAR Mapping Module,对应的github地址是:HKU-Mars-Lab · GitHub

学习本博客,可以学到gtsam安装,cmake高版本安装,ceres2.2.0的安装,以及一个HBA编译问题的解决,最后把HBA给编译成功.

(0)当遇到libqwayland-egl.so 文件不存在的问题

当遇到这个问题的时候:

The imported target "Qt5::Gui" references the file

"/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqwayland-egl.so"

but this file does not exist.

文件夹中不存在 libqwayland-egl.so 这个库文件,执行下面语句就可以消除该错误:

sudo apt install qtwayland5

(1)安装gtsam

1.首先安装 依赖

sudo apt-get install libtbb-dev
sudo apt-get install libeigen3-dev

2.然后下载源代码

git clone https://bitbucket.org/gtborg/gtsam.git

3.编译安装

cd gtsam
mkdir build && cd build
cmake ..
make
sudo make install 

(2)安装cmake 大于3.10版本

安装ceres的时候,必须要求cmake在3.16-3.28之间,但是ros的cmake是3.10版本,因此需要单独安装cmake。参考网上教程可以发现,很多cmake安装 的第一行命令中,有autoremove,这是一个天坑安装cmake的方法,因为它会直接把ros给卸载了。

正确的安装方法如下:

1.下载cmake-3.18.5.tar.gz

Index of /files/v3.18

2. 解压并进入目录中

tar -xf cmake-3.18.5.tar.gz
cd cmake-3.18.5/

3.执行配置、编译和安装命令

./configure --prefix=/usr/local/cmake
make 
sudo make install

5.设置软连接

ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake

如果执行上述命令报“ln: failed to create symbolic link ‘/usr/bin/cmake’: File exists”错误,显示已有软连接(‘/usr/bin/cmake’),则执行如下命令删除软链接(软连接’/usr/bin/cmake’仅为示例,请用户以实际情况为准):

rm -rf /usr/bin/cmake

6.检查cmake的版本

cmake --version

详细可参考 :ubuntu18.04安装cmake3.12.0步骤_ubuntu安装cmake3.12-CSDN博客

(3)安装ceres2.2.0

1.下载

GitHub - ceres-solver/ceres-solver: A large scale non-linear optimization library

2.安装官网教程

官网:Installation — Ceres Solver

2.1首先配置环境

sudo apt-get install libgoogle-glog-dev libgflags-dev
# Use ATLAS for BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# Eigen3
sudo apt-get install libeigen3-dev
# SuiteSparse (optional)
sudo apt-get install libsuitesparse-dev

2.2然后构建和编译以及安装

tar zxf ceres-solver-2.2.0.tar.gz
mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver-2.2.0
make -j3
make test
# Optionally install Ceres, it can also be exported using CMake which
# allows Ceres to be used without requiring installation, see the documentation
# for the EXPORT_BUILD_DIR option for more information.
make install

2.3最后可以用一个例子进行测试

bin/simple_bundle_adjuster ../ceres-solver-2.2.0/data/problem-16-22106-pre.txt

这样就安装好了ceres2.2.0

(4)解决编译问题typedef struct LZ4_stream_t LZ4_stream_t’

在ceres也通过编译之后,会遇到:

/usr/include/lz4.h:196:57: error: conflicting declaration ‘typedef struct LZ4_stream_t LZ4_stream_t’

这时候使用

sudo mv /usr/include/flann/ext/lz4.h /usr/include/flann/ext/lz4.h.bak
sudo mv /usr/include/flann/ext/lz4hc.h /usr/include/flann/ext/lz4hc.h.bak
 
sudo ln -s /usr/include/lz4.h /usr/include/flann/ext/lz4.h
sudo ln -s /usr/include/lz4hc.h /usr/include/flann/ext/lz4hc.h

(5)编译HBA程序

然后进入HBA的ws环境,进行catkin_make就可以编译成功.

(6)HBA运行park数据

1.下载数据和了解数据格式

首先下载github HBA工程中,提供的park和kitt7数据,加起来大约2G。

然后解压。以park数据为例子,目录结构是:

park

         -pcd

                 -0.pcd

                 -1.pcd

          -pose.json

其中pose.json中,每一行是按照 tx ty tz qw qx qy qz来排列的。

2.修改hba.launch的文件中对应的参数

要想使用hba进行优化,首先需要修改hba.launch文件中的文件夹路径和文件名的控制值

<launch>
  <node pkg="hba" type="hba" name="hba" output="screen">
    <param name="data_path" type="string" value="/home/zhu/park/"/>
    <param name="total_layer_num" type="int" value="3"/>
    <param name="pcd_name_fill_num" type="int" value="0"/> <!--set 5 for kitti07 and 0 for park-->
    <param name="thread_num" type="int" value="16"/>
  </node>

  <arg name="rviz" default="0"/>
  <group if="$(arg rviz)">
    <node launch-prefix="nice" pkg="rviz" type="rviz" name="rviz"
    args="-d $(find hba)/rviz_cfg/rosbag.rviz" />
  </group>
</launch>

注意:

1.修改:data_path 就是park数据集的文件根目录, 在这里我的路径是/home/zhu/park/,

2.修改:pcd_name_fill_num 的value设置为0,表示没有格式控制,否则需要提供00000.pcd这样的命名格式。

3.修改visualize.launch中的参数的值

同样的也对visualize.launch 这两个位置进行修改。

<launch>
  <node pkg="hba" type="visualize_map" name="visualize_map" output="screen">
    <param name="file_path" type="string"
      value="/home/zhu/park/"/>
    <param name="downsample_size" type="double" value="0.1"/>
    <param name="pcd_name_fill_num" type="int" value="0"/> <!--set 5 for kitti07 and 0 for park-->
    <param name="marker_size" type="double" value="0.5"/>
  </node>

  <arg name="rviz" default="1"/>
  <group if="$(arg rviz)">
    <node launch-prefix="nice" pkg="rviz" type="rviz" name="rviz"
    args="-d $(find hba)/rviz_cfg/rosbag.rviz" />
  </group>
</launch>

3.开始进行hba优化

roslaunch hba hba.launch

执行情况如下图:

执行结果最终保存出来了优化后的位姿,从截图上可以看出优化了3407个位姿。值得注意的是,执行完后,它写出的pose.json把park数据集目录下的pose.json给覆盖了,这有点猝不及防。

4.显示出来

roslaunch hba visualize.launch

就是把park数据集,按照优化后的pose.json中的位姿和 pcd中的文件,按照visualize.launch中的分辨率进行降采样,然后显示出来。

最后显示的结果是:

可以看到,周围的建筑物边缘对的并不齐,所以HBA还是有优化改进的空间。

显示路径

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

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

相关文章

6.S081的Lab学习——Lab8: locks

文章目录 前言一、Memory allocator(moderate)提示&#xff1a;解析 二、Buffer cache(hard)解析&#xff1a; 三、Barrier (moderate)解析&#xff1a; 总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招。打算尝试6.S081&#xff0c;将它的Lab逐一实现&#xff0c;并…

[数据集][目标检测]药片药丸检测数据集VOC+YOLO格式152张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;152 标注数量(xml文件个数)&#xff1a;152 标注数量(txt文件个数)&#xff1a;152 标注类别…

Django 模版过滤器

Django模版过滤器是一个非常有用的功能&#xff0c;它允许我们在模版中处理数据。过滤器看起来像这样&#xff1a;{{ name|lower }}&#xff0c;这将把变量name的值转换为小写。 1&#xff0c;创建应用 python manage.py startapp app5 2&#xff0c;注册应用 Test/Test/sett…

ic基础|功耗篇03:ic设计人员如何在代码中降低功耗?一文带你了解行为级以及RTL级低功耗技术

大家好&#xff0c;我是数字小熊饼干&#xff0c;一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结&#xff0c;并通过汇总成文章的形式进行输出&#xff0c;相信无论你是在职的还是…

【计算机网络篇】数据链路层(13)共享式以太网与交换式以太网的对比

文章目录 &#x1f354;共享式以太网与交换式以太网的对比&#x1f50e;主机发送单播帧的情况&#x1f50e;主机发送广播帧的情况&#x1f50e;多对主机同时通信 &#x1f6f8;使用集线器和交换机扩展共享式以太网的区别 &#x1f354;共享式以太网与交换式以太网的对比 下图是…

基于STM32的智能家居安防系统

目录 引言环境准备智能家居安防系统基础代码实现&#xff1a;实现智能家居安防系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;智能家居安防管理与优化问题解决方案与优化收尾与总结 1. 引言 智能家居安防系统通过使…

使用J-Link Commander查找STM32死机问题

接口:PA13,PA14&#xff0c;请勿连接复位引脚。 输入usb命令这里我已经连接过了STM32F407VET6了。 再输入connect命令这里我已经默认选择了SWD接口&#xff0c;4000K速率。 可以输入speed 4000命令选择4000K速率: 写一段崩溃代码进行测试: void CashCode(void){*((volatil…

springboot+vue+mybatis旅游管理+PPT+论文+讲解+售后

随着人民生活水平的提高,旅游业已经越来越大众化,而旅游业的核心是信息,不论是对旅游管理部门、对旅游企业,或是对旅游者而言,有效的获取旅游信息,都显得特别重要.旅游管理系统将使旅游相关信息管理工作规范化、信息化、程序化,提供旅游景点、旅游线路,旅游新闻等服务本文以jsp…

笔记本更换固态,保留数据,无需重装系统和软件

一、问题描述&#xff1a; 原有一块128GB的固态硬盘作为c盘使用&#xff0c;由于工作学习需要&#xff0c;经常跑虚拟机&#xff0c;现在需要升级容量。 二、解决思路&#xff1a; 硬件 购买一款大容量的固态硬盘 不同的容量有不同的价格&#xff0c;这个根据预算和实际需要来…

【C#】使用数字和时间方法ToString()格式化输出字符串显示

在C#编程项目开发中&#xff0c;几乎所有对象都有格式化字符串方法&#xff0c;其中常见的是数字和时间的格式化输出多少不一样&#xff0c;按实际需要而定吧&#xff0c;现记录如下&#xff0c;以后会用得上。 文章目录 数字格式化时间格式化 数字格式化 例如&#xff0c;保留…

Python 虚拟环境 requirements.txt 文件生成 ;pipenv导出pip安装文件

搜索关键词: Python 虚拟环境Pipenv requirements.txt 文件生成;Pipenv 导出 pip requirements.txt安装文件 本文基于python版本 >3.9 文章内容有效日期2023年01月开始(因为此方法从这个时间开始是完全ok的) 上述为pipenv的演示版本 使用以下命令可精准生成requirement…

【windows解压】解压文件名乱码

windows解压&#xff0c;文件名乱码但内容正常。 我也不知道什么时候设置出的问题。。。换了解压工具也没用&#xff0c;后来是这样解决的。 目录 1.环境和工具 2.打开【控制面板】 3.点击【时钟和区域】 4.选择【区域】 5.【管理】中【更改系统区域设置】 6.选择并确定…

python - 变量和字符串

一.变量 变量名就像我们现实社会的名字&#xff0c;把一个值赋值给一个名字时&#xff0c;Ta会存储在内存中&#xff0c;称之为变量&#xff08;variable&#xff09;&#xff0c;在大多数语言中&#xff0c;都把这种行为称为“给变量赋值”或“把值存储在变量中”。 •不过P…

【C++算法】——高精度(加,减,乘,除)

前言 高精度算法就是为了去解决一些比较大的数&#xff0c;这些数大到long long都存不下。&#xff0c;这里的主要思想就是用字符串来存。 下面的内容有很多用到c的容器&#xff0c;不明白的可以先去学习stl。 一 高精度加法 首先第一步就是去模拟我们自己写的加法&#xff…

全面理解-Flutter(万字长文,深度解析)

1、Web 性能差&#xff0c;跟原生 App 存在肉眼可见的差距&#xff1b; 2、React Native 跟 Web 相比&#xff0c;支持的能力非常有限&#xff0c;特定长场景问题&#xff0c;需要三端团队一个一个处理&#xff1b; 3、Web 浏览器的安卓碎片化严重&#xff08;感谢 X5&#x…

Java内存泄漏检测和分析介绍

在Java中&#xff0c;内存泄漏检测和分析是一个重要的任务&#xff0c;可以通过以下几种方式进行&#xff1a; 1. 使用VisualVM VisualVM是一个可视化工具&#xff0c;可以监控、分析Java应用程序的内存消耗。它可以显示堆内存、垃圾收集、线程等信息&#xff0c;并且可以对内…

两个基因相关性细胞系(CCLE)(升级)

目录 单基因CCLE数据 ①细胞系转录组CCLE数据下载 ②单基因泛癌表达 CCLE两个基因相关性 ①进行数据整理 ②相关性分析 单基因CCLE数据 ①细胞系转录组CCLE数据下载 基因在各个细胞系表达情况_ccle expression 23q4-CSDN博客 rm(list = ls()) library(tidyverse) libra…

体验了一下AI生产3D模型有感

我的实验路子是想试试能不能帮我建一下实物模型 SO 我选择了一个成都环球中心的网图 但是生成的结果掺不忍睹&#xff0c;但是看demo来看&#xff0c;似乎如果你能给出一张干净的提示图片&#xff0c;他还是能做出一些东西的 这里我延申的思考是这个物体他如果没看过背面&…

43 mysql insert select 的实现

前言 我们这里 来探讨一下 insert into $fields select $fields from $table; 的相关实现, 然后 大致来看一下 为什么 他能这么快 按照 我的思考, 应该里里面有 批量插入才对, 但是 调试结果 发现令我有一些意外 呵呵 果然 只有调试才是唯一的真理 测试数据表如下 CREATE…