LeGO-LOAM

news2024/11/17 13:40:23

LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain

在可变地形上的轻量级的利用地面点优化的Iidar 里程计和 建图

作者:Tixiao Shan and Brendan Englot

Abstract— We propose a lightweight and ground-optimized lidar odometry and mapping method, LeGO-LOAM, for realtime six degree-of-freedom pose estimation with ground vehicles. LeGO-LOAM is lightweight, as it can achieve realtime pose estimation on a low-power embedded system. LeGOLOAM is ground-optimized, as it leverages the presence of a ground plane in its segmentation and optimization steps. We first apply point cloud segmentation to filter out noise, and feature extraction to obtain distinctive planar and edge features. A two-step Levenberg-Marquardt optimization method then uses the planar and edge features to solve different components of the six degree-of-freedom transformation across consecutive scans. We compare the performance of LeGO-LOAM with a state-of-the-art method, LOAM, using datasets gathered from variable-terrain environments with ground vehicles, and show that LeGO-LOAM achieves similar or better accuracy with reduced computational expense. We also integrate LeGO-LOAM
into a SLAM framework to eliminate the pose estimation error caused by drift, which is tested using the KITTI dataset.

我们提出了一种轻型和基于地面优化的激光雷达里程计和建图的方法LeGO-LOAM,用于地面车辆的实时六自由度姿态估计。

  • LeGO-LOAM是轻量的,因为它可以在低功耗嵌入式系统上实现实时姿态估计。
  • LeGOLOAM是基于地面优化的,它在分割和优化步骤中利用了地面。

具体步骤:

  1. 首先应用点云分割来滤除噪声
  2. 然后进行特征提取以获得不同的平面和边缘特征。
  3. 然后利用平面和边缘特征采用了两步Levenberg-Marquardt优化方法,来求解连续扫描中六自由度变换的不同分量。

我们使用车辆在不同地形环境中收集的数据集,将LeGO-LOAM的性能与LOAM进行了比较,结果表明,LeGO-LOAM在降低计算开支的情况下达到了与LOAM类似或更好的精度。我们还将LeGO-LOAM集成到SLAM框架中,以消除漂移引起的姿态估计误差,并使用KITTI数据集进行了测试。

state-of-the-art  最先进的;使用最先进技术的;体现最高水平的

I. INTRODUCTION
Among the capabilities of an intelligent robot, map-building and state estimation are among the most fundamental prerequisites. Great efforts have been devoted to achieving real-time 6 degree-of-freedom simultaneous localization and mapping (SLAM) with vision-based and lidar-based methods. Although vision-based methods have advantages in loop-closure detection, their sensitivity to illumination and viewpoint change may make such capabilities unreliable if used as the sole navigation sensor. On the other hand, lidar-based methods will function even at night, and the high resolution of many 3D lidars permits the capture of the fine details of an  environment at long ranges, over a wide aperture. Therefore, this paper focuses on using 3D lidar to support real-time state estimation and mapping.
对于智能机器人而言,地图构建和状态估计是最基本的先决要求之一。人们一直致力于利用基于视觉和基于激光雷达的方法实现实时6自由度同步定位和建图(SLAM)。

  • 基于视觉的方法在回环检测方面具有优势,但如果将其用作唯一的导航传感器,相机对于照明和视点变化的敏感性可能会使此类功能不可靠。
  • 基于激光雷达的方法即使在夜间也能发挥作用,许多3D激光雷达的高分辨率允许在大孔径上远距离捕捉环境的细节。

因此,本文主要研究利用三维激光雷达来实现SLAM。

The typical approach for finding the transformation between two lidar scans is iterative closest point (ICP) [1]. By finding correspondences at a point-wise level, ICP aligns two sets of points iteratively until stopping criteria are satisfied. When the scans include large quantities of points, ICP may suffer from prohibitive computational cost. Many variants of ICP have been proposed to improve its efficiency and accuracy [2]. [3] introduces a point-to-plane ICP variant that matches points to local planar patches. Generalized-ICP [4] proposes a method that matches local planar patches from both scans. In addition, several ICP variants have leveraged parallel computing for improved efficiency [5]–[8].
寻找两次激光雷达扫描之间位姿变换的典型方法是迭代最近邻(ICP)[1]。通过逐点查找对应关系,ICP迭代对齐两组点,直到满足停止条件为止。当扫描包含大量的点时,ICP可能会承受高昂的计算成本。为了提高ICP的效率和准确性,已经提出了许多ICP变体[2]。[3] 介绍一种点到平面ICP变体,该方法将点与局部平面面片相匹配。广义ICP[4]提出了一种匹配两次扫描的局部平面面片的方法。此外,几个ICP变种利用了并行计算来提高效率[5]–[8]。 

Feature-based matching methods are attracting more attention, as they require less  computational resources by extracting representative features from the environment. These
features should be suitable for effective matching and invariant of point-of-view. Many detectors, such as Point Feature Histograms (PFH) [9] and Viewpoint Feature Histograms (VFH) [10], have been proposed for extracting such features from point clouds using simple and efficient  techniques. A method for extracting general-purpose features from point clouds using a Kanade-Tomasi corner detector is introduced in [11]. A framework for extracting line and plane features
from dense point clouds is discussed in [12].
基于特征的匹配方法越来越受到人们的关注,因为它们通过从环境中提取具有代表性的特征来减少计算资源。这些特征应适用于有效匹配和视点不变性。社区已经提出了许多检测器,例如点特征直方图(PFH)[9]和视点特征直方图(VFH)[10],用于使用简单有效的技术从点云中提取此类特征。[11]介绍了一种使用Kanade-Tomasi角点检测器从点云中提取通用特征的方法。[12]讨论了从密集点云中提取直线和平面特征的框架。

Many algorithms that use features for point cloud registration have also been proposed. [13] and [14] present a keypoint selection algorithm that performs point curvature calculations in a local cluster. The selected keypoints are then used to perform matching and place recognition. By
projecting a point cloud onto a range image and analyzing the second derivative of the depth values, [15] selects features from points that have high curvature for matching and place recognition. Assuming the environment is composed of planes, a plane-based registration algorithm is proposed in [16]. An outdoor environment, e.g., a forest, may limit the application of such a method. A collar line segments (CLS) method, which is especially designed for Velodyne lidar, is presented in [17]. CLS randomly generates lines using points from two consecutive “rings” of a scan. Thus two line clouds are generated and used for registration. However, this method suffers from challenges arising from the random generation of lines. A segmentation-based registration algorithm is proposed in [18]. SegMatch first applies segmentation to a point
cloud. Then a feature vector is calculated for each segment based on its eigenvalues and shape histograms. A random forest is used to match the segments from two scans. Though this method can be used for online pose estimation, it can only provide localization updates at about 1Hz.
许多使用特征进行点云配准的算法也被提出。[13] [14]提出了一种关键点选择算法,该算法在局部簇中执行点曲率计算。然后使用选定的关键点执行匹配和位置识别。通过将点云投影到距离图像上并分析深度值的二阶导数,[15]从具有高曲率的点中选择特征进行匹配和位置识别。假设环境由平面组成,在[16]中提出了一种基于平面的配准算法。室外环境,例如森林,可能会限制这种方法的应用。文献[17]中介绍了专门为Velodyne激光雷达设计的项圈线段(CLS)方法。CLS使用扫描的两个连续“环”中的点随机生成线。因此,将生成两个线云并用于注册。然而,这种方法受到随机生成线的挑战。文献[18]提出了一种基于分割的配准算法。SegMatch首先将分段应用于点云。然后根据特征值和形状直方图计算每个线段的特征向量。随机林用于匹配两次扫描的段。虽然这种方法可以用于在线姿态估计,但它只能提供1Hz左右的定位更新。

A low-drift and real-time lidar odometry and mapping (LOAM) method is proposed in [19] and [20]. LOAM performs point feature to edge/plane scan-matching to find correspondences between scans. Features are extracted by calculating the roughness of a point in its local region.
The points with high roughness values are selected as edge features. Similarly, the points with low roughness values are designated planar features. Real-time performance is
achieved by novelly dividing the estimation problem across two individual algorithms. One algorithm runs at high frequency and estimates sensor velocity at low accuracy. The
other algorithm runs at low frequency but returns high-accuracy motion estimation. The two estimates are fused together to produce a single motion estimate at both high frequency and high accuracy. LOAM’s resulting accuracy is the best achieved by a lidar-only estimation method on the KITTI odometry benchmark site [21].
[19]和[20]中提出了一种低漂移实时激光雷达里程计和建图(LOAM)方法。LOAM执行点特征到边/平面的扫描匹配,以查找扫描之间的对应关系。通过计算局部点的曲率(roughness) 来提取特征。选择曲率(roughness)较高的点作为边缘特征。同样,曲率(roughness)较低的点被指定为平面特征。实时性能是通过将估计问题分为两个单独的算法来实现的。一种算法运行频率高,以较低的精度估计传感器的速度。另一种算法运行频率较低,但可以以高精度获得运动估计。将这两个估计值融合在一起,以产生高频和高精度的单个运动估计值。在KITTI里程计基准点上,通过仅使用激光雷达的估算方法,LOAM的结果精度达到最佳[21]。

In this work, we pursue reliable, real-time six degreeof-freedom pose estimation for ground vehicles equipped with 3D lidar, in a manner that is amenable to efficient implementation on a small-scale embedded system. Such a task is non-trivial for several reasons. Many unmanned
ground vehicles (UGVs) do not have suspensions or powerful computational units due to their limited size. Non-smooth motion is frequently encountered by small UGVs driving on
variable terrain, and as a result, the acquired data is often distorted. Reliable feature correspondences are also hard to find between two consecutive scans due to large motions
with limited overlap. Besides that, the large quantities of points received from a 3D lidar poses a challenge to real-time processing using limited on-board computational resources.
在这项工作中,我们致力于为安装了3D激光雷达的地面车辆提供可靠、实时的六自由度姿态估计,其方式在小型嵌入式系统上可以实现高效运转。出于几个原因,这样一项任务并非微不足道。由于尺寸有限,许多无人地面车辆(UGV)没有悬架或强大的计算单元。小型无人地面车辆(UGV)在多变的地形上行驶时,经常会遇到非平稳运动,因此,采集的数据往往会带有运动畸变。由于在较大的运动下只有有限的重叠区域,在两次连续扫描之间也很难找到可靠的特征对应。此外,从3D激光雷达接收到的大量点对使用有限的车载计算资源进行实时处理提出了挑战。

When we implement LOAM for such tasks, we can obtain low-drift motion estimation when a UGV is operated with smooth motion admist stable features, and supported by sufficient computational resources. However, the performance of LOAM deteriorates when resources are limited. Due to the need to compute the roughness of every point in a dense 3D point cloud, the update frequency of feature extraction on a lightweight embedded system cannot always keep up with the sensor update frequency. Operation of UGVs in noisy environments also poses challenges for LOAM. Since the mounting position of a lidar is often close to the ground on
a small UGV, sensor noise from the ground may be a constant presence. For example, range returns from grass may result in high roughness values. As a consequence, unreliable edge
features may be extracted from these points. Similarly, edge or planar features may also be extracted from points returned from tree leaves. Such features are usually not reliable for
scan-matching, as the same grass blade or leaf may not be seen in two consecutive scans. Using these features may lead to inaccurate registration and large drift.
当我们为这些任务实施LOAM时,当UGV以平滑运动和稳定特性运行,并且有足够的计算资源支持时,我们可以获得低漂移运动估计。然而,当资源受限时,LOAM的性能会恶化。由于需要计算密集三维点云中每个点的曲率(roughness),轻量级嵌入式系统上特征提取的更新频率不能始终跟上传感器的更新频率。UGV在噪声环境中的运行也对loam提出了挑战。由于在小型无人地面车辆(UGV)上,激光雷达的安装位置通常接近地面,因此来自地面的传感器噪声可能持续存在。例如,从草地返回的激光可能会存在较高的roughness values。因此,可能会从这些点提取不可靠的边缘特征。类似地,激光也会从树叶返回的点中提取边缘或平面特征。这种特征对于扫描匹配通常不可靠,因为在两次连续扫描中可能看不到相同的草叶或树叶。使用这些特征可能会导致不准确的对齐和较大的drift。

We therefore propose a lightweight and ground-optimized LOAM (LeGO-LOAM) for pose estimation of UGVs in complex environments with variable terrain. LeGO-LOAM
is lightweight, as real-time pose estimation and mapping can be achieved on an embedded system. Point cloud segmentation is performed to discard points that may represent
unreliable features after ground separation. LeGO-LOAM is also ground-optimized, as we introduce a two-step optimization for pose estimation. Planar features extracted from
the ground are used to obtain [tz; θroll; θpitch] during the first step. In the second step, the rest of the transformation [tx; ty; θyaw] is obtained by matching edge features extracted
from the segmented point cloud. We also integrate the ability to perform loop closures to correct motion estimation drift. The rest of the paper is organized as follows. Section II introduces the hardware used for experiments. Section III describes the proposed method in detail. Section IV presents a set of experiments over a variety of outdoor environments.

因此,我们提出了一种轻量化,面向地面优化的LOAM(LeGO-LOAM),用于复杂地形环境中UGV的姿态估计。LeGO-LOAM是轻量级的,可以在嵌入式系统上实现实时姿态估计和建图。执行点云分割以在分离地面之后,丢弃那些可能代表不可靠特征的点。 LeGO-LOAM也是基于地面优化的,我们提出了两步优化姿势估计的方法。

在第一步中,使用从地面提取的平面特征来获得[tz; θroll; θpitch](利用前后帧匹配的地面点)。

在第二步中,变换的其余部分 [tx; ty; θyaw] 通过匹配 分割点云提取的边缘特征 来获得。

我们还集成了回环检测的能力,以纠正运动估计漂移。

论文的其余部分组织如下。

第二节介绍了用于实验的硬件。

第三节详细介绍了提出的方法。

第四节介绍了在各种室外环境下进行的一系列实验。

II. SYSTEM HARDWARE

The framework proposed in this paper is validated using datasets gathered from Velodyne VLP-16 and HDL-64E 3D lidars. The VLP-16 measurement range is up to 100m with an accuracy of ± 3cm. It has a vertical field of view (FOV) of 30(±15) and a horizontal FOV of 360. The 16-channel sensor provides a vertical angular resolution of 2. The horizontal angular resolution varies from 0.1to 0.4based on the rotation rate. Throughout the paper, we choose a scan rate of 10Hz, which provides a horizontal angular resolution of 0.2. The HDL-64E (explored in this work via the KITTI dataset) also has a horizontal FOV of 360but 48 more channels. The vertical FOV of the HDL-64E is 26.9.

二、系统硬件

使用从Velodyne VLP-16和HDL-64E 3D激光雷达收集的数据集验证了本文提出的框架。

VLP-16测量范围可达100m,精度为±3cm。它的垂直视野(FOV)为30◦(±15◦) 水平视场360度◦. 16通道传感器提供2的垂直角度分辨率◦. 水平角度分辨率为0.1◦ 至0.4◦ 基于旋转速率。在本文中,我们选择了10Hz的扫描速率,其水平角度分辨率为0.2◦. HDL-64E(本研究通过KITTI数据集探索)的水平视场也为360◦ 但还有48个频道。HDL-64E的垂直视场为26.9◦.

The UGV used in this paper is the Clearpath Jackal. Powered by a 270 Watt hour Lithium battery, it has a maximum speed of 2.0m/s and maximum payload of 20kg. The Jackal is also equipped with a low-cost inertial measurement unit (IMU), the CH Robotics UM6 Orientation Sensor.

本文中使用的无人值守地面车辆是Clearpath Jackal。由270瓦时锂电池供电,最大速度为2.0m/s,最大有效载荷为20kg。豺狼还配备了低成本惯性测量单元(IMU),即CH Robotics UM6方向传感器。

The proposed framework is validated on two computers: an Nvidia Jetson TX2 and a laptop with a 2.5GHz i7-4710MQ CPU. The Jetson TX2 is an embedded computing device that is equipped with an ARM Cortex-A57 CPU. The laptop CPU was selected to match the computing hardware used in [19] and [20]. The experiments shown in this paper use the CPUs of these systems only.  

该框架在两台计算机上进行了验证:一台Nvidia Jetson TX2和一台配备2.5GHz i7-4710MQ CPU的笔记本电脑。Jetson TX2是一款嵌入式计算设备,配备ARM Cortex-A57 CPU。选择笔记本电脑CPU以匹配[19]和[20]中使用的计算硬件。本文中的实验仅使用这些系统的CPU。

III. LIGHTWEIGHT LIDAR ODOMETRY AND MAPPING
A. System Overview
An overview of the proposed framework is shown in Figure 1. The system receives input from a 3D lidar and outputs 6 DOF pose estimation. The overall system is divided into five modules. The first, segmentation, takes a single scan’s point cloud and projects it onto a range image for
segmentation. The segmented point cloud is then sent to the feature extraction module. Then, lidar odometry uses features extracted from the previous module to find the transformation relating consecutive scans. The features are further processed in lidar mapping, which registers them to a global point cloud map. At last, the transform integration module fuses the pose estimation results from lidar odometry and lidar mapping and outputs the final pose estimate. The
proposed system seeks improved efficiency and accuracy for ground vehicles, with respect to the original, generalized LOAM framework of [19] and [20]. The details of these modules are introduced below.

论文框架的概述如图1所示。该系统接收来自3D激光雷达的输入,并输出6个自由度的姿态估计。

整个系统分为五个模块。

第一个模块是分割(分类),将单个扫描的点云投影到范围图像上进行分割(分类)。

然后将分割后的点云发送到特征提取模块,激光雷达里程计从上述模块中提取特征,找到与连续扫描相关的变换。

这些特征将在LIDAR建图模块中做进一步的处理,该模块会将它们对齐到全局点云地图。

最后,变换积分模块将激光雷达里程计和激光雷达建图的姿态估计结果进行融合,输出最终的姿态估计。与[19]和[20]的原始广义的LOAM框架相比,所提出的方法寻求提高地面车辆的效率和精度。下面介绍这些模块的详细信息。

 Fig. 2: Feature extraction process for a scan in noisy environment. The original point cloud is shown in (a). In (b), the red points are labeled as ground points. The rest of the points are the points that remain after segmentation. In (c), blue and yellow points indicate edge and planar features in Fe and Fp. In (d), the green and pink points represent edge and planar features in\mathbb{F}{_{e}} and \mathbb{F}{_{p}} respectively.

图2:噪声环境中扫描的特征提取过程。原始点云如(a)所示。

在(b)中,红点为标记为接地点。其余的点是分割后保留。

在(c)中,蓝色和黄色点表示Fe和Fp中的边和平面特征。

在(d)中,绿色和粉色点分别表示\mathbb{F}{_{e}}\mathbb{F}{_{p}}中的边缘和平面特征。

 

 B. Segmentation
Let Pt = fp1; p2; :::; png be the point cloud acquired at time t, where pi is a point in Pt. Pt is first projected onto a range image. The resolution of the projected range image is 1800 by 16, since the VLP-16 has horizontal and vertical angular resolution of 0.2◦ and 2◦ respectively. Each valid
point pi in Pt is now represented by a unique pixel in the range image. The range value ri that is associated with pi represents the Euclidean distance from the corresponding point pi to the sensor. Since sloped terrain is common in many environments, we do not assume the ground is flat. A column-wise evaluation of the range image, which can be viewed as ground plane estimation [22], is conducted for ground point extraction before segmentation. After this
process, points that may represent the ground are labeled as ground points and not used for segmentation.

开源地址:

GitHub - RobustFieldAutonomyLab/LeGO-LOAM: LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain

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

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

相关文章

Bi-CLKT: Bi-Graph Contrastive Learning based Knowledge Tracing

图对比学习 文章目录摘要1 引言2 相关工作2.2 自监督学习2.3 图上的对比学习摘要 知识追踪(KT)的目标是根据学生对相关练习的历史学习来估计他们对一个概念的掌握程度。知识追踪的好处是可以更好地组织和调整学生的学习计划,并在必要时进行干预。随着深度学习的兴起…

回顾10年发展,2022亚马逊云科技re:Invent全球大会即将来袭

每年的亚马逊云科技re:Invent全球大会,都是全球云计算领域每年创新发布的关键节点,亚马逊云科技的这些技术发布,无一例外地成为了云计算领域技术发展的风向标,而今年的re:Invent全球大会即将启幕! 2012年,亚…

Java基础40 断点调试(Debug)

DebugDebug介绍一、debug的使用二、Debug的使用使用1使用2 数组越界异常使用3 追溯源码使用4 直接执行到下一个断点Debug介绍 在开发中,新手程序员在查找错误时,这时老程序员就会提示,可以使用断点调试,一步一步的看源码执行的过…

使用QT绘制一个多边形

目录 1. 概述2. 实现2.1. 代码2.2. 解析3. 结果 1. 概述 可以通过QT的重绘事件和鼠标事件来绘制多边形,最简单的办法就是在继承QWidget的窗体中重写paintEvent、mousePressEvent等事件处理函数。QT提供了图形绘制接口QPainter,通过该接口可以绘制多种图…

易基因|脂多糖诱导的仔猪肝脏损伤模型中m6A RNA甲基化介导了NOD1/NF-kB信号激活

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 2022年9月30日,南京农业大学动物科技学院钟翔教授团队在《ANTIOXIDANTS-BASEL》杂志发表题为“m6A RNA Methylation Mediates NOD1/NF-kB Signaling Activation in the Liver…

AlmaLinux 9上安装Kubernetes 1.25集群

AlmaLinux 9上安装Kubernetes 1.25集群 0. 确认Linux版本 uname -a1. 禁用swap sudo swapoff -a2. 禁用防火墙 sudo systemctl stop firewalld sudo systemctl disable firewalld3. 将SELinux设置为permissive模式 sudo setenforce 0 sudo sed -i s/^SELINUXenforcing$/SE…

Postgres 史上最垃圾的高可用软件之 - CLup

1. Clup 简介 CLup最大的特色功能是高可用。目前已存在几个开源的高可用软件: keepalived: 是一个较简单的高可用软件,其最早是于用LVS负载均衡软件,现在也常常用于ngnix的高可用,也可以用于数据库领域,但需要自己定制切换脚本才…

Oracle 11g DataGuard 搭建笔记(Windows Server 2016)

0.目录 目录 0.目录 1.需求 2.开发环境 3.DataGuard主从库参数环境规划 4.网络环境 5.主库-DataGuard配置 5.1查询及启用强制记录日志 5.3查询及启用归档 5.4主库参数配置 5.4.1查看db_unique_name及修改 5.4.2修改参数log_archive_config 5.4.3修改参数log_archive_dest_1 5.4…

部署前端报错404 hash 以及history模式下面前端、后端如何配置

问题描述:前端 本地页面 正常展示 、部署后刷新浏览器如上: vue-router(前端路由)有两种模式,hash模式和history模式 原理的区别(原理) 1、hash ——即地址栏URL中的#符号。 hash 虽然出现URL…

Sealos 安装报错问题解决

sealos 是以 kubernetes 为内核的云操作系统发行版,看其他人通过sealos安装k8s集群十分丝滑,但自己实践的时候为什么报错频繁呢? 官网介绍: sealos.io1 先决条件 每个集群节点应该有不同的主机名。 主机名不要带下划线。所有节点的时间同步。在 Kubernetes 集群的第一个节点…

数组中出现次数超过一半的数字、替换空格、重建二叉树

1、数组中出现次数超过一半的数字 本题考点: 数组使用,简单算法的设计 牛客链接 题目描述: 给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如输入一个长度为9的数组[1,2,…

企业如何利用 Serverless 快速扩展业务系统?

2022 年 9 月 24 日,阿里云用户组(AUG)第 12 期活动在厦门举办。活动现场,阿里云高级技术专家史明伟(花名:世如)向参会企业代表分享了《未来已来——从技术升级到降本提效》。本文根据演讲内容整…

引擎入门 | Unity UI简介–第1部分(8)

本期我们继续为大家进行Unity UI简介(第一部分)的后续教程 本篇内容 17.9-Slice缩放 18.准备按钮图像 19.设置按钮图像 20.为按钮设置自定义字体 文章末尾可免费获取教程源代码 本篇Unity UI简介(第一部分)篇幅较长&#x…

Spring源码深度解析:八、bean的获取② - getSingleton

一、前言 文章目录:Spring源码分析:文章目录 在Spring源码分析七 :bean的加载① - doGetBean 文章中,我们介绍了Spring对获取bean的过程,但是并没有详细解释Bean是如何创建的,本文就来分析Spring是如何创…

Mybatis 源码分析

mybatis 的一些总结 XMLConfigBuilder mybatis 的配置文件解析的能力是交给了XMLCconfigBuilder 去解析的 public SqlSessionFactory build(Reader reader, String environment, Properties properties) {try {XMLConfigBuilder parser new XMLConfigBuilder(reader, envir…

JDK内置命令工具

JDK内置命令工具 jps 作用 查看java进程的pid和全路径主类名和jvm参数 使用 -l : 输出所有正在运行java进程的pid 和主类名-v :输出正在运行java进程的pid和主类名和运行参数 jstack 作用 查看某个java进程当前的堆栈信息, 也就是当前进程中的线程…

NIO与BIO服务器端对比

本文利用NIO实现一个重复回复,客户端发送什么信息,客户端就会收到什么信息。 主要是理解NIO与BIO的区别。客户端采用telnet进行测试,以下连接是Telnet安装的方法。 Telnet的简单使用_武汉小喽啰的博客-CSDN博客_telnet 注意!&a…

POSIX信号量

文章目录概念信号量函数基于环形队列的生产消费模型概念 信号量是一个计数器,用来描述临界资源数量的计数器。 每个执行流要进入临界资源时,要先申请信号量,出临界资源时,要释放信号量。 信号量的PV操作 P操作:申请…

万字长文总结分布式事务,总有一款适合你

导语:本文参考网络相关文章,主要总结了XA, 2PC, 3PC, 本地事务状态表, 可靠消息队列, 最大努力通知, TCC, SAGA等分布式事务的特点和适用场景,为大家选择分布式事务提供一些参考。 概述 分布式事务是指事务的参与者、支持事务的服务器、资源…

宝刀未老!阿里P8老兵耗时三年总结出这份Java项目实战文档

文档特点: 为了方便小伙伴们能更好地阅读,我已经提前给大家整理好了学习路线和知识结构 本书综合讲解Java程序设计中的核心技术,全书一共设计为22章,章节结构如下。 需要获取的小伙伴可以直接转发关注后私信(学习&…