Ubuntu20.04下A-LOAM配置安装及测试教程(包含报错问题踩坑)

参考文章:

ubuntu20.04下ros运行A-LOAM
Ubuntu20.04下运行LOAM系列:A-LOAM、LeGO-LOAM、SC-LeGO-LOAM、LIO-SAM 和 LVI-SAM

需要学习源码的同学可以下载LOAM论文
LOAM论文链接

1.需要安装的库文件

1.1Eigen 3.3
可以直接使用apt命令安装,或者去官网下载源码安装

sudo apt-get install libeigen3-dev

安装成功如下,我这里之前装过所以显示如下,可以看到安装的版本为3.3.7
在这里插入图片描述
1.2 ceres

//克隆下来,如果网络不好一直下载不了就去官网下载源码然后解压
git clone https://ceres-solver.googlesource.com/ceres-solver//在当前目录下创建文件夹ceres-bin
sudo mkdir ceres-bin
cd ceres-bin
cmake ../ceres-solver
make -j4
make test
sudo make install

按照上面的步骤装好之后,我们再来测试一下ceres是否装好了
测试ceres

sudo mkdir ceres_test
cd ceres_test
touch CMakeLists.txt
touch cere_example.cpp
sudo mkdir build 
cd build
cmake ..
make
./ceres_example

其中CMakeLists.txt和ceres_example.cpp文件内容分别如下
CMakeLists.txt

cmake_minimum_required(VERSION 3.8.0)project(ceres_example)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(Ceres REQUIRED)include_directories(${CERES_INCLUDE_DIRS}
)add_executable(ceres_example
ceres_example.cpp)target_link_libraries(ceres_example${CERES_LIBRARIES}
)

ceres_example

#include <ceres/ceres.h>class CostFunctor {
public:template <typename T>bool operator()(const T* const x, T* residual) const{residual[0] = 10.0 - x[0];return true;}
};int main(int argc, char const* argv[])
{double initial_x = 5.0;double x = initial_x;// Build the problem.ceres::Problem problem;// Set up the only cost function (also known as residual). This uses// auto-differentiation to obtain the derivative (jacobian).ceres::CostFunction* cost_function = new ceres::AutoDiffCostFunction<CostFunctor, 1, 1>(new CostFunctor);problem.AddResidualBlock(cost_function, nullptr, &x);// Run the solver!ceres::Solver::Options options;options.linear_solver_type = ceres::DENSE_QR;options.minimizer_progress_to_stdout = true;ceres::Solver::Summary summary;Solve(options, &problem, &summary);std::cout << summary.BriefReport() << "\n";std::cout << "x : " << initial_x<< " -> " << x << "\n";return 0;
}

运行后输出如下,就代表测试成功,ceres安装成功
在这里插入图片描述
1.3 pcl
同样的可以使用apt安装,或者去官网下载源码自行安装

sudo apt install libpcl-dev

2 下载编译A-LOAM

2.1下载源码
A-LOAM开源地址

//建立A-LOAM工作空间
sudo mkdir ALOAM
cd ALOAM
sudo mkdir src
cd src//clone下来,如果网络不好同样可以直接去官网下载源码下来解压
git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM.git

2.2修改CMakeLists.txt
由于PCL版本1.10,将C++标准改为14,在A-LOAM源码中的CMakeLists.txt中进行如下修改

//set(CMAKE_CXX_FLAGS "-std=c++11")
set(CMAKE_CXX_FLAGS "-std=c++14")

2.2 修改源码
如果我们下载下来源码之后直接对其编译,是会发生报错的,因此我们需要对源码进行一些修改

  • 将四个.cpp文件中的/camera_init修改为camera_init
  • 将scanRegistration.cpp中的 #include <opencv/cv.h> 修改为#include <opencv2/imgproc.hpp>
  • 修改kittiHelper.cpp中 CV_LOAD_IMAGE_GRAYSCALE为 cv::IMREAD_GRAYSCALE
  • 如果编译遇到大量未找到Eigen相关错误,将四个.cpp文件中的#include <eigen3/Eigen/Dense>修改为#include <Eigen/Dense>

2.3 编译ALOAM

//定位至我们原来新建的工作空间中进行编译
cd ~/ALOAM/
catkin_make

编译成功显示如下
在这里插入图片描述

3 运行测试ALOAM

在A-LOAM源码中新建dataSet文件夹存放我们的数据集,将nsh_indooroutdoor.bag数据集下载至该文件夹中。
在A-LOAM源码中找打launch文件夹,在该文件夹中打开终端并输入如下命令

roslaunch  aloam_velodyne_VLP_16.launch

然后再在dateSet文件夹中打开一个终端,输入如下命令开始播放数据集

rosbag play nsh_indoor_outdoor.bag

显示效果如下:
在这里插入图片描述
最后测试成功。

4 关于报错

如果我们在编译ALOAM的时候出现大量关于ceres的报错,如下图所示
在这里插入图片描述
解决方法:
是因为ceres版本的问题,我们可以将ceres更换至和A-LOAM配套的版本,或者进行如下的源码修改:
在laserMapping.cpp(row567-568)和 laserOdometry.cpp(row286-287)这两个cpp文件中,将如下代码

ceres::LocalParameterization *q_parameterization = new ceres::EigenQuaternionParameterization();

改为:

ceres::Manifold *q_parameterization = new ceres::EigenQuaternionManifold();

再次进行catkin_make发现编译成功,问题解决!

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

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

相关文章

芯课堂 | 如何配置SWM系列系统时钟?

如何配置SWM系列 系统时钟&#xff1f; 华芯微特科技有限公司SWM系列芯片可通过软件配置改变时钟的速度&#xff0c;可以让我们的设计更加灵活,频率可选空间也更加广泛&#xff0c;用户可以根据自己的实际需求配置需要的系统时钟。为了让用户能够更简单的使用这一功能&#xf…

android studio使用总结

gradle是项目构建的工具&#xff0c;在gradle-wrapper.properties这个文件中设置&#xff0c; 然后就会下载相应版本的安装包到这个路径C:\Users\ly.gradle\wrapper\dists&#xff0c;例如这里是7.0.2&#xff0c; gradle和studio中的jdk版本需要对应&#xff0c;否则无法构建项…

无代码DIY图像检索

软件环境准备 可参见《HuggingFists-低代码玩转LLM RAG-准备篇》中的HuggingFists安装及Milvus安装。 流程环境准备 图片准备 进入HuggingFists内置的文件系统&#xff0c;数据源->文件系统->sengee_fs_settings_201创建Image文件夹将事先准备的多张相同或不同种类的图…

那么多编程语言,我为什么选择了Python?

我为什么选择了Python 目前&#xff0c;Python语言的发展势头在国内国外都是不可阻挡的&#xff0c;Python凭借其简单优雅的语法&#xff0c;强大的生态圈从众多语言中脱颖而出&#xff0c;如今已经是稳坐编程语言排行榜前三的位置&#xff0c;而且在GitHub和IEEE发布的最受欢…

Jenkins使用随笔

1、如果要部署的springboot程序和jenkins在同一台linux上&#xff0c;需要增加一条 export BUILD_IDtomcat_mobile_build_id 如下图&#xff1a; 原因是&#xff1a;jenkins在执行sh脚本的时候&#xff0c;如果脚本中有启动后台进程的情况&#xff0c;例如tomcat的关闭和启动…

C#上位机与欧姆龙PLC的通信11----【再爆肝】上位机应用开发(WPF版)

1、先上图 继上节完成winform版的应用后&#xff0c;今天再爆肝wpf版的&#xff0c;看看看。 可以看到&#xff0c;wpf的确实还是漂亮很多&#xff0c;现在人都喜欢漂亮的&#xff0c;颜值高的&#xff0c;现在是看脸时代&#xff0c;作为软件来说&#xff0c;是交给用户使用的…

Linux之Iptables简易应用

文档形成时期&#xff1a;2009-2024年 和iptables打交道有15年了&#xff0c;经过无数实践后&#xff0c;形成一个简易应用文档。 文档主题是简易应用&#xff0c;所以其原理不详述了。 因软件世界之复杂和个人能力之限&#xff0c;难免疏漏和错误&#xff0c;欢迎指正。 文章目…

C语言理解

目录 计算机语言算法C项目创建C程序框架经典实例 计算机语言 程序是用特殊的编程语言&#xff08;这里是C语言&#xff09;写出来表达如何解决问题的不是用编程语言来和计算机交谈&#xff0c;而是描述要求它如何做事情的过程或方法程序是问题的载体&#xff0c;程序的执行就是…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-6 线性控制器设计Linear Controller Design

本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-6 线性控制器设计Linear Controller Design

跨平台的文件传输协议@windows端服务器的配置@smb协议共享方案@ftp服务器设置

文章目录 abstractrefs ftp server下面是核心步骤FAQ smb server设置方法右键设置共享文件夹查看所有已经共享的文件夹停止某个文件的共享 共享文件夹的访问控制补充匿名访问问题协议相关信息参考android客户端推荐FAQ不同用户文件无法访问 比较和总结其他用户访问smb服务器共享…

【LV12 DAY15 WDT】

WDT简介 看门狗定时器&#xff0c;其主要作用是发生软件故障时可产生复位信号使SOC复位&#xff0c;其本质上是一个计数器。 #include "exynos_4412.h"void delay(unsigned int time){while(time--);}int main(){//设置一级分频//WDT.WTCONWDT.WTCON | (0X4e<&l…

优惠券兑换码生成需求——事务同步回调问题分析

前段时间收到一个优惠券兑换码的需求&#xff1a;管理后台针对一个优惠券发起批量生成兑换码&#xff0c;这些兑换码可以导出分发到各个合作渠道&#xff08;比如&#xff1a;抖音、京东等&#xff09;&#xff0c;用户通过这些渠道获取到兑换码之后&#xff0c;再登录到我司研…

鸿鹄云商B2B2C:JAVA实现的商家间直播带货商城系统概览

【saas云平台】打造全行业全渠道全场景的saas产品&#xff0c;为经营场景提供一体化解决方案&#xff1b;门店经营区域化、网店经营一体化&#xff0c;本地化、全方位、一站式服务&#xff0c;为多门店提供统一运营解决方案&#xff1b;提供丰富多样的营销玩法覆盖所有经营场景…

数据库与低代码:加速开发,提升效率的完美结合

随着技术的不断进步&#xff0c;数据库和低代码开发成为了现代应用程序开发中的两大关键要素。本文将探讨如何通过结合数据库和低代码开发&#xff0c;加速应用程序的开发过程&#xff0c;并提高开发效率和质量。 在过去的几十年中&#xff0c;数据库一直被视为应用程序开发中不…

使用srs_librtmp实现RTMP推流

1、背景 由于项目有需求在一个现有的产品上增加RTMP推流的功能&#xff0c;目前只推视频流。 2、方案选择 由于是在现有的产品上新增功能&#xff0c;那么为了减少总的成本&#xff0c;故选择只动应用软件的来实现需求。 现有的产品中的第三方库比较有限&#xff0c;连个ffmp…

Linux CentOS 7.6安装nginx详细保姆级教程

一、通过wget下载nginx压缩包 1、进入home文件并创建nginx文件夹用来存放nginx压缩包 cd /home //进入home文件夹 mkdir nginx //创建nginx文件夹 cd nginx //进入nginx文件夹2、下载nginx,我这里下载的是Nginx 1.24.0版本&#xff0c;如果要下载新版本可以去官网进行下载:…

回归预测 | Matlab基于SMA+WOA+SFO-LSSVM多输入单输出回归预测

回归预测 | Matlab基于SMAWOASFO-LSSVM多输入单输出回归预测 目录 回归预测 | Matlab基于SMAWOASFO-LSSVM多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 SMAWOASFO-LSSVM回归预测 基于黏菌算法鲸鱼算法向日葵算法优化LSSVM回归预测 其中包含三种改进…

RSIC-V“一芯”学习笔记(一)——概述

考研的文章和资料之后想写的时候再写怕趴 文章目录 一、阶段设计二、环境、开发语言和工具三、最重要的两个观念四、处理器芯片设计五、处理器芯片设计包含很多软件问题六、处理器芯片的评价指标七、复杂系统的构建和维护八、专业世界观九&#xff0c;提问的艺术(提问模板)十、…

Ubuntu下使用Virtual Box中显示没有可用的USB设备

Ubuntu中使用Virtual Box&#xff0c;但是使用到USB时只有USB1.1可以使用&#xff0c;并且提示没有可以使用的USB设备&#xff0c;解决方法如下 下载并安装Vitrual Box提供的功能扩展包 分别点击帮助->关于&#xff0c;查看当前使用的版本进入到Virtual Box官网下载链接根…

vue前端开发自学练习,Props数据传递-类型校验,默认值的设置!

vue前端开发自学练习,Props数据传递-类型校验,默认值的设置&#xff01; 实际上&#xff0c;vue开发框架的时候&#xff0c;充分考虑到了前端开发人员可能会遇到的各种各样的情况&#xff0c;比如大家经常遇到的&#xff0c;数据类型的校验&#xff0c;再比如&#xff0c;默认…