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