工程(十三)——基于激光视觉的SLAM三维重建

news2024/11/22 18:44:17

博主创建了一个科研互助群Q:772356582,欢迎大家加入讨论。这是一个科研互助群,主要围绕机器人,无人驾驶,无人机方面的感知定位,决策规划,以及论文发表经验,以方便大家很好很快的科研,少走弯路。欢迎在群里积极提问与回答,相互交流共同学习。

一、简介

目前的主流三维重建算法包括:基于网络的纯视觉三维重建、基于SLAM算法的三维重建

        基于激光视觉SLAM(Simultaneous Localization and Mapping)的三维重建在多个方面具有许多优势,这些优势使其在许多领域如机器人导航、自动驾驶、建筑测绘、室内导航和虚拟现实等应用中受到广泛关注。以下是一些主要的优势:

  1. 高精度:激光传感器能够提供高精度的深度信息,使得三维地图的重建精度很高。这对于需要精确定位和建立精确地图的应用非常重要,如自动驾驶车辆和机器人导航。

  2. 实时性能:激光SLAM系统通常能够实时地生成三维地图,因为激光传感器可以快速地采集大量数据,而SLAM算法可以有效地处理这些数据。这对于需要即时反馈的应用非常关键,如自动驾驶和虚拟现实。

  3. 环境适应性:激光SLAM系统对不同类型的环境具有较强的适应性,可以在室内和室外,光照变化较大的情况下工作,而不受环境条件的影响。

  4. 自主性:激光SLAM系统通常不需要依赖外部参考点或GPS信号,因此可以在没有GPS信号或者在室内等无法使用GPS的环境中工作。这使其在室内导航、地下矿井、建筑内部等场景中非常有用。

  5. 鲁棒性:激光SLAM系统对于噪声和传感器误差的鲁棒性较高,可以处理传感器数据中的噪声和不确定性,从而减小了系统错误积累的可能性。

  6. 长距离探测:激光传感器可以实现较长距离的探测,因此可以用于测绘大型区域或者检测远处的目标,例如在自动驾驶中用于障碍物检测和识别。

  7. 可视化能力:激光SLAM系统通常能够生成高质量的三维地图,这些地图可以用于可视化和分析,使用户能够更好地理解环境结构。

二、SLAM算法

        在基于多传感器融合的SLAM三维重建能够实时估计出传感器的位姿,将每一帧的点云叠加到一起从而形成点云地图,随后利用点云处理软件将点云地图生成稠密化网格以达到三维重建的目的。所以基于激光视觉SLAM的三维重建首先要具有一个稳定鲁棒的SLAM系统,一般包括如下步骤:

1、激光雷达-视觉实验平台搭建

2、适用于大范围高动态LVO紧耦合SLAM算法设计

3、数据集采集策略

4、局部点云地图拼接,生成全局地图

5、点云地图修建重建生成UE模型

       香港大学团队的多传感器紧耦合SLAM  R3live++,其将meshlab直接融入算法具有三维重建的功能,算法的配置详情见:

工程(十三)——从零用自己数据跑R3LIVE_桦树无泪的博客-CSDN博客

三、点云生成网格

3.1准备

      当我们自己利用SLAM算法得到点云地图后,一般要对点云进行修补,以达到生成平滑网格的目的,下面介绍一下如何用meshlab软件对pcd点云进行处理并生成网格。首先安装一下meshlab。

sudo add-apt-repository ppa:zarquon42/meshlab
#####   然后按Enter键,继续
sudo apt-get install meshlab

在将pcd点云变为ply格式导入meshlab,pcd转ply代码如下:

import numpy as np
import open3d as o3d

def pcd_to_ply(pcd_path, ply_path):
    # 读取PCD文件
    pcd = o3d.io.read_point_cloud(pcd_path)
    
    # 获取点云数据
    points = np.asarray(pcd.points)
    colors = np.asarray(pcd.colors)
    
    # 创建PLY格式的点云
    ply = o3d.geometry.PointCloud()
    ply.points = o3d.utility.Vector3dVector(points)
    ply.colors = o3d.utility.Vector3dVector(colors)
    
    # 保存为PLY文件
    o3d.io.write_point_cloud(ply_path, ply)

# 使用示例
pcd_path = "rgb_pt.pcd"
ply_path = "rgb_pt.ply"
pcd_to_ply(pcd_path, ply_path)

3.2 点云拼接

meshlab的拼接视频教程参考如下链接

​​​​​Meshlab软件实现点云拼接配准_哔哩哔哩_bilibili

拼接的步骤如下:

 1.将两个ply点云导入meshlab

上图左右为点云1和点云2,红色框为重合区域,采用meshlab软件进行地图拼接,下图为拼接后的地图。

 2.将两个ply点云导入meshlab,点击Align Tool进入拼接界面

3.选择一个模型点击Glue Here Mesh,固定坐标系。选择另一个模型点击point Based Glueing进行匹配。

4.手动选择三个特征明显的点,点击ok进行粗匹配

得到粗匹配的结果如下 

调节匹配参数,点击Process再次匹配

5.之后对匹配后的地图继续旋转矩阵和平移矩阵的细微调整

选择Filters ---》Normals,Curvatures and Orientation ---》Transform:Rotate

6.保存RT矩阵

得到变换矩阵如下所示:

根据变换矩阵生成合并点云地图

3.3 生成网格模型

在得到点云地图后,需要将其转换为mesh模型。视频教程如下

https://www.youtube.com/watch?v=rPEQVBhKJGA

  • 点云修剪
  • 计算法线

Filters→Point Set→Compute normals for point sets

  • 泊松重建

Filters->Remeshing, Simplification and Reconstruction->Surface Reconstruction:Screened Poisson

  • 有效面提取

Filters->Selection->select faces with edges longer than...

  • mesh修补空洞

Filters->Remeshing, Simplification and Reconstruction->close holes

四、材质提取与模型导入

meshlab制作具有UV纹理图的物体模型-CSDN博客

Step1:使用meshlab打开一个具有颜色信息的物体模型

Step2:制作UV map。在Filters中选择Texture -> 在Texture里选择Parametrization:Trivial Per-Triangle。这一步是为了生成一个与物体表面顶点坐标对应的UV map。一般物体的模型用默认设置即可,如果模型的顶点数量过多,需要增大Texture Dimension。

Step3:顶点颜色 -> UV颜色。在Texture中选择Transfer:Vertex Color to Texture,这能够将物体的顶点颜色转换到Step2中生成的UV纹理图。在转换时,需要设置UV纹理图的长宽,最好设置成与Texture Dimension一样的数字。

Step4:保存文件。由于上述的操作制作的是wedge的UV纹理图,接下来我们使用Filters/Texture/Convert PerWedge UV into PerVertex UV来制作Vertex的UV纹理图。

Step5:我们将物体模型导出。  按下图勾选。导出obj模型+材质+mlt链接文件

 导出后,你可以在物体模型文件的同级地址下看到尾缀为tex.png的模型纹理文件。和obj模型文件

Step6:导入UE  Obj mlt png必须在同一文件夹,只导入obj文件UE自动生成纹理材质

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

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

相关文章

了解企业邮箱的外观和功能特点

企业邮箱是什么样子的?企业邮箱不是单一产品,而是由一系列电子邮件服务组成的生态系统。这些服务包括但不限于邮件服务器、客户端、安全解决方案等。这些服务共同构成了企业邮箱的基础设施。 在外观上,企业邮箱和个人邮箱没有太大区别。用户通…

查询优化器:RBO与CBO

SQL查询优化器 1、数据库系统发展简史2、SQL查询优化器3、查询优化器分类4、查询优化器执行过程5、CBO框架Calcite简介 1、数据库系统发展简史 数据库系统诞生于20世纪60年代中期,至今已有近50多年的历史,其发展经历了三代演变,造就了四位图灵…

6个机器学习可解释性框架

1、SHAP SHapley Additive explanation (SHAP)是一种解释任何机器学习模型输出的博弈论方法。它利用博弈论中的经典Shapley值及其相关扩展将最优信贷分配与局部解释联系起来. 举例:基于随机森林模型的心脏病患者预测分类 数据集中每个特征对模型预测的贡献由Shap…

Vscode禁止插件自动更新

由于电脑的vscode版本不是很新。2022.10月份的版本1.7.2,电脑vscode的python插件装的也是2022年4月份的某个版本,但插件经常自动更新,导致python代码无法Debug,解决办法: 点设置,搜autoUpdate, 把红色框选成无

浅析刚入门Python初学者的注意事项

文章目录 一、注意你的Python版本1.print()函数2.raw_input()与input()3.比较符号&#xff0c;使用!替换<>4.repr函数5.exec()函数 二、新手常遇到的问题1、如何写多行程序&#xff1f;2、如何执行.py文件&#xff1f;3、and&#xff0c;or&#xff0c;not4、True和False…

HTML和CSS入门学习

目录 一.HTML 二.CSS 1.CSS作用&#xff1a;美化页面 2.CSS语法 【1】CSS语法规范 【2】如何插入样式表 3.CSS选择器 4.CSS设置样式属性--设置html各种标签的属性 【1】文本属性--设置整段文字的样式 【2】字体属性--设置单个字的样式 【3】链接属性--设置链接的样式…

【Qt绘制小猪】以建造者模式绘制小猪

效果 学以致用&#xff0c;使用设计模式之建造者模式绘制小猪。 代码 接口&#xff1a;申明绘制的步骤 PigBuilder.h #ifndef PIGBUILDER_H #define PIGBUILDER_H#include <QObject> #include <QPainter>class PigBuilder : public QObject {Q_OBJECT public:ex…

行情分析——加密货币市场大盘走势(11.7)

大饼昨日下跌过后开始有回调的迹象&#xff0c;现在还是在做指标修复&#xff0c;大饼的策略保持逢低做多。稳健的依然是不碰&#xff0c;目前涨不上去&#xff0c;跌不下来。 以太昨天给的策略&#xff0c;依然有效&#xff0c;现在以太坊开始回调。 目前来看&#xff0c;回踩…

电动汽车充放电V2G模型

威♥关注“电击小子程高兴的MATLAB小屋”获取更多资料 1主要内容 本程序主要建立电动汽车充放电V2G模型&#xff0c;采用粒子群算法&#xff0c;在保证电动汽车用户出行需求的前提下&#xff0c;为了使工作区域电动汽车尽可能多的消纳供给商场基础负荷剩余的光伏电量&#xf…

【vue3/echarts】vue3中使用echarts/饼图/双轴双数据柱状图

npm下载echarts 引入使用 <script> import Box from "/components/box.vue"; import { onMounted } from vue; import { init } from echarts; export default {components: {Box: Box},setup() {onMounted(() > {// 饼图const charEle document.getElem…

flink的AggregateFunction,merge方法作用范围

背景 AggregateFunction接口是我们经常用的窗口聚合函数&#xff0c;其中有一个merge方法&#xff0c;我们一般情况下也是实现了的&#xff0c;但是你知道吗&#xff0c;其实这个方法只有在你使用会话窗口需要进行窗口合并的时候才需要实现 AggregateFunction.merge方法调用时…

Redis 扩展 RedisBloom 插件,解决缓存击穿、穿透

文章目录 一、概述二、编译准备2.1 升级 make2.2 安装 Python3 三、编译 RedisBloom四、测试 RedisBloom五、应用场景5.1 缓存击穿5.2 缓存穿透5.3 原理总结 六、存在的问题 如果您对Redis的了解不够深入请关注本栏目&#xff0c;本栏目包括Redis安装&#xff0c;Redis配置文件…

计算机基础知识45

JS的RegExp对象(正则) text: 正则校验数据 # T/F match: 匹配 # (3) [s, s, s] //定义 var reg1 new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}"); var reg2 /^[a-zA-Z][a-zA-Z0-9]{5,9}$/; //正则校验数据 var res reg1.test(jason666); console.log(res…

二叉树的前序、中序、后序、层序遍历

参考内容&#xff1a; 五分钟让你彻底理解二叉树的非递归遍历 Python实现二叉树的非递归遍历 二叉树遍历——深度优先&#xff08;前中后序&#xff09;广度优先&#xff08;层序遍历&#xff09; 构造二叉树 定义二叉树结构如下 struct node {int data;node *left;node *rig…

移远通信蝉联“年度杰出创新企业”大奖,以核心技术实力永攀行业高峰

11月2日&#xff0c;“国际集成电路展览会暨研讨会”&#xff08;IIC Shenzhen 2023&#xff09;在深圳大中华交易广场重磅启幕。业界领袖共探国内外创新技术与产品成果&#xff0c;并对推动全球电子产业创新做出贡献的企业进行了表彰。其中&#xff0c;全球领先的物联网整体解…

Android 使用.9图 NinePatchDrawable实现动态聊天气泡

最近一段时间&#xff0c;在做一个需求&#xff0c;需要实现一个聊天气泡的动画效果&#xff0c;如下图所示&#xff1a; GitHub源码demo &#xff0c;建议下载demo&#xff0c;运行查看。 动态聊天气泡动画 静态聊天气泡 经过一段时间调研&#xff0c;实现方案如下: 实现方…

使用Redis实现缓存及对应问题解决

一、为什么需要Redis作缓存&#xff1f; 在业务场景中&#xff0c;如果有些数据需要极高频的存取&#xff0c;每次都要在mysql中查询的话代价太大&#xff0c;假如有一个存在于客户端和mysql之间的存储空间&#xff0c;每次可以在这空间中进行存取操作&#xff0c;就会减轻mys…

Docker配置Nginx反向代理

文章目录 1.部署微程序到docker中1.1 dockerfile文件1.2 依据自定义的dockerfile文件创建docker镜像1.3 创建容器1.4 测试 2.在docker中安装Nginx2.1 安装Nginx镜像2.2 获取Nginx配置文件并将其同步到宿主电脑指定位置中安装nginx容器删除nginx容器 2.3 安装Nginx容器并数据挂载…

C++: 类和对象(中) (构造函数, 析构函数, 拷贝构造函数, 赋值重载, 取地址重载)

文章目录 1. 类的6个默认成员函数2. 构造函数构造函数概念构造函数特性特性1,2,3,4特性5特性6特性7 3. 析构函数析构函数概念析构函数特性特性1,2,3,4特性5特性6 4. 拷贝构造函数拷贝构造函数概念拷贝构造函数特性特性1,2特性3特性4特性5 5. 运算符重载一般运算符重载赋值运算符…

mysql安装成功

先在官网下载 地址&#xff1a;MySQL :: Download MySQL Community Server下载的 下载的这个 解压后 zip格式是自己解压&#xff0c;解压缩之后其实MySQL就可以使用了&#xff0c;但是要进行环境变量配置 我的电脑->属性->高级->环境变量->系统变量 选择Path,在其…