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