Add LiDAR RTK hand-eye calibration workflow and results

This commit is contained in:
lichun.qu
2026-07-22 09:31:44 +08:00
commit 62c7ab2e98
61 changed files with 156232 additions and 0 deletions
@@ -0,0 +1,604 @@
{
"schema_version": 2,
"success": true,
"message": "Both `ftol` and `xtol` termination conditions are satisfied.",
"convention": "T_body_lidar maps raw LiDAR points into rear-axle body frame",
"equation": "A_ij X = X B_ij",
"measured_extrinsic_used_as_initial": false,
"translation_m": [
1.2996301155160686,
-0.0035647011612625953,
0.7218861757826791
],
"rotation_rpy_deg_xyz": [
-0.7871563544979889,
1.1414557494228486,
-0.9357571721886107
],
"quaternion_xyzw": [
-0.00678727299452357,
0.010016439179525593,
-0.008096912246155998,
0.9998940163254998
],
"matrix_4x4": [
[
0.9996682219164817,
0.01605613959699911,
0.02014066710864661,
1.2996301155160686
],
[
-0.016328076825577065,
0.9997767458747517,
0.013410902850672373,
-0.0035647011612625953
],
[
-0.019920843293337136,
-0.01373531176689472,
0.9997072077429213,
0.7218861757826791
],
[
0.0,
0.0,
0.0,
1.0
]
],
"estimation": {
"stations": 38,
"pairs": 80,
"residuals": {
"pairs": 80,
"translation_m": {
"rms": 0.11870623426762615,
"median": 0.06068763803103021,
"p90": 0.19284315530447813,
"p95": 0.23754716587335756,
"max": 0.38871430386214717
},
"rotation_deg": {
"rms": 1.135091439337232,
"median": 0.9273339494951451,
"p90": 1.649541165022219,
"p95": 1.981621584559613,
"max": 2.6935053979880266
},
"per_pair": [
{
"pair_index": 0,
"translation_m": 0.09187263959310249,
"rotation_deg": 0.38130732180446597
},
{
"pair_index": 1,
"translation_m": 0.1769336788939164,
"rotation_deg": 0.6450700969822144
},
{
"pair_index": 2,
"translation_m": 0.15700274999733538,
"rotation_deg": 0.5067710073297588
},
{
"pair_index": 3,
"translation_m": 0.10662491066187467,
"rotation_deg": 0.5429917463514751
},
{
"pair_index": 4,
"translation_m": 0.029628667721179554,
"rotation_deg": 0.5509223411600718
},
{
"pair_index": 5,
"translation_m": 0.0843749108812327,
"rotation_deg": 0.4940771462459488
},
{
"pair_index": 6,
"translation_m": 0.07914868235296937,
"rotation_deg": 0.8254472643593804
},
{
"pair_index": 7,
"translation_m": 0.009453498887768107,
"rotation_deg": 0.9043821535551515
},
{
"pair_index": 8,
"translation_m": 0.019511765564918175,
"rotation_deg": 0.3967737125225238
},
{
"pair_index": 9,
"translation_m": 0.05341682547424797,
"rotation_deg": 1.2338229281598583
},
{
"pair_index": 10,
"translation_m": 0.07322963958641442,
"rotation_deg": 1.6425496017479204
},
{
"pair_index": 11,
"translation_m": 0.05907844745776598,
"rotation_deg": 0.9099755792395827
},
{
"pair_index": 12,
"translation_m": 0.07907007871308952,
"rotation_deg": 1.294221003621915
},
{
"pair_index": 13,
"translation_m": 0.02140092032185309,
"rotation_deg": 0.5139343819205795
},
{
"pair_index": 14,
"translation_m": 0.19209639243977228,
"rotation_deg": 0.9890356204602867
},
{
"pair_index": 15,
"translation_m": 0.23611357668308347,
"rotation_deg": 0.7834325452898548
},
{
"pair_index": 16,
"translation_m": 0.023285251634710107,
"rotation_deg": 0.17520547335389194
},
{
"pair_index": 17,
"translation_m": 0.26478536048856705,
"rotation_deg": 0.710271315591521
},
{
"pair_index": 18,
"translation_m": 0.16006553402191026,
"rotation_deg": 0.957610910483182
},
{
"pair_index": 19,
"translation_m": 0.027251092891380724,
"rotation_deg": 0.9157938224757094
},
{
"pair_index": 20,
"translation_m": 0.04027747409562381,
"rotation_deg": 0.5934052344689098
},
{
"pair_index": 21,
"translation_m": 0.009702766313815113,
"rotation_deg": 0.8792062492068344
},
{
"pair_index": 22,
"translation_m": 0.19956402108683025,
"rotation_deg": 1.302707349930284
},
{
"pair_index": 23,
"translation_m": 0.22208667994405493,
"rotation_deg": 0.865060603092117
},
{
"pair_index": 24,
"translation_m": 0.04688877706330616,
"rotation_deg": 0.35495594456572455
},
{
"pair_index": 25,
"translation_m": 0.14151886488940063,
"rotation_deg": 0.6501219960603252
},
{
"pair_index": 26,
"translation_m": 0.0884069047402769,
"rotation_deg": 0.7969404276735993
},
{
"pair_index": 27,
"translation_m": 0.16408056565265292,
"rotation_deg": 2.4437963646244074
},
{
"pair_index": 28,
"translation_m": 0.028664980727987763,
"rotation_deg": 1.008490254813876
},
{
"pair_index": 29,
"translation_m": 0.07072061490599325,
"rotation_deg": 1.909748472867515
},
{
"pair_index": 30,
"translation_m": 0.022948436582833444,
"rotation_deg": 2.3225092779351595
},
{
"pair_index": 31,
"translation_m": 0.38849552688092603,
"rotation_deg": 1.2325430499166412
},
{
"pair_index": 32,
"translation_m": 0.06230564324556168,
"rotation_deg": 1.4474405187186974
},
{
"pair_index": 33,
"translation_m": 0.017320969569104998,
"rotation_deg": 1.9636801270135327
},
{
"pair_index": 34,
"translation_m": 0.15793386431764098,
"rotation_deg": 1.0830036872759303
},
{
"pair_index": 35,
"translation_m": 0.38871430386214717,
"rotation_deg": 0.6522443164627029
},
{
"pair_index": 36,
"translation_m": 0.06172089136639702,
"rotation_deg": 2.6935053979880266
},
{
"pair_index": 37,
"translation_m": 0.1887406405132845,
"rotation_deg": 0.5255100746087121
},
{
"pair_index": 38,
"translation_m": 0.3189860513403679,
"rotation_deg": 0.33497034772867773
},
{
"pair_index": 39,
"translation_m": 0.08451339501338925,
"rotation_deg": 2.6477889534666375
},
{
"pair_index": 40,
"translation_m": 0.21900981683029178,
"rotation_deg": 1.2331847283146662
},
{
"pair_index": 41,
"translation_m": 0.1713522910564131,
"rotation_deg": 1.183067166836572
},
{
"pair_index": 42,
"translation_m": 0.0512348407217562,
"rotation_deg": 0.6012483843007921
},
{
"pair_index": 43,
"translation_m": 0.07445293169404418,
"rotation_deg": 1.1211247122462373
},
{
"pair_index": 44,
"translation_m": 0.04410762061472433,
"rotation_deg": 0.6590595108738039
},
{
"pair_index": 45,
"translation_m": 0.033089648474152494,
"rotation_deg": 1.0312870469391562
},
{
"pair_index": 46,
"translation_m": 0.06760165724961124,
"rotation_deg": 0.4565827539034035
},
{
"pair_index": 47,
"translation_m": 0.025670738208830455,
"rotation_deg": 1.4302485146055521
},
{
"pair_index": 48,
"translation_m": 0.028147203494591596,
"rotation_deg": 1.830717268006061
},
{
"pair_index": 49,
"translation_m": 0.02266261366157945,
"rotation_deg": 0.946299184254386
},
{
"pair_index": 50,
"translation_m": 0.04935636595094902,
"rotation_deg": 1.3964539171127066
},
{
"pair_index": 51,
"translation_m": 0.05889812376302877,
"rotation_deg": 1.4698930638008505
},
{
"pair_index": 52,
"translation_m": 0.05965438469566341,
"rotation_deg": 0.9816847661944946
},
{
"pair_index": 53,
"translation_m": 0.06606854020326042,
"rotation_deg": 0.27458915782550086
},
{
"pair_index": 54,
"translation_m": 0.05158448025659227,
"rotation_deg": 0.9388740765145809
},
{
"pair_index": 55,
"translation_m": 0.07186821989401924,
"rotation_deg": 0.7757369232394653
},
{
"pair_index": 56,
"translation_m": 0.08608318124462912,
"rotation_deg": 0.30616875771444013
},
{
"pair_index": 57,
"translation_m": 0.06688749012833557,
"rotation_deg": 0.5486461025019678
},
{
"pair_index": 58,
"translation_m": 0.05762085648043371,
"rotation_deg": 1.372519412009814
},
{
"pair_index": 59,
"translation_m": 0.031564793498850025,
"rotation_deg": 0.4468008042798917
},
{
"pair_index": 60,
"translation_m": 0.039910793641719705,
"rotation_deg": 0.7939954067942764
},
{
"pair_index": 61,
"translation_m": 0.04407888801173494,
"rotation_deg": 1.3107090439391704
},
{
"pair_index": 62,
"translation_m": 0.024691509543671615,
"rotation_deg": 1.236002055213775
},
{
"pair_index": 63,
"translation_m": 0.02262539867961735,
"rotation_deg": 0.5097286713719923
},
{
"pair_index": 64,
"translation_m": 0.12496365742733645,
"rotation_deg": 1.7124652344909004
},
{
"pair_index": 65,
"translation_m": 0.07938704275394372,
"rotation_deg": 1.136197571772474
},
{
"pair_index": 66,
"translation_m": 0.03041340784879668,
"rotation_deg": 1.1835741189420788
},
{
"pair_index": 67,
"translation_m": 0.08565781637557897,
"rotation_deg": 1.325342137093704
},
{
"pair_index": 68,
"translation_m": 0.06569851623164084,
"rotation_deg": 0.5889885968744448
},
{
"pair_index": 69,
"translation_m": 0.028714655898349907,
"rotation_deg": 0.6559696801898813
},
{
"pair_index": 70,
"translation_m": 0.06483297271989888,
"rotation_deg": 1.3915654660441625
},
{
"pair_index": 71,
"translation_m": 0.03452933204038689,
"rotation_deg": 0.8331166409438662
},
{
"pair_index": 72,
"translation_m": 0.026295103775966104,
"rotation_deg": 1.2325751495683674
},
{
"pair_index": 73,
"translation_m": 0.04043011893578754,
"rotation_deg": 1.2125523869736732
},
{
"pair_index": 74,
"translation_m": 0.04383537712573055,
"rotation_deg": 0.5600272304118834
},
{
"pair_index": 75,
"translation_m": 0.0849604176628602,
"rotation_deg": 1.2304564930488662
},
{
"pair_index": 76,
"translation_m": 0.010862365758746927,
"rotation_deg": 0.38357205151967033
},
{
"pair_index": 77,
"translation_m": 0.053059282511333926,
"rotation_deg": 0.9610287581424943
},
{
"pair_index": 78,
"translation_m": 0.04551226086388418,
"rotation_deg": 1.1597952394623392
},
{
"pair_index": 79,
"translation_m": 0.016850631999927004,
"rotation_deg": 0.7568718165305058
}
]
}
},
"ground": {
"planes": 38,
"body_origin_height_above_ground_m": 0.2335,
"formula": "d_lidar - (R_X n_lidar)^T t_X - body_height"
},
"linearized_one_sigma": {
"translation_m": [
0.004217873072423743,
0.004428061325180952,
0.004921296107038976
],
"rotation_deg": [
0.04989765234702571,
0.04568528000305764,
0.12720936620845405
],
"warning": "conditional local estimate; bootstrap is the primary stability check"
},
"weighted_jacobian_condition_number": 6.329566115808833,
"solver_multistart": {
"runs": 12,
"candidates_relative_to_best": [
{
"cost": 354.634716588624,
"success": true,
"translation_m": 3.20226506801652e-10,
"rotation_deg": 2.202963019076451e-08
},
{
"cost": 354.6347165886241,
"success": true,
"translation_m": 7.896781546182907e-10,
"rotation_deg": 1.0169266187599847e-07
},
{
"cost": 354.6347165886238,
"success": true,
"translation_m": 8.217931179403876e-10,
"rotation_deg": 6.93412504585164e-08
},
{
"cost": 354.6347165886237,
"success": true,
"translation_m": 3.469446951953614e-18,
"rotation_deg": 0.0
},
{
"cost": 354.6347165886238,
"success": true,
"translation_m": 1.3034248658026153e-10,
"rotation_deg": 2.7806728416619943e-08
},
{
"cost": 354.6347165886238,
"success": true,
"translation_m": 2.260359361733417e-10,
"rotation_deg": 2.6418689746833837e-08
},
{
"cost": 354.634716588624,
"success": true,
"translation_m": 7.589395457725227e-10,
"rotation_deg": 4.91609016107675e-08
},
{
"cost": 354.6347165886238,
"success": true,
"translation_m": 1.2750789560311927e-10,
"rotation_deg": 7.759775984980414e-10
},
{
"cost": 354.634716588624,
"success": true,
"translation_m": 7.805526908313695e-10,
"rotation_deg": 6.684488070039544e-08
},
{
"cost": 354.634716588624,
"success": true,
"translation_m": 7.763945275712574e-10,
"rotation_deg": 8.931061588988946e-08
},
{
"cost": 354.6347165886244,
"success": true,
"translation_m": 9.383630927674663e-10,
"rotation_deg": 1.3000921411943172e-07
},
{
"cost": 354.634716588624,
"success": true,
"translation_m": 6.944401937454179e-10,
"rotation_deg": 7.954648404736881e-08
}
]
},
"bootstrap": {
"runs": 100,
"order": [
"x_m",
"y_m",
"z_m",
"roll_deg",
"pitch_deg",
"yaw_deg"
],
"std": [
0.0017068433472663032,
0.0019214288447692426,
0.0013180801706094514,
0.06849719260762097,
0.05792635838163369,
0.062093058432709465
],
"p025": [
1.2968099294514637,
-0.006751632579940086,
0.7193267956198541,
-0.9300082754299475,
1.0287033540941326,
-1.0774039892205403
],
"p975": [
1.302479553931627,
-0.0001961195897526885,
0.7244258625906532,
-0.6646157463265417,
1.254120304082275,
-0.8275267997610058
]
}
}