[{"data":1,"prerenderedAt":2093},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-2100-pb-teleop-twist-joy-node":3,"wiki-doc-items-2026-09-20-dao-hang":1858,"wiki:author-members":2081},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":278,"chapterOrder":1846,"date":1847,"description":149,"docKey":1848,"docRoot":1849,"docTitle":1850,"extension":1851,"isWikiDoc":340,"isWikiIndex":1852,"meta":1853,"navigation":340,"path":1854,"seo":1855,"stem":1856,"wikiDepth":278,"__hash__":1857},"wiki\u002Fwiki\u002F2026-09-20-导航\u002F0500-2100-pb_teleop_twist_joy_node.md","pb_teleop_twist_joy_node（手柄输入与可替换控制入口）",[7],"董佳辉",{"type":9,"value":10,"toc":1840},"minimark",[11,15,19,27,41,100,114,119,125,139,142,152,246,257,260,267,637,641,645,858,861,866,874,877,880,887,891,899,902,905,908,912,915,918,1207,1218,1222,1225,1508,1512,1515,1521,1529,1532,1536,1539,1542,1621,1624,1628,1631,1755,1768,1771,1803,1806,1809,1836],[12,13,5],"h2",{"id":14},"pb_teleop_twist_joy_node手柄输入与可替换控制入口",[16,17,18],"h3",{"id":18},"是否必须使用北极熊的手柄节点",[20,21,22,26],"p",{},[23,24,25],"strong",{},"可以不用，可以自己写。对当前工程，更建议保留现成joy／joy_linux手柄驱动，继续完善已有joy_bringup的映射与控制逻辑；北极熊节点保留作原工程复现参考。"," 自主导航需要目标请求和速度执行链，不要求必须通过本手柄节点发目标。",[20,28,29,30,33,34],{},"本节点提供两种不同功能：manual_control把摇杆映射成底盘速度，auto_control把摇杆映射成相对机器人的导航目标；两种模式都会把云台摇杆积分成关节目标位置。当前配置为auto_control，因此底盘x、y的2.5／4.0在这条分支是",[23,31,32],{},"目标偏移米数","，不是实车速度上限。",[35,36,40],"a",{"href":37,"rel":38},"https:\u002F\u002Fgithub.com\u002FSMBU-PolarBear-Robotics-Team\u002Fpb_teleop_twist_joy\u002Fblob\u002F4a26966cb7958553677f4fe876d003c682c52b6d\u002Fsrc\u002Fpb_teleop_twist_joy.cpp",[39],"nofollow","上游模式说明与源码",[42,43,44,60],"table",{},[45,46,47],"thead",{},[48,49,50,54,57],"tr",{},[51,52,53],"th",{},"方案",[51,55,56],{},"适用情况",[51,58,59],{},"对当前工程的建议",[61,62,63,75,89],"tbody",{},[48,64,65,69,72],{},[66,67,68],"td",{},"沿用pb_teleop_twist_joy",[66,70,71],{},"需要复现原包的手柄发Nav2前视目标、云台联动功能",[66,73,74],{},"可以作对照，但先核对本页的目标、取消、限位和启动问题",[48,76,77,80,83],{},[66,78,79],{},"完善自己的joy_bringup",[66,81,82],{},"手动测试底盘／云台，需要符合自己的协议与控制方式",[66,84,85,88],{},[23,86,87],{},"建议作为后续维护方案","；现有实现可继续用，补齐使能、模式选择和统一输出出口",[48,90,91,94,97],{},[66,92,93],{},"官方teleop_twist_joy加独立云台节点",[66,95,96],{},"主要需要通用Joy→Twist，愿意分开处理云台",[66,98,99],{},"可以复用底盘映射；官方通用节点不会自动提供本包的云台积分或手柄发导航目标功能",[20,101,102,103,108,109],{},"上游README本身说明代码较乱、不建议继续基于它扩展，且README更新不及时；这可作为维护选择的参考，具体功能仍以源码为准。官方teleop_twist_joy提供Joy→Twist映射，同样依赖joy处理输入重发，不自带整套机器人控制模式管理。",[35,104,107],{"href":105,"rel":106},"https:\u002F\u002Fgithub.com\u002FSMBU-PolarBear-Robotics-Team\u002Fpb_teleop_twist_joy\u002Fblob\u002F4a26966cb7958553677f4fe876d003c682c52b6d\u002FREADME.md",[39],"北极熊README","、",[35,110,113],{"href":111,"rel":112},"https:\u002F\u002Fgithub.com\u002Fros2\u002Fteleop_twist_joy\u002Fblob\u002Fhumble\u002FREADME.md",[39],"官方Humble说明",[115,116,118],"h4",{"id":117},"当前不使用北极熊节点的注释与启动不一致","当前“不使用北极熊节点”的注释与启动不一致",[20,120,121,122],{},"reality参数块前面已经写了“我们用的自己的teleop_twist_joy_node，不使用北极熊的节点”。但当前实物和仿真主入口仍无条件添加joy_teleop_launch；这个launch实际启动joy的joy_node和pb_teleop_twist_joy_node，安装副本也相同。",[23,123,124],{},"注释没有停掉节点，本参数块不能仅凭注释标成已废弃。",[20,126,127,128,108,132,108,135,138],{},"对应位置：",[129,130,131],"code",{},"实物入口",[129,133,134],{},"仿真入口",[129,136,137],{},"实际启动节点","。这里只核对文件，没有据此声称当前进程一定在运行。",[20,140,141],{},"自己的joy_bringup是另一套独立启动入口，不读取本pb参数分组。若确定替换，应同时调整启动入口、参数与速度出口；仅删YAML块会让仍被启动的pb节点改用源码默认值，不等于禁用它。",[143,144,150],"pre",{"className":145,"code":147,"language":148,"meta":149},[146],"language-text","北极熊当前auto_control：\n    joy → 摇杆x\u002Fy × scale → 机器人参考系中的偏移点\n        → TF换到map → NavigateToPose → Nav2规划／控制 → 速度链\n    joy → 云台角速度 × ROS dt积分 → cmd_gimbal_joint目标位置\n\n自己的joy_bringup：\n    joy_linux → \u002Fjoy → joy_node_cpp\n        ├─ 直接底盘Twist → cmd_vel\n        └─ 定时积分云台目标 → cmd_gimbal_joint\n    不读取本块的enable_button、scale_chassis等参数\n\n替换时的建议接线，尚未实施：\n    导航最终速度 ─┐\n                  ├─ 明确的模式／指令选择 → 唯一执行端输入\n    手动速度 ─────┘\n    两路先统一坐标、单位和自旋含义\n","text","",[129,151,147],{"__ignoreMap":149},[42,153,154,167],{},[45,155,156],{},[48,157,158,161,164],{},[51,159,160],{},"实车上看到的现象",[51,162,163],{},"先核对什么",[51,165,166],{},"当前源码怎样理解",[61,168,169,180,191,202,213,224,235],{},[48,170,171,174,177],{},[66,172,173],{},"已有自己的手柄节点，却还出现pb发目标",[66,175,176],{},"主入口是否仍包含joy_teleop_launch",[66,178,179],{},"当前两套主入口仍会启动pb，注释没有改变启动逻辑",[48,181,182,185,188],{},[66,183,184],{},"把auto_control理解为MCU的自动模式",[66,186,187],{},"发布的是Twist还是NavigateToPose",[66,189,190],{},"本字符串只选择pb内部发送方式，不调用serial的set_mode",[48,192,193,196,199],{},[66,194,195],{},"设scale_chassis.x=2.5，以为车速必为2.5",[66,197,198],{},"当前control_mode",[66,200,201],{},"auto中为目标偏移2.5 m；manual才是线速度比例m\u002Fs",[48,203,204,207,210],{},[66,205,206],{},"按R1没按L1也能控制",[66,208,209],{},"turbo优先判断",[66,211,212],{},"R1本身可进入turbo，不要求同时按L1",[48,214,215,218,221],{},[66,216,217],{},"摇杆回中但上一导航目标仍在走",[66,219,220],{},"回中分支与取消分支",[66,222,223],{},"auto回中只不发新目标；释放使能才走取消路径",[48,225,226,229,232],{},[66,227,228],{},"以为关节scale是目标角度上限",[66,230,231],{},"云台积分公式",[66,233,234],{},"pitch／yaw scale是角速度比例，积分位置没有本包内置上下限",[48,236,237,240,243],{},[66,238,239],{},"自己节点空闲仍覆盖导航速度",[66,241,242],{},"是否持续向最终cmd_vel发零",[66,244,245],{},"现有joy_bringup每10 ms发布，失去输入也发零；需要模式选择，不能与导航直接竞争同一最终话题",[20,247,248,249,252,253,256],{},"本次本地及安装pb包版本为",[23,250,251],{},"1.0.2","，安装头文件与本地一致；本地cpp／头文件去除空白后与上游提交",[23,254,255],{},"4a26966cb7958553677f4fe876d003c682c52b6d","一致。原块和安装副本一致，simulation仅时钟为True。本文保留参数说明，同时明确它是可替换的手柄入口，不是必须选用的导航组件。",[16,258,259],{"id":259},"参数",[20,261,262,263,266],{},"下面原样保留发送的24项参数及注释。表格解释",[23,264,265],{},"pb实现","，不会把这些值套到自己的joy_bringup。若以后从启动中完整移除pb，本组参数才不再参与该节点运行。",[143,268,272],{"className":269,"code":270,"language":271,"meta":149,"style":149},"language-yaml shiki shiki-themes github-light github-dark","pb_teleop_twist_joy_node:\n  ros__parameters:\n    use_sim_time: False\n    robot_base_frame: gimbal_yaw\n    control_mode: auto_control    # Option: auto_control, manual_control\n\n    require_enable_button: true\n    enable_button: 4              # L1 shoulder button\n    enable_turbo_button: 5        # R1 shoulder button\n\n    axis_chassis:\n      x: 1                        # Left thumb stick vertical\n      y: 0                        # Left thumb stick horizontal\n      yaw: 6                      # button_left and button_right\n    scale_chassis:\n      x: 2.5\n      y: 2.5\n      yaw: 3.0\n    scale_chassis_turbo:\n      x: 4.0\n      y: 4.0\n      yaw: 6.0\n\n    axis_gimbal:\n      roll: -1                    # Disable\n      pitch: 4                    # Right thumb stick vertical\n      yaw: 3                      # Right thumb stick horizontal\n    scale_gimbal:\n      roll: 0.0\n      pitch: -1.0\n      yaw: 2.5\n    scale_gimbal_turbo:\n      roll: 0.0\n      pitch: -1.5\n      yaw: 3.5\n","yaml",[129,273,274,287,295,308,320,335,342,353,367,381,386,394,408,422,436,444,454,463,473,481,491,500,510,515,523,537,550,563,571,581,591,600,608,617,627],{"__ignoreMap":149},[275,276,279,283],"span",{"class":277,"line":278},"line",1,[275,280,282],{"class":281},"s9eBZ","pb_teleop_twist_joy_node",[275,284,286],{"class":285},"sVt8B",":\n",[275,288,290,293],{"class":277,"line":289},2,[275,291,292],{"class":281},"  ros__parameters",[275,294,286],{"class":285},[275,296,298,301,304],{"class":277,"line":297},3,[275,299,300],{"class":281},"    use_sim_time",[275,302,303],{"class":285},": ",[275,305,307],{"class":306},"sj4cs","False\n",[275,309,311,314,316],{"class":277,"line":310},4,[275,312,313],{"class":281},"    robot_base_frame",[275,315,303],{"class":285},[275,317,319],{"class":318},"sZZnC","gimbal_yaw\n",[275,321,323,326,328,331],{"class":277,"line":322},5,[275,324,325],{"class":281},"    control_mode",[275,327,303],{"class":285},[275,329,330],{"class":318},"auto_control",[275,332,334],{"class":333},"sJ8bj","    # Option: auto_control, manual_control\n",[275,336,338],{"class":277,"line":337},6,[275,339,341],{"emptyLinePlaceholder":340},true,"\n",[275,343,345,348,350],{"class":277,"line":344},7,[275,346,347],{"class":281},"    require_enable_button",[275,349,303],{"class":285},[275,351,352],{"class":306},"true\n",[275,354,356,359,361,364],{"class":277,"line":355},8,[275,357,358],{"class":281},"    enable_button",[275,360,303],{"class":285},[275,362,363],{"class":306},"4",[275,365,366],{"class":333},"              # L1 shoulder button\n",[275,368,370,373,375,378],{"class":277,"line":369},9,[275,371,372],{"class":281},"    enable_turbo_button",[275,374,303],{"class":285},[275,376,377],{"class":306},"5",[275,379,380],{"class":333},"        # R1 shoulder button\n",[275,382,384],{"class":277,"line":383},10,[275,385,341],{"emptyLinePlaceholder":340},[275,387,389,392],{"class":277,"line":388},11,[275,390,391],{"class":281},"    axis_chassis",[275,393,286],{"class":285},[275,395,397,400,402,405],{"class":277,"line":396},12,[275,398,399],{"class":281},"      x",[275,401,303],{"class":285},[275,403,404],{"class":306},"1",[275,406,407],{"class":333},"                        # Left thumb stick vertical\n",[275,409,411,414,416,419],{"class":277,"line":410},13,[275,412,413],{"class":306},"      y",[275,415,303],{"class":285},[275,417,418],{"class":306},"0",[275,420,421],{"class":333},"                        # Left thumb stick horizontal\n",[275,423,425,428,430,433],{"class":277,"line":424},14,[275,426,427],{"class":281},"      yaw",[275,429,303],{"class":285},[275,431,432],{"class":306},"6",[275,434,435],{"class":333},"                      # button_left and button_right\n",[275,437,439,442],{"class":277,"line":438},15,[275,440,441],{"class":281},"    scale_chassis",[275,443,286],{"class":285},[275,445,447,449,451],{"class":277,"line":446},16,[275,448,399],{"class":281},[275,450,303],{"class":285},[275,452,453],{"class":306},"2.5\n",[275,455,457,459,461],{"class":277,"line":456},17,[275,458,413],{"class":306},[275,460,303],{"class":285},[275,462,453],{"class":306},[275,464,466,468,470],{"class":277,"line":465},18,[275,467,427],{"class":281},[275,469,303],{"class":285},[275,471,472],{"class":306},"3.0\n",[275,474,476,479],{"class":277,"line":475},19,[275,477,478],{"class":281},"    scale_chassis_turbo",[275,480,286],{"class":285},[275,482,484,486,488],{"class":277,"line":483},20,[275,485,399],{"class":281},[275,487,303],{"class":285},[275,489,490],{"class":306},"4.0\n",[275,492,494,496,498],{"class":277,"line":493},21,[275,495,413],{"class":306},[275,497,303],{"class":285},[275,499,490],{"class":306},[275,501,503,505,507],{"class":277,"line":502},22,[275,504,427],{"class":281},[275,506,303],{"class":285},[275,508,509],{"class":306},"6.0\n",[275,511,513],{"class":277,"line":512},23,[275,514,341],{"emptyLinePlaceholder":340},[275,516,518,521],{"class":277,"line":517},24,[275,519,520],{"class":281},"    axis_gimbal",[275,522,286],{"class":285},[275,524,526,529,531,534],{"class":277,"line":525},25,[275,527,528],{"class":281},"      roll",[275,530,303],{"class":285},[275,532,533],{"class":306},"-1",[275,535,536],{"class":333},"                    # Disable\n",[275,538,540,543,545,547],{"class":277,"line":539},26,[275,541,542],{"class":281},"      pitch",[275,544,303],{"class":285},[275,546,363],{"class":306},[275,548,549],{"class":333},"                    # Right thumb stick vertical\n",[275,551,553,555,557,560],{"class":277,"line":552},27,[275,554,427],{"class":281},[275,556,303],{"class":285},[275,558,559],{"class":306},"3",[275,561,562],{"class":333},"                      # Right thumb stick horizontal\n",[275,564,566,569],{"class":277,"line":565},28,[275,567,568],{"class":281},"    scale_gimbal",[275,570,286],{"class":285},[275,572,574,576,578],{"class":277,"line":573},29,[275,575,528],{"class":281},[275,577,303],{"class":285},[275,579,580],{"class":306},"0.0\n",[275,582,584,586,588],{"class":277,"line":583},30,[275,585,542],{"class":281},[275,587,303],{"class":285},[275,589,590],{"class":306},"-1.0\n",[275,592,594,596,598],{"class":277,"line":593},31,[275,595,427],{"class":281},[275,597,303],{"class":285},[275,599,453],{"class":306},[275,601,603,606],{"class":277,"line":602},32,[275,604,605],{"class":281},"    scale_gimbal_turbo",[275,607,286],{"class":285},[275,609,611,613,615],{"class":277,"line":610},33,[275,612,528],{"class":281},[275,614,303],{"class":285},[275,616,580],{"class":306},[275,618,620,622,624],{"class":277,"line":619},34,[275,621,542],{"class":281},[275,623,303],{"class":285},[275,625,626],{"class":306},"-1.5\n",[275,628,630,632,634],{"class":277,"line":629},35,[275,631,427],{"class":281},[275,633,303],{"class":285},[275,635,636],{"class":306},"3.5\n",[115,638,640],{"id":639},"ros__parameters时钟参考系模式与使能","ros__parameters（时钟、参考系、模式与使能）",[642,643,644],"h5",{"id":644},"参数表",[42,646,647,675],{},[45,648,649],{},[48,650,651,654,657,660,663,666,669,672],{},[51,652,653],{},"参数名",[51,655,656],{},"当前值",[51,658,659],{},"单位",[51,661,662],{},"实车处理建议",[51,664,665],{},"作用",[51,667,668],{},"调大效果",[51,670,671],{},"调小效果",[51,673,674],{},"生效条件／备注",[61,676,677,709,739,769,799,829],{},[48,678,679,684,690,693,698,701,704,706],{},[66,680,681],{},[129,682,683],{},"use_sim_time",[66,685,686,689],{},[129,687,688],{},"False","；仿真True",[66,691,692],{},"不适用，布尔",[66,694,695],{},[23,696,697],{},"上实物前必须核对并正确配置",[66,699,700],{},"决定云台积分dt、目标节流时间和消息stamp使用的ROS时钟",[66,702,703],{},"不适用",[66,705,703],{},[66,707,708],{},"launch重写已有键；本pb源码没有自己的断流定时器；暂停／回跳／长间隔会影响积分和目标发送",[48,710,711,716,722,725,729,732,734,736],{},[66,712,713],{},[129,714,715],{},"robot_base_frame",[66,717,718,721],{},[129,719,720],{},"gimbal_yaw","；源码默认base_link",[66,723,724],{},"不适用，坐标系名称",[66,726,727],{},[23,728,697],{},[66,730,731],{},"auto中指定偏移点所在系，查询map←此系TF",[66,733,703],{},[66,735,703],{},[66,737,738],{},"当前目标偏移沿实际云台轴；manual默认Twist无frame_id，不因这个值自动换轴；Stamped模式仅写header",[48,740,741,746,751,754,759,762,764,766],{},[66,742,743],{},[129,744,745],{},"control_mode",[66,747,748,750],{},[129,749,330],{},"；源码默认manual_control",[66,752,753],{},"不适用，发送方式枚举",[66,755,756],{},[23,757,758],{},"根据实际功能需求开启或设置",[66,760,761],{},"选择手柄发送导航目标或直接底盘速度",[66,763,703],{},[66,765,703],{},[66,767,768],{},"auto走NavigateToPose，manual走Twist；不是MCU模式、不是导航接管仲裁；需用这两个准确名称",[48,770,771,776,782,784,789,792,794,796],{},[66,772,773],{},[129,774,775],{},"require_enable_button",[66,777,778,781],{},[129,779,780],{},"true","；源码默认True",[66,783,692],{},[66,785,786],{},[23,787,788],{},"通常保持当前值，不作为优先调试项",[66,790,791],{},"普通档是否要求按enable_button才能发送底盘／云台指令",[66,793,703],{},[66,795,703],{},[66,797,798],{},"True普通档需L1；turbo另有优先分支，R1可单独使能；False普通档无需按键，不等于提供急停功能",[48,800,801,806,811,814,818,821,824,826],{},[66,802,803],{},[129,804,805],{},"enable_button",[66,807,808,810],{},[129,809,363],{},"；注释L1",[66,812,813],{},"无量纲，Joy.buttons索引",[66,815,816],{},[23,817,697],{},[66,819,820],{},"普通档使能按钮",[66,822,823],{},"不适用，换成其他按钮索引",[66,825,823],{},[66,827,828],{},"按实际Joy按钮数组核对，注释不保证所有手柄／驱动都相同；require=True且无turbo时使用",[48,830,831,836,841,843,847,850,852,855],{},[66,832,833],{},[129,834,835],{},"enable_turbo_button",[66,837,838,840],{},[129,839,377],{},"；注释R1",[66,842,813],{},[66,844,845],{},[23,846,758],{},[66,848,849],{},"优先选择turbo档并使能控制",[66,851,823],{},[66,853,854],{},"不适用；-1表示禁用turbo",[66,856,857],{},"两键都按时turbo优先；R1无需L1；高速档是否需要由真实操作需求决定",[642,859,860],{"id":860},"参数详解",[862,863,865],"h6",{"id":864},"auto_control不是开关自动驾驶模式","auto_control不是“开关自动驾驶模式”",[20,867,868,869],{},"auto按axis_chassis.x／y读取摇杆，再乘当前档scale，作为robot_base_frame中的目标位置偏移，查询最新map←robot_base_frame TF转换后发NavigateToPose。节流为ROS时间至少间隔0.25 s，名义最多4 Hz；实际频率还取决于Joy回调、摇杆幅度和TF。",[35,870,873],{"href":871,"rel":872},"https:\u002F\u002Fgithub.com\u002FSMBU-PolarBear-Robotics-Team\u002Fpb_teleop_twist_joy\u002Fblob\u002F4a26966cb7958553677f4fe876d003c682c52b6d\u002Fsrc\u002Fpb_teleop_twist_joy.cpp#L195",[39],"目标生成",[20,875,876],{},"当前普通档摇杆x=1表示在云台轴前方取2.5 m偏移，turbo取4 m；不是要求底盘分别以2.5／4 m\u002Fs行驶。实际速度由Nav2控制器及速度链决定。目标会随新Joy更新成新的前视点，不是直接转发摇杆速度，也不通过axis_chassis.yaw给目标设朝向。",[20,878,879],{},"源码只填写局部Pose的position.x／y，没有给orientation设置单位四元数；目标姿态构造需要修正／核对，不能把这条分支直接当作已经验证的完整导航目标接口。没有等待Action服务就绪或保留本节点的已接受目标句柄，本次未调用该Action验证结果。",[20,881,882,883],{},"manual则直接发缩放后的Twist，不经本节点TF换轴，也没有内置加减速平滑。默认输出cmd_vel，当前导航平滑器订阅的是cmd_vel_controller；不能因导航有velocity_smoother就认为手柄直发速度也自动经过它。",[35,884,886],{"href":885},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-2000-velocity-smoother","速度链与范围",[862,888,890],{"id":889},"松开使能摇杆回中与断流","松开使能、摇杆回中与断流",[20,892,893,894],{},"enable_turbo_button先判断，满足时直接turbo；否则检查普通档使能。失去使能时，在此前已发送过控制的条件下调用一次sendZeroCommand：auto向navigate_to_pose取消当前时刻以前的目标，同时发布零Twist；不是持续发送零，也不等待确认取消已经完成。",[35,895,898],{"href":896,"rel":897},"https:\u002F\u002Fgithub.com\u002FSMBU-PolarBear-Robotics-Team\u002Fpb_teleop_twist_joy\u002Fblob\u002F4a26966cb7958553677f4fe876d003c682c52b6d\u002Fsrc\u002Fpb_teleop_twist_joy.cpp#L119",[39],"按键分支与停止",[20,900,901],{},"auto中abs(缩放后x)≤0.1且abs(缩放后y)≤0.1，只提前返回，不会取消上一目标。仍按着使能而松开摇杆时，车可能继续完成此前目标，不能用“摇杆回中”代替Nav2取消。0.1比较的还是缩放后的坐标偏移，普通档与turbo对应的原始摇杆范围不同。",[20,903,904],{},"取消按时间作用于同一个navigate_to_pose服务端，不只限定本节点保存的某个目标句柄；若其他决策客户端也发目标，需核对目标所有权。自己实现时宜保存并取消本次手柄目标，而不是靠跨客户端的时间取消充当模式仲裁。",[20,906,907],{},"本pb节点没有Joy输入年龄检查，完全断流时不会再进入释放按键回调。云台积分dt也没有限制长间隔或回跳；重新来消息时可能把新角速度乘整个间隔。头文件的sent_disable_msg_没有显式初始化，这个停止标志还需要修正后才能依赖其初始状态。上述为源码边界，本次没有断流或运动验证。",[115,909,911],{"id":910},"底盘轴与比例auto目标偏移manual速度","底盘轴与比例（auto目标偏移、manual速度）",[642,913,644],{"id":914},"参数表-1",[20,916,917],{},"这里使用完整参数名，明确每个分组的作用。轴索引是Joy.axes，不是Joy.buttons；注释中的左右按钮可能由驱动表达为一根轴，需核对实际消息。",[42,919,920,940],{},[45,921,922],{},[48,923,924,926,928,930,932,934,936,938],{},[51,925,653],{},[51,927,656],{},[51,929,659],{},[51,931,662],{},[51,933,665],{},[51,935,668],{},[51,937,671],{},[51,939,674],{},[61,941,942,972,999,1029,1060,1089,1120,1150,1179],{},[48,943,944,949,953,956,960,963,966,969],{},[66,945,946],{},[129,947,948],{},"axis_chassis.x",[66,950,951],{},[129,952,404],{},[66,954,955],{},"无量纲，axes索引",[66,957,958],{},[23,959,697],{},[66,961,962],{},"选择底盘前后输入轴",[66,964,965],{},"不适用，改输入轴",[66,967,968],{},"不适用；-1禁用",[66,970,971],{},"auto用于目标x偏移，manual用于linear.x；不是速度或距离数值",[48,973,974,979,983,985,989,992,994,996],{},[66,975,976],{},[129,977,978],{},"axis_chassis.y",[66,980,981],{},[129,982,418],{},[66,984,955],{},[66,986,987],{},[23,988,697],{},[66,990,991],{},"选择底盘左右输入轴",[66,993,965],{},[66,995,968],{},[66,997,998],{},"auto用于目标y偏移，manual用于linear.y；需与参考系正方向一致",[48,1000,1001,1006,1010,1012,1017,1020,1022,1024],{},[66,1002,1003],{},[129,1004,1005],{},"axis_chassis.yaw",[66,1007,1008],{},[129,1009,432],{},[66,1011,955],{},[66,1013,1014],{},[23,1015,1016],{},"当前运行不使用这个参数，暂不调整",[66,1018,1019],{},"manual选择底盘旋转输入轴",[66,1021,965],{},[66,1023,968],{},[66,1025,1026,1027],{},"当前auto目标仅取x、y，不用此轴生成底盘转角；6不是buttons",[275,1028,432],{},[48,1030,1031,1036,1041,1044,1048,1051,1054,1057],{},[66,1032,1033],{},[129,1034,1035],{},"scale_chassis.x",[66,1037,1038],{},[129,1039,1040],{},"2.5",[66,1042,1043],{},"当前auto为m／单位轴值；manual为m\u002Fs／单位轴值",[66,1045,1046],{},[23,1047,758],{},[66,1049,1050],{},"普通档前后目标偏移／速度比例",[66,1052,1053],{},"正值增大时偏移更远；manual目标速度更大",[66,1055,1056],{},"正值减小时偏移更近；manual速度更小",[66,1058,1059],{},"当前是目标偏移，不是Nav2速度限制；系数符号决定方向",[48,1061,1062,1067,1071,1073,1077,1080,1083,1086],{},[66,1063,1064],{},[129,1065,1066],{},"scale_chassis.y",[66,1068,1069],{},[129,1070,1040],{},[66,1072,1043],{},[66,1074,1075],{},[23,1076,758],{},[66,1078,1079],{},"普通档左右目标偏移／速度比例",[66,1081,1082],{},"正值增大时横向偏移更远；manual横移更快",[66,1084,1085],{},"正值减小时偏移更近；manual横移更慢",[66,1087,1088],{},"auto的输入门槛在乘比例后检查；不按合距离统一限幅",[48,1090,1091,1096,1101,1104,1108,1111,1114,1117],{},[66,1092,1093],{},[129,1094,1095],{},"scale_chassis.yaw",[66,1097,1098],{},[129,1099,1100],{},"3.0",[66,1102,1103],{},"rad\u002Fs／单位轴值，仅manual",[66,1105,1106],{},[23,1107,1016],{},[66,1109,1110],{},"普通档底盘角速度比例",[66,1112,1113],{},"manual正值增大时转动幅值更大",[66,1115,1116],{},"manual正值减小时转动幅值更小",[66,1118,1119],{},"当前auto未使用；不是自动导航目标yaw或云台角速度",[48,1121,1122,1127,1132,1134,1138,1141,1144,1147],{},[66,1123,1124],{},[129,1125,1126],{},"scale_chassis_turbo.x",[66,1128,1129],{},[129,1130,1131],{},"4.0",[66,1133,1043],{},[66,1135,1136],{},[23,1137,758],{},[66,1139,1140],{},"turbo前后偏移／速度比例",[66,1142,1143],{},"正值增大时目标更远；manual速度更大",[66,1145,1146],{},"正值减小时目标更近；manual速度更小",[66,1148,1149],{},"R1档才使用；manual4 m\u002Fs直发不自动受导航2.5限制",[48,1151,1152,1157,1161,1163,1167,1170,1173,1176],{},[66,1153,1154],{},[129,1155,1156],{},"scale_chassis_turbo.y",[66,1158,1159],{},[129,1160,1131],{},[66,1162,1043],{},[66,1164,1165],{},[23,1166,758],{},[66,1168,1169],{},"turbo左右偏移／速度比例",[66,1171,1172],{},"正值增大时横向目标更远；manual横移更快",[66,1174,1175],{},"正值减小时目标更近；manual横移更慢",[66,1177,1178],{},"x、y分别乘比例，若轴均1，auto偏移模长约5.66 m；这是计算例",[48,1180,1181,1186,1191,1193,1197,1200,1202,1204],{},[66,1182,1183],{},[129,1184,1185],{},"scale_chassis_turbo.yaw",[66,1187,1188],{},[129,1189,1190],{},"6.0",[66,1192,1103],{},[66,1194,1195],{},[23,1196,1016],{},[66,1198,1199],{},"turbo底盘角速度比例",[66,1201,1113],{},[66,1203,1116],{},[66,1205,1206],{},"当前auto未使用；与fake_vel_transform的cmd_spin是不同输入",[20,1208,1209,1210,1213,1214,1217],{},"getVal按axes",[275,1211,1212],{},"index","×scale计算；-1、缺少映射或超过消息轴数时返回0。它没有把输入轴统一夹到",[275,1215,1216],{},"-1,1","、检查有限值或在这里做死区；假定正常轴值范围的满杆输出只是映射推算，不能当作异常输入的硬上限。手柄型号、joy与joy_linux驱动不同，索引和正负方向均须用实际Joy消息核对。",[115,1219,1221],{"id":1220},"云台轴与比例角速度积分成目标位置","云台轴与比例（角速度积分成目标位置）",[642,1223,644],{"id":1224},"参数表-2",[42,1226,1227,1247],{},[45,1228,1229],{},[48,1230,1231,1233,1235,1237,1239,1241,1243,1245],{},[51,1232,653],{},[51,1234,656],{},[51,1236,659],{},[51,1238,662],{},[51,1240,665],{},[51,1242,668],{},[51,1244,671],{},[51,1246,674],{},[61,1248,1249,1278,1305,1332,1362,1393,1422,1449,1479],{},[48,1250,1251,1256,1260,1262,1266,1269,1272,1275],{},[66,1252,1253],{},[129,1254,1255],{},"axis_gimbal.roll",[66,1257,1258],{},[129,1259,533],{},[66,1261,955],{},[66,1263,1264],{},[23,1265,1016],{},[66,1267,1268],{},"配置了roll映射，当前禁用",[66,1270,1271],{},"不适用，换轴",[66,1273,1274],{},"不适用，-1禁用",[66,1276,1277],{},"fillJointStateMsg实际上只输出pitch与yaw，改此轴不会新增roll关节控制",[48,1279,1280,1285,1289,1291,1295,1298,1300,1302],{},[66,1281,1282],{},[129,1283,1284],{},"axis_gimbal.pitch",[66,1286,1287],{},[129,1288,363],{},[66,1290,955],{},[66,1292,1293],{},[23,1294,697],{},[66,1296,1297],{},"选择云台pitch输入轴",[66,1299,1271],{},[66,1301,1274],{},[66,1303,1304],{},"两种control_mode都使用；方向由比例正负及机械零位共同核对",[48,1306,1307,1312,1316,1318,1322,1325,1327,1329],{},[66,1308,1309],{},[129,1310,1311],{},"axis_gimbal.yaw",[66,1313,1314],{},[129,1315,559],{},[66,1317,955],{},[66,1319,1320],{},[23,1321,697],{},[66,1323,1324],{},"选择云台yaw输入轴",[66,1326,1271],{},[66,1328,1274],{},[66,1330,1331],{},"两种control_mode都使用；是云台相对关节目标，不是底盘旋转",[48,1333,1334,1339,1344,1347,1351,1354,1357,1359],{},[66,1335,1336],{},[129,1337,1338],{},"scale_gimbal.roll",[66,1340,1341],{},[129,1342,1343],{},"0.0",[66,1345,1346],{},"当前未进入关节计算",[66,1348,1349],{},[23,1350,1016],{},[66,1352,1353],{},"保存普通档roll比例",[66,1355,1356],{},"当前实现无roll输出变化",[66,1358,1356],{},[66,1360,1361],{},"不是已实现的roll限位或角度设置",[48,1363,1364,1369,1374,1377,1381,1384,1387,1390],{},[66,1365,1366],{},[129,1367,1368],{},"scale_gimbal.pitch",[66,1370,1371],{},[129,1372,1373],{},"-1.0",[66,1375,1376],{},"rad\u002Fs／单位轴值",[66,1378,1379],{},[23,1380,697],{},[66,1382,1383],{},"普通档pitch积分速度比例，负号反向",[66,1385,1386],{},"负值向0提高时速度幅值减小",[66,1388,1389],{},"负值更负时速度幅值增大",[66,1391,1392],{},"不是pitch目标角度下限；持杆位置按dt累计，没有本包内置软限位",[48,1394,1395,1400,1404,1406,1410,1413,1416,1419],{},[66,1396,1397],{},[129,1398,1399],{},"scale_gimbal.yaw",[66,1401,1402],{},[129,1403,1040],{},[66,1405,1376],{},[66,1407,1408],{},[23,1409,758],{},[66,1411,1412],{},"普通档yaw积分速度比例",[66,1414,1415],{},"正值增大时目标角累计更快",[66,1417,1418],{},"正值减小时累计更慢",[66,1420,1421],{},"不是yaw目标角度上限；没有自动按实际关节反馈重新对齐",[48,1423,1424,1429,1433,1435,1439,1442,1444,1446],{},[66,1425,1426],{},[129,1427,1428],{},"scale_gimbal_turbo.roll",[66,1430,1431],{},[129,1432,1343],{},[66,1434,1346],{},[66,1436,1437],{},[23,1438,1016],{},[66,1440,1441],{},"保存turbo的roll比例",[66,1443,1356],{},[66,1445,1356],{},[66,1447,1448],{},"改此值不产生roll关节命令",[48,1450,1451,1456,1461,1463,1467,1470,1473,1476],{},[66,1452,1453],{},[129,1454,1455],{},"scale_gimbal_turbo.pitch",[66,1457,1458],{},[129,1459,1460],{},"-1.5",[66,1462,1376],{},[66,1464,1465],{},[23,1466,697],{},[66,1468,1469],{},"turbo的pitch积分速度比例",[66,1471,1472],{},"负值向0提高时幅值减小",[66,1474,1475],{},"负值更负时幅值增大",[66,1477,1478],{},"R1档使用，当前幅值为普通档1.5倍；仍需另行处理pitch位置限位",[48,1480,1481,1486,1491,1493,1497,1500,1503,1505],{},[66,1482,1483],{},[129,1484,1485],{},"scale_gimbal_turbo.yaw",[66,1487,1488],{},[129,1489,1490],{},"3.5",[66,1492,1376],{},[66,1494,1495],{},[23,1496,758],{},[66,1498,1499],{},"turbo的yaw积分速度比例",[66,1501,1502],{},"正值增大时累计更快",[66,1504,1418],{},[66,1506,1507],{},"R1档使用；比例不是输出位置的限幅",[642,1509,1511],{"id":1510},"云台积分初始位置与时间","云台积分、初始位置与时间",[20,1513,1514],{},"源码保存从0开始的static pitch、yaw，每次已使能Joy回调更新：",[143,1516,1519],{"className":1517,"code":1518,"language":148,"meta":149},[146],"pitch_target += axes[4] × 当前档pitch比例 × ROS dt\nyaw_target   += axes[3] × 当前档yaw比例   × ROS dt\n发布JointState：name=[gimbal_pitch_joint, gimbal_yaw_joint]\n                position=[pitch_target, yaw_target]\n",[129,1520,1518],{"__ignoreMap":149},[20,1522,1523,1524],{},"position单位为rad，比例单位为rad\u002Fs；例如普通档pitch轴为+1且dt=0.05 s，一次目标增量为-0.05 rad。这是公式示例，不是实测云台角度。两个目标没有按当前实测关节初始化，也没有pitch夹紧、yaw行程保护或dt异常保护。",[35,1525,1528],{"href":1526,"rel":1527},"https:\u002F\u002Fgithub.com\u002FSMBU-PolarBear-Robotics-Team\u002Fpb_teleop_twist_joy\u002Fblob\u002F4a26966cb7958553677f4fe876d003c682c52b6d\u002Fsrc\u002Fpb_teleop_twist_joy.cpp#L182",[39],"积分实现",[20,1530,1531],{},"松开使能不会发布新的云台停止位置，而是停止调用该积分发送分支；末次位置是否继续执行由接收端决定。控制节点也没有自己的固定积分定时器，回调频率由上游Joy消息和重发决定。当前PB joy launch配置deadzone=0.3、autorepeat_rate=20 Hz，这两项属于输入驱动配置，不在原24项参数中。",[115,1533,1535],{"id":1534},"相关源码默认项原yaml未显式配置","相关源码默认项（原YAML未显式配置）",[642,1537,644],{"id":1538},"参数表-3",[20,1540,1541],{},"下面仅补两项与底盘输出格式有关的默认值，没有向原YAML追加。pb源码另有其他映射与发布功能，本页不把未发送的配置当作已经完整关闭全部额外输出。",[42,1543,1544,1564],{},[45,1545,1546],{},[48,1547,1548,1550,1552,1554,1556,1558,1560,1562],{},[51,1549,653],{},[51,1551,656],{},[51,1553,659],{},[51,1555,662],{},[51,1557,665],{},[51,1559,668],{},[51,1561,671],{},[51,1563,674],{},[61,1565,1566,1594],{},[48,1567,1568,1573,1578,1580,1584,1587,1589,1591],{},[66,1569,1570],{},[129,1571,1572],{},"publish_stamped_twist",[66,1574,1575,1577],{},[129,1576,688],{},"，源码默认",[66,1579,692],{},[66,1581,1582],{},[23,1583,788],{},[66,1585,1586],{},"选择cmd_vel发布Twist还是TwistStamped",[66,1588,703],{},[66,1590,703],{},[66,1592,1593],{},"当前接收链用Twist；True只加header，不自动转换参考系，也不能与Twist订阅器直接匹配",[48,1595,1596,1601,1605,1607,1611,1614,1616,1618],{},[66,1597,1598],{},[129,1599,1600],{},"inverted_reverse",[66,1602,1603,1577],{},[129,1604,688],{},[66,1606,692],{},[66,1608,1609],{},[23,1610,1016],{},[66,1612,1613],{},"manual倒退且linear.x\u003C0时，可反转底盘angular.z",[66,1615,703],{},[66,1617,703],{},[66,1619,1620],{},"当前auto不走fillCmdVelMsg；不是反转云台yaw／pitch，也不是通用坐标转换",[20,1622,1623],{},"除use_sim_time由rclcpp时间源管理外，本页pb功能参数在构造时读取，没有对应的参数更新回调。运行中改control_mode、按键或比例，不等于已有成员和Action客户端已经联动改变；需重启该节点再核对。也不能把自己的节点命名成同一个名字，就认为它自动拥有这些参数实现。",[115,1625,1627],{"id":1626},"自己的joy_bringup已经有哪些功能还缺什么","自己的joy_bringup已经有哪些功能，还缺什么",[20,1629,1630],{},"本次读到自己的Joy_Node／joy_node_cpp源码及已安装launch：",[42,1632,1633,1646],{},[45,1634,1635],{},[48,1636,1637,1640,1643],{},[51,1638,1639],{},"内容",[51,1641,1642],{},"自己的当前实现",[51,1644,1645],{},"相对于本块的含义",[61,1647,1648,1659,1679,1696,1707,1718,1733,1744],{},[48,1649,1650,1653,1656],{},[66,1651,1652],{},"手柄读取",[66,1654,1655],{},"joy_linux_node，\u002Fdev\u002Finput\u002Fjs0，配置50 Hz重发",[66,1657,1658],{},"可继续复用驱动，不必从USB设备读取重新写起",[48,1660,1661,1664,1676],{},[66,1662,1663],{},"底盘映射",[66,1665,1666,1667,1669,1670,1672,1673,1675],{},"vx=axes",[275,1668,404],{},"、vy=axes",[275,1671,418],{},"、wz=axes",[275,1674,432],{},"×π",[66,1677,1678],{},"没读取pb的2.5／4.0或L1／R1；按正常轴范围为±1 m\u002Fs、±π rad\u002Fs的请求",[48,1680,1681,1684,1693],{},[66,1682,1683],{},"云台映射",[66,1685,1686,1687,1689,1690,1692],{},"yaw速度axes",[275,1688,559],{},"×2.5，pitch速度axes",[275,1691,363],{},"×1.0",[66,1694,1695],{},"pitch符号与pb的-1.0不同；结合机械和操作方向核对，不凭注释认定哪边正确",[48,1697,1698,1701,1704],{},[66,1699,1700],{},"云台积分",[66,1702,1703],{},"10 ms墙钟定时，按ROS dt积分；仅0\u003Cdt≤0.1时积分",[66,1705,1706],{},"已处理暂停、回跳及过长dt；不是pb的Joy回调间隔积分",[48,1708,1709,1712,1715],{},[66,1710,1711],{},"输入保护",[66,1713,1714],{},"检查至少7轴和已用轴有限值；steady_clock超过0.5 s置零速度",[66,1716,1717],{},"已有断流置零路径，不依赖再收到松开按键消息",[48,1719,1720,1723,1730],{},[66,1721,1722],{},"pitch范围",[66,1724,1725,1726,1729],{},"当前源码夹到",[275,1727,1728],{},"-0.60,0.45"," rad",[66,1731,1732],{},"已有软限位，但这是当前代码值，仍需核对真实机械范围",[48,1734,1735,1738,1741],{},[66,1736,1737],{},"按键与档位",[66,1739,1740],{},"未读取Joy.buttons，未做L1／R1使能和turbo",[66,1742,1743],{},"不是完整复刻本pb配置，按需要补功能即可",[48,1745,1746,1749,1752],{},[66,1747,1748],{},"导航／手动切换",[66,1750,1751],{},"没有Nav2目标客户端或统一指令选择；每10 ms发Twist",[66,1753,1754],{},"空闲也持续发零，若与导航共享最终cmd_vel可能覆盖导航，必须处理接线与控制权",[20,1756,1757,1758,108,1761,108,1764,1767],{},"源码：",[129,1759,1760],{},"自己的手柄控制器",[129,1762,1763],{},"实物启动",[129,1765,1766],{},"仿真启动","。源码中有这些路径，不代表已验证编译后的运动效果；本次没有启动它。",[20,1769,1770],{},"继续完善自己的方案时，优先明确以下四件事：",[1772,1773,1774,1781,1787,1797],"ol",{},[1775,1776,1777,1780],"li",{},[23,1778,1779],{},"启动选择："," 替换后主入口只启动选定的手柄驱动和控制器；移除／关闭pb的Include，不靠删参数来停节点，避免两套驱动与映射一起启动。",[1775,1782,1783,1786],{},[23,1784,1785],{},"指令出口与模式："," 导航和手动输入分别进入可辨认的话题，由一个模式选择环节送到执行端；手动未取得控制权时不要持续向最终话题发零。切换时处理已有导航目标和云台目标所有权。",[1775,1788,1789,1792,1793],{},[23,1790,1791],{},"坐标与单位："," 导航最后cmd_vel按实际gimbal_yaw轴表达。自己的源码只直接拷贝摇杆，未查询TF；手动速度究竟按底盘还是云台轴定义，必须与MCU协议一致。输出JointState仍按pitch、yaw位置rad理解。",[35,1794,1796],{"href":1795},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0600-fake-vel-transform","当前最终速度约定",[1775,1798,1799,1802],{},[23,1800,1801],{},"使能、限值与反馈："," 保留已有断流和dt保护，按需要加手柄使能、速度范围、云台初始化和实际机械限位；auto若要用手柄发导航目标，再单独实现有效Pose和目标句柄管理。",[20,1804,1805],{},"替换手柄节点不要求重写Nav2的规划器、控制器或速度平滑器，也不要求同时改MCU协议；是否需要改协议由当前接口是否能表达选定控制方式决定。本次只提供选择和适配依据，没有代替用户修改启动、手柄代码或协议。",[115,1807,1808],{"id":1808},"本次核对与验证范围",[1810,1811,1812,1818,1824,1830],"ul",{},[1775,1813,1814,1817],{},[23,1815,1816],{},"已核对："," pb包1.0.2与头文件、固定上游源码；24项原参数和两套安装副本；实物／仿真入口及joy_teleop安装副本；自己的joy_bringup源码、输入驱动配置和安装launch；串口订阅cmd_vel及cmd_gimbal_joint。",[1775,1819,1820,1823],{},[23,1821,1822],{},"源码能确认："," auto偏移与manual速度的不同单位；turbo优先使能；云台角速度积分；当前yaw／roll不使用项；启动注释与实际Include不一致；两套节点在指令输出上的适配缺口。",[1775,1825,1826,1829],{},[23,1827,1828],{},"建议："," 继续完善自己的joy_bringup，保留北极熊配置作参考；如暂时完整复现北极熊auto功能，可先使用其节点，但须处理本页列出的实现条件，不能同时任由两套节点向同一执行入口发送。",[1775,1831,1832,1835],{},[23,1833,1834],{},"本次范围："," 仅整理文档与目录，未更改主入口、节点配置或源代码，未查询／改变当前控制模式，未发送Joy、速度、关节或导航目标，未做实车／仿真运动验证。",[1837,1838,1839],"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":149,"searchDepth":289,"depth":289,"links":1841},[1842],{"id":14,"depth":289,"text":5,"children":1843},[1844,1845],{"id":18,"depth":297,"text":18},{"id":259,"depth":297,"text":259},"0500-2100","2026-09-20","2026-09-20-dao-hang","\u002Fwiki\u002F2026-09-20-dao-hang","导航","md",false,{},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-2100-pb-teleop-twist-joy-node",{"title":5,"description":149},"wiki\u002F2026-09-20-导航\u002F0500-2100-pb_teleop_twist_joy_node","-4_K2w4UScV3Wy_-0qALkLxGtuENIHfLPwnbl8ELnMk",[1859,1866,1872,1878,1884,1890,1896,1902,1908,1914,1920,1926,1932,1938,1944,1950,1956,1962,1968,1973,1979,1985,1991,1997,2003,2009,2015,2021,2027,2033,2039,2045,2051,2056,2058,2064,2070,2076],{"path":1860,"stem":1861,"title":1862,"authors":1863,"date":1847,"chapterOrder":1864,"chapterDepth":1865,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0100-jian-jie","wiki\u002F2026-09-20-导航\u002F0100-简介","简介",[7],"0100",0,{"path":1867,"stem":1868,"title":1869,"authors":1870,"date":1847,"chapterOrder":1871,"chapterDepth":1865,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0200-huan-jing-pei-zhi-yu-yun-xing","wiki\u002F2026-09-20-导航\u002F0200-环境配置与运行","环境配置与运行",[7],"0200",{"path":1873,"stem":1874,"title":1875,"authors":1876,"date":1847,"chapterOrder":1877,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0100-robot-description","wiki\u002F2026-09-20-导航\u002F0300-0100-robot_description","robot_description（机器人模型与关节定义）",[7],"0300-0100",{"path":1879,"stem":1880,"title":1881,"authors":1882,"date":1847,"chapterOrder":1883,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\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":1885,"stem":1886,"title":1887,"authors":1888,"date":1847,"chapterOrder":1889,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\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":1891,"stem":1892,"title":1893,"authors":1894,"date":1847,"chapterOrder":1895,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0400-fang-zhen-shi-jue-you-hua","wiki\u002F2026-09-20-导航\u002F0300-0400-仿真视觉优化","仿真视觉优化（可选）",[7],"0300-0400",{"path":1897,"stem":1898,"title":1899,"authors":1900,"date":1847,"chapterOrder":1901,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-0500-tian-jia-di-tu","wiki\u002F2026-09-20-导航\u002F0300-0500-添加地图","添加地图",[7],"0300-0500",{"path":1903,"stem":1904,"title":1905,"authors":1906,"date":1847,"chapterOrder":1907,"chapterDepth":1865,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0300-ji-qi-ren-mo-xing-yu-fang-zhen","wiki\u002F2026-09-20-导航\u002F0300-机器人模型与仿真","机器人模型与仿真",[7],"0300",{"path":1909,"stem":1910,"title":1911,"authors":1912,"date":1847,"chapterOrder":1913,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\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":1915,"stem":1916,"title":1917,"authors":1918,"date":1847,"chapterOrder":1919,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0200-chuan-kou-tong-xin","wiki\u002F2026-09-20-导航\u002F0400-0200-串口通信","Serial_Comm（串口通信）",[7],"0400-0200",{"path":1921,"stem":1922,"title":1923,"authors":1924,"date":1847,"chapterOrder":1925,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-0300-shou-bing-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-0300-手柄控制","Joy（手柄控制）",[7],"0400-0300",{"path":1927,"stem":1928,"title":1929,"authors":1930,"date":1847,"chapterOrder":1931,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\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":1933,"stem":1934,"title":1935,"authors":1936,"date":1847,"chapterOrder":1937,"chapterDepth":1865,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0400-ying-jian-dui-jie-yu-kong-zhi","wiki\u002F2026-09-20-导航\u002F0400-硬件对接与控制","硬件对接与控制",[7],"0400",{"path":1939,"stem":1940,"title":1941,"authors":1942,"date":1847,"chapterOrder":1943,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\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":1945,"stem":1946,"title":1947,"authors":1948,"date":1847,"chapterOrder":1949,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\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":1951,"stem":1952,"title":1953,"authors":1954,"date":1847,"chapterOrder":1955,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\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":1957,"stem":1958,"title":1959,"authors":1960,"date":1847,"chapterOrder":1961,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0400-terrain-analysis","wiki\u002F2026-09-20-导航\u002F0500-0400-terrain_analysis","terrain_analysis（近场地面与障碍高差分析）",[7],"0500-0400",{"path":1963,"stem":1964,"title":1965,"authors":1966,"date":1847,"chapterOrder":1967,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\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":1795,"stem":1969,"title":1970,"authors":1971,"date":1847,"chapterOrder":1972,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"wiki\u002F2026-09-20-导航\u002F0500-0600-fake_vel_transform","fake_vel_transform（云台系速度转换与底盘自旋）",[7],"0500-0600",{"path":1974,"stem":1975,"title":1976,"authors":1977,"date":1847,"chapterOrder":1978,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\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":1980,"stem":1981,"title":1982,"authors":1983,"date":1847,"chapterOrder":1984,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\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":1986,"stem":1987,"title":1988,"authors":1989,"date":1847,"chapterOrder":1990,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-0900-slam-toolbox","wiki\u002F2026-09-20-导航\u002F0500-0900-slam_toolbox","slam_toolbox（二维地图生成与轨迹优化）",[7],"0500-0900",{"path":1992,"stem":1993,"title":1994,"authors":1995,"date":1847,"chapterOrder":1996,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1000-bt-navigator","wiki\u002F2026-09-20-导航\u002F0500-1000-bt_navigator","bt_navigator（行为树导航任务调度）",[7],"0500-1000",{"path":1998,"stem":1999,"title":2000,"authors":2001,"date":1847,"chapterOrder":2002,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1100-controller-server","wiki\u002F2026-09-20-导航\u002F0500-1100-controller_server","controller_server（路径跟踪、进度检查与到达判定）",[7],"0500-1100",{"path":2004,"stem":2005,"title":2006,"authors":2007,"date":1847,"chapterOrder":2008,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1200-local-costmap","wiki\u002F2026-09-20-导航\u002F0500-1200-local_costmap","local_costmap（局部障碍代价地图）",[7],"0500-1200",{"path":2010,"stem":2011,"title":2012,"authors":2013,"date":1847,"chapterOrder":2014,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1300-global-costmap","wiki\u002F2026-09-20-导航\u002F0500-1300-global_costmap","global_costmap（全局规划代价地图）",[7],"0500-1300",{"path":2016,"stem":2017,"title":2018,"authors":2019,"date":1847,"chapterOrder":2020,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1400-map-server","wiki\u002F2026-09-20-导航\u002F0500-1400-map_server","map_server（已有二维地图加载与发布）",[7],"0500-1400",{"path":2022,"stem":2023,"title":2024,"authors":2025,"date":1847,"chapterOrder":2026,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1500-map-saver","wiki\u002F2026-09-20-导航\u002F0500-1500-map_saver","map_saver（二维栅格地图保存）",[7],"0500-1500",{"path":2028,"stem":2029,"title":2030,"authors":2031,"date":1847,"chapterOrder":2032,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\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":2034,"stem":2035,"title":2036,"authors":2037,"date":1847,"chapterOrder":2038,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1700-smoother-server","wiki\u002F2026-09-20-导航\u002F0500-1700-smoother_server","smoother_server（全局路径平滑）",[7],"0500-1700",{"path":2040,"stem":2041,"title":2042,"authors":2043,"date":1847,"chapterOrder":2044,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1800-behavior-server","wiki\u002F2026-09-20-导航\u002F0500-1800-behavior_server","behavior_server（恢复行为与空闲方向移动）",[7],"0500-1800",{"path":2046,"stem":2047,"title":2048,"authors":2049,"date":1847,"chapterOrder":2050,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-1900-waypoint-follower","wiki\u002F2026-09-20-导航\u002F0500-1900-waypoint_follower","waypoint_follower（逐点导航与到点等待）",[7],"0500-1900",{"path":885,"stem":2052,"title":2053,"authors":2054,"date":1847,"chapterOrder":2055,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"wiki\u002F2026-09-20-导航\u002F0500-2000-velocity_smoother","velocity_smoother（速度限幅与加减速平滑）",[7],"0500-2000",{"path":1854,"stem":1856,"title":5,"authors":2057,"date":1847,"chapterOrder":1846,"chapterDepth":278,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},[7],{"path":2059,"stem":2060,"title":2061,"authors":2062,"date":1847,"chapterOrder":2063,"chapterDepth":1865,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0500-dao-hang-can-shu","wiki\u002F2026-09-20-导航\u002F0500-导航参数","导航参数",[7],"0500",{"path":2065,"stem":2066,"title":2067,"authors":2068,"date":1847,"chapterOrder":2069,"chapterDepth":1865,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0600-kai-fa-wen-ti-yu-pai-cha","wiki\u002F2026-09-20-导航\u002F0600-开发问题与排查","开发问题与排查",[7],"0600",{"path":2071,"stem":2072,"title":2073,"authors":2074,"date":1847,"chapterOrder":2075,"chapterDepth":1865,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":1852},"\u002Fwiki\u002F2026-09-20-dao-hang\u002F0700-jue-ce","wiki\u002F2026-09-20-导航\u002F0700-决策","决策",[7],"0700",{"path":1849,"stem":2077,"title":2078,"authors":2079,"date":1847,"chapterOrder":2080,"chapterDepth":1865,"docKey":1848,"docRoot":1849,"docTitle":1850,"isWikiDoc":340,"isWikiIndex":340},"wiki\u002F2026-09-20-导航\u002Findex","北极熊导航复现日志",[7],null,[2082,2084,2087,2090],{"name":7,"image":2083},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":2085,"image":2086},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":2088,"image":2089},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":2091,"image":2092},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431906679]