[{"data":1,"prerenderedAt":1492},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1700-smoother-server":3,"wiki-doc-items-2026-09-20-dao-hang":1258,"wiki:author-members":1480},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":187,"chapterOrder":1245,"date":1246,"description":35,"docKey":1247,"docRoot":1248,"docTitle":1249,"extension":1250,"isWikiDoc":1251,"isWikiIndex":1252,"meta":1253,"navigation":1251,"path":1254,"seo":1255,"stem":1256,"wikiDepth":187,"__hash__":1257},"wiki\u002Fwiki\u002F2026-09-20-导航\u002F0500-1700-smoother_server.md","smoother_server（全局路径平滑）",[7],"董佳辉",{"type":9,"value":10,"toc":1239},"minimark",[11,15,20,28,39,52,152,170,173,176,285,292,297,301,395,398,403,411,418,425,429,432,576,579,583,586,592,595,603,607,614,617,620,628,632,635,638,646,649,653,656,663,671,674,678,691,694,697,708,712,715,718,923,927,944,947,955,963,967,971,1063,1080,1083,1086,1093,1105,1109,1112,1125,1137,1141,1144,1147,1201,1204,1207,1235],[12,13,5],"h2",{"id":14},"smoother_server全局路径平滑",[16,17,19],"h3",{"id":18},"实车先看节点已经加载默认导航是否真的调用平滑","实车先看：节点已经加载，默认导航是否真的调用平滑",[21,22,23,27],"p",{},[24,25,26],"strong",{},"当前navigation_launch会启动并管理smoother_server，但两棵默认行为树都没有SmoothPath节点。"," 当前正常路径链是ComputePath→FollowPath，所以这组平滑参数虽在插件配置时读取，默认导航不会因此自动平滑Theta*路径。",[29,30,36],"pre",{"className":31,"code":33,"language":34,"meta":35},[32],"language-text","当前默认链路：\n    ComputePath → planner_server／Theta* → path → FollowPath／PID\n\n后续若明确接入路径平滑：\n    ComputePath → 原路径 → SmoothPath Action → smoother_server\n                                              └─ simple_smoother\n                                                  → 返回平滑路径与完成标志\n    FollowPath必须使用返回的平滑路径，才会改变实际跟踪输入\n\n另一条速度处理链：\n    controller_server输出速度 → velocity_smoother → fake_vel_transform\n","text","",[37,38,33],"code",{"__ignoreMap":35},[21,40,41,42,47,48],{},"smoother_server处理nav_msgs\u002FPath中的位置，不直接平滑cmd_vel；velocity_smoother处理速度指令，是另一节点。Theta*自身的线性补点也不等于已经调用本平滑器。",[43,44,46],"a",{"href":45},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1600-planner-server","规划与路径补点","、",[43,49,51],{"href":50},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1100-controller-server","当前控制链",[53,54,55,71],"table",{},[56,57,58],"thead",{},[59,60,61,65,68],"tr",{},[62,63,64],"th",{},"实车上看到的现象",[62,66,67],{},"先核对什么",[62,69,70],{},"当前配置怎样理解",[72,73,74,86,97,108,119,130,141],"tbody",{},[59,75,76,80,83],{},[77,78,79],"td",{},"改平滑参数，默认导航路径没变",[77,81,82],{},"实际使用的BT、是否有SmoothPath请求",[77,84,85],{},"当前两棵默认树未调用；加载BT库／启动服务器不等于执行平滑",[59,87,88,91,94],{},[77,89,90],{},"以为tolerance=1e-10要求机器人到达误差极小",[77,92,93],{},"收敛量的实际计算",[77,95,96],{},"比较一轮中所有中间点x、y更新绝对值的总和，不是终点定位误差或车体精度",[59,98,99,102,105],{},[77,100,101],{},"以为max_its=1000保证一定平滑1000次",[77,103,104],{},"提前收敛、时间、碰撞及计数分支",[77,106,107],{},"是单次smoothImpl的计数上限；当前第1000计数会在遍历前退出，最多999轮完整遍历",[59,109,110,113,116],{},[77,111,112],{},"以为do_refinement增加点数或提高地图分辨率",[77,114,115],{},"递归细化实现",[77,117,118],{},"重复平滑已有点，不增加路径点；内部最多额外调用4次，计数共享本次请求",[59,120,121,124,127],{},[77,122,123],{},"10个点的短路径没有变",[77,125,126],{},"分段后点数条件",[77,128,129],{},"只平滑每段至少11个点的路径；较短段直接保留",[59,131,132,135,138],{},[77,133,134],{},"Action返回成功，以为所有平滑都充分收敛",[77,136,137],{},"was_completed、日志与实际路径",[77,139,140],{},"服务器可返回Action成功但was_completed=False；细化递归也有返回值不向外传播的边界",[59,142,143,146,149],{},[77,144,145],{},"路径看着更圆，却变得贴墙或穿过未知区",[77,147,148],{},"平滑目标、地图点检查与后置轮廓检查",[77,150,151],{},"SimpleSmoother不沿软代价梯度避障；内部放行未知255；后置check_for_collisions另由请求决定",[21,153,154,155,158,159,47,165],{},"本次nav2_smoother、nav2_behavior_tree及nav2_costmap_2d均为",[24,156,157],{},"1.1.20","。SimpleSmoother、分段工具和服务器安装头文件与该版本一致；安装XML注册nav2_smoother::SimpleSmoother，相关库存在。以下按该实现解释，不能直接套后续版本新增的细化次数或约束参数。",[43,160,164],{"href":161,"rel":162},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_smoother\u002Fsrc\u002Fsimple_smoother.cpp",[163],"nofollow","SimpleSmoother实现",[43,166,169],{"href":167,"rel":168},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_smoother\u002Fsrc\u002Fnav2_smoother.cpp",[163],"服务器实现",[16,171,172],{"id":172},"参数",[21,174,175],{},"下面保留发送的完整6项原参数。当前源码／安装副本的reality段一致；simulation段只有use_sim_time=True不同。",[29,177,181],{"className":178,"code":179,"language":180,"meta":35,"style":35},"language-yaml shiki shiki-themes github-light github-dark","smoother_server:\n  ros__parameters:\n    use_sim_time: False\n    smoother_plugins: [\"simple_smoother\"]\n    simple_smoother:\n      plugin: \"nav2_smoother::SimpleSmoother\"\n      tolerance: 1.0e-10\n      max_its: 1000\n      do_refinement: True\n","yaml",[37,182,183,196,204,217,233,241,252,263,274],{"__ignoreMap":35},[184,185,188,192],"span",{"class":186,"line":187},"line",1,[184,189,191],{"class":190},"s9eBZ","smoother_server",[184,193,195],{"class":194},"sVt8B",":\n",[184,197,199,202],{"class":186,"line":198},2,[184,200,201],{"class":190},"  ros__parameters",[184,203,195],{"class":194},[184,205,207,210,213],{"class":186,"line":206},3,[184,208,209],{"class":190},"    use_sim_time",[184,211,212],{"class":194},": ",[184,214,216],{"class":215},"sj4cs","False\n",[184,218,220,223,226,230],{"class":186,"line":219},4,[184,221,222],{"class":190},"    smoother_plugins",[184,224,225],{"class":194},": [",[184,227,229],{"class":228},"sZZnC","\"simple_smoother\"",[184,231,232],{"class":194},"]\n",[184,234,236,239],{"class":186,"line":235},5,[184,237,238],{"class":190},"    simple_smoother",[184,240,195],{"class":194},[184,242,244,247,249],{"class":186,"line":243},6,[184,245,246],{"class":190},"      plugin",[184,248,212],{"class":194},[184,250,251],{"class":228},"\"nav2_smoother::SimpleSmoother\"\n",[184,253,255,258,260],{"class":186,"line":254},7,[184,256,257],{"class":190},"      tolerance",[184,259,212],{"class":194},[184,261,262],{"class":215},"1.0e-10\n",[184,264,266,269,271],{"class":186,"line":265},8,[184,267,268],{"class":190},"      max_its",[184,270,212],{"class":194},[184,272,273],{"class":215},"1000\n",[184,275,277,280,282],{"class":186,"line":276},9,[184,278,279],{"class":190},"      do_refinement",[184,281,212],{"class":194},[184,283,284],{"class":215},"True\n",[21,286,287,288,291],{},"“当前运行不使用”在本页表示：",[24,289,290],{},"插件已配置，但当前默认BT未发起平滑计算。"," 数值和开关的调节效果描述的是后续实际调用SmoothPath时的条件，不表示改完本块就会影响当前导航。",[293,294,296],"h4",{"id":295},"ros__parameters时钟与平滑器id","ros__parameters（时钟与平滑器ID）",[298,299,300],"h5",{"id":300},"参数表",[53,302,303,331],{},[56,304,305],{},[59,306,307,310,313,316,319,322,325,328],{},[62,308,309],{},"参数名",[62,311,312],{},"当前值",[62,314,315],{},"单位",[62,317,318],{},"实车处理建议",[62,320,321],{},"作用",[62,323,324],{},"调大效果",[62,326,327],{},"调小效果",[62,329,330],{},"生效条件／备注",[72,332,333,365],{},[59,334,335,340,346,349,354,357,360,362],{},[77,336,337],{},[37,338,339],{},"use_sim_time",[77,341,342,345],{},[37,343,344],{},"False","；仿真True",[77,347,348],{},"不适用，布尔",[77,350,351],{},[24,352,353],{},"上实物前必须核对并正确配置",[77,355,356],{},"选择服务器ROS时钟，供结果smoothing_duration和TF使用",[77,358,359],{},"不适用",[77,361,359],{},[77,363,364],{},"navigation_launch重写已有键；SimpleSmoother内部限时使用steady_clock，不随\u002Fclock暂停而暂停",[59,366,367,372,377,380,385,388,390,392],{},[77,368,369],{},[37,370,371],{},"smoother_plugins",[77,373,374],{},[37,375,376],{},"[\"simple_smoother\"]",[77,378,379],{},"不适用，插件ID列表",[77,381,382],{},[24,383,384],{},"通常保持当前值，不作为优先调试项",[77,386,387],{},"加载下方simple_smoother配置分组",[77,389,359],{},[77,391,359],{},[77,393,394],{},"ID用于SmoothPath请求的smoother_id，不是算法类名；新增ID不会自动串联多个平滑器，也不会自动修改BT",[298,396,397],{"id":397},"参数详解",[399,400,402],"h6",{"id":401},"smoother_plugins加载与实际调用分开核对","smoother_plugins（加载与实际调用分开核对）",[21,404,405,406],{},"当前configure读取列表，按simple_smoother.plugin加载类，再把此ID登记到服务器。启用SmoothPath后，可明确请求smoother_id=\"simple_smoother\"；只有一个插件且请求ID为空时，1.1.20会警告并使用唯一插件，显式错误非空ID则失败。",[43,407,410],{"href":408,"rel":409},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_smoother\u002Fsrc\u002Fnav2_smoother.cpp#L125",[163],"加载与ID选择",[21,412,413,414,417],{},"navigation_launch把smoother_server列入生命周期管理，并提供独立进程／组件两种启动方式；bt_navigator也配置了nav2_smooth_path_action_bt_node库。这些说明服务器和BT节点可用，",[24,415,416],{},"不能证明当前树调用了它","。本次已检查两份默认XML及安装副本，SmoothPath数量均为0。",[21,419,420,421],{},"如果以后选用其他XML或外部客户端，是否平滑以实际请求为准。本页没有修改默认行为树；原路径只有被请求平滑、返回结果又接到FollowPath后，才改变执行输入。",[43,422,424],{"href":423},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1000-bt-navigator","当前BT调度",[293,426,428],{"id":427},"simple_smoother迭代停止与重复细化","simple_smoother（迭代停止与重复细化）",[298,430,300],{"id":431},"参数表-1",[53,433,434,454],{},[56,435,436],{},[59,437,438,440,442,444,446,448,450,452],{},[62,439,309],{},[62,441,312],{},[62,443,315],{},[62,445,318],{},[62,447,321],{},[62,449,324],{},[62,451,327],{},[62,453,330],{},[72,455,456,485,517,548],{},[59,457,458,463,468,471,475,478,480,482],{},[77,459,460],{},[37,461,462],{},"plugin",[77,464,465],{},[37,466,467],{},"nav2_smoother::SimpleSmoother",[77,469,470],{},"不适用，类名",[77,472,473],{},[24,474,384],{},[77,476,477],{},"选择基于原点位置和三点邻域的二维平滑实现",[77,479,359],{},[77,481,359],{},[77,483,484],{},"当前注册名正确；配置时读取参数，真正计算需要SmoothPath调用；不包含车辆转弯半径／速度约束优化",[59,486,487,492,497,500,505,508,511,514],{},[77,488,489],{},[37,490,491],{},"tolerance",[77,493,494],{},[37,495,496],{},"1.0e-10",[77,498,499],{},"m，单轮中间点x、y更新绝对值总和的门槛",[77,501,502],{},[24,503,504],{},"当前运行不使用这个参数，暂不调整",[77,506,507],{},"当一轮总更新量小于它时，结束当前平滑遍历",[77,509,510],{},"通常更早达到停止条件、迭代减少，未充分收敛时更易提前停止",[77,512,513],{},"收敛要求更严、迭代可能增多，更易碰到时间／次数上限",[77,515,516],{},"实际调用且该段≥11点时才计算；不是xy_goal_tolerance；应为有限正值，门槛变小不保证路径更安全",[59,518,519,524,529,532,536,539,542,545],{},[77,520,521],{},[37,522,523],{},"max_its",[77,525,526],{},[37,527,528],{},"1000",[77,530,531],{},"单次smoothImpl的迭代计数上限",[77,533,534],{},[24,535,504],{},[77,537,538],{},"限制一轮平滑调用继续迭代的次数",[77,540,541],{},"可给未收敛段更多遍历机会，耗时可能增加；仍受时间／碰撞退出影响",[77,543,544],{},"更早按未完成返回，结果可能只做了部分平滑",[77,546,547],{},"当前计数先加1再检查≥上限，1000最多999轮完整遍历；细化调用重新计数，不是整次请求总次数",[59,549,550,555,560,562,566,569,571,573],{},[77,551,552],{},[37,553,554],{},"do_refinement",[77,556,557],{},[37,558,559],{},"True",[77,561,348],{},[77,563,564],{},[24,565,504],{},[77,567,568],{},"当前段正常收敛后，允许在结果上重复平滑",[77,570,359],{},[77,572,359],{},[77,574,575],{},"True最多额外调用4次smoothImpl，计数共享本次请求；False不进入细化递归；不增加点数／提高地图分辨率，也不保证全部细化完成",[298,577,397],{"id":578},"参数详解-1",[399,580,582],{"id":581},"simplesmoother实际修改什么原位置约束与邻居拉平","SimpleSmoother实际修改什么（原位置约束与邻居拉平）",[21,584,585],{},"对符合点数条件的路径段，算法保留段首、段尾的位置，只更新中间点x和y，z不参与迭代。当前未显式写w_data与w_smooth，使用源码默认0.2与0.3；每个坐标按下面规则更新：",[29,587,590],{"className":588,"code":589,"language":34,"meta":35},[32],"新坐标 ← 当前新坐标\n       + w_data ×（本次smoothImpl输入的原坐标 − 当前新坐标）\n       + w_smooth ×（前一个新坐标 + 后一个新坐标 − 2 × 当前新坐标）\n",[37,591,589],{"__ignoreMap":35},[21,593,594],{},"w_data把点拉回本轮输入位置，w_smooth把相邻点的局部折线拉平。遍历过程中使用new_path的邻居，其中一部分已经在本轮更新，不是所有点只依据同一份上一轮快照同时更新。",[21,596,597,598],{},"这里的data不是障碍距离，平滑项也不是直接求车辆曲率或转弯半径；地图主要用来拒绝某些候选点，不按1～252软代价给平滑方向连续打分。因此它可能削弱Theta*原先按w_traversal_cost选择的离障碍取舍；是否更适合跟踪，需要看结果路径和实际车体空间。",[43,599,602],{"href":600,"rel":601},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_smoother\u002Fsrc\u002Fsimple_smoother.cpp#L143",[163],"更新公式与点检查",[399,604,606],{"id":605},"tolerance所有中间坐标更新量之和不是位置精度","tolerance（所有中间坐标更新量之和，不是位置精度）",[21,608,609,610,613],{},"每轮先将change清零，然后累加各中间点两次坐标更新的abs(更新后−更新前)。循环条件为change≥tolerance，所以必须",[24,611,612],{},"严格小于","1e-10才因正常收敛退出。",[21,615,616],{},"例如10个中间点的x、y各改变1e-6 m，合计change=20×1e-6=2e-5 m，远大于当前1e-10，即使单个点变化已经很小仍继续。这只是公式示例，不是本次平滑输出。",[21,618,619],{},"相同单点变化下，长段的change通常更大；不能把它理解成每个点都允许1e-10 m误差，也不能把它和控制器0.15 m的终点到达容差比较为同一精度要求。这个门槛检测的是迭代变化是否足够小，不是原路径偏离量、真实定位误差、离墙距离或平滑后的最大曲率。",[21,621,622,623],{},"调大可能减少遍历次数，调小可能增加次数；结果形状还受两项权重、输入点密度、细化及退出原因共同影响。当前1e-10很严格，但默认BT未调用，没有实测耗时问题，不能仅凭数值小就宣布当前导航必须改它。",[43,624,627],{"href":625,"rel":626},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_smoother\u002Fsrc\u002Fsimple_smoother.cpp#L112",[163],"change统计与停止条件",[399,629,631],{"id":630},"max_its次数上限时间限制与部分结果","max_its（次数上限、时间限制与部分结果）",[21,633,634],{},"smoothImpl每轮先its+=1，再检查its≥max_its。当前1000意味着最多完整执行1～999轮；若第999轮后仍未收敛，下一轮计数到1000便返回False。若已经收敛，则不会为了凑次数继续运行。",[21,636,637],{},"超过次数、超过本次时间或候选点进入禁止格时，函数会把path恢复为last_path，即上一次完整可接受遍历的路径，并更新近似朝向，返回False；它不总是恢复到最初未平滑路径。第一次遍历完成前失败时，last_path才仍是本轮原输入。",[21,639,640,641],{},"因此“未完成”可能带有部分平滑结果；增大max_its不保证得到更多有效结果，也不保证克服时间或碰撞退出。时间来自SmoothPath请求的max_smoothing_duration，与这个计数上限各自作用。",[43,642,645],{"href":643,"rel":644},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_smoother\u002Fsrc\u002Fsimple_smoother.cpp#L118",[163],"次数／时间退出",[21,647,648],{},"各长段的成功标志用短路&&累计：一个长段返回False后，后续长段不会再调用smoothImpl，而会保留对应输入。was_completed=False不能解释为每段都已尝试迭代、只是最后没有达到同一收敛门槛。",[399,650,652],{"id":651},"do_refinement最多四次额外调用不是一次额外遍历","do_refinement（最多四次额外调用，不是一次额外遍历）",[21,654,655],{},"第一次smoothImpl正常收敛后，True允许递归调用smoothImpl(new_path,...)。每次递归有自己的its计数和输入路径；前一次平滑结果成为下一次“原位置”约束，所以细化可以继续改变形状，并不一直把所有点拉向最初Theta*路径。",[21,657,658,659,662],{},"refinement_ctr在每次smooth请求开始时置0，最多增加到4；一个正常收敛长段可以经历基础调用加4次细化，合计最多5次smoothImpl。",[24,660,661],{},"计数在整次请求内共享","，不是每个分段都保证另外做4次；若前面长段消耗了计数，后面段就没有同样的细化次数。",[21,664,665,666],{},"每次调用都重新计算自己的迭代计数，因此max_its=1000不是整次请求最多1000遍。细化也不插点、不改变点数量；此处的“refinement”主要表示重新平滑已有位置。",[43,667,670],{"href":668,"rel":669},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_smoother\u002Fsrc\u002Fsimple_smoother.cpp#L180",[163],"细化递归",[21,672,673],{},"当前还有两个使用边界需要明确：递归传入同一个max_time值并重新开始内部计时，没有按上一层已耗时间持续扣减；递归调用的bool返回值也没有传回上一层。因此True时总时长可能超出表面单次预算，外层返回True也不能证明每次细化均完整收敛。这里只记录代码路径，未测试其实际超时幅度。",[298,675,677],{"id":676},"分段短路径与朝向","分段、短路径与朝向",[21,679,680,681,47,686],{},"路径先按相邻位置向量点积为负的折返，以及“位置几乎不动而yaw变化”的原地转向条件分段；只有end−start>9才调用平滑，相当于包含首尾至少11个点。10点及更短段保持输入位置和朝向，不能通过调tolerance或max_its让当前这条短段条件消失。",[43,682,685],{"href":683,"rel":684},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_smoother\u002Finclude\u002Fnav2_smoother\u002Fsmoother_utils.hpp#L45",[163],"分段工具",[43,687,690],{"href":688,"rel":689},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_smoother\u002Fsrc\u002Fsimple_smoother.cpp#L74",[163],"长段条件",[21,692,693],{},"11点不等于固定米数：若恰好等间距5 cm、没有切段，首尾相隔约0.5 m只是一个直线例子；地图格距、Theta*插值和分段规则都会改变实际长度。平滑保留各段端点位置，因此折返分界点不被跨段一起抹平。",[21,695,696],{},"对参与平滑的长段，输出工具按相邻点方向更新近似yaw，并用输入第1→第2点方向与第1点已有yaw判断是否倒车；最后一点的输入朝向保留，重合点还可能跳过更新。不是每个路径点的四元数都无条件被修正。",[21,698,699,700,47,705],{},"当前Theta*中间点没有逐点生成有效沿路径朝向，而虚拟gimbal_yaw_fake也不等于真实底盘朝向；若后续调用平滑，要核对倒车推断和轮廓方向。当前PID关闭旋转且yaw容差较大，输出yaw变了不等于底盘自动跟着转向。",[43,701,704],{"href":702,"rel":703},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_smoother\u002Finclude\u002Fnav2_smoother\u002Fsmoother_utils.hpp#L89",[163],"近似朝向更新",[43,706,707],{"href":45},"规划器朝向条件",[293,709,711],{"id":710},"相关源码默认项原yaml未显式配置","相关源码默认项（原YAML未显式配置）",[298,713,300],{"id":714},"参数表-2",[21,716,717],{},"以下6项为两项平滑权重和服务器地图／轮廓输入。原参数块没有显式配置，本次也未向工程追加。",[53,719,720,740],{},[56,721,722],{},[59,723,724,726,728,730,732,734,736,738],{},[62,725,309],{},[62,727,312],{},[62,729,315],{},[62,731,318],{},[62,733,321],{},[62,735,324],{},[62,737,327],{},[62,739,330],{},[72,741,742,774,805,835,863,892],{},[59,743,744,749,755,758,762,765,768,771],{},[77,745,746],{},[37,747,748],{},"simple_smoother.w_data",[77,750,751,754],{},[37,752,753],{},"0.2","，源码默认",[77,756,757],{},"无量纲，位置保持项权重",[77,759,760],{},[24,761,504],{},[77,763,764],{},"将更新点拉向本次smoothImpl输入位置",[77,766,767],{},"更新时回拉作用更强，通常更偏向保持本轮形状；过大可能影响迭代稳定性",[77,769,770],{},"更弱地保留本轮形状，邻居项相对影响更大",[77,772,773],{},"不是障碍距离权重；细化时输入参考会更新；不能用两个独立“调大”结论保证整组权重稳定收敛",[59,775,776,781,786,789,793,796,799,802],{},[77,777,778],{},[37,779,780],{},"simple_smoother.w_smooth",[77,782,783,754],{},[37,784,785],{},"0.3",[77,787,788],{},"无量纲，三点邻域平滑权重",[77,790,791],{},[24,792,504],{},[77,794,795],{},"用邻居位置减轻局部折线变化",[77,797,798],{},"更新时拉平作用更强，可能偏离原路线更多；过大可能不稳定",[77,800,801],{},"更新时拉平作用更弱，可能保留更多折线",[77,803,804],{},"不直接约束最小转弯半径／速度／加速度；需和w_data、次数及时间一起核对",[59,806,807,812,818,821,825,828,830,832],{},[77,808,809],{},[37,810,811],{},"costmap_topic",[77,813,814,817],{},[37,815,816],{},"global_costmap\u002Fcostmap_raw","，服务器默认",[77,819,820],{},"不适用，话题名称",[77,822,823],{},[24,824,353],{},[77,826,827],{},"提供平滑点检查及可选后置检查的地图",[77,829,359],{},[77,831,359],{},[77,833,834],{},"接收nav2_msgs\u002FCostmap，经机器人namespace解析；不是OccupancyGrid的costmap话题，也不直接读planner_server持有的内存图",[59,836,837,842,847,849,853,856,858,860],{},[77,838,839],{},[37,840,841],{},"footprint_topic",[77,843,844,817],{},[37,845,846],{},"global_costmap\u002Fpublished_footprint",[77,848,820],{},[77,850,851],{},[24,852,353],{},[77,854,855],{},"为服务层后置碰撞检查提供发布轮廓",[77,857,359],{},[77,859,359],{},[77,861,862],{},"SimpleSmoother.configure本身忽略footprint参数，只用中心点检查；请求check_for_collisions=True时另由服务器使用",[59,864,865,870,875,878,882,885,887,889],{},[77,866,867],{},[37,868,869],{},"robot_base_frame",[77,871,872,817],{},[37,873,874],{},"base_link",[77,876,877],{},"不适用，坐标系名称",[77,879,880],{},[24,881,353],{},[77,883,884],{},"供FootprintSubscriber把发布轮廓转回机体系",[77,886,359],{},[77,888,359],{},[77,890,891],{},"不自动继承costmap的gimbal_yaw_fake；后置检查启用前需核对参考原点、姿态和轮廓换系，不是本插件的路径优化坐标系",[59,893,894,899,904,907,911,914,917,920],{},[77,895,896],{},[37,897,898],{},"transform_tolerance",[77,900,901,817],{},[37,902,903],{},"0.1",[77,905,906],{},"s，轮廓换系的TF等待设置",[77,908,909],{},[24,910,384],{},[77,912,913],{},"初始化FootprintSubscriber时传入TF查询等待",[77,915,916],{},"可等待更久，也可能延迟检查",[77,918,919],{},"缺TF时更快结束查询",[77,921,922],{},"不是允许0.1 m／rad几何误差，不自动变换输入path；与其他节点同名参数独立",[298,924,926],{"id":925},"权重之外地图怎么参与","权重之外，地图怎么参与",[21,928,929,930,933,934,938,939],{},"SimpleSmoother内部对候选中间点查代价：超过MAX_NON_OBSTACLE=252且不等于NO_INFORMATION=255时退出，即",[24,931,932],{},"253、254拒绝，255未知放行","。它不对1～252建立避障优化梯度，也没有继承Theta",[935,936,937],"em",{},"的allow_unknown参数。Theta","常规搜索拒绝252，而本平滑点检查允许252，两者条件不同。",[43,940,943],{"href":941,"rel":942},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_smoother\u002Fsrc\u002Fsimple_smoother.cpp#L157",[163],"内部候选检查",[21,945,946],{},"因此不能仅凭原规划器禁止未知就保证平滑路径仍不会进入未知。内部检查只检查更新点，不能称为完整车体扫掠验证；该代码还没有检查worldToMap的bool返回值就使用格索引，输入和更新点是否始终在地图内需要核对，不能把地图外候选理解成可靠拒绝。",[21,948,949,950],{},"smoother_server从话题取得地图快照，默认使用global_costmap\u002Fcostmap_raw；与planner_server直接读内存不同，地图新鲜度受全局图目标2 Hz发布及接收影响，实际发布频率仍受更新循环和负载制约。没接到地图时getCostmap会抛出“Costmap is not available”，不是通过增大迭代次数就可继续平滑。",[43,951,954],{"href":952,"rel":953},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fsrc\u002Fcostmap_subscriber.cpp#L49",[163],"地图订阅与快照",[21,956,957,958],{},"服务器复制输入path后直接交给插件，SimpleSmoother没有把输入路径自动转换到地图坐标系。当前路径应和全局代价图一样在map中表达；仅有TF可用，也不证明输入odom路径会被自动换到map。",[43,959,962],{"href":960,"rel":961},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_smoother\u002Fsrc\u002Fnav2_smoother.cpp#L280",[163],"服务器传入路径",[293,964,966],{"id":965},"smoothpath请求结果与后置检查不是原6项节点参数","SmoothPath请求、结果与后置检查（不是原6项节点参数）",[298,968,970],{"id":969},"请求与bt端口","请求与BT端口",[53,972,973,986],{},[56,974,975],{},[59,976,977,980,983],{},[62,978,979],{},"Action字段／BT端口",[62,981,982],{},"单位或类型",[62,984,985],{},"当前接口含义",[72,987,988,999,1010,1021,1032,1042,1053],{},[59,989,990,993,996],{},[77,991,992],{},"path／unsmoothed_path",[77,994,995],{},"nav_msgs\u002FPath",[77,997,998],{},"调用者提交待平滑路径，不会自动监听plan话题并处理每一张路径",[59,1000,1001,1004,1007],{},[77,1002,1003],{},"smoother_id",[77,1005,1006],{},"插件ID字符串",[77,1008,1009],{},"当前可用ID为simple_smoother；BT端口默认空，唯一插件可兜底",[59,1011,1012,1015,1018],{},[77,1013,1014],{},"max_smoothing_duration",[77,1016,1017],{},"Action中Duration；BT端口按s输入",[77,1019,1020],{},"本次请求的时间预算；BT端口缺省3.0 s，直接Action客户端必须自行提供所需值，不从max_its推导",[59,1022,1023,1026,1029],{},[77,1024,1025],{},"check_for_collisions",[77,1027,1028],{},"布尔",[77,1030,1031],{},"BT端口默认False；True才执行服务层后置轮廓检查，与插件内部中心点检查不同",[59,1033,1034,1037,1039],{},[77,1035,1036],{},"返回path／smoothed_path",[77,1038,995],{},[77,1040,1041],{},"结果路径，可能是完整平滑、部分结果或短段原样返回；须接到FollowPath才用于执行",[59,1043,1044,1047,1050],{},[77,1045,1046],{},"smoothing_duration",[77,1048,1049],{},"Duration／BT输出秒数",[77,1051,1052],{},"服务器用ROS now计算，到插件返回后取值；后面的轮廓检查耗时不在该字段计时范围内",[59,1054,1055,1058,1060],{},[77,1056,1057],{},"was_completed",[77,1059,1028],{},[77,1061,1062],{},"插件smooth的bool结果；不是Action状态，也不能完全覆盖当前细化递归中的失败返回",[21,1064,1065,1066,1069,1070,47,1075],{},"这些端口由nav2_smooth_path_action_bt_node提供，当前树没有实例化SmoothPath，故3.0 s／False只是",[24,1067,1068],{},"该BT节点若被使用且省略端口时的默认值","，不是当前已有平滑请求。",[43,1071,1074],{"href":1072,"rel":1073},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_behavior_tree\u002Finclude\u002Fnav2_behavior_tree\u002Fplugins\u002Faction\u002Fsmooth_path_action.hpp#L65",[163],"BT端口默认",[43,1076,1079],{"href":1077,"rel":1078},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_msgs\u002Faction\u002FSmoothPath.action",[163],"Action接口",[298,1081,1082],{"id":1082},"时间预算与结果状态要一起看",[21,1084,1085],{},"插件smooth以steady_clock统计整次处理的已耗时间，进入每个长段前计算剩余预算；smoothImpl再以自己的steady_clock计时，每轮遍历前检查。预算不是可以中断单轮循环的硬实时截止，也不涵盖获取地图等计时前工作和服务器后置检查的所有成本；细化递归重复使用预算的问题见前文。",[21,1087,1088,1089],{},"服务器把插件返回值放入was_completed。即使False，只要没有异常且可选后置检查通过，它仍可以将Action设为SUCCEEDED，返回部分路径；日志里的“未在指定时间完成”还可能对应次数或内部碰撞退出，不能只凭这句日志认定唯一原因是超时。",[43,1090,1092],{"href":960,"rel":1091},[163],"服务层结果处理",[21,1094,1095,1096,1099,1100],{},"BT插件on_success会写smoothed_path、smoothing_duration、was_completed并返回SUCCESS，",[24,1097,1098],{},"不会自动因为was_completed=False转为FAILURE","。后续若要求“必须完成才跟踪”，需要在调用流程中明确处理完成标志；当前未接入平滑，本文没有替用户增加这套流程。",[43,1101,1104],{"href":1102,"rel":1103},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_behavior_tree\u002Fplugins\u002Faction\u002Fsmooth_path_action.cpp#L48",[163],"BT成功回调",[298,1106,1108],{"id":1107},"check_for_collisions服务层另外检查轮廓","check_for_collisions（服务层另外检查轮廓）",[21,1110,1111],{},"True时，服务器对结果中的每个离散姿态调用CostmapTopicCollisionChecker，使用地图和发布轮廓；取到的轮廓先转到robot_base_frame，再放到各路径姿态上检查。这与SimpleSmoother迭代里的中心点代价检查是两条路径，False不会关闭插件内部点检查。",[21,1113,1114,1115,47,1120],{},"当前服务器默认robot_base_frame=base_link，而全局轮廓参考gimbal_yaw_fake。启用后要核对二者的实际TF、原点偏移、圆／多边形轮廓及路径yaw语义，不能只复制两个话题就认定几何已经一致。",[43,1116,1119],{"href":1117,"rel":1118},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fsrc\u002Ffootprint_subscriber.cpp#L90",[163],"轮廓换系",[43,1121,1124],{"href":1122,"rel":1123},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_smoother\u002Fsrc\u002Fnav2_smoother.cpp#L294",[163],"服务层碰撞检查",[21,1126,1127,1128,1131,1132],{},"该检查器按轮廓评分≥254拒绝，并会在缺图／缺轮廓、地图外等异常条件返回False；仍是对离散路径姿态的检查，不能当成包含点间运动、定位误差和执行偏差的完整实车验证。服务器在后置检查前已经发布plan_smoothed，因此",[24,1129,1130],{},"看见该话题有路径，也不能单独证明Action最终成功或后置检查通过","。",[43,1133,1136],{"href":1134,"rel":1135},"https:\u002F\u002Fgithub.com\u002Fros-navigation\u002Fnavigation2\u002Fblob\u002F1.1.20\u002Fnav2_costmap_2d\u002Fsrc\u002Fcostmap_topic_collision_checker.cpp#L49",[163],"检查器与阈值",[293,1138,1140],{"id":1139},"动态参数启动与验证范围","动态参数、启动与验证范围",[298,1142,1143],{"id":1143},"运行中修改的实际范围",[21,1145,1146],{},"当前SimpleSmoother没有为tolerance、max_its、do_refinement、w_data、w_smooth设置动态参数回调；服务器也没有动态重建平滑器或地图／轮廓订阅的路径。ROS参数设置成功不表示这些已读取成员更新，应修改配置后重新配置／重启，并核对加载值和实际请求。use_sim_time属于ROS时钟机制，应与整套节点时间域一起处理。",[53,1148,1149,1159],{},[56,1150,1151],{},[59,1152,1153,1156],{},[62,1154,1155],{},"当前流程",[62,1157,1158],{},"本块状态与作用",[72,1160,1161,1169,1177,1185,1193],{},[59,1162,1163,1166],{},[77,1164,1165],{},"reality／simulation导航",[77,1167,1168],{},"两份配置仅时钟不同；navigation_launch启动服务器并交由lifecycle_manager_navigation管理",[59,1170,1171,1174],{},[77,1172,1173],{},"独立进程／组件",[77,1175,1176],{},"两种分支均加载本配置；组件类为nav2_smoother::SmootherServer",[59,1178,1179,1182],{},[77,1180,1181],{},"两棵默认BT",[77,1183,1184],{},"没有SmoothPath，实际ComputePath结果直接进入FollowPath",[59,1186,1187,1190],{},[77,1188,1189],{},"后续其他BT／外部客户端",[77,1191,1192],{},"只有实际发起smooth_path请求、使用返回路径时才影响跟踪",[59,1194,1195,1198],{},[77,1196,1197],{},"默认接口",[77,1199,1200],{},"smooth_path Action、plan_smoothed话题；机器人namespace存在时位于其下，不额外自动加smoother_server一层",[21,1202,1203],{},"例如namespace为\u002Fred_standard_robot1，节点名为\u002Fred_standard_robot1\u002Fsmoother_server，接口通常为\u002Fred_standard_robot1\u002Fsmooth_path和\u002Fred_standard_robot1\u002Fplan_smoothed；地图默认订阅\u002Fred_standard_robot1\u002Fglobal_costmap\u002Fcostmap_raw。名称与输入参考系需要各自核对。",[298,1205,1206],{"id":1206},"本次已核对与后续实物检查",[1208,1209,1210,1217,1223,1229],"ul",{},[1211,1212,1213,1216],"li",{},[24,1214,1215],{},"本次已核对："," nav2_smoother 1.1.20、注册XML与库；SimpleSmoother、分段工具及服务器安装头文件与固定版本一致；源码／安装副本两套参数一致且仅时钟不同；navigation_launch与默认XML安装副本一致，两棵树SmoothPath数量均为0。",[1211,1218,1219,1222],{},[24,1220,1221],{},"源码能确认："," 6项原配置的读取和使用条件；总更新量收敛门槛；每调用的次数及提前退出；≥11点分段条件；端点位置保留、已有点重复细化、最多4次额外调用及共享计数；递归预算／返回值边界；默认权重、地图快照、内部点检查与服务后置检查的区别；Action状态与was_completed分离。",[1211,1224,1225,1228],{},[24,1226,1227],{},"本次验证范围："," 没有发起SmoothPath、修改运行参数或默认BT，也没有实测平滑耗时、路径形状、碰撞或底盘跟踪效果；迭代更新量及点数长度示例为源码计算。",[1211,1230,1231,1234],{},[24,1232,1233],{},"实物待核实："," 若后续接入，检查实际请求与FollowPath输入、地图新鲜度／参考系、轮廓TF和yaw语义、原路径到平滑路径的通过空间、部分结果处理、总规划链延迟及跟踪表现；原工程参数与代码保持原样。",[1236,1237,1238],"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 .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":198,"depth":198,"links":1240},[1241],{"id":14,"depth":198,"text":5,"children":1242},[1243,1244],{"id":18,"depth":206,"text":19},{"id":172,"depth":206,"text":172},"0500-1700","2026-09-20","2026-09-20-dao-hang","\u002Fwiki\u002F2026-09-20-dao-hang","导航","md",true,false,{},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1700-smoother-server",{"title":5,"description":35},"wiki\u002F2026-09-20-导航\u002F0500-1700-smoother_server","3-gk6W_-5ynPWcjP1qfHXWTp92eWy1aCHm0NdC5KhzU",[1259,1266,1272,1278,1284,1290,1296,1302,1308,1314,1320,1326,1332,1338,1344,1350,1356,1362,1368,1374,1380,1386,1392,1397,1402,1408,1414,1420,1426,1431,1433,1439,1445,1451,1457,1463,1469,1475],{"path":1260,"stem":1261,"title":1262,"authors":1263,"date":1246,"chapterOrder":1264,"chapterDepth":1265,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0100-jian-jie","wiki\u002F2026-09-20-导航\u002F0100-简介","简介",[7],"0100",0,{"path":1267,"stem":1268,"title":1269,"authors":1270,"date":1246,"chapterOrder":1271,"chapterDepth":1265,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0200-huan-jing-pei-zhi-yu-yun-xing","wiki\u002F2026-09-20-导航\u002F0200-环境配置与运行","环境配置与运行",[7],"0200",{"path":1273,"stem":1274,"title":1275,"authors":1276,"date":1246,"chapterOrder":1277,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0100-robot-description","wiki\u002F2026-09-20-导航\u002F0300-0100-robot_description","robot_description（机器人模型与关节定义）",[7],"0300-0100",{"path":1279,"stem":1280,"title":1281,"authors":1282,"date":1246,"chapterOrder":1283,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\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":1285,"stem":1286,"title":1287,"authors":1288,"date":1246,"chapterOrder":1289,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\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":1291,"stem":1292,"title":1293,"authors":1294,"date":1246,"chapterOrder":1295,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0400-fang-zhen-shi-jue-you-hua","wiki\u002F2026-09-20-导航\u002F0300-0400-仿真视觉优化","仿真视觉优化（可选）",[7],"0300-0400",{"path":1297,"stem":1298,"title":1299,"authors":1300,"date":1246,"chapterOrder":1301,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0500-tian-jia-di-tu","wiki\u002F2026-09-20-导航\u002F0300-0500-添加地图","添加地图",[7],"0300-0500",{"path":1303,"stem":1304,"title":1305,"authors":1306,"date":1246,"chapterOrder":1307,"chapterDepth":1265,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-ji-qi-ren-mo-xing-yu-fang-zhen","wiki\u002F2026-09-20-导航\u002F0300-机器人模型与仿真","机器人模型与仿真",[7],"0300",{"path":1309,"stem":1310,"title":1311,"authors":1312,"date":1246,"chapterOrder":1313,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\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":1315,"stem":1316,"title":1317,"authors":1318,"date":1246,"chapterOrder":1319,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0200-chuan-kou-tong-xin","wiki\u002F2026-09-20-导航\u002F0400-0200-串口通信","Serial_Comm（串口通信）",[7],"0400-0200",{"path":1321,"stem":1322,"title":1323,"authors":1324,"date":1246,"chapterOrder":1325,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0300-shou-bing-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-0300-手柄控制","Joy（手柄控制）",[7],"0400-0300",{"path":1327,"stem":1328,"title":1329,"authors":1330,"date":1246,"chapterOrder":1331,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\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":1333,"stem":1334,"title":1335,"authors":1336,"date":1246,"chapterOrder":1337,"chapterDepth":1265,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-ying-jian-dui-jie-yu-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-硬件对接与控制","硬件对接与控制",[7],"0400",{"path":1339,"stem":1340,"title":1341,"authors":1342,"date":1246,"chapterOrder":1343,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\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":1345,"stem":1346,"title":1347,"authors":1348,"date":1246,"chapterOrder":1349,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\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":1351,"stem":1352,"title":1353,"authors":1354,"date":1246,"chapterOrder":1355,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\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":1357,"stem":1358,"title":1359,"authors":1360,"date":1246,"chapterOrder":1361,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0400-terrain-analysis","wiki\u002F2026-09-20-导航\u002F0500-0400-terrain_analysis","terrain_analysis（近场地面与障碍高差分析）",[7],"0500-0400",{"path":1363,"stem":1364,"title":1365,"authors":1366,"date":1246,"chapterOrder":1367,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\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":1369,"stem":1370,"title":1371,"authors":1372,"date":1246,"chapterOrder":1373,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\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":1375,"stem":1376,"title":1377,"authors":1378,"date":1246,"chapterOrder":1379,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\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":1381,"stem":1382,"title":1383,"authors":1384,"date":1246,"chapterOrder":1385,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\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":1387,"stem":1388,"title":1389,"authors":1390,"date":1246,"chapterOrder":1391,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0900-slam-toolbox","wiki\u002F2026-09-20-导航\u002F0500-0900-slam_toolbox","slam_toolbox（二维地图生成与轨迹优化）",[7],"0500-0900",{"path":423,"stem":1393,"title":1394,"authors":1395,"date":1246,"chapterOrder":1396,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"wiki\u002F2026-09-20-导航\u002F0500-1000-bt_navigator","bt_navigator（行为树导航任务调度）",[7],"0500-1000",{"path":50,"stem":1398,"title":1399,"authors":1400,"date":1246,"chapterOrder":1401,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"wiki\u002F2026-09-20-导航\u002F0500-1100-controller_server","controller_server（路径跟踪、进度检查与到达判定）",[7],"0500-1100",{"path":1403,"stem":1404,"title":1405,"authors":1406,"date":1246,"chapterOrder":1407,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1200-local-costmap","wiki\u002F2026-09-20-导航\u002F0500-1200-local_costmap","local_costmap（局部障碍代价地图）",[7],"0500-1200",{"path":1409,"stem":1410,"title":1411,"authors":1412,"date":1246,"chapterOrder":1413,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1300-global-costmap","wiki\u002F2026-09-20-导航\u002F0500-1300-global_costmap","global_costmap（全局规划代价地图）",[7],"0500-1300",{"path":1415,"stem":1416,"title":1417,"authors":1418,"date":1246,"chapterOrder":1419,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1400-map-server","wiki\u002F2026-09-20-导航\u002F0500-1400-map_server","map_server（已有二维地图加载与发布）",[7],"0500-1400",{"path":1421,"stem":1422,"title":1423,"authors":1424,"date":1246,"chapterOrder":1425,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1500-map-saver","wiki\u002F2026-09-20-导航\u002F0500-1500-map_saver","map_saver（二维栅格地图保存）",[7],"0500-1500",{"path":45,"stem":1427,"title":1428,"authors":1429,"date":1246,"chapterOrder":1430,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"wiki\u002F2026-09-20-导航\u002F0500-1600-planner_server","planner_server（Theta*全局路径规划）",[7],"0500-1600",{"path":1254,"stem":1256,"title":5,"authors":1432,"date":1246,"chapterOrder":1245,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},[7],{"path":1434,"stem":1435,"title":1436,"authors":1437,"date":1246,"chapterOrder":1438,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1800-behavior-server","wiki\u002F2026-09-20-导航\u002F0500-1800-behavior_server","behavior_server（恢复行为与空闲方向移动）",[7],"0500-1800",{"path":1440,"stem":1441,"title":1442,"authors":1443,"date":1246,"chapterOrder":1444,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1900-waypoint-follower","wiki\u002F2026-09-20-导航\u002F0500-1900-waypoint_follower","waypoint_follower（逐点导航与到点等待）",[7],"0500-1900",{"path":1446,"stem":1447,"title":1448,"authors":1449,"date":1246,"chapterOrder":1450,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-2000-velocity-smoother","wiki\u002F2026-09-20-导航\u002F0500-2000-velocity_smoother","velocity_smoother（速度限幅与加减速平滑）",[7],"0500-2000",{"path":1452,"stem":1453,"title":1454,"authors":1455,"date":1246,"chapterOrder":1456,"chapterDepth":187,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\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":1458,"stem":1459,"title":1460,"authors":1461,"date":1246,"chapterOrder":1462,"chapterDepth":1265,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-dao-hang-can-shu","wiki\u002F2026-09-20-导航\u002F0500-导航参数","导航参数",[7],"0500",{"path":1464,"stem":1465,"title":1466,"authors":1467,"date":1246,"chapterOrder":1468,"chapterDepth":1265,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0600-kai-fa-wen-ti-yu-pai-cha","wiki\u002F2026-09-20-导航\u002F0600-开发问题与排查","开发问题与排查",[7],"0600",{"path":1470,"stem":1471,"title":1472,"authors":1473,"date":1246,"chapterOrder":1474,"chapterDepth":1265,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1252},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0700-jue-ce","wiki\u002F2026-09-20-导航\u002F0700-决策","决策",[7],"0700",{"path":1248,"stem":1476,"title":1477,"authors":1478,"date":1246,"chapterOrder":1479,"chapterDepth":1265,"docKey":1247,"docRoot":1248,"docTitle":1249,"isWikiDoc":1251,"isWikiIndex":1251},"wiki\u002F2026-09-20-导航\u002Findex","北极熊导航复现日志",[7],null,[1481,1483,1486,1489],{"name":7,"image":1482},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":1484,"image":1485},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":1487,"image":1488},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":1490,"image":1491},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431906570]