[{"data":1,"prerenderedAt":1753},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1600-planner-server":3,"wiki-doc-items-2026-09-20-dao-hang":1520,"wiki:author-members":1741},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":191,"chapterOrder":1507,"date":1508,"description":38,"docKey":1509,"docRoot":1510,"docTitle":1511,"extension":1512,"isWikiDoc":1513,"isWikiIndex":1514,"meta":1515,"navigation":1513,"path":1516,"seo":1517,"stem":1518,"wikiDepth":191,"__hash__":1519},"wiki\u002Fwiki\u002F2026-09-20-导航\u002F0500-1600-planner_server.md","planner_server（Theta*全局路径规划）",[7],"董佳辉",{"type":9,"value":10,"toc":1501},"minimark",[11,15,20,31,42,55,155,174,177,180,313,318,322,447,450,455,468,471,474,546,553,557,560,572,576,579,757,760,764,777,780,788,792,795,801,813,816,889,892,895,901,905,908,914,931,986,989,992,995,1040,1048,1052,1055,1058,1139,1143,1151,1213,1221,1231,1234,1238,1241,1252,1255,1259,1262,1270,1273,1276,1289,1292,1295,1388,1400,1404,1466,1469,1497],[12,13,5],"h2",{"id":14},"planner_servertheta全局路径规划",[16,17,19],"h3",{"id":18},"实车先看规划什么时候运行怎样在距离与障碍代价之间取舍","实车先看：规划什么时候运行，怎样在距离与障碍代价之间取舍",[21,22,23,30],"p",{},[24,25,26,29],"em",{},[24,27,28],{},"当前planner_server使用GridBased这个插件ID加载Theta","，在global_costmap中从起点搜索到目标的二维路径。","* GridBased是工程指定的名称，实际算法由plugin字符串决定；它不表示此节点必定运行NavFn或普通A*。",[32,33,39],"pre",{"className":34,"code":36,"language":37,"meta":38},[35],"language-text","BT：ComputePathToPose／ComputePathThroughPoses，planner_id=GridBased\n    → planner_server：等待全局图current、取得起点、转换起终点到全局坐标\n    → GridBased：ThetaStarPlanner\n        ├─ 读内存中的global_costmap，当前坐标系map\n        ├─ 4／8邻居展开 + 视线检查，尝试连接更远的父节点\n        ├─ 路径长度费用 + 地图经过费用 + 到目标的启发估计\n        └─ 回溯折线路径，按实际地图格距补充路径点\n    → Action结果path，另向plan话题发布可视化路径\n    → FollowPath：当前PID控制器跟踪，输出速度\n","text","",[40,41,36],"code",{"__ignoreMap":38},[21,43,44,45,50,51],{},"规划器直接使用它内部创建的global_costmap对象，不靠订阅2 Hz的costmap图片规划。它输出位置路径，不直接发底盘速度，也不规划整车爬坡能力或动态障碍的未来运动。",[46,47,49],"a",{"href":48},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1300-global-costmap","全局图与当前输入","、",[46,52,54],{"href":53},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1100-controller-server","路径执行",[56,57,58,74],"table",{},[59,60,61],"thead",{},[62,63,64,68,71],"tr",{},[65,66,67],"th",{},"实车上看到的现象",[65,69,70],{},"先核对什么",[65,72,73],{},"当前配置怎样理解",[75,76,77,89,100,111,122,133,144],"tbody",{},[62,78,79,83,86],{},[80,81,82],"td",{},"以为10.0就是每秒重规划十次",[80,84,85],{},"expected_planner_frequency与BT RateController",[80,87,88],{},"10.0只给成功规划过程设置100 ms耗时警告门槛；当前默认BT规划节奏目标约3 Hz",[62,90,91,94,97],{},[80,92,93],{},"改w_heuristic_cost，路径和耗时看不出变化",[80,95,96],{},"插件是否读取该YAML键",[80,98,99],{},"1.1.20未读取该配置键；内部启发权重按min(w_euc_cost,1.0)初始化",[62,101,102,105,108],{},[80,103,104],{},"以为w_traversal_cost=10代表离墙10 m",[80,106,107],{},"经过费用公式与膨胀层",[80,109,110],{},"10是无量纲权重，惩罚经过高代价格；不是距离、速度或硬安全间隔",[62,112,113,116,119],{},[80,114,115],{},"从8改4，以为车只能走四个方向",[80,117,118],{},"邻居展开与视线连接",[80,120,121],{},"4／8选择搜索邻居，Theta*仍会做直线连接；不限制底盘只能四向或八向运动",[62,123,124,127,130],{},[80,125,126],{},"路径经过灰色未知区",[80,128,129],{},"全局图未知身份与allow_unknown",[80,131,132],{},"当前未写allow_unknown，缺省True；常规搜索可经过255未知格",[62,134,135,138,141],{},[80,136,137],{},"明明有空路却规划失败",[80,139,140],{},"起终点是否在图内、是否落在≥252代价格、TF与地图current",[80,142,143],{},"当前Theta*没有NavFn式目标tolerance参数，不自动找目标附近的另一个空闲点",[62,145,146,149,152],{},[80,147,148],{},"开了smoother_server，以为路径已经平滑",[80,150,151],{},"实际BT是否调用SmoothPath",[80,153,154],{},"当前两棵默认树未调用SmoothPath；Theta*的线性补点不是曲率连续平滑",[21,156,157,158,162,163,50,169],{},"本次安装的nav2_planner、nav2_theta_star_planner及nav2_costmap_2d均为",[159,160,161],"strong",{},"1.1.20","。Theta*算法和插件封装安装头文件与该版本一致，插件XML确实注册nav2_theta_star_planner\u002FThetaStarPlanner，库文件存在；以下按这套实现说明。",[46,164,168],{"href":165,"rel":166},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_theta_star_planner\u002Fsrc\u002Ftheta_star_planner.cpp",[167],"nofollow","插件封装",[46,170,173],{"href":171,"rel":172},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_theta_star_planner\u002Finclude\u002Fnav2_theta_star_planner\u002Ftheta_star.hpp",[167],"算法及费用定义",[16,175,176],{"id":176},"参数",[21,178,179],{},"下面保留发送的完整8项参数和原注释。当前源码／安装副本的reality段与此一致；simulation段只有use_sim_time=True不同。",[32,181,185],{"className":182,"code":183,"language":184,"meta":38,"style":38},"language-yaml shiki shiki-themes github-light github-dark","planner_server:\n  ros__parameters:\n    use_sim_time: False\n    expected_planner_frequency: 10.0\n    planner_plugins: [\"GridBased\"]\n    GridBased:\n      plugin: \"nav2_theta_star_planner\u002FThetaStarPlanner\" # In Iron and older versions, \"\u002F\" was used instead of \"::\"\n      how_many_corners: 8\n      w_euc_cost: 1.0\n      w_traversal_cost: 10.0\n      w_heuristic_cost: 1.0\n","yaml",[40,186,187,200,208,221,232,248,256,271,282,293,303],{"__ignoreMap":38},[188,189,192,196],"span",{"class":190,"line":191},"line",1,[188,193,195],{"class":194},"s9eBZ","planner_server",[188,197,199],{"class":198},"sVt8B",":\n",[188,201,203,206],{"class":190,"line":202},2,[188,204,205],{"class":194},"  ros__parameters",[188,207,199],{"class":198},[188,209,211,214,217],{"class":190,"line":210},3,[188,212,213],{"class":194},"    use_sim_time",[188,215,216],{"class":198},": ",[188,218,220],{"class":219},"sj4cs","False\n",[188,222,224,227,229],{"class":190,"line":223},4,[188,225,226],{"class":194},"    expected_planner_frequency",[188,228,216],{"class":198},[188,230,231],{"class":219},"10.0\n",[188,233,235,238,241,245],{"class":190,"line":234},5,[188,236,237],{"class":194},"    planner_plugins",[188,239,240],{"class":198},": [",[188,242,244],{"class":243},"sZZnC","\"GridBased\"",[188,246,247],{"class":198},"]\n",[188,249,251,254],{"class":190,"line":250},6,[188,252,253],{"class":194},"    GridBased",[188,255,199],{"class":198},[188,257,259,262,264,267],{"class":190,"line":258},7,[188,260,261],{"class":194},"      plugin",[188,263,216],{"class":198},[188,265,266],{"class":243},"\"nav2_theta_star_planner\u002FThetaStarPlanner\"",[188,268,270],{"class":269},"sJ8bj"," # In Iron and older versions, \"\u002F\" was used instead of \"::\"\n",[188,272,274,277,279],{"class":190,"line":273},8,[188,275,276],{"class":194},"      how_many_corners",[188,278,216],{"class":198},[188,280,281],{"class":219},"8\n",[188,283,285,288,290],{"class":190,"line":284},9,[188,286,287],{"class":194},"      w_euc_cost",[188,289,216],{"class":198},[188,291,292],{"class":219},"1.0\n",[188,294,296,299,301],{"class":190,"line":295},10,[188,297,298],{"class":194},"      w_traversal_cost",[188,300,216],{"class":198},[188,302,231],{"class":219},[188,304,306,309,311],{"class":190,"line":305},11,[188,307,308],{"class":194},"      w_heuristic_cost",[188,310,216],{"class":198},[188,312,292],{"class":219},[314,315,317],"h4",{"id":316},"ros__parameters服务器时钟耗时检查与插件id","ros__parameters（服务器时钟、耗时检查与插件ID）",[319,320,321],"h5",{"id":321},"参数表",[56,323,324,352],{},[59,325,326],{},[62,327,328,331,334,337,340,343,346,349],{},[65,329,330],{},"参数名",[65,332,333],{},"当前值",[65,335,336],{},"单位",[65,338,339],{},"实车处理建议",[65,341,342],{},"作用",[65,344,345],{},"调大效果",[65,347,348],{},"调小效果",[65,350,351],{},"生效条件／备注",[75,353,354,386,418],{},[62,355,356,361,367,370,375,378,381,383],{},[80,357,358],{},[40,359,360],{},"use_sim_time",[80,362,363,366],{},[40,364,365],{},"False","；仿真True",[80,368,369],{},"不适用，布尔",[80,371,372],{},[159,373,374],{},"上实物前必须核对并正确配置",[80,376,377],{},"选择服务器ROS时钟，用于请求耗时、结果时间与路径时间戳",[80,379,380],{},"不适用",[80,382,380],{},[80,384,385],{},"navigation_launch重写已有键；需与全局地图、目标和TF时间域匹配；插件另外有steady_clock耗时调试日志",[62,387,388,393,398,401,406,409,412,415],{},[80,389,390],{},[40,391,392],{},"expected_planner_frequency",[80,394,395],{},[40,396,397],{},"10.0",[80,399,400],{},"Hz，期望完成频率的倒数用于耗时警告",[80,402,403],{},[159,404,405],{},"通常保持当前值，不作为优先调试项",[80,407,408],{},"将成功规划过程的告警时长设为1／10=0.1 s",[80,410,411],{},"警告门槛变短、更易提示超时；不主动加快或增加规划",[80,413,414],{},"正值变小时警告门槛变长；0关闭这项时长警告",[80,416,417],{},"不是规划定时器、Action截止时间或硬中断；成功过程超门槛仍可返回路径；失败／卡在等待时不会靠它自动终止",[62,419,420,425,430,433,437,440,442,444],{},[80,421,422],{},[40,423,424],{},"planner_plugins",[80,426,427],{},[40,428,429],{},"[\"GridBased\"]",[80,431,432],{},"不适用，插件ID列表",[80,434,435],{},[159,436,374],{},[80,438,439],{},"指定服务器加载哪些规划器配置分组",[80,441,380],{},[80,443,380],{},[80,445,446],{},"当前BT明确请求GridBased，下方同名分组提供类和参数；新增ID不会自动并行规划或自动选最优插件",[319,448,449],{"id":449},"参数详解",[451,452,454],"h6",{"id":453},"expected_planner_frequency100-ms是警告门槛","expected_planner_frequency（100 ms是警告门槛）",[21,456,457,458,50,463],{},"服务器在configure时读取正值并计算max_planner_duration=1／expected_planner_frequency。当前为0.1 s；完成有效路径、准备结果后，若测得时长超过它，打印Planner loop missed its desired rate警告，然后仍按成功返回。值为0或负值时将门槛置0，关闭这项完成后检查；需要关闭时可明确设0，不能把负值当正常频率。",[46,459,462],{"href":460,"rel":461},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_planner\u002Fsrc\u002Fplanner_server.cpp#L133",[167],"门槛初始化",[46,464,467],{"href":465,"rel":466},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_planner\u002Fsrc\u002Fplanner_server.cpp#L501",[167],"完成后的警告",[21,469,470],{},"计时从进入规划处理、取得服务器参数锁后开始，使用节点now；包括之后等待costmap current、取得／转换位姿、插件搜索及准备／发布路径的耗时，不只是Theta*展开节点的时间。ComputePathThroughPoses检查的是本次多个目标分段规划的总耗时，不是每段各有100 ms独立限时。",[21,472,473],{},"插件内部另用steady_clock打印createPlan耗时，其范围和时钟与服务器planning_time不同。仿真暂停或时间跳变时，不能把ROS时间结果直接当墙钟实耗时，也不能据两种日志不同就认定算法计时错误。",[56,475,476,489],{},[59,477,478],{},[62,479,480,483,486],{},[65,481,482],{},"当前时间设置",[65,484,485],{},"控制什么",[65,487,488],{},"理想时间尺度",[75,490,491,502,513,524,535],{},[62,492,493,496,499],{},[80,494,495],{},"BT bt_loop_duration=10 ms",[80,497,498],{},"行为树tick",[80,500,501],{},"约100次／s；不等于100次规划／s",[62,503,504,507,510],{},[80,505,506],{},"默认BT RateController hz=3.0",[80,508,509],{},"发起新一轮规划子树的节奏",[80,511,512],{},"约333 ms；运行中Action、恢复等还会影响实际节奏",[62,514,515,518,521],{},[80,516,517],{},"global_costmap.update_frequency=5.0",[80,519,520],{},"内部地图合成",[80,522,523],{},"目标200 ms／轮",[62,525,526,529,532],{},[80,527,528],{},"本块expected_planner_frequency=10.0",[80,530,531],{},"完成规划过程的警告门槛",[80,533,534],{},"100 ms；不生成周期请求",[62,536,537,540,543],{},[80,538,539],{},"controller_frequency=20.0",[80,541,542],{},"跟踪当前路径并输出控制",[80,544,545],{},"目标50 ms／轮",[21,547,548,549],{},"把10改20，只把警告门槛从100 ms变50 ms；不会让BT从3 Hz变20 Hz，也不会使地图从5 Hz变20 Hz。需要改变实际规划节奏时，应查看当前BT及系统耗时。",[46,550,552],{"href":551},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1000-bt-navigator","行为树调度",[451,554,556],{"id":555},"planner_pluginsid和算法类名各有职责","planner_plugins（ID和算法类名各有职责）",[21,558,559],{},"当前服务器按GridBased读取GridBased.plugin，构造ThetaStarPlanner并配置。两棵默认树的ComputePathToPose／ComputePathThroughPoses都显式写planner_id=\"GridBased\"；若改ID，需要同步列表、分组和请求来源。单改类名而保留ID，可以更换该ID对应算法，但参数也须按新实现核对。",[21,561,562,563,566,567],{},"1.1.20只有一个插件且请求ID为空时，服务器可警告并使用唯一插件；",[159,564,565],{},"显式传入错误非空ID不会走这个兜底","，将得到空路径并失败。当前BT显式ID正确，不依赖兜底。",[46,568,571],{"href":569,"rel":570},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_planner\u002Fsrc\u002Fplanner_server.cpp#L521",[167],"按ID选择规划器",[314,573,575],{"id":574},"gridbasedtheta邻居与费用权重","GridBased（Theta*邻居与费用权重）",[319,577,321],{"id":578},"参数表-1",[56,580,581,601],{},[59,582,583],{},[62,584,585,587,589,591,593,595,597,599],{},[65,586,330],{},[65,588,333],{},[65,590,336],{},[65,592,339],{},[65,594,342],{},[65,596,345],{},[65,598,348],{},[65,600,351],{},[75,602,603,632,663,695,726],{},[62,604,605,610,615,618,622,625,627,629],{},[80,606,607],{},[40,608,609],{},"plugin",[80,611,612],{},[40,613,614],{},"nav2_theta_star_planner\u002FThetaStarPlanner",[80,616,617],{},"不适用，插件查找名称",[80,619,620],{},[159,621,374],{},[80,623,624],{},"为GridBased加载Theta*全局规划器",[80,626,380],{},[80,628,380],{},[80,630,631],{},"当前1.1.20安装XML注册此带斜杠名称，与原注释相符；C++类名为双冒号写法，不能仅按新版本示例随意替换配置",[62,633,634,639,644,647,651,654,657,660],{},[80,635,636],{},[40,637,638],{},"how_many_corners",[80,640,641],{},[40,642,643],{},"8",[80,645,646],{},"邻居方向数，合法选项4或8",[80,648,649],{},[159,650,405],{},[80,652,653],{},"决定每次搜索展开的相邻格方向",[80,655,656],{},"4→8加入四个对角邻居，每次可检查更多方向；不保证总搜索耗时更少或更多",[80,658,659],{},"8→4只展开上下左右，搜索／路径可能变化，仍可做视线捷径连接",[80,661,662],{},"不是转弯半径、路径折点数或车体角数；初始化非法值会回退8，动态回调却不做同样校验",[62,664,665,670,675,678,683,686,689,692],{},[80,666,667],{},[40,668,669],{},"w_euc_cost",[80,671,672],{},[40,673,674],{},"1.0",[80,676,677],{},"无量纲权重；乘的是格索引距离",[80,679,680],{},[159,681,682],{},"实物运行时重点观察，有问题再针对性调整",[80,684,685],{},"惩罚路径的欧氏长度，相对地图费用形成取舍",[80,687,688],{},"同样地图费用下更重长度，通常更偏向较短路线；启发相对关系也可能改变",[80,690,691],{},"地图费用相对占比提高，可能接受更长但更低代价路线",[80,693,694],{},"应使用有限正值；距离按格数而非米；初始化还决定内部启发权重，动态修改不会同步重算它",[62,696,697,702,707,710,714,717,720,723],{},[80,698,699],{},[40,700,701],{},"w_traversal_cost",[80,703,704,706],{},[40,705,397],{},"；插件默认2.0",[80,708,709],{},"无量纲，经过地图的费用权重",[80,711,712],{},[159,713,682],{},[80,715,716],{},"放大经过高代价格的费用，当前比插件默认更重此项",[80,718,719],{},"更强惩罚高代价，也放大空闲格的非零基础费用；可能改变绕行取舍",[80,721,722],{},"地图经过费用下降，长度项相对更重要，路径可能更贴近高代价区域",[80,724,725],{},"0可使该费用项为0，但不放行硬禁止格；不能恢复漏掉的障碍，不等于10 m安全距离",[62,727,728,733,738,741,746,749,752,754],{},[80,729,730],{},[40,731,732],{},"w_heuristic_cost",[80,734,735,737],{},[40,736,674],{},"，但此YAML键未读取",[80,739,740],{},"无量纲；当前无独立配置效果",[80,742,743],{},[159,744,745],{},"当前运行不使用这个参数，暂不调整",[80,747,748],{},"原配置意图设置到目标的启发估计权重；当前插件自行计算内部权重",[80,750,751],{},"单改此YAML值无当前计算效果",[80,753,751],{},[80,755,756],{},"当前内部值=min(w_euc_cost,1.0)=1.0；内部启发项实际参与搜索，不是把整个启发项关掉",[319,758,449],{"id":759},"参数详解-1",[451,761,763],{"id":762},"how_many_corners48邻居不限制最终连线方向","how_many_corners（4／8邻居不限制最终连线方向）",[21,765,766,767,50,772],{},"算法的moves数组先列上下左右四个邻居，再列四个对角邻居；当前8全部参与展开。同时Theta*会检查当前节点与更远父节点之间的视线，如果可连通且费用更低，就改变父关系形成更直接的折线。因此4并不保证最终路径只含水平／竖直段，8也不是只允许八种最终航向。",[46,768,771],{"href":769,"rel":770},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_theta_star_planner\u002Finclude\u002Fnav2_theta_star_planner\u002Ftheta_star.hpp#L139",[167],"邻居数组",[46,773,776],{"href":774,"rel":775},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_theta_star_planner\u002Fsrc\u002Ftheta_star.cpp#L84",[167],"视线连接与邻居展开",[21,778,779],{},"8每次最多检查更多邻居，但能否更快到目标、打开多少节点，取决于地图和费用；不能直接说“8一定更快”或“4一定更省总计算”。当前8是合法默认，初次测试通常保持；要比较，应在相同地图、起终点和有效分辨率下看实际路径、耗时与nodes_opened。",[21,781,782,783],{},"configure阶段只接受4或8，否则成员回退8并警告；ROS参数列表仍可能显示原非法值。动态回调直接把整数写入成员，没有同样校验，超过8还可能让展开循环越过固定数组。因此只在合法4／8间选择，不用任意整数试探；本文未运行非法配置。",[46,784,787],{"href":785,"rel":786},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_theta_star_planner\u002Fsrc\u002Ftheta_star_planner.cpp#L39",[167],"初始化检查与动态分支",[451,789,791],{"id":790},"w_euc_cost与w_traversal_cost长度与经过费用怎样相加","w_euc_cost与w_traversal_cost（长度与经过费用怎样相加）",[21,793,794],{},"算法为候选节点使用f=g+h排序。g累计已经走过的长度和地图经过费用，h估计当前位置到目标的距离；相邻一步的费用可按以下式子理解，视线捷径则按其实际检查的格子累计经过费用：",[32,796,799],{"className":797,"code":798,"language":37,"meta":38},[35],"长度费用 = w_euc_cost × hypot(相邻／连接端点的格索引差)\n普通格的转换费用 c_scaled = 26 + 0.9 × 内部代价值c\n单格经过费用 = w_traversal_cost × (c_scaled \u002F 252)²\nh = 内部w_heuristic_cost × hypot(当前格到目标格的索引差)\n",[40,800,798],{"__ignoreMap":38},[21,802,803,804,807,808],{},"源码真正的偏置是",[159,805,806],{},"26","，不能照附近注释中的25代替。距离使用格索引差：横／纵一步为1，对角一步为√2；在有效格距0.05 m时，平面移动1 m相当于20格距离，而不是直接给长度费用乘1。实际全局格距由静态地图决定。",[46,809,812],{"href":810,"rel":811},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_theta_star_planner\u002Finclude\u002Fnav2_theta_star_planner\u002Ftheta_star.hpp#L204",[167],"费用函数",[21,814,815],{},"只为说明当前w_traversal_cost=10的公式，计算普通格和邻居扩展的未知格费用如下；不代表实车地图读数或整条路径总分：",[56,817,818,832],{},[59,819,820],{},[62,821,822,826,829],{},[65,823,825],{"align":824},"right","内部代价值c",[65,827,828],{"align":824},"当前单格经过费用，约值",[65,830,831],{},"含义",[75,833,834,845,856,867,878],{},[62,835,836,839,842],{},[80,837,838],{"align":824},"0",[80,840,841],{"align":824},"0.10645",[80,843,844],{},"空闲格仍有非零基础经过费用",[62,846,847,850,853],{},[80,848,849],{"align":824},"100",[80,851,852],{"align":824},"2.11892",[80,854,855],{},"可用的较低软代价值",[62,857,858,861,864],{},[80,859,860],{"align":824},"200",[80,862,863],{"align":824},"6.68241",[80,865,866],{},"更高软代价，经过费用明显增加",[62,868,869,872,875],{},[80,870,871],{"align":824},"251",[80,873,874],{"align":824},"9.99207",[80,876,877],{},"常规搜索可用普通格的高端",[62,879,880,883,886],{},[80,881,882],{"align":824},"255，且allow_unknown=True",[80,884,885],{"align":824},"10.27971",[80,887,888],{},"邻居扩展中的未知格；视线分支另按253转换费用处理",[21,890,891],{},"例如横向走入c=200格，当前相邻g增量约1+6.68241；走入空闲格约1+0.10645。只把w_traversal_cost从10改20，会将上述经过费用翻倍，但横向长度项仍为1。直线捷径的检查／计费流程另有视线分支，不能把这张单格表简单乘路径点数量作为实际总费用。",[21,893,894],{},"在地图已经正确表达障碍和膨胀的前提下，提高经过权重通常更重绕开高代价格，提高长度权重通常更重少绕路；二者是相对取舍，不保证某次路径长度、耗时或最小离墙距离单调变化。空闲格费用也不为0，绕得更长同样有经过费用，不是只对彩色格子收费。",[21,896,897,898],{},"当前全局图cost_scaling_factor=4、inflation_radius=0.7先决定代价场，w_traversal_cost=10再决定这套代价怎样进入搜索。系数4越大，外围代价下降越快；此时单靠权重10不能说明一定离墙更远。应一起看真实轮廓、有效格距、膨胀和路径。",[46,899,900],{"href":48},"膨胀参数与Theta*",[451,902,904],{"id":903},"w_heuristic_cost外部配置未使用内部h仍参与","w_heuristic_cost（外部配置未使用，内部h仍参与）",[21,906,907],{},"当前configure没有声明或读取GridBased.w_heuristic_cost，也没有在动态回调处理它；代码直接按下面赋值：",[32,909,912],{"className":910,"code":911,"language":37,"meta":38},[35],"内部w_heuristic_cost = w_euc_cost \u003C 1.0 ? w_euc_cost : 1.0\n",[40,913,911],{"__ignoreMap":38},[21,915,916,917,920,921,50,926],{},"所以当前内部值确实是1，但它来自w_euc_cost=1，不来自这一行YAML。",[159,918,919],{},"“数值碰巧一样”不能作为参数已生效的证据。"," 算法getHCost仍读取内部成员计算h并参与f排序，不应把此配置无效误解成没有启发搜索。",[46,922,925],{"href":923,"rel":924},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_theta_star_planner\u002Fsrc\u002Ftheta_star_planner.cpp#L60",[167],"内部赋值",[46,927,930],{"href":928,"rel":929},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_theta_star_planner\u002Finclude\u002Fnav2_theta_star_planner\u002Ftheta_star.hpp#L241",[167],"h计算",[56,932,933,946],{},[59,934,935],{},[62,936,937,940,943],{},[65,938,939],{"align":824},"重新配置时的w_euc_cost",[65,941,942],{"align":824},"YAML中w_heuristic_cost的示例值",[65,944,945],{"align":824},"真正初始化的内部启发权重",[75,947,948,957,967,976],{},[62,949,950,953,955],{},[80,951,952],{"align":824},"1.0，当前",[80,954,674],{"align":824},[80,956,674],{"align":824},[62,958,959,961,964],{},[80,960,674],{"align":824},[80,962,963],{"align":824},"20.0",[80,965,966],{"align":824},"1.0，YAML值不参与",[62,968,969,972,974],{},[80,970,971],{"align":824},"0.5",[80,973,674],{"align":824},[80,975,971],{"align":824},[62,977,978,981,984],{},[80,979,980],{"align":824},"2.0",[80,982,983],{"align":824},"0.3",[80,985,674],{"align":824},[21,987,988],{},"这些是源码分支计算，不是本次运行参数或路径对比。当前无需通过反复调该YAML键试验快慢；如希望独立暴露启发权重，需要改变插件实现并重新核对算法条件，不能只新增参数。本文保留原值，没有修改插件源码。",[451,990,991],{"id":991},"动态改w_euc_cost不会重新计算内部启发权重",[21,993,994],{},"初始化会设置w_euc_cost和对应h权重；动态回调只更新w_euc_cost成员，没有执行上述min公式。因此同一个表面配置可能因“重启初始化”或“运行中改值”得到不同内部组合：",[56,996,997,1010],{},[59,998,999],{},[62,1000,1001,1004,1007],{},[65,1002,1003],{},"操作",[65,1005,1006],{"align":824},"长度权重",[65,1008,1009],{"align":824},"内部启发权重",[75,1011,1012,1021,1031],{},[62,1013,1014,1017,1019],{},[80,1015,1016],{},"以当前1.0启动",[80,1018,674],{"align":824},[80,1020,674],{"align":824},[62,1022,1023,1026,1028],{},[80,1024,1025],{},"此后动态把w_euc_cost改为0.5",[80,1027,971],{"align":824},[80,1029,1030],{"align":824},"仍为1.0",[62,1032,1033,1036,1038],{},[80,1034,1035],{},"按0.5重新配置／重启",[80,1037,971],{"align":824},[80,1039,971],{"align":824},[21,1041,1042,1043],{},"动态降低到0.5后，h与长度费用的关系也与启动时的设计不同，不能继续沿用重启后的推断来解释路径和搜索最优性。比较参数组合时应使用一致的初始化方式，尤其降低w_euc_cost时，优先重新配置／重启并核对有效行为。动态修改GridBased.w_heuristic_cost也不能补上缺少的成员更新。",[46,1044,1047],{"href":1045,"rel":1046},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_theta_star_planner\u002Fsrc\u002Ftheta_star_planner.cpp#L216",[167],"当前动态回调",[314,1049,1051],{"id":1050},"相关源码默认项原yaml未显式配置","相关源码默认项（原YAML未显式配置）",[319,1053,321],{"id":1054},"参数表-2",[21,1056,1057],{},"这两项是当前Theta*插件实际支持的默认参数；本次没有向工程YAML追加。",[56,1059,1060,1080],{},[59,1061,1062],{},[62,1063,1064,1066,1068,1070,1072,1074,1076,1078],{},[65,1065,330],{},[65,1067,333],{},[65,1069,336],{},[65,1071,339],{},[65,1073,342],{},[65,1075,345],{},[65,1077,348],{},[65,1079,351],{},[75,1081,1082,1112],{},[62,1083,1084,1089,1095,1097,1102,1105,1107,1109],{},[80,1085,1086],{},[40,1087,1088],{},"GridBased.allow_unknown",[80,1090,1091,1094],{},[40,1092,1093],{},"True","，插件默认",[80,1096,369],{},[80,1098,1099],{},[159,1100,1101],{},"根据实际功能需求开启或设置",[80,1103,1104],{},"是否允许未知255格参与常规搜索及视线检查",[80,1106,380],{},[80,1108,380],{},[80,1110,1111],{},"True仍计经过费用，False常规搜索拒绝未知；前提是地图仍保留未知身份；同格起终点有不同快捷分支",[62,1113,1114,1119,1123,1125,1129,1132,1134,1136],{},[80,1115,1116],{},[40,1117,1118],{},"GridBased.use_final_approach_orientation",[80,1120,1121,1094],{},[40,1122,365],{},[80,1124,369],{},[80,1126,1127],{},[159,1128,1101],{},[80,1130,1131],{},"决定返回路径最后一姿态使用目标方向还是末段接近方向",[80,1133,380],{},[80,1135,380],{},[80,1137,1138],{},"False通常将最后姿态设为请求目标四元数；True多点路径用末段方向，单点／同格特殊情况用起点方向；不直接控制底盘转动",[319,1140,1142],{"id":1141},"未知区不可用代价与起终点条件","未知区、不可用代价与起终点条件",[21,1144,1145,1146],{},"当前常规搜索只放行内部代价c\u003C252的普通格，255另按allow_unknown判断；因此252、253、254普通格都不可用，不能把“不是254致命障碍”理解成一定可规划经过。视线分支对转换费用采用\u003C252比较，普通整数格对应同样的0～251通过范围；放行未知时用253作为该分支的转换费用进行计费。",[46,1147,1150],{"href":1148,"rel":1149},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_theta_star_planner\u002Finclude\u002Fnav2_theta_star_planner\u002Ftheta_star.hpp#L96",[167],"普通格与未知格检查",[56,1152,1153,1163],{},[59,1154,1155],{},[62,1156,1157,1160],{},[65,1158,1159],{},"当前全局图中的情况",[65,1161,1162],{},"当前常规Theta*行为",[75,1164,1165,1173,1181,1189,1197,1205],{},[62,1166,1167,1170],{},[80,1168,1169],{},"0～251，图内",[80,1171,1172],{},"可参与搜索，按对应费用计分",[62,1174,1175,1178],{},[80,1176,1177],{},"252～254",[80,1179,1180],{},"拒绝；起点或目标落在这些格也会使常规规划失败",[62,1182,1183,1186],{},[80,1184,1185],{},"255，allow_unknown=True",[80,1187,1188],{},"可参与搜索，费用较高；不是保证永不选择未知路线",[62,1190,1191,1194],{},[80,1192,1193],{},"255，allow_unknown=False",[80,1195,1196],{},"拒绝",[62,1198,1199,1202],{},[80,1200,1201],{},"起点或目标在地图外",[80,1203,1204],{},"插件返回空路径，服务器失败",[62,1206,1207,1210],{},[80,1208,1209],{},"目标所在格不可用、附近有空格",[80,1211,1212],{},"当前没有NavFn式tolerance寻找邻近替代目标",[21,1214,1215,1216],{},"同一格的起终点另走快捷分支：此版本只显式拒绝254，否则返回一个位于起点的姿态；没有执行上述常规allow_unknown／252～253检查。因此allow_unknown=False不能描述成插件所有分支都绝对不返回未知格路径。这里只记录源码边界，没有运行这个特殊请求。",[46,1217,1220],{"href":1218,"rel":1219},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_theta_star_planner\u002Fsrc\u002Ftheta_star_planner.cpp#L114",[167],"同格快捷分支",[21,1222,1223,1224,50,1227],{},"实物global_costmap顶层track_unknown_space=True，仿真顶层未写而默认False；此外当前三态地图保存／加载还有灰205在free=0.25下变空闲的问题。若未知已被上游改成0，此处allow_unknown=False也无法恢复它。",[46,1225,1226],{"href":48},"全局未知表示",[46,1228,1230],{"href":1229},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1500-map-saver","已验证的地图读写条件",[21,1232,1233],{},"通用Humble笔记中的GridBased示例使用NavFn，tolerance、use_astar等参数不能直接套给当前Theta*。当前插件以起终点落格进行搜索，常规回溯得到网格中心位置，再线性补点；它没有独立目标位置容差参数。controller_server的xy_goal_tolerance=0.15则是执行到达判定，不能用来让本插件自动替换被占用的目标格。",[319,1235,1237],{"id":1236},"最后朝向路径补点与当前pid","最后朝向、路径补点与当前PID",[21,1239,1240],{},"当前use_final_approach_orientation=False时，常规路径最后姿态使用请求目标朝向；True时多点路径用最后两点的atan2方向，特定单点情况使用起点方向。这个开关修改返回路径的最后四元数，不修改机器人本体姿态，也不自动发角速度。",[21,1242,1243,1244,50,1249],{},"本版本linearInterpolation主要填写中间路径点的x、y，没有为每个中间姿态生成沿路径的有效朝向四元数；不能把路径中每个orientation当成已经规划好的车辆航向。当前PID的enable_rotation=False、use_rotate_to_heading=False，goal_checker.yaw_goal_tolerance=6.28，也不会因末端朝向设置就要求最终转到指定yaw。",[46,1245,1248],{"href":1246,"rel":1247},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_theta_star_planner\u002Fsrc\u002Ftheta_star_planner.cpp#L140",[167],"末端方向与补点",[46,1250,1251],{"href":53},"当前控制器条件",[21,1253,1254],{},"补点使用global_costmap的有效格距，不能固定认定就是YAML初始0.05。它在Theta*折线段上补位置点，没有自动生成曲率连续曲线、转弯半径约束或速度轨迹；与下一块smoother_server的服务是不同步骤。当前两棵默认XML均未调用SmoothPath，单有节点或BT库并不证明平滑已经运行。",[314,1256,1258],{"id":1257},"请求等待路径验证动态参数与本次核对","请求等待、路径验证、动态参数与本次核对",[319,1260,1261],{"id":1261},"地图等待与取消的边界",[21,1263,1264,1265],{},"服务器规划前调用waitForCostmap，以100 Hz检查global_costmap是否current；这不是让地图以100 Hz更新。1.1.20该等待循环没有本块可配置的超时，也没有在循环内检查本次Action取消，Theta*搜索循环同样没有取消检查。expected_planner_frequency的100 ms只在成功完成后检查，不能终止持续等待或搜索。",[46,1266,1269],{"href":1267,"rel":1268},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_planner\u002Fsrc\u002Fplanner_server.cpp#L272",[167],"等待实现",[21,1271,1272],{},"若请求长时间无结果，应先查静态地图、TF和各层current，再看搜索耗时；把expected_planner_frequency调小只是放宽警告门槛。反过来，current=True也不证明感知持续新鲜：当前地形来源缺省expected_update_rate=0，可以继续使用最后一份观测，详见全局图章节。",[319,1274,1275],{"id":1275},"返回非空路径与is_path_valid不是同一检查",[21,1277,1278,1279,50,1284],{},"服务器取得插件路径后，validatePath在此版本主要检查是否非空；不是再次完整执行每个路径段的车体扫掠碰撞验证。另有is_path_valid服务检查已有路径的剩余点；当前圆半径模式下，拒绝253／254及地图外点，但没有复用Theta*的252门槛和allow_unknown策略，不能把二者当成一致的通行判据。",[46,1280,1283],{"href":1281,"rel":1282},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_planner\u002Fsrc\u002Fplanner_server.cpp#L345",[167],"返回路径检查",[46,1285,1288],{"href":1286,"rel":1287},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_planner\u002Fsrc\u002Fplanner_server.cpp#L561",[167],"已有路径检查",[21,1290,1291],{},"当前两棵默认BT未调用IsPathValid，不能因为已加载对应库就认定它每轮验证路径。全局规划、该服务和局部PID抽样检查各有范围；实际通过空间仍需正确地图、轮廓与车辆执行验证。",[319,1293,1294],{"id":1294},"动态修改的实际范围",[56,1296,1297,1310],{},[59,1298,1299],{},[62,1300,1301,1304,1307],{},[65,1302,1303],{},"参数类别",[65,1305,1306],{},"当前实现",[65,1308,1309],{},"核对方式",[75,1311,1312,1322,1333,1344,1355,1366,1377],{},[62,1313,1314,1316,1319],{},[80,1315,392],{},[80,1317,1318],{},"服务器动态回调重算正值倒数；非正值关闭门槛",[80,1320,1321],{},"看耗时警告门槛变化，不把它当规划请求频率变化",[62,1323,1324,1327,1330],{},[80,1325,1326],{},"planner_plugins、GridBased.plugin",[80,1328,1329],{},"当前没有动态重建插件列表／实例的路径",[80,1331,1332],{},"改配置并重新配置／重启，核对加载日志、ID和对应参数",[62,1334,1335,1338,1341],{},[80,1336,1337],{},"GridBased.how_many_corners",[80,1339,1340],{},"插件回调直接更新整数成员，未复做4／8检查",[80,1342,1343],{},"只用合法4／8；不要以参数设置成功代表非法值安全",[62,1345,1346,1349,1352],{},[80,1347,1348],{},"GridBased.w_euc_cost",[80,1350,1351],{},"更新长度权重，但不重算内部启发权重",[80,1353,1354],{},"比较权重组合时使用一致初始化方式，尤其降低权重时重新配置",[62,1356,1357,1360,1363],{},[80,1358,1359],{},"GridBased.w_traversal_cost",[80,1361,1362],{},"插件回调更新经过权重",[80,1364,1365],{},"观察同地图、同起终点的路径与耗时，不改变硬通行门槛",[62,1367,1368,1371,1374],{},[80,1369,1370],{},"YAML GridBased.w_heuristic_cost",[80,1372,1373],{},"初始化和动态回调均无读取路径",[80,1375,1376],{},"暂不调；内部h仍按已初始化成员运行",[62,1378,1379,1382,1385],{},[80,1380,1381],{},"GridBased.allow_unknown、use_final_approach_orientation",[80,1383,1384],{},"插件回调更新对应成员",[80,1386,1387],{},"核对真正的255格、常规／同格分支及最终控制器是否使用朝向",[21,1389,1390,1391,50,1396],{},"当前插件动态回调对权重和how_many_corners缺少完整范围校验，也没有像服务器那样围绕整次规划处理使用同一参数锁；不要假设一组运行中修改与重启初始化完全等价。本文没有修改运行节点参数。",[46,1392,1395],{"href":1393,"rel":1394},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_planner\u002Fsrc\u002Fplanner_server.cpp#L630",[167],"服务器回调",[46,1397,1399],{"href":1045,"rel":1398},[167],"插件回调",[319,1401,1403],{"id":1402},"启动接口与验证范围","启动、接口与验证范围",[56,1405,1406,1416],{},[59,1407,1408],{},[62,1409,1410,1413],{},[65,1411,1412],{},"项目",[65,1414,1415],{},"当前来源与用途",[75,1417,1418,1426,1434,1442,1450,1458],{},[62,1419,1420,1423],{},[80,1421,1422],{},"整套reality／simulation",[80,1424,1425],{},"navigation_launch加载对应nav2_params.yaml，经RewrittenYaml重写已有时钟；lifecycle_manager_navigation管理planner_server",[62,1427,1428,1431],{},[80,1429,1430],{},"独立进程／组件",[80,1432,1433],{},"两种启动分支均加载相同配置；planner_server内部创建global_costmap节点",[62,1435,1436,1439],{},[80,1437,1438],{},"compute_path_to_pose",[80,1440,1441],{},"规划到一个目标的Action，当前BT指定GridBased",[62,1443,1444,1447],{},[80,1445,1446],{},"compute_path_through_poses",[80,1448,1449],{},"按目标顺序逐段调用同一插件并拼接路径，下一段从上一段实际路径末端继续",[62,1451,1452,1455],{},[80,1453,1454],{},"plan",[80,1456,1457],{},"nav_msgs\u002FPath可视化话题；发布器Active且有订阅者才发布，不是控制器必须订阅的唯一传递方式",[62,1459,1460,1463],{},[80,1461,1462],{},"is_path_valid",[80,1464,1465],{},"对已有路径的独立服务检查，当前默认BT未调用",[21,1467,1468],{},"机器人namespace为\u002Fred_standard_robot1时，节点名为\u002Fred_standard_robot1\u002Fplanner_server，Action／plan／is_path_valid通常位于该机器人namespace下，不自动在话题中再加planner_server一层。global_costmap另有自己的子namespace。",[1470,1471,1472,1479,1485,1491],"ul",{},[1473,1474,1475,1478],"li",{},[159,1476,1477],{},"本次已核对："," 相关包版本、Theta*注册XML和库存在；算法及封装安装头文件与1.1.20一致；源码／安装副本的两套planner_server段一致，差异仅时钟；两棵默认BT均请求GridBased且目标规划节奏为3 Hz，未调用SmoothPath或IsPathValid。",[1473,1480,1481,1484],{},[159,1482,1483],{},"源码能确认："," 8项原配置的使用条件；10 Hz仅对应100 ms完成后警告；4／8邻居与视线连接；长度按格数、经过费用偏置26及平方公式；YAML启发权重未读取、内部初始化公式与动态不同步；未知／普通格门槛、同格快捷分支、末端方向和等待／取消边界。",[1473,1486,1487,1490],{},[159,1488,1489],{},"本次验证范围："," 费用和权重表为源码公式计算，未启动新的规划Action、未比较实车路线或运行中参数，不将库／头文件存在当成已验证整套运行行为。",[1473,1492,1493,1496],{},[159,1494,1495],{},"实物待核实："," 有效全局图格距与代价、map／TF对齐、真实起终点落格、未知策略、绕行与通道通过空间、参数初始化方式、实际耗时及完整感知到执行链；原工程配置和插件源码保持原样。",[1498,1499,1500],"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":38,"searchDepth":202,"depth":202,"links":1502},[1503],{"id":14,"depth":202,"text":5,"children":1504},[1505,1506],{"id":18,"depth":210,"text":19},{"id":176,"depth":210,"text":176},"0500-1600","2026-09-20","2026-09-20-dao-hang","\u002Fwiki\u002F2026-09-20-dao-hang","导航","md",true,false,{},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1600-planner-server",{"title":5,"description":38},"wiki\u002F2026-09-20-导航\u002F0500-1600-planner_server","-xNJarXH6QxzAldK8iIn6Y6DgOmlRy0vmStUFCWd-Mg",[1521,1528,1534,1540,1546,1552,1558,1564,1570,1576,1582,1588,1594,1600,1606,1612,1618,1624,1630,1636,1642,1648,1654,1659,1664,1670,1675,1681,1686,1688,1694,1700,1706,1712,1718,1724,1730,1736],{"path":1522,"stem":1523,"title":1524,"authors":1525,"date":1508,"chapterOrder":1526,"chapterDepth":1527,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0100-jian-jie","wiki\u002F2026-09-20-导航\u002F0100-简介","简介",[7],"0100",0,{"path":1529,"stem":1530,"title":1531,"authors":1532,"date":1508,"chapterOrder":1533,"chapterDepth":1527,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0200-huan-jing-pei-zhi-yu-yun-xing","wiki\u002F2026-09-20-导航\u002F0200-环境配置与运行","环境配置与运行",[7],"0200",{"path":1535,"stem":1536,"title":1537,"authors":1538,"date":1508,"chapterOrder":1539,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0100-robot-description","wiki\u002F2026-09-20-导航\u002F0300-0100-robot_description","robot_description（机器人模型与关节定义）",[7],"0300-0100",{"path":1541,"stem":1542,"title":1543,"authors":1544,"date":1508,"chapterOrder":1545,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\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":1547,"stem":1548,"title":1549,"authors":1550,"date":1508,"chapterOrder":1551,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\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":1553,"stem":1554,"title":1555,"authors":1556,"date":1508,"chapterOrder":1557,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0400-fang-zhen-shi-jue-you-hua","wiki\u002F2026-09-20-导航\u002F0300-0400-仿真视觉优化","仿真视觉优化（可选）",[7],"0300-0400",{"path":1559,"stem":1560,"title":1561,"authors":1562,"date":1508,"chapterOrder":1563,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0500-tian-jia-di-tu","wiki\u002F2026-09-20-导航\u002F0300-0500-添加地图","添加地图",[7],"0300-0500",{"path":1565,"stem":1566,"title":1567,"authors":1568,"date":1508,"chapterOrder":1569,"chapterDepth":1527,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-ji-qi-ren-mo-xing-yu-fang-zhen","wiki\u002F2026-09-20-导航\u002F0300-机器人模型与仿真","机器人模型与仿真",[7],"0300",{"path":1571,"stem":1572,"title":1573,"authors":1574,"date":1508,"chapterOrder":1575,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\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":1577,"stem":1578,"title":1579,"authors":1580,"date":1508,"chapterOrder":1581,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0200-chuan-kou-tong-xin","wiki\u002F2026-09-20-导航\u002F0400-0200-串口通信","Serial_Comm（串口通信）",[7],"0400-0200",{"path":1583,"stem":1584,"title":1585,"authors":1586,"date":1508,"chapterOrder":1587,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0300-shou-bing-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-0300-手柄控制","Joy（手柄控制）",[7],"0400-0300",{"path":1589,"stem":1590,"title":1591,"authors":1592,"date":1508,"chapterOrder":1593,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\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":1595,"stem":1596,"title":1597,"authors":1598,"date":1508,"chapterOrder":1599,"chapterDepth":1527,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-ying-jian-dui-jie-yu-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-硬件对接与控制","硬件对接与控制",[7],"0400",{"path":1601,"stem":1602,"title":1603,"authors":1604,"date":1508,"chapterOrder":1605,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\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":1607,"stem":1608,"title":1609,"authors":1610,"date":1508,"chapterOrder":1611,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\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":1613,"stem":1614,"title":1615,"authors":1616,"date":1508,"chapterOrder":1617,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\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":1619,"stem":1620,"title":1621,"authors":1622,"date":1508,"chapterOrder":1623,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0400-terrain-analysis","wiki\u002F2026-09-20-导航\u002F0500-0400-terrain_analysis","terrain_analysis（近场地面与障碍高差分析）",[7],"0500-0400",{"path":1625,"stem":1626,"title":1627,"authors":1628,"date":1508,"chapterOrder":1629,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\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":1631,"stem":1632,"title":1633,"authors":1634,"date":1508,"chapterOrder":1635,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0600-fake-vel-transform","wiki\u002F2026-09-20-导航\u002F0500-0600-fake_vel_transform","fake_vel_transform（云台系速度转换与底盘自旋）",[7],"0500-0600",{"path":1637,"stem":1638,"title":1639,"authors":1640,"date":1508,"chapterOrder":1641,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\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":1643,"stem":1644,"title":1645,"authors":1646,"date":1508,"chapterOrder":1647,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\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":1649,"stem":1650,"title":1651,"authors":1652,"date":1508,"chapterOrder":1653,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0900-slam-toolbox","wiki\u002F2026-09-20-导航\u002F0500-0900-slam_toolbox","slam_toolbox（二维地图生成与轨迹优化）",[7],"0500-0900",{"path":551,"stem":1655,"title":1656,"authors":1657,"date":1508,"chapterOrder":1658,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"wiki\u002F2026-09-20-导航\u002F0500-1000-bt_navigator","bt_navigator（行为树导航任务调度）",[7],"0500-1000",{"path":53,"stem":1660,"title":1661,"authors":1662,"date":1508,"chapterOrder":1663,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"wiki\u002F2026-09-20-导航\u002F0500-1100-controller_server","controller_server（路径跟踪、进度检查与到达判定）",[7],"0500-1100",{"path":1665,"stem":1666,"title":1667,"authors":1668,"date":1508,"chapterOrder":1669,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1200-local-costmap","wiki\u002F2026-09-20-导航\u002F0500-1200-local_costmap","local_costmap（局部障碍代价地图）",[7],"0500-1200",{"path":48,"stem":1671,"title":1672,"authors":1673,"date":1508,"chapterOrder":1674,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"wiki\u002F2026-09-20-导航\u002F0500-1300-global_costmap","global_costmap（全局规划代价地图）",[7],"0500-1300",{"path":1676,"stem":1677,"title":1678,"authors":1679,"date":1508,"chapterOrder":1680,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1400-map-server","wiki\u002F2026-09-20-导航\u002F0500-1400-map_server","map_server（已有二维地图加载与发布）",[7],"0500-1400",{"path":1229,"stem":1682,"title":1683,"authors":1684,"date":1508,"chapterOrder":1685,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"wiki\u002F2026-09-20-导航\u002F0500-1500-map_saver","map_saver（二维栅格地图保存）",[7],"0500-1500",{"path":1516,"stem":1518,"title":5,"authors":1687,"date":1508,"chapterOrder":1507,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},[7],{"path":1689,"stem":1690,"title":1691,"authors":1692,"date":1508,"chapterOrder":1693,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1700-smoother-server","wiki\u002F2026-09-20-导航\u002F0500-1700-smoother_server","smoother_server（全局路径平滑）",[7],"0500-1700",{"path":1695,"stem":1696,"title":1697,"authors":1698,"date":1508,"chapterOrder":1699,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1800-behavior-server","wiki\u002F2026-09-20-导航\u002F0500-1800-behavior_server","behavior_server（恢复行为与空闲方向移动）",[7],"0500-1800",{"path":1701,"stem":1702,"title":1703,"authors":1704,"date":1508,"chapterOrder":1705,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1900-waypoint-follower","wiki\u002F2026-09-20-导航\u002F0500-1900-waypoint_follower","waypoint_follower（逐点导航与到点等待）",[7],"0500-1900",{"path":1707,"stem":1708,"title":1709,"authors":1710,"date":1508,"chapterOrder":1711,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-2000-velocity-smoother","wiki\u002F2026-09-20-导航\u002F0500-2000-velocity_smoother","velocity_smoother（速度限幅与加减速平滑）",[7],"0500-2000",{"path":1713,"stem":1714,"title":1715,"authors":1716,"date":1508,"chapterOrder":1717,"chapterDepth":191,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\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":1719,"stem":1720,"title":1721,"authors":1722,"date":1508,"chapterOrder":1723,"chapterDepth":1527,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-dao-hang-can-shu","wiki\u002F2026-09-20-导航\u002F0500-导航参数","导航参数",[7],"0500",{"path":1725,"stem":1726,"title":1727,"authors":1728,"date":1508,"chapterOrder":1729,"chapterDepth":1527,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0600-kai-fa-wen-ti-yu-pai-cha","wiki\u002F2026-09-20-导航\u002F0600-开发问题与排查","开发问题与排查",[7],"0600",{"path":1731,"stem":1732,"title":1733,"authors":1734,"date":1508,"chapterOrder":1735,"chapterDepth":1527,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1514},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0700-jue-ce","wiki\u002F2026-09-20-导航\u002F0700-决策","决策",[7],"0700",{"path":1510,"stem":1737,"title":1738,"authors":1739,"date":1508,"chapterOrder":1740,"chapterDepth":1527,"docKey":1509,"docRoot":1510,"docTitle":1511,"isWikiDoc":1513,"isWikiIndex":1513},"wiki\u002F2026-09-20-导航\u002Findex","北极熊导航复现日志",[7],null,[1742,1744,1747,1750],{"name":7,"image":1743},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":1745,"image":1746},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":1748,"image":1749},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":1751,"image":1752},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431906531]