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.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.mfbz.cn/a/736690.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vienna 整流器的基本原理及数学模型

2.1 Vienna 整流器基本工作原理 2.1.1 主电路拓扑结构分析 Vienna 整流器系统的主电路包含用于升压的三相电感、三相桥臂和两个直流侧均压电容。通过有规律的对双向开关进行控制不仅能实现功率双向流动&#xff0c;还能使网侧电流时刻跟踪电网电压&#xff0c;使系统运行在高…

昇思25天学习打卡营第5天|网络构建

一、简介&#xff1a; 神经网络模型是由神经网络层和Tensor操作构成的&#xff0c;mindspore.nn提供了常见神经网络层的实现&#xff0c;在MindSpore中&#xff0c;Cell类是构建所有网络的基类&#xff08;这个类和pytorch中的modul类是一样的作用&#xff09;&#xff0c;也是…

陀螺仪LSM6DSV16X与AI集成(7)----FIFO数据读取与配置

陀螺仪LSM6DSV16X与AI集成.7--检测自由落体 概述视频教学样品申请源码下载主要内容生成STM32CUBEMX串口配置IIC配置CS和SA0设置串口重定向参考程序初始换管脚获取ID复位操作BDU设置设置量程设置FIFO水印设置速率使用流模式设置FIFO时间戳批处理速率使能时间戳FIFO状态寄存器演示…

Mathtype7在Word2016中闪退(安装过6)

安装教程&#xff1a;https://blog.csdn.net/Little_pudding10/article/details/135465291 Mathtype7在Word2016中闪退是因为安装过Mathtype6&#xff0c;MathPage.wll和MathType Comm***.dotm)&#xff0c;不会随着Mathtype的删除自动删除&#xff0c;而新版的Mathtype中的文件…

【从0实现React18】 (三) 初探reconciler 带你初步探寻React的核心逻辑

Reconciler 使React核心逻辑所在的模块&#xff0c;中文名叫协调器&#xff0c;协调(reconciler)就是diff算法的意思 reconciler有什么用&#xff1f; 在前端框架出现之前&#xff0c;通常会使用 jQuery 这样的库来开发页面。jQuery 是一个过程驱动的库&#xff0c;开发者需要…

Django 模版过滤器

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

【git1】指令,commit,免密

文章目录 1.常用指令&#xff1a;git branch查看本地分支&#xff0c; -r查看远程分支&#xff0c; -a查看本地和远程&#xff0c;-v查看各分支最后一次提交, -D删除分支2.commit规范&#xff1a;git commit进入vi界面&#xff08;进入前要git config core.editor vim设一下vi模…

Java项目:基于SSM框架实现的精品酒销售管理系统分前后台【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的精品酒销售管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功…

【break】大头哥哥做题

【break】大头哥哥做题 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 【参考代码】 #include <iostream> using namespace std; int main(){ int sum 0;//求和int day 0;//天数 while(1){int a;cin>>a;if(a-1){break;//结束当前循环 }sum sum a; …

121.网络游戏逆向分析与漏洞攻防-邮件系统数据分析-邮件读取与发送界面设计

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 现在的代码都是依据数据包来写的&#xff0c;如果看不懂代码&#xff0c;就说明没看懂数据包…

Nginx+Lua+Redis 实现Nginx301跳转配置管理

业务场景需求 long long ago&#xff1a; 在项目的运维过程中有一次SEO团队提出 网页的URL 中如果可以带上关键字&#xff0c;那么网页在各大搜索引擎中收录和排名有非常重大的突出优势&#xff08;~~SEO团队到底专不专业 ~~&#xff0c;此处不做置评&#xff09;&#xff0c;…

C/C++ strftime函数

目录 strftime()函数 函数原型 头文件 功能 返回值 参数 案例 结语 strftime()函数 函数原型 size_t strftime(char *s, size_t max, const char *format, const struct tm *tm); 头文件 #include <time.h> 功能 用于日期和时间格式化的函数&#xff0c;它允许你…

【算法】二叉树 - 理论基础

1.种类 1.1 满二叉树 只有度为0和2的节点&#xff0c;且度为0的节点都都在同一层。深度为k&#xff0c;有2^k-1个节点。 1.2 完全二叉树 在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都…

【论文复现|智能算法改进】一种基于多策略改进的鲸鱼算法

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 SCI二区|鲸鱼优化算法&#xff08;WOA&#xff09;原理及实现【附完整Matlab代码】 2.改进点 混沌反向学习策略 将混沌映射和反向学习策略结合&#xff0c;形成混沌反向学习方法&#xff0c;通过该方 法…

Atcoder Beginner Contest 359

传送门 A - Count Takahashi 时间限制&#xff1a;2秒 内存限制&#xff1a;1024MB 分数&#xff1a;100分 问题描述 给定 N 个字符串。 第 i 个字符串 () 要么是 Takahashi 要么是 Aoki。 有多少个 i 使得 等于 Takahashi &#xff1f; 限制 N 是整数。每个…

Cyber Weekly #12

赛博新闻 1、Anthropic发布Claude 3.5 Sonnet 本周五&#xff08;6月21日&#xff09;凌晨&#xff0c;Anthropic宣布推出其最新的语言模型Claude 3.5 Sonnet&#xff0c;距离上次发布Claude3才过去3个月。Claude3.5拥有20万token的长上下文窗口&#xff0c;目前已经在Claude…

数据库断言

在数据库验证断言 目的&#xff1a;不能相信接口返回结果&#xff0c;通过到数据库检验可知接口返回结果是否真的正确 如何校验&#xff1a;代码与mymql建立网络连接&#xff0c;操作数据库&#xff0c;断开连接 代码&#xff1a;java操作数据库 pom文件配置依赖 步骤&…

15.树形虚拟列表实现(支持10000+以上的数据)el-tree(1万+数据页面卡死)

1.问题使用el-tree渲染的树形结构&#xff0c;当数据超过一万条以上的时候页面卡死 2.解决方法&#xff1a; 使用vue-easy-tree来实现树形虚拟列表&#xff0c;注意&#xff1a;vue-easy-tree需要设置高度 3.代码如下 <template><div class"ve-tree" st…

ARM32开发--WDGT看门狗

知不足而奋进 望远山而前行 目录 文章目录 前言 目标 内容 什么是看门狗 ARM中的看门狗 独立看门狗定时器 窗口看门狗定时器 独立看门狗FWDGT 初始化配置 喂狗 完整代码 窗口看门狗WWDGT 初始化配置 喂狗 完整代码 注意 总结 前言 嵌入式系统在如今的科技发…

OpenGL3.3_C++_Windows(18)

接口块&#xff1a; glsl彼此传输数据&#xff0c;通过in / out&#xff0c;当更多的变量&#xff0c;涉及数组和结构体接口块(Interface Block)类似struct&#xff0c;in / out 块名{……}实例名 Uniform缓冲对象&#xff1a; 首先理解uniform Object&#xff1a;负责向gl…