ubuntu18.04 编译HBA 并实例运行

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.baksudo 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.mzph.cn/bicheng/32814.shtml

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

相关文章

提升Python技能的七个函数式编程技巧

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 递归📝 结构化模式匹配📝 不变性📝 纯函数📝 高阶函数📝 函数组合📝 惰性求值⚓️ 相关链接 ⚓️📖 介绍 📖 在现代编程中,虽然Python并不是一门纯粹的函数式编程语言,但函数式编程(Funct…

Linux C/C++ socket函数

目录 socket函数 函数原型 头文件 功能 返回值 参数 错误码 socket函数 函数原型 int socket(int domain, int type, int protocol); 头文件 #include <sys/types.h> #include <sys/socket.h> 功能 创建一个用于通信的端点&#xff0c;并返回一个文件描述符…

登录安全分析报告:链家地产

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

半导体行业物料如何管理精确的一些思路

半导体行业的物料具有一些独特的特点,这些特点对物料管理和生产线的运作提出了特殊的要求: 一、半导体物料的特点: 1. 高价值:半导体物料往往成本高昂,因此需要严格的库存控制以避免资金占用过多。 2. 技术规格严格:物料的技术规格非常精确,任何偏差都可能影响最终产品的…

分布式压测

JMeter分布式压测&#xff08;保姆教学&#xff09; 一台控制机&#xff0c;两台执行机 台机器需安装相同版本的jdk和jmeter&#xff08;JDK1.8&#xff09; jdk安装和配置 jdk下载地址 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht…

刷题——二叉树的前序遍历

二叉树的前序遍历_牛客题霸_牛客网 双指针法&#xff1a; /*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/ class Solution { public:/*** 代码中的类名、方法名、参…

c89、c99、c11

C99 标准开始引入了 // 单行注释。在此之前&#xff0c;C语言只支持 /* ... */ 多行注释。 具体说明&#xff1a; // 单行注释&#xff1a;在C99标准&#xff08;ISO/IEC 9899:1999&#xff09;引入之前&#xff0c;C语言中没有单行注释。C99标准借鉴了C的注释风格&#xff0…

如何在Java中进行单元测试?

如何在Java中进行单元测试&#xff1f; 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Java中进行单元测试&#xff0c;这是一项确保代码质…

力扣刷题 杨辉三角(使用c++ vector解法)

杨辉三角 题目描述示例1示例2提示:代码 题目描述 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例1 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例2 …

上位机图像处理和嵌入式模块部署(mcu和swd接口)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 最近学习mcu的时候&#xff0c;接触了不少调试器&#xff0c;这里面有daplink、st-link v2、j-link v9。虽然模块的形状可能不太一样&#xff0c;但…

基于I2C协议的AHT20温湿度传感器的数据采集

一、I2C总线通信协议 软件I2C 软件I2C&#xff0c;也称为模拟I2C或bit-bang I2C&#xff0c;是一种通过微控制器的通用输入输出&#xff08;GPIO&#xff09;引脚来模拟I2C总线通信的方式。它不依赖于专门的硬件I2C接口&#xff0c;而是通过编程控制GPIO引脚的电平状态来实现I…

快去复习吧+++常用算法及参考算法 递推法++穷举法++排序(冒泡、选择)++查找(顺序、折半)++字符串处理++方程求根++无穷级数求和

接上&#xff1a;常用算法及参考算法 &#xff08;1&#xff09;累加 &#xff08;2&#xff09;累乘 &#xff08;3&#xff09;素数 &#xff08;4&#xff09;最大公约数 &#xff08;5&#xff09;最值问题 &#xff08;6&#xff09;迭代法 常用算法及参考算法 7. 递推法…

如何解决Mac电脑不显示以.开头的文件?

Mac电脑默认是不显示以.开头的文件的&#xff0c;今天我一个朋友第一次编译一个vite的项目时&#xff0c;编译成功后发现API的网址都是http://localhost:48080开头&#xff0c;然后跟我吐槽说这个项目有毛病吧&#xff1f;我心想这明显就是没有设置VITE_BASE_URL啊&#xff1f;…

Vue-观察器(watch)的定义方式引发组件初始值没有渲染成功问题(已解决)

问题描述&#xff1a;在测试环境发现一个问题&#xff0c;打开一张表单的时候&#xff0c;所有字段都成功赋上了值&#xff0c;唯独一个人员组件的值&#xff08;出差人员&#xff09;没有带出&#xff0c;而接口返回的数据是正常的&#xff0c;也就是说不是后端接口的问题&…

JVM专题七:JVM垃圾回收机制

JVM专题六&#xff1a;JVM的内存模型中&#xff0c;我们介绍了JVM内存主要分哪些区域&#xff0c;这些区域分别是干什么的&#xff0c;同时也举了个例子&#xff0c;在运行过程种各个区域数据是怎样流转的。细心的小伙伴可能发现一个问题&#xff0c;在介绍完方法弹栈以后就没有…

指令微调数据集构建方法

指令微调&#xff08;Instruction Tuning&#xff09;&#xff0c;是指使用自然语言形式的数据对预训练后的大语言模型进行参数微调&#xff0c;在一些文章中也称为有监督微调&#xff08;Supervised Fine-tuning&#xff0c;SFT&#xff09;或多任务提示训练&#xff08;Multi…

go语言:两协程并发交替打印数字和字母(代码逐行注释)

要求&#xff1a; 并发两协程交替打印数字和字母。一个协程打印数字&#xff0c;一个协程打印字母。 输出&#xff1a; 12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728 思路&#xff1a; 两个 channel 控制两个协程进行交替打印。sync.WaitG…

CARLA自动驾驶模拟器基础

CARLA 使用服务器-客户端架构运行&#xff0c;其中 CARLA 服务器运行模拟并由客户端向其发送指令。客户端代码使用 API 与服务器进行通信。要使用 Python API&#xff0c;您必须通过 PIP 安装该模块&#xff1a; pip3 install carla-simulator # Python 3World and client 客…

【Android面试八股文】你能说一说View中onTouch、onTouchEvent和onClick的执行顺序吗?

文章目录 一、View中onTouch、onTouchEvent和onClick的执行顺序1.1 分析dispatchTouchEvent()1.1.1 执行顺序1.1.2 代码示例1.1.3 总结一、View中onTouch、onTouchEvent和onClick的执行顺序 要了解 onTouch()、onTouchEvent() 和 onClick() 方法的执行顺序,我们需要深入分析 …

React18中各种Hooks用法总结( 内附案例讲解)

React中各种Hooks用法总结 内附案例讲解 一、useState useState 是一个 React Hook&#xff0c;它允许你向组件添加一个 状态变量。 import React, { FC, memo, useState } from react import { MainContainer } from ./style interface IProps {children?: React.ReactNo…