[{"data":1,"prerenderedAt":3446},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1200-local-costmap":3,"wiki-doc-items-2026-09-20-dao-hang":3213,"wiki:author-members":3434},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":195,"chapterOrder":3200,"date":3201,"description":35,"docKey":3202,"docRoot":3203,"docTitle":3204,"extension":3205,"isWikiDoc":3206,"isWikiIndex":3207,"meta":3208,"navigation":3206,"path":3209,"seo":3210,"stem":3211,"wikiDepth":195,"__hash__":3212},"wiki\u002Fwiki\u002F2026-09-20-导航\u002F0500-1200-local_costmap.md","local_costmap（局部障碍代价地图）",[7],"董佳辉",{"type":9,"value":10,"toc":3194},"minimark",[11,15,20,28,39,52,152,178,181,184,708,711,716,720,1111,1114,1119,1122,1130,1138,1142,1150,1153,1161,1165,1168,1171,1174,1178,1189,1192,1195,1199,1203,1455,1459,1728,1731,1735,1738,1744,1803,1806,1814,1818,1821,1824,1828,1840,1843,1846,1850,1867,1870,1902,1909,1917,1920,1924,1927,1930,1947,1950,1954,1962,1965,1969,1972,2200,2203,2207,2210,2218,2221,2225,2228,2231,2234,2238,2241,2321,2324,2328,2336,2339,2343,2351,2354,2358,2361,2474,2477,2481,2484,2537,2544,2550,2558,2561,2564,2568,2571,2578,2581,2585,2588,2591,2963,2966,2974,2977,2981,2984,2987,3092,3105,3108,3162,3190],[12,13,5],"h2",{"id":14},"local_costmap局部障碍代价地图",[16,17,19],"h3",{"id":18},"实车先看地图上的障碍来自哪里","实车先看：地图上的障碍来自哪里",[21,22,23,27],"p",{},[24,25,26],"strong",{},"当前局部代价地图是以gimbal_yaw_fake位置为中心、在odom中表达的约5×5 m滚动网格。"," 它按顺序合成静态二维地图、实时地形障碍和障碍周围的膨胀代价，供controller_server使用。",[29,30,36],"pre",{"className":31,"code":33,"language":34,"meta":35},[32],"language-text","\u002Fmap二维占用图 → static_layer ──────────────────────────────┐\n                                                         │\nterrain_map（odom系地形点，intensity为离地高差）            │\n    → 观测缓冲：TF、来源高度筛选、雷达原点                  │\n    → intensity_voxel_layer：高度、高差、量程与体素筛选 ───┤\n                                                         ↓\n                                        inflation_layer → 局部合成代价地图\n                                                         ├─ controller_server读内存中的地图\n                                                         └─ costmap／costmap_updates／costmap_raw供订阅者\n","text","",[37,38,33],"code",{"__ignoreMap":35},[21,40,41,42,47,48],{},"本块直接接收近场terrain_map；全局代价地图接收terrain_map_ext，下一块再整理。pointcloud_to_laserscan生成的obstacle_scan用于二维建图，本局部障碍层不经过那份二维扫描。因此修改扫描转换器的高差门槛，不会直接修改这里的门槛。",[43,44,46],"a",{"href":45},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0400-terrain-analysis","地形分析分工","、",[43,49,51],{"href":50},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0800-pointcloud-to-laserscan","二维扫描转换",[53,54,55,71],"table",{},[56,57,58],"thead",{},[59,60,61,65,68],"tr",{},[62,63,64],"th",{},"实车上看到的现象",[62,66,67],{},"先核对什么",[62,69,70],{},"当前配置怎样理解",[72,73,74,86,97,108,119,130,141],"tbody",{},[59,75,76,80,83],{},[77,78,79],"td",{},"以为局部地图覆盖车周围5 m半径",[77,81,82],{},"width、height与量程",[77,84,85],{},"5 m是整张网格的边长，各轴只约覆盖中心两侧2.5 m；量程5 m不能扩展网格",[59,87,88,91,94],{},[77,89,90],{},"2 m内的高障碍仍没有进入此层",[77,92,93],{},"origin_z、z_resolution、z_voxels",[77,95,96],{},"当前体素高度是odom中的[0,0.8) m，超过0.8 m的点不能进入标记；2 m高度门槛只是前置过滤",[59,98,99,102,105],{},[77,100,101],{},"上坡高处或下坡低处的障碍消失",[77,103,104],{},"odom高度基准、两级高度窗口、体素窗口",[77,106,107],{},"高度窗口固定在odom，不随底盘z跟着升降；地形高差正确也可能被绝对高度裁掉",[59,109,110,113,116],{},[77,111,112],{},"写了track_unknown_space=True，未探测区却像空闲",[77,114,115],{},"参数所在层级",[77,117,118],{},"当前版本读取节点顶层track_unknown_space；写在intensity_voxel_layer内没有配置到它，顶层缺省False",[59,120,121,124,127],{},[77,122,123],{},"改unknown_threshold看不到效果",[77,125,126],{},"自定义层的使用路径",[77,128,129],{},"本实现没有用它计算未知列／二维未知状态；不能套用标准VoxelLayer的解释",[59,131,132,135,138],{},[77,133,134],{},"障碍已经移开，却继续残留",[77,136,137],{},"最新terrain_map、上游衰减、观测缓冲与静态层",[77,139,140],{},"本层每轮重建，最新观测仍可能含上游历史点；数据停止时默认还会复用最后一份观测",[59,142,143,146,149],{},[77,144,145],{},"以为cost_scaling_factor越大越保守",[77,147,148],{},"膨胀公式与当前控制器用法",[77,150,151],{},"越大，外围软代价衰减越快；当前PID只抽样检查高代价值，不用这套软梯度给轨迹打分",[21,153,154,155,158,159,162,163,166,167,47,173],{},"本次容器内nav2_costmap_2d、nav2_voxel_grid均为",[24,156,157],{},"1.1.20","，pb_nav2_plugins为",[24,160,161],{},"1.0.1","。本地自定义层实现与头文件和上游提交",[24,164,165],{},"e6778ca44d9e88aa612a3c6c87d536a8cfa21705","一致；以下按该版本核对。",[43,168,172],{"href":169,"rel":170},"https:\u002F\u002Fgithub.com\u002FSMBU-PolarBear-Robotics-Team\u002Fpb_nav2_plugins\u002Fblob\u002Fe6778ca44d9e88aa612a3c6c87d536a8cfa21705\u002Fsrc\u002Flayers\u002Fintensity_voxel_layer.cpp",[171],"nofollow","自定义层实现",[43,174,177],{"href":175,"rel":176},"https:\u002F\u002Fgithub.com\u002FSMBU-PolarBear-Robotics-Team\u002Fpb_nav2_plugins\u002Fblob\u002Fe6778ca44d9e88aa612a3c6c87d536a8cfa21705\u002Finclude\u002Fpb_nav2_plugins\u002Flayers\u002Fintensity_voxel_layer.hpp",[171],"体素换算与类定义",[16,179,180],{"id":180},"参数",[21,182,183],{},"下面保留发送的完整参数与原注释。实物／仿真段只有use_sim_time不同；源码缺省值及配置建议另列。",[29,185,189],{"className":186,"code":187,"language":188,"meta":35,"style":35},"language-yaml shiki shiki-themes github-light github-dark","local_costmap:\n  local_costmap:\n    ros__parameters:\n      use_sim_time: False\n      update_frequency: 10.0\n      publish_frequency: 5.0\n      global_frame: odom\n      robot_base_frame: gimbal_yaw_fake\n      rolling_window: true\n      width: 5\n      height: 5\n      resolution: 0.05\n      robot_radius: 0.2\n      plugins: [\"static_layer\", \"intensity_voxel_layer\", \"inflation_layer\"]\n      intensity_voxel_layer:\n        plugin: pb_nav2_costmap_2d::IntensityVoxelLayer\n        enabled: true\n        track_unknown_space: true\n        footprint_clearing_enabled: true\n        publish_voxel_map: false\n        combination_method: 1\n        mark_threshold: 0\n        origin_z: 0.0\n        unknown_threshold: 5\n        z_resolution: 0.05\n        z_voxels: 16\n        min_obstacle_height: 0.0\n        max_obstacle_height: 2.0\n        min_obstacle_intensity: 0.1\n        max_obstacle_intensity: 2.0\n        observation_sources: terrain_map\n        terrain_map:\n          data_type: PointCloud2\n          # '\u003Crobot_namespace>' keyword shall be replaced with 'namespace' where user defined.\n          # It doesn't need to start with '\u002F'\n          topic: \u003Crobot_namespace>\u002Fterrain_map\n          sensor_frame: front_mid360\n          min_obstacle_height: 0.0\n          max_obstacle_height: 2.0\n          obstacle_max_range: 5.0\n          obstacle_min_range: 0.2\n      static_layer:\n        plugin: \"nav2_costmap_2d::StaticLayer\"\n        map_subscribe_transient_local: True\n      inflation_layer:\n        plugin: \"nav2_costmap_2d::InflationLayer\"\n        cost_scaling_factor: 4.0\n        inflation_radius: 0.7\n      always_send_full_costmap: False\n","yaml",[37,190,191,204,212,220,233,244,255,267,278,289,300,310,321,332,358,366,377,387,397,407,418,429,440,451,461,471,482,492,503,514,524,535,543,554,561,567,578,589,599,609,619,629,637,647,658,666,676,687,698],{"__ignoreMap":35},[192,193,196,200],"span",{"class":194,"line":195},"line",1,[192,197,199],{"class":198},"s9eBZ","local_costmap",[192,201,203],{"class":202},"sVt8B",":\n",[192,205,207,210],{"class":194,"line":206},2,[192,208,209],{"class":198},"  local_costmap",[192,211,203],{"class":202},[192,213,215,218],{"class":194,"line":214},3,[192,216,217],{"class":198},"    ros__parameters",[192,219,203],{"class":202},[192,221,223,226,229],{"class":194,"line":222},4,[192,224,225],{"class":198},"      use_sim_time",[192,227,228],{"class":202},": ",[192,230,232],{"class":231},"sj4cs","False\n",[192,234,236,239,241],{"class":194,"line":235},5,[192,237,238],{"class":198},"      update_frequency",[192,240,228],{"class":202},[192,242,243],{"class":231},"10.0\n",[192,245,247,250,252],{"class":194,"line":246},6,[192,248,249],{"class":198},"      publish_frequency",[192,251,228],{"class":202},[192,253,254],{"class":231},"5.0\n",[192,256,258,261,263],{"class":194,"line":257},7,[192,259,260],{"class":198},"      global_frame",[192,262,228],{"class":202},[192,264,266],{"class":265},"sZZnC","odom\n",[192,268,270,273,275],{"class":194,"line":269},8,[192,271,272],{"class":198},"      robot_base_frame",[192,274,228],{"class":202},[192,276,277],{"class":265},"gimbal_yaw_fake\n",[192,279,281,284,286],{"class":194,"line":280},9,[192,282,283],{"class":198},"      rolling_window",[192,285,228],{"class":202},[192,287,288],{"class":231},"true\n",[192,290,292,295,297],{"class":194,"line":291},10,[192,293,294],{"class":198},"      width",[192,296,228],{"class":202},[192,298,299],{"class":231},"5\n",[192,301,303,306,308],{"class":194,"line":302},11,[192,304,305],{"class":198},"      height",[192,307,228],{"class":202},[192,309,299],{"class":231},[192,311,313,316,318],{"class":194,"line":312},12,[192,314,315],{"class":198},"      resolution",[192,317,228],{"class":202},[192,319,320],{"class":231},"0.05\n",[192,322,324,327,329],{"class":194,"line":323},13,[192,325,326],{"class":198},"      robot_radius",[192,328,228],{"class":202},[192,330,331],{"class":231},"0.2\n",[192,333,335,338,341,344,347,350,352,355],{"class":194,"line":334},14,[192,336,337],{"class":198},"      plugins",[192,339,340],{"class":202},": [",[192,342,343],{"class":265},"\"static_layer\"",[192,345,346],{"class":202},", ",[192,348,349],{"class":265},"\"intensity_voxel_layer\"",[192,351,346],{"class":202},[192,353,354],{"class":265},"\"inflation_layer\"",[192,356,357],{"class":202},"]\n",[192,359,361,364],{"class":194,"line":360},15,[192,362,363],{"class":198},"      intensity_voxel_layer",[192,365,203],{"class":202},[192,367,369,372,374],{"class":194,"line":368},16,[192,370,371],{"class":198},"        plugin",[192,373,228],{"class":202},[192,375,376],{"class":265},"pb_nav2_costmap_2d::IntensityVoxelLayer\n",[192,378,380,383,385],{"class":194,"line":379},17,[192,381,382],{"class":198},"        enabled",[192,384,228],{"class":202},[192,386,288],{"class":231},[192,388,390,393,395],{"class":194,"line":389},18,[192,391,392],{"class":198},"        track_unknown_space",[192,394,228],{"class":202},[192,396,288],{"class":231},[192,398,400,403,405],{"class":194,"line":399},19,[192,401,402],{"class":198},"        footprint_clearing_enabled",[192,404,228],{"class":202},[192,406,288],{"class":231},[192,408,410,413,415],{"class":194,"line":409},20,[192,411,412],{"class":198},"        publish_voxel_map",[192,414,228],{"class":202},[192,416,417],{"class":231},"false\n",[192,419,421,424,426],{"class":194,"line":420},21,[192,422,423],{"class":198},"        combination_method",[192,425,228],{"class":202},[192,427,428],{"class":231},"1\n",[192,430,432,435,437],{"class":194,"line":431},22,[192,433,434],{"class":198},"        mark_threshold",[192,436,228],{"class":202},[192,438,439],{"class":231},"0\n",[192,441,443,446,448],{"class":194,"line":442},23,[192,444,445],{"class":198},"        origin_z",[192,447,228],{"class":202},[192,449,450],{"class":231},"0.0\n",[192,452,454,457,459],{"class":194,"line":453},24,[192,455,456],{"class":198},"        unknown_threshold",[192,458,228],{"class":202},[192,460,299],{"class":231},[192,462,464,467,469],{"class":194,"line":463},25,[192,465,466],{"class":198},"        z_resolution",[192,468,228],{"class":202},[192,470,320],{"class":231},[192,472,474,477,479],{"class":194,"line":473},26,[192,475,476],{"class":198},"        z_voxels",[192,478,228],{"class":202},[192,480,481],{"class":231},"16\n",[192,483,485,488,490],{"class":194,"line":484},27,[192,486,487],{"class":198},"        min_obstacle_height",[192,489,228],{"class":202},[192,491,450],{"class":231},[192,493,495,498,500],{"class":194,"line":494},28,[192,496,497],{"class":198},"        max_obstacle_height",[192,499,228],{"class":202},[192,501,502],{"class":231},"2.0\n",[192,504,506,509,511],{"class":194,"line":505},29,[192,507,508],{"class":198},"        min_obstacle_intensity",[192,510,228],{"class":202},[192,512,513],{"class":231},"0.1\n",[192,515,517,520,522],{"class":194,"line":516},30,[192,518,519],{"class":198},"        max_obstacle_intensity",[192,521,228],{"class":202},[192,523,502],{"class":231},[192,525,527,530,532],{"class":194,"line":526},31,[192,528,529],{"class":198},"        observation_sources",[192,531,228],{"class":202},[192,533,534],{"class":265},"terrain_map\n",[192,536,538,541],{"class":194,"line":537},32,[192,539,540],{"class":198},"        terrain_map",[192,542,203],{"class":202},[192,544,546,549,551],{"class":194,"line":545},33,[192,547,548],{"class":198},"          data_type",[192,550,228],{"class":202},[192,552,553],{"class":265},"PointCloud2\n",[192,555,557],{"class":194,"line":556},34,[192,558,560],{"class":559},"sJ8bj","          # '\u003Crobot_namespace>' keyword shall be replaced with 'namespace' where user defined.\n",[192,562,564],{"class":194,"line":563},35,[192,565,566],{"class":559},"          # It doesn't need to start with '\u002F'\n",[192,568,570,573,575],{"class":194,"line":569},36,[192,571,572],{"class":198},"          topic",[192,574,228],{"class":202},[192,576,577],{"class":265},"\u003Crobot_namespace>\u002Fterrain_map\n",[192,579,581,584,586],{"class":194,"line":580},37,[192,582,583],{"class":198},"          sensor_frame",[192,585,228],{"class":202},[192,587,588],{"class":265},"front_mid360\n",[192,590,592,595,597],{"class":194,"line":591},38,[192,593,594],{"class":198},"          min_obstacle_height",[192,596,228],{"class":202},[192,598,450],{"class":231},[192,600,602,605,607],{"class":194,"line":601},39,[192,603,604],{"class":198},"          max_obstacle_height",[192,606,228],{"class":202},[192,608,502],{"class":231},[192,610,612,615,617],{"class":194,"line":611},40,[192,613,614],{"class":198},"          obstacle_max_range",[192,616,228],{"class":202},[192,618,254],{"class":231},[192,620,622,625,627],{"class":194,"line":621},41,[192,623,624],{"class":198},"          obstacle_min_range",[192,626,228],{"class":202},[192,628,331],{"class":231},[192,630,632,635],{"class":194,"line":631},42,[192,633,634],{"class":198},"      static_layer",[192,636,203],{"class":202},[192,638,640,642,644],{"class":194,"line":639},43,[192,641,371],{"class":198},[192,643,228],{"class":202},[192,645,646],{"class":265},"\"nav2_costmap_2d::StaticLayer\"\n",[192,648,650,653,655],{"class":194,"line":649},44,[192,651,652],{"class":198},"        map_subscribe_transient_local",[192,654,228],{"class":202},[192,656,657],{"class":231},"True\n",[192,659,661,664],{"class":194,"line":660},45,[192,662,663],{"class":198},"      inflation_layer",[192,665,203],{"class":202},[192,667,669,671,673],{"class":194,"line":668},46,[192,670,371],{"class":198},[192,672,228],{"class":202},[192,674,675],{"class":265},"\"nav2_costmap_2d::InflationLayer\"\n",[192,677,679,682,684],{"class":194,"line":678},47,[192,680,681],{"class":198},"        cost_scaling_factor",[192,683,228],{"class":202},[192,685,686],{"class":231},"4.0\n",[192,688,690,693,695],{"class":194,"line":689},48,[192,691,692],{"class":198},"        inflation_radius",[192,694,228],{"class":202},[192,696,697],{"class":231},"0.7\n",[192,699,701,704,706],{"class":194,"line":700},49,[192,702,703],{"class":198},"      always_send_full_costmap",[192,705,228],{"class":202},[192,707,232],{"class":231},[21,709,710],{},"两个local_costmap层级用于匹配命名空间和节点名。例如机器人命名空间为\u002Fred_standard_robot1时，当前controller_server创建的代价地图节点为\u002Fred_standard_robot1\u002Flocal_costmap\u002Flocal_costmap；发布话题通常位于\u002Fred_standard_robot1\u002Flocal_costmap下面。坐标系字符串不会随这个命名空间自动加前缀。",[712,713,715],"h4",{"id":714},"ros__parameters更新坐标网格与机器人轮廓","ros__parameters（更新、坐标、网格与机器人轮廓）",[717,718,719],"h5",{"id":719},"参数表",[53,721,722,750],{},[56,723,724],{},[59,725,726,729,732,735,738,741,744,747],{},[62,727,728],{},"参数名",[62,730,731],{},"当前值",[62,733,734],{},"单位",[62,736,737],{},"实车处理建议",[62,739,740],{},"作用",[62,742,743],{},"调大效果",[62,745,746],{},"调小效果",[62,748,749],{},"生效条件／备注",[72,751,752,784,816,848,877,905,933,964,994,1025,1056,1083],{},[59,753,754,759,765,768,773,776,779,781],{},[77,755,756],{},[37,757,758],{},"use_sim_time",[77,760,761,764],{},[37,762,763],{},"False","；仿真True",[77,766,767],{},"不适用，布尔",[77,769,770],{},[24,771,772],{},"上实物前必须核对并正确配置",[77,774,775],{},"选择ROS时钟，供TF、消息与发布判断使用",[77,777,778],{},"不适用",[77,780,778],{},[77,782,783],{},"经工程launch重写；应与点云及TF使用同一时间域；内部更新循环另用WallRate",[59,785,786,791,796,799,804,807,810,813],{},[77,787,788],{},[37,789,790],{},"update_frequency",[77,792,793],{},[37,794,795],{},"10.0",[77,797,798],{},"Hz，目标更新频率",[77,800,801],{},[24,802,803],{},"实物运行时重点观察，有问题再针对性调整",[77,805,806],{},"控制内部地图合成循环，当前目标100 ms／轮",[77,808,809],{},"理想情况下更快处理变化，计算与锁负担增加",[77,811,812],{},"内部障碍变化响应可能更迟",[77,814,815],{},"不提高输入点云采样频率，也不保证每轮有新观测；当前回调不重建该更新线程节拍",[59,817,818,823,828,831,836,839,842,845],{},[77,819,820],{},[37,821,822],{},"publish_frequency",[77,824,825],{},[37,826,827],{},"5.0",[77,829,830],{},"Hz，目标发布频率",[77,832,833],{},[24,834,835],{},"通常保持当前值，不作为优先调试项",[77,837,838],{},"控制地图话题发布的时间门槛",[77,840,841],{},"订阅者可能更及时，发布负担增加",[77,843,844],{},"话题显示／订阅更新更稀，内部地图仍可按10 Hz更新",[77,846,847],{},"发布判断在更新循环中；不保证实际5 Hz；控制器直接读内存，部分行为读地图话题或服务",[59,849,850,855,860,863,867,870,872,874],{},[77,851,852],{},[37,853,854],{},"global_frame",[77,856,857],{},[37,858,859],{},"odom",[77,861,862],{},"不适用，坐标系名称",[77,864,865],{},[24,866,772],{},[77,868,869],{},"指定这张局部网格的坐标参考系",[77,871,778],{},[77,873,778],{},[77,875,876],{},"点云最终转到此系；static_layer仍需将\u002Fmap的map系转换到odom；高度门槛也按该系z计算",[59,878,879,884,889,891,895,898,900,902],{},[77,880,881],{},[37,882,883],{},"robot_base_frame",[77,885,886],{},[37,887,888],{},"gimbal_yaw_fake",[77,890,862],{},[77,892,893],{},[24,894,772],{},[77,896,897],{},"指定滚动中心、控制器参考点与轮廓的机体系",[77,899,778],{},[77,901,778],{},[77,903,904],{},"与当前虚拟参考系设计配合；圆形轮廓中心在此原点，不能默认等于车体几何中心",[59,906,907,912,917,919,923,926,928,930],{},[77,908,909],{},[37,910,911],{},"rolling_window",[77,913,914],{},[37,915,916],{},"true",[77,918,767],{},[77,920,921],{},[24,922,835],{},[77,924,925],{},"随机器人位置移动平面网格原点",[77,927,778],{},[77,929,778],{},[77,931,932],{},"滚动平面窗口不会使origin_z随车升降，也不让网格轴随底盘yaw旋转；False为固定窗口",[59,934,935,940,945,948,952,955,958,961],{},[77,936,937],{},[37,938,939],{},"width",[77,941,942],{},[37,943,944],{},"5",[77,946,947],{},"m，网格x方向总边长",[77,949,950],{},[24,951,803],{},[77,953,954],{},"控制局部地图x方向覆盖范围",[77,956,957],{},"可保留更远的已有障碍和路径，网格与计算增多",[77,959,960],{},"范围变小，更容易在窗口外裁掉路径／障碍",[77,962,963],{},"当前按5\u002F0.05=100格；不是5格或5 m半径；本版本使用正整数米",[59,965,966,971,975,978,982,985,988,991],{},[77,967,968],{},[37,969,970],{},"height",[77,972,973],{},[37,974,944],{},[77,976,977],{},"m，网格y方向总边长",[77,979,980],{},[24,981,803],{},[77,983,984],{},"控制局部地图y方向覆盖范围",[77,986,987],{},"覆盖更宽，网格与计算增多",[77,989,990],{},"侧方范围变小，横移时可用环境更少",[77,992,993],{},"这里的height是平面y边长，不是体素z高度；当前100格",[59,995,996,1001,1006,1009,1013,1016,1019,1022],{},[77,997,998],{},[37,999,1000],{},"resolution",[77,1002,1003],{},[37,1004,1005],{},"0.05",[77,1007,1008],{},"m／平面格，5 cm",[77,1010,1011],{},[24,1012,803],{},[77,1014,1015],{},"设置x、y格子边长",[77,1017,1018],{},"格子更粗、格数更少，细障碍和窄通道表达可能变差",[77,1020,1021],{},"格子更细、计算及缓存增多，但不能补回上游丢点",[77,1023,1024],{},"当前100×100共10000格；两方向分辨率减半时格数约4倍；不等于定位精度",[59,1026,1027,1032,1037,1040,1044,1047,1050,1053],{},[77,1028,1029],{},[37,1030,1031],{},"robot_radius",[77,1033,1034],{},[37,1035,1036],{},"0.2",[77,1038,1039],{},"m，未填充轮廓的圆半径",[77,1041,1042],{},[24,1043,772],{},[77,1045,1046],{},"没有显式footprint时，以此半径生成圆形轮廓",[77,1048,1049],{},"车体占用与膨胀内圈变大，狭窄通道更受限",[77,1051,1052],{},"占用变小，可能低估真实车体／云台包络",[77,1054,1055],{},"当前无显式footprint，另有默认0.01 m padding；不是雷达盲区或膨胀半径，应按实际包络核对",[59,1057,1058,1063,1066,1069,1073,1076,1078,1080],{},[77,1059,1060],{},[37,1061,1062],{},"plugins",[77,1064,1065],{},"static_layer、intensity_voxel_layer、inflation_layer",[77,1067,1068],{},"不适用，有序ID列表",[77,1070,1071],{},[24,1072,772],{},[77,1074,1075],{},"按顺序加载并合成三层",[77,1077,778],{},[77,1079,778],{},[77,1081,1082],{},"当前先静态、再实时障碍、最后膨胀；各ID需有plugin类名；增删与换顺序会改变合成路径",[59,1084,1085,1090,1094,1096,1101,1104,1106,1108],{},[77,1086,1087],{},[37,1088,1089],{},"always_send_full_costmap",[77,1091,1092],{},[37,1093,763],{},[77,1095,767],{},[77,1097,1098],{},[24,1099,1100],{},"根据实际功能需求开启或设置",[77,1102,1103],{},"选择OccupancyGrid每次强制全图或按条件使用增量",[77,1105,778],{},[77,1107,778],{},[77,1109,1110],{},"False遇到尺寸、分辨率或滚动原点变化仍发全图；costmap_raw有订阅者时始终发完整原始代价图；不改变内部障碍判定",[717,1112,1113],{"id":1113},"参数详解",[1115,1116,1118],"h6",{"id":1117},"update_frequencypublish_frequency与always_send_full_costmap内部10-hz与话题5-hz各负责什么","update_frequency、publish_frequency与always_send_full_costmap（内部10 Hz与话题5 Hz各负责什么）",[21,1120,1121],{},"内部更新循环以WallRate运行，调用各层updateBounds、updateCosts合成地图。controller_server通过持有的local_costmap对象直接读取这张地图；它的20 Hz控制循环与本块10 Hz更新各自运行，部分控制轮次可能读到同一轮地图结果。",[21,1123,1124,1125],{},"publish_frequency控制更新循环中是否到了发布时间，不是独立的5 Hz发布定时器；实际受更新时间、负载和ROS时钟影响。若以2.5 m\u002Fs运动，理想100 ms更新间隔内已移动0.25 m，即5个当前格距；这是时间尺度计算，不是本次实车测量。调频率需要结合整条感知和执行链延迟。",[43,1126,1129],{"href":1127,"rel":1128},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fsrc\u002Fcostmap_2d_ros.cpp#L455",[171],"更新与发布循环（1.1.20）",[21,1131,1132,1133],{},"False不会保证只发增量：网格原点滚动、尺寸或分辨率变化时，OccupancyGrid会走全图分支；几何信息不变且有更新范围时，才可能发costmap_updates。costmap_raw不走这个增量选择，有订阅者就准备完整nav2_msgs\u002FCostmap。使用地图话题的行为与读取服务的行为，还应各自核对数据接口。",[43,1134,1137],{"href":1135,"rel":1136},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fsrc\u002Fcostmap_2d_publisher.cpp#L184",[171],"发布选择",[1115,1139,1141],{"id":1140},"global_framerobot_base_frame与rolling_windowodom中的移动窗口","global_frame、robot_base_frame与rolling_window（odom中的移动窗口）",[21,1143,1144,1145,1149],{},"网格轴按odom的x、y表达，中心跟踪gimbal_yaw_fake的平面位置，平面原点以格距对齐滚动；它不是随底盘姿态旋转的车体图。当前虚拟系的方向与速度转换关系见",[43,1146,1148],{"href":1147},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0600-fake-vel-transform","fake_vel_transform","。",[21,1151,1152],{},"局部地图使用odom可以减少全局重定位修正直接作用到局部点云坐标的影响，但静态层仍从map系地图取样，需要有效map↔odom。只有odom至机器人TF，不证明三层合成所需TF已经全部可用。",[21,1154,1155,1156],{},"窗口滚动只处理平面x、y。体素origin_z=0仍固定在odom的z基准上，机器人上坡、下坡不会自动平移这段垂直窗口。",[43,1157,1160],{"href":1158,"rel":1159},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fsrc\u002Flayered_costmap.cpp#L132",[171],"滚动原点实现",[1115,1162,1164],{"id":1163},"widthheight与resolution55-m100100格","width、height与resolution（5×5 m，100×100格）",[21,1166,1167],{},"当前约覆盖参考点两侧各2.5 m，角落的平面距离约3.5 m；实际原点受格距对齐，不能把边界当成精确连续对称的圆。5 m观测量程用于筛点，最终落在网格外的点仍不能标记。",[21,1169,1170],{},"平面共有10000格。自定义层再为每个平面列记录16个高度状态，逻辑上约160000个体素；实现用每列32位打包，不是为每个体素存一份完整点云。减小z_voxels不等于平面列缓存内存按比例减少。",[21,1172,1173],{},"平面resolution与垂直z_resolution是独立参数，当前恰好都为0.05 m。改变平面格距还会影响障碍合并、轮廓栅格化、膨胀和控制器局部路径处理；它不能增加MID360回波密度或恢复地形分析已经过滤掉的小障碍。",[1115,1175,1177],{"id":1176},"robot_radius围绕虚拟参考点的车体轮廓","robot_radius（围绕虚拟参考点的车体轮廓）",[21,1179,1180,1181,1183,1184],{},"当前默认footprint=\"",[192,1182],{},"\"，因此用robot_radius=0.2生成近似圆形多边形，再按默认footprint_padding≈0.01 m填充。padding按多边形顶点方向实现，不应把最终轮廓简单等同于精确半径0.21 m的圆。",[43,1185,1188],{"href":1186,"rel":1187},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fsrc\u002Fcostmap_2d_ros.cpp#L407",[171],"轮廓建立与填充",[21,1190,1191],{},"该轮廓以gimbal_yaw_fake原点为中心。需按真实底盘、雷达、云台及其活动包络核对0.2是否覆盖，而不是继承示例半径；安装参考点偏置也要计入。膨胀不能替代正确的车体轮廓。",[21,1193,1194],{},"如果以后改成车体矩形footprint，须处理其坐标轴和真实底盘姿态：当前虚拟系在平面上抵消yaw，不会自动随底盘转向。可选择覆盖转动包络的轮廓，或按实际姿态提供正确的动态轮廓，不能直接填一个底盘固连矩形就认定方向已正确。",[712,1196,1198],{"id":1197},"intensity_voxel_layer地形高差与三维障碍筛选","intensity_voxel_layer（地形高差与三维障碍筛选）",[717,1200,1202],{"id":1201},"参数表工作方式与合成","参数表（工作方式与合成）",[53,1204,1205,1225],{},[56,1206,1207],{},[59,1208,1209,1211,1213,1215,1217,1219,1221,1223],{},[62,1210,728],{},[62,1212,731],{},[62,1214,734],{},[62,1216,737],{},[62,1218,740],{},[62,1220,743],{},[62,1222,746],{},[62,1224,749],{},[72,1226,1227,1256,1283,1312,1339,1367,1396,1426],{},[59,1228,1229,1234,1239,1242,1246,1249,1251,1253],{},[77,1230,1231],{},[37,1232,1233],{},"plugin",[77,1235,1236],{},[37,1237,1238],{},"pb_nav2_costmap_2d::IntensityVoxelLayer",[77,1240,1241],{},"不适用，类名",[77,1243,1244],{},[24,1245,772],{},[77,1247,1248],{},"加载本工程按intensity筛点的自定义障碍层",[77,1250,778],{},[77,1252,778],{},[77,1254,1255],{},"继承ObstacleLayer，另有体素网格；每轮重建，不实现标准VoxelLayer的全部清空／未知列逻辑",[59,1257,1258,1263,1267,1269,1273,1276,1278,1280],{},[77,1259,1260],{},[37,1261,1262],{},"enabled",[77,1264,1265],{},[37,1266,916],{},[77,1268,767],{},[77,1270,1271],{},[24,1272,835],{},[77,1274,1275],{},"是否让本层处理并合成实时障碍",[77,1277,778],{},[77,1279,778],{},[77,1281,1282],{},"False停止本层标记与合成，不关闭static_layer／inflation_layer，也不自动停止所有已建立的输入订阅",[59,1284,1285,1290,1295,1297,1302,1305,1307,1309],{},[77,1286,1287],{},[37,1288,1289],{},"track_unknown_space",[77,1291,1292,1294],{},[37,1293,916],{},"，但层级未被读取",[77,1296,767],{},[77,1298,1299],{},[24,1300,1301],{},"已确认当前值错误，必须修改",[77,1303,1304],{},"当前层内键没有配置到真正的未知空间开关",[77,1306,778],{},[77,1308,778],{},[77,1310,1311],{},"当前1.1.20读取节点顶层track_unknown_space；未配置顶层时默认False；错误在层级，具体True／False取决于未知区域处理需求",[59,1313,1314,1319,1323,1325,1329,1332,1334,1336],{},[77,1315,1316],{},[37,1317,1318],{},"footprint_clearing_enabled",[77,1320,1321],{},[37,1322,916],{},[77,1324,767],{},[77,1326,1327],{},[24,1328,835],{},[77,1330,1331],{},"将本层二维轮廓内代价设为空闲",[77,1333,778],{},[77,1335,778],{},[77,1337,1338],{},"只清本层二维代价，不直接清体素位，也不能通过当前Max合成擦掉静态墙；错误轮廓可能清掉车旁真实点",[59,1340,1341,1346,1351,1353,1357,1360,1362,1364],{},[77,1342,1343],{},[37,1344,1345],{},"publish_voxel_map",[77,1347,1348],{},[37,1349,1350],{},"false",[77,1352,767],{},[77,1354,1355],{},[24,1356,1100],{},[77,1358,1359],{},"是否创建并发布三维体素网格话题",[77,1361,778],{},[77,1363,778],{},[77,1365,1366],{},"开启便于核对高度格，增加发布开销；不控制障碍计算；当前自定义层没有运行中重建发布器的回调",[59,1368,1369,1374,1379,1382,1386,1389,1391,1393],{},[77,1370,1371],{},[37,1372,1373],{},"combination_method",[77,1375,1376],{},[37,1377,1378],{},"1",[77,1380,1381],{},"不适用，枚举",[77,1383,1384],{},[24,1385,835],{},[77,1387,1388],{},"选择本层二维代价与前面图层的合成方法",[77,1390,778],{},[77,1392,778],{},[77,1394,1395],{},"当前1为Max，保留静态障碍并添加实时障碍；0为Overwrite；此版本其他整数落入不合成分支，不套用新版枚举",[59,1397,1398,1403,1407,1410,1415,1418,1421,1423],{},[77,1399,1400],{},[37,1401,1402],{},"unknown_threshold",[77,1404,1405],{},[37,1406,944],{},[77,1408,1409],{},"计数；当前未参与未知列计算",[77,1411,1412],{},[24,1413,1414],{},"当前运行不使用这个参数，暂不调整",[77,1416,1417],{},"声明并保存未知体素门槛，当前没有对应使用路径",[77,1419,1420],{},"当前无计算效果",[77,1422,1420],{},[77,1424,1425],{},"当前内部赋值5+(16−16)=5，但从未用它清线或投影未知列；不能用它修复未知区或坡道",[59,1427,1428,1433,1438,1441,1445,1448,1450,1452],{},[77,1429,1430],{},[37,1431,1432],{},"observation_sources",[77,1434,1435],{},[37,1436,1437],{},"terrain_map",[77,1439,1440],{},"不适用，空白分隔的来源ID字符串",[77,1442,1443],{},[24,1444,772],{},[77,1446,1447],{},"建立下方terrain_map来源的缓冲与订阅",[77,1449,778],{},[77,1451,778],{},[77,1453,1454],{},"ID用于找来源分组；真正话题由该分组的topic决定；多来源用空白分隔，仍需XYZ与intensity字段",[717,1456,1458],{"id":1457},"参数表高度体素与高差","参数表（高度、体素与高差）",[53,1460,1461,1481],{},[56,1462,1463],{},[59,1464,1465,1467,1469,1471,1473,1475,1477,1479],{},[62,1466,728],{},[62,1468,731],{},[62,1470,734],{},[62,1472,737],{},[62,1474,740],{},[62,1476,743],{},[62,1478,746],{},[62,1480,749],{},[72,1482,1483,1514,1545,1575,1606,1636,1667,1698],{},[59,1484,1485,1490,1495,1498,1502,1505,1508,1511],{},[77,1486,1487],{},[37,1488,1489],{},"mark_threshold",[77,1491,1492],{},[37,1493,1494],{},"0",[77,1496,1497],{},"每个平面列内已标记高度格的数量门槛",[77,1499,1500],{},[24,1501,803],{},[77,1503,1504],{},"标记高度格数严格超过门槛时，该平面格成为障碍",[77,1506,1507],{},"要求更多不同高度格被占用，可能减少零散噪声，也漏掉薄／低障碍",[77,1509,1510],{},"更少高度格即可成为障碍；当前0已是一格即可",[77,1512,1513],{},"不按同一体素内点数累计；重复100个同高度格的点仍只算一格；门槛应小于有效z格数",[59,1515,1516,1521,1526,1529,1533,1536,1539,1542],{},[77,1517,1518],{},[37,1519,1520],{},"origin_z",[77,1522,1523],{},[37,1524,1525],{},"0.0",[77,1527,1528],{},"m，odom中的体素下界",[77,1530,1531],{},[24,1532,772],{},[77,1534,1535],{},"设置整段垂直网格的起点",[77,1537,1538],{},"固定层数／格距时整段窗口上移",[77,1540,1541],{},"整段窗口下移",[77,1543,1544],{},"不随底盘升降；低于它且已通过高度过滤的点会压到最底格；本自定义层缺省竟为16.0 m，当前显式0不能按标准默认随意删除",[59,1546,1547,1552,1556,1559,1563,1566,1569,1572],{},[77,1548,1549],{},[37,1550,1551],{},"z_resolution",[77,1553,1554],{},[37,1555,1005],{},[77,1557,1558],{},"m／高度格，5 cm",[77,1560,1561],{},[24,1562,772],{},[77,1564,1565],{},"设置每个z格的厚度",[77,1567,1568],{},"固定16层时覆盖更高，垂直表达更粗",[77,1570,1571],{},"覆盖更矮、表达更细，可能删掉高处点",[77,1573,1574],{},"当前16×0.05=0.8 m；应为有限正值，独立于平面resolution",[59,1576,1577,1582,1587,1590,1594,1597,1600,1603],{},[77,1578,1579],{},[37,1580,1581],{},"z_voxels",[77,1583,1584],{},[37,1585,1586],{},"16",[77,1588,1589],{},"高度格数",[77,1591,1592],{},[24,1593,835],{},[77,1595,1596],{},"指定垂直格数",[77,1598,1599],{},"合法范围内覆盖更高；当前已达16层上限",[77,1601,1602],{},"覆盖变矮，更多高点越界",[77,1604,1605],{},"当前库最多16层；减少格数不等于每列打包内存同比减少；不能用40层覆盖2 m",[59,1607,1608,1613,1617,1620,1624,1627,1630,1633],{},[77,1609,1610],{},[37,1611,1612],{},"min_obstacle_height",[77,1614,1615],{},[37,1616,1525],{},[77,1618,1619],{},"m，odom中点z的本层下界",[77,1621,1622],{},[24,1623,772],{},[77,1625,1626],{},"本层标记时删除低于0的点",[77,1628,1629],{},"下界上移，删更多低处／下坡点",[77,1631,1632],{},"下界下移，允许更低点，但来源窗口还可能先删掉",[77,1634,1635],{},"当前和来源下界同为0；z不代表相对局部地面的高差，边界可通过",[59,1637,1638,1643,1648,1651,1655,1658,1661,1664],{},[77,1639,1640],{},[37,1641,1642],{},"max_obstacle_height",[77,1644,1645],{},[37,1646,1647],{},"2.0",[77,1649,1650],{},"m，odom中点z的本层上界",[77,1652,1653],{},[24,1654,772],{},[77,1656,1657],{},"本层标记时删除高于2 m的点",[77,1659,1660],{},"前置高度窗口更宽，但不能扩大0.8 m体素窗口",[77,1662,1663],{},"降到体素有效窗口内才进一步删掉当前可标记点",[77,1665,1666],{},"2 m不是最终有效标记高度；仅在0.8 m以上改变通常不改当前结果，z≥0.8 m仍因体素越界丢掉",[59,1668,1669,1674,1679,1682,1686,1689,1692,1695],{},[77,1670,1671],{},[37,1672,1673],{},"min_obstacle_intensity",[77,1675,1676],{},[37,1677,1678],{},"0.1",[77,1680,1681],{},"m，当前地形高差下界",[77,1683,1684],{},[24,1685,803],{},[77,1687,1688],{},"地形点高差至少10 cm才进入障碍标记",[77,1690,1691],{},"更多小高差被忽略，可能减轻坡面误判，也漏低障碍",[77,1693,1694],{},"接纳更多低障碍与地面噪声／坡面误差",[77,1696,1697],{},"此输入intensity是离估计地面的高差，不是雷达反射强度；0.1边界可通过",[59,1699,1700,1705,1709,1712,1716,1719,1722,1725],{},[77,1701,1702],{},[37,1703,1704],{},"max_obstacle_intensity",[77,1706,1707],{},[37,1708,1647],{},[77,1710,1711],{},"m，当前地形高差上界",[77,1713,1714],{},[24,1715,835],{},[77,1717,1718],{},"删除高差超过2 m的点",[77,1720,1721],{},"接纳更多大高差",[77,1723,1724],{},"删掉更多大高差",[77,1726,1727],{},"当前正常近场输出另受vehicleHeight=0.5 m限制，2 m通常不再裁剪；参数仍实际执行",[717,1729,1113],{"id":1730},"参数详解-1",[1115,1732,1734],{"id":1733},"高度体素窗口与intensity三道不同的筛选","高度、体素窗口与intensity（三道不同的筛选）",[21,1736,1737],{},"当前完整标记流程包括：来源缓冲高度筛选、本层高度筛选、地形高差筛选、相对传感器的三维量程筛选、平面与高度格范围，以及mark_threshold。通过其中一项不保证最终进入地图。",[21,1739,1740,1743],{},[24,1741,1742],{},"点的z是odom坐标；intensity是上游估计地面的高差。"," 假定量程、平面位置和其他条件都满足：",[53,1745,1746,1760],{},[56,1747,1748],{},[59,1749,1750,1754,1757],{},[62,1751,1753],{"align":1752},"right","点在odom中的z",[62,1755,1756],{"align":1752},"地形高差intensity",[62,1758,1759],{},"当前结果",[72,1761,1762,1773,1783,1793],{},[59,1763,1764,1767,1770],{},[77,1765,1766],{"align":1752},"0.2 m",[77,1768,1769],{"align":1752},"0.15 m",[77,1771,1772],{},"两级高度、高差及体素范围都通过，可标为障碍",[59,1774,1775,1777,1780],{},[77,1776,1766],{"align":1752},[77,1778,1779],{"align":1752},"0.05 m",[77,1781,1782],{},"高差不足0.1 m，被删",[59,1784,1785,1788,1790],{},[77,1786,1787],{"align":1752},"0.9 m",[77,1789,1769],{"align":1752},[77,1791,1792],{},"0～2 m高度过滤通过，但超过当前体素上界，无法标记",[59,1794,1795,1798,1800],{},[77,1796,1797],{"align":1752},"-0.1 m",[77,1799,1769],{"align":1752},[77,1801,1802],{},"来源高度下界已删除，尚未到体素处理",[21,1804,1805],{},"当前整数高度索引为floor((z−0)\u002F0.05)，要求索引小于16，故有效范围为**[0,0.8) m**。z=0.8对应索引16，越界；上界不包含。这段窗口固定在odom，odom的z=0并不凭名称保证就是实车当前地面。",[21,1807,1808,1809],{},"上坡高处、下坡低处的障碍即使地形高差正确，也可能被高度窗口删掉。若需要改变覆盖，必须一起核对来源高度、本层高度、origin_z与16层限制内的z_resolution；只把max_obstacle_height从2调到3不能解决体素上界。也不能为了放行坡面就把所有危险低障碍一起过滤。",[43,1810,1813],{"href":1811,"rel":1812},"https:\u002F\u002Fgithub.com\u002FSMBU-PolarBear-Robotics-Team\u002Fpb_nav2_plugins\u002Fblob\u002Fe6778ca\u002Fsrc\u002Flayers\u002Fintensity_voxel_layer.cpp#L135",[171],"实际筛点与索引转换",[1115,1815,1817],{"id":1816},"min_obstacle_intensity与max_obstacle_intensity是否把地形高差当障碍","min_obstacle_intensity与max_obstacle_intensity（是否把地形高差当障碍）",[21,1819,1820],{},"近场terrain_analysis已经把intensity改成相对估计地面的高差，当前下界0.1即10 cm。它不是“车辆能跨10 cm”，也不是坡度门槛。正常坡面若被错误估成15 cm凸起，满足其他窗口时仍可能成为障碍；应先看地面估计与坐标，再按真实车辆和场地调整门槛。",[21,1822,1823],{},"上游当前近场正常高差输出受vehicleHeight=0.5 m限制，所以这里2 m上限通常不会进一步裁剪正常点。若改输入、上游规则或出现特殊标记点，需要重新判断。直接改接原始雷达点云后，intensity可能变回反射强度，不能沿用“0.1 m／2 m”的解释。",[1115,1825,1827],{"id":1826},"mark_threshold数高度格不数原始点","mark_threshold（数高度格，不数原始点）",[21,1829,1830,1831,1834,1835],{},"VoxelGrid用位记录每个平面列的已标记高度格；已标记格数",[24,1832,1833],{},"严格大于","mark_threshold才返回可标障碍。当前0表示一格就够。设1则至少要两格，设2至少三格；同一高度格里再来很多点，不会增加高度格计数。",[43,1836,1839],{"href":1837,"rel":1838},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_voxel_grid\u002Finclude\u002Fnav2_voxel_grid\u002Fvoxel_grid.hpp#L99",[171],"标记计数实现",[21,1841,1842],{},"本层每次更新都会先重置二维图与体素，所以门槛统计来自本轮取得的观测内容；它不会靠连续多个更新周期逐渐凑够格数。但最新terrain_map本身包含上游历史点，不能把“一份最新观测”理解成一份纯实时原始扫描。",[21,1844,1845],{},"低矮物、薄障碍、稀疏回波可能只占一个高度格，提高门槛可能让它们消失；能否过滤噪声应按实物观察，不保证越大越稳。",[1115,1847,1849],{"id":1848},"track_unknown_space与unknown_threshold层级错误和未使用的门槛","track_unknown_space与unknown_threshold（层级错误和未使用的门槛）",[21,1851,1852,1853,1856,1857,47,1862],{},"自定义层调用ObstacleLayer::onInitialize，后者读的是",[24,1854,1855],{},"节点顶层track_unknown_space","；Costmap2DROS及StaticLayer也读该顶层键。当前层内True没有进入这条读取路径，顶层未配置时默认False，主图和障碍层默认按FREE_SPACE重置；静态图的未知值也会按该设置转为空闲。",[43,1858,1861],{"href":1859,"rel":1860},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fplugins\u002Fobstacle_layer.cpp#L79",[171],"父类读取位置",[43,1863,1866],{"href":1864,"rel":1865},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fplugins\u002Fstatic_layer.cpp#L263",[171],"静态未知值解释",[21,1868,1869],{},"若要表达原配置“跟踪未知空间”的True意图，正确层级为：",[29,1871,1873],{"className":186,"code":1872,"language":188,"meta":35,"style":35},"local_costmap:\n  local_costmap:\n    ros__parameters:\n      track_unknown_space: true\n",[37,1874,1875,1881,1887,1893],{"__ignoreMap":35},[192,1876,1877,1879],{"class":194,"line":195},[192,1878,199],{"class":198},[192,1880,203],{"class":202},[192,1882,1883,1885],{"class":194,"line":206},[192,1884,209],{"class":198},[192,1886,203],{"class":202},[192,1888,1889,1891],{"class":194,"line":214},[192,1890,217],{"class":198},[192,1892,203],{"class":202},[192,1894,1895,1898,1900],{"class":194,"line":222},[192,1896,1897],{"class":198},"      track_unknown_space",[192,1899,228],{"class":202},[192,1901,288],{"class":231},[21,1903,1904,1905,1908],{},"此时应移除无效的层内同名键，重新核对未知区在规划与控制中的处理。若任务选择不跟踪未知，则应明确顶层False；",[24,1906,1907],{},"错误是当前写入层级，不是要求所有任务必须使用True。"," 这里只提供修正说明，没有修改工程配置。",[21,1910,1911,1912],{},"unknown_threshold另属自定义成员：初始化保存5+(16−z_voxels)，当前仍为5，但后续没有用它清体素射线、统计未知列或生成二维未知状态。调整5不会改善当前未知空间判定。",[43,1913,1916],{"href":1914,"rel":1915},"https:\u002F\u002Fgithub.com\u002FSMBU-PolarBear-Robotics-Team\u002Fpb_nav2_plugins\u002Fblob\u002Fe6778ca\u002Fsrc\u002Flayers\u002Fintensity_voxel_layer.cpp",[171],"成员赋值与更新路径",[21,1918,1919],{},"即使顶层改True，本层也只是以未知默认二维格重置，再标出障碍和轮廓内空闲，不会因此自动得到标准VoxelLayer的完整射线空闲／未知推断。没有回波或点被过滤，不等于真实空地。",[1115,1921,1923],{"id":1922},"每轮重建轮廓清空与清地图服务几种清除各有范围","每轮重建、轮廓清空与清地图服务（几种清除各有范围）",[21,1925,1926],{},"该自定义updateBounds先resetMaps，再拿marking observations重建障碍，最后清本层轮廓内二维代价。它不调用getClearingObservations或raytraceFreespace，直接把来源clearing改True也不会给当前实现补上射线清空。",[21,1928,1929],{},"footprint_clearing_enabled=True只清本层二维轮廓，不擦除已保存的体素标记；当前Max合成也不会用FREE_SPACE覆盖static_layer的静态墙。轮廓、点云自车滤除和静态地图错误应分开核对。",[21,1931,1932,1933,1936,1937,47,1942],{},"清地图服务还需区分：类的isClearable=False使按区域的ClearAround／ClearExcept服务跳过它；但",[24,1934,1935],{},"ClearEntirely调用resetLayers，会重置主图并调用所有层的reset","，包括本层。前面的BT使用的是ClearEntireCostmap，因此不能说它因为isClearable=False就完全不重置。重置也不丢弃上游地形缓存，下一轮相同观测／静态图仍可能把障碍加回来。",[43,1938,1941],{"href":1939,"rel":1940},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fsrc\u002Fclear_costmap_service.cpp#L102",[171],"区域与整图服务",[43,1943,1946],{"href":1944,"rel":1945},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fsrc\u002Fcostmap_2d_ros.cpp#L618",[171],"整图层重置",[21,1948,1949],{},"本层内部重建不保证主图所有旧格立即变空；合成还受各层更新范围、滚动、静态占用和最新观测影响。动态残留应结合上游terrain_analysis衰减与实际话题观察。",[1115,1951,1953],{"id":1952},"combination_method当前max保留已有障碍","combination_method（当前Max保留已有障碍）",[21,1955,1956,1957],{},"当前1调用updateWithMax：本层未知格跳过；已知格可以替换主图未知格，或在代价更高时写入。FREE_SPACE不会降低前面静态层的已知障碍；不能简单把255未知当作普通数字最大值来推断全部合成结果。",[43,1958,1961],{"href":1959,"rel":1960},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fsrc\u002Fcostmap_layer.cpp#L109",[171],"Max合成",[21,1963,1964],{},"0为Overwrite，可用本层非未知代价覆盖之前的图层；当前顶层缺省不跟踪未知、重置大量格为FREE_SPACE，改0可能擦掉静态层的已知障碍。其他整数在当前父类switch中不做合成；新版文档中的其他枚举不代表本版本可用。",[712,1966,1968],{"id":1967},"intensity_voxel_layerterrain_map地形观测源","intensity_voxel_layer.terrain_map（地形观测源）",[717,1970,719],{"id":1971},"参数表-1",[53,1973,1974,1994],{},[56,1975,1976],{},[59,1977,1978,1980,1982,1984,1986,1988,1990,1992],{},[62,1979,728],{},[62,1981,731],{},[62,1983,734],{},[62,1985,737],{},[62,1987,740],{},[62,1989,743],{},[62,1991,746],{},[62,1993,749],{},[72,1995,1996,2025,2054,2083,2112,2141,2171],{},[59,1997,1998,2003,2008,2011,2015,2018,2020,2022],{},[77,1999,2000],{},[37,2001,2002],{},"data_type",[77,2004,2005],{},[37,2006,2007],{},"PointCloud2",[77,2009,2010],{},"不适用，消息类型名称",[77,2012,2013],{},[24,2014,772],{},[77,2016,2017],{},"为来源建立PointCloud2订阅及缓冲",[77,2019,778],{},[77,2021,778],{},[77,2023,2024],{},"当前自定义迭代器需要float XYZ与intensity字段；父类可订阅LaserScan，不代表本层改类型后仍有需要的intensity",[59,2026,2027,2032,2037,2040,2044,2047,2049,2051],{},[77,2028,2029],{},[37,2030,2031],{},"topic",[77,2033,2034],{},[37,2035,2036],{},"\u003Crobot_namespace>\u002Fterrain_map",[77,2038,2039],{},"不适用，话题名称",[77,2041,2042],{},[24,2043,772],{},[77,2045,2046],{},"指定实际近场地形点云输入",[77,2048,778],{},[77,2050,778],{},[77,2052,2053],{},"工程bringup先展开占位符；通常为\u002Fred_standard_robot1\u002Fterrain_map；绕过launch时原字符串不会自行展开",[59,2055,2056,2061,2066,2069,2073,2076,2078,2080],{},[77,2057,2058],{},[37,2059,2060],{},"sensor_frame",[77,2062,2063],{},[37,2064,2065],{},"front_mid360",[77,2067,2068],{},"不适用，传感器原点系名称",[77,2070,2071],{},[24,2072,772],{},[77,2074,2075],{},"取得量程筛选用的传感器原点",[77,2077,778],{},[77,2079,778],{},[77,2081,2082],{},"按点云时间戳查front_mid360至odom；点坐标仍按消息header.frame_id转换，不被强行当作雷达系点",[59,2084,2085,2089,2093,2096,2100,2103,2106,2109],{},[77,2086,2087],{},[37,2088,1612],{},[77,2090,2091],{},[37,2092,1525],{},[77,2094,2095],{},"m，odom中点z的来源下界",[77,2097,2098],{},[24,2099,772],{},[77,2101,2102],{},"观测缓冲阶段先删除低于0的点",[77,2104,2105],{},"提前删除更多低处点",[77,2107,2108],{},"允许更多低处点进入本层，仍受本层及体素限制",[77,2110,2111],{},"与上一组同名但属独立阶段；两处均为0，边界可通过；只改本层下界不能恢复此处已删点",[59,2113,2114,2118,2122,2125,2129,2132,2135,2138],{},[77,2115,2116],{},[37,2117,1642],{},[77,2119,2120],{},[37,2121,1647],{},[77,2123,2124],{},"m，odom中点z的来源上界",[77,2126,2127],{},[24,2128,772],{},[77,2130,2131],{},"观测缓冲阶段先删除高于2 m的点",[77,2133,2134],{},"来源窗口扩大，后续仍可删掉高点",[77,2136,2137],{},"降到体素有效窗口内才进一步减少当前可标记点",[77,2139,2140],{},"当前还受本层2 m和体素0.8 m上界限制；来源缺省上界为0.0，不自动继承本层2 m，不能随意省略；在odom中筛高度",[59,2142,2143,2148,2152,2155,2159,2162,2165,2168],{},[77,2144,2145],{},[37,2146,2147],{},"obstacle_max_range",[77,2149,2150],{},[37,2151,827],{},[77,2153,2154],{},"m，相对雷达原点的三维距离",[77,2156,2157],{},[24,2158,803],{},[77,2160,2161],{},"删除距离front_mid360原点达到／超过5 m的点",[77,2163,2164],{},"接纳更远已有点，仍受地形输出和网格边界限制",[77,2166,2167],{},"删除更多远点",[77,2169,2170],{},"当前距离包含z；等于上界也删除；不是局部地图宽度或底盘周围5 m圆",[59,2172,2173,2178,2182,2184,2188,2191,2194,2197],{},[77,2174,2175],{},[37,2176,2177],{},"obstacle_min_range",[77,2179,2180],{},[37,2181,1036],{},[77,2183,2154],{},[77,2185,2186],{},[24,2187,772],{},[77,2189,2190],{},"删除距雷达原点不超过0.2 m的点",[77,2192,2193],{},"排掉更多近点，也可能漏掉近车障碍",[77,2195,2196],{},"保留更多近点，可能包含自车回波",[77,2198,2199],{},"当前自定义代码使用≤下界删除；不是robot_radius，也不是完整车体掩膜",[717,2201,1113],{"id":2202},"参数详解-2",[1115,2204,2206],{"id":2205},"topicdata_type与sensor_frame点云坐标和测距原点分别取哪里","topic、data_type与sensor_frame（点云坐标和测距原点分别取哪里）",[21,2208,2209],{},"bringup_launch先把\u003Crobot_namespace>替换为空或“\u002F＋机器人命名空间”，随后参数重写和加载；当前配置通常订阅\u002Fred_standard_robot1\u002Fterrain_map。占位符没有在层源码中自行处理，直接启动原始参数文件时必须完成对应替换。",[21,2211,2212,2213],{},"terrain_map的点坐标当前在odom中。ObservationBuffer按header.frame_id把点云转换到global_frame；另以sensor_frame指定的原点、同一消息时间戳取得odom中的雷达位置，再供量程计算。因此sensor_frame不会把odom点重新解释成雷达局部点。",[43,2214,2217],{"href":2215,"rel":2216},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fsrc\u002Fobservation_buffer.cpp#L83",[171],"观测缓冲换系与原点",[21,2219,2220],{},"显式设置front_mid360后，消息过滤器还要求对应传感器系可变换。TF、时间域、命名空间和QoS都需要匹配；有地形话题不证明本层已成功接收缓冲。输入订阅采用SensorDataQoS，父类配置队列深度50；队列不是50 Hz或50 ms。",[1115,2222,2224],{"id":2223},"来源高度与量程高度在odom距离从雷达量","来源高度与量程（高度在odom，距离从雷达量）",[21,2226,2227],{},"来源高度先在转换后的odom点坐标上筛选，并保留包括intensity在内的原点字段；本层再次检查自己的高度门槛。当前两级0～2 m相同，实际可标记的上界仍受0.8 m体素覆盖制约。",[21,2229,2230],{},"量程使用sqrt((x−x_sensor)²+(y−y_sensor)²+(z−z_sensor)²)，当前严格保留0.2～5 m之间的点。与二维扫描转换器按底盘虚拟中心计算水平距离不同，雷达安装偏移、云台转动和上下坡会影响这个三维距离。",[21,2232,2233],{},"近场地形输出和局部窗口本就有限。增大量程不会扩大5×5 m网格、不能恢复上游被删的点，也不会让MID360采样更远；最小量程也不能滤掉距雷达超过0.2 m的全部自车结构。",[712,2235,2237],{"id":2236},"static_layer静态二维地图接入","static_layer（静态二维地图接入）",[717,2239,719],{"id":2240},"参数表-2",[53,2242,2243,2263],{},[56,2244,2245],{},[59,2246,2247,2249,2251,2253,2255,2257,2259,2261],{},[62,2248,728],{},[62,2250,731],{},[62,2252,734],{},[62,2254,737],{},[62,2256,740],{},[62,2258,743],{},[62,2260,746],{},[62,2262,749],{},[72,2264,2265,2292],{},[59,2266,2267,2271,2276,2278,2282,2285,2287,2289],{},[77,2268,2269],{},[37,2270,1233],{},[77,2272,2273],{},[37,2274,2275],{},"nav2_costmap_2d::StaticLayer",[77,2277,1241],{},[77,2279,2280],{},[24,2281,835],{},[77,2283,2284],{},"将订阅到的二维占用图采样到局部滚动网格",[77,2286,778],{},[77,2288,778],{},[77,2290,2291],{},"常规导航来源为map_server，建图时来源为slam_toolbox；读取地图话题，不直接读PCD或地图图片文件",[59,2293,2294,2299,2304,2307,2311,2314,2316,2318],{},[77,2295,2296],{},[37,2297,2298],{},"map_subscribe_transient_local",[77,2300,2301],{},[37,2302,2303],{},"True",[77,2305,2306],{},"不适用，QoS耐久性选择",[77,2308,2309],{},[24,2310,772],{},[77,2312,2313],{},"用Transient Local、Reliable、KeepLast(1)订阅完整地图",[77,2315,778],{},[77,2317,778],{},[77,2319,2320],{},"发布端需兼容，才能取得保留的最近地图；不是保存地图到磁盘，也不是开启map_updates订阅",[717,2322,1113],{"id":2323},"参数详解-3",[1115,2325,2327],{"id":2326},"static_layermap图仍要经过mapodom变换","static_layer（map图仍要经过map↔odom变换）",[21,2329,2330,2331],{},"静态层订阅完整OccupancyGrid，保存其尺寸、分辨率、原点和header.frame_id。滚动模式不会强行把主图变成整张静态地图的大小；它根据当前odom格子的世界位置，查询map_frame←odom的最新变换，到静态图中取样。因此local_costmap在odom中运行，仍需正确的全局定位变换。",[43,2332,2335],{"href":2333,"rel":2334},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fplugins\u002Fstatic_layer.cpp#L398",[171],"滚动静态图采样",[21,2337,2338],{},"当前顶层track_unknown_space缺省False，静态图未知格转为FREE_SPACE；已知墙仍保留。没有收到地图或对应TF查询失败时，点云这一路即使存在，也不能证明静态层已正常合成。当前controller_server还会等待代价地图current状态，地图输入和各层状态要一起看。",[1115,2340,2342],{"id":2341},"map_subscribe_transient_local保留地图消息与更新话题各自独立","map_subscribe_transient_local（保留地图消息与更新话题各自独立）",[21,2344,2345,2346],{},"True让较晚启动的订阅者可以从兼容发布端取得保留的最近完整地图。若发布端只提供Volatile耐久性或可靠性不兼容，不能靠延长TF等待取得地图；应先核对发布端与订阅端的QoS。",[43,2347,2350],{"href":2348,"rel":2349},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fplugins\u002Fstatic_layer.cpp#L70",[171],"地图订阅QoS",[21,2352,2353],{},"当前subscribe_to_updates缺省False，不订阅\u002Fmap_updates；这不阻止处理随后收到的完整\u002Fmap消息。“static”表示图层输入方式，不表示完整地图永远不能更新。",[712,2355,2357],{"id":2356},"inflation_layer障碍周围的二维代价","inflation_layer（障碍周围的二维代价）",[717,2359,719],{"id":2360},"参数表-3",[53,2362,2363,2383],{},[56,2364,2365],{},[59,2366,2367,2369,2371,2373,2375,2377,2379,2381],{},[62,2368,728],{},[62,2370,731],{},[62,2372,734],{},[62,2374,737],{},[62,2376,740],{},[62,2378,743],{},[62,2380,746],{},[62,2382,749],{},[72,2384,2385,2412,2443],{},[59,2386,2387,2391,2396,2398,2402,2405,2407,2409],{},[77,2388,2389],{},[37,2390,1233],{},[77,2392,2393],{},[37,2394,2395],{},"nav2_costmap_2d::InflationLayer",[77,2397,1241],{},[77,2399,2400],{},[24,2401,835],{},[77,2403,2404],{},"在已合成障碍附近写入距离相关的二维代价",[77,2406,778],{},[77,2408,778],{},[77,2410,2411],{},"当前位于三层最后，使静态墙和实时障碍都可成为膨胀源；不恢复被高度／高差筛掉的障碍",[59,2413,2414,2419,2424,2427,2431,2434,2437,2440],{},[77,2415,2416],{},[37,2417,2418],{},"cost_scaling_factor",[77,2420,2421],{},[37,2422,2423],{},"4.0",[77,2425,2426],{},"m⁻¹，指数衰减系数",[77,2428,2429],{},[24,2430,803],{},[77,2432,2433],{},"控制轮廓内圈之外的软代价随距离衰减",[77,2435,2436],{},"同样距离的外围代价更低、衰减更快；不加宽内圈",[77,2438,2439],{},"外围代价更高、衰减更慢，在既定半径内更宽地维持较高代价",[77,2441,2442],{},"不改0.7 m截断范围；当前PID没有使用1～252软代价评分，地图颜色变化不保证控制变化",[59,2444,2445,2450,2455,2458,2462,2465,2468,2471],{},[77,2446,2447],{},[37,2448,2449],{},"inflation_radius",[77,2451,2452],{},[37,2453,2454],{},"0.7",[77,2456,2457],{},"m，距致命障碍格的膨胀范围",[77,2459,2460],{},[24,2461,803],{},[77,2463,2464],{},"确定障碍周围多远仍写膨胀代价",[77,2466,2467],{},"代价影响范围扩大，计算增多，规划若使用梯度可能更早绕开",[77,2469,2470],{},"影响范围缩小；不能小到不足以表达所需轮廓空间",[77,2472,2473],{},"当前约14个5 cm格距；不是0.7 m全为禁止区，也不再自动加robot_radius成0.9 m",[717,2475,1113],{"id":2476},"参数详解-4",[1115,2478,2480],{"id":2479},"cost_scaling_factor与inflation_radius范围和代价下降速度","cost_scaling_factor与inflation_radius（范围和代价下降速度）",[21,2482,2483],{},"内部代价值与发布后的OccupancyGrid占用值不同：",[53,2485,2486,2496],{},[56,2487,2488],{},[59,2489,2490,2493],{},[62,2491,2492],{"align":1752},"内部代价",[62,2494,2495],{},"含义",[72,2497,2498,2505,2513,2521,2529],{},[59,2499,2500,2502],{},[77,2501,1494],{"align":1752},[77,2503,2504],{},"空闲",[59,2506,2507,2510],{},[77,2508,2509],{"align":1752},"1～252",[77,2511,2512],{},"非致命的软代价，越高通常越不希望经过",[59,2514,2515,2518],{},[77,2516,2517],{"align":1752},"253",[77,2519,2520],{},"轮廓内切半径范围的高代价",[59,2522,2523,2526],{},[77,2524,2525],{"align":1752},"254",[77,2527,2528],{},"致命障碍",[59,2530,2531,2534],{},[77,2532,2533],{"align":1752},"255",[77,2535,2536],{},"未知状态",[21,2538,2539,2540,2543],{},"设d为距致命障碍格的实际平面距离、r_ins为",[24,2541,2542],{},"实际填充轮廓","的内切半径。障碍处为254，内圈为253，内圈之外到膨胀范围内按下面计算后取整数：",[29,2545,2548],{"className":2546,"code":2547,"language":34,"meta":35},[32],"cost = 252 × exp(−cost_scaling_factor × (d − r_ins))\n",[37,2549,2547],{"__ignoreMap":35},[21,2551,2552,2553],{},"所以4变大时，外围代价更快降低；变小时，较高软代价维持得更远。0.7决定影响范围，4决定范围内的衰减，不能把两个参数当同一作用。",[43,2554,2557],{"href":2555,"rel":2556},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Finclude\u002Fnav2_costmap_2d\u002Finflation_layer.hpp#L148",[171],"代价公式（1.1.20）",[21,2559,2560],{},"仅为说明公式，假设r_ins=0.2 m、d=0.4 m：当前4对应约113，改为8约50，改为2约169。实际轮廓含padding、栅格化和最近障碍距离，不能把这个假设值当运行读数。",[21,2562,2563],{},"0.7 m以内并非全部致命或253，也不是保证车体距墙至少0.7 m。轮廓定义、真实包络、地图误差和路径使用方式都影响实际通过距离。",[1115,2565,2567],{"id":2566},"当前pid怎样使用这些代价软梯度不等于已经参与避障评分","当前PID怎样使用这些代价（软梯度不等于已经参与避障评分）",[21,2569,2570],{},"当前OmniPidPursuitController从局部路径抽10个点，检查落格代价是否达到INSCRIBED_INFLATED_OBSTACLE，即≥253；它不按1～252的软梯度给候选轨迹打分。改变局部cost_scaling_factor或扩大外围软代价，可能改变RViz颜色，却没有直接改变本插件的碰撞通过条件。",[21,2572,2573,2574],{},"robot_radius及padding改变的内切半径会影响253内圈；静态墙／实时障碍本身也参与高代价检查。全局路径又由另一张global_costmap规划，其膨胀设置需下一块单独核对，不能把两张地图的参数影响混为一谈。",[43,2575,2577],{"href":2576},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1100-controller-server","当前控制器地图使用方式",[21,2579,2580],{},"前文还记录了抽样数量及地图外点的处理缺口。这里的膨胀范围不是完整车体扫掠碰撞检查的替代，也不补回本障碍层遗漏的高度点。",[712,2582,2584],{"id":2583},"相关源码默认项原yaml未显式配置","相关源码默认项（原YAML未显式配置）",[717,2586,719],{"id":2587},"参数表-4",[21,2589,2590],{},"以下12项补充真正读取的节点顶层设置、观测缓冲与未知膨胀行为；不表示本次已向工程YAML追加。",[53,2592,2593,2613],{},[56,2594,2595],{},[59,2596,2597,2599,2601,2603,2605,2607,2609,2611],{},[62,2598,728],{},[62,2600,731],{},[62,2602,734],{},[62,2604,737],{},[62,2606,740],{},[62,2608,743],{},[62,2610,746],{},[62,2612,749],{},[72,2614,2615,2642,2672,2704,2735,2763,2790,2820,2850,2882,2909,2936],{},[59,2616,2617,2621,2626,2628,2632,2635,2637,2639],{},[77,2618,2619],{},[37,2620,1289],{},[77,2622,2623,2625],{},[37,2624,763],{},"，节点顶层源码默认",[77,2627,767],{},[77,2629,2630],{},[24,2631,772],{},[77,2633,2634],{},"决定主图、障碍层默认未知表示及静态未知格解释",[77,2636,778],{},[77,2638,778],{},[77,2640,2641],{},"真正被读取的键；与前面层内未生效的True不同，需明确实际未知区策略",[59,2643,2644,2649,2655,2658,2662,2665,2667,2669],{},[77,2645,2646],{},[37,2647,2648],{},"footprint",[77,2650,2651,2654],{},[37,2652,2653],{},"\"[]\"","，源码默认",[77,2656,2657],{},"不适用，轮廓顶点字符串",[77,2659,2660],{},[24,2661,772],{},[77,2663,2664],{},"指定显式多边形轮廓，空值时使用圆半径",[77,2666,778],{},[77,2668,778],{},[77,2670,2671],{},"当前用robot_radius；有效多边形会优先使用；还可通过footprint话题更新，须核对参考系",[59,2673,2674,2679,2685,2688,2692,2695,2698,2701],{},[77,2675,2676],{},[37,2677,2678],{},"footprint_padding",[77,2680,2681,2682,2654],{},"约",[37,2683,2684],{},"0.01",[77,2686,2687],{},"m，轮廓填充量",[77,2689,2690],{},[24,2691,772],{},[77,2693,2694],{},"在轮廓外增加填充，影响内切半径和清轮廓区域",[77,2696,2697],{},"有效轮廓增大",[77,2699,2700],{},"有效轮廓减小",[77,2702,2703],{},"不是补偿未量出的完整车体尺寸；按顶点实现，不能简单保证圆半径恰好加0.01",[59,2705,2706,2711,2716,2719,2723,2726,2729,2732],{},[77,2707,2708],{},[37,2709,2710],{},"transform_tolerance",[77,2712,2713,2625],{},[37,2714,2715],{},"0.3",[77,2717,2718],{},"s，TF查询等待",[77,2720,2721],{},[24,2722,835],{},[77,2724,2725],{},"供机器人位姿、观测缓冲和静态层等取得变换",[77,2727,2728],{},"可等待更久，也可能增加延迟",[77,2730,2731],{},"更快结束缺失TF查询",[77,2733,2734],{},"不允许0.3 rad／m误差，也不补偿外参；运行中改顶层值不会自动更新已构建的所有缓冲成员",[59,2736,2737,2742,2747,2749,2753,2756,2758,2760],{},[77,2738,2739],{},[37,2740,2741],{},"intensity_voxel_layer.terrain_map.marking",[77,2743,2744,2746],{},[37,2745,2303],{},"，父类默认",[77,2748,767],{},[77,2750,2751],{},[24,2752,835],{},[77,2754,2755],{},"将此来源加入标记观测列表",[77,2757,778],{},[77,2759,778],{},[77,2761,2762],{},"当前自定义层使用该标记列表；关闭后此来源不再贡献障碍",[59,2764,2765,2770,2774,2776,2780,2783,2785,2787],{},[77,2766,2767],{},[37,2768,2769],{},"intensity_voxel_layer.terrain_map.clearing",[77,2771,2772,2746],{},[37,2773,763],{},[77,2775,767],{},[77,2777,2778],{},[24,2779,1414],{},[77,2781,2782],{},"父类可把来源加入清空列表，本自定义更新未使用该列表",[77,2784,778],{},[77,2786,778],{},[77,2788,2789],{},"改True不会自动开启本层射线清空；对应raytrace量程也不会因添加配置就参与当前处理",[59,2791,2792,2797,2801,2804,2808,2811,2814,2817],{},[77,2793,2794],{},[37,2795,2796],{},"intensity_voxel_layer.terrain_map.observation_persistence",[77,2798,2799,2746],{},[37,2800,1525],{},[77,2802,2803],{},"s，观测缓存保留设置",[77,2805,2806],{},[24,2807,835],{},[77,2809,2810],{},"决定缓存一份还是一定时间内的多份观测",[77,2812,2813],{},"正值时可能保留更多历史观测，动态残留增多",[77,2815,2816],{},"正值减小时历史窗口变短；0另走特殊分支",[77,2818,2819],{},"0表示只留最后一份，不表示最后一份在0 s后过期；不清上游terrain_map历史",[59,2821,2822,2827,2831,2834,2838,2841,2844,2847],{},[77,2823,2824],{},[37,2825,2826],{},"intensity_voxel_layer.terrain_map.expected_update_rate",[77,2828,2829,2746],{},[37,2830,1525],{},[77,2832,2833],{},"s，期望消息间隔",[77,2835,2836],{},[24,2837,803],{},[77,2839,2840],{},"正值时用于判断观测是否按期更新",[77,2842,2843],{},"允许更长消息间隔后仍算current",[77,2845,2846],{},"正值变小使停更更快被判断；0关闭这项检查",[77,2848,2849],{},"名字虽带rate，代码按秒建Duration；当前停更不因这项自动变为不current",[59,2851,2852,2857,2866,2868,2872,2875,2877,2879],{},[77,2853,2854],{},[37,2855,2856],{},"static_layer.map_topic",[77,2858,2859,2862,2863],{},[37,2860,2861],{},"\"\"","，层私有默认；转用节点默认机器人namespace下的",[37,2864,2865],{},"map",[77,2867,2039],{},[77,2869,2870],{},[24,2871,772],{},[77,2873,2874],{},"指定完整静态图话题",[77,2876,778],{},[77,2878,778],{},[77,2880,2881],{},"当前通常\u002Fred_standard_robot1\u002Fmap；不是\u002Fred_standard_robot1\u002Flocal_costmap\u002Fmap；以实际namespace／重映射为准",[59,2883,2884,2889,2893,2895,2899,2902,2904,2906],{},[77,2885,2886],{},[37,2887,2888],{},"static_layer.subscribe_to_updates",[77,2890,2891,2654],{},[37,2892,763],{},[77,2894,767],{},[77,2896,2897],{},[24,2898,1100],{},[77,2900,2901],{},"是否另外接收map_topic加_updates的增量图",[77,2903,778],{},[77,2905,778],{},[77,2907,2908],{},"False仍接收后续完整地图；与地图Transient Local订阅设置独立",[59,2910,2911,2916,2920,2922,2926,2929,2931,2933],{},[77,2912,2913],{},[37,2914,2915],{},"inflation_layer.inflate_unknown",[77,2917,2918,2654],{},[37,2919,763],{},[77,2921,767],{},[77,2923,2924],{},[24,2925,1100],{},[77,2927,2928],{},"控制已知障碍膨胀到未知格时是否写入软代价",[77,2930,778],{},[77,2932,778],{},[77,2934,2935],{},"False也可能在未知格写入≥253的内圈代价；不等于把未知格都当膨胀源",[59,2937,2938,2943,2947,2949,2953,2956,2958,2960],{},[77,2939,2940],{},[37,2941,2942],{},"inflation_layer.inflate_around_unknown",[77,2944,2945,2654],{},[37,2946,763],{},[77,2948,767],{},[77,2950,2951],{},[24,2952,1100],{},[77,2954,2955],{},"是否将未知格本身也作为膨胀起点",[77,2957,778],{},[77,2959,778],{},[77,2961,2962],{},"当前不主动围绕未知格膨胀；与上一项是不同步骤，顶层未知策略变化后需重新核对",[717,2964,2965],{"id":2965},"观测停更与默认未知状态",[21,2967,2968,2969],{},"observation_persistence=0只删除比最新观测更旧的观测，保留最后一份；expected_update_rate=0直接将缓冲判为current。于是点云停止到达时，本层可能继续每轮重建同一份旧地形，而不是自动清空障碍或停止控制。还需结合静态层、其他层状态和完整系统的数据监测判断，不能只看地图话题仍发布。",[43,2970,2973],{"href":2971,"rel":2972},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fsrc\u002Fobservation_buffer.cpp#L187",[171],"缓存保留与current判断",[21,2975,2976],{},"如果以后设置正的expected_update_rate，按秒的消息间隔理解，再核对正常数据周期与延迟；不能填10就当成10 Hz。只改变buffer保留时间也不去除terrain_map内部已经累计的历史点。",[712,2978,2980],{"id":2979},"动态参数启动来源与验证范围","动态参数、启动来源与验证范围",[717,2982,2983],{"id":2983},"动态修改的实际范围",[21,2985,2986],{},"自定义层没有另写覆盖体素、高差和发布器的动态回调，使用父类ObstacleLayer的回调；因此运行中参数设置成功，不代表所有成员已经更新。",[53,2988,2989,3002],{},[56,2990,2991],{},[59,2992,2993,2996,2999],{},[62,2994,2995],{},"参数类别",[62,2997,2998],{},"当前实现",[62,3000,3001],{},"应怎样核对",[72,3003,3004,3015,3026,3037,3048,3059,3070,3081],{},[59,3005,3006,3009,3012],{},[77,3007,3008],{},"robot_radius、footprint_padding、footprint、publish_frequency",[77,3010,3011],{},"节点回调会更新相应轮廓或发布门槛",[77,3013,3014],{},"核对实际轮廓、膨胀内圈及地图话题；动态轮廓须符合当前参考系",[59,3016,3017,3020,3023],{},[77,3018,3019],{},"width、height、resolution",[77,3021,3022],{},"当前未锁尺寸时回调重建网格，并调用各层matchSize",[77,3024,3025],{},"注意观察缓存与范围变化；width／height采用正整数，resolution为正double",[59,3027,3028,3031,3034],{},[77,3029,3030],{},"update_frequency、global_frame、rolling_window、plugins、track_unknown_space、always_send_full_costmap",[77,3032,3033],{},"当前没有完整动态联动更新路径",[77,3035,3036],{},"重新配置／重启后核对有效行为，不仅看参数列表",[59,3038,3039,3042,3045],{},[77,3040,3041],{},"intensity_voxel_layer.enabled、footprint_clearing_enabled、两项层高度、combination_method",[77,3043,3044],{},"父类回调更新对应成员",[77,3046,3047],{},"分支改变后核对实际合成；层高度变了不会同时重建来源高度过滤",[59,3049,3050,3053,3056],{},[77,3051,3052],{},"origin_z、z_resolution、z_voxels、mark_threshold、unknown_threshold、两项intensity、publish_voxel_map",[77,3054,3055],{},"当前自定义层无对应动态更新分支",[77,3057,3058],{},"重新配置／重启；unknown_threshold重启后也仍无当前使用路径",[59,3060,3061,3064,3067],{},[77,3062,3063],{},"terrain_map的话题、类型、原点系、来源高度、量程、缓存及期望间隔",[77,3065,3066],{},"初始化时建订阅器和ObservationBuffer",[77,3068,3069],{},"重新配置／重启，不能只修改成员外的同名ROS值",[59,3071,3072,3075,3078],{},[77,3073,3074],{},"static_layer地图话题、Transient Local、subscribe_to_updates",[77,3076,3077],{},"当前回调明确拒绝这类运行中修改",[77,3079,3080],{},"修改配置并重新启动订阅后验证",[59,3082,3083,3086,3089],{},[77,3084,3085],{},"inflation_radius、cost_scaling_factor及未知膨胀开关",[77,3087,3088],{},"膨胀层回调更新、必要时重算缓存并重新膨胀",[77,3090,3091],{},"核对实际代价图及当前消费者是否使用软梯度",[21,3093,3094,3095,47,3100],{},"顶层transform_tolerance有成员更新分支，但已经创建的来源缓冲、消息过滤器和静态层各有初始化时保存的值；不能认为一次改值让所有TF等待同步变化。",[43,3096,3099],{"href":3097,"rel":3098},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fsrc\u002Fcostmap_2d_ros.cpp#L661",[171],"节点回调",[43,3101,3104],{"href":3102,"rel":3103},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fplugins\u002Fobstacle_layer.cpp#L289",[171],"父类层回调",[717,3106,3107],{"id":3107},"启动与核对范围",[53,3109,3110,3120],{},[56,3111,3112],{},[59,3113,3114,3117],{},[62,3115,3116],{},"启动方式",[62,3118,3119],{},"本块来源与关系",[72,3121,3122,3130,3138,3146,3154],{},[59,3123,3124,3127],{},[77,3125,3126],{},"整套reality",[77,3128,3129],{},"config\u002Freality\u002Fnav2_params.yaml，经bringup替换topic占位符、navigation_launch重写时钟并加载",[59,3131,3132,3135],{},[77,3133,3134],{},"整套simulation",[77,3136,3137],{},"config\u002Fsimulation\u002Fnav2_params.yaml，本块仅use_sim_time=True不同",[59,3139,3140,3143],{},[77,3141,3142],{},"组件／独立进程",[77,3144,3145],{},"local_costmap由controller_server内部创建，读取同套命名空间下的节点参数；不是这份YAML自己启动一个进程",[59,3147,3148,3151],{},[77,3149,3150],{},"slam=True",[77,3152,3153],{},"静态层接建图产生的完整\u002Fmap；实时地形层仍用terrain_map",[59,3155,3156,3159],{},[77,3157,3158],{},"slam=False",[77,3160,3161],{},"静态层接map_server的\u002Fmap；实时地形层仍用terrain_map，地图定位依赖small_gicp等提供map↔odom",[3163,3164,3165,3172,3178,3184],"ul",{},[3166,3167,3168,3171],"li",{},[24,3169,3170],{},"本次已核对："," 当前包版本、插件注册与liblayers.so存在；自定义层安装头文件与本地一致，本地实现与上游固定提交一致；Nav2的体素、合成与膨胀安装头文件匹配1.1.20；两份local_costmap段与安装副本一致，仿真仅时钟不同。",[3166,3173,3174,3177],{},[24,3175,3176],{},"源码能确认："," 40项原配置的读取／使用条件；层内未知开关位置无效、unknown_threshold未参与计算；当前odom垂直标记区间[0,0.8) m；按不同高度格计标记；每轮重建但不射线清空；区域与整图清理不同；默认旧观测复用、膨胀方向和全图／增量发布条件。",[3166,3179,3180,3183],{},[24,3181,3182],{},"本次验证范围："," 未启动新的地图或导航任务，未观察运行节点有效参数、坡道点、未知区、动态障碍消失时间或车旁碰撞；窗口、体素和膨胀例子是配置／源码计算。",[3166,3185,3186,3189],{},[24,3187,3188],{},"实物待核实："," odom地面高度基准、上下坡与高低障碍是否过窗口、真实车体轮廓与虚拟参考点、点云字段与TF时间、观察源停更处理、静态图对齐／QoS、未知区策略、动态残留以及控制器实际地图使用。",[3191,3192,3193],"style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":35,"searchDepth":206,"depth":206,"links":3195},[3196],{"id":14,"depth":206,"text":5,"children":3197},[3198,3199],{"id":18,"depth":214,"text":19},{"id":180,"depth":214,"text":180},"0500-1200","2026-09-20","2026-09-20-dao-hang","\u002Fwiki\u002F2026-09-20-dao-hang","导航","md",true,false,{},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1200-local-costmap",{"title":5,"description":35},"wiki\u002F2026-09-20-导航\u002F0500-1200-local_costmap","nK-ORD_s8DvufddMWfWhykWanmkylLI3wTTnqBWajMo",[3214,3221,3227,3233,3239,3245,3251,3257,3263,3269,3275,3281,3287,3293,3299,3305,3311,3316,3322,3327,3333,3338,3344,3350,3355,3357,3363,3369,3375,3381,3387,3393,3399,3405,3411,3417,3423,3429],{"path":3215,"stem":3216,"title":3217,"authors":3218,"date":3201,"chapterOrder":3219,"chapterDepth":3220,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0100-jian-jie","wiki\u002F2026-09-20-导航\u002F0100-简介","简介",[7],"0100",0,{"path":3222,"stem":3223,"title":3224,"authors":3225,"date":3201,"chapterOrder":3226,"chapterDepth":3220,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0200-huan-jing-pei-zhi-yu-yun-xing","wiki\u002F2026-09-20-导航\u002F0200-环境配置与运行","环境配置与运行",[7],"0200",{"path":3228,"stem":3229,"title":3230,"authors":3231,"date":3201,"chapterOrder":3232,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0100-robot-description","wiki\u002F2026-09-20-导航\u002F0300-0100-robot_description","robot_description（机器人模型与关节定义）",[7],"0300-0100",{"path":3234,"stem":3235,"title":3236,"authors":3237,"date":3201,"chapterOrder":3238,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\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":3240,"stem":3241,"title":3242,"authors":3243,"date":3201,"chapterOrder":3244,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\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":3246,"stem":3247,"title":3248,"authors":3249,"date":3201,"chapterOrder":3250,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0400-fang-zhen-shi-jue-you-hua","wiki\u002F2026-09-20-导航\u002F0300-0400-仿真视觉优化","仿真视觉优化（可选）",[7],"0300-0400",{"path":3252,"stem":3253,"title":3254,"authors":3255,"date":3201,"chapterOrder":3256,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0500-tian-jia-di-tu","wiki\u002F2026-09-20-导航\u002F0300-0500-添加地图","添加地图",[7],"0300-0500",{"path":3258,"stem":3259,"title":3260,"authors":3261,"date":3201,"chapterOrder":3262,"chapterDepth":3220,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-ji-qi-ren-mo-xing-yu-fang-zhen","wiki\u002F2026-09-20-导航\u002F0300-机器人模型与仿真","机器人模型与仿真",[7],"0300",{"path":3264,"stem":3265,"title":3266,"authors":3267,"date":3201,"chapterOrder":3268,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\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":3270,"stem":3271,"title":3272,"authors":3273,"date":3201,"chapterOrder":3274,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0200-chuan-kou-tong-xin","wiki\u002F2026-09-20-导航\u002F0400-0200-串口通信","Serial_Comm（串口通信）",[7],"0400-0200",{"path":3276,"stem":3277,"title":3278,"authors":3279,"date":3201,"chapterOrder":3280,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0300-shou-bing-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-0300-手柄控制","Joy（手柄控制）",[7],"0400-0300",{"path":3282,"stem":3283,"title":3284,"authors":3285,"date":3201,"chapterOrder":3286,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\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":3288,"stem":3289,"title":3290,"authors":3291,"date":3201,"chapterOrder":3292,"chapterDepth":3220,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-ying-jian-dui-jie-yu-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-硬件对接与控制","硬件对接与控制",[7],"0400",{"path":3294,"stem":3295,"title":3296,"authors":3297,"date":3201,"chapterOrder":3298,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0100-point-lio","wiki\u002F2026-09-20-导航\u002F0500-0100-Point_LIO","Point_LIO（激光与IMU融合里程计，建图与定位算法）",[7],"0500-0100",{"path":3300,"stem":3301,"title":3302,"authors":3303,"date":3201,"chapterOrder":3304,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\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":3306,"stem":3307,"title":3308,"authors":3309,"date":3201,"chapterOrder":3310,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\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":45,"stem":3312,"title":3313,"authors":3314,"date":3201,"chapterOrder":3315,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"wiki\u002F2026-09-20-导航\u002F0500-0400-terrain_analysis","terrain_analysis（近场地面与障碍高差分析）",[7],"0500-0400",{"path":3317,"stem":3318,"title":3319,"authors":3320,"date":3201,"chapterOrder":3321,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\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":1147,"stem":3323,"title":3324,"authors":3325,"date":3201,"chapterOrder":3326,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"wiki\u002F2026-09-20-导航\u002F0500-0600-fake_vel_transform","fake_vel_transform（云台系速度转换与底盘自旋）",[7],"0500-0600",{"path":3328,"stem":3329,"title":3330,"authors":3331,"date":3201,"chapterOrder":3332,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\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":50,"stem":3334,"title":3335,"authors":3336,"date":3201,"chapterOrder":3337,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"wiki\u002F2026-09-20-导航\u002F0500-0800-pointcloud_to_laserscan","pointcloud_to_laserscan（三维地形点云转二维扫描）",[7],"0500-0800",{"path":3339,"stem":3340,"title":3341,"authors":3342,"date":3201,"chapterOrder":3343,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0900-slam-toolbox","wiki\u002F2026-09-20-导航\u002F0500-0900-slam_toolbox","slam_toolbox（二维地图生成与轨迹优化）",[7],"0500-0900",{"path":3345,"stem":3346,"title":3347,"authors":3348,"date":3201,"chapterOrder":3349,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1000-bt-navigator","wiki\u002F2026-09-20-导航\u002F0500-1000-bt_navigator","bt_navigator（行为树导航任务调度）",[7],"0500-1000",{"path":2576,"stem":3351,"title":3352,"authors":3353,"date":3201,"chapterOrder":3354,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"wiki\u002F2026-09-20-导航\u002F0500-1100-controller_server","controller_server（路径跟踪、进度检查与到达判定）",[7],"0500-1100",{"path":3209,"stem":3211,"title":5,"authors":3356,"date":3201,"chapterOrder":3200,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},[7],{"path":3358,"stem":3359,"title":3360,"authors":3361,"date":3201,"chapterOrder":3362,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1300-global-costmap","wiki\u002F2026-09-20-导航\u002F0500-1300-global_costmap","global_costmap（全局规划代价地图）",[7],"0500-1300",{"path":3364,"stem":3365,"title":3366,"authors":3367,"date":3201,"chapterOrder":3368,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1400-map-server","wiki\u002F2026-09-20-导航\u002F0500-1400-map_server","map_server（已有二维地图加载与发布）",[7],"0500-1400",{"path":3370,"stem":3371,"title":3372,"authors":3373,"date":3201,"chapterOrder":3374,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1500-map-saver","wiki\u002F2026-09-20-导航\u002F0500-1500-map_saver","map_saver（二维栅格地图保存）",[7],"0500-1500",{"path":3376,"stem":3377,"title":3378,"authors":3379,"date":3201,"chapterOrder":3380,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\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":3382,"stem":3383,"title":3384,"authors":3385,"date":3201,"chapterOrder":3386,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1700-smoother-server","wiki\u002F2026-09-20-导航\u002F0500-1700-smoother_server","smoother_server（全局路径平滑）",[7],"0500-1700",{"path":3388,"stem":3389,"title":3390,"authors":3391,"date":3201,"chapterOrder":3392,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1800-behavior-server","wiki\u002F2026-09-20-导航\u002F0500-1800-behavior_server","behavior_server（恢复行为与空闲方向移动）",[7],"0500-1800",{"path":3394,"stem":3395,"title":3396,"authors":3397,"date":3201,"chapterOrder":3398,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1900-waypoint-follower","wiki\u002F2026-09-20-导航\u002F0500-1900-waypoint_follower","waypoint_follower（逐点导航与到点等待）",[7],"0500-1900",{"path":3400,"stem":3401,"title":3402,"authors":3403,"date":3201,"chapterOrder":3404,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-2000-velocity-smoother","wiki\u002F2026-09-20-导航\u002F0500-2000-velocity_smoother","velocity_smoother（速度限幅与加减速平滑）",[7],"0500-2000",{"path":3406,"stem":3407,"title":3408,"authors":3409,"date":3201,"chapterOrder":3410,"chapterDepth":195,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\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":3412,"stem":3413,"title":3414,"authors":3415,"date":3201,"chapterOrder":3416,"chapterDepth":3220,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-dao-hang-can-shu","wiki\u002F2026-09-20-导航\u002F0500-导航参数","导航参数",[7],"0500",{"path":3418,"stem":3419,"title":3420,"authors":3421,"date":3201,"chapterOrder":3422,"chapterDepth":3220,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0600-kai-fa-wen-ti-yu-pai-cha","wiki\u002F2026-09-20-导航\u002F0600-开发问题与排查","开发问题与排查",[7],"0600",{"path":3424,"stem":3425,"title":3426,"authors":3427,"date":3201,"chapterOrder":3428,"chapterDepth":3220,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3207},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0700-jue-ce","wiki\u002F2026-09-20-导航\u002F0700-决策","决策",[7],"0700",{"path":3203,"stem":3430,"title":3431,"authors":3432,"date":3201,"chapterOrder":3433,"chapterDepth":3220,"docKey":3202,"docRoot":3203,"docTitle":3204,"isWikiDoc":3206,"isWikiIndex":3206},"wiki\u002F2026-09-20-导航\u002Findex","北极熊导航复现日志",[7],null,[3435,3437,3440,3443],{"name":7,"image":3436},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":3438,"image":3439},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":3441,"image":3442},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":3444,"image":3445},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431906371]