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发现编译成功,问题解决!

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

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

相关文章

【GO语言依赖】Go语言依赖管理简述

在运行环境中&#xff0c;遭遇报错&#xff0c;显示找不到函数 经过研究后发现需要进行依赖管理&#xff0c;进行如下操作后解决&#xff1a; 起源 最早的时候&#xff0c;Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如…

VS中动态库的创建和调用

VS中动态库的创建和调用 库 ​ 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复用的代码。库的存在形式本质上来说库是一种可执行代码的二进制。 ​ 库有两种&#xff1a;静态库&#xff08;.a、.lib&#xff09;和动态库&#xff08;.so、.dll&#xff09;。所谓静态…

VUE指令(一)

vue会根据不同的指令&#xff0c;针对不同的标签实现不同的功能。指令是带有 v- 前缀的特殊标签属性。指令的职责是&#xff0c;当表达式的值改变时&#xff0c;将其产生的连带影响&#xff0c;响应式地作用于 DOM。 1、v-text&#xff1a;设置元素的文本内容&#xff0c;不会解…

Vulnhub-HACKSUDO: PROXIMACENTAURI渗透

文章目录 一、前言1、靶机ip配置2、渗透目标3、渗透概括 开始实战一、信息获取二、端口敲门三、web密码爆破四、getShell五、获取新用户六、提权 一、前言 由于在做靶机的时候&#xff0c;涉及到的渗透思路是非常的广泛&#xff0c;所以在写文章的时候都是挑重点来写&#xff0…

TypeScript类型挑战:实现内置的Omit实用类型

掌握 TypeScript Omit 泛型&#xff0c;一起完成 Type 挑战&#xff0c;巩固 TypeScript 知识。 为了帮助读者更好地巩固 TypeScript 的知识&#xff0c;我从 Github 上的 type-challenges 库中选择了几十个挑战&#xff0c;与您一起完成类型挑战。 挑战 实现内置的 Omit&…

初识Ubuntu

其实还是linux操作系统 命令都一样 但是在学习初级阶段&#xff0c;我还是将其分开有便于我的学习和稳固。 cat 查看文件 命令 Ubuntu工作中经常是用普通用户&#xff0c;在需要时才进行登录管理员用户 sudn -i 切换成管理用户 我们远程连接时 如果出现 hostname -I没有出现…

什么是数字身份?

数字身份是指代表在线实体的数据集合。数字身份可以代表用户、组织或电子设备&#xff0c;由他们的帐户、凭证、证书、行为和使用模式组成。在身份访问管理&#xff08;IAM&#xff09;中&#xff0c;需要数字身份来对用户进行身份验证并授予他们访问敏感数据的权限。 数字身份…

5、MAE:探索视觉预训练模型

目录 1、论文 2、背景与动机 3、回答的问题 4、创新与卖点 5、实现细节 模型框架 具体步骤 简单代码示例 6、一些资料 1、论文 Masked Autoencoders Are Scalable Vision Learnershttps://arxiv.org/pdf/2111.06377.pdf 2、背景与动机 在深度学习和计算机视觉的领域中…

【uniapp】新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握

一、uniapp和HBuilderX介绍 uni-app官方网站&#xff1a;https://uniapp.dcloud.net.cn/ 为什么要学习uniapp&#xff1f; 1、一套代码可以打包到不同的应用平台&#xff1b;一套代码编到十几个平台&#xff0c;这不是梦想。眼见为实&#xff0c;扫描以下二维码&#xff0c;…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑧

单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应处理&#xff0c;执行j10*x-y返回文字“j1&#xff1a;”和计算值&#xff0c;执行j(x-y)*(10⁵%7)返回文字“j2&#xff1a;”和计算值&#xff0c;执行jy*log(x10)返回文字“j3&#xff1a;”和计算值…

Qt / day04

1. 思维导图 2. 编写程序实现闹钟如下 文件 代码 clock.h #include "clock.h" #include "ui_clock.h"Clock::Clock(QWidget *parent): QWidget(parent), ui(new Ui::Clock), ptrTimerShow(new QTimer(this)), ptrTimerAlarm(new QTimer(this)), ptrSpeec…

Spark六:Spark 底层执行原理SparkContext、DAG、TaskScheduler

Spark底层执行原理 学习Spark运行流程 学习链接&#xff1a;https://mp.weixin.qq.com/s/caCk3mM5iXy0FaXCLkDwYQ 一、Spark运行流程 流程&#xff1a; SparkContext向管理器注册并向资源管理器申请运行Executor资源管理器分配Executor&#xff0c;然后资源管理器启动Execut…

iOS rootless无根越狱解决方案

据游戏工委数据统计&#xff0c;2023年国内游戏市场实际销售收入与用户规模双双创下新高&#xff0c;游戏普遍采用多端并发方式&#xff0c;成为收入增长的主因之一。 中国市场实际销售收入及增长率丨数据来源&#xff1a;游戏工委 多端互通既是机遇&#xff0c;也是挑战。从游…

使用 Docker 和 Diffusers 快速上手 Stable Video Diffusion 图生视频大模型

本篇文章聊聊&#xff0c;如何快速上手 Stable Video Diffusion (SVD) 图生视频大模型。 写在前面 月底计划在机器之心的“AI技术论坛”做关于使用开源模型 “Stable Diffusion 模型” 做有趣视频的实战分享。 因为会议分享时间有限&#xff0c;和之前一样&#xff0c;比较简…

MySQL篇—通过Clone插件进行远程克隆数据(第三篇,总共三篇)

在介绍 Clone 最终篇之前&#xff0c;我们先简要回顾一下前面所讲的内容。在第一篇中&#xff0c;我们探讨了 Clone 的用途、使用的前提条件、存在的限制&#xff0c;以及它的备份原理。Clone 是一种用于复制和备份数据的工具&#xff0c;它能够快速高效地创建数据的精确副本。…

超维空间M1无人机使用说明书——53、ROS无人机二维码识别与降落——V2升级版本

引言&#xff1a;使用二维码引导无人机实现精准降落&#xff0c;首先需要实现对二维码的识别和定位&#xff0c;可以参考博客的二维码识别和定位内容。本小节主要是通过获取拿到的二维码位置&#xff0c;控制无人机全向的移动和降落&#xff0c;本小节再V1版本的基础上增加了动…

【AI视野·今日NLP 自然语言处理论文速览 第七十二期】Mon, 8 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 8 Jan 2024 Totally 17 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers DeepSeek LLM: Scaling Open-Source Language Models with Longtermism Authors DeepSeek AI Xiao Bi, Deli Ch…

【修图】AI修图工具

人脸替换 免费的人脸替换工具&#xff1a; Face Swap&#xff1a; https://vmodel.ai/face-swap 支持单人换脸、多人换脸 AI消除 SnapEdit https://snapedit.app/remove-object 不付费的话只能下载清晰度较低的版本 但我试了几个在线的AI消除工具&#xff0c;SnapEdit算是…

最新版docker-compose安装

Ubuntu/Kali 下载安装最新版 docker-compose # FastGit加速 sudo curl -L "https://hub.fgit.cf/docker/compose/releases/download$(curl -L -i -s -o /dev/null -w "%{url_effective}\n" https://hub.fgit.cf/docker/compose/releases/latest | awk -F tag …

docker-compose部署kafka、SASL模式(密码校验模式)

一.基础kafka部署 zookeeper&#xff0c;kafka&#xff0c;kafka-ui docker-compose.yml 注意点&#xff1a;192.168.1.20 是宿主机的ip version: "3" services:zookeeper:image: wurstmeister/zookeepercontainer_name: zookeeperrestart: alwaysports:- 2181:2…