《Optimising the selection of samples for robust lidar camera calibration》论文解读

Abstract

我们提出了一个鲁棒的标定方法,优化标定样本的选择,以估计适合整个场景的标定参数。我们根据一种被称为质量可变性(VOQ)的指标自动化数据选择过程,将用户误差最小化,该指标为每一组标定样本打分。我们表明,这种VOQ评分与估计的标定参数对整个场景的泛化能力有关,从而克服了现有标定算法的过拟合问题。我们的方法的好处是,为任何标定专业水平的从业人员简化了标定过程,并为我们的标定方法的输入和输出数据提供了一个客观的质量衡量。我们还使用了一种新的方法来评估标定参数的准确性。它涉及到计算整个场景的重投影误差,以确保参数能够很好地拟合场景中的所有特征。我们所提出的标定方法耗时90s,平均再投影误差为1-1.2cm,在场景中平均分布46个位姿时,标准偏差为0.4- 0.5cm。这一过程已在高分辨率、软件可定义的激光雷达barajspectramscantm和一个低、固定分辨率的激光雷达Velodyne VLP-16上进行了实验验证。我们已经证明,尽管激光雷达技术存在巨大差异,但我们提出的方法都能够估计出鲁棒性的标定参数。我们在本文中使用的代码和数据集可在 link找到。

1.INTRODUCTION

自动驾驶汽车需要快速准确地感知周围环境,以便做出知情的实时决策。相机在提供纹理和颜色信息方面表现出色,这些信息已显示为分类的重要特征。然而,当面对不利的照明条件,如昏暗或明亮的照明条件,相机往往难以提供有意义的信息。另一方面,光探测和测距(lidar)系统对光照变化更鲁棒,能够毫不费力地从场景中获得准确的深度信息。将3D深度信息与2D颜色和纹理信息相结合,自动驾驶汽车可以克服这些传感器模式的隐性限制,实现更强大、更准确的感知能力。为了充分利用相机和激光雷达的优势,必须有一个准确的外参标定,以获得这两个传感器帧之间的旋转和平移参数。在实际应用中,有一个精确的标定使激光雷达点投影到图像去创建一个深度图像,或者反过来,将颜色信息投射到点云中以创建彩色点云。这具有重要的意义,因为它不仅允许我们做出更明智的决定,而且还可以充分利用每个传感器在各自领域的能力。这方面的一个例子是:从CNN标记的图像中投影语义信息,以创建一个标记的点云[5],[6],或者使用2D对象包围框生成3D截锥作为区域建议,用于3D对象检测[7],[8]。

在这里插入图片描述

标定的基本理论问题是两帧(相机和激光雷达)之间的变换计算,这在理论上是可以解决的,但在实际应用中往往被低估。在实际应用中,由于经常受到人为、环境和传感器误差的影响,如何实现对标定的鲁棒性和准确性的估计是主要的挑战。现有的标定工作可分为两类:
(1)Target-based:在受控环境下进行,通常是在室内以减小环境因素的影响。
(2) Targetless:利用环境特征,消除标定过程中的人为因素。

在这里插入图片描述

虽然无目标的方法很方便,但现有的方法通常需要很好的初始标定,而且由于来自自然场景[13],[3]的特征关联存在噪声和不一致性,所以不那么精确。另一方面,基于目标的方法,虽然更繁琐和耗时,但能够提供更精确的标定,而不需要初始估计。因此,在使用这两种方法中的任何一种时,往往需要在方便和准确性之间进行权衡。然而,标定的准确性无疑更为重要,因为标定结果是许多多模态感知算法建立的基础。因此,本文着重对基于目标的方法进行改进,使其对人为误差和传感器误差具有更强的鲁棒性和准确性。

许多基于目标的摄像机和激光雷达外部标定方法已经被提出,但在实践中,它们的标定过程常常充满了寻找最佳姿态的尝试和错误。外参标定参数非常敏感,因为旋转或平移估计中的小误差会极大地影响标定结果的可用性[14]。这种敏感性通常归因于特征提取过程中由于传感器测量误差而产生的噪声,这些噪声导致了[15]、[16]、[14]平面拟合或边缘[15]直线拟合的不确定性[16]。

要找到一个完美的标定是很有挑战性的,因为没有靠谱的真值。为了评价标定结果的质量,通常需要计算目标标定后的再投影误差。然而,尽管这些方法巧妙地设计了代价函数来优化目标的对齐,但它经常会导致过度拟合的目标和不拟合的场景,如图2a和图2b所示。这是因为当目标可以在更近的距离内拟合时,估计参数的误差会随着距离的增大而增大,误差在远处的物体上更为明显。现有的很多工作[1],[2],[3],[4]可能经常只显示Fig. 2a,并且报告它的重投影误差很低,但是这对于那些试图使用这种方法的人来说是一种误导,他们认为他们可以得到对整个场景的很好的标定。此外,可以很好地拟合目标的可能参数有一定的范围,但从图2b和图2c对比可以看出,并不是所有的参数都能很好地拟合场景。

基于目标的标定流程一般包括数据采集、特征提取和标定算法三个部分。许多作者通常关注标定的特征提取和算法方面,但很少关注关键的数据收集方面。良好数据的重要性通常在许多机器学习算法中被强调,但在外参标定方法中却不是这样。在这项工作中,我们证明了估计的标定参数对场景特征的正确对齐及其不确定性在很大程度上受到输入到标定算法的数据质量的影响。我们采用现有的基于目标的方法[16]进行标定,因为我们认为现有算法是有效的,但由于难以收集到高质量的样本,存在用户误差。

我们工作的动机是提供一种标定工具,它非常适合场景,可以被任何用户以开箱即用的方式使用,而无需考虑标定专业知识。我们的方法允许用户简单地记录尽可能多的变化姿势,并让我们的算法自动选择最佳姿势进行标定。实际上,我们的工作旨在量化标定的姿态选择,以使标定过程更轻松、更省时、更容易实现。我们的贡献可以总结如下:

1)我们提出了质量可变性(VOQ)度量来评估标定数据,并给出了估计的标定参数的泛化能力和不确定性。这个度量中使用的特性是大多数其他基于目标的方法的常见特性。
2)标定质量不在于目标拟合的好坏,而在于标定参数拟合整个场景的好坏。为了评估这一点,我们提出了对我们所提出的标定方法的稳健评估,计算在标定区域均匀分布的位姿的重投影误差的均值和标准差。
3)本文使用的代码和数据集已提供(摘要链接)。

在这里插入图片描述

2.RELATED WORK

基于目标的方法通过同时观察图像和点云域中的同一标定目标进行特征对齐来估计标定参数。目标的类型可分为(1)平面,如棋盘[17]、[18]、[19]、[20]、[21]、[16]、三角形[15]、基准标记[22];(2)非平面类型,如三面体[3]、球面等[2]。在现有的目标中,棋盘是最常用的,因为它的模式提供了明显的边缘,使其在图像域中很容易被识别。此外,棋盘是直接准备和易于访问,因为它被广泛用于相机内参标定,是任何外参标定过程的先决条件。

在现有的基于目标的方法中,从目标中提取的常见特征是目标的平面[1]、[16]、[19]、[3]、中心和顶点[16]、[23]、[3]和边缘线[1]。在激光雷达领域拟合直线或平面的一个流行的选择是RANdom SAmple Consensus (RANSAC)[16],[19],[23],[15],[3],因为它在管理噪声激光雷达返回的离群值时是稳健的。一旦得到目标的平面,就可以用该平面的法线来表示该平面,通常用于估计旋转参数。目标的角和中心点也可以用类似的方法得到,方法是求与目标边缘相吻合的直线的交点。

目标特征被提取后,特激光雷达与摄像机之间的变换参数可以通过计算线性系统和优化技术来估计(如Levenberg-Marquardt[24],[17],[1],[19],[23],[15],高斯牛顿[21],迭代最近点(ICP)[23],[21],[22][16和遗传算法)。所设计的代价函数通常是最小二乘误差的变量[17],[20],[3],[16]用于特征对齐和重投影误差[17],[19],[16],[21]。

很少有关于选择目标姿势的文献,甚至在基于目标的方法中,这样的解释通常是简短的。许多target-based方法已经指出了至少需要3个姿势来完全限制6个自由度的姿势,并且应该有一个很好的姿势变化。然而,几乎没有解释来帮助用户选择理想的3个姿势进行完美的标定。其他的方法只是简单地在场景[21]中放置大量的棋盘,这并不总是实用的,而其他的方法不去深入选择姿势的细节。[23], [15], [14]。

与我们最相关的工作是Zhou et al.[20]观察到,无论是相机N C还是激光雷达N L的法线矩阵都必须是满秩的,否则配置会产生冗余位姿,导致结果的估计误差很大。基于角点重投影误差、拟合平面残差和平面法线不确定性为数据集中的每个姿态赋值。他们发现,离相机较远的姿势和近似平行于相机主平面的姿势通常被赋予较小的权重。为了解决位姿退化的问题,Zhou et al.[1]在后续的工作中,提出了利用单个棋盘位姿的直线与平面对应来约束问题的单位姿标定参数估计。

3.METHODOLOGY

我们在[16]中采用标定方法,提取棋盘目标的中心点和面法线n L。旋转矩阵R L C旋转矩阵的摄像机法线N C = [N 0 C, N 1 C, N 2 C] T与相应的激光雷达法线对齐N L = [N 0 L, N 1 L, N 2 L] T公式(1)所示。我们可以解出,因为我们知道N C和N L。
在这里插入图片描述
Verma et al.[16]对该方程进行了修正,允许在N L和N C中包含更多的法线,通过对问题的过度约束来提高算法的鲁棒性,从而避开了线性相关性问题。在计算中加入更多的样本是现有方法中常用的方法[15]。然而在实际应用中发现,虽然姿势越多越健壮,但也容易对棋盘进行过度调整。在这项工作中,我们没有使用多个位姿对单个标定结果,而是选择了使用多个3个位姿集的方法,以获得具有不确定性的标定参数的鲁棒估计。用3构成完全约束式(1),也使N C和N L成为方阵。使用方阵可以对矩阵进行更有意义的分析。对比图2d和图2e,我们的基线方法在选择正确姿态的情况下,使用3组和9组可以得到很好的结果。

在这里插入图片描述A. 法向量矩阵中的线性相关
避免多余的姿势,重要的是能够识别线性相关的正规矩阵,我们需要计算N C 1当我们解出R C L 公式(1),当两个或两个以上行接近线性相关的正规矩阵,逆的计算变得不稳定,会影响标定结果。当标定专家知道使用哪种姿势时,这个问题通常会被回避,但对于缺乏经验的用户来说,知道如何做到这一点是很有挑战性的。

向量矩阵n33勾勒出一个平行六面体,它的带符号体积可以通过行列式|n33 3|计算出来,行列式|n33 3|是|n33 3|线性变换的体积比例因子。当行列式为零时,平行六面体几乎没有定义,其体积无法很好地计算,因此其逆的计算不稳定,如图5所示。

矩阵的线性相关性也可以通过查找秩来计算,或者通过矩阵[20]的条件k [1]。
在这里插入图片描述向量矩阵k (n33 3)的条件数,如式(2)所示,表示了它的逆矩阵N(1 33 3)的稳定性,其中最稳定的结果是k = 1,而且最不稳定的结果,该值向正无穷增长。理论上,N C的条件数应该与N L完全相同,因为集合中位姿的相对方向无论在点云域中还是在图像域中都应该相同。然而,情况并非总是如此,因此我们将这两个条件数中最坏的情况作为更可靠的度量。我们用frobenius范数计算向量矩阵的条件数来评估线性相关性。
在这里插入图片描述
B.激光雷达测量中的误差
为了对基于目标的方法的标定参数进行良好的估计,需要对目标进行准确的特征提取。然而,在现实中,激光雷达和相机都有测量误差,影响特征提取过程的准确性。激光雷达的测距精度往往有误差;例如,Velodyne的VLP-16记录的距离精度为3厘米。我们的基线方法首先用随机抽样共识(RANSAC)确定目标的边线,然后寻找边线的交点来确定棋盘的角。棋盘角的估计很大程度上受到棋盘上点的数量以及这些点的范围精度的影响,如图6所示。
在这里插入图片描述
实验结果表明,在距离传感器对一定距离时(如过近或过远),棋盘朝向一定方向时,棋盘测量误差较大。因此,为了评估传感器测量的精度,使用棋盘的尺寸误差和,如式4)中l l,i;i = 0, 1, 2, 3是激光雷达对棋盘边长度的测量,l M,i;I = 0, 1, 2, 3是物理测量的棋盘边缘长度。对于每组姿态,我们得到3个误差e dim,j;j = 0, 1, 2,三个姿势的平均误差作为集合的平均板误差e,在公式(5)中,单位为毫米。
在这里插入图片描述
C. VARIABILITY OF QUALITY (VOQ)
对于一组3个位姿,我们可以使用矩阵的条件来评估旋转参数的质量,使用标定板的测量误差来评估位移参数的质量。
在这里插入图片描述
对于一组姿势,低VOQ分数可以更好地将标定参数泛化到场景中,同时标定结果的可变性也更小。另一方面,VOQ值越高,估计标定结果的标准差越大。

为了估计标定参数,我们建议使用50组3,VOQ分数最低的所有可能的给定数据组合。因此,当提供更多的数据时,我们的方法就会蓬勃发展。标定参数的计算方法是,使用z分数对超过平均值2个标准差的结果进行滤波后,取50组的平均值。结果集的这个标准偏差也可用作估计标定参数确定性的指示。
在这里插入图片描述

4.EXPERIMENTAL RESULTS

实验使用的是内角为7x5的棋盘,正方形长95mm,棋盘尺寸为610 850mm。传感器使用的是Nvidia 2Mega SF3322 gmsl相机、Velodyne VLP-16和Baraja Spectrum-ScanTM激光雷达。VLP-16有16个环,具有360度水平和30度垂直视场(FOV)。Baraja频谱- scantm具有110个水平视场和25个垂直视场,点云分辨率可调,允许我们将点聚焦在视场内感兴趣的区域。为了标定,我们配置了Baraja谱- ScanTM,使这些点总是棋盘上最密集的,这导致了更低的棋盘尺寸误差。我们假设已经进行了内摄像机标定的先决步骤。实验装置如图7所示。我们比较了计算每种可能的姿势组合的VOQ的蛮力方法和一种聚类方法,即我们从聚类中选择法线来最小化条件数k。但是由于对于3组的集合,组合的数量不是非常多,所以我们采用了更快速的蛮力方法。我们建议的标定方法耗时约90秒(不包括人工数据采集过程)。
在这里插入图片描述
A.数据收集
两对vlp16相机和Baraja spectrum - scantm相机共收集50个姿势,产生 19600个组合。当捕捉这些姿态,我们确保有变化的俯仰和偏航轴的目标。对于滚动轴,我们将棋盘保持在45度角,以形成菱形,以便用低分辨率激光雷达更好地探测棋盘边缘。我们注意到,VLP-16和Baraja Spectrum-ScanTM激光雷达的传感器测量值都一致被低估/高估,因此将每个点转换为其极坐标形式,并添加一个距离偏移,如图8所示。

我们使用的VLP-16和Baraja Spectrum-ScanTM激光雷达需要的距离偏移分别为-30mm和+105mm。如果不考虑激光雷达的内部距离偏差,由于所有的目标测量都是不准确的,因此很难对传感器对进行完美的标定。对于生成的19600组3个,我们使用我们的基线方法计算出每组的标定结果,在Dell Optiplex7070台式机上使用cpu计算大约需要6小时。
在这里插入图片描述B.对整个场景的特征对齐时的重投影误差
通常在评估标定参数的质量时,现有的方法会将目标的角点或中心投影到图像中,以计算该特定姿态的重投影误差。为了评估我们度量的有效性,我们计算了46个VLP-16位姿的再投影误差,这些位姿均匀分布在距离传感器对1.7m至4.5m的范围内。我们没有记录更远的姿势,因为VLP-16的低分辨率对RANSAC准确勾勒板边提出了挑战。通过计算所有46个位姿的重投影误差,我们可以得到一个更稳健的评估,评估估计的标定参数与整个场景的契合程度,以及重投影误差的标准差。

C.度量特征的评估
旋转矩阵计算的稳定性可以用κ LC来衡量,我们通过将19600组及其相应的标定结果分组在相同大小的箱子中来评估κ LC。对每个bin,计算标定结果的平均κ LC和标准偏差,结果如图9a所示。我们发现,在κ LC 50处,法线矩阵的条件数开始影响标定结果的稳定性。板误差的评估方法是,首先过滤掉所有条件数大于20的集合,然后用各自的重投影误差绘制板误差,如图9b所示。由于条件数大于20会极大地影响估计的标定参数的稳定性,从而影响板尺寸误差的评估,因此我们将其过滤掉。在测试数据集上实现的最小平均再投影误差约为1cm。这种重投影误差随其标准差的增大而稳步增大。我们提供了一套简单的指导方针来促进代码存储库中的数据收集过程。

VOQ的评估方法与图10所示的条件数和板错误相似。从图10a中可以看出,标定结果的不确定性随着VOQ分数的增加而增加。图10b显示,VOQ的增加不仅导致标定结果的变异性增加,而且还导致场景的平均重投影误差增加,以及标准偏差的增加。VLP- 16和Baraja Spectrum-ScanTM激光雷达的平均再投影误差最低均在1- 1.2cm范围内,标准差为0.4-0.6cm。在图11中,将VLP-16和barajspectrum - ScanTM的激光雷达点云投影到特定VOQ分数的图像上进行视觉比较,以验证我们的方法的有效性。我们强调使用平均再投影误差结合整个场景的可视化来评估标定质量。可以看出,较低的VOQ分数与适合场景的标定估计相关。当VOQ分数稍微提高时,从第二行可以看出,再投影误差仍然很低,但是由于小的标定误差在远处变得更加明显,使得背景拟合不太好。在V OQ 100处有一个重投影误差的尖峰,这是由于κ LC 100的不确定度急剧增加造成的。随后的下降可以归因于高板错误和低条件数集合的混合。
在这里插入图片描述

5. CONCLUSION

我们提出了一种新颖的、鲁棒的方法来完成标定任务,重点是优化数据选择过程。我们通过投影整个点云,评估估计的标定参数对整个场景的适应能力,而不是对单个姿势的适应能力,从而为我们的结果提供透明性。我们的方法平均再投影误差为1-1.2cm,标准差为0.4-0.5cm,整个方法耗时90s。这种方法的额外好处是简化了任何标定专业人员的标定过程,他们只需要专注于为算法提供大量不同的数据。此外,我们使用户能够定量地评估所提供的数据,以及待估计的标定参数的质量。为了方便这些工具的使用,我们为软件提供了全面的安装和使用教程,其中包括我们实验室中的示例。

REFERENCES

[1] L. Zhou, Z. Li, and M. Kaess, “Automatic Extrinsic Calibration of a
Camera and a 3D LiDAR Using Line and Plane Correspondences,”
in IEEE International Conference on Intelligent Robots and Systems,
pp. 5562–5569, Institute of Electrical and Electronics Engineers Inc.,
dec 2018.
[2] T. Toth, Z. Pusztai, and L. Hajder, “Automatic LiDAR-Camera Cali-
bration of Extrinsic Parameters Using a Spherical Target,” in Proceed-
ings - IEEE International Conference on Robotics and Automation,
pp. 8580–8586, Institute of Electrical and Electronics Engineers Inc.,
may 2020.
[3] Z. Pusztai and L. Hajder, “Accurate Calibration of LiDAR-Camera
Systems Using Ordinary Boxes,” in Proceedings - 2017 IEEE Inter-
national Conference on Computer Vision Workshops, ICCVW 2017,
vol. 2018-Janua, pp. 394–402, Institute of Electrical and Electronics
Engineers Inc., jul 2017.
[4] E. S. Kim and S. Y. Park, “Extrinsic calibration of a camera-LIDAR
multi sensor system using a planar chessboard,” in International
Conference on Ubiquitous and Future Networks, ICUFN, vol. 2019-
July, pp. 89–91, IEEE Computer Society, jul 2019.
[5] J. S. Berrio, W. Zhou, J. Ward, S. Worrall, and E. Nebot, “Octree map
based on sparse point cloud and heuristic probability distribution for
labeled images,” in Proceedings of the International Conference on
Intelligent Robots and Systems, pp. 3174–3181, Institute of Electrical
and Electronics Engineers Inc., dec 2018.
[6] Y. Zhong, S. Wang, S. Xie, Z. Cao, K. Jiang, and D. Yang, “3D
Scene Reconstruction with Sparse LiDAR Data and Monocular Image
in Single Frame,” SAE International Journal of Passenger Cars -
Electronic and Electrical Systems, vol. 11, sep 2017.
[7] C. R. Qi, W. Liu, C. Wu, H. Su, and L. J. Guibas, “Frustum PointNets
for 3D Object Detection from RGB-D Data,” Proceedings of the
IEEE Computer Society Conference on Computer Vision and Pattern
Recognition, pp. 918–927, nov 2017.
[8] Z. Wang and K. Jia, “Frustum convnet: Sliding frustums to aggregate
local point-wise features for amodal 3d object detection,” arXiv
preprint arXiv:1903.01864, 2019.
[9] D. Scaramuzza, A. Harati, and R. Siegwart, “Extrinsic self calibration
of a camera and a 3d laser range finder from natural scenes,” IEEE/RSJ
International Conference on Intelligent Robots and Systems, pp. 4164–
4169, 2007.
[10] G. Pandey, J. R. McBride, S. Savarese, and R. M. Eustice, “Automatic
targetless extrinsic calibration of a 3d lidar and camera by maximizing
mutual information,” Proceedings of the AAAI National Conference on
Artificial Intelligence, pp. 2053–2059, 2012.
[11] J. Levinson and S. Thrun, “Automatic online calibration of cameras
and lasers,” Proc. of Robotics:Science and Systems, 2013.
[12] K. Irie, M. Sugiyama, and M. Tomono, “Target-less camera-lidar
extrinsic calibration using a bagged dependence estimator,” IEEE
International Conference on Automation Science and Engineering
(CASE), pp. 1340–1347, 2016.
[13] Q. Liao, Z. Chen, Y. Liu, Z. Wang, and M. Liu, “Extrinsic Calibration
of Lidar and Camera with Polygon,” in 2018 IEEE International
Conference on Robotics and Biomimetics, ROBIO 2018, pp. 200–205,
Institute of Electrical and Electronics Engineers Inc., jul 2018.
[14] J.-K. Huang and J. W. Grizzle, “Improvements to Target-Based 3D
LiDAR to Camera Calibration,” IEEE Access, vol. 8, pp. 134101–
134110, oct 2019.
[15] Y. Park, S. Yun, C. S. Won, K. Cho, K. Um, and S. Sim, “Calibration
between color camera and 3D LIDAR instruments with a polygonal
planar board,” Sensors (Switzerland), vol. 14, pp. 5333–5353, mar
2014.
[16] S. Verma, J. S. Berrio, S. Worrall, and E. Nebot, “Automatic extrinsic
calibration between a camera and a 3D Lidar using 3D point and
plane correspondences,” 2019 IEEE Intelligent Transportation Systems
Conference, ITSC 2019, pp. 3906–3912, apr 2019.
[17] Q. Zhang and R. Pless, “Extrinsic calibration of a camera and
laser range finder (improves camera calibration),” in 2004 IEEE/RSJ
International Conference on Intelligent Robots and Systems (IROS),
vol. 3, pp. 2301–2306, 2004.
[18] R. Unnikrishnan, “Fast Extrinsic Calibration of a Laser Rangefinder
to a Camera,” tech. rep., 2005.
[19] G. Pandey, J. McBride, S. Savarese, and R. Eustice, “Extrinsic
calibration of a 3D laser scanner and an omnidirectional camera,” in
IFAC Proceedings Volumes (IFAC-PapersOnline), vol. 7, pp. 336–341,
IFAC Secretariat, jan 2010.
[20] L. Zhou and Z. Deng, “Extrinsic calibration of a camera and a
lidar based on decoupling the rotation from the translation,” in IEEE
Intelligent Vehicles Symposium, Proceedings, pp. 642–648, 2012.
[21] A. Geiger, F. Moosmann, Ö. Car, and B. Schuster, “Automatic cam-
era and range sensor calibration using a single shot,” in Proceed-
ings - IEEE International Conference on Robotics and Automation,
pp. 3936–3943, Institute of Electrical and Electronics Engineers Inc.,
2012.
[22] A. Dhall, K. Chelani, V. Radhakrishnan, K. Madhava Krishna,
A. Dhall, K. Chelani, V. Radhakrishnan, and K. Krishna, “LiDAR-
Camera Calibration using 3D-3D Point correspondences,” tech. rep.,
2017.
[23] H. Alismail, L. D. Baker, and B. Browning, “Automatic calibration
of a range sensor and camera system,” in Proceedings - 2nd Joint
3DIM/3DPVT Conference: 3D Imaging, Modeling, Processing, Visu-
alization and Transmission, 3DIMPVT 2012, pp. 286–292, 2012.
[24] K. Levenberg, “A method for the solution of certain non-linear
problems in least squares,” Quarterly of Applied Mathematics, vol. 2,
pp. 164–168, jul 1944.

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当程序卡在`HardFault_Handler`时,通常是由于程序发生了硬件故障或软件错误,导致CPU无法正常执行指令而触发了硬件故障异常。这种情况下,CPU会自动跳转到`HardFault_Handler`中断服务函数进行处理。 要解决这个问题,可以尝试以下几个步骤: 1.检查程序中是否存在空指针、数组越界、栈溢出等常见的软件错误。 2.检查硬件电路是否正常,例如是否存在电源电压不稳定、信号线接触不良等问题。 3.在`HardFault_Handler`中断服务函数中添加调试代码,例如打印寄存器状态、堆栈信息等,以便更好地定位问题。 以下是一个`HardFault_Handler`中断服务函数的示例代码: ```c void HardFault_Handler(void) { __asm volatile ( " tst lr, #4 \n" " ite eq \n" " mrseq r0, msp \n" " mrsne r0, psp \n" " ldr r1, [r0, #24] \n" " ldr r2, handler2_address_const \n" " bx r2 \n" " handler2_address_const: .word prvGetRegistersFromStack \n" ); } void prvGetRegistersFromStack( uint32_t *pulFaultStackAddress ) { /* These are volatile to try and prevent the compiler/linker optimising them away as the variables never actually get used. If the debugger won't show the values of the variables, make them global my moving their declaration outside of this function. */ volatile uint32_t r0; volatile uint32_t r1; volatile uint32_t r2; volatile uint32_t r3; volatile uint32_t r12; volatile uint32_t lr; /* Link register. */ volatile uint32_t pc; /* Program counter. */ volatile uint32_t psr;/* Program status register. */ r0 = pulFaultStackAddress[ 0 ]; r1 = pulFaultStackAddress[ 1 ]; r2 = pulFaultStackAddress[ 2 ]; r3 = pulFaultStackAddress[ 3 ]; r12 = pulFaultStackAddress[ 4 ]; lr = pulFaultStackAddress[ 5 ]; pc = pulFaultStackAddress[ 6 ]; psr = pulFaultStackAddress[ 7 ]; /* When the following line is hit, the variables contain the register values. */ for( ;; ); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值