LeGO-LOAM论文翻译(内容精简)

2023-11-11

LeGO-LOAM是一种在LOAM之上进行改进的激光雷达建图方法,建图效果比LOAM要好,但是建图较为稀疏,计算量也更小了。

本文原地址:wykxwyc的博客

github注释后LeGO-LOAM源码:LeGO-LOAM_NOTED
关于代码的详细理解,建议阅读:

1.地图优化代码理解

2.图像重投影代码理解

3.特征关联代码理解

4.LeGO-LOAM中的数学公式推导

以上博客会随时更新,如果对你有帮助,请点击注释代码的github仓库右上角star按钮,你的鼓励将给我更多动力。

摘要

LeGO-LOAM特点

1)一种轻量级的,可在嵌入式平台上运行
2)点云分割去除噪声
3)带有地面优化的实时6自由度估计(在分割和优化步骤中利用了地平面的存在)
4)回环检测

LeGO-LOAM过程:

1)首先应用点云分割滤除噪声
2)然后特征抽取接收特征平面和特征边
3)两步Levenberg-Marquardt优化方法:地面提取的平面特征用于在第一步中获得 [ t z , θ r o l l , θ p i t c h ] \left[t_{z}, \theta_{roll}, \theta_{pitch}\right] [tz,θroll,θpitch] ,在第二步中,通过匹配从分段点云提取的边缘特征来获得其余部分的变换 [ t x , t y , θ y a w ] \left[t_{x}, t_{y}, \theta_{yaw}\right] [tx,ty,θyaw]
相比于LOAM,LeGO-LOAM实现了类似或更好的精度,同时降低了计算开销。

1.简介

基于视觉的方法在闭环检测方面有很多优势,但基于视觉对于照明和观测点敏感度高,容易不稳定。
雷达对于光照不敏感。

关于ICP:

最典型的寻找两个雷达scans之间的坐标变换的方法是iterative closest point(ICP)。通过逐点找到对应,ICP迭代地对齐两组点,直到满足停止标准。当扫描包括大量点时,ICP可能遭受过高的计算成本。

学术界已经提出了许多ICP的变体来提高其效率和准确性[2]。

[3] 介绍了一种点到平面的ICP变体,它将点与局部平面贴片相匹配。

Generalized-ICP [4]提出了一种匹配两次扫描的局部平面贴片的方法。

此外,一些ICP变体利用并行计算来提高效率[5]-[8]。

基于特征的匹配方法通过从环境中提取代表性特征而需要较少的计算资源。
成为特征的条件:1)有效匹配2)视点无关。

点特征直方图(PFH)[9] 和视角特征直方图(VFH)[10],使用简单有效的技术从点云中提取这些特征的方法。

[11]中介绍了使用Kanade-Tomasi角点检测器从点云中提取通用特征的方法。

[12]中讨论了从密集点云中提取线和平面特征的框架。

对点云使用特征注册的算法:

[13]和[14]提出了一种关键点选择算法:在本地集群中执行点曲率计算,然后使用所选关键点来执行匹配和位置识别。

[15]通过将点云投影到距离图像上并分析深度值的二阶导数,然后从具有大曲率的点中选择特征以进行匹配和位置识别。

[16]中提出了基于平面的配准算法。室外环境(例如森林)可能限制这种方法的应用。

[17]的领口线段(CLS)方法,专为Velodyne激光雷达设计。CLS使用来自扫描的两个连续“环”的点随机生成线。然后生成两个线云并用于注册。但random generation of lines 对该方法有干扰。

[18]中提出了基于分割的配准算法。SegMatch首先将分段应用于点云。然后基于其特征值和形状直方图为每个片段计算特征向量。随机森林用于匹配来自两次扫描的片段。虽然这种方法可以用于在线姿态估计,但它只能提供大约1Hz的定位更新。

[19]和[20]提出了LOAM。LOAM对边缘/平面扫描匹配执行点特征以找到扫描之间的对应关系。通过计算其局部区域中的点的粗糙度来提取特征。选择具有高粗糙度值的点作为边缘特征。类似地,具有低粗糙度值的点被指定为平面特征。通过在两个单独的算法之间高明地划分估计问题来实现实时性能。一种算法以高频率运行并以低精度估计传感器速度。 另一种算法以低频运行但返回高精度运动估计。将两个估计值融合在一起以产生高频率和高精度的单个运动估计。LOAM的最终精确度是KITTI测距基准站点[21]上仅激光雷达估算方法所能达到的最佳效果。

LeGO-LOAM的适用场景:

1)没有强大的计算单元(工控机)。
2)由于尺寸有限,许多无人驾驶地面车辆(UGV)没有悬架,小型UGV经常遇到非平滑运动,所获取的数据经常失真,在两次连续扫描之间也很难找到可靠的特征对应关系。

在上述条件中,当资源有限时,LOAM的性能会恶化。恶化原因如下:
1)由于需要计算密集3D点云中每个点的粗糙度,因此轻量级嵌入式系统上的特征提取更新频率无法始终跟上传感器更新频率。
2)数据失真,嘈杂环境中操作UGV也对LOAM提出了挑战。由于激光雷达的安装位置通常在小UGV上接近地面,因此来自地面的传感器噪声可能是恒定的存在。例如,草的距离信息可能导致高粗糙度值。因此,需要从这些点抽取掉不可靠的边缘特征。类似地,也可以从树叶返回的点提取边缘或平面特征。这些特征对于扫描匹配通常是不可靠的,因为在两次连续扫描中可能看不到相同的草叶或叶片。使用这些功能可能会导致注册不准确和大漂移。

基于上面的原因,提出 LeGO-LOAM,用于复杂环境中对UGV进行姿态估计。优点:
1)LeGO-LOAM是轻量级的,因为可以在嵌入式系统上实现实时姿态估计和建图。
2)去除失真数据,在地面分离之后,执行点云分割以丢弃可能表示不可靠特征的点。
3)LeGO-LOAM引入地面优化,因为我们引入了两步优化姿势估计。从地面提取的平面特征用于在第一步中获得 [ t z , θ r o l l , θ p i t c h ] \left[t_{z}, \theta_{roll}, \theta_{pitch}\right] [tz,θroll,θpitch]。 在第二步中,通过匹配从分段点云提取的边缘特征来获得其余部分的变换 [ t x , t y , θ y a w ] \left[t_{x}, t_{y}, \theta_{yaw}\right] [tx,ty,θyaw]
4)集成了回环检测以校正运动估计漂移的能力。

本文的其余部分安排如下:
第2节介绍了用于实验的硬件。
第3节详细描述了所提出的方法。
第4部分介绍了各种户外环境的一系列实验。

2.系统硬件

VLP-16测量范围高达100米,精度为±3厘米。它具有30°(15°)的垂直视场(FOV)和360°的水平FOV。16通道传感器提供2°的垂直角分辨率。水平角分辨根据旋转速率不同,从0.1°到0.4°变化。在整篇论文中,我们选择10Hz的扫描速率,其提供0.2°的水平角分辨率。

HDL-64E(通过KITTI数据集研究这项工作中)也具有360°的水平FOV,但是它还有48个通道。 HDL-64E的垂直FOV为26.9°。

本文中使用的UGV是Clearpath Jackal。 由270瓦时的锂电池供电,最大速度为2.0米/秒,最大有效载荷为20千克。Jackal还配备了低成本惯性测量单元(IMU),CH Robotics UM6方向传感器。

提出的框架在Nvidia Jetson TX2和2.5GHz i7-4710MQ的laptop上验证:
Jetson TX2是一款嵌入式计算设备,配备ARM Cortex-A57 CPU。
笔记本电脑CPU以匹配[19]和[20]中使用的计算硬件,和Zhang Ji论文中的配置相同。

3.轻量级激光雷达测量和建图

A.系统概述

框架概述如图1所示。

系统输入:接收来自3D激光雷达的输入。

输出:6 DOF姿势估计。

整个系统分为五个模块:
1)分割,采用单个扫描的点云,并将其投影到距离图像上进行分割。分割后的点云然后被发送到2)特征提取模块。
3)雷达里程计使用从前一模块中提取的特征来找到与连续扫描相关的变换。
特征在4)雷达建图模块中进一步处理,雷达建图将它们注册到全局点云图。
5)变换融合模块融合了激光雷达里程计和激光雷达建图的姿态估计结果,并输出最终的姿态估计。
与[19]和[20]的原始LOAM框架相比,所提出的系统寻求提高地面车辆的效率和准确性。

B.分割

点云 P t = { p 1 , p 2 , … , p n } P_{t}=\left\{p_{1}, p_{2}, \dots, p_{n}\right\} Pt={p1,p2,,pn}为在时间t时获得的点云, p i p_{i} pi
代表的是 p t p_{t} pt中的一个点。 r i r_{i} ri表示从对应点 p i p_{i} pi到传感器的欧几里德距离。
p t p_{t} pt首先投影到range image上:

VLP-16分辨率:水平0.2°,垂直2°,投影距离图像分辨率:1800×16(360/0.2×16)。每个 p i p_{i} pi现在由range image中的像素表示。

地平面估计[22]:
在分割之前进行地面图像的逐列评估,其可以被视为,用于地面点提取。在此过程之后,可能代表地面的点被标记为地面点而不用于分割。

对点云进行分组聚类,仅保留可表示大对象(例如树干)和地面点的点(图2(b)):

1)来自同一群集的点将分配唯一标签。 地面点是一种特殊类型的群集。将分段应用于点云可以提高处理效率和特征提取精度。
2)环境噪声多,树叶这些特征不可靠,同时为提高速度,我们省略少于30个点的聚类,

每个点获得三个属性:
1)其标签作为基点或分段点,
2)其在距离图像中的列和行索引
3)其range value。

C.特征提取

特征提取过程类似于Zhang Ji的论文[20],但不从原始点云提取,而是从地面点和segmented points提取特征。

1)计算每个点 p i p_{i} pi粗糙度:
c = 1 ∣ S ∣ ⋅ ∥ r i ∥ ∥ ∑ j ∈ S , j ≠ i ( r j − r i ) ∥ c=\frac{1}{|S| \cdot\left\|r_{i}\right\|}\left\|\sum_{j \in S, j \neq i}\left(r_{j}-r_{i}\right)\right\| c=Sri1jS,j̸=i(rjri)
令S作为range image中同一行的连续点 p i p_{i} pi的点集。S中有一半的点位于 p i p_{i} pi
的两侧。本文中 ∣ S ∣ = 10 |S|=10 S=10

2)为了从所有方向均匀地提取特征,将range image水平划分为几个相等的sub-image。
3)按每个点的粗糙度值 对sub-image的每一行中的点进行排序。
4)我们使用阈值 c t h c_{th} cth来区分不同类型的特征。 c &gt; c t h c&gt;c_{th} c>cth:边特征, c &lt; c t h c&lt;c_{th} c<cth:平面特征。
5)从sub-image的每一行中选取不属于地面,且有最大c值的 n F e n_{\mathbb{F}_{e}} nFe个特征边。
6)选取最小c n F p n_{\mathbb{F}_{p}} nFp个平面特征点(可以标记为地面或分段点
7) F e \mathbb{F}_{e} Fe F p \mathbb{F}_{p} Fp和 为所有sub-image的边缘和平面特征集合。如图2(d)。
8)从子图中的每一行提取具有最大c n F e n_{F_{e}} nFe个边缘特征,他们不属于地面
9)从子图中的每一行提取具有最小c n F p n_{F_{p}} nFp个平面特征,该特征点必须是地面点
10)前两步产生边缘集合 F e F_{e} Fe,平面集合 F p F_{p} Fp F e ⊂ F e , F p ⊂ F p F_{e} \subset \mathbb{F}_{e}, F_{p} \subset \mathbb{F}_{p} FeFe,FpFp F e F_{e} Fe F p F_{p} Fp的特征如图2(c)。

将360°范围图像分为6个子图像。每个子图像的分辨率为300乘16。令 n F e = 2 , n F p = 4 , n F e = 40 , n F p = 80 n_{F_{e}}=2,n_{F_{p}}=4,n_{\mathbb{F}_{e}}=40,n_{\mathbb{F_{p}}}=80 nFe=2,nFp=4,nFe=40,nFp=80

D.雷达里程计

估计两次连续扫描之间的传感器运动:

通过点对边和点对面扫描匹配找到两次扫描之间的变换。从前一次扫描的特征集合
F e t − 1 \mathbb{F_{e}^{t-1}} Fet1 F p t − 1 \mathbb{F_{p}^{t-1}} Fpt1中找到 n F p n_{F_{p}} nFp n F e n_{F_{e}} nFe中点的相应特征。

改进以提高匹配的准确性和效率:

1)标签匹配:
F e t F_{e}^{t} Fet F p t F_{p}^{t} Fpt中的特征都用标签进行编码,因此从 F e t − 1 \mathbb{F_{e}^{t-1}} Fet1 F p t − 1 \mathbb{F_{p}^{t-1}} Fpt1寻找具有相同标签的对应点。

对于 F p t F_{p}^{t} Fpt中的平面点,只有在 F p t − 1 \mathbb{F_{p}^{t-1}} Fpt1中被标记为地面点的才会被用于寻找 中对应的平面片。

对于 F e t F_{e}^{t} Fet中的边缘特征,从 F e t − 1 \mathbb{F_{e}^{t-1}} Fet1中寻找对应的边缘线。

这种方式提高匹配准确性,缩小了潜在对应特征的数量。

2)两步L-M优化:

两步L-M优化方法,最佳转换T分两步找到:
1)将 F p t F_{p}^{t} Fpt中的平面点和 F p t − 1 \mathbb{F_{p}^{t-1}} Fpt1中对应的特征相匹配,估计得到 [ t z , θ r o l l , θ p i t c h ] \left[t_{z}, \theta_{r o l l}, \theta_{p i t c h}\right] [tz,θroll,θpitch]

2)将 F e t F_{e}^{t} Fet中的边缘点和 F e t − 1 \mathbb{F_{e}^{t-1}} Fet1中对应的特征相匹配,加上附加条件 [ t z , θ r o l l , θ p i t c h ] \left[t_{z}, \theta_{roll}, \theta_{pitch}\right] [tz,θroll,θpitch],得到剩下的 [ t x , t y , θ y a w ] \left[t_{x}, t_{y}, \theta_{y a w}\right] [tx,ty,θyaw]

虽然 [ t x , t y , θ y a w ] \left[t_{x}, t_{y}, \theta_{y a w}\right] [tx,ty,θyaw]也可以放在第一步时进行,但这样准确度不高,得到的结果也不能继续放在第二步中使用。

2个连续scan之间的6自由度变换通过融合 [ t z , θ r o l l , θ p i t c h ] \left[t_{z}, \theta_{roll}, \theta_{pitch}\right] [tz,θroll,θpitch] [ t x , t y , θ y a w ] \left[t_{x}, t_{y}, \theta_{y a w}\right] [tx,ty,θyaw]获得。

两步L-M优化得到相同的精度,计算时间可以减少约35%(表3)。

E.雷达建图

雷达建图以较低的频率运行,匹配 { F e t , F p t } \left\{\mathbb{F}_{e}^{t},\mathbb{F}_{p}^{t}\right\} {Fet,Fpt}中的特征到点云地图 Q ‾ t − 1 \overline{Q}^{t-1} Qt1上,以优化位置变换。再用L-M方法得到最后的变换。

LeGO-LOAM的主要区别在于如何存储最终点云图:
保存每个单独的特征集 { F e t , F p t } \left\{\mathbb{F}_{e}^{t}, \mathbb{F}_{p}^{t}\right\} {Fet,Fpt},而不是保存单个点云图。

例如, M t − 1 = { { F e 1 , F p 1 } , … , { F e t − 1 , F p t − 1 } } M^{t-1}=\left\{\left\{\mathbb{F}_{e}^{1}, \mathbb{F}_{p}^{1}\right\}, \ldots,\left\{\mathbb{F}_{e}^{t-1}, \mathbb{F}_{p}^{t-1}\right\}\right\} Mt1={{Fe1,Fp1},,{Fet1,Fpt1}}表示以前所有特征集合的集合。每个 M t − 1 M^{t-1} Mt1中的每个特征集合和雷达scan时pose相关联。

通过 M t − 1 M^{t-1} Mt1得到 Q ‾ t − 1 \overline{Q}^{t-1} Qt1有两种方式:

第一种和Zhang Ji论文类似,选择在传感器视野里面的特征点集获得 Q ‾ t − 1 \overline{Q}^{t-1} Qt1。选择距离当前传感器位置100m以内的特征集合。选择的特征集合然后变换和融合到单个周围地图 Q ‾ t − 1 \overline{Q}^{t-1} Qt1

第二种,在LeGO-LOAM中集成图优化方法。

1)图的节点:每个特征集合的传感器位姿。

特征集合 { F e t , F p t } \left\{\mathbb{F}_{e}^{t}, \mathbb{F}_{p}^{t}\right\} {Fet,Fpt}被看做为这个节点上的传感器测量数据。

2)雷达建图模型的位姿估计drift很低,假设在短时间内没有drift。通过选择一组近来的特征集合来构成 Q ‾ t − 1 \overline{Q}^{t-1} Qt1,例如 Q ‾ t − 1 = { { F e t − k , F p t − k } , … , { F e t − 1 , F p t − 1 } \overline{Q}^{t-1}=\left\{\left\{\mathbb{F}_{e}^{t-k}, \mathbb{F}_{p}^{t-k}\right\}, \ldots,\left\{\mathbb{F}_{e}^{t-1}, \mathbb{F}_{p}^{t-1}\right\}\right. Qt1={{Fetk,Fptk},,{Fet1,Fpt1}(其中k表示 Q ‾ t − 1 \overline{Q}^{t-1} Qt1的大小)。

3)新节点和 Q ‾ t − 1 \overline{Q}^{t-1} Qt1中的已选节点之间加上空间约束(通过L-M优化得到的坐标变换)。

4)用loop closure进一步消除雷达建图的drift。如果用ICP发现当前特征集和先前特征集之间有匹配,则添加新约束。然后通过将姿势图发送到诸如[24](iSAM2)的优化系统来更新传感器的估计pose。
注意,只有第四节(D)中的实验使用此技术来创建其周围的地图。

4.实验

5.结论

参考文献

[1] P.J. Besl and N.D. McKay, “A Method for Registration of 3D Shapes,” IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 14(2): 239-256, 1992.
[2] S. Rusinkiewicz and M. Levoy, “Efficient Variants of the ICP Algorithm,” Proceedings of the Third International Conference on 3-D Digital Imaging and Modeling, pp. 145-152, 2001.
[3] Y. Chen and G. Medioni, “Object Modelling by Registration of Multiple Range Images,” Image and Vision Computing, vol. 10(3): 145-155, 1992.
[4] A. Segal, D. Haehnel, and S. Thrun, “Generalized-ICP,” Proceedings of Robotics: Science and Systems, 2009.
[5] R.A. Newcombe, S. Izadi, O. Hilliges, D. Molyneaux, D. Kim, A.J. Davison, P. Kohi, J. Shotton, S. Hodges, and A. Fitzgibbon, “KinectFusion: Real-time Dense Surface Mapping and Tracking,” Proceedings of the IEEE International Symposium on Mixed and Augmented Reality, pp. 127-136, 2011.
[6] A. Nuchter, “Parallelization of Scan Matching for Robotic 3D Mapping,” Proceedings of the 3rd European Conference on Mobile Robots, 2007.
[7] D. Qiu, S. May, and A. Nuchter, “GPU-Accelerated Nearest Neighbor Search for 3D Registration,” Proceedings of the International Conference on Computer Vision Systems, pp. 194-203, 2009.
[8] D. Neumann, F. Lugauer, S. Bauer, J. Wasza, and J. Hornegger, “Realtime RGB-D Mapping and 3D Modeling on the GPU Using the Random Ball Cover Data Structure,” IEEE International Conference on Computer Vision Workshops, pp. 1161-1167, 2011.
[9] R.B. Rusu, Z.C. Marton, N. Blodow, and M. Beetz, “Learning Informative Point Classes for the Acquisition of Object Model Maps,” Proceedings of the IEEE International Conference on Control, Automation, Robotics and Vision, pp. 643-650, 2008.
[10] R.B. Rusu, G. Bradski, R. Thibaux, and J. Hsu, “Fast 3D Recognition and Pose Using the Viewpoint Feature Histogram,” Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems, pp. 2155-2162, 2010.
[11] Y. Li and E.B. Olson, “Structure Tensors for General Purpose LIDAR Feature Extraction,” Proceedings of the IEEE International Conference on Robotics and Automation, pp. 1869-1874, 2011.
[12] J. Serafin, E. Olson, and G. Grisetti, “Fast and Robust 3D Feature Extraction from Sparse Point Clouds,” Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems, pp. 4105-4112, 2016.
[13] M. Bosse and R. Zlot, “Keypoint Design and Evaluation for Place Recognition in 2D Lidar Maps,” Robotics and Autonomous Systems, vol. 57(12): 1211-1224, 2009.
[14] R. Zlot and M. Bosse, “Efficient Large-scale 3D Mobile Mapping and Surface Reconstruction of an Underground Mine,” Proceedings of the 8th International Conference on Field and Service Robotics, 2012.
[15] B. Steder, G. Grisetti, and W. Burgard, ”Robust Place Recognition for 3D Range Data Based on Point Features,” Proceedings of the IEEE International Conference on Robotics and Automation, pp. 1400-1405, 2010.
[16] W.S. Grant, R.C. Voorhies, and L. Itti, “Finding Planes in LiDAR Point Clouds for Real-time Registration,” Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems, pp. 4347-4354, 2013.
[17] M. Velas, M. Spanel, and A. Herout, “Collar Line Segments for Fast Odometry Estimation from Velodyne Point Clouds,” Proceedings of the IEEE International Conference on Robotics and Automation, pp. 4486-4495, 2016.
[18] R. Dube, D. Dugas, E. Stumm, J. Nieto, R. Siegwart, and C. Cadena,”SegMatch: Segment Based Place Recognition in 3D Point Clouds,” Proceedings of the IEEE International Conference on Robotics and Automation, pp. 5266-5272, 2017.
[19] J. Zhang and S. Singh, “LOAM: Lidar Odometry and Mapping in Real-time,” Proceedings of Robotics: Science and Systems, 2014.
[20] J. Zhang and S. Singh, “Low-drift and Real-time Lidar Odometry and Mapping,” Autonomous Robots, vol. 41(2): 401-416, 2017.
[21] A. Geiger, P. Lenz, and R. Urtasun, “Are We Ready for Autonomous Driving? The KITTI Vision Benchmark Suite”, Proceedings of theIEEE International Conference on Computer Vision and PatternRecognition, pp. 3354-3361, 2012.
[22] M. Himmelsbach, F.V. Hundelshausen, and H-J. Wuensche, “Fast Segmentation of 3D Point Clouds for Ground Vehicles,” Proceedings of the IEEE Intelligent Vehicles Symposium, pp. 560-565, 2010.
[23] I. Bogoslavskyi and C. Stachniss, “Fast Range Image-based Segmentation of Sparse 3D Laser Scans for Online Operation,” Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems, pp. 163-169, 2016.
[24] M. Kaess, H. Johannsson, R. Roberts, V. Ila, J.J. Leonard, and F. Dellaert, “iSAM2: Incremental Smoothing and Mapping Using the Bayes Tree,” The International Journal of Robotics Research 31, vol. 31(2): 216-235, 2012.
[25] M. Quigley, K. Conley, B. Gerkey, J. Faust, T. Foote, J. Leibs, R. Wheeler, and A.Y. Ng, “ROS: An Open-source Robot Operating System,” IEEE ICRA Workshop on Open Source Software, 2009.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeGO-LOAM论文翻译(内容精简) 的相关文章

  • SLAM方法汇总

    原文 http blog csdn net smartxxyx article details 53068855 目录 SLAM概述 SLAM一般处理流程包括track和map两部分 所谓的track是用来估计相机的位姿 也叫front e
  • LIO-SAM:在高斯牛顿法求解过程中用SO3代替欧拉角

    LIO SAM发表于IROS2020 是一个效果非常好的惯性 激光紧耦合里程计 我打算给我们的机器人搞一个激光里程计 于是打算把LIO SAM改一改搞过来 修改过程中发现一个问题 在里程计求解 mapOptimization的LMOptim
  • 《视觉SLAM十四讲》第一版源码slambook编译调试

    slambook master ch2 编译正常 log如下 slambook master ch2 mkdir build cd build cmake make j8 The C compiler identification is G
  • ROS激光SLAM导航理解

    ROS激光SLAM导航理解 注 最近学习ROS的激光导航知识 需要理清ROS的SLAM 环境感知 costmap 与导航算法 为防止自己忘记 将觉得有价值的内容收集于此 对AGV来说 SLAM是个大大坑 环境感知和局部运动控制也是大坑 学习
  • 速腾聚创雷达最新驱动安装(包含ring和timestamp)运行lio-sam

    记录一下搞slam的过程 ring和timestamp 最近想跑lio sam 需要用到ring和timestamp两个参数 lio sam作者用的velodyne雷达是带这两个参数的 但是rs雷达的老版驱动录制的点云包没有这两个参数 在g
  • 视觉SLAM实践入门——(20)视觉里程计之直接法

    多层直接法的过程 1 读图 随机取点并计算深度 2 创建图像金字塔 相机内参也需要缩放 并计算对应点的像素坐标 3 应用单层直接法 使用G N L M等方法 或者使用g2o ceres库 进行优化 源码中有一些地方会引起段错误 修改方法见下
  • 经典坐标变换案例代码剖析

    题目 设有小萝卜一号和小萝卜二号位于世界坐标系中 记世界坐标系为W 小萝卜们的坐标系为R1和 R2 小萝卜一号的位姿为q2 0 35 0 2 0 3 0 1 T t1 0 3 0 1 0 1 T 小萝卜二号的位姿为q2 0 5 0 4 0
  • [SLAM四元数基础系列一] 四元数定义 Hamilton vs JPL

    四元数定义 Hamilton vs JPL 简介 四种区分方式 Hamilton vs JPL 引用 不管是卡尔曼滤波或者BA优化形式的SLAM或者VIO系统中 都需要用到单位四元数 Quaternion 来表示旋转 主要是单位四元数表示旋
  • 激光SLAM7-基于已知位姿的构图算法

    1 通过覆盖栅格建图算法进行栅格地图的构建 1 1 Theory 1 2 code 这里没有判断idx和hitPtIndex是否有效 start of TODO 对对应的map的cell信息进行更新 1 2 3题内容 GridIndex h
  • Sophus安装踩坑

    装SLAM十四讲第二版提供的Sophus Eigen版本3 4 0 报错 home ch 下载 Sophus 13fb3288311485dc94e3226b69c9b59cd06ff94e test core test so2 cpp 9
  • 视觉SLAM技术及其应用(章国锋--复杂环境下的鲁棒SfM与SLAM)

    SLAM 同时定位与地图构建 机器人和计算机视觉领域的基本问题 在未知环境中定位自身方位并同时构建环境三维地图 应用广泛 增强现实 虚拟现实 机器人 无人驾驶 SLAM常用的传感器 红外传感器 较近距离感应 常用与扫地机器人 激光雷达 单线
  • lego-LOAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )---SLAM不学无术小问题

    LeGo LOAM跑自己的数据包无法显示全局地图问题 注意 本文笔者使用环境 Ubuntu18 04 ROS melodic 版本 背景 3D SLAM新手 在看到了各种狂拽炫酷的3D点云图的之后决定亲自上手一试 首先当然的是最为经典的LO
  • LeGO-LOAM代码详细注释版

    学习LeGO LOAM时 写的代码注释github代码链接 一部分注释来自github用户wykxwyc 一部分来自网上查阅 还有一部分是自己的理解 持续更新中
  • SLAM--三角测量SVD分解法、最小二乘法及R t矩阵的判断

    目录 一 三角测量 方法一 SVD分解法的推导 方法二 最小二乘法求解 二 ORB SLAM2 三角测量源码 三 利用Eigen源码实现三角测量 方法一 SVD分解法 方法二 最小二乘法求解 速度最快 方法三 利用OpenCV自带函数 四
  • Eigen几何模块的使用方法

    include
  • 视觉SLAM漫谈

    视觉SLAM漫谈 1 前言 开始做SLAM 机器人同时定位与建图 研究已经近一年了 从一年级开始对这个方向产生兴趣 到现在为止 也算是对这个领域有了大致的了解 然而越了解 越觉得这个方向难度很大 总体来讲有以下几个原因 入门资料很少 虽然国
  • ORB_SLAM2运行官方数据集/自己数据集

    官方数据集运行结果 WeChat 20230210194425 可以正常运行 自己数据集运行结果 自己的数据集 主要是用手机摄像头采集的实验室进行了一下简单的运行 可以成功运行 但是由于查看的相关程序的是死循环不能像运行官方数据集那样完整保
  • 3.Open3D教程——点云数据操作

    点云数据 本教程阐述了基本的点云用法 随需要的文件链接 1 显示点云 import open3d as o3d import numpy as np print Load a ply point cloud print it and ren
  • 什么是深度学习的无监督学习与有监督学习

    无监督学习 深度学习中的无监督学习方法是一种训练算法 它在没有标注输出的情况下从输入数据中学习模式和特征 这种方法的核心是探索和理解数据的内在结构和分布 而不是通过已知的输出来指导学习过程 无监督学习在深度学习领域有许多不同的形式和应用 以
  • 高翔博士Faster-LIO论文和算法解析

    说明 题目 Faster LIO 快速激光IMU里程计 参考链接 Faster LIO 快速激光IMU里程计 iVox Faster Lio 智行者高博团队开源的增量式稀疏体素结构 Faster Lio是高翔博士在Fast系列的新作 对标基

随机推荐

  • naive bayes java_Naive Bayes 朴素贝叶斯的JAVA代码实现

    最进写毕业论文找了下贝页斯的资料 这个文章讲的很好 转载下 链接http blog csdn net michael kong nju article details 12623557 comments 1 关于贝叶斯分类 bayes 是一
  • STM32—ADC详解入门(ADC读取烟雾传感器的值)

    目录 一 ADC是什么 二 ADC的性能指标 三 ADC特性 四 ADC通道 五 ADC转换顺序 六 ADC触发方式 七 ADC转化时间 八 ADC转化模式 九 实验 使用ADC读取烟雾传感器的值 1 配置 2 代码 一 ADC是什么 AD
  • MSYS2更换国内源

    今天安装了Msys64 但是Msys64使用的国外源实在太慢 必须更新为国内源 目前测试过国内最快是清华大学的源 我的安装路径为d msys64 为什么要安装在D盘 因为msys64需要不断更新数据和安装自己的软件 也就是说会占用越来越多的
  • 使用mnist数据集实现手写字体的识别

    1 MNIST是一个入门级的计算机视觉数据集 它包含各种手写数字图片 它也包含每一张图片对应的标签 告诉我们这个是数字几 该数据集包括60000行的训练数据集 mnist train 和10000行的测试数据集 mnist test 每一张
  • mysql索引左侧原则,你真的了解吗?

    前言 写这篇文章源自一位杠精同事提了个问题 左侧原则跟where条件顺序有无关系 我想了想 好像是有关系的 不敢确定 但是自己又懒得动手测试 于是发起ETC自动抬杠功能 强行杠了一拨 结果杠输了 接下来即是动手验证 预习执行计划 实践 咱们
  • Something about C

    What the hell How long since I touch with C What a pity I have to work with it now Global variable Better define a globa
  • c++中setw()与setfill()的用法详情

    c 中setw 与setfill 的用法详情 在C 中 setw int n 用来控制输出间隔 例如 cout lt lt s lt
  • 关于自搭网站XAMPP(三)MYSQL增删改查(水)

  • Ubuntu 18.04下载安装以及分区教程

    收藏一下写的超赞的博客 Ubuntu18 04安装教程 超详细的图文教程 安装Ubuntu Linux系统时硬盘分区最合理的方法ubuntu18 04分区设置 也安装过很多次ubuntu了 记录一下最重要的踩坑点 分区完成后会让选择安装启动
  • 算法之字符串匹配一

    目录 前言 BF算法 RK算法 总结 参考资料 前言 字符串匹配指的是一个短点的字符串与一个长点的字符串进行匹配 并确认短的字符串是否在长的字符串中存在 匹配算法有很多 本文介绍两种简单 容易理解的两种算法 BF算法和RK算法 BF算法 B
  • C语言版本数据结构03:顺序表+链表

    今天我们来学习数据结构的第一个顺序结构 顺序表和链表 1 线性表 线性表是我们要学的第一个结构 我们知道一串连续的数字或者字符想要在内存中存储可以用数组 但是我们又知道数组是静态的 那么如果我想要对这组数据进行增删查改呢 这就显现出线性表的
  • Mysql按数字大小排序String字段

    今天做项目的时候 遇到个小小的问题 在数据库中查询的时候 要用String类型的数字进行一下排序 结果是按照字符串排序来处理的 没有达到预想中的效果 于是先是想到将字符转成数字型的 在网上搜了一下 基本上都是这样做的 只不过很多人实现的方式
  • 内存检测工具Dr. Memory的使用

    Dr Memory是一个内存调试工具 它是一个开源免费的内存检测工具 它能够及时发现内存相关的编程错误 比如未初始化访问 内存非法访问 数组越界读 写 以及内存泄露等 它可以在Linux Windows Mac OS和Android操作系统
  • ngrok的使用(超详细)

    1 ngrok简介 百度百科 ngrok 是一个反向代理 通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道 ngrok 可捕获和分析所有通道上的流量 便于后期分析和重放 啥玩意 1 其实说白了就是你写一个项目 在PC上完美
  • 微信小程序合法域名配置

    在微信小程序的开发过程中 当需要请求第三方网站数据时 各种教程就直接说调用wx request接口即可 但是当初学者自己用的时候就会出现问题 比如我们这里请求聚合数据的API 里边有不少免费的数据申请就可以使用 调用邮编查询的接口 getP
  • Java中的wait()与notify()/notifyAll()

    1 wait 与sleep yield 的不同 调用sleep 和yield 时 线程掌握的对象上的锁不会被释放 而调用wait 时 线程掌握的对象上的锁会被释放掉 这一点是需要注意的 也是有意义的 因为调用wait 会释放锁 所以在一个s
  • 按键从Linux到Android

    按键从Linux到Android 现在的普通按键也集成到Linux Input子系统中了 只需要把按键对应的IO端口配置好 按键就可以工作了 所以一般提供的BSP 或者叫作解决方案 中 已经完善了按键驱动 关键是快速的了解按键的映射 所以这
  • objective c 中的继承和多态简单示意(二)

    holydancer原创 如需转载 请在显要位置注明 转自holydancer的CSDN专栏 原文地址 http blog csdn net holydancer article details 7334377 OC中的继承和JAVA C
  • 剑指Offer第四十九题:把字符串转换成整数

    题目描述 将一个字符串转换成一个整数 实现Integer valueOf string 的功能 但是string不符合数字要求时返回0 要求不能使用字符串转换整数的库函数 数值为0或者字符串不是一个合法的数值则返回0 思路 判断正负什么的都
  • LeGO-LOAM论文翻译(内容精简)

    LeGO LOAM是一种在LOAM之上进行改进的激光雷达建图方法 建图效果比LOAM要好 但是建图较为稀疏 计算量也更小了 本文原地址 wykxwyc的博客 github注释后LeGO LOAM源码 LeGO LOAM NOTED 关于代码