[{"data":1,"prerenderedAt":4723},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0100-point-lio":3,"wiki-doc-items-2026-09-20-dao-hang":4486,"wiki:author-members":4711},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":161,"chapterOrder":4473,"date":4474,"description":154,"docKey":4475,"docRoot":4476,"docTitle":4477,"extension":4478,"isWikiDoc":4479,"isWikiIndex":4480,"meta":4481,"navigation":4479,"path":4482,"seo":4483,"stem":4484,"wikiDepth":161,"__hash__":4485},"wiki\u002Fwiki\u002F2026-09-20-导航\u002F0500-0100-Point_LIO.md","Point_LIO（激光与IMU融合里程计，建图与定位算法）",[7],"董佳辉",{"type":9,"value":10,"toc":4468},"minimark",[11,15,135,139,144,148,305,643,646,651,655,658,661,664,668,671,674,677,681,684,690,693,697,700,706,709,712,715,718,726,729,742,745,749,752,755,824,827,830,833,837,840,935,1164,1167,1171,1174,1177,1183,1186,1189,1228,1231,1235,1238,1241,1256,1259,1283,1286,1289,1293,1296,1299,1334,1337,1341,1344,1347,1353,1356,1359,1362,1366,1369,1423,1542,1545,1549,1552,1555,1561,1564,1567,1570,1573,1577,1580,1583,1586,1589,1592,1595,1599,1602,1617,1620,1624,1627,1684,1687,1836,1839,1843,1846,1914,1917,1920,1924,1930,1936,1943,1946,1954,1958,1961,2025,2028,2035,2038,2044,2047,2053,2056,2060,2063,2066,2069,2072,2075,2077,2085,2088,2091,2095,2098,2105,2228,2245,2248,2251,2254,2257,2618,3319,3322,3326,3329,3335,3339,3345,3348,3352,3355,3359,3362,3365,3369,3376,3379,3382,3386,3393,3400,3404,3422,3431,3434,3438,3441,3444,3459,3463,3466,3472,3476,3479,3485,3489,3492,3496,3499,3503,3506,3512,3516,3522,3526,3531,3535,3538,3542,3545,3551,3554,3558,3561,3564,3572,3576,3579,3582,3586,3595,3601,3604,3626,3639,3648,3651,3654,3657,3660,3666,3672,3677,3680,3683,3707,3713,3716,3719,3725,3728,3733,3735,3761,3779,3785,3792,3799,3838,3841,3855,3858,3869,3873,3890,3893,3896,3900,3906,3909,3916,3920,3923,3926,3929,3932,3952,3956,3959,3980,4031,4034,4038,4041,4049,4052,4056,4059,4119,4251,4254,4258,4261,4264,4268,4271,4274,4278,4281,4284,4288,4291,4294,4298,4301,4340,4421,4424,4428,4431,4434,4438,4446,4449,4452,4458,4461,4464],[12,13,5],"h2",{"id":14},"point_lio激光与imu融合里程计建图与定位算法",[16,17,18,31],"table",{},[19,20,21],"thead",{},[22,23,24,28],"tr",{},[25,26,27],"th",{},"YAML 层级",[25,29,30],{},"主要内容",[32,33,34,51,63,75,87,99,111,123],"tbody",{},[22,35,36,48],{},[37,38,39],"td",{},[40,41,42,43,47],"strong",{},"直接放在 ",[44,45,46],"code",{},"ros__parameters"," 下的参数",[37,49,50],{},"估计模型、传播方式、饱和检查、地图初始化、降采样及日志开关",[22,52,53,60],{},[37,54,55],{},[40,56,57],{},[44,58,59],{},"common",[37,61,62],{},"输入话题、合帧、拆帧和时间差",[22,64,65,72],{},[37,66,67],{},[40,68,69],{},[44,70,71],{},"prior_pcd",[37,73,74],{},"先验地图及初始位置",[22,76,77,84],{},[37,78,79],{},[40,80,81],{},[44,82,83],{},"preprocess",[37,85,86],{},"雷达格式、线数、逐点时间单位和近距离过滤",[22,88,89,96],{},[37,90,91],{},[40,92,93],{},[44,94,95],{},"mapping",[37,97,98],{},"IMU、重力、外参、噪声及匹配参数",[22,100,101,108],{},[37,102,103],{},[40,104,105],{},[44,106,107],{},"odometry",[37,109,110],{},"里程计发布方式",[22,112,113,120],{},[37,114,115],{},[40,116,117],{},[44,118,119],{},"publish",[37,121,122],{},"轨迹、点云和 TF 发布开关",[22,124,125,132],{},[37,126,127],{},[40,128,129],{},[44,130,131],{},"pcd_save",[37,133,134],{},"点云保存开关与保存间隔",[136,137,138],"h3",{"id":138},"参数",[140,141,143],"h4",{"id":142},"ros__parametersros节点参数","ros__parameters（ROS节点参数）",[145,146,147],"h5",{"id":147},"参数表",[149,150,155],"pre",{"className":151,"code":152,"language":153,"meta":154,"style":154},"language-yaml shiki shiki-themes github-light github-dark","point_lio:\n  ros__parameters:\n    use_imu_as_input: False                             # Change to True to use IMU as input of Point-LIO\n    prop_at_freq_of_imu: True\n    check_satu: True\n    init_map_size: 10\n    point_filter_num: 8                                 # Options: 4, 3\n    space_down_sample: True\n    filter_size_surf: 0.2                               # Options: 0.5, 0.3, 0.2, 0.15, 0.1\n    filter_size_map: 0.2                                # Options: 0.5, 0.3, 0.15, 0.1\n    ivox_nearby_type: 18                                # Options: 0, 6, 18, 26\n    runtime_pos_log_enable: False                       # Option: True\n","yaml","",[44,156,157,170,178,195,206,216,227,241,251,265,278,292],{"__ignoreMap":154},[158,159,162,166],"span",{"class":160,"line":161},"line",1,[158,163,165],{"class":164},"s9eBZ","point_lio",[158,167,169],{"class":168},"sVt8B",":\n",[158,171,173,176],{"class":160,"line":172},2,[158,174,175],{"class":164},"  ros__parameters",[158,177,169],{"class":168},[158,179,181,184,187,191],{"class":160,"line":180},3,[158,182,183],{"class":164},"    use_imu_as_input",[158,185,186],{"class":168},": ",[158,188,190],{"class":189},"sj4cs","False",[158,192,194],{"class":193},"sJ8bj","                             # Change to True to use IMU as input of Point-LIO\n",[158,196,198,201,203],{"class":160,"line":197},4,[158,199,200],{"class":164},"    prop_at_freq_of_imu",[158,202,186],{"class":168},[158,204,205],{"class":189},"True\n",[158,207,209,212,214],{"class":160,"line":208},5,[158,210,211],{"class":164},"    check_satu",[158,213,186],{"class":168},[158,215,205],{"class":189},[158,217,219,222,224],{"class":160,"line":218},6,[158,220,221],{"class":164},"    init_map_size",[158,223,186],{"class":168},[158,225,226],{"class":189},"10\n",[158,228,230,233,235,238],{"class":160,"line":229},7,[158,231,232],{"class":164},"    point_filter_num",[158,234,186],{"class":168},[158,236,237],{"class":189},"8",[158,239,240],{"class":193},"                                 # Options: 4, 3\n",[158,242,244,247,249],{"class":160,"line":243},8,[158,245,246],{"class":164},"    space_down_sample",[158,248,186],{"class":168},[158,250,205],{"class":189},[158,252,254,257,259,262],{"class":160,"line":253},9,[158,255,256],{"class":164},"    filter_size_surf",[158,258,186],{"class":168},[158,260,261],{"class":189},"0.2",[158,263,264],{"class":193},"                               # Options: 0.5, 0.3, 0.2, 0.15, 0.1\n",[158,266,268,271,273,275],{"class":160,"line":267},10,[158,269,270],{"class":164},"    filter_size_map",[158,272,186],{"class":168},[158,274,261],{"class":189},[158,276,277],{"class":193},"                                # Options: 0.5, 0.3, 0.15, 0.1\n",[158,279,281,284,286,289],{"class":160,"line":280},11,[158,282,283],{"class":164},"    ivox_nearby_type",[158,285,186],{"class":168},[158,287,288],{"class":189},"18",[158,290,291],{"class":193},"                                # Options: 0, 6, 18, 26\n",[158,293,295,298,300,302],{"class":160,"line":294},12,[158,296,297],{"class":164},"    runtime_pos_log_enable",[158,299,186],{"class":168},[158,301,190],{"class":189},[158,303,304],{"class":193},"                       # Option: True\n",[16,306,307,335],{},[19,308,309],{},[22,310,311,314,317,320,323,326,329,332],{},[25,312,313],{},"参数名",[25,315,316],{},"当前值",[25,318,319],{},"单位",[25,321,322],{},"实车处理建议",[25,324,325],{},"作用",[25,327,328],{},"调大效果",[25,330,331],{},"调小效果",[25,333,334],{},"生效条件／备注",[32,336,337,367,395,429,463,494,525,557,587,615],{},[22,338,339,344,348,351,356,359,362,364],{},[37,340,341],{},[44,342,343],{},"use_imu_as_input",[37,345,346],{},[44,347,190],{},[37,349,350],{},"不适用，布尔",[37,352,353],{},[40,354,355],{},"通常保持当前值，不作为优先调试项",[37,357,358],{},"选择 IMU 输入模型或观测模型",[37,360,361],{},"不适用",[37,363,361],{},[37,365,366],{},"False：IMU 作为观测纠正滤波状态；True：IMU 作为运动预测输入。False 仍使用 IMU",[22,368,369,374,379,381,385,388,390,392],{},[37,370,371],{},[44,372,373],{},"prop_at_freq_of_imu",[37,375,376],{},[44,377,378],{},"True",[37,380,350],{},[37,382,383],{},[40,384,355],{},[37,386,387],{},"选择协方差预测的时序",[37,389,361],{},[37,391,361],{},[37,393,394],{},"True：主要在 IMU 时刻预测协方差；False：还在激光逐点时刻预测。不会设置硬件采样频率",[22,396,397,402,406,408,412,415,417,419],{},[37,398,399],{},[44,400,401],{},"check_satu",[37,403,404],{},[44,405,378],{},[37,407,350],{},[37,409,410],{},[40,411,355],{},[37,413,414],{},"检查 IMU 各轴是否接近饱和，并排除饱和轴的观测更新",[37,416,361],{},[37,418,361],{},[37,420,421,422,425,426],{},"当前 ",[44,423,424],{},"use_imu_as_input=False"," 分支使用；阈值来自 ",[44,427,428],{},"mapping.satu_acc\u002Fsatu_gyro",[22,430,431,436,441,444,448,451,454,457],{},[37,432,433],{},[44,434,435],{},"init_map_size",[37,437,438],{},[44,439,440],{},"10",[37,442,443],{},"点，计数",[37,445,446],{},[40,447,355],{},[37,449,450],{},"初始化地图累计点数的最低门槛",[37,452,453],{},"累计更多初始点；超过单帧点数时可能延后开始匹配",[37,455,456],{},"更早满足门槛，但初始地图可能更少",[37,458,459,462],{},[40,460,461],{},"不是帧数，也不是 IMU 初始化次数","；初始点云来自预处理结果",[22,464,465,470,474,477,482,485,488,491],{},[37,466,467],{},[44,468,469],{},"point_filter_num",[37,471,472],{},[44,473,237],{},[37,475,476],{},"无量纲，取点间隔",[37,478,479],{},[40,480,481],{},"实物运行时重点观察，有问题再针对性调整",[37,483,484],{},"Livox 点通过 line\u002Ftag 初筛后，每 N 个选一个",[37,486,487],{},"保留点更少，通常计算量下降，可能丢失有效结构",[37,489,490],{},"保留点更多，通常计算量增加，结构更丰富",[37,492,493],{},"当前 Livox 分支实际使用；应为正整数；注释中的“4、3”不是完整允许范围",[22,495,496,501,505,507,511,514,516,518],{},[37,497,498],{},[44,499,500],{},"space_down_sample",[37,502,503],{},[44,504,378],{},[37,506,350],{},[37,508,509],{},[40,510,355],{},[37,512,513],{},"是否对当前扫描做空间体素降采样",[37,515,361],{},[37,517,361],{},[37,519,520,521,524],{},"True 使用 ",[44,522,523],{},"filter_size_surf","；False 跳过该阶段，但前面的间隔取点仍执行",[22,526,527,531,535,538,542,545,548,551],{},[37,528,529],{},[44,530,523],{},[37,532,533],{},[44,534,261],{},[37,536,537],{},"m，体素边长",[37,539,540],{},[40,541,481],{},[37,543,544],{},"压缩当前扫描中空间上重复的点",[37,546,547],{},"通常扫描点更少、计算更快，小结构保留更少",[37,549,550],{},"通常扫描点更多、细节更多，计算量增加",[37,552,553,556],{},[44,554,555],{},"space_down_sample=True"," 时使用；0.2 m 不是定位精度",[22,558,559,564,568,571,575,578,581,584],{},[37,560,561],{},[44,562,563],{},"filter_size_map",[37,565,566],{},[44,567,261],{},[37,569,570],{},"m，地图筛选尺度",[37,572,573],{},[40,574,481],{},[37,576,577],{},"地图更新时，抑制向已有点的体素重复插入新点",[37,579,580],{},"通常地图更稀疏、增长更慢，细节减少",[37,582,583],{},"通常地图更密、增长更快，内存和搜索负担增加",[37,585,586],{},"在地图插入阶段使用，独立于扫描降采样开关",[22,588,589,594,598,601,605,608,610,612],{},[37,590,591],{},[44,592,593],{},"ivox_nearby_type",[37,595,596],{},[44,597,288],{},[37,599,600],{},"不适用，枚举",[37,602,603],{},[40,604,355],{},[37,606,607],{},"选择地图最近邻搜索涉及的邻接网格",[37,609,361],{},[37,611,361],{},[37,613,614],{},"支持 0\u002F6\u002F18\u002F26；邻域越多，候选范围越广，通常搜索成本越高",[22,616,617,622,626,628,633,636,638,640],{},[37,618,619],{},[44,620,621],{},"runtime_pos_log_enable",[37,623,624],{},[44,625,190],{},[37,627,350],{},[37,629,630],{},[40,631,632],{},"根据实际功能需求开启或设置",[37,634,635],{},"启用详细状态记录和耗时统计",[37,637,361],{},[37,639,361],{},[37,641,642],{},"True 增加状态写盘和终端输出；False 时源码仍会打开部分日志文件",[145,644,645],{"id":645},"参数详解",[647,648,650],"h6",{"id":649},"use_imu_as_inputimu参与运动估计的方式","use_imu_as_input（IMU参与运动估计的方式）",[652,653,654],"p",{},"use_imu_as_input 决定 IMU 怎样参与滤波。",[652,656,657],{},"当前 False 的处理方式是：滤波器内部估计角速度、加速度等状态，收到 IMU 后用测量纠正这些状态，再进行运动预测和激光匹配。",[652,659,660],{},"设为 True 后，加速度与角速度作为预测输入，经过单位缩放、偏置处理后推动运动状态。切换模型还会改变所使用的噪声参数，所以首轮保持当前 False。",[652,662,663],{},"关闭 IMU 对应的是另一个参数 mapping.imu_en。",[647,665,667],{"id":666},"prop_at_freq_of_imu按imu时刻更新估计不确定性","prop_at_freq_of_imu（按IMU时刻更新估计不确定性）",[652,669,670],{},"prop_at_freq_of_imu 主要影响协方差传播。",[652,672,673],{},"协方差可以理解为滤波器对当前估计的不确定程度。当前 True 时，代码在处理 IMU 时刻传播它；状态仍会推进到激光点的采样时刻。",[652,675,676],{},"改成 False 后，代码还会在激光逐点时刻增加协方差预测，通常计算量更大。它不是“把 Point-LIO 输出频率设成 IMU 频率”的开关，也不能保证切换后精度更高。",[647,678,680],{"id":679},"check_satuimu读数量程保护","check_satu（IMU读数量程保护）",[652,682,683],{},"check_satu 是逐轴处理。",[652,685,686,687],{},"当前代码分别比较三个加速度轴和三个角速度轴：",[44,688,689],{},"abs(原始轴值) ≥ 0.99 × 对应饱和阈值",[652,691,692],{},"被标记的轴停止参与这次 IMU 观测更新，其他轴继续使用。因此，它需要配合正确单位和量程的 satu_acc\u002Fsatu_gyro。这项检查在当前 output 模型中生效。",[647,694,696],{"id":695},"init_map_size初始化地图的最少点数","init_map_size（初始化地图的最少点数）",[652,698,699],{},"init_map_size=10 只是一道点数门槛。",[652,701,702,703],{},"代码判断的是：",[44,704,705],{},"init_feats_world->size() >= init_map_size",[652,707,708],{},"如果一帧预处理后已有几千个点，设置 10 或 100 都可能在同一帧满足条件。因此，增大它不一定增加初始化时间，也不能替代静止 IMU 初始化。",[652,710,711],{},"初始化地图使用的是预处理后的点云，并没有直接使用经过 filter_size_surf 体素降采样的那份点云。",[652,713,714],{},"三个点数控制参数作用于不同阶段。",[652,716,717],{},"初始化完成后的常规处理，大致是：",[149,719,724],{"className":720,"code":722,"language":723,"meta":154},[721],"language-text","原始点云\n → line\u002Ftag 初筛\n → point_filter_num：按间隔取点\n → 距离等过滤\n → filter_size_surf：扫描空间降采样\n → 逐点匹配\n → filter_size_map：地图插入筛选\n","text",[44,725,722],{"__ignoreMap":154},[652,727,728],{},"例如，有约 10,000 个点通过 line\u002Ftag 初筛：",[730,731,732,736,739],"ul",{},[733,734,735],"li",{},"point_filter_num=8：先选择约 1,250 个，后续过滤可能继续减少。",[733,737,738],{},"改为 4：先选择约 2,500 个。",[733,740,741],{},"随后扫描体素降采样，还会进一步压缩空间上密集的点。",[652,743,744],{},"因此，间隔取点更多，不一定等比例增加最终匹配点数，还要看扫描体素、遮挡和匹配条件。",[647,746,748],{"id":747},"ivox_nearby_type地图邻格搜索范围","ivox_nearby_type（地图邻格搜索范围）",[652,750,751],{},"ivox_nearby_type=18 表示邻接网格类型。",[652,753,754],{},"本地实现实际搜索的网格数包含中心网格：",[16,756,757,771],{},[19,758,759],{},[22,760,761,765,768],{},[25,762,764],{"align":763},"right","配置值",[25,766,767],{},"搜索范围",[25,769,770],{"align":763},"总网格数",[32,772,773,786,799,811],{},[22,774,775,780,783],{},[37,776,777],{"align":763},[44,778,779],{},"0",[37,781,782],{},"仅中心网格",[37,784,785],{"align":763},"1",[22,787,788,793,796],{},[37,789,790],{"align":763},[44,791,792],{},"6",[37,794,795],{},"中心＋面相邻网格",[37,797,798],{"align":763},"7",[22,800,801,805,808],{},[37,802,803],{"align":763},[44,804,288],{},[37,806,807],{},"再加入棱相邻网格",[37,809,810],{"align":763},"19",[22,812,813,818,821],{},[37,814,815],{"align":763},[44,816,817],{},"26",[37,819,820],{},"再加入角相邻网格",[37,822,823],{"align":763},"27",[652,825,826],{},"它不表示“找 18 个点”或“搜索 18 米”。",[652,828,829],{},"实际空间尺度还取决于 mapping.ivox_grid_resolution，当前为 0.5 m；匹配过程中另有最近邻和残差条件。",[652,831,832],{},"以后调这组参数时，主要比较输出延迟、有效环境结构、点云重影和轨迹连续性。先使用当前值建立基准，再针对具体表现改变一个参数，才能判断改善来自哪里。",[140,834,836],{"id":835},"common输入话题与点云时间处理","common（输入话题与点云时间处理）",[145,838,147],{"id":839},"参数表-1",[149,841,843],{"className":151,"code":842,"language":153,"meta":154,"style":154},"    common:\n      lid_topic: \"livox\u002Flidar\"\n      imu_topic: \"livox\u002Fimu\"\n      con_frame: False                                  # True: if you need to combine several LiDAR frames into one\n      con_frame_num: 1                                  # the number of frames combined\n      cut_frame: False                                  # True: if you need to cut one LiDAR frame into several subframes\n      cut_frame_time_interval: 0.05                     # should be integral fraction of 1 \u002F LiDAR frequency\n      time_diff_lidar_to_imu: 0.0                       # Time offset between LiDAR and IMU calibrated by other algorithms, e.g., LI-Init (find in Readme)\n",[44,844,845,852,863,873,885,897,909,922],{"__ignoreMap":154},[158,846,847,850],{"class":160,"line":161},[158,848,849],{"class":164},"    common",[158,851,169],{"class":168},[158,853,854,857,859],{"class":160,"line":172},[158,855,856],{"class":164},"      lid_topic",[158,858,186],{"class":168},[158,860,862],{"class":861},"sZZnC","\"livox\u002Flidar\"\n",[158,864,865,868,870],{"class":160,"line":180},[158,866,867],{"class":164},"      imu_topic",[158,869,186],{"class":168},[158,871,872],{"class":861},"\"livox\u002Fimu\"\n",[158,874,875,878,880,882],{"class":160,"line":197},[158,876,877],{"class":164},"      con_frame",[158,879,186],{"class":168},[158,881,190],{"class":189},[158,883,884],{"class":193},"                                  # True: if you need to combine several LiDAR frames into one\n",[158,886,887,890,892,894],{"class":160,"line":208},[158,888,889],{"class":164},"      con_frame_num",[158,891,186],{"class":168},[158,893,785],{"class":189},[158,895,896],{"class":193},"                                  # the number of frames combined\n",[158,898,899,902,904,906],{"class":160,"line":218},[158,900,901],{"class":164},"      cut_frame",[158,903,186],{"class":168},[158,905,190],{"class":189},[158,907,908],{"class":193},"                                  # True: if you need to cut one LiDAR frame into several subframes\n",[158,910,911,914,916,919],{"class":160,"line":229},[158,912,913],{"class":164},"      cut_frame_time_interval",[158,915,186],{"class":168},[158,917,918],{"class":189},"0.05",[158,920,921],{"class":193},"                     # should be integral fraction of 1 \u002F LiDAR frequency\n",[158,923,924,927,929,932],{"class":160,"line":243},[158,925,926],{"class":164},"      time_diff_lidar_to_imu",[158,928,186],{"class":168},[158,930,931],{"class":189},"0.0",[158,933,934],{"class":193},"                       # Time offset between LiDAR and IMU calibrated by other algorithms, e.g., LI-Init (find in Readme)\n",[16,936,937,957],{},[19,938,939],{},[22,940,941,943,945,947,949,951,953,955],{},[25,942,313],{},[25,944,316],{},[25,946,319],{},[25,948,322],{},[25,950,325],{},[25,952,328],{},[25,954,331],{},[25,956,334],{},[32,958,959,992,1020,1047,1077,1108,1136],{},[22,960,961,966,971,974,979,982,984,986],{},[37,962,963],{},[44,964,965],{},"common.lid_topic",[37,967,968],{},[44,969,970],{},"\"livox\u002Flidar\"",[37,972,973],{},"不适用，话题名",[37,975,976],{},[40,977,978],{},"上实物前必须核对并正确配置",[37,980,981],{},"指定点云订阅话题",[37,983,361],{},[37,985,361],{},[37,987,421,988,991],{},[44,989,990],{},"lidar_type=1","，要求该话题发布 Livox CustomMsg；还需匹配命名空间",[22,993,994,999,1004,1006,1010,1013,1015,1017],{},[37,995,996],{},[44,997,998],{},"common.imu_topic",[37,1000,1001],{},[44,1002,1003],{},"\"livox\u002Fimu\"",[37,1005,973],{},[37,1007,1008],{},[40,1009,978],{},[37,1011,1012],{},"指定 IMU 订阅话题",[37,1014,361],{},[37,1016,361],{},[37,1018,1019],{},"当前连接 MID360 内部 IMU；读取加速度、角速度和时间戳",[22,1021,1022,1027,1031,1033,1037,1040,1042,1044],{},[37,1023,1024],{},[44,1025,1026],{},"common.con_frame",[37,1028,1029],{},[44,1030,190],{},[37,1032,350],{},[37,1034,1035],{},[40,1036,355],{},[37,1038,1039],{},"是否先合并多帧点云，再送入后续处理",[37,1041,361],{},[37,1043,361],{},[37,1045,1046],{},"True 会进入合帧分支，但数量写死为10；当前实现还有下一帧未加入的问题",[22,1048,1049,1054,1058,1061,1066,1069,1072,1074],{},[37,1050,1051],{},[44,1052,1053],{},"common.con_frame_num",[37,1055,1056],{},[44,1057,785],{},[37,1059,1060],{},"帧，计数",[37,1062,1063],{},[40,1064,1065],{},"当前运行不使用这个参数，暂不调整",[37,1067,1068],{},"注释意图：指定合并帧数",[37,1070,1071],{},"当前实现无变化",[37,1073,1071],{},[37,1075,1076],{},"参数已读取，但合帧代码使用固定数字10，没有使用它",[22,1078,1079,1084,1088,1090,1094,1097,1099,1101],{},[37,1080,1081],{},[44,1082,1083],{},"common.cut_frame",[37,1085,1086],{},[44,1087,190],{},[37,1089,350],{},[37,1091,1092],{},[40,1093,1065],{},[37,1095,1096],{},"注释意图：启用点云拆帧",[37,1098,361],{},[37,1100,361],{},[37,1102,1103,1104,1107],{},"实际分支检查的是另一个变量 ",[44,1105,1106],{},"cut_frame_init","；没有看到二者连接",[22,1109,1110,1115,1119,1122,1126,1129,1131,1133],{},[37,1111,1112],{},[44,1113,1114],{},"common.cut_frame_time_interval",[37,1116,1117],{},[44,1118,918],{},[37,1120,1121],{},"s",[37,1123,1124],{},[40,1125,1065],{},[37,1127,1128],{},"注释意图：指定拆分后的时间间隔",[37,1130,1071],{},[37,1132,1071],{},[37,1134,1135],{},"参数已读取，未发现参与拆帧计算",[22,1137,1138,1143,1147,1150,1154,1157,1159,1161],{},[37,1139,1140],{},[44,1141,1142],{},"common.time_diff_lidar_to_imu",[37,1144,1145],{},[44,1146,931],{},[37,1148,1149],{},"s，时间偏移量",[37,1151,1152],{},[40,1153,1065],{},[37,1155,1156],{},"注释意图：补偿雷达与 IMU 的时间差",[37,1158,1071],{},[37,1160,1071],{},[37,1162,1163],{},"参数已读取，但 IMU 时间戳修正没有使用它",[145,1165,645],{"id":1166},"参数详解-1",[647,1168,1170],{"id":1169},"lid_topic-与-imu_topic雷达与imu输入话题","lid_topic 与 imu_topic（雷达与IMU输入话题）",[652,1172,1173],{},"两个话题参数：名称、消息类型和命名空间必须同时对应。",[652,1175,1176],{},"当前实车驱动设置 xfer_format=4、multi_topic=0，源码发布：",[149,1178,1181],{"className":1179,"code":1180,"language":723,"meta":154},[721],"livox\u002Flidar             → Livox CustomMsg\nlivox\u002Flidar\u002Fpointcloud  → PointCloud2\nlivox\u002Fimu              → sensor_msgs\u002FImu\n",[44,1182,1180],{"__ignoreMap":154},[652,1184,1185],{},"Point-LIO 当前 lidar_type=1，订阅的是 CustomMsg，因此配置中的 livox\u002Flidar 与驱动匹配。",[652,1187,1188],{},"这两个配置都是相对话题名：",[16,1190,1191,1204],{},[19,1192,1193],{},[22,1194,1195,1198],{},[25,1196,1197],{},"节点命名空间",[25,1199,1200,1203],{},[44,1201,1202],{},"livox\u002Flidar"," 实际解析为",[32,1205,1206,1216],{},[22,1207,1208,1211],{},[37,1209,1210],{},"空命名空间",[37,1212,1213],{},[44,1214,1215],{},"\u002Flivox\u002Flidar",[22,1217,1218,1223],{},[37,1219,1220],{},[44,1221,1222],{},"\u002Fred_standard_robot1",[37,1224,1225],{},[44,1226,1227],{},"\u002Fred_standard_robot1\u002Flivox\u002Flidar",[652,1229,1230],{},"驱动和 Point-LIO 的命名空间或话题重映射要一致。话题名负责选择输入源，消息中的 frame_id 表示坐标名称；选择话题不会自动进行坐标变换。",[647,1232,1234],{"id":1233},"con_frame-与-con_frame_num多帧点云合并","con_frame 与 con_frame_num（多帧点云合并）",[652,1236,1237],{},"con_frame 的实际行为与注释不完全一致。",[652,1239,1240],{},"当前 Livox 合帧分支执行的是：",[1242,1243,1244,1247,1250,1253],"ol",{},[733,1245,1246],{},"收到前10帧，累计它们的点。",[733,1248,1249],{},"把每帧逐点时间调整到第一帧的起始时间。",[733,1251,1252],{},"第11次回调时，把累计点云放入处理队列。",[733,1254,1255],{},"这次回调收到的第11帧没有加入累计点云，然后计数清零。",[652,1257,1258],{},"所以即使设置：",[149,1260,1262],{"className":151,"code":1261,"language":153,"meta":154,"style":154},"con_frame: True\ncon_frame_num: 1\n",[44,1263,1264,1273],{"__ignoreMap":154},[158,1265,1266,1269,1271],{"class":160,"line":161},[158,1267,1268],{"class":164},"con_frame",[158,1270,186],{"class":168},[158,1272,205],{"class":189},[158,1274,1275,1278,1280],{"class":160,"line":172},[158,1276,1277],{"class":164},"con_frame_num",[158,1279,186],{"class":168},[158,1281,1282],{"class":189},"1\n",[652,1284,1285],{},"也不会按“合并1帧”执行。代码仍累计10帧，再由下一次回调触发输出。",[652,1287,1288],{},"假设驱动稳定20 Hz，这段逻辑理论上约每11个回调输出一个合并包，即约 1.82 Hz，累计点云覆盖约 0.5秒。这会增加等待时间和单次处理点数，因此首轮保持 False。",[647,1290,1292],{"id":1291},"cut_frame-与-cut_frame_time_interval点云拆帧设置","cut_frame 与 cut_frame_time_interval（点云拆帧设置）",[652,1294,1295],{},"拆帧函数存在，但 YAML 开关没有连接到它。",[652,1297,1298],{},"实际代码检查：",[149,1300,1304],{"className":1301,"code":1302,"language":1303,"meta":154,"style":154},"language-cpp shiki shiki-themes github-light github-dark","if (cut_frame_init) \n{\n    process_cut_frame_livox(..., cut_frame_num, ...);\n}\n","cpp",[44,1305,1306,1315,1320,1329],{"__ignoreMap":154},[158,1307,1308,1312],{"class":160,"line":161},[158,1309,1311],{"class":1310},"szBVR","if",[158,1313,1314],{"class":168}," (cut_frame_init) \n",[158,1316,1317],{"class":160,"line":172},[158,1318,1319],{"class":168},"{\n",[158,1321,1322,1326],{"class":160,"line":180},[158,1323,1325],{"class":1324},"sScJk","    process_cut_frame_livox",[158,1327,1328],{"class":168},"(..., cut_frame_num, ...);\n",[158,1330,1331],{"class":160,"line":197},[158,1332,1333],{"class":168},"}\n",[652,1335,1336],{},"其中 cut_frame_init 默认 False。当前没有发现把 common.cut_frame 赋给它，也没有发现使用 cut_frame_time_interval。\n此外，这个内部函数按点数分段，使用 cut_frame_num，并不是直接按照 YAML 中的0.05秒切分。\n因此，单独修改这两个 YAML 参数不会实现注释描述的拆帧行为。",[647,1338,1340],{"id":1339},"time_diff_lidar_to_imu雷达与imu时间偏移","time_diff_lidar_to_imu（雷达与IMU时间偏移）",[652,1342,1343],{},"时间差参数没有接入，不代表系统不需要同步。",[652,1345,1346],{},"IMU 回调实际修正时间戳的表达式是：",[149,1348,1351],{"className":1349,"code":1350,"language":723,"meta":154},[721],"修正后时间 = 原始时间\n           − timediff_imu_wrt_lidar\n           − time_lag_IMU_wtr_lidar\n",[44,1352,1350],{"__ignoreMap":154},[652,1354,1355],{},"它使用的是另外两个变量，目前初始化为零；没有使用 common.time_diff_lidar_to_imu。",[652,1357,1358],{},"Point-LIO 仍然会根据时间戳等待 IMU 覆盖点云扫描末尾。但这只是按时间戳组织数据，不能证明两种传感器的物理采样时间已经对齐。",[652,1360,1361],{},"以后实车需要测量实际同步状态；如果发现偏移，必须先确认校正方式及其符号，再处理对应代码或驱动配置。当前把 time_diff_lidar_to_imu 填成非零值，不会完成校正。",[140,1363,1365],{"id":1364},"prior_pcd先验点云地图","prior_pcd（先验点云地图）",[145,1367,147],{"id":1368},"参数表-2",[149,1370,1372],{"className":151,"code":1371,"language":153,"meta":154,"style":154},"    prior_pcd:\n      enable: False\n      # NOTE: `prior_pcd_map_path` will be provided in the launch file\n      # prior_pcd_map_path: \"\"\n      init_pose: [ 0.0, 0.0, 0.0 ]\n",[44,1373,1374,1381,1391,1396,1401],{"__ignoreMap":154},[158,1375,1376,1379],{"class":160,"line":161},[158,1377,1378],{"class":164},"    prior_pcd",[158,1380,169],{"class":168},[158,1382,1383,1386,1388],{"class":160,"line":172},[158,1384,1385],{"class":164},"      enable",[158,1387,186],{"class":168},[158,1389,1390],{"class":189},"False\n",[158,1392,1393],{"class":160,"line":180},[158,1394,1395],{"class":193},"      # NOTE: `prior_pcd_map_path` will be provided in the launch file\n",[158,1397,1398],{"class":160,"line":197},[158,1399,1400],{"class":193},"      # prior_pcd_map_path: \"\"\n",[158,1402,1403,1406,1409,1411,1414,1416,1418,1420],{"class":160,"line":208},[158,1404,1405],{"class":164},"      init_pose",[158,1407,1408],{"class":168},": [ ",[158,1410,931],{"class":189},[158,1412,1413],{"class":168},", ",[158,1415,931],{"class":189},[158,1417,1413],{"class":168},[158,1419,931],{"class":189},[158,1421,1422],{"class":168}," ]\n",[16,1424,1425,1445],{},[19,1426,1427],{},[22,1428,1429,1431,1433,1435,1437,1439,1441,1443],{},[25,1430,313],{},[25,1432,316],{},[25,1434,319],{},[25,1436,322],{},[25,1438,325],{},[25,1440,328],{},[25,1442,331],{},[25,1444,334],{},[32,1446,1447,1474,1504],{},[22,1448,1449,1454,1458,1460,1464,1467,1469,1471],{},[37,1450,1451],{},[44,1452,1453],{},"prior_pcd.enable",[37,1455,1456],{},[44,1457,190],{},[37,1459,350],{},[37,1461,1462],{},[40,1463,632],{},[37,1465,1466],{},"选择初始地图来源：当前扫描或已有 PCD",[37,1468,361],{},[37,1470,361],{},[37,1472,1473],{},"False：从当前扫描建立初始地图；True：加载先验 PCD；集成建图的 slam_launch.py 强制为 False，切换工作方式后按用途配置",[22,1475,1476,1481,1487,1490,1494,1497,1499,1501],{},[37,1477,1478],{},[44,1479,1480],{},"prior_pcd.prior_pcd_map_path",[37,1482,1483,1484],{},"YAML 未设置；程序默认 ",[44,1485,1486],{},"\"\"",[37,1488,1489],{},"不适用，文件路径",[37,1491,1492],{},[40,1493,632],{},[37,1495,1496],{},"指定先验 PCD 文件",[37,1498,361],{},[37,1500,361],{},[37,1502,1503],{},"当前未启用先验，无需填写；仅启用先验时读取；定位 launch 会传入路径，直接运行节点不会自动获得该路径",[22,1505,1506,1511,1516,1519,1523,1526,1529,1532],{},[37,1507,1508],{},[44,1509,1510],{},"prior_pcd.init_pose",[37,1512,1513],{},[44,1514,1515],{},"[0.0,0.0,0.0]",[37,1517,1518],{},"m，分别为 x\u002Fy\u002Fz",[37,1520,1521],{},[40,1522,1065],{},[37,1524,1525],{},"给内部 IMU 的位置状态赋初始位置",[37,1527,1528],{},"某分量增大，位置沿对应坐标轴正方向偏移",[37,1530,1531],{},"某分量减小，位置沿对应坐标轴负方向偏移",[37,1533,1534,1535,1538,1539,1541],{},"仅 ",[44,1536,1537],{},"enable=True"," 且 ",[44,1540,424],{}," 时使用；实际赋值位于首次输出位姿阶段",[145,1543,645],{"id":1544},"参数详解-2",[647,1546,1548],{"id":1547},"enable先验地图加载开关","enable（先验地图加载开关）",[652,1550,1551],{},"enable 改变的是初始匹配地图的来源。",[652,1553,1554],{},"当前 False 的流程是：",[149,1556,1559],{"className":1557,"code":1558,"language":723,"meta":154},[721],"IMU 初始化\n → 累计当前扫描点\n → 达到 init_map_size 门槛\n → 用这些点建立地图\n → 后续匹配并更新地图\n",[44,1560,1558],{"__ignoreMap":154},[652,1562,1563],{},"开启后，达到同样的初始化门槛时，代码改为读取 PCD，并把其中的点加入地图搜索结构。",[652,1565,1566],{},"加载先验地图不会自动完成全局重定位，也不会自动确定机器人在整张地图中的位置。初始位置、姿态和地图坐标必须足够一致，后续局部匹配才有基础。",[652,1568,1569],{},"另外，开启先验后，代码会延后新点插入；相关有效处理计数超过200后，仍会继续更新地图。因此这个开关也不意味着地图永久冻结。",[652,1571,1572],{},"先验 PCD 加载时没有自动做坐标旋转或单位缩放，地图还必须与当前 Point-LIO 参考系一致。源码对 PCD 读取失败返回的空指针也没有在调用处检查，所以启用前需要确认文件有效。",[647,1574,1576],{"id":1575},"prior_pcd_map_path先验点云地图路径","prior_pcd_map_path（先验点云地图路径）",[652,1578,1579],{},"路径注释只对相应启动链成立。",[652,1581,1582],{},"localization_launch.py 会将启动参数 prior_pcd_file 传给：prior_pcd.prior_pcd_map_path",[652,1584,1585],{},"但它没有因此自动把 prior_pcd.enable 改成 True。当前配置即使获得路径，Point-LIO 仍不加载它。",[652,1587,1588],{},"而 slam_launch.py 会明确覆盖：prior_pcd.enable: False",[652,1590,1591],{},"这与从当前扫描建图的用途一致。",[652,1593,1594],{},"同一定位启动链中的 small_gicp 也会接收先验文件，但它是另一个节点。Point-LIO 关闭先验，不代表 small_gicp 没有使用地图。",[647,1596,1598],{"id":1597},"init_pose内部imu的初始位置","init_pose（内部IMU的初始位置）",[652,1600,1601],{},"init_pose 有三个容易误解的地方：",[730,1603,1604,1611,1614],{},[733,1605,1606,1607,1610],{},"它是 ",[158,1608,1609],{},"x,y,z","，三个数都是米。 第三个数不是 yaw，也不包含 roll\u002Fpitch\u002Fyaw。",[733,1612,1613],{},"它对应内部 IMU 原点在 camera_init 中的位置。 不是直接设置 base_footprint 的导航位置。",[733,1615,1616],{},"本地代码的赋值时机比较特殊。 它在首次输出位姿时直接修改 kf_output.x_.pos，并非在加载先验、开始匹配之前统一完成初始化。",[652,1618,1619],{},"尤其在你当前“高频里程计开启、path 关闭”的设置下，这次赋值发生在首次成功匹配后的里程计输出中。因此，未来启用先验时，不能只填一个位置就认为首轮匹配已经从该位置开始；这段初始化顺序需要另行审查。",[140,1621,1623],{"id":1622},"preprocess雷达格式与点云预处理","preprocess（雷达格式与点云预处理）",[145,1625,147],{"id":1626},"参数表-3",[149,1628,1630],{"className":151,"code":1629,"language":153,"meta":154,"style":154},"    preprocess:\n      lidar_type: 1                                     # 1 for Livox serials LiDAR, 2 for Velodyne LiDAR, 3 for ouster LiDAR\n      scan_line: 4\n      timestamp_unit: 3                                 # the unit of time\u002Ft field in the PointCloud2 rostopic: 0-second, 1-milisecond, 2-microsecond, 3-nanosecond.\n      blind: 0.5\n",[44,1631,1632,1639,1651,1661,1674],{"__ignoreMap":154},[158,1633,1634,1637],{"class":160,"line":161},[158,1635,1636],{"class":164},"    preprocess",[158,1638,169],{"class":168},[158,1640,1641,1644,1646,1648],{"class":160,"line":172},[158,1642,1643],{"class":164},"      lidar_type",[158,1645,186],{"class":168},[158,1647,785],{"class":189},[158,1649,1650],{"class":193},"                                     # 1 for Livox serials LiDAR, 2 for Velodyne LiDAR, 3 for ouster LiDAR\n",[158,1652,1653,1656,1658],{"class":160,"line":180},[158,1654,1655],{"class":164},"      scan_line",[158,1657,186],{"class":168},[158,1659,1660],{"class":189},"4\n",[158,1662,1663,1666,1668,1671],{"class":160,"line":197},[158,1664,1665],{"class":164},"      timestamp_unit",[158,1667,186],{"class":168},[158,1669,1670],{"class":189},"3",[158,1672,1673],{"class":193},"                                 # the unit of time\u002Ft field in the PointCloud2 rostopic: 0-second, 1-milisecond, 2-microsecond, 3-nanosecond.\n",[158,1675,1676,1679,1681],{"class":160,"line":208},[158,1677,1678],{"class":164},"      blind",[158,1680,186],{"class":168},[158,1682,1683],{"class":189},"0.5\n",[652,1685,1686],{},"当前 lidar_type=1、scan_line=4 与本地 MID360 驱动实现一致；blind=0.5 可以先作为基准。\ntimestamp_unit=3 在当前 Livox CustomMsg 分支中没有参与换算，但逐点时间仍被正确地按 ns 处理。",[16,1688,1689,1709],{},[19,1690,1691],{},[22,1692,1693,1695,1697,1699,1701,1703,1705,1707],{},[25,1694,313],{},[25,1696,316],{},[25,1698,319],{},[25,1700,322],{},[25,1702,325],{},[25,1704,328],{},[25,1706,331],{},[25,1708,334],{},[32,1710,1711,1739,1773,1805],{},[22,1712,1713,1718,1722,1724,1729,1732,1734,1736],{},[37,1714,1715],{},[44,1716,1717],{},"preprocess.lidar_type",[37,1719,1720],{},[44,1721,785],{},[37,1723,600],{},[37,1725,1726],{},[40,1727,1728],{},"按设备型号和驱动核对，通常保持当前值",[37,1730,1731],{},"选择点云消息类型及字段解析方式",[37,1733,361],{},[37,1735,361],{},[37,1737,1738],{},"当前走 Livox CustomMsg 分支；必须与输入消息格式匹配",[22,1740,1741,1746,1751,1754,1758,1761,1764,1767],{},[37,1742,1743],{},[44,1744,1745],{},"preprocess.scan_line",[37,1747,1748],{},[44,1749,1750],{},"4",[37,1752,1753],{},"条，计数",[37,1755,1756],{},[40,1757,1728],{},[37,1759,1760],{},"指定接受的扫描线编号范围",[37,1762,1763],{},"提高允许编号上限；输入仍只有0～3时不会增加点数",[37,1765,1766],{},"丢弃超过编号上限的点，减少有效数据",[37,1768,1769,1770],{},"本地驱动为 MID360 设置4个 line 编号；Point-LIO 判断 ",[44,1771,1772],{},"line \u003C scan_line",[22,1774,1775,1780,1784,1787,1791,1794,1796,1798],{},[37,1776,1777],{},[44,1778,1779],{},"preprocess.timestamp_unit",[37,1781,1782],{},[44,1783,1670],{},[37,1785,1786],{},"不适用，单位选择枚举",[37,1788,1789],{},[40,1790,1065],{},[37,1792,1793],{},"指定 PointCloud2 逐点时间字段的单位",[37,1795,361],{},[37,1797,361],{},[37,1799,1800,1801,1804],{},"当前 CustomMsg 直接将 ",[44,1802,1803],{},"offset_time"," 从 ns 换成 ms，不通过此开关",[22,1806,1807,1812,1817,1820,1824,1827,1830,1833],{},[37,1808,1809],{},[44,1810,1811],{},"preprocess.blind",[37,1813,1814],{},[44,1815,1816],{},"0.5",[37,1818,1819],{},"m，距离",[37,1821,1822],{},[40,1823,481],{},[37,1825,1826],{},"排除距离点云坐标原点过近的点",[37,1828,1829],{},"排除范围扩大，近处干扰减少，同时丢失更多有效结构",[37,1831,1832],{},"保留更多近处结构，也可能保留更多车体或近距离干扰点",[37,1834,1835],{},"在当前 Livox 预处理中实际使用；按三维距离过滤",[145,1837,645],{"id":1838},"参数详解-3",[647,1840,1842],{"id":1841},"lidar_type雷达类型与输入格式","lidar_type（雷达类型与输入格式）",[652,1844,1845],{},"lidar_type：选择消息格式和解析分支。 本地支持的值是：",[16,1847,1848,1858],{},[19,1849,1850],{},[22,1851,1852,1855],{},[25,1853,1854],{"align":763},"值",[25,1856,1857],{},"处理方式",[32,1859,1860,1873,1891,1905],{},[22,1861,1862,1866],{},[37,1863,1864],{"align":763},[44,1865,785],{},[37,1867,1868,1869,1872],{},"Livox CustomMsg；内部名称为 ",[44,1870,1871],{},"AVIA","，当前 MID360 也走此路径",[22,1874,1875,1880],{},[37,1876,1877],{"align":763},[44,1878,1879],{},"2",[37,1881,1882,1883,1886,1887,1890],{},"Velodyne 样式 PointCloud2，包含 ",[44,1884,1885],{},"time","、",[44,1888,1889],{},"ring"," 等字段",[22,1892,1893,1897],{},[37,1894,1895],{"align":763},[44,1896,1670],{},[37,1898,1899,1900,1886,1903,1890],{},"Ouster 样式 PointCloud2，包含 ",[44,1901,1902],{},"t",[44,1904,1889],{},[22,1906,1907,1911],{},[37,1908,1909],{"align":763},[44,1910,1750],{},[37,1912,1913],{},"Hesai XT32 样式 PointCloud2；原 YAML 注释没有列出这一项",[652,1915,1916],{},"它不仅决定字段怎样解析，还决定订阅 CustomMsg 还是 PointCloud2。当前实车驱动在 livox\u002Flidar 发布 CustomMsg，所以设置为 1。",[652,1918,1919],{},"仿真使用 2，是因为转换器生成了 Velodyne 样式字段，并不代表仿真中换了一台 Velodyne 雷达。",[647,1921,1923],{"id":1922},"scan_line有效扫描线数量","scan_line（有效扫描线数量）",[652,1925,1926,1927],{},"scan_line：限制接受的 line 编号。 当前判断条件是：",[44,1928,1929],{},"msg->points[i].line \u003C N_SCANS",[652,1931,1932,1933],{},"N_SCANS 来自 scan_line，所以设置4时允许：",[44,1934,1935],{},"line = 0、1、2、3",[652,1937,1938,1939,1942],{},"本地驱动对 MID360 定义 kLineNumberMid360=4，并按：",[44,1940,1941],{},"point.line = i % pkt.line_num;","生成 line 字段。因此，当前4这个值有驱动代码依据。",[652,1944,1945],{},"例如：",[730,1947,1948,1951],{},[733,1949,1950],{},"改成2：只接受 line 0、1，丢弃 line 2、3。",[733,1952,1953],{},"改成8：如果输入仍只有0～3，就不会多出新的点。\n它主要是输入格式匹配参数。调节点数密度应首先看前面讲过的 point_filter_num 和体素尺寸。",[647,1955,1957],{"id":1956},"timestamp_unit点内时间单位","timestamp_unit（点内时间单位）",[652,1959,1960],{},"timestamp_unit：解释逐点时间字段的单位。 本地枚举及转换关系为：",[16,1962,1963,1975],{},[19,1964,1965],{},[22,1966,1967,1969,1972],{},[25,1968,1854],{"align":763},[25,1970,1971],{},"输入字段单位",[25,1973,1974],{"align":763},"换算成内部 ms 的倍率",[32,1976,1977,1989,2001,2013],{},[22,1978,1979,1983,1986],{},[37,1980,1981],{"align":763},[44,1982,779],{},[37,1984,1985],{},"秒，s",[37,1987,1988],{"align":763},"×1000",[22,1990,1991,1995,1998],{},[37,1992,1993],{"align":763},[44,1994,785],{},[37,1996,1997],{},"毫秒，ms",[37,1999,2000],{"align":763},"×1",[22,2002,2003,2007,2010],{},[37,2004,2005],{"align":763},[44,2006,1879],{},[37,2008,2009],{},"微秒，μs",[37,2011,2012],{"align":763},"×0.001",[22,2014,2015,2019,2022],{},[37,2016,2017],{"align":763},[44,2018,1670],{},[37,2020,2021],{},"纳秒，ns",[37,2023,2024],{"align":763},"×0.000001",[652,2026,2027],{},"这个选择在普通 PointCloud2 分支中使用。例如 Velodyne 的 time、Ouster 的 t 会经过相应换算。",[652,2029,2030,2031,2034],{},"但你当前的 Livox CustomMsg 路径直接执行：",[44,2032,2033],{},"curvature = offset_time \u002F 1000000.0;","也就是固定从 ns 转成 ms。因此，当前修改 timestamp_unit 不会改变这条输入路径的时间解释。",[652,2036,2037],{},"举个纯数值例子：",[149,2039,2042],{"className":2040,"code":2041,"language":723,"meta":154},[721],"offset_time = 25,000,000 ns\n           = 25 ms\n           = 0.025 s\n",[44,2043,2041],{"__ignoreMap":154},[652,2045,2046],{},"该点的处理时刻就是：",[149,2048,2051],{"className":2049,"code":2050,"language":723,"meta":154},[721],"点云 header.stamp + 0.025 s\n",[44,2052,2050],{"__ignoreMap":154},[652,2054,2055],{},"逐点时间参与运动预测与点云匹配，不能在输入转换中随意丢弃；时间单位换算也不会完成雷达与 IMU 的时差校准。",[647,2057,2059],{"id":2058},"blind近距离盲区过滤","blind（近距离盲区过滤）",[652,2061,2062],{},"blind：近距离排除半径。 当前代码计算：",[652,2064,2065],{},"[\nr^2=x^2+y^2+z^2\n]",[652,2067,2068],{},"当：",[652,2070,2071],{},"[\nr^2\u003C\\texttt{blind}^2\n]",[652,2073,2074],{},"就丢弃该点。因此 blind=0.5 表示排除距离雷达点云坐标原点不足0.5 m的点，范围是一个球形区域。",[652,2076,1945],{},[730,2078,2079,2082],{},[733,2080,2081],{},"距离0.3 m的点：被这项过滤排除。",[733,2083,2084],{},"距离0.6 m的点：通过距离下限检查，之后仍可能被其他条件排除。",[652,2086,2087],{},"这里的距离是三维距离，与点的高度、机器人中心距离不同。这个过滤同时作用于机器人点和环境点，所以增大它时，也会丢失近处墙面、地面和障碍物的有效点。",[652,2089,2090],{},"实车到位后，先观察0.5 m过滤后是否仍有明显车体干扰、近处有效结构是否不足，再决定是否调整。当前没有这些实测证据，先保持0.5。",[140,2092,2094],{"id":2093},"mapping运动状态估计与点云匹配","mapping（运动状态估计与点云匹配）",[145,2096,2097],{"id":2097},"实车上先看哪些问题",[652,2099,2100,2101,2104],{},"这块先负责让 Point-LIO ",[40,2102,2103],{},"把位置、运动和地图估计对","；坡道能不能通行，随后才由地形分析和代价地图判断。实车遇到问题时，先按下面的现象找参数，不必先读噪声公式。",[16,2106,2107,2120],{},[19,2108,2109],{},[22,2110,2111,2114,2117],{},[25,2112,2113],{},"实车上看到什么",[25,2115,2116],{},"先看哪些参数／关系",[25,2118,2119],{},"具体要核对什么",[32,2121,2122,2139,2156,2170,2189,2209],{},[22,2123,2124,2127,2136],{},[37,2125,2126],{},"车没动，估计位置却明显变化",[37,2128,2129,1886,2132,2135],{},[44,2130,2131],{},"acc_norm",[44,2133,2134],{},"gravity","，再检查数据时间和安装关系",[37,2137,2138],{},"加速度单位是否正确、系统的上下方向是否与导航参考系相符；不能仅凭漂移就认定某个噪声值错误",[22,2140,2141,2144,2149],{},[37,2142,2143],{},"平地被显示成斜面，坡道的高低方向不对",[37,2145,2146,2148],{},[44,2147,2134],{}," 和整条坐标转换关系",[37,2150,2151,2152,2155],{},"静止 IMU 读数、雷达安装方向、Point-LIO 参考系到 ",[44,2153,2154],{},"odom"," 的关系要对得上；不是直接套一个“向下”的数组",[22,2157,2158,2161,2167],{},[37,2159,2160],{},"MID360 整体倾斜安装，或随云台 yaw 转动",[37,2162,2163,2166],{},[44,2164,2165],{},"extrinsic_T\u002FR"," 与机器人安装 TF",[37,2168,2169],{},"内部雷达／IMU 关系和整台传感器装在车上的关系要分开；整机转动不改变内部两者的位置",[22,2171,2172,2175,2186],{},[37,2173,2174],{},"过接缝、颠簸时定位突跳",[37,2176,2177,1886,2180,1886,2183],{},[44,2178,2179],{},"satu_acc",[44,2181,2182],{},"imu_meas_acc_cov",[44,2184,2185],{},"acc_cov_output",[37,2187,2188],{},"先看支架是否牢固、加速度单位与峰值、时间接口；确认后再判断算法应怎样看待振动和真实运动",[22,2190,2191,2194,2206],{},[37,2192,2193],{},"快速转底盘或云台时墙面重影、方向跳变",[37,2195,2196,1886,2199,1886,2202,2205],{},[44,2197,2198],{},"satu_gyro",[44,2200,2201],{},"imu_meas_omg_cov",[44,2203,2204],{},"gyr_cov_output","，以及点时间接口",[37,2207,2208],{},"看角速度是否接近量程边缘、数据是否及时；这些现象不能只靠改噪声解决",[22,2210,2211,2214,2225],{},[37,2212,2213],{},"墙角、地面或斜坡上可用匹配点很少",[37,2215,2216,1886,2219,1886,2222],{},[44,2217,2218],{},"plane_thr",[44,2220,2221],{},"match_s",[44,2223,2224],{},"ivox_grid_resolution",[37,2226,2227],{},"是否有足够、可靠的地图邻点；斜坡也可以是平整的面，这三项没有规定“最大爬坡角度”",[652,2229,2230,2231,1886,2234,2236,2237,2240,2241,2244],{},"当前使用的是 MID360 内部 IMU，保持 ",[44,2232,2233],{},"imu_en=True",[44,2235,424],{},"。MCU 世界姿态不能代替机械关节角；实际 yaw 在 ",[44,2238,2239],{},"gimbal_yaw_joint","，实际 pitch 在 ",[44,2242,2243],{},"gimbal_pitch_joint","，两个 odom 关节固定，MID360 随 yaw、不随独立 pitch 转动。",[652,2246,2247],{},"下面的噪声参数主要决定“系统更信测量，还是更相信原来的运动趋势”。先确认单位、时间与安装关系，再讨论噪声；它们不会让松动支架变稳，也不是车辆速度或坡度限制。本轮没有实物，不据这些现象指定新的调参值。",[145,2249,147],{"id":2250},"参数表-4",[652,2252,2253],{},"当前采用 use_imu_as_input=False 的 output 模型，以下按这个运行分支解释；“当前值”来自实物配置，不是本轮读取的运行节点值。表中的 g₀ 是上方 YAML 中的重力向量，当前模长约9.81 m\u002Fs²。",[652,2255,2256],{},"噪声参数的单位按本地运动方程及协方差公式推导；它们不都等同于传感器手册中的噪声密度。",[149,2258,2260],{"className":151,"code":2259,"language":153,"meta":154,"style":154},"    mapping:\n      imu_en: True\n      extrinsic_est_en: False                           # for aggressive motion, set this variable False\n      imu_time_inte: 0.005                              # = 1 \u002F frequency of IMU\n      lidar_time_inte: 0.1\n      satu_acc: 4.0                                     # the saturation value of IMU's acceleration. not related to the units\n      satu_gyro: 35.0                                   # the saturation value of IMU's angular velocity. not related to the units\n      acc_norm: 1.0                                     # 1.0 for g as unit, 9.81 for m\u002Fs^2 as unit of the IMU's acceleration\n      lidar_meas_cov: 0.01                              # 0.001\n      acc_cov_output: 500.0\n      gyr_cov_output: 1000.0\n      b_acc_cov: 0.0001\n      b_gyr_cov: 0.0001\n      imu_meas_acc_cov: 0.1\n      imu_meas_omg_cov: 0.1\n      gyr_cov_input: 0.1                                # for IMU as input model\n      acc_cov_input: 0.1                                # for IMU as input model\n      plane_thr: 0.1                                    # 0.05, the threshold for plane criteria, the smaller, the flatter a plane\n      match_s: 81.0\n      ivox_grid_resolution: 0.5\n      # 测量平均值是[0.00423894,0.71588876,0.69592434]经过公式计算得出[-0.04166067, -7.03407005, -6.83785222]\n      gravity: [-0.04166067, -7.03407005, -6.83785222]        # gravity to be aligned # rpy = [0, pi\u002F6, 0]\n      gravity_init: [-0.04166067, -7.03407005, -6.83785222]   # preknown gravity in the first IMU body frame, use when imu_en is False or start from a non-stationary state\n      extrinsic_T: [ -0.011, -0.02329, 0.04412 ]\n      extrinsic_R: [ 1.0, 0.0, 0.0,\n                     0.0, 1.0, 0.0,\n                     0.0, 0.0, 1.0 ]\n",[44,2261,2262,2269,2278,2290,2303,2313,2326,2339,2352,2365,2375,2385,2395,2405,2415,2425,2439,2451,2464,2475,2485,2491,2519,2543,2566,2587,2603],{"__ignoreMap":154},[158,2263,2264,2267],{"class":160,"line":161},[158,2265,2266],{"class":164},"    mapping",[158,2268,169],{"class":168},[158,2270,2271,2274,2276],{"class":160,"line":172},[158,2272,2273],{"class":164},"      imu_en",[158,2275,186],{"class":168},[158,2277,205],{"class":189},[158,2279,2280,2283,2285,2287],{"class":160,"line":180},[158,2281,2282],{"class":164},"      extrinsic_est_en",[158,2284,186],{"class":168},[158,2286,190],{"class":189},[158,2288,2289],{"class":193},"                           # for aggressive motion, set this variable False\n",[158,2291,2292,2295,2297,2300],{"class":160,"line":197},[158,2293,2294],{"class":164},"      imu_time_inte",[158,2296,186],{"class":168},[158,2298,2299],{"class":189},"0.005",[158,2301,2302],{"class":193},"                              # = 1 \u002F frequency of IMU\n",[158,2304,2305,2308,2310],{"class":160,"line":208},[158,2306,2307],{"class":164},"      lidar_time_inte",[158,2309,186],{"class":168},[158,2311,2312],{"class":189},"0.1\n",[158,2314,2315,2318,2320,2323],{"class":160,"line":218},[158,2316,2317],{"class":164},"      satu_acc",[158,2319,186],{"class":168},[158,2321,2322],{"class":189},"4.0",[158,2324,2325],{"class":193},"                                     # the saturation value of IMU's acceleration. not related to the units\n",[158,2327,2328,2331,2333,2336],{"class":160,"line":229},[158,2329,2330],{"class":164},"      satu_gyro",[158,2332,186],{"class":168},[158,2334,2335],{"class":189},"35.0",[158,2337,2338],{"class":193},"                                   # the saturation value of IMU's angular velocity. not related to the units\n",[158,2340,2341,2344,2346,2349],{"class":160,"line":243},[158,2342,2343],{"class":164},"      acc_norm",[158,2345,186],{"class":168},[158,2347,2348],{"class":189},"1.0",[158,2350,2351],{"class":193},"                                     # 1.0 for g as unit, 9.81 for m\u002Fs^2 as unit of the IMU's acceleration\n",[158,2353,2354,2357,2359,2362],{"class":160,"line":253},[158,2355,2356],{"class":164},"      lidar_meas_cov",[158,2358,186],{"class":168},[158,2360,2361],{"class":189},"0.01",[158,2363,2364],{"class":193},"                              # 0.001\n",[158,2366,2367,2370,2372],{"class":160,"line":267},[158,2368,2369],{"class":164},"      acc_cov_output",[158,2371,186],{"class":168},[158,2373,2374],{"class":189},"500.0\n",[158,2376,2377,2380,2382],{"class":160,"line":280},[158,2378,2379],{"class":164},"      gyr_cov_output",[158,2381,186],{"class":168},[158,2383,2384],{"class":189},"1000.0\n",[158,2386,2387,2390,2392],{"class":160,"line":294},[158,2388,2389],{"class":164},"      b_acc_cov",[158,2391,186],{"class":168},[158,2393,2394],{"class":189},"0.0001\n",[158,2396,2398,2401,2403],{"class":160,"line":2397},13,[158,2399,2400],{"class":164},"      b_gyr_cov",[158,2402,186],{"class":168},[158,2404,2394],{"class":189},[158,2406,2408,2411,2413],{"class":160,"line":2407},14,[158,2409,2410],{"class":164},"      imu_meas_acc_cov",[158,2412,186],{"class":168},[158,2414,2312],{"class":189},[158,2416,2418,2421,2423],{"class":160,"line":2417},15,[158,2419,2420],{"class":164},"      imu_meas_omg_cov",[158,2422,186],{"class":168},[158,2424,2312],{"class":189},[158,2426,2428,2431,2433,2436],{"class":160,"line":2427},16,[158,2429,2430],{"class":164},"      gyr_cov_input",[158,2432,186],{"class":168},[158,2434,2435],{"class":189},"0.1",[158,2437,2438],{"class":193},"                                # for IMU as input model\n",[158,2440,2442,2445,2447,2449],{"class":160,"line":2441},17,[158,2443,2444],{"class":164},"      acc_cov_input",[158,2446,186],{"class":168},[158,2448,2435],{"class":189},[158,2450,2438],{"class":193},[158,2452,2454,2457,2459,2461],{"class":160,"line":2453},18,[158,2455,2456],{"class":164},"      plane_thr",[158,2458,186],{"class":168},[158,2460,2435],{"class":189},[158,2462,2463],{"class":193},"                                    # 0.05, the threshold for plane criteria, the smaller, the flatter a plane\n",[158,2465,2467,2470,2472],{"class":160,"line":2466},19,[158,2468,2469],{"class":164},"      match_s",[158,2471,186],{"class":168},[158,2473,2474],{"class":189},"81.0\n",[158,2476,2478,2481,2483],{"class":160,"line":2477},20,[158,2479,2480],{"class":164},"      ivox_grid_resolution",[158,2482,186],{"class":168},[158,2484,1683],{"class":189},[158,2486,2488],{"class":160,"line":2487},21,[158,2489,2490],{"class":193},"      # 测量平均值是[0.00423894,0.71588876,0.69592434]经过公式计算得出[-0.04166067, -7.03407005, -6.83785222]\n",[158,2492,2494,2497,2500,2503,2505,2508,2510,2513,2516],{"class":160,"line":2493},22,[158,2495,2496],{"class":164},"      gravity",[158,2498,2499],{"class":168},": [",[158,2501,2502],{"class":189},"-0.04166067",[158,2504,1413],{"class":168},[158,2506,2507],{"class":189},"-7.03407005",[158,2509,1413],{"class":168},[158,2511,2512],{"class":189},"-6.83785222",[158,2514,2515],{"class":168},"]        ",[158,2517,2518],{"class":193},"# gravity to be aligned # rpy = [0, pi\u002F6, 0]\n",[158,2520,2522,2525,2527,2529,2531,2533,2535,2537,2540],{"class":160,"line":2521},23,[158,2523,2524],{"class":164},"      gravity_init",[158,2526,2499],{"class":168},[158,2528,2502],{"class":189},[158,2530,1413],{"class":168},[158,2532,2507],{"class":189},[158,2534,1413],{"class":168},[158,2536,2512],{"class":189},[158,2538,2539],{"class":168},"]   ",[158,2541,2542],{"class":193},"# preknown gravity in the first IMU body frame, use when imu_en is False or start from a non-stationary state\n",[158,2544,2546,2549,2551,2554,2556,2559,2561,2564],{"class":160,"line":2545},24,[158,2547,2548],{"class":164},"      extrinsic_T",[158,2550,1408],{"class":168},[158,2552,2553],{"class":189},"-0.011",[158,2555,1413],{"class":168},[158,2557,2558],{"class":189},"-0.02329",[158,2560,1413],{"class":168},[158,2562,2563],{"class":189},"0.04412",[158,2565,1422],{"class":168},[158,2567,2569,2572,2574,2576,2578,2580,2582,2584],{"class":160,"line":2568},25,[158,2570,2571],{"class":164},"      extrinsic_R",[158,2573,1408],{"class":168},[158,2575,2348],{"class":189},[158,2577,1413],{"class":168},[158,2579,931],{"class":189},[158,2581,1413],{"class":168},[158,2583,931],{"class":189},[158,2585,2586],{"class":168},",\n",[158,2588,2590,2593,2595,2597,2599,2601],{"class":160,"line":2589},26,[158,2591,2592],{"class":189},"                     0.0",[158,2594,1413],{"class":168},[158,2596,2348],{"class":189},[158,2598,1413],{"class":168},[158,2600,931],{"class":189},[158,2602,2586],{"class":168},[158,2604,2606,2608,2610,2612,2614,2616],{"class":160,"line":2605},27,[158,2607,2592],{"class":189},[158,2609,1413],{"class":168},[158,2611,931],{"class":189},[158,2613,1413],{"class":168},[158,2615,2348],{"class":189},[158,2617,1422],{"class":168},[16,2619,2620,2640],{},[19,2621,2622],{},[22,2623,2624,2626,2628,2630,2632,2634,2636,2638],{},[25,2625,313],{},[25,2627,316],{},[25,2629,319],{},[25,2631,322],{},[25,2633,325],{},[25,2635,328],{},[25,2637,331],{},[25,2639,334],{},[32,2641,2642,2669,2696,2723,2752,2782,2812,2841,2870,2901,2931,2961,2990,3020,3050,3079,3105,3135,3166,3196,3227,3255,3290],{},[22,2643,2644,2649,2653,2655,2659,2662,2664,2666],{},[37,2645,2646],{},[44,2647,2648],{},"mapping.imu_en",[37,2650,2651],{},[44,2652,378],{},[37,2654,350],{},[37,2656,2657],{},[40,2658,355],{},[37,2660,2661],{},"让算法使用 MID360 内部 IMU，帮助判断转动和加速度",[37,2663,361],{},[37,2665,361],{},[37,2667,2668],{},"当前保持 True；关闭后不再使用这路惯性信息，不是减少振动的普通调参方法",[22,2670,2671,2676,2680,2682,2686,2689,2691,2693],{},[37,2672,2673],{},[44,2674,2675],{},"mapping.extrinsic_est_en",[37,2677,2678],{},[44,2679,190],{},[37,2681,350],{},[37,2683,2684],{},[40,2685,355],{},[37,2687,2688],{},"是否让算法边运行边修正内部雷达／IMU的位置和朝向关系",[37,2690,361],{},[37,2692,361],{},[37,2694,2695],{},"当前 False 使用固定外参；整台 MID360 倾斜或云台 yaw 转动不要求因此开启",[22,2697,2698,2703,2707,2709,2713,2716,2718,2720],{},[37,2699,2700],{},[44,2701,2702],{},"mapping.imu_time_inte",[37,2704,2705],{},[44,2706,2299],{},[37,2708,1121],{},[37,2710,2711],{},[40,2712,1065],{},[37,2714,2715],{},"记录标称 IMU 时间间隔，当前未接入计算",[37,2717,1071],{},[37,2719,1071],{},[37,2721,2722],{},"0.005秒对应200 Hz的标称周期；实际时间来自消息时间戳，改它不能改变硬件频率",[22,2724,2725,2730,2734,2736,2740,2743,2746,2749],{},[37,2726,2727],{},[44,2728,2729],{},"mapping.lidar_time_inte",[37,2731,2732],{},[44,2733,2435],{},[37,2735,1121],{},[37,2737,2738],{},[40,2739,355],{},[37,2741,2742],{},"异常点云分支使用的回退时间窗口",[37,2744,2745],{},"回退窗口更长",[37,2747,2748],{},"回退窗口更短",[37,2750,2751],{},"正常扫描按逐点时间计算末尾；不是设置雷达频率的参数",[22,2753,2754,2759,2763,2766,2770,2773,2776,2779],{},[37,2755,2756],{},[44,2757,2758],{},"mapping.satu_acc",[37,2760,2761],{},[44,2762,2322],{},[37,2764,2765],{},"g，当前原始输入单位",[37,2767,2768],{},[40,2769,1728],{},[37,2771,2772],{},"发现某轴加速度接近量程边缘时，暂时不用该轴更新",[37,2774,2775],{},"更少数据被屏蔽，也可能接受已经限幅的数据",[37,2777,2778],{},"更多数据被屏蔽，也可能误排除正常颠簸",[37,2780,2781],{},"当前实际门槛3.96 g；应对照输入单位、设备量程和实际峰值核对，不是车辆允许加速度",[22,2783,2784,2789,2793,2796,2800,2803,2806,2809],{},[37,2785,2786],{},[44,2787,2788],{},"mapping.satu_gyro",[37,2790,2791],{},[44,2792,2335],{},[37,2794,2795],{},"rad\u002Fs",[37,2797,2798],{},[40,2799,1728],{},[37,2801,2802],{},"发现某轴转速接近量程边缘时，暂时不用该轴更新",[37,2804,2805],{},"更少数据被屏蔽",[37,2807,2808],{},"更多数据被屏蔽",[37,2810,2811],{},"当前实际门槛34.65 rad\u002Fs，约1985°\u002Fs；不是车辆或云台的速度上限",[22,2813,2814,2819,2823,2825,2829,2832,2835,2838],{},[37,2815,2816],{},[44,2817,2818],{},"mapping.acc_norm",[37,2820,2821],{},[44,2822,2348],{},[37,2824,2765],{},[37,2826,2827],{},[40,2828,978],{},[37,2830,2831],{},"把 IMU 的原始加速度换成算法使用的米制单位",[37,2833,2834],{},"换算后的加速度变小",[37,2836,2837],{},"换算后的加速度变大",[37,2839,2840],{},"当前原始输入以 g 表达，所以用1.0；静止三轴合起来约1 g，不要求某一轴必须为1",[22,2842,2843,2848,2852,2855,2859,2862,2865,2867],{},[37,2844,2845],{},[44,2846,2847],{},"mapping.lidar_meas_cov",[37,2849,2850],{},[44,2851,2361],{},[37,2853,2854],{},"按意图为 m²；实现存在冲突",[37,2856,2857],{},[40,2858,355],{},[37,2860,2861],{},"控制激光匹配对位姿的影响程度，但本地代码用法不一致",[37,2863,2864],{},"不同求解分支的影响方向相反",[37,2866,2864],{},[37,2868,2869],{},"先保留0.01；源码不一致需单独核实，不能当作统一的激光信任度旋钮",[22,2871,2872,2877,2882,2885,2889,2892,2895,2898],{},[37,2873,2874],{},[44,2875,2876],{},"mapping.acc_cov_output",[37,2878,2879],{},[44,2880,2881],{},"500.0",[37,2883,2884],{},"m²\u002Fs⁶，按本地公式推导",[37,2886,2887],{},[40,2888,481],{},[37,2890,2891],{},"允许估计中的加速度多快改变",[37,2893,2894],{},"更容易跟随观测改变，也可能跟随抖动",[37,2896,2897],{},"更倾向维持原来的趋势，急加减速时可能跟得慢",[37,2899,2900],{},"当前 output 模型使用；与加速度测量噪声一起理解",[22,2902,2903,2908,2913,2916,2920,2923,2925,2928],{},[37,2904,2905],{},[44,2906,2907],{},"mapping.gyr_cov_output",[37,2909,2910],{},[44,2911,2912],{},"1000.0",[37,2914,2915],{},"rad²\u002Fs⁴，按本地公式推导",[37,2917,2918],{},[40,2919,481],{},[37,2921,2922],{},"允许估计中的转速多快改变",[37,2924,2894],{},[37,2926,2927],{},"更倾向维持原来的趋势，突然转动时可能跟得慢",[37,2929,2930],{},"当前 output 模型使用；不是转速或陀螺实际噪声的数值",[22,2932,2933,2938,2943,2945,2949,2952,2955,2958],{},[37,2934,2935],{},[44,2936,2937],{},"mapping.b_acc_cov",[37,2939,2940],{},[44,2941,2942],{},"0.0001",[37,2944,2884],{},[37,2946,2947],{},[40,2948,355],{},[37,2950,2951],{},"允许算法估计的加速度零偏多快变化",[37,2953,2954],{},"零偏更容易改变，过大可能把真实运动当成偏差",[37,2956,2957],{},"零偏更稳定，适应缓慢漂移也可能更慢",[37,2959,2960],{},"两种模型均使用；先保持当前值，不能用于掩盖单位或方向错误",[22,2962,2963,2968,2972,2974,2978,2981,2984,2987],{},[37,2964,2965],{},[44,2966,2967],{},"mapping.b_gyr_cov",[37,2969,2970],{},[44,2971,2942],{},[37,2973,2915],{},[37,2975,2976],{},[40,2977,355],{},[37,2979,2980],{},"允许算法估计的陀螺零偏多快变化",[37,2982,2983],{},"零偏更容易改变",[37,2985,2986],{},"零偏更稳定，适应漂移也可能更慢",[37,2988,2989],{},"两种模型均使用；静止转速偏离零应先检查实际数据与偏差来源",[22,2991,2992,2997,3001,3004,3008,3011,3014,3017],{},[37,2993,2994],{},[44,2995,2996],{},"mapping.imu_meas_acc_cov",[37,2998,2999],{},[44,3000,2435],{},[37,3002,3003],{},"m²\u002Fs⁴",[37,3005,3006],{},[40,3007,481],{},[37,3009,3010],{},"决定算法有多相信这次加速度读数",[37,3012,3013],{},"更不相信加速度测量，减少其影响",[37,3015,3016],{},"更相信加速度测量，也更容易跟随噪声",[37,3018,3019],{},"当前 output 模型使用；作用在换算后的加速度，不是原始 g 数值的方差",[22,3021,3022,3027,3031,3034,3038,3041,3044,3047],{},[37,3023,3024],{},[44,3025,3026],{},"mapping.imu_meas_omg_cov",[37,3028,3029],{},[44,3030,2435],{},[37,3032,3033],{},"rad²\u002Fs²",[37,3035,3036],{},[40,3037,481],{},[37,3039,3040],{},"决定算法有多相信这次角速度读数",[37,3042,3043],{},"更不相信角速度测量",[37,3045,3046],{},"更相信角速度测量，也更容易跟随噪声",[37,3048,3049],{},"当前 output 模型使用；振动和急转时要与转速变化参数一起看",[22,3051,3052,3057,3061,3063,3067,3070,3073,3076],{},[37,3053,3054],{},[44,3055,3056],{},"mapping.gyr_cov_input",[37,3058,3059],{},[44,3060,2435],{},[37,3062,3033],{},[37,3064,3065],{},[40,3066,1065],{},[37,3068,3069],{},"另一种估计模型使用的角速度输入噪声",[37,3071,3072],{},"当前无影响；换到 input 模型后预测不确定程度增大",[37,3074,3075],{},"当前无影响；换到 input 模型后预测不确定程度减小",[37,3077,3078],{},"当前 use_imu_as_input=False，不参与本轮预测",[22,3080,3081,3086,3090,3092,3096,3099,3101,3103],{},[37,3082,3083],{},[44,3084,3085],{},"mapping.acc_cov_input",[37,3087,3088],{},[44,3089,2435],{},[37,3091,3003],{},[37,3093,3094],{},[40,3095,1065],{},[37,3097,3098],{},"另一种估计模型使用的加速度输入噪声",[37,3100,3072],{},[37,3102,3075],{},[37,3104,3078],{},[22,3106,3107,3112,3116,3119,3123,3126,3129,3132],{},[37,3108,3109],{},[44,3110,3111],{},"mapping.plane_thr",[37,3113,3114],{},[44,3115,2435],{},[37,3117,3118],{},"m",[37,3120,3121],{},[40,3122,481],{},[37,3124,3125],{},"判断一小片地图点是否足够平整，可以拿来匹配",[37,3127,3128],{},"接受更不平整的点群，也可能混入边缘和曲面",[37,3130,3131],{},"要求更平整，可用匹配可能减少",[37,3133,3134],{},"检查5个地图邻点到拟合面的偏离；面可以倾斜，不是坡度或通行高度门槛",[22,3136,3137,3142,3147,3150,3154,3157,3160,3163],{},[37,3138,3139],{},[44,3140,3141],{},"mapping.match_s",[37,3143,3144],{},[44,3145,3146],{},"81.0",[37,3148,3149],{},"隐含 m⁻¹，经验系数",[37,3151,3152],{},[40,3153,481],{},[37,3155,3156],{},"判断当前雷达点是否与找到的地图面足够接近",[37,3158,3159],{},"更严格，接受的匹配更少",[37,3161,3162],{},"更宽松，接受更多匹配，也可能混入错误匹配",[37,3164,3165],{},"检查当前点与地图面的距离误差；不是地图精度或车辆允许离障碍的距离",[22,3167,3168,3173,3177,3180,3184,3187,3190,3193],{},[37,3169,3170],{},[44,3171,3172],{},"mapping.ivox_grid_resolution",[37,3174,3175],{},[44,3176,1816],{},[37,3178,3179],{},"m，网格边长",[37,3181,3182],{},[40,3183,481],{},[37,3185,3186],{},"把地图分块，以便寻找附近可匹配的点",[37,3188,3189],{},"固定邻格能覆盖更大范围，查找可能更费时",[37,3191,3192],{},"覆盖范围更小，可能找不到足够邻点",[37,3194,3195],{},"不直接删减地图点；不是只检测多大障碍的参数",[22,3197,3198,3203,3208,3211,3215,3218,3221,3224],{},[37,3199,3200],{},[44,3201,3202],{},"mapping.gravity",[37,3204,3205],{},[44,3206,3207],{},"g₀",[37,3209,3210],{},"m\u002Fs²",[37,3212,3213],{},[40,3214,978],{},[37,3216,3217],{},"确定 Point-LIO 参考系中的重力方向和换算大小",[37,3219,3220],{},"同方向增大长度：重力和加速度换算一起增大",[37,3222,3223],{},"同方向减小长度：两者一起减小",[37,3225,3226],{},"大小已约9.81，不重复修改；初始 IMU 自身重力与目标参考系重力要区分，方向仍待核对",[22,3228,3229,3234,3238,3240,3244,3247,3250,3252],{},[37,3230,3231],{},[44,3232,3233],{},"mapping.gravity_init",[37,3235,3236],{},[44,3237,3207],{},[37,3239,3210],{},[37,3241,3242],{},[40,3243,1065],{},[37,3245,3246],{},"没有启用 IMU 时使用的初始重力预设",[37,3248,3249],{},"当前无影响",[37,3251,3249],{},[37,3253,3254],{},"当前 imu_en=True，初始化使用 IMU 平均加速度，改这项不能调整当前的上下方向",[22,3256,3257,3262,3267,3270,3274,3277,3280,3283],{},[37,3258,3259],{},[44,3260,3261],{},"mapping.extrinsic_T",[37,3263,3264],{},[44,3265,3266],{},"[-0.011,-0.02329,0.04412]",[37,3268,3269],{},"m，三维平移",[37,3271,3272],{},[40,3273,1728],{},[37,3275,3276],{},"说明雷达原点相对内部 IMU 在哪里",[37,3278,3279],{},"相应坐标轴方向的换算偏移增加",[37,3281,3282],{},"相应坐标轴方向的换算偏移减小",[37,3284,3285,3286,3289],{},"单位米；换算成毫米为",[158,3287,3288],{},"-11,-23.29,+44.12","；不是雷达相对底盘或云台的安装位置",[22,3291,3292,3297,3300,3303,3307,3310,3313,3316],{},[37,3293,3294],{},[44,3295,3296],{},"mapping.extrinsic_R",[37,3298,3299],{},"3×3单位矩阵",[37,3301,3302],{},"无量纲，旋转矩阵",[37,3304,3305],{},[40,3306,1728],{},[37,3308,3309],{},"说明雷达与内部 IMU 的坐标轴怎样对应",[37,3311,3312],{},"不适用，不能逐元素随意增大",[37,3314,3315],{},"不适用，不能逐元素随意减小",[37,3317,3318],{},"单位矩阵表示输入两系轴向一致；整台 MID360 的安装倾斜属于机器人 TF，还需核对驱动是否额外旋转数据",[145,3320,645],{"id":3321},"参数详解-4",[647,3323,3325],{"id":3324},"imu_en启用雷达内部imu","imu_en（启用雷达内部IMU）",[652,3327,3328],{},"当前 True 表示使用 MID360 内部 IMU。雷达连续扫描时，IMU 帮助算法判断传感器正在怎样转动、加减速，也参与初始方向判断。",[652,3330,3331,3332,3334],{},"它与 ",[44,3333,424],{}," 不冲突：IMU仍在使用，只是算法使用它的方式不同。实车有振动时，先检查安装和数据，不应把“关闭 IMU”作为普通的抗振办法。",[647,3336,3338],{"id":3337},"extrinsic_est_en在线估计雷达与imu外参","extrinsic_est_en（在线估计雷达与IMU外参）",[652,3340,3341,3342,3344],{},"这项决定“雷达和内部 IMU 之间的位置、朝向关系，是固定使用，还是让算法边运行边估计”。当前 False使用配置中的 ",[44,3343,2165],{},"。",[652,3346,3347],{},"MID360 的雷达与内部 IMU 装在同一台设备里，整机倾斜安装、底盘转动和云台 yaw 转动都不会改变两者之间的固定关系。整台雷达在车上如何安装、随哪个关节转动，由机器人 TF描述，不能靠开启这项替代。",[647,3349,3351],{"id":3350},"imu_time_inteimu标称时间间隔","imu_time_inte（IMU标称时间间隔）",[652,3353,3354],{},"0.005秒对应200 Hz的标称周期，但当前源码只读入这个值，没有用它计算。改成更小的数不会让实物 IMU输出得更快；实际数据间隔要看消息时间戳。当前暂不调整。",[647,3356,3358],{"id":3357},"lidar_time_inte异常点云的回退时间窗口","lidar_time_inte（异常点云的回退时间窗口）",[652,3360,3361],{},"它主要给失去点云、没有有效点等回退分支提供时间窗口。正常扫描的结束时间由每个点的时间计算，不是由这个0.1秒强制规定。",[652,3363,3364],{},"因此不能只看到驱动发布20 Hz，就按1\u002F20把它改成0.05。真实频率、逐点时间和回退窗口是不同事项，当前先保留。",[647,3366,3368],{"id":3367},"satu_acc加速度读数饱和门槛","satu_acc（加速度读数饱和门槛）",[652,3370,3371,3372,3375],{},"可以把它理解为“加速度读数快到量程边缘时，算法先别完全相信这一轴”。当前代码逐轴比较原始读数，达到 ",[44,3373,3374],{},"0.99×4.0=3.96 g"," 就屏蔽该轴的这次 IMU更新。",[652,3377,3378],{},"上实物时，它与颠簸、急加减速和振动有关，但4.0不代表已经确认硬件量程就是4 g，更不是车辆允许的最大加速度。要先核对型号／实际量程设置、输入单位和正常运动峰值。阈值太低可能把正常颠簸数据屏蔽，太高可能继续接受已限幅的读数。",[652,3380,3381],{},"原注释“与单位无关”不成立。当前输入是 g；如果换成 m\u002Fs²仍照用4.0，正常静止时某轴读数就可能超过门槛。单位改变时必须一起复核这项。",[647,3383,3385],{"id":3384},"satu_gyro角速度读数饱和门槛","satu_gyro（角速度读数饱和门槛）",[652,3387,3388,3389,3392],{},"这是角速度的同类保护，当前实际门槛为 ",[44,3390,3391],{},"0.99×35.0=34.65 rad\u002Fs","，约1985°\u002Fs、5.51圈\u002F秒。比较的是各轴 IMU读数，不是下发给底盘的自旋速度。",[652,3394,3395,3396,3399],{},"快速转底盘或云台时，应看真实峰值是否接近设备量程、是否出现限幅；当前 ",[44,3397,3398],{},"check_satu=True"," 才执行这项保护。调大它不会使车辆允许转得更快，也不能直接解决航向漂移。",[647,3401,3403],{"id":3402},"acc_norm加速度单位换算基准","acc_norm（加速度单位换算基准）",[652,3405,3406,3407,3410,3411,3414,3415],{},"这项最重要的作用是",[40,3408,3409],{},"单位换算","。当前本地驱动把 MID360 的加速度以 g发布，Point-LIO内部按 m\u002Fs²计算，所以 ",[44,3412,3413],{},"acc_norm=1.0"," 把原始1 g换成约9.81 m\u002Fs²。",[3416,3417,3421],"a",{"href":3418,"rel":3419},"https:\u002F\u002Fgithub.com\u002FLivox-SDK\u002Flivox_ros_driver2\u002Fblob\u002Fmaster\u002Fsrc\u002Fcomm\u002Flidar_imu_data_queue.h",[3420],"nofollow","Livox 驱动的数据单位定义",[652,3423,3424,3425,3427,3428,3430],{},"实物静止时，三个轴合起来的大小应接近1 g。雷达倾斜安装后，重力会分到多个轴上，不要求某一个轴必须等于1，也不要求另外两个轴都为0。这里的 ",[44,3426,2131],{}," 与 ",[44,3429,2134],{}," 长度约9.81并不冲突：一个对应原始读数单位，一个对应内部米制计算。",[652,3432,3433],{},"若仍是 g输入却把它改成9.81，原始1 g会被换成约1 m\u002Fs²，比例就错了近10倍。当前保持1.0；这项不能用来“压住漂移”或消除振动。换驱动、做了单位转换或换传感器后，才按实际输入重新确认。",[647,3435,3437],{"id":3436},"lidar_meas_cov激光匹配对位姿的影响","lidar_meas_cov（激光匹配对位姿的影响）",[652,3439,3440],{},"这项影响“激光匹配结果对位姿有多大作用”。但本地代码的两个求解分支方向不一致，不能简单记成“调大就少信雷达”。",[652,3442,3443],{},"当前一次更新有效匹配少于30个点时，调大通常降低激光影响；达到30个点时，另一条公式的影响方向相反。这里统计的是一次逐点／时间组更新，不是整帧点数。源码不一致已确认，实际触发和影响尚未测试，当前保留0.01。",[652,3445,3446,3447,3450,3451,3454,3455,3458],{},"下面的 IMU噪声可以先用两句话理解：",[40,3448,3449],{},"测量噪声","管“有多相信这次读数”；",[40,3452,3453],{},"运动状态的过程噪声","管“允许原来的运动估计多快改变”。它们作用不同，不应因为名字都有 ",[44,3456,3457],{},"cov"," 就一起加大。表中单位按本地公式推导，也不能直接与厂家噪声密度或原始 g读数比较。",[647,3460,3462],{"id":3461},"acc_cov_output加速度估计的变化不确定性","acc_cov_output（加速度估计的变化不确定性）",[652,3464,3465],{},"它管“估计中的加速度是否容易改变”。车急加速、刹车或颠簸时，调大通常允许测量更快修正原来的估计，调小更倾向维持原来的趋势；如果读数主要是振动，允许变化过快也可能让估计跟着抖。",[652,3467,3468,3469,3471],{},"当前500是程序内部的不确定程度系数，不是给车添加500的加速度，也不是已测得的传感器噪声。应与 ",[44,3470,2182],{}," 一起理解，先排除单位、时间和安装错误。",[647,3473,3475],{"id":3474},"gyr_cov_output转速估计的变化不确定性","gyr_cov_output（转速估计的变化不确定性）",[652,3477,3478],{},"它与上一项类似，管“估计中的转速是否容易改变”。突然转底盘或云台时，调大通常允许更快跟随观测，调小则更相信原有转动趋势。",[652,3480,3481,3482,3484],{},"当前1000不是车辆转速上限，也不是陀螺实际噪声的测量结果。需要与 ",[44,3483,2201],{},"、角速度峰值和时间接口一起检查，不能仅凭转动时重影就认定该项要增大。",[647,3486,3488],{"id":3487},"b_acc_cov加速度零偏变化的噪声","b_acc_cov（加速度零偏变化的噪声）",[652,3490,3491],{},"“零偏”就是传感器读数中持续存在的一点偏差。它允许算法估计的加速度零偏多快变化：调大变化更容易，调小更稳定但适应漂移较慢。过大时可能把真实运动解释成偏差，当前先保持0.0001。",[647,3493,3495],{"id":3494},"b_gyr_cov陀螺零偏变化的噪声","b_gyr_cov（陀螺零偏变化的噪声）",[652,3497,3498],{},"它管陀螺零偏估计的变化速度。实物静止时角速度若持续偏离零，需要先核对真实数据和偏差来源；这项不保证调大就能消除航向漂移。当前先保持0.0001。",[647,3500,3502],{"id":3501},"imu_meas_acc_cov加速度读数可信度","imu_meas_acc_cov（加速度读数可信度）",[652,3504,3505],{},"它管“有多相信这次加速度读数”。调大表示更不相信读数，减少其修正作用；调小更相信读数，也更容易受振动影响。",[652,3507,3508,3509,3511],{},"当前0.1是算法采用的噪声假设，不是已经量出的传感器精度；它作用于换算后的 m\u002Fs²数据。与 ",[44,3510,2185],{}," 配合时，要分清“读数可信不可信”和“估计能不能跟上真实变化”这两件事。",[647,3513,3515],{"id":3514},"imu_meas_omg_cov转速读数可信度","imu_meas_omg_cov（转速读数可信度）",[652,3517,3518,3519,3521],{},"它管“有多相信这次转速读数”。调大减少角速度测量的影响，调小更相信它。实物转动或振动时，应同时观察读数是否干净、运动估计是否跟得上，再结合 ",[44,3520,2204],{}," 判断。当前0.1也不是厂家的精度承诺。",[647,3523,3525],{"id":3524},"gyr_cov_inputimu预测模型的转速噪声","gyr_cov_input（IMU预测模型的转速噪声）",[652,3527,421,3528,3530],{},[44,3529,424],{},"，这项不参与当前模型的预测。改它不能改善本轮转动表现，暂不调整。换到另一种模型后才重新解释和核对。",[647,3532,3534],{"id":3533},"acc_cov_inputimu预测模型的加速度噪声","acc_cov_input（IMU预测模型的加速度噪声）",[652,3536,3537],{},"同样属于另一种模型，当前不参与预测。不要因为加速度有抖动就先改这项；当前应检查实际生效的加速度噪声项、单位和安装。",[647,3539,3541],{"id":3540},"plane_thr地图邻点的平整度门槛","plane_thr（地图邻点的平整度门槛）",[652,3543,3544],{},"它判断“附近这5个地图点，能不能算作一张比较平整的面”。当前0.1 m表示每个邻点偏离拟合面不应超过10 cm。",[652,3546,3547,3550],{},[40,3548,3549],{},"斜坡也可以是一张平整的斜面。"," 源码没有用这项限制面的倾斜角，所以它不是最大坡度，也不是“高出地面10 cm就禁止通行”的障碍门槛；后者属于地形与代价地图的判断。",[652,3552,3553],{},"实车墙角、曲面、杂乱点或稀疏点附近匹配不足时可检查它。调大接受更不平整的点群，也可能接受错误的面；调小更严格，可用匹配可能减少。",[647,3555,3557],{"id":3556},"match_s新点与地图平面的匹配门槛","match_s（新点与地图平面的匹配门槛）",[652,3559,3560],{},"在地图邻点已经组成一个面后，它再判断“当前雷达点离这个面是不是太远”。地图墙面重影、错误匹配或有效匹配很少时，才结合这项分析。",[652,3562,3563],{},"当前81越大，条件越严格。代码允许的距离误差还随点到雷达的距离变化，例如1 m处约11.1 cm、4 m处约22.2 cm；这些是匹配门槛，不是定位精度或车必须离墙多远。",[652,3565,3566,3568,3569,3571],{},[44,3567,2218],{}," 检查地图邻点自己是否平整；",[44,3570,2221],{}," 检查新点能否对上这个面。两项不能只因为地图不好看就一起放宽，时间和外参错误也会造成类似现象。",[647,3573,3575],{"id":3574},"ivox_grid_resolution地图搜索网格大小","ivox_grid_resolution（地图搜索网格大小）",[652,3577,3578],{},"它把地图分块，方便查找附近的匹配点。当前网格边长0.5 m，与邻格搜索方式一起决定每次查找的覆盖范围。",[652,3580,3581],{},"调大能覆盖更大范围，但可能查找更多点；调小范围变小，可能找不到足够的邻点。它不会直接把小于0.5 m的障碍删掉，也不是当前扫描的降采样尺寸，先结合匹配点数量与计算负担观察。",[647,3583,3585],{"id":3584},"gravity与gravity_init目标参考系重力与初始化重力","gravity与gravity_init（目标参考系重力与初始化重力）",[652,3587,3588,3590,3591,3594],{},[44,3589,2134],{}," 最重要的实物含义是：",[40,3592,3593],{},"Point-LIO建立自己的参考系时，应该把哪边理解为“向下”，以及重力的大小按多少计算。"," 它会影响初始姿态和加速度换算；方向弄错时，地面、高低和后续坡道识别都可能受到影响，不能先靠放宽地形高度范围掩盖。",[652,3596,3597,3598,3600],{},"当前向量长度已经约9.81 m\u002Fs²，不需要再改大小。雷达整体倾斜时，IMU自己的几个轴上会同时看到重力分量；车上坡后各轴分量也会改变。这不意味着要让配置中的 ",[44,3599,2134],{}," 每次跟着读数改，它描述的是所选目标参考系的关系。",[652,3602,3603],{},"需要分清两个东西：",[730,3605,3606,3615],{},[733,3607,3608,3611,3612,3614],{},[40,3609,3610],{},"初始 IMU自己看到的重力方向："," 当前 ",[44,3613,2233],{},"，代码从一段初始加速度读数的平均值归一化、取反，并按9.81换算得到。它仍是 IMU自身坐标中的方向。",[733,3616,3617,3620,3621,3623,3624,3344],{},[40,3618,3619],{},"Point-LIO参考系中希望采用的重力方向："," 由 ",[44,3622,3202],{}," 给出。代码会计算两者之间的初始转动关系，后续接口还要把结果正确接到导航使用的 ",[44,3625,2154],{},[652,3627,3628,3629,3634,3635,3638],{},"所以，静止读数取反能告诉我们“重力在初始IMU系中指向哪里”，",[40,3630,3631,3632],{},"不能未经坐标核对就直接等同于 ",[44,3633,3202],{},"。同样，也不能看到导航通常让 z朝上，就擅自改成",[158,3636,3637],{},"0,0,-9.81","；还需核对 Point-LIO参考系、整机安装和后续接口怎样连接。本轮保留方向与数值，待核实。",[652,3640,3641,3644,3645,3647],{},[44,3642,3643],{},"gravity_init"," 则是在不使用 IMU时提供的初始重力预设。当前参数虽然被读入，但初始化采用真实 IMU平均加速度，",[44,3646,3643],{}," 不参与这条分支；改它不能修正当前系统的上下方向。",[652,3649,3650],{},"下面保留原日志的安装理论和测量记录作为线索。本轮没有执行其中的命令，也没有新增实物测量；这些记录所用的设备、安装方向和驱动配置仍需核对。",[652,3652,3653],{},"当前模型把整台 MID360的安装 roll设为-π\u002F4，即-45°；模型设置是否与旧实物记录的实际轴向一致，还需要核对。",[652,3655,3656],{},"方法一：在坐标轴约定一致、初始车体水平、只存在上述 roll时的理论计算",[652,3658,3659],{},"机器人静止时，IMU 的 linear_acceleration 本质上测的是与重力反向的“比力”。如果只绕 X 轴 roll 一个角度 r，那么静止时大致有：",[149,3661,3664],{"className":3662,"code":3663,"language":723,"meta":154},[721],"ax = 0\nay = g·sin(r)\naz = g·cos(r)\n",[44,3665,3663],{"__ignoreMap":154},[149,3667,3670],{"className":3668,"code":3669,"language":723,"meta":154},[721],"g = 9.81 m\u002Fs²\nr = -45°\n\n\nax = 0\n\nay = 9.81 × sin(-45°)\n   ≈ -6.9367\n\naz = 9.81 × cos(-45°)\n   ≈ +6.9367\n",[44,3671,3669],{"__ignoreMap":154},[652,3673,3674],{},[40,3675,3676],{},"仿真",[652,3678,3679],{},"方法二：测量法",[652,3681,3682],{},"仿真环境下imu测量：",[149,3684,3688],{"className":3685,"code":3686,"language":3687,"meta":154,"style":154},"language-bash shiki shiki-themes github-light github-dark","ros2 topic echo \u002Fred_standard_robot1\u002Flivox\u002Fimu --once\n","bash",[44,3689,3690],{"__ignoreMap":154},[158,3691,3692,3695,3698,3701,3704],{"class":160,"line":161},[158,3693,3694],{"class":1324},"ros2",[158,3696,3697],{"class":861}," topic",[158,3699,3700],{"class":861}," echo",[158,3702,3703],{"class":861}," \u002Fred_standard_robot1\u002Flivox\u002Fimu",[158,3705,3706],{"class":189}," --once\n",[149,3708,3711],{"className":3709,"code":3710,"language":723,"meta":154},[721],"linear_acceleration:\n  x: 1.877548187489191e-05\n  y: -6.929646440459081\n  z: 6.929646470797371\n",[44,3712,3710],{"__ignoreMap":154},[652,3714,3715],{},"这组旧仿真记录的 Y负、Z正，与上述理论条件下的计算一致；它没有验证实物安装，也不能单独证明导航参考系的上下方向正确。",[652,3717,3718],{},"然后取反得到初始 IMU自身坐标中的重力。下面旧代码片段的 gravity标签应按这个含义理解，不是要求直接填到 mapping.gravity：",[149,3720,3723],{"className":3721,"code":3722,"language":723,"meta":154},[721],"gravity\n≈ [0, +6.93, -6.93]\n",[44,3724,3722],{"__ignoreMap":154},[652,3726,3727],{},"静止测量有助于核对 IMU实际轴向，但测得的初始 IMU方向仍要与目标参考系区别开；不能只用测量结果代替整条坐标关系检查。",[652,3729,3730],{},[40,3731,3732],{},"旧实物记录（安装与数据来源待核对）",[652,3734,3679],{},[149,3736,3738],{"className":3685,"code":3737,"language":3687,"meta":154,"style":154},"source install\u002Fsetup.bash\nros2 launch livox_ros_driver2 msg_MID360_launch.py\n",[44,3739,3740,3748],{"__ignoreMap":154},[158,3741,3742,3745],{"class":160,"line":161},[158,3743,3744],{"class":189},"source",[158,3746,3747],{"class":861}," install\u002Fsetup.bash\n",[158,3749,3750,3752,3755,3758],{"class":160,"line":172},[158,3751,3694],{"class":1324},[158,3753,3754],{"class":861}," launch",[158,3756,3757],{"class":861}," livox_ros_driver2",[158,3759,3760],{"class":861}," msg_MID360_launch.py\n",[149,3762,3764],{"className":3685,"code":3763,"language":3687,"meta":154,"style":154},"ros2 topic echo \u002Flivox\u002Fimu --once\n",[44,3765,3766],{"__ignoreMap":154},[158,3767,3768,3770,3772,3774,3777],{"class":160,"line":161},[158,3769,3694],{"class":1324},[158,3771,3697],{"class":861},[158,3773,3700],{"class":861},[158,3775,3776],{"class":861}," \u002Flivox\u002Fimu",[158,3778,3706],{"class":189},[149,3780,3783],{"className":3781,"code":3782,"language":723,"meta":154},[721],"平均 linear_acceleration ≈\nx = 0.00424\ny = 0.71589\nz = 0.69592\n",[44,3784,3782],{"__ignoreMap":154},[652,3786,3787,3788,3791],{},"这组旧记录的 Y为正，而上面-45°理论和仿真记录的 Y为负。",[44,3789,3790],{},"atan2(0.716, 0.696) ≈ 45.8°"," 不能只解释为0.8°的小加工误差：还存在方向符号差异。应先核对当时实物安装、坐标轴、启动配置和驱动有无额外旋转，再判断记录是否能直接比较；本轮没有实物证据解释其来源。",[652,3793,3794,3795,3798],{},"下面是",[44,3796,3797],{},"Point-LIO","代码：",[149,3800,3802],{"className":1301,"code":3801,"language":1303,"meta":154,"style":154},"tmp_gravity =\n    -mean_acc \u002F mean_acc.norm() * G_m_s2;\n",[44,3803,3804,3812],{"__ignoreMap":154},[158,3805,3806,3809],{"class":160,"line":161},[158,3807,3808],{"class":168},"tmp_gravity ",[158,3810,3811],{"class":1310},"=\n",[158,3813,3814,3817,3820,3823,3826,3829,3832,3835],{"class":160,"line":172},[158,3815,3816],{"class":1310},"    -",[158,3818,3819],{"class":168},"mean_acc ",[158,3821,3822],{"class":1310},"\u002F",[158,3824,3825],{"class":168}," mean_acc.",[158,3827,3828],{"class":1324},"norm",[158,3830,3831],{"class":168},"() ",[158,3833,3834],{"class":1310},"*",[158,3836,3837],{"class":168}," G_m_s2;\n",[652,3839,3840],{},"就是三步：先求平均加速度 → 求这个向量的模 → 归一化后取反。",[652,3842,3843,3844,3847,3848,3851,3852],{},"先求平均加速度mean_acc = ",[158,3845,3846],{},"0.00423894,0.71588876,0.69592434","\n再求这个mean_acc的模，mean_acc.norm() =sqrt(0.00423894²+ 0.71588876²+ 0.69592434²) ≈ 0.99841142 ≈ 1.0\n原始三轴合起来约1 g；代码内部使用 G_m_s2≈9.81 m\u002Fs²进行换算。这里的1与9.81对应不同单位。\n所以代入公式得",[158,3849,3850],{},"0.04166067, 7.03407005, 6.83785222","，公式里有个负号，取反后得出",[158,3853,3854],{},"-0.04166067, -7.03407005, -6.83785222",[652,3856,3857],{},"这得到的是旧记录对应的初始 IMU自身重力向量。当前 YAML确实采用了同一组数，但是否符合选定的 Point-LIO／导航参考系仍待核实；长度约9.81正确，不意味着方向关系也已经通过验证。本轮不改方向。",[652,3859,3860,3861,3864,3865,3868],{},"源码补充：初始两重力方向恰好完全反向时，",[44,3862,3863],{},"Set_init"," 的一个分支返回 ",[44,3866,3867],{},"-Eye3d","，该矩阵不是有效的三维旋转矩阵。这个极端分支需单独核实；本轮没有证明现有配置触发它，也没有修改源码。",[647,3870,3872],{"id":3871},"extrinsic_t雷达与内部imu的位置关系","extrinsic_T（雷达与内部IMU的位置关系）",[652,3874,3875,3876,3879,3880,3344,3883,3886,3887,3889],{},"它描述",[40,3877,3878],{},"雷达原点相对 MID360 内部 IMU原点的位置","，当前按代码使用 ",[44,3881,3882],{},"p_I=R_IL·p_L+t_IL",[44,3884,3885],{},"[-0.011,-0.02329,+0.04412] m"," 换成毫米就是",[158,3888,3288],{}," mm。",[652,3891,3892],{},"这组内部关系与雷达装在底盘／云台上的位置是两回事。换支架、把整机倾斜或转动云台，不会让内部两个原点之间的距离变化；整机安装位置应在机器人 TF中描述。值或方向弄错，转动时可能出现位置偏差和重影，但同样现象也可能来自时间或后续接口。",[652,3894,3895],{},"实物需要核对设备型号、点云与IMU原点的定义，以及数据进入 Point-LIO前有没有额外变换；不能把云台到雷达的安装距离填到这里。现有数值保留，不作为本轮新标定结论。",[647,3897,3899],{"id":3898},"extrinsic_r雷达与内部imu的轴向关系","extrinsic_R（雷达与内部IMU的轴向关系）",[652,3901,3875,3902,3905],{},[40,3903,3904],{},"雷达坐标轴与内部 IMU坐标轴怎样对应","。当前单位矩阵表示两路输入按轴向一致使用。整台 MID360斜装时，雷达与内部IMU一起倾斜，不能因此再把整机的-45°安装角填进这项。",[652,3907,3908],{},"还要核对驱动是否已经旋转了数据：本地驱动有对IMU进行旋转的代码，当前所读 MID360配置的旋转三项均为0。后续换配置时，要检查点云和IMU是否仍按预期对应，不能只看它们的消息名称。",[652,3910,3911,3912,3915],{},"整机安装角属于机器人 TF，内部轴向对应属于 ",[44,3913,3914],{},"extrinsic_R","。旋转矩阵要由明确的坐标关系给出，不能逐个数字随意调大或调小。",[647,3917,3919],{"id":3918},"vel_cov速度估计的变化不确定性","vel_cov（速度估计的变化不确定性）",[652,3921,3922],{},"这项在当前 YAML中没写，源码默认20，当前 output模型使用它描述速度状态的不确定程度。它不是车辆最高速度：调大允许估计速度更容易被观测改变，调小更倾向维持原来的估计。先保持默认值；加减速反应异常也应先排除单位、时间和位姿转换问题。",[145,3924,3925],{"id":3925},"本块实物核对与验证范围",[652,3927,3928],{},"实物到位、另行获准检查后，这块优先核对：静止三轴加速度合起来是否约1 g、转速读数是否接近零且单位正确；点云和IMU是否按预期轴向发布；整机安装与内部外参有没有混填；车体／云台转动或颠簸时，读数是否出现限幅、位姿和墙面是否跟得上。",[652,3930,3931],{},"当前不能把“地面斜了、墙面重影、静止漂移”等任何单一现象直接当成某个参数必须修改的证据。原始单位、时间、安装和后续 IMU／雷达位姿接口都会影响表现，其中源码缺口需要单独处理，不能通过盲调噪声保证解决。",[730,3933,3934,3940,3946],{},[733,3935,3936,3939],{},[40,3937,3938],{},"源码能确认："," 当前 IMU输入单位、加速度换算、饱和门槛、各参数的生效分支、内部外参用途和已记录的求解／初始化疑点。容器中只核对了安装包与当前实物 YAML的来源，没有读取运行节点参数。",[733,3941,3942,3945],{},[40,3943,3944],{},"仿真已观察："," 2026-10-08 的静止和约20 cm往返有 Point-LIO位姿与配准点云输出；未验证坡道、长距离、快速转动、独立云台 yaw或实际振动。本块旧命令与读数作为历史记录保留，不扩大本轮验证范围。",[733,3947,3948,3951],{},[40,3949,3950],{},"必须实物核实："," 真实安装、轴向与原点定义、量程设置、静止读数和运动峰值。重力大小已约9.81，方向与目标参考系尚待核对；没有新增测量，也没有改动源码、配置或参数值。",[140,3953,3955],{"id":3954},"odometry里程计发布设置","odometry（里程计发布设置）",[145,3957,147],{"id":3958},"参数表-5",[149,3960,3962],{"className":151,"code":3961,"language":153,"meta":154,"style":154},"    odometry:\n      publish_odometry_without_downsample: True\n",[44,3963,3964,3971],{"__ignoreMap":154},[158,3965,3966,3969],{"class":160,"line":161},[158,3967,3968],{"class":164},"    odometry",[158,3970,169],{"class":168},[158,3972,3973,3976,3978],{"class":160,"line":172},[158,3974,3975],{"class":164},"      publish_odometry_without_downsample",[158,3977,186],{"class":168},[158,3979,205],{"class":189},[16,3981,3982,4002],{},[19,3983,3984],{},[22,3985,3986,3988,3990,3992,3994,3996,3998,4000],{},[25,3987,313],{},[25,3989,316],{},[25,3991,319],{},[25,3993,322],{},[25,3995,325],{},[25,3997,328],{},[25,3999,331],{},[25,4001,334],{},[32,4003,4004],{},[22,4005,4006,4011,4015,4017,4021,4024,4026,4028],{},[37,4007,4008],{},[44,4009,4010],{},"publish_odometry_without_downsample",[37,4012,4013],{},[44,4014,378],{},[37,4016,350],{},[37,4018,4019],{},[40,4020,355],{},[37,4022,4023],{},"选择逐点更新后或每帧处理结束后发布里程计",[37,4025,361],{},[37,4027,361],{},[37,4029,4030],{},"True：成功匹配更新后发布；False：每帧发布一次；点云降采样仍执行",[145,4032,645],{"id":4033},"参数详解-5",[647,4035,4037],{"id":4036},"publish_odometry_without_downsample里程计发布节拍","publish_odometry_without_downsample（里程计发布节拍）",[652,4039,4040],{},"这个开关控制里程计输出的节拍：",[730,4042,4043,4046],{},[733,4044,4045],{},"True：每次成功的逐点／时间组匹配后发布，时间戳为当前采样时刻，输出更密集，实际频率取决于成功更新次数。",[733,4047,4048],{},"False：每帧处理结束后发布一次，时间戳为扫描末尾；输入20 Hz且每帧正常处理时，通常约20 Hz输出。",[652,4050,4051],{},"当前先保持 True。后续若输出和接收负载过高，再考虑 False；改变的是输出节拍，逐点估计与点云降采样仍然执行。",[140,4053,4055],{"id":4054},"publish轨迹点云与tf输出开关","publish（轨迹、点云与TF输出开关）",[145,4057,147],{"id":4058},"参数表-6",[149,4060,4062],{"className":151,"code":4061,"language":153,"meta":154,"style":154},"    publish:\n      path_en: False                                    # False: close the path output\n      scan_publish_en: True                             # False: close all the point cloud output\n      scan_bodyframe_pub_en: False                      # True: output the point cloud scans in IMU-body-frame\n      tf_send_en: False                                  # True: send transform from 'camera_init' to 'aft_mapped'\n",[44,4063,4064,4071,4083,4095,4107],{"__ignoreMap":154},[158,4065,4066,4069],{"class":160,"line":161},[158,4067,4068],{"class":164},"    publish",[158,4070,169],{"class":168},[158,4072,4073,4076,4078,4080],{"class":160,"line":172},[158,4074,4075],{"class":164},"      path_en",[158,4077,186],{"class":168},[158,4079,190],{"class":189},[158,4081,4082],{"class":193},"                                    # False: close the path output\n",[158,4084,4085,4088,4090,4092],{"class":160,"line":180},[158,4086,4087],{"class":164},"      scan_publish_en",[158,4089,186],{"class":168},[158,4091,378],{"class":189},[158,4093,4094],{"class":193},"                             # False: close all the point cloud output\n",[158,4096,4097,4100,4102,4104],{"class":160,"line":197},[158,4098,4099],{"class":164},"      scan_bodyframe_pub_en",[158,4101,186],{"class":168},[158,4103,190],{"class":189},[158,4105,4106],{"class":193},"                      # True: output the point cloud scans in IMU-body-frame\n",[158,4108,4109,4112,4114,4116],{"class":160,"line":208},[158,4110,4111],{"class":164},"      tf_send_en",[158,4113,186],{"class":168},[158,4115,190],{"class":189},[158,4117,4118],{"class":193},"                                  # True: send transform from 'camera_init' to 'aft_mapped'\n",[16,4120,4121,4141],{},[19,4122,4123],{},[22,4124,4125,4127,4129,4131,4133,4135,4137,4139],{},[25,4126,313],{},[25,4128,316],{},[25,4130,319],{},[25,4132,322],{},[25,4134,325],{},[25,4136,328],{},[25,4138,331],{},[25,4140,334],{},[32,4142,4143,4170,4197,4224],{},[22,4144,4145,4150,4154,4156,4160,4163,4165,4167],{},[37,4146,4147],{},[44,4148,4149],{},"path_en",[37,4151,4152],{},[44,4153,190],{},[37,4155,350],{},[37,4157,4158],{},[40,4159,632],{},[37,4161,4162],{},"是否发布累计运行轨迹",[37,4164,361],{},[37,4166,361],{},[37,4168,4169],{},"True 发布 path，坐标系为 camera_init；轨迹持续累计",[22,4171,4172,4177,4181,4183,4187,4190,4192,4194],{},[37,4173,4174],{},[44,4175,4176],{},"scan_publish_en",[37,4178,4179],{},[44,4180,378],{},[37,4182,350],{},[37,4184,4185],{},[40,4186,355],{},[37,4188,4189],{},"是否发布参考系中的配准扫描点云",[37,4191,361],{},[37,4193,361],{},[37,4195,4196],{},"发布 cloud_registered，坐标系为 camera_init；本地 PCD 点云累计也依赖此开关",[22,4198,4199,4204,4208,4210,4214,4217,4219,4221],{},[37,4200,4201],{},[44,4202,4203],{},"scan_bodyframe_pub_en",[37,4205,4206],{},[44,4207,190],{},[37,4209,350],{},[37,4211,4212],{},[40,4213,632],{},[37,4215,4216],{},"是否额外发布内部 IMU 坐标系中的点云",[37,4218,361],{},[37,4220,361],{},[37,4222,4223],{},"需 scan_publish_en 同时为 True；话题为 cloud_registered_body，坐标系为 body",[22,4225,4226,4231,4235,4237,4241,4244,4246,4248],{},[37,4227,4228],{},[44,4229,4230],{},"tf_send_en",[37,4232,4233],{},[44,4234,190],{},[37,4236,350],{},[37,4238,4239],{},[40,4240,355],{},[37,4242,4243],{},"是否由 Point-LIO 发布自身位姿 TF",[37,4245,361],{},[37,4247,361],{},[37,4249,4250],{},"当前集成链保持 False；True 发布 camera_init → aft_mapped，数值对应内部 IMU 位姿；独立调试开启时需核对 TF 组织，不是底盘位姿 TF",[145,4252,645],{"id":4253},"参数详解-6",[647,4255,4257],{"id":4256},"path_en里程计轨迹发布","path_en（里程计轨迹发布）",[652,4259,4260],{},"True 时发布 path 累计轨迹，方便在 RViz 中观察机器人传感器的运动路线；False 时关闭该轨迹输出，里程计仍照常发布。",[652,4262,4263],{},"观察 SLAM 轨迹时可以按需开启。轨迹没有固定长度上限，长时间累计会增加内存和显示负担。",[647,4265,4267],{"id":4266},"scan_publish_en参考系中的配准点云发布","scan_publish_en（参考系中的配准点云发布）",[652,4269,4270],{},"当前保持 True，发布 cloud_registered 配准扫描，供 RViz 和后续接口使用。",[652,4272,4273],{},"False 时关闭当前配准扫描及依赖它的 body 点云输出，内部估计和建图仍继续。原注释“关闭全部点云输出”不完全准确：初始化的 Laser_map 仍可发布。另外，本地 PCD 保存所需的点云累计也放在这个分支内，后续启用保存时应保持 True。",[647,4275,4277],{"id":4276},"scan_bodyframe_pub_en内部imu自身系点云发布","scan_bodyframe_pub_en（内部IMU自身系点云发布）",[652,4279,4280],{},"True 时额外发布 cloud_registered_body，将预处理点云通过内部外参转换到 IMU 坐标系，主要用于辅助检查点云和外参；需要 scan_publish_en 同时为 True。",[652,4282,4283],{},"这里的 body 指 MID360 内部 IMU 坐标系。当前没有这项调试需求，先保持 False。",[647,4285,4287],{"id":4286},"tf_send_enpoint-lio位姿tf发布","tf_send_en（Point-LIO位姿TF发布）",[652,4289,4290],{},"True 时随里程计发布 camera_init → aft_mapped 的 TF；False 时关闭这条 TF，里程计和配准扫描仍可继续输出。",[652,4292,4293],{},"当前集成链先保持 False，底盘 TF 由其他接口节点发布。单独调试需要显示 Point-LIO 自身位姿 TF 时，再考虑开启；这条 TF 表达内部 IMU 位姿，不是 odom → base_footprint。",[140,4295,4297],{"id":4296},"pcd_save点云地图保存","pcd_save（点云地图保存）",[145,4299,147],{"id":4300},"参数表-7",[149,4302,4304],{"className":151,"code":4303,"language":153,"meta":154,"style":154},"    pcd_save:\n      pcd_save_en: False\n      interval: -1                                      # how many LiDAR frames saved in each pcd file;\n                                                        # -1 : all frames will be saved in ONE pcd file, may lead to memory crash when having too much frames.\n",[44,4305,4306,4313,4322,4335],{"__ignoreMap":154},[158,4307,4308,4311],{"class":160,"line":161},[158,4309,4310],{"class":164},"    pcd_save",[158,4312,169],{"class":168},[158,4314,4315,4318,4320],{"class":160,"line":172},[158,4316,4317],{"class":164},"      pcd_save_en",[158,4319,186],{"class":168},[158,4321,1390],{"class":189},[158,4323,4324,4327,4329,4332],{"class":160,"line":180},[158,4325,4326],{"class":164},"      interval",[158,4328,186],{"class":168},[158,4330,4331],{"class":189},"-1",[158,4333,4334],{"class":193},"                                      # how many LiDAR frames saved in each pcd file;\n",[158,4336,4337],{"class":160,"line":197},[158,4338,4339],{"class":193},"                                                        # -1 : all frames will be saved in ONE pcd file, may lead to memory crash when having too much frames.\n",[16,4341,4342,4362],{},[19,4343,4344],{},[22,4345,4346,4348,4350,4352,4354,4356,4358,4360],{},[25,4347,313],{},[25,4349,316],{},[25,4351,319],{},[25,4353,322],{},[25,4355,325],{},[25,4357,328],{},[25,4359,331],{},[25,4361,334],{},[32,4363,4364,4391],{},[22,4365,4366,4371,4375,4377,4381,4384,4386,4388],{},[37,4367,4368],{},[44,4369,4370],{},"pcd_save_en",[37,4372,4373],{},[44,4374,190],{},[37,4376,350],{},[37,4378,4379],{},[40,4380,632],{},[37,4382,4383],{},"是否累计并保存配准扫描为 PCD 文件",[37,4385,361],{},[37,4387,361],{},[37,4389,4390],{},"本地累计点云需 scan_publish_en=True；集成 SLAM launch 会覆盖为 True",[22,4392,4393,4398,4402,4405,4409,4412,4415,4418],{},[37,4394,4395],{},[44,4396,4397],{},"interval",[37,4399,4400],{},[44,4401,4331],{},[37,4403,4404],{},"次，扫描处理计数；-1为特殊值",[37,4406,4407],{},[40,4408,632],{},[37,4410,4411],{},"控制每累计多少次扫描处理后保存一份文件",[37,4413,4414],{},"正数范围内：保存间隔更长，单文件通常更大、缓存更多",[37,4416,4417],{},"正数范围内：保存更频繁，单文件通常更小、写盘次数更多",[37,4419,4420],{},"-1：累计到正常退出再保存；大于0：分批保存并清空累计缓存；不是秒；仅实际保存开启时生效，集成 SLAM launch 会开启保存",[145,4422,645],{"id":4423},"参数详解-7",[647,4425,4427],{"id":4426},"pcd_save_en点云地图保存开关","pcd_save_en（点云地图保存开关）",[652,4429,4430],{},"False 时关闭 PCD 保存，估计和建图仍继续；True 时累计 camera_init 坐标系中的配准扫描，保存为二进制 PCD。",[652,4432,4433],{},"当前先保持 False，需要存档时再开启，并保持 publish.scan_publish_en=True。注意：slam_launch.py 会把该参数覆盖为 True，所以是否保存还要看实际启动方式。",[647,4435,4437],{"id":4436},"interval点云保存的帧数间隔","interval（点云保存的帧数间隔）",[730,4439,4440,4443],{},[733,4441,4442],{},"-1：持续累计点云，正常退出时保存到 scans.pcd。长时间运行会增加内存占用，需要正常结束程序才能执行退出保存。",[733,4444,4445],{},"大于0：每累计指定次数的扫描处理就保存为 scans_1.pcd、scans_2.pcd 等，并清空累计缓存；正常退出时，剩余点仍保存到 scans.pcd。",[652,4447,4448],{},"这个计数按进入保存分支的扫描处理次数增加。例如稳定20 Hz且每帧正常处理时，100次约为5秒，但 interval 本身不是时间参数。本地仅在 interval>0 时分批保存，0及其他负值也不会触发周期保存，使用默认特殊值 -1 更清楚。",[652,4450,4451],{},"保存目录由编译时ROOT_DIR确定：CMake使用当时的Point-LIO源码目录，保存代码再拼接PCD\u002F。当前安装程序的输出目录为：",[149,4453,4456],{"className":4454,"code":4455,"language":723,"meta":154},[721],"\u002Fsrc\u002Fpb2025_sentry_nav\u002Fpoint_lio\u002FPCD\u002F\n",[44,4457,4455],{"__ignoreMap":154},[652,4459,4460],{},"这不是相对于运行目录的路径；在其他目录重新编译后需重新核对安装产物。",[652,4462,4463],{},"保存内容是多帧配准扫描的累计点云；文件不会自动放到导航先验地图目录。输出文件名固定，需保留不同轮次结果时，应先归档已有文件。",[4465,4466,4467],"style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":154,"searchDepth":172,"depth":172,"links":4469},[4470],{"id":14,"depth":172,"text":5,"children":4471},[4472],{"id":138,"depth":180,"text":138},"0500-0100","2026-09-20","2026-09-20-dao-hang","\u002Fwiki\u002F2026-09-20-dao-hang","导航","md",true,false,{},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0100-point-lio",{"title":5,"description":154},"wiki\u002F2026-09-20-导航\u002F0500-0100-Point_LIO","2kmpJVCl3CHQumexSebfqPq0RqOwvac-lQP8wVlp3MQ",[4487,4494,4500,4506,4512,4518,4524,4530,4536,4542,4548,4554,4560,4566,4568,4574,4580,4586,4592,4598,4604,4610,4616,4622,4628,4634,4640,4646,4652,4658,4664,4670,4676,4682,4688,4694,4700,4706],{"path":4488,"stem":4489,"title":4490,"authors":4491,"date":4474,"chapterOrder":4492,"chapterDepth":4493,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0100-jian-jie","wiki\u002F2026-09-20-导航\u002F0100-简介","简介",[7],"0100",0,{"path":4495,"stem":4496,"title":4497,"authors":4498,"date":4474,"chapterOrder":4499,"chapterDepth":4493,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0200-huan-jing-pei-zhi-yu-yun-xing","wiki\u002F2026-09-20-导航\u002F0200-环境配置与运行","环境配置与运行",[7],"0200",{"path":4501,"stem":4502,"title":4503,"authors":4504,"date":4474,"chapterOrder":4505,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0100-robot-description","wiki\u002F2026-09-20-导航\u002F0300-0100-robot_description","robot_description（机器人模型与关节定义）",[7],"0300-0100",{"path":4507,"stem":4508,"title":4509,"authors":4510,"date":4474,"chapterOrder":4511,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0200-mid360-an-zhuang-wei-zhi","wiki\u002F2026-09-20-导航\u002F0300-0200-MID360安装位置","MID360安装位置",[7],"0300-0200",{"path":4513,"stem":4514,"title":4515,"authors":4516,"date":4474,"chapterOrder":4517,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0300-launch-yu-bao-yi-lai-pei-zhi","wiki\u002F2026-09-20-导航\u002F0300-0300-Launch与包依赖配置","Launch与包依赖配置",[7],"0300-0300",{"path":4519,"stem":4520,"title":4521,"authors":4522,"date":4474,"chapterOrder":4523,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0400-fang-zhen-shi-jue-you-hua","wiki\u002F2026-09-20-导航\u002F0300-0400-仿真视觉优化","仿真视觉优化（可选）",[7],"0300-0400",{"path":4525,"stem":4526,"title":4527,"authors":4528,"date":4474,"chapterOrder":4529,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0500-tian-jia-di-tu","wiki\u002F2026-09-20-导航\u002F0300-0500-添加地图","添加地图",[7],"0300-0500",{"path":4531,"stem":4532,"title":4533,"authors":4534,"date":4474,"chapterOrder":4535,"chapterDepth":4493,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-ji-qi-ren-mo-xing-yu-fang-zhen","wiki\u002F2026-09-20-导航\u002F0300-机器人模型与仿真","机器人模型与仿真",[7],"0300",{"path":4537,"stem":4538,"title":4539,"authors":4540,"date":4474,"chapterOrder":4541,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0100-linux-yu-mcu-shu-ju-dui-jie","wiki\u002F2026-09-20-导航\u002F0400-0100-Linux与MCU数据对接","Linux与MCU数据对接",[7],"0400-0100",{"path":4543,"stem":4544,"title":4545,"authors":4546,"date":4474,"chapterOrder":4547,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0200-chuan-kou-tong-xin","wiki\u002F2026-09-20-导航\u002F0400-0200-串口通信","Serial_Comm（串口通信）",[7],"0400-0200",{"path":4549,"stem":4550,"title":4551,"authors":4552,"date":4474,"chapterOrder":4553,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0300-shou-bing-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-0300-手柄控制","Joy（手柄控制）",[7],"0400-0300",{"path":4555,"stem":4556,"title":4557,"authors":4558,"date":4474,"chapterOrder":4559,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0400-mid360-yu-tf-lian-tiao","wiki\u002F2026-09-20-导航\u002F0400-0400-MID360与TF联调","MID360与TF联调",[7],"0400-0400",{"path":4561,"stem":4562,"title":4563,"authors":4564,"date":4474,"chapterOrder":4565,"chapterDepth":4493,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-ying-jian-dui-jie-yu-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-硬件对接与控制","硬件对接与控制",[7],"0400",{"path":4482,"stem":4484,"title":5,"authors":4567,"date":4474,"chapterOrder":4473,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},[7],{"path":4569,"stem":4570,"title":4571,"authors":4572,"date":4474,"chapterOrder":4573,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0200-loam-interface","wiki\u002F2026-09-20-导航\u002F0500-0200-loam_interface","loam_interface（Point-LIO输出的坐标与话题适配）",[7],"0500-0200",{"path":4575,"stem":4576,"title":4577,"authors":4578,"date":4474,"chapterOrder":4579,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0300-sensor-scan-generation","wiki\u002F2026-09-20-导航\u002F0500-0300-sensor_scan_generation","sensor_scan_generation（雷达点云换系与底盘、云台位姿转换）",[7],"0500-0300",{"path":4581,"stem":4582,"title":4583,"authors":4584,"date":4474,"chapterOrder":4585,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0400-terrain-analysis","wiki\u002F2026-09-20-导航\u002F0500-0400-terrain_analysis","terrain_analysis（近场地面与障碍高差分析）",[7],"0500-0400",{"path":4587,"stem":4588,"title":4589,"authors":4590,"date":4474,"chapterOrder":4591,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0500-terrain-analysis-ext","wiki\u002F2026-09-20-导航\u002F0500-0500-terrain_analysis_ext","terrain_analysis_ext（扩展远场地形与近远场结果合并）",[7],"0500-0500",{"path":4593,"stem":4594,"title":4595,"authors":4596,"date":4474,"chapterOrder":4597,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0600-fake-vel-transform","wiki\u002F2026-09-20-导航\u002F0500-0600-fake_vel_transform","fake_vel_transform（云台系速度转换与底盘自旋）",[7],"0500-0600",{"path":4599,"stem":4600,"title":4601,"authors":4602,"date":4474,"chapterOrder":4603,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0700-small-gicp-relocalization","wiki\u002F2026-09-20-导航\u002F0500-0700-small_gicp_relocalization","small_gicp_relocalization（先验点云地图重定位）",[7],"0500-0700",{"path":4605,"stem":4606,"title":4607,"authors":4608,"date":4474,"chapterOrder":4609,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0800-pointcloud-to-laserscan","wiki\u002F2026-09-20-导航\u002F0500-0800-pointcloud_to_laserscan","pointcloud_to_laserscan（三维地形点云转二维扫描）",[7],"0500-0800",{"path":4611,"stem":4612,"title":4613,"authors":4614,"date":4474,"chapterOrder":4615,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0900-slam-toolbox","wiki\u002F2026-09-20-导航\u002F0500-0900-slam_toolbox","slam_toolbox（二维地图生成与轨迹优化）",[7],"0500-0900",{"path":4617,"stem":4618,"title":4619,"authors":4620,"date":4474,"chapterOrder":4621,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1000-bt-navigator","wiki\u002F2026-09-20-导航\u002F0500-1000-bt_navigator","bt_navigator（行为树导航任务调度）",[7],"0500-1000",{"path":4623,"stem":4624,"title":4625,"authors":4626,"date":4474,"chapterOrder":4627,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1100-controller-server","wiki\u002F2026-09-20-导航\u002F0500-1100-controller_server","controller_server（路径跟踪、进度检查与到达判定）",[7],"0500-1100",{"path":4629,"stem":4630,"title":4631,"authors":4632,"date":4474,"chapterOrder":4633,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1200-local-costmap","wiki\u002F2026-09-20-导航\u002F0500-1200-local_costmap","local_costmap（局部障碍代价地图）",[7],"0500-1200",{"path":4635,"stem":4636,"title":4637,"authors":4638,"date":4474,"chapterOrder":4639,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1300-global-costmap","wiki\u002F2026-09-20-导航\u002F0500-1300-global_costmap","global_costmap（全局规划代价地图）",[7],"0500-1300",{"path":4641,"stem":4642,"title":4643,"authors":4644,"date":4474,"chapterOrder":4645,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1400-map-server","wiki\u002F2026-09-20-导航\u002F0500-1400-map_server","map_server（已有二维地图加载与发布）",[7],"0500-1400",{"path":4647,"stem":4648,"title":4649,"authors":4650,"date":4474,"chapterOrder":4651,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1500-map-saver","wiki\u002F2026-09-20-导航\u002F0500-1500-map_saver","map_saver（二维栅格地图保存）",[7],"0500-1500",{"path":4653,"stem":4654,"title":4655,"authors":4656,"date":4474,"chapterOrder":4657,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1600-planner-server","wiki\u002F2026-09-20-导航\u002F0500-1600-planner_server","planner_server（Theta*全局路径规划）",[7],"0500-1600",{"path":4659,"stem":4660,"title":4661,"authors":4662,"date":4474,"chapterOrder":4663,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1700-smoother-server","wiki\u002F2026-09-20-导航\u002F0500-1700-smoother_server","smoother_server（全局路径平滑）",[7],"0500-1700",{"path":4665,"stem":4666,"title":4667,"authors":4668,"date":4474,"chapterOrder":4669,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1800-behavior-server","wiki\u002F2026-09-20-导航\u002F0500-1800-behavior_server","behavior_server（恢复行为与空闲方向移动）",[7],"0500-1800",{"path":4671,"stem":4672,"title":4673,"authors":4674,"date":4474,"chapterOrder":4675,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1900-waypoint-follower","wiki\u002F2026-09-20-导航\u002F0500-1900-waypoint_follower","waypoint_follower（逐点导航与到点等待）",[7],"0500-1900",{"path":4677,"stem":4678,"title":4679,"authors":4680,"date":4474,"chapterOrder":4681,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-2000-velocity-smoother","wiki\u002F2026-09-20-导航\u002F0500-2000-velocity_smoother","velocity_smoother（速度限幅与加减速平滑）",[7],"0500-2000",{"path":4683,"stem":4684,"title":4685,"authors":4686,"date":4474,"chapterOrder":4687,"chapterDepth":161,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-2100-pb-teleop-twist-joy-node","wiki\u002F2026-09-20-导航\u002F0500-2100-pb_teleop_twist_joy_node","pb_teleop_twist_joy_node（手柄输入与可替换控制入口）",[7],"0500-2100",{"path":4689,"stem":4690,"title":4691,"authors":4692,"date":4474,"chapterOrder":4693,"chapterDepth":4493,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-dao-hang-can-shu","wiki\u002F2026-09-20-导航\u002F0500-导航参数","导航参数",[7],"0500",{"path":4695,"stem":4696,"title":4697,"authors":4698,"date":4474,"chapterOrder":4699,"chapterDepth":4493,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0600-kai-fa-wen-ti-yu-pai-cha","wiki\u002F2026-09-20-导航\u002F0600-开发问题与排查","开发问题与排查",[7],"0600",{"path":4701,"stem":4702,"title":4703,"authors":4704,"date":4474,"chapterOrder":4705,"chapterDepth":4493,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4480},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0700-jue-ce","wiki\u002F2026-09-20-导航\u002F0700-决策","决策",[7],"0700",{"path":4476,"stem":4707,"title":4708,"authors":4709,"date":4474,"chapterOrder":4710,"chapterDepth":4493,"docKey":4475,"docRoot":4476,"docTitle":4477,"isWikiDoc":4479,"isWikiIndex":4479},"wiki\u002F2026-09-20-导航\u002Findex","北极熊导航复现日志",[7],null,[4712,4714,4717,4720],{"name":7,"image":4713},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":4715,"image":4716},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":4718,"image":4719},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":4721,"image":4722},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431906032]