[{"data":1,"prerenderedAt":1531},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0600-fake-vel-transform":3,"wiki-doc-items-2026-09-20-dao-hang":1294,"wiki:author-members":1519},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":460,"chapterOrder":1282,"date":1283,"description":295,"docKey":1284,"docRoot":1285,"docTitle":1286,"extension":1287,"isWikiDoc":1044,"isWikiIndex":1288,"meta":1289,"navigation":1044,"path":1290,"seo":1291,"stem":1292,"wikiDepth":460,"__hash__":1293},"wiki\u002Fwiki\u002F2026-09-20-导航\u002F0500-0600-fake_vel_transform.md","fake_vel_transform（云台系速度转换与底盘自旋）",[7],"董佳辉",{"type":9,"value":10,"toc":1276},"minimark",[11,15,19,40,65,150,161,175,195,200,209,265,275,288,298,301,307,313,316,320,326,329,354,411,424,431,434,439,442,449,568,869,872,877,906,909,925,929,941,962,971,977,981,993,1003,1094,1101,1117,1120,1124,1135,1138,1175,1182,1185,1202,1219,1228,1235,1255,1272],[12,13,5],"h2",{"id":14},"fake_vel_transform云台系速度转换与底盘自旋",[16,17,18],"h3",{"id":18},"速度和旋转究竟参考谁",[20,21,22,39],"p",{},[23,24,25,26,30,31,34,35,38],"strong",{},"当前导航链最终下发的 ",[27,28,29],"code",{},"vx、vy"," 按实际云台自身坐标系 ",[27,32,33],{},"gimbal_yaw"," 表达；",[27,36,37],{},"wz"," 按接口约定是底盘的目标角速度。"," “速度用谁的轴表达”与“哪个部件执行动作”是两件事：用云台的轴描述平移，仍然是让底盘移动；输出旋转指令也没有直接控制云台 yaw 关节。",[20,41,42,43,46,47,54,55,60,61,64],{},"这来自北极熊原包的设计：先用一个朝向较稳定的虚拟系供导航计算，再把速度转换到实际云台系；",[27,44,45],{},"cmd_spin"," 用于叠加底盘自旋。",[48,49,53],"a",{"href":50,"rel":51},"https:\u002F\u002Fgithub.com\u002FSMBU-PolarBear-Robotics-Team\u002Fpb2025_sentry_nav\u002Fblob\u002Fmain\u002Ffake_vel_transform\u002FREADME.md",[52],"nofollow","北极熊原包说明","、",[48,56,59],{"href":57,"rel":58},"https:\u002F\u002Fgithub.com\u002FSMBU-PolarBear-Robotics-Team\u002Fpb2025_sentry_nav\u002Fblob\u002Fmain\u002Ffake_vel_transform\u002Fsrc\u002Ffake_vel_transform.cpp",[52],"原包速度转换源码","。这是这套工程的约定，不能认为所有 ROS2 的 ",[27,62,63],{},"cmd_vel"," 都按云台系表达。",[66,67,68,88],"table",{},[69,70,71],"thead",{},[72,73,74,78,83],"tr",{},[75,76,77],"th",{},"链路阶段",[75,79,80,82],{},[27,81,29],{}," 参考的方向",[75,84,85,87],{},[27,86,37],{}," 的含义",[89,90,91,110,125,139],"tbody",{},[72,92,93,100,107],{},[94,95,96,97],"td",{},"导航控制器计算，再经平滑器得到 ",[27,98,99],{},"cmd_vel_nav2_result",[94,101,102,103,106],{},"虚拟云台系 ",[27,104,105],{},"gimbal_yaw_fake"," 的 x、y 轴",[94,108,109],{},"导航提出的旋转分量；恢复行为也可向该话题提供指令",[72,111,112,117,122],{},[94,113,114,115],{},"本节点发布 ",[27,116,63],{},[94,118,119,120,106],{},"实际云台 yaw 层 ",[27,121,33],{},[94,123,124],{},"输入导航角速度 + 附加自旋角速度",[72,126,127,133,136],{},[94,128,129,132],{},[27,130,131],{},"serial_comm"," 接收并发送给MCU",[94,134,135],{},"原样传递上述云台系分量，没有再转成底盘系",[94,137,138],{},"原样传递已相加的总量，约定由底盘执行",[72,140,141,144,147],{},[94,142,143],{},"MCU驱动底盘",[94,145,146],{},"若控制算法需要底盘系速度，须按机械相对 yaw 换算",[94,148,149],{},"应执行这条底盘目标角速度，不再重复叠加同一自旋量；实际实现待核对",[20,151,152,154,155,157,158,160],{},[27,153,29],{}," 单位为 m\u002Fs，分别沿所选参考系的 x、y 轴；",[27,156,37],{}," 单位为 rad\u002Fs，表示绕 z 轴的旋转速度指令。下面按平面运动、x朝前、y朝左、z朝上的约定解释；正 ",[27,159,37],{}," 从上方看为逆时针。实车轴向、MCU正负号和单位仍需核对。",[20,162,163,166,167,170,171,174],{},[23,164,165],{},"实际云台系是随 yaw 转动的普通机体系，不是世界坐标系。"," 云台朝前时，其 ",[27,168,169],{},"vx>0"," 朝车前；云台向左转90°，同样的正 ",[27,172,173],{},"vx"," 方向就转到车左侧。底盘朝向不变，也不妨碍用另一套轴描述它的运动。",[20,176,177,179,180,182,183,186,187,190,191,194],{},[27,178,105],{}," 是计算用的虚拟系：位置与 ",[27,181,33],{}," 重合，源码广播 ",[27,184,185],{},"gimbal_yaw → gimbal_yaw_fake","，旋转取输入 yaw 的相反数，没有平移。在平面运动、输入位姿与机械 TF 正确且及时更新时，它的水平朝向与 ",[27,188,189],{},"odom"," 对齐，而位置跟着机器人走。它不是 ",[27,192,193],{},"map","，也不是云台或底盘的世界原点；“方向与 odom 对齐”不表示完整坐标系与 odom 重合。源码只抵消 yaw，没有抵消 roll、pitch，坡面上不能直接套用完全水平的结论。",[196,197,199],"h5",{"id":198},"一个直行例子云台左转90车仍沿原方向走","一个直行例子：云台左转90°，车仍沿原方向走",[20,201,202,203,205,206,208],{},"假设底盘朝 ",[27,204,189],{}," 的 +x，云台原本也朝前；现在只有云台向左转90°。导航仍要求沿 ",[27,207,189],{}," 的 +x，以0.3 m\u002Fs移动，自旋为0：",[66,210,211,228],{},[69,212,213],{},[72,214,215,218,223],{},[75,216,217],{},"用哪套轴描述同一个平移目标",[75,219,221],{"align":220},"right",[27,222,173],{},[75,224,225],{"align":220},[27,226,227],{},"vy",[89,229,230,243,256],{},[72,231,232,237,240],{},[94,233,234,235],{},"虚拟系 ",[27,236,105],{},[94,238,239],{"align":220},"0.3",[94,241,242],{"align":220},"0",[72,244,245,251,253],{},[94,246,247,248,250],{},"转换后的实际云台系 ",[27,249,33],{},"，也是串口发送的数值",[94,252,242],{"align":220},[94,254,255],{"align":220},"-0.3",[72,257,258,261,263],{},[94,259,260],{},"MCU正确换算到底盘系后",[94,262,239],{"align":220},[94,264,242],{"align":220},[20,266,267,270,271,274],{},[23,268,269],{},"数值变了，运动目标没有变。"," MCU若把收到的 ",[27,272,273],{},"(0,-0.3)"," 直接当成底盘系分量，就会理解成往车右侧走。该例只解释坐标转换，没有进行车辆运动测试。",[20,276,277,278,281,282,284,285,287],{},"源码使用的角度是 ",[27,279,280],{},"odometry.pose"," 中的 yaw，当前预期为“",[27,283,33],{}," 相对 ",[27,286,189],{}," 的朝向”，同时包含底盘整体朝向与机械相对 yaw 的影响；它不是单独的机械关节角。线速度计算为：",[289,290,296],"pre",{"className":291,"code":293,"language":294,"meta":295},[292],"language-text","vx_out =  cos(θ) × vx_in + sin(θ) × vy_in\nvy_out = -sin(θ) × vx_in + cos(θ) × vy_in\nθ      = 输入里程计位姿中的 yaw，单位 rad\n","text","",[27,297,293],{"__ignoreMap":295},[20,299,300],{},"MCU从云台系换到底盘系时，要另外使用两者的机械相对角。若 q 表示云台系相对底盘系的平面朝向，已计入固定安装关系，方向换算为：",[289,302,305],{"className":303,"code":304,"language":294,"meta":295},[292],"vx_chassis = cos(q) × vx_out - sin(q) × vy_out\nvy_chassis = sin(q) × vx_out + cos(q) × vy_out\nq          = 云台相对底盘的角度，单位 rad\n",[27,306,304],{"__ignoreMap":295},[20,308,309,312],{},[23,310,311],{},"θ 相对 odom，q 相对底盘，二者不能直接混用。"," 不能把MCU世界 IMU 姿态当关节角；q 应由机械相对 yaw与安装零位确定。上述90°例子中，底盘与 odom方向恰好一致，所以两角相同；底盘自己也转向时，就不再相同。",[20,314,315],{},"上位机这一步没有查询云台→底盘 TF，也没有处理不同原点之间的旋转速度补偿；上面的MCU公式仅解释平面方向换轴。原点偏置是否需要处理，要结合真实安装和下位机速度定义核对。",[196,317,319],{"id":318},"wz同一个底盘指令的两项相加","wz：同一个底盘指令的两项相加",[289,321,324],{"className":322,"code":323,"language":294,"meta":295},[292],"wz_final = wz_nav2 + wz_spin\n",[27,325,323],{"__ignoreMap":295},[20,327,328],{},"两项单位相同，都是 rad\u002Fs：",[330,331,332,339,348],"ul",{},[333,334,335,338],"li",{},[27,336,337],{},"wz_nav2","：导航提出的旋转分量，例如调整朝向；它是控制指令，不是测得的云台或底盘转速。",[333,340,341,344,345,347],{},[27,342,343],{},"wz_spin","：人为附加的底盘自旋量，由启动参数或 ",[27,346,45],{}," 消息提供。",[333,349,350,353],{},[27,351,352],{},"wz_final","：发送给底盘的总目标角速度。没有分别给两个机械部件各发一个转速。",[66,355,356,372],{},[69,357,358],{},[72,359,360,363,366,369],{},[75,361,362],{"align":220},"导航旋转分量",[75,364,365],{"align":220},"附加自旋",[75,367,368],{"align":220},"最终输出",[75,370,371],{},"含义",[89,373,374,388,400],{},[72,375,376,379,382,385],{},[94,377,378],{"align":220},"+0.5",[94,380,381],{"align":220},"+1.0",[94,383,384],{"align":220},"+1.5",[94,386,387],{},"同向叠加",[72,389,390,393,395,397],{},[94,391,392],{"align":220},"-0.5",[94,394,381],{"align":220},[94,396,378],{"align":220},[94,398,399],{},"反向抵消一部分",[72,401,402,404,406,408],{},[94,403,242],{"align":220},[94,405,381],{"align":220},[94,407,381],{"align":220},[94,409,410],{},"导航没有要求旋转，仍有附加自旋",[20,412,413,414,416,417,419,420,423],{},"平面运动时，云台和底盘仅水平朝向不同，z轴方向相同；绕 z 的角速度分量不因水平 yaw 换轴而改变，所以源码只旋转 ",[27,415,29],{},"，对 ",[27,418,37],{}," 直接相加。此处没有求导云台 yaw，也没有把云台相对转速作为底盘转速输入。底盘整体转向与 ",[27,421,422],{},"gimbal_yaw_joint"," 的机械相对转动必须分开理解，不能根据话题参考系名称混为同一个动作。",[20,425,426,427,430],{},"当前实物、仿真的 ",[27,428,429],{},"FollowPath.enable_rotation"," 都是 False，普通路径跟踪时该控制器自身给出的导航角速度为0。因此尚未改自旋设置时，实物默认不附加自旋，仿真默认附加3.14 rad\u002Fs，约每2秒一圈。Nav2恢复旋转等行为另有指令来源，速度平滑器也可能保留过渡过程，不能推成整个导航链永远只输出0角速度。",[16,432,433],{"id":433},"参数",[435,436,438],"h4",{"id":437},"ros__parametersros节点参数","ros__parameters（ROS节点参数）",[196,440,441],{"id":441},"参数表",[20,443,444,445,448],{},"本表以当前实物 YAML 为基准；仿真差异单列。",[27,446,447],{},"local_plan_topic"," 没写在这两份 YAML 中，但源码会声明并读取，当前使用其默认值。",[289,450,454],{"className":451,"code":452,"language":453,"meta":295,"style":295},"language-yaml shiki shiki-themes github-light github-dark","fake_vel_transform:\n  ros__parameters:\n    use_sim_time: False\n    odom_topic: \"odometry\"\n    robot_base_frame: \"gimbal_yaw\"\n    fake_robot_base_frame: \"gimbal_yaw_fake\"\n    input_cmd_vel_topic: \"cmd_vel_nav2_result\"\n    output_cmd_vel_topic: \"cmd_vel\"\n    cmd_spin_topic: \"cmd_spin\"\n    init_spin_speed: 0.0\n","yaml",[27,455,456,469,477,490,502,513,524,535,546,557],{"__ignoreMap":295},[457,458,461,465],"span",{"class":459,"line":460},"line",1,[457,462,464],{"class":463},"s9eBZ","fake_vel_transform",[457,466,468],{"class":467},"sVt8B",":\n",[457,470,472,475],{"class":459,"line":471},2,[457,473,474],{"class":463},"  ros__parameters",[457,476,468],{"class":467},[457,478,480,483,486],{"class":459,"line":479},3,[457,481,482],{"class":463},"    use_sim_time",[457,484,485],{"class":467},": ",[457,487,489],{"class":488},"sj4cs","False\n",[457,491,493,496,498],{"class":459,"line":492},4,[457,494,495],{"class":463},"    odom_topic",[457,497,485],{"class":467},[457,499,501],{"class":500},"sZZnC","\"odometry\"\n",[457,503,505,508,510],{"class":459,"line":504},5,[457,506,507],{"class":463},"    robot_base_frame",[457,509,485],{"class":467},[457,511,512],{"class":500},"\"gimbal_yaw\"\n",[457,514,516,519,521],{"class":459,"line":515},6,[457,517,518],{"class":463},"    fake_robot_base_frame",[457,520,485],{"class":467},[457,522,523],{"class":500},"\"gimbal_yaw_fake\"\n",[457,525,527,530,532],{"class":459,"line":526},7,[457,528,529],{"class":463},"    input_cmd_vel_topic",[457,531,485],{"class":467},[457,533,534],{"class":500},"\"cmd_vel_nav2_result\"\n",[457,536,538,541,543],{"class":459,"line":537},8,[457,539,540],{"class":463},"    output_cmd_vel_topic",[457,542,485],{"class":467},[457,544,545],{"class":500},"\"cmd_vel\"\n",[457,547,549,552,554],{"class":459,"line":548},9,[457,550,551],{"class":463},"    cmd_spin_topic",[457,553,485],{"class":467},[457,555,556],{"class":500},"\"cmd_spin\"\n",[457,558,560,563,565],{"class":459,"line":559},10,[457,561,562],{"class":463},"    init_spin_speed",[457,564,485],{"class":467},[457,566,567],{"class":488},"0.0\n",[66,569,570,598],{},[69,571,572],{},[72,573,574,577,580,583,586,589,592,595],{},[75,575,576],{},"参数名",[75,578,579],{},"当前值",[75,581,582],{},"单位",[75,584,585],{},"实车处理建议",[75,587,588],{},"作用",[75,590,591],{},"调大效果",[75,593,594],{},"调小效果",[75,596,597],{},"生效条件／备注",[89,599,600,635,664,693,721,749,777,805,835],{},[72,601,602,607,616,619,624,627,630,632],{},[94,603,604],{},[27,605,606],{},"use_sim_time",[94,608,609,612,613],{},[27,610,611],{},"False","；仿真 ",[27,614,615],{},"True",[94,617,618],{},"不适用，布尔",[94,620,621],{},[23,622,623],{},"上实物前必须核对并正确配置",[94,625,626],{},"控制节点ROS时钟，当前用于输出TF时间戳",[94,628,629],{},"不适用",[94,631,629],{},[94,633,634],{},"0.5 s控制器活跃判断另用系统时间，20 ms定时器也用真实时间；True不会统一这些路径",[72,636,637,642,647,650,654,657,659,661],{},[94,638,639],{},[27,640,641],{},"odom_topic",[94,643,644],{},[27,645,646],{},"\"odometry\"",[94,648,649],{},"不适用，话题名称",[94,651,652],{},[23,653,623],{},[94,655,656],{},"提供用于方向转换的位姿 yaw",[94,658,629],{},[94,660,629],{},[94,662,663],{},"当前预期是 odom 中的 gimbal_yaw 位姿；只读 pose，不使用 twist；不校验消息参考系",[72,665,666,671,676,679,683,686,688,690],{},[94,667,668],{},[27,669,670],{},"robot_base_frame",[94,672,673],{},[27,674,675],{},"\"gimbal_yaw\"",[94,677,678],{},"不适用，坐标系名称",[94,680,681],{},[23,682,623],{},[94,684,685],{},"指定输出速度的约定参考系及虚拟TF的父系",[94,687,629],{},[94,689,629],{},[94,691,692],{},"当前是实际 yaw 云台层，名称里的 base 不表示一定为底盘；源码不查询这个系的TF",[72,694,695,700,705,707,711,714,716,718],{},[94,696,697],{},[27,698,699],{},"fake_robot_base_frame",[94,701,702],{},[27,703,704],{},"\"gimbal_yaw_fake\"",[94,706,678],{},[94,708,709],{},[23,710,623],{},[94,712,713],{},"指定供导航使用的虚拟系及所广播TF的子系",[94,715,629],{},[94,717,629],{},[94,719,720],{},"需与局部代价地图等使用者一致；与真实云台原点重合，平面朝向抵消输入 yaw；不是机械关节",[72,722,723,727,733,735,739,742,744,746],{},[94,724,725],{},[27,726,447],{},[94,728,729,732],{},[27,730,731],{},"\"local_plan\"","，源码默认；YAML未配置",[94,734,649],{},[94,736,737],{},[23,738,623],{},[94,740,741],{},"用路径时间戳与里程计近似配对，并判断控制器活跃",[94,743,629],{},[94,745,629],{},[94,747,748],{},"不使用路径几何来转速度；与最新无时间戳的速度间接配合，不能保证三者同一时刻",[72,750,751,756,761,763,767,770,772,774],{},[94,752,753],{},[27,754,755],{},"input_cmd_vel_topic",[94,757,758],{},[27,759,760],{},"\"cmd_vel_nav2_result\"",[94,762,649],{},[94,764,765],{},[23,766,623],{},[94,768,769],{},"接收虚拟系中表达的导航速度指令",[94,771,629],{},[94,773,629],{},[94,775,776],{},"类型 Twist，无 frame_id／时间戳；不能仅按字段名判断方向；当前接平滑器及导航行为输出",[72,778,779,784,789,791,795,798,800,802],{},[94,780,781],{},[27,782,783],{},"output_cmd_vel_topic",[94,785,786],{},[27,787,788],{},"\"cmd_vel\"",[94,790,649],{},[94,792,793],{},[23,794,623],{},[94,796,797],{},"发布转换后的线速度与相加后的角速度",[94,799,629],{},[94,801,629],{},[94,803,804],{},"类型 Twist；串口按原值接收，须与MCU约定一致；直接发同名话题的其他入口应另行核对",[72,806,807,812,817,820,825,828,830,832],{},[94,808,809],{},[27,810,811],{},"cmd_spin_topic",[94,813,814],{},[27,815,816],{},"\"cmd_spin\"",[94,818,819],{},"不适用，话题名称；消息数值为 rad\u002Fs",[94,821,822],{},[23,823,824],{},"根据实际功能需求开启或设置",[94,826,827],{},"接收并保存新的附加底盘自旋量",[94,829,629],{},[94,831,629],{},[94,833,834],{},"类型 example_interfaces\u002Fmsg\u002FFloat32；消息覆盖旧值，不是逐次累加；收到消息本身不立即发布速度",[72,836,837,842,850,853,857,860,863,866],{},[94,838,839],{},[27,840,841],{},"init_spin_speed",[94,843,844,612,847],{},[27,845,846],{},"0.0",[27,848,849],{},"3.14",[94,851,852],{},"rad\u002Fs，带正负号的附加量",[94,854,855],{},[23,856,824],{},[94,858,859],{},"启动时给附加自旋量赋初值",[94,861,862],{},"数值更偏正方向，最终效果取决于导航分量与符号",[94,864,865],{},"数值更偏负方向；负值绝对值变大可能反向转得更快",[94,867,868],{},"并非最大转速；cmd_spin覆盖后使用新值；0只关闭附加量，不保证导航角速度为0",[196,870,871],{"id":871},"参数详解",[873,874,876],"h6",{"id":875},"odom_topicrobot_base_frame-与-fake_robot_base_frame输入里程计与真实虚拟云台系","odom_topic、robot_base_frame 与 fake_robot_base_frame（输入里程计与真实、虚拟云台系）",[20,878,879,881,882,885,886,889,890,892,893,896,897,899,900,902,903,905],{},[27,880,641],{}," 当前接 ",[27,883,884],{},"sensor_scan_generation"," 的 ",[27,887,888],{},"odometry","；消息位姿参考系预期为 ",[27,891,189],{},"，",[27,894,895],{},"child_frame_id"," 为 ",[27,898,33],{},"。本节点读这个位姿的 yaw，发布父系 ",[27,901,33],{}," 到子系 ",[27,904,105],{}," 的反向 yaw 变换，约50 Hz，平移为零。",[20,907,908],{},"因此，换话题或改坐标系名称前，必须同时检查输入位姿究竟属于谁。改名字不会把底盘位姿自动变成云台位姿，也不会把世界 IMU 姿态变成关节角。源码没有查询或校验这些关系；上游内部 IMU→雷达转换、机械TF失败返回单位变换等已记录问题，也可能使这里用错角度。",[20,910,911,912,914,915,54,917,920,921,924],{},"MID360继续挂在 ",[27,913,33],{},"，随实际 yaw、不随实际 pitch 转动；实际 yaw、pitch 分别只在 ",[27,916,422],{},[27,918,919],{},"gimbal_pitch_joint","，两个 odom 关节固定。虚拟系不是增加第二个实际 yaw，串口 JointState仍按机械相对角填 ",[27,922,923],{},"{relative_pitch, relative_yaw, 0, 0}","。",[873,926,928],{"id":927},"input_cmd_vel_topicoutput_cmd_vel_topic-与mcu配合速度输入与输出话题","input_cmd_vel_topic、output_cmd_vel_topic 与MCU配合（速度输入与输出话题）",[20,930,931,932,934,935,938,939,924],{},"当前跟踪控制器把路径转到局部代价地图的机体系；该系配置为 ",[27,933,105],{},"，据此计算 x、y速度。跟踪输出经 ",[27,936,937],{},"cmd_vel_controller → velocity_smoother → cmd_vel_nav2_result","，再进入本节点；导航行为也可输出到 ",[27,940,99],{},[20,942,943,944,946,947,950,951,954,955,958,959,961],{},"转换后发布的 ",[27,945,63],{}," 是 ",[27,948,949],{},"geometry_msgs\u002Fmsg\u002FTwist","，消息本身没有写明坐标系，也没有时间戳。输出变量名字虽然含 ",[27,952,953],{},"chassis","，源码只是用输入 yaw 旋转平面分量，并未把速度再转换到 ",[27,956,957],{},"base_footprint"," 或 ",[27,960,953],{},"。判断方向要看配置、计算和上下游约定，不能靠变量名或“最后给底盘用”推断它已是底盘系。",[20,963,964,966,967,970],{},[27,965,131],{}," 直接把 ",[27,968,969],{},"linear.x、linear.y、angular.z"," 写入协议字段，按周期发送，没有用 JointState再换方向。MCU需核对四件事：线速度是否按云台系接收；机械相对 yaw 的零位与正负号；m\u002Fs与rad\u002Fs的单位；角速度是否已经包含自旋、是否会重复相加。当前没有核对MCU执行代码或实物响应，不能把上位机约定写成下位机已正确实现。",[20,972,973,974,976],{},"这条参考系结论只针对上述导航链。手柄等若绕过本节点直接发布 ",[27,975,63],{},"，不自动获得同样的转换；它们的速度参考系及同名话题的使用方式需要另行核对，本块不展开修改。",[873,978,980],{"id":979},"init_spin_speed-与-cmd_spin_topic改的是附加量","init_spin_speed 与 cmd_spin_topic：改的是附加量",[20,982,983,984,987,988],{},"当前实物 ",[27,985,986],{},"init_spin_speed=0.0","，仿真为3.14。本节原先统一写“默认3.14 rad\u002Fs”，现按两份配置区分；前文“数据对接”仍保留3.14示例，不代表当前实物默认值，本轮不改写该旧章节。北极熊官方实物 YAML 当前采用3.14，这是原包设置，当前工程的具体值应以本表为准。",[48,989,992],{"href":990,"rel":991},"https:\u002F\u002Fgithub.com\u002FSMBU-PolarBear-Robotics-Team\u002Fpb2025_sentry_nav\u002Fblob\u002Fmain\u002Fpb2025_nav_bringup\u002Fconfig\u002Freality\u002Fnav2_params.yaml",[52],"北极熊官方配置",[20,994,995,996,999,1000,1002],{},"启动初值只用于给 ",[27,997,998],{},"spin_speed_"," 赋值；收到 ",[27,1001,45],{}," 后直接用消息数值替换，后续一直保留，源码没有自动恢复初值或消息过期规则。重启时才重新使用启动参数。下面保留话题使用示例，仅作为说明，本轮没有执行：",[289,1004,1008],{"className":1005,"code":1006,"language":1007,"meta":295,"style":295},"language-bash shiki shiki-themes github-light github-dark","# 设置附加自旋速度为 +1 rad\u002Fs，约每秒 57.3°\nros2 topic pub --once \u002Fcmd_spin example_interfaces\u002Fmsg\u002FFloat32 \"{data: 1.0}\"\n\n# 改为反方向自旋\nros2 topic pub --once \u002Fcmd_spin example_interfaces\u002Fmsg\u002FFloat32 \"{data: -1.0}\"\n\n# 关闭附加自旋\nros2 topic pub --once \u002Fcmd_spin example_interfaces\u002Fmsg\u002FFloat32 \"{data: 0.0}\"\n","bash",[27,1009,1010,1016,1040,1046,1051,1068,1072,1077],{"__ignoreMap":295},[457,1011,1012],{"class":459,"line":460},[457,1013,1015],{"class":1014},"sJ8bj","# 设置附加自旋速度为 +1 rad\u002Fs，约每秒 57.3°\n",[457,1017,1018,1022,1025,1028,1031,1034,1037],{"class":459,"line":471},[457,1019,1021],{"class":1020},"sScJk","ros2",[457,1023,1024],{"class":500}," topic",[457,1026,1027],{"class":500}," pub",[457,1029,1030],{"class":488}," --once",[457,1032,1033],{"class":500}," \u002Fcmd_spin",[457,1035,1036],{"class":500}," example_interfaces\u002Fmsg\u002FFloat32",[457,1038,1039],{"class":500}," \"{data: 1.0}\"\n",[457,1041,1042],{"class":459,"line":479},[457,1043,1045],{"emptyLinePlaceholder":1044},true,"\n",[457,1047,1048],{"class":459,"line":492},[457,1049,1050],{"class":1014},"# 改为反方向自旋\n",[457,1052,1053,1055,1057,1059,1061,1063,1065],{"class":459,"line":504},[457,1054,1021],{"class":1020},[457,1056,1024],{"class":500},[457,1058,1027],{"class":500},[457,1060,1030],{"class":488},[457,1062,1033],{"class":500},[457,1064,1036],{"class":500},[457,1066,1067],{"class":500}," \"{data: -1.0}\"\n",[457,1069,1070],{"class":459,"line":515},[457,1071,1045],{"emptyLinePlaceholder":1044},[457,1073,1074],{"class":459,"line":526},[457,1075,1076],{"class":1014},"# 关闭附加自旋\n",[457,1078,1079,1081,1083,1085,1087,1089,1091],{"class":459,"line":537},[457,1080,1021],{"class":1020},[457,1082,1024],{"class":500},[457,1084,1027],{"class":500},[457,1086,1030],{"class":488},[457,1088,1033],{"class":500},[457,1090,1036],{"class":500},[457,1092,1093],{"class":500}," \"{data: 0.0}\"\n",[20,1095,1096,1097,1100],{},"上面是无命名空间示例。相对话题名会受启动命名空间影响，常见仿真为 ",[27,1098,1099],{},"\u002Fred_standard_robot1\u002Fcmd_spin","；实际以启动的 namespace为准，实物也不一定就是根目录话题。",[20,1102,1103,1106,1107,1110,1111,1113,1114,1116],{},[23,1104,1105],{},"附加量设为0，只关自旋附加项；输入速度全零，也不会自动清掉自旋附加项。"," 输入全零且 ",[27,1108,1109],{},"spin_speed_≠0"," 时，转换仍会输出非零角速度。收到 ",[27,1112,45],{}," 也只改变量，没有立刻发布新 ",[27,1115,63],{},"；之后进入速度处理回调才体现新值。它本身不是持续输出速度的独立旋转控制器。",[20,1118,1119],{},"源码直接相加，没有对最终角速度限幅或平滑。上游平滑器处理的是相加之前的速度，不能据其限值认定相加后的总量已受同样限制。是否适合实车需结合底盘能力及下位机限制核对，本轮不调整转速。",[873,1121,1123],{"id":1122},"local_plan_topicuse_sim_time-与源码疑点","local_plan_topic、use_sim_time 与源码疑点",[20,1125,1126,1127,1130,1131,1134],{},"本节点近似配对的是 ",[27,1128,1129],{},"Odometry"," 和 ",[27,1132,1133],{},"Path","，不是带时间戳的速度；输入速度没有时间戳，只缓存最近值。收到局部路径会刷新“控制器活跃”时间；最近0.5秒内有路径时，非零速度等待配对回调处理，否则直接按当前保存的 yaw 转换。近似配对不能证明路径、位姿、速度对应同一时刻。",[20,1136,1137],{},"以下是源码能确认的缺口，实际影响尚未运行验证：",[330,1139,1140,1150,1156,1162],{},[333,1141,1142,1145,1146,1149],{},[23,1143,1144],{},"首帧方向："," ",[27,1147,1148],{},"current_robot_base_angle_"," 未显式初始化，发布TF与转换速度前也没有“已取得有效 yaw”的保护；首个有效里程计前的结果不能视为可靠。",[333,1151,1152,1155],{},[23,1153,1154],{},"旧速度复用："," 配对回调使用后没有清空缓存速度。零速度走直接发布分支，却没有清掉先前缓存的非零指令；之后存在再次通过配对回调发布旧指令的路径。",[333,1157,1158,1161],{},[23,1159,1160],{},"超时含义："," 写死的0.5秒只检查最近是否收到局部路径，不检查速度指令的新鲜度，也不是自动停车机制；20 ms定时器只发布TF，不会定时发布停车速度。",[333,1163,1164,1167,1168,1171,1172,1174],{},[23,1165,1166],{},"时钟混用："," 活跃时间判断使用默认 ",[27,1169,1170],{},"rclcpp::Clock()","，Humble中是系统时间；TF时间戳使用节点时钟，可受 ",[27,1173,606],{}," 影响，定时器又用真实时间。True不能让这些步骤统一按仿真时钟运行。",[20,1176,1177,1178,1181],{},"这里不展开此前搁置的导航走停或 ",[27,1179,1180],{},"map→odom"," 时效排查，仅记录本节点的代码前提。",[873,1183,1184],{"id":1184},"启动来源与当前验证范围",[20,1186,1187,1188,1191,1192,1195,1196,1198,1199,1201],{},"整套 reality／simulation 启动分别默认使用对应目录的 ",[27,1189,1190],{},"nav2_params.yaml","，可由 ",[27,1193,1194],{},"params_file"," 指定；导航 launch给节点或组件加载处理后的参数文件，并重写已有 ",[27,1197,606],{},"。两种模式都把该节点命名为 ",[27,1200,464],{},"，匹配 YAML。",[20,1203,1204,1205,1208,1209,1211,1212,1215,1216,1218],{},"包内独立 ",[27,1206,1207],{},"fake_vel_transform_launch.py"," 只传 ",[27,1210,606],{},"，默认 True，不读取整套 YAML；其余采用C++默认值，例如参考系 ",[27,1213,1214],{},"gimbal_link\u002Fgimbal_link_fake","、里程计 ",[27,1217,189],{},"、自旋0，输入／输出速度话题默认还是空字符串。不能把这个独立入口当作已配置好的整套导航启动。",[20,1220,1221,1222,1224,1225,1227],{},"8项自定义参数仅在构造时读取，没有动态参数更新回调；运行时写同名参数不会更新成员、重建话题或改变初始自旋。ROS标准的 ",[27,1223,606],{}," 由节点时钟处理，运行时改变自旋应通过 ",[27,1226,45],{},"，两者不要混淆。",[20,1229,1230,1231,1234],{},"本轮在 ",[27,1232,1233],{},"ysu_ros_humble"," 中只查询环境、安装路径与文件，确认独立 launch、导航 launch和两份 YAML 与当前源码文件一致，并核对Humble时钟默认类型；没有启动节点、发送上述消息或进行运动测试。",[330,1236,1237,1243,1249],{},[333,1238,1239,1242],{},[23,1240,1241],{},"源码能确认："," 导航输入与输出的参考系约定、二维速度换轴、角速度直接相加、串口原样传值、实物／仿真默认差异、参数读取方式及上述代码缺口。",[333,1244,1245,1248],{},[23,1246,1247],{},"仿真已观察："," 2026-10-08仅检查独立 Point-LIO 的静止和约20 cm往返；没有验证本节点、独立云台 yaw、MCU速度换算、附加自旋或停车行为。本节90°例子与相加表均为计算示例。",[333,1250,1251,1254],{},[23,1252,1253],{},"必须实物或下位机源码核实："," 轴向与单位、机械相对 yaw零位及方向、输入位姿是否正确、MCU是否把云台系线速度转到底盘执行方向、最终角速度的执行对象与限制，以及是否重复叠加自旋。此前重力方向和点时间单位问题仍保留待核实。",[20,1256,1257,1258,1261,1262,54,1264,1267,1268,1271],{},"源码位置：",[27,1259,1260],{},"src\u002Fpb2025_sentry_nav\u002Ffake_vel_transform\u002Fsrc\u002Ffake_vel_transform.cpp","、对应头文件及 README；上游：",[27,1263,884],{},[27,1265,1266],{},"pb_omni_pid_pursuit_controller"," 和导航 launch；串口：",[27,1269,1270],{},"src\u002Fserial_comm\u002Fsrc\u002Fserial_comm.cpp","。本轮仅修改日志这一参数块，工程源码、配置和参数值均保留。",[1273,1274,1275],"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);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":295,"searchDepth":471,"depth":471,"links":1277},[1278],{"id":14,"depth":471,"text":5,"children":1279},[1280,1281],{"id":18,"depth":479,"text":18},{"id":433,"depth":479,"text":433},"0500-0600","2026-09-20","2026-09-20-dao-hang","\u002Fwiki\u002F2026-09-20-dao-hang","导航","md",false,{},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0600-fake-vel-transform",{"title":5,"description":295},"wiki\u002F2026-09-20-导航\u002F0500-0600-fake_vel_transform","4aiY1iLUGxn3U-gvszfwvTBZUWcpJLUnPvtqXzDpExY",[1295,1302,1308,1314,1320,1326,1332,1338,1344,1350,1356,1362,1368,1374,1380,1386,1392,1398,1404,1406,1412,1418,1424,1430,1436,1442,1448,1454,1460,1466,1472,1478,1484,1490,1496,1502,1508,1514],{"path":1296,"stem":1297,"title":1298,"authors":1299,"date":1283,"chapterOrder":1300,"chapterDepth":1301,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0100-jian-jie","wiki\u002F2026-09-20-导航\u002F0100-简介","简介",[7],"0100",0,{"path":1303,"stem":1304,"title":1305,"authors":1306,"date":1283,"chapterOrder":1307,"chapterDepth":1301,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0200-huan-jing-pei-zhi-yu-yun-xing","wiki\u002F2026-09-20-导航\u002F0200-环境配置与运行","环境配置与运行",[7],"0200",{"path":1309,"stem":1310,"title":1311,"authors":1312,"date":1283,"chapterOrder":1313,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0100-robot-description","wiki\u002F2026-09-20-导航\u002F0300-0100-robot_description","robot_description（机器人模型与关节定义）",[7],"0300-0100",{"path":1315,"stem":1316,"title":1317,"authors":1318,"date":1283,"chapterOrder":1319,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\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":1321,"stem":1322,"title":1323,"authors":1324,"date":1283,"chapterOrder":1325,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\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":1327,"stem":1328,"title":1329,"authors":1330,"date":1283,"chapterOrder":1331,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0400-fang-zhen-shi-jue-you-hua","wiki\u002F2026-09-20-导航\u002F0300-0400-仿真视觉优化","仿真视觉优化（可选）",[7],"0300-0400",{"path":1333,"stem":1334,"title":1335,"authors":1336,"date":1283,"chapterOrder":1337,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0500-tian-jia-di-tu","wiki\u002F2026-09-20-导航\u002F0300-0500-添加地图","添加地图",[7],"0300-0500",{"path":1339,"stem":1340,"title":1341,"authors":1342,"date":1283,"chapterOrder":1343,"chapterDepth":1301,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-ji-qi-ren-mo-xing-yu-fang-zhen","wiki\u002F2026-09-20-导航\u002F0300-机器人模型与仿真","机器人模型与仿真",[7],"0300",{"path":1345,"stem":1346,"title":1347,"authors":1348,"date":1283,"chapterOrder":1349,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\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":1351,"stem":1352,"title":1353,"authors":1354,"date":1283,"chapterOrder":1355,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0200-chuan-kou-tong-xin","wiki\u002F2026-09-20-导航\u002F0400-0200-串口通信","Serial_Comm（串口通信）",[7],"0400-0200",{"path":1357,"stem":1358,"title":1359,"authors":1360,"date":1283,"chapterOrder":1361,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0300-shou-bing-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-0300-手柄控制","Joy（手柄控制）",[7],"0400-0300",{"path":1363,"stem":1364,"title":1365,"authors":1366,"date":1283,"chapterOrder":1367,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\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":1369,"stem":1370,"title":1371,"authors":1372,"date":1283,"chapterOrder":1373,"chapterDepth":1301,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-ying-jian-dui-jie-yu-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-硬件对接与控制","硬件对接与控制",[7],"0400",{"path":1375,"stem":1376,"title":1377,"authors":1378,"date":1283,"chapterOrder":1379,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\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":1381,"stem":1382,"title":1383,"authors":1384,"date":1283,"chapterOrder":1385,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\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":1387,"stem":1388,"title":1389,"authors":1390,"date":1283,"chapterOrder":1391,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\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":1393,"stem":1394,"title":1395,"authors":1396,"date":1283,"chapterOrder":1397,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0400-terrain-analysis","wiki\u002F2026-09-20-导航\u002F0500-0400-terrain_analysis","terrain_analysis（近场地面与障碍高差分析）",[7],"0500-0400",{"path":1399,"stem":1400,"title":1401,"authors":1402,"date":1283,"chapterOrder":1403,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\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":1290,"stem":1292,"title":5,"authors":1405,"date":1283,"chapterOrder":1282,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},[7],{"path":1407,"stem":1408,"title":1409,"authors":1410,"date":1283,"chapterOrder":1411,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\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":1413,"stem":1414,"title":1415,"authors":1416,"date":1283,"chapterOrder":1417,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\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":1419,"stem":1420,"title":1421,"authors":1422,"date":1283,"chapterOrder":1423,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0900-slam-toolbox","wiki\u002F2026-09-20-导航\u002F0500-0900-slam_toolbox","slam_toolbox（二维地图生成与轨迹优化）",[7],"0500-0900",{"path":1425,"stem":1426,"title":1427,"authors":1428,"date":1283,"chapterOrder":1429,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1000-bt-navigator","wiki\u002F2026-09-20-导航\u002F0500-1000-bt_navigator","bt_navigator（行为树导航任务调度）",[7],"0500-1000",{"path":1431,"stem":1432,"title":1433,"authors":1434,"date":1283,"chapterOrder":1435,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1100-controller-server","wiki\u002F2026-09-20-导航\u002F0500-1100-controller_server","controller_server（路径跟踪、进度检查与到达判定）",[7],"0500-1100",{"path":1437,"stem":1438,"title":1439,"authors":1440,"date":1283,"chapterOrder":1441,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1200-local-costmap","wiki\u002F2026-09-20-导航\u002F0500-1200-local_costmap","local_costmap（局部障碍代价地图）",[7],"0500-1200",{"path":1443,"stem":1444,"title":1445,"authors":1446,"date":1283,"chapterOrder":1447,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1300-global-costmap","wiki\u002F2026-09-20-导航\u002F0500-1300-global_costmap","global_costmap（全局规划代价地图）",[7],"0500-1300",{"path":1449,"stem":1450,"title":1451,"authors":1452,"date":1283,"chapterOrder":1453,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1400-map-server","wiki\u002F2026-09-20-导航\u002F0500-1400-map_server","map_server（已有二维地图加载与发布）",[7],"0500-1400",{"path":1455,"stem":1456,"title":1457,"authors":1458,"date":1283,"chapterOrder":1459,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1500-map-saver","wiki\u002F2026-09-20-导航\u002F0500-1500-map_saver","map_saver（二维栅格地图保存）",[7],"0500-1500",{"path":1461,"stem":1462,"title":1463,"authors":1464,"date":1283,"chapterOrder":1465,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\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":1467,"stem":1468,"title":1469,"authors":1470,"date":1283,"chapterOrder":1471,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1700-smoother-server","wiki\u002F2026-09-20-导航\u002F0500-1700-smoother_server","smoother_server（全局路径平滑）",[7],"0500-1700",{"path":1473,"stem":1474,"title":1475,"authors":1476,"date":1283,"chapterOrder":1477,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1800-behavior-server","wiki\u002F2026-09-20-导航\u002F0500-1800-behavior_server","behavior_server（恢复行为与空闲方向移动）",[7],"0500-1800",{"path":1479,"stem":1480,"title":1481,"authors":1482,"date":1283,"chapterOrder":1483,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1900-waypoint-follower","wiki\u002F2026-09-20-导航\u002F0500-1900-waypoint_follower","waypoint_follower（逐点导航与到点等待）",[7],"0500-1900",{"path":1485,"stem":1486,"title":1487,"authors":1488,"date":1283,"chapterOrder":1489,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-2000-velocity-smoother","wiki\u002F2026-09-20-导航\u002F0500-2000-velocity_smoother","velocity_smoother（速度限幅与加减速平滑）",[7],"0500-2000",{"path":1491,"stem":1492,"title":1493,"authors":1494,"date":1283,"chapterOrder":1495,"chapterDepth":460,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\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":1497,"stem":1498,"title":1499,"authors":1500,"date":1283,"chapterOrder":1501,"chapterDepth":1301,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-dao-hang-can-shu","wiki\u002F2026-09-20-导航\u002F0500-导航参数","导航参数",[7],"0500",{"path":1503,"stem":1504,"title":1505,"authors":1506,"date":1283,"chapterOrder":1507,"chapterDepth":1301,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0600-kai-fa-wen-ti-yu-pai-cha","wiki\u002F2026-09-20-导航\u002F0600-开发问题与排查","开发问题与排查",[7],"0600",{"path":1509,"stem":1510,"title":1511,"authors":1512,"date":1283,"chapterOrder":1513,"chapterDepth":1301,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1288},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0700-jue-ce","wiki\u002F2026-09-20-导航\u002F0700-决策","决策",[7],"0700",{"path":1285,"stem":1515,"title":1516,"authors":1517,"date":1283,"chapterOrder":1518,"chapterDepth":1301,"docKey":1284,"docRoot":1285,"docTitle":1286,"isWikiDoc":1044,"isWikiIndex":1044},"wiki\u002F2026-09-20-导航\u002Findex","北极熊导航复现日志",[7],null,[1520,1522,1525,1528],{"name":7,"image":1521},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":1523,"image":1524},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":1526,"image":1527},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":1529,"image":1530},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431906179]