[{"data":1,"prerenderedAt":1351},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-xing-wei-shu-bt":3,"wiki-doc-items-2023-12-30-ros2-tutorial":936,"wiki:author-members":1339},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":105,"chapterOrder":924,"date":925,"description":73,"docKey":926,"docRoot":927,"docTitle":928,"extension":929,"isWikiDoc":145,"isWikiIndex":930,"meta":931,"navigation":145,"path":932,"seo":933,"stem":934,"wikiDepth":91,"__hash__":935},"wiki\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-行为树BT.md","行为树（BehaviorTree.CPP）",[7],"董佳辉",{"type":9,"value":10,"toc":912},"minimark",[11,15,30,47,53,56,59,63,66,77,80,416,423,426,428,431,434,512,515,518,524,528,531,537,540,542,545,548,554,557,560,566,576,579,581,585,588,646,661,664,667,669,672,675,681,688,694,697,729,732,738,740,744,747,785,788,794,801,804,806,809,812,905,908],[12,13,5],"h2",{"id":14},"行为树behaviortreecpp",[16,17,18],"blockquote",{},[19,20,21,22,29],"p",{},"对应 BehaviorTree.CPP 3.8 官方文档：",[23,24,28],"a",{"href":25,"rel":26},"https:\u002F\u002Fwww.behaviortree.dev\u002Fdocs\u002F3.8\u002Fintro",[27],"nofollow","About","。",[19,31,32,33,37,38,41,42,29],{},"行为树（Behavior Tree，简称 BT）是一种组织机器人任务及其切换的方式。\nBehaviorTree.CPP 则是用于实现行为树的 C++ 库；\n本教程的程序使用 ",[34,35,36],"strong",{},"3.8.7"," 验证，概念资料按官方 ",[34,39,40],{},"3.8"," 系列文档学习，",[23,43,46],{"href":44,"rel":45},"https:\u002F\u002Fwww.behaviortree.dev\u002Fdocs\u002F3.8",[27],"官方教程入口在这里",[19,48,49,50],{},"已经学过 FSM 后，可以从一个问题开始理解它：",[34,51,52],{},"当导航、充电、任务取消等需求不断增加时，怎样把决策逻辑组织得清楚，并复用已有能力？",[19,54,55],{},"本篇先说明行为树解决什么问题，以及它与 FSM 的关系。节点状态、tick 传播和四类节点将在下一篇“基本概念”集中介绍。",[57,58],"hr",{},[12,60,62],{"id":61},"从一个简单的-fsm-开始","从一个简单的 FSM 开始",[19,64,65],{},"假设移动机器人只有等待目标、执行导航、到达目标三个阶段：",[67,68,74],"pre",{"className":69,"code":71,"language":72,"meta":73},[70],"language-text","IDLE → 收到目标 → NAVIGATING → 导航成功 → ARRIVED\n                     └────── 导航失败 → IDLE\n","text","",[75,76,71],"code",{"__ignoreMap":73},[19,78,79],{},"用 C++ 风格伪代码表示：",[67,81,85],{"className":82,"code":83,"language":84,"meta":73,"style":73},"language-cpp shiki shiki-themes github-light github-dark","enum class RobotState\n{\n    IDLE,\n    NAVIGATING,\n    ARRIVED\n};\n\nRobotState current_state = RobotState::IDLE;\n\nvoid Update()\n{\n    switch (current_state)\n    {\n        case RobotState::IDLE:\n            if (HasNavigationGoal())\n            {\n                StartNavigation();\n                current_state = RobotState::NAVIGATING;\n            }\n            break;\n\n        case RobotState::NAVIGATING:\n            if (NavigationSucceeded())\n            {\n                StopRobot();\n                current_state = RobotState::ARRIVED;\n            }\n            else if (NavigationFailed())\n            {\n                current_state = RobotState::IDLE;\n            }\n            \u002F\u002F 尚未结束时保留当前状态，下次 Update() 再检查\n            break;\n\n        case RobotState::ARRIVED:\n            \u002F\u002F 到达后的处理按具体任务补充\n            break;\n    }\n}\n","cpp",[75,86,87,103,110,120,128,134,140,147,162,167,179,184,193,199,210,225,231,240,253,259,268,273,283,295,300,308,320,325,341,346,357,362,369,376,381,391,397,404,410],{"__ignoreMap":73},[88,89,92,96,99],"span",{"class":90,"line":91},"line",1,[88,93,95],{"class":94},"szBVR","enum",[88,97,98],{"class":94}," class",[88,100,102],{"class":101},"sScJk"," RobotState\n",[88,104,106],{"class":90,"line":105},2,[88,107,109],{"class":108},"sVt8B","{\n",[88,111,113,117],{"class":90,"line":112},3,[88,114,116],{"class":115},"sj4cs","    IDLE",[88,118,119],{"class":108},",\n",[88,121,123,126],{"class":90,"line":122},4,[88,124,125],{"class":115},"    NAVIGATING",[88,127,119],{"class":108},[88,129,131],{"class":90,"line":130},5,[88,132,133],{"class":115},"    ARRIVED\n",[88,135,137],{"class":90,"line":136},6,[88,138,139],{"class":108},"};\n",[88,141,143],{"class":90,"line":142},7,[88,144,146],{"emptyLinePlaceholder":145},true,"\n",[88,148,150,153,156,159],{"class":90,"line":149},8,[88,151,152],{"class":108},"RobotState current_state ",[88,154,155],{"class":94},"=",[88,157,158],{"class":101}," RobotState",[88,160,161],{"class":108},"::IDLE;\n",[88,163,165],{"class":90,"line":164},9,[88,166,146],{"emptyLinePlaceholder":145},[88,168,170,173,176],{"class":90,"line":169},10,[88,171,172],{"class":94},"void",[88,174,175],{"class":101}," Update",[88,177,178],{"class":108},"()\n",[88,180,182],{"class":90,"line":181},11,[88,183,109],{"class":108},[88,185,187,190],{"class":90,"line":186},12,[88,188,189],{"class":94},"    switch",[88,191,192],{"class":108}," (current_state)\n",[88,194,196],{"class":90,"line":195},13,[88,197,198],{"class":108},"    {\n",[88,200,202,205,207],{"class":90,"line":201},14,[88,203,204],{"class":94},"        case",[88,206,158],{"class":101},[88,208,209],{"class":108},"::IDLE:\n",[88,211,213,216,219,222],{"class":90,"line":212},15,[88,214,215],{"class":94},"            if",[88,217,218],{"class":108}," (",[88,220,221],{"class":101},"HasNavigationGoal",[88,223,224],{"class":108},"())\n",[88,226,228],{"class":90,"line":227},16,[88,229,230],{"class":108},"            {\n",[88,232,234,237],{"class":90,"line":233},17,[88,235,236],{"class":101},"                StartNavigation",[88,238,239],{"class":108},"();\n",[88,241,243,246,248,250],{"class":90,"line":242},18,[88,244,245],{"class":108},"                current_state ",[88,247,155],{"class":94},[88,249,158],{"class":101},[88,251,252],{"class":108},"::NAVIGATING;\n",[88,254,256],{"class":90,"line":255},19,[88,257,258],{"class":108},"            }\n",[88,260,262,265],{"class":90,"line":261},20,[88,263,264],{"class":94},"            break",[88,266,267],{"class":108},";\n",[88,269,271],{"class":90,"line":270},21,[88,272,146],{"emptyLinePlaceholder":145},[88,274,276,278,280],{"class":90,"line":275},22,[88,277,204],{"class":94},[88,279,158],{"class":101},[88,281,282],{"class":108},"::NAVIGATING:\n",[88,284,286,288,290,293],{"class":90,"line":285},23,[88,287,215],{"class":94},[88,289,218],{"class":108},[88,291,292],{"class":101},"NavigationSucceeded",[88,294,224],{"class":108},[88,296,298],{"class":90,"line":297},24,[88,299,230],{"class":108},[88,301,303,306],{"class":90,"line":302},25,[88,304,305],{"class":101},"                StopRobot",[88,307,239],{"class":108},[88,309,311,313,315,317],{"class":90,"line":310},26,[88,312,245],{"class":108},[88,314,155],{"class":94},[88,316,158],{"class":101},[88,318,319],{"class":108},"::ARRIVED;\n",[88,321,323],{"class":90,"line":322},27,[88,324,258],{"class":108},[88,326,328,331,334,336,339],{"class":90,"line":327},28,[88,329,330],{"class":94},"            else",[88,332,333],{"class":94}," if",[88,335,218],{"class":108},[88,337,338],{"class":101},"NavigationFailed",[88,340,224],{"class":108},[88,342,344],{"class":90,"line":343},29,[88,345,230],{"class":108},[88,347,349,351,353,355],{"class":90,"line":348},30,[88,350,245],{"class":108},[88,352,155],{"class":94},[88,354,158],{"class":101},[88,356,161],{"class":108},[88,358,360],{"class":90,"line":359},31,[88,361,258],{"class":108},[88,363,365],{"class":90,"line":364},32,[88,366,368],{"class":367},"sJ8bj","            \u002F\u002F 尚未结束时保留当前状态，下次 Update() 再检查\n",[88,370,372,374],{"class":90,"line":371},33,[88,373,264],{"class":94},[88,375,267],{"class":108},[88,377,379],{"class":90,"line":378},34,[88,380,146],{"emptyLinePlaceholder":145},[88,382,384,386,388],{"class":90,"line":383},35,[88,385,204],{"class":94},[88,387,158],{"class":101},[88,389,390],{"class":108},"::ARRIVED:\n",[88,392,394],{"class":90,"line":393},36,[88,395,396],{"class":367},"            \u002F\u002F 到达后的处理按具体任务补充\n",[88,398,400,402],{"class":90,"line":399},37,[88,401,264],{"class":94},[88,403,267],{"class":108},[88,405,407],{"class":90,"line":406},38,[88,408,409],{"class":108},"    }\n",[88,411,413],{"class":90,"line":412},39,[88,414,415],{"class":108},"}\n",[19,417,418,419,422],{},"外部周期性调用 ",[75,420,421],{},"Update()","。启动导航的接口快速返回，机器人移动期间，每次更新只检查当前结果，不在函数里一直等待。",[19,424,425],{},"这种任务用 FSM 很容易描述：状态明确，转换条件也少。",[57,427],{},[12,429,430],{"id":430},"复杂任务需要统一组织决策逻辑",[19,432,433],{},"任务增加后，同一条规则可能影响多个状态：",[435,436,437,453],"table",{},[438,439,440],"thead",{},[441,442,443,447,450],"tr",{},[444,445,446],"th",{},"新需求",[444,448,449],{},"可能影响的任务",[444,451,452],{},"需要决定什么",[454,455,456,468,479,490,501],"tbody",{},[441,457,458,462,465],{},[459,460,461],"td",{},"电量不足",[459,463,464],{},"等待、导航、执行任务",[459,466,467],{},"是否暂停当前任务，前往充电",[441,469,470,473,476],{},[459,471,472],{},"紧急停止请求",[459,474,475],{},"导航、充电、执行任务",[459,477,478],{},"是否中止当前操作并停止",[441,480,481,484,487],{},[459,482,483],{},"定位丢失",[459,485,486],{},"导航、返回充电点",[459,488,489],{},"是否暂停移动、尝试恢复定位",[441,491,492,495,498],{},[459,493,494],{},"收到新目标或取消请求",[459,496,497],{},"导航",[459,499,500],{},"是否取消旧请求、切换任务",[441,502,503,506,509],{},[459,504,505],{},"导航失败",[459,507,508],{},"普通任务、返回充电点",[459,510,511],{},"是否重试、放弃或采用其他处理",[19,513,514],{},"例如，低电量发生在导航期间，可能需要先取消导航，再前往充电；发生在等待期间，则没有正在执行的导航需要取消。",[19,516,517],{},"如果每个状态都各自检查电量、取消请求和定位，规则就容易分散。修改一条策略时，需要检查多个状态及其进入、退出逻辑。",[19,519,520,521],{},"FSM 可以通过公共事件处理、分层组织等方式管理这些需求。学习行为树，是为了掌握另一种组织复杂任务的工具：",[34,522,523],{},"用有层次的任务结构表达条件、优先级和执行关系。",[525,526,527],"h3",{"id":527},"区分底层能力与任务决策",[19,529,530],{},"机器人系统可以先按职责分成两层：",[67,532,535],{"className":533,"code":534,"language":72,"meta":73},[70],"任务决策层\n    ├── 当前应该执行哪个任务？\n    ├── 应该去普通目标还是充电点？\n    └── 失败或条件变化后怎样处理？\n            ↓ 调用\n能力模块\n    ├── Navigation       导航到指定目标\n    ├── Localization     提供定位及其有效性\n    ├── Battery          提供电量和充电信息\n    ├── Sensors          提供环境数据\n    └── Actuators        执行运动等指令\n",[75,536,534],{"__ignoreMap":73},[19,538,539],{},"导航模块主要解决“给定目标，如何到达”；任务决策层决定“现在是否导航、去哪里、失败怎么办”。行为树适合组织这部分任务决策，具体功能仍由相应模块实现。",[57,541],{},[12,543,544],{"id":544},"用层次结构表达机器人任务",[19,546,547],{},"先用一个概念结构表达任务优先级：",[67,549,552],{"className":550,"code":551,"language":72,"meta":73},[70],"RobotBehavior\n├── EmergencyHandling     有紧急停止请求时，停止机器人\n├── EnergyManagement      电量低时，处理充电\n├── ExecuteMission        有任务时，执行导航等操作\n└── WaitForTask           其余情况下，等待任务\n",[75,553,551],{"__ignoreMap":73},[19,555,556],{},"这张图描述的是预期策略，不是可以直接运行的行为树。实际哪些条件会重新检查、怎样选择分支、如何中止旧任务，需要由具体节点和执行规则实现。",[19,558,559],{},"任务可以继续逐层展开：",[67,561,564],{"className":562,"code":563,"language":72,"meta":73},[70],"RobotBehavior\n├── EmergencyHandling\n├── EnergyManagement\n│   ├── CheckBattery\n│   └── RechargeTask\n│       ├── NavigateToChargingStation\n│       └── StartCharging\n└── ExecuteMission\n    ├── CheckGoal\n    └── NavigateToGoal\n",[75,565,563],{"__ignoreMap":73},[19,567,568,569,572,573],{},"阅读整体任务时，只看第一层就能知道主要职责；\n研究充电流程时，再展开 ",[75,570,571],{},"RechargeTask","。\n",[34,574,575],{},"小任务可以组成大任务，一整棵子树也可以成为更大任务的一部分。",[19,577,578],{},"这里仍只展示任务分解，具体节点类型和成功、失败时的执行规则后面再补充。",[57,580],{},[12,582,584],{"id":583},"模块化复用与组合怎样落到代码上","模块化、复用与组合怎样落到代码上",[19,586,587],{},"官方把节点比作积木：每个节点封装一种检查或操作，再把节点组合成任务。各个特点可以对应到具体的设计选择：",[435,589,590,600],{},[438,591,592],{},[441,593,594,597],{},[444,595,596],{},"特点",[444,598,599],{},"在移动机器人中的做法",[454,601,602,613,624,635],{},[441,603,604,610],{},[459,605,606,607],{},"模块化 ",[75,608,609],{},"Modularity",[459,611,612],{},"电量检查、导航请求、停止操作分别封装",[441,614,615,621],{},[459,616,617,618],{},"可复用性 ",[75,619,620],{},"Reusability",[459,622,623],{},"普通目标导航和返回充电点复用同一种导航节点实现，配置不同目标",[441,625,626,632],{},[459,627,628,629],{},"可组合性 ",[75,630,631],{},"Composability",[459,633,634],{},"将检查、导航、充电组合成完整充电任务",[441,636,637,643],{},[459,638,639,640],{},"关注点分离 ",[75,641,642],{},"Separation of Concerns",[459,644,645],{},"导航模块负责到达目标，行为树负责决定何时导航和如何处理结果",[19,647,648,649,652,653,656,657,660],{},"例如 ",[75,650,651],{},"IsBatteryLow"," 只检查电量，",[75,654,655],{},"NavigateToGoal"," 负责请求导航，",[75,658,659],{},"StartCharging"," 负责启动充电。这样可以分别测试和替换各项能力，也能在不同任务中重新组合。",[19,662,663],{},"可复用的是节点实现或子树设计，不意味着多处任务必须共享同一个正在运行的节点对象。具体怎样创建和配置实例，在后面的编程示例中学习。",[19,665,666],{},"行为树的树形图也有助于阅读工作流程。\n不过，完整理解仍要结合每种节点的执行语义；仅凭连线无法判断所有运行细节。",[57,668],{},[12,670,671],{"id":671},"反应性来自持续驱动与重新判断",[19,673,674],{},"机器人环境会在任务执行期间变化。例如：",[67,676,679],{"className":677,"code":678,"language":72,"meta":73},[70],"开始导航：电量和定位正常，存在目标\n    ↓\n导航过程中：收到取消请求\n    ↓\n重新判断：取消当前导航，转入后续处理\n",[75,680,678],{"__ignoreMap":73},[19,682,683,684,687],{},"反应性（",[75,685,686],{},"Reactive","）指系统能够在任务尚未完成时，根据变化调整行为。",[19,689,690,691,693],{},"前面学习的非阻塞 FSM，通过周期执行 ",[75,692,421],{}," 检查事件和任务进度。",[19,695,696],{},"行为树通过外部持续发起 tick，按照树的规则推进任务：",[435,698,699,709],{},[438,700,701],{},[441,702,703,706],{},[444,704,705],{},"执行方式",[444,707,708],{},"一次更新主要做什么",[454,710,711,721],{},[441,712,713,718],{},[459,714,715,716],{},"FSM 的 ",[75,717,421],{},[459,719,720],{},"根据当前状态处理事件，决定是否转移",[441,722,723,726],{},[459,724,725],{},"行为树的一次 tick",[459,727,728],{},"从根节点进入，按各节点的规则选择并执行当前需要的节点",[19,730,731],{},"对于持续任务，每次调用应及时交还控制权，方便后续继续决策。\n导航系统可以在两次更新之间继续工作，决策层不必堵在一次调用中等待机器人到达。",[19,733,734,737],{},[34,735,736],{},"行为树能否及时响应条件变化，取决于驱动频率、哪些条件被重新 tick，以及动作是否支持中止。","\n把条件节点放进树里，不代表它会自动持续监控；具体的响应式规则将在后续示例中学习。",[57,739],{},[12,741,743],{"id":742},"状态机fsm与行为树bt可以配合使用","状态机FSM与行为树BT可以配合使用",[19,745,746],{},"选择组织方式时，可以先看问题的结构：",[435,748,749,759],{},[438,750,751],{},[441,752,753,756],{},[444,754,755],{},"场景",[444,757,758],{},"常见做法",[454,760,761,769,777],{},[441,762,763,766],{},[459,764,765],{},"设备具有明确阶段，如关闭、启动、运行、故障",[459,767,768],{},"使用 FSM 表达阶段及其转换",[441,770,771,774],{},[459,772,773],{},"任务包含多种条件、优先级和可复用子流程",[459,775,776],{},"使用行为树组织任务",[441,778,779,782],{},[459,780,781],{},"上层需要组合任务，某个底层模块内部又有明确阶段",[459,783,784],{},"上层使用行为树，模块内部保留 FSM",[19,786,787],{},"例如：",[67,789,792],{"className":790,"code":791,"language":72,"meta":73},[70],"RobotBehavior              行为树：组织整体任务\n└── NavigateToGoal         动作节点：调用导航模块\n    └── NavigationModule   模块内部：用 FSM 管理运行阶段\n",[75,793,791],{"__ignoreMap":73},[19,795,796,797,800],{},"这张图表达软件调用与组织关系。",[75,798,799],{},"NavigationModule"," 是外部模块，不是动作节点下面的行为树子节点。",[19,802,803],{},"两种工具都能组织任务决策，适用范围也有重叠。\n现有 FSM 结构清晰时，可以继续使用；任务需要更多层次和组合时，再考虑引入行为树。",[57,805],{},[12,807,808],{"id":808},"本教程的学习顺序",[19,810,811],{},"本篇作为导读，后面按六个完整主题组织主线。阶段 1 集中建立概念，阶段 2 从最小程序逐步增加功能，统一使用 BehaviorTree.CPP 3.8.7、C++20 和 VSCode CMake Tools。",[435,813,814,827],{},[438,815,816],{},[441,817,818,821,824],{},[444,819,820],{},"文档",[444,822,823],{},"主要内容",[444,825,826],{},"所在阶段",[454,828,829,842,854,867,880,892],{},[441,830,831,836,839],{},[459,832,833],{},[75,834,835],{},"基本概念",[459,837,838],{},"节点、状态、tick 传播和四类节点",[459,840,841],{},"阶段 1",[441,843,844,849,852],{},[459,845,846],{},[75,847,848],{},"控制与装饰规则",[459,850,851],{},"顺序、备选方案、重试、重复和超时",[459,853,841],{},[441,855,856,861,864],{},[459,857,858],{},[75,859,860],{},"第一个完整程序",[459,862,863],{},"先衔接概念，再从最小 demo 逐步增加条件和端口",[459,865,866],{},"阶段 1 收尾，进入阶段 2",[441,868,869,874,877],{},[459,870,871],{},[75,872,873],{},"节点之间传数据",[459,875,876],{},"输入输出、自定义类型和外部 Blackboard",[459,878,879],{},"阶段 2",[441,881,882,887,890],{},[459,883,884],{},[75,885,886],{},"持续任务与中止",[459,888,889],{},"持续导航、多次 tick、响应式检查和取消",[459,891,879],{},[441,893,894,899,902],{},[459,895,896],{},[75,897,898],{},"组合实际任务",[459,900,901],{},"子树映射、多 XML 文件和完整任务的成功、失败路径",[459,903,904],{},"阶段 2 收尾",[19,906,907],{},"实践按自己的完成情况推进：先运行当前版本，看到输出并理解执行过程，再增加下一步功能。各篇预留了 VSCode 截图位置，完整程序使用模拟移动机器人数据。",[909,910,911],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}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 .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":73,"searchDepth":105,"depth":105,"links":913},[914,915,916,919,920,921,922,923],{"id":14,"depth":105,"text":5},{"id":61,"depth":105,"text":62},{"id":430,"depth":105,"text":430,"children":917},[918],{"id":527,"depth":112,"text":527},{"id":544,"depth":105,"text":544},{"id":583,"depth":105,"text":584},{"id":671,"depth":105,"text":671},{"id":742,"depth":105,"text":743},{"id":808,"depth":105,"text":808},"1200-0400-0200","2023-12-30","2023-12-30-ros2-tutorial","\u002Fwiki\u002F2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,{},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-xing-wei-shu-bt",{"title":5,"description":73},"wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-行为树BT","EL4dmy_MJCuhW_oPEf5tgWXTJ3KE0bkKGJ3BKYvFrQs",[937,944,950,956,962,968,974,980,986,992,998,1004,1010,1016,1022,1028,1034,1040,1046,1052,1057,1062,1067,1072,1077,1082,1084,1090,1096,1102,1108,1114,1120,1126,1132,1137,1143,1148,1154,1160,1166,1172,1178,1184,1190,1196,1202,1208,1214,1220,1226,1232,1238,1244,1250,1256,1262,1268,1274,1280,1286,1292,1298,1304,1310,1316,1322,1328,1334],{"path":938,"stem":939,"title":940,"authors":941,"date":925,"chapterOrder":942,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao","wiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍","ROS2介绍",[7],"0100",0,{"path":945,"stem":946,"title":947,"authors":948,"date":925,"chapterOrder":949,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","wiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作","入门操作",[7],"0200",{"path":951,"stem":952,"title":953,"authors":954,"date":925,"chapterOrder":955,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0300-gong-zuo-kong-jian-yu-gong-neng-bao","wiki\u002F2023-12-30-ros2-tutorial\u002F0300-工作空间与功能包","工作空间与功能包",[7],"0300",{"path":957,"stem":958,"title":959,"authors":960,"date":925,"chapterOrder":961,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信","四大通信",[7],"0400",{"path":963,"stem":964,"title":965,"authors":966,"date":925,"chapterOrder":967,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0500-ros2-qi-ta-tong-xin-ji-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F0500-ROS2其他通信机制","ROS2其他通信机制",[7],"0500",{"path":969,"stem":970,"title":971,"authors":972,"date":925,"chapterOrder":973,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-launch","wiki\u002F2023-12-30-ros2-tutorial\u002F0600-Launch","Launch",[7],"0600",{"path":975,"stem":976,"title":977,"authors":978,"date":925,"chapterOrder":979,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2","wiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2","回溯rosbag2",[7],"0700",{"path":981,"stem":982,"title":983,"authors":984,"date":925,"chapterOrder":985,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-zuo-biao-bian-huan-tf","wiki\u002F2023-12-30-ros2-tutorial\u002F0800-坐标变换TF","坐标变换TF",[7],"0800",{"path":987,"stem":988,"title":989,"authors":990,"date":925,"chapterOrder":991,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0900-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki\u002F2023-12-30-ros2-tutorial\u002F0900-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言",[7],"0900",{"path":993,"stem":994,"title":995,"authors":996,"date":925,"chapterOrder":997,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1000-stage-ros2-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1000-Stage_Ros2仿真平台","Stage_Ros2仿真平台",[7],"1000",{"path":999,"stem":1000,"title":1001,"authors":1002,"date":925,"chapterOrder":1003,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic","Gezebo Classic",[7],"1100-0100",{"path":1005,"stem":1006,"title":1007,"authors":1008,"date":925,"chapterOrder":1009,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-ignitiongazebo","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）",[7],"1100-0200",{"path":1011,"stem":1012,"title":1013,"authors":1014,"date":925,"chapterOrder":1015,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-gazebosim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-GazeboSim","Gz Sim（Gazebo Harmonic）",[7],"1100-0300",{"path":1017,"stem":1018,"title":1019,"authors":1020,"date":925,"chapterOrder":1021,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim",[7],"1100-0400",{"path":1023,"stem":1024,"title":1025,"authors":1026,"date":925,"chapterOrder":1027,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-gezebo-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-Gezebo仿真平台","Gezebo仿真平台",[7],"1100",{"path":1029,"stem":1030,"title":1031,"authors":1032,"date":925,"chapterOrder":1033,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-humble-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-Humble版本","Humble导航仿真",[7],"1200-0100",{"path":1035,"stem":1036,"title":1037,"authors":1038,"date":925,"chapterOrder":1039,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-jazzy-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-Jazzy版本","Jazzy导航仿真",[7],"1200-0200",{"path":1041,"stem":1042,"title":1043,"authors":1044,"date":925,"chapterOrder":1045,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-humble2jazzy","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-Humble2Jazzy","Humble与Jazzy导航的差异",[7],"1200-0300",{"path":1047,"stem":1048,"title":1049,"authors":1050,"date":925,"chapterOrder":1051,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0100-you-xian-zhuang-tai-ji-fsm","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0100-有限状态机FSM","有限状态机（Finite State Machine）",[7],"1200-0400-0100",{"path":1053,"stem":1054,"title":835,"authors":1055,"date":925,"chapterOrder":1056,"chapterDepth":112,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0100-ji-ben-gai-nian","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0100-基本概念",[7],"1200-0400-0200-0100",{"path":1058,"stem":1059,"title":848,"authors":1060,"date":925,"chapterOrder":1061,"chapterDepth":112,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0200-kong-zhi-yu-zhuang-shi-gui-ze","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0200-控制与装饰规则",[7],"1200-0400-0200-0200",{"path":1063,"stem":1064,"title":860,"authors":1065,"date":925,"chapterOrder":1066,"chapterDepth":112,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0300-di-yi-ge-wan-zheng-cheng-xu","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0300-第一个完整程序",[7],"1200-0400-0200-0300",{"path":1068,"stem":1069,"title":873,"authors":1070,"date":925,"chapterOrder":1071,"chapterDepth":112,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0400-jie-dian-zhi-jian-chuan-shu-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0400-节点之间传数据",[7],"1200-0400-0200-0400",{"path":1073,"stem":1074,"title":886,"authors":1075,"date":925,"chapterOrder":1076,"chapterDepth":112,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0500-chi-xu-ren-wu-yu-zhong-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0500-持续任务与中止",[7],"1200-0400-0200-0500",{"path":1078,"stem":1079,"title":898,"authors":1080,"date":925,"chapterOrder":1081,"chapterDepth":112,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0600-zu-he-shi-ji-ren-wu","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0600-组合实际任务",[7],"1200-0400-0200-0600",{"path":932,"stem":934,"title":5,"authors":1083,"date":925,"chapterOrder":924,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},[7],{"path":1085,"stem":1086,"title":1087,"authors":1088,"date":925,"chapterOrder":1089,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-fsm-yu-bt","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-FSM与BT","有限状态机FSM与行为树BT",[7],"1200-0400",{"path":1091,"stem":1092,"title":1093,"authors":1094,"date":925,"chapterOrder":1095,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)",[7],"1200",{"path":1097,"stem":1098,"title":1099,"authors":1100,"date":925,"chapterOrder":1101,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-Boost.Aiso","Boost.Asio库",[7],"1300-0100-0100",{"path":1103,"stem":1104,"title":1105,"authors":1106,"date":925,"chapterOrder":1107,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2-serial-driver","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2_serial_driver","ROS2 Serial Driver库",[7],"1300-0100-0200",{"path":1109,"stem":1110,"title":1111,"authors":1112,"date":925,"chapterOrder":1113,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-chuan-kou-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-串口通信","UART串口通信",[7],"1300-0100",{"path":1115,"stem":1116,"title":1117,"authors":1118,"date":925,"chapterOrder":1119,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","SocketCAN",[7],"1300-0200-0100",{"path":1121,"stem":1122,"title":1123,"authors":1124,"date":925,"chapterOrder":1125,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2_socketcan","ROS2_SocketCAN",[7],"1300-0200-0200",{"path":1127,"stem":1128,"title":1129,"authors":1130,"date":925,"chapterOrder":1131,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-can-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-CAN通信","CAN通信",[7],"1300-0200",{"path":1133,"stem":1134,"title":1099,"authors":1135,"date":925,"chapterOrder":1136,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-Boost.Aiso",[7],"1300-0300-0100",{"path":1138,"stem":1139,"title":1140,"authors":1141,"date":925,"chapterOrder":1142,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-tcp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-TCP通信","TCP通信",[7],"1300-0300",{"path":1144,"stem":1145,"title":1099,"authors":1146,"date":925,"chapterOrder":1147,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-Boost.Aiso",[7],"1300-0400-0100",{"path":1149,"stem":1150,"title":1151,"authors":1152,"date":925,"chapterOrder":1153,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-udp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-UDP通信","UDP通信",[7],"1300-0400",{"path":1155,"stem":1156,"title":1157,"authors":1158,"date":925,"chapterOrder":1159,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-linux-ying-jian-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-Linux硬件通信","Linux硬件通信",[7],"1300",{"path":1161,"stem":1162,"title":1163,"authors":1164,"date":925,"chapterOrder":1165,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-ji-qi-ren-zu-cheng","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-机器人组成","机器人组成",[7],"1400-0100",{"path":1167,"stem":1168,"title":1169,"authors":1170,"date":925,"chapterOrder":1171,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-yuan-cheng-kai-fa-ssh","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-远程开发SSH","远程开发SSH",[7],"1400-0200-0100",{"path":1173,"stem":1174,"title":1175,"authors":1176,"date":925,"chapterOrder":1177,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-yuan-cheng-fang-wen-zhuo-mian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-远程访问桌面","远程访问桌面",[7],"1400-0200-0200",{"path":1179,"stem":1180,"title":1181,"authors":1182,"date":925,"chapterOrder":1183,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-工控机之远程开发环境","工控机之远程开发环境",[7],"1400-0200",{"path":1185,"stem":1186,"title":1187,"authors":1188,"date":925,"chapterOrder":1189,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-gong-kong-ji-zhi-wai-jie-usb-she-bei","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-工控机之外接USB设备","工控机之外接USB设备",[7],"1400-0300",{"path":1191,"stem":1192,"title":1193,"authors":1194,"date":925,"chapterOrder":1195,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-fen-bu-shi-da-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-分布式搭建","分布式搭建",[7],"1400-0400",{"path":1197,"stem":1198,"title":1199,"authors":1200,"date":925,"chapterOrder":1201,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-you-hua-ri-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-优化日志","优化日志",[7],"1400-0500",{"path":1203,"stem":1204,"title":1205,"authors":1206,"date":925,"chapterOrder":1207,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-li-cheng-ji-odom","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-里程计Odom","里程计Odom",[7],"1400-0600-0100",{"path":1209,"stem":1210,"title":1211,"authors":1212,"date":925,"chapterOrder":1213,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-guan-xing-ji-imu","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-惯性计IMU","惯性计IMU",[7],"1400-0600-0200",{"path":1215,"stem":1216,"title":1217,"authors":1218,"date":925,"chapterOrder":1219,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-ji-guang-lei-da-lidar","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-激光雷达LiDAR","激光雷达LiDAR",[7],"1400-0600-0300",{"path":1221,"stem":1222,"title":1223,"authors":1224,"date":925,"chapterOrder":1225,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-xiang-ji-camera","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-相机Camera","相机Camera",[7],"1400-0600-0400",{"path":1227,"stem":1228,"title":1229,"authors":1230,"date":925,"chapterOrder":1231,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-quan-qiu-ding-wei-gnss","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-全球定位GNSS","全球定位GNSS",[7],"1400-0600-0500",{"path":1233,"stem":1234,"title":1235,"authors":1236,"date":925,"chapterOrder":1237,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-shou-bing-joy","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-手柄joy","手柄JOY",[7],"1400-0600-0600",{"path":1239,"stem":1240,"title":1241,"authors":1242,"date":925,"chapterOrder":1243,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-jian-pan-kong-zhi-jie-dian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-键盘控制节点","键盘控制节点",[7],"1400-0600-0700",{"path":1245,"stem":1246,"title":1247,"authors":1248,"date":925,"chapterOrder":1249,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-ying-jian-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-硬件平台","硬件平台",[7],"1400-0600",{"path":1251,"stem":1252,"title":1253,"authors":1254,"date":925,"chapterOrder":1255,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-zuo-biao-xi-yu-hua-ti-guan-xi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-坐标系与话题关系","坐标系与话题关系",[7],"1400-0700",{"path":1257,"stem":1258,"title":1259,"authors":1260,"date":925,"chapterOrder":1261,"chapterDepth":112,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-lun-shi-li-cheng-ji-biao-ding","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-轮式里程计标定","轮式里程计标定",[7],"1400-0800-0100-0100",{"path":1263,"stem":1264,"title":1265,"authors":1266,"date":925,"chapterOrder":1267,"chapterDepth":112,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-lun-shi-li-cheng-ji-yu-imu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-轮式里程计与IMU融合","轮式里程计与IMU融合",[7],"1400-0800-0100-0200",{"path":1269,"stem":1270,"title":1271,"authors":1272,"date":925,"chapterOrder":1273,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-轮式里程计标定与融合","轮式里程计标定与融合",[7],"1400-0800-0100",{"path":1275,"stem":1276,"title":1277,"authors":1278,"date":925,"chapterOrder":1279,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-ji-guang-lei-da-gong-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-激光雷达工具","激光雷达工具",[7],"1400-0800-0200",{"path":1281,"stem":1282,"title":1283,"authors":1284,"date":925,"chapterOrder":1285,"chapterDepth":105,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-xiang-ji-shi-yong-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-相机使用进阶","相机使用进阶",[7],"1400-0800-0300",{"path":1287,"stem":1288,"title":1289,"authors":1290,"date":925,"chapterOrder":1291,"chapterDepth":91,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-ying-jian-ping-tai-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-硬件平台进阶","硬件平台进阶",[7],"1400-0800",{"path":1293,"stem":1294,"title":1295,"authors":1296,"date":925,"chapterOrder":1297,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-ji-qi-ren-ying-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-机器人硬件","机器人硬件",[7],"1400",{"path":1299,"stem":1300,"title":1301,"authors":1302,"date":925,"chapterOrder":1303,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ros2-control","wiki\u002F2023-12-30-ros2-tutorial\u002F1500-ROS2_Control","ROS2_Control",[7],"1500",{"path":1305,"stem":1306,"title":1307,"authors":1308,"date":925,"chapterOrder":1309,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1600-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki\u002F2023-12-30-ros2-tutorial\u002F1600-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂",[7],"1600",{"path":1311,"stem":1312,"title":1313,"authors":1314,"date":925,"chapterOrder":1315,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1700-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1700-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)",[7],"1700",{"path":1317,"stem":1318,"title":1319,"authors":1320,"date":925,"chapterOrder":1321,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-microros","wiki\u002F2023-12-30-ros2-tutorial\u002F1800-MicroROS","MicroROS",[7],"1800",{"path":1323,"stem":1324,"title":1325,"authors":1326,"date":925,"chapterOrder":1327,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-webots-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1900-Webots仿真平台","Webots仿真平台",[7],"1900",{"path":1329,"stem":1330,"title":1331,"authors":1332,"date":925,"chapterOrder":1333,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":930},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-opencv","wiki\u002F2023-12-30-ros2-tutorial\u002F2000-OpenCV","OpenCV",[7],"2000",{"path":927,"stem":1335,"title":1336,"authors":1337,"date":925,"chapterOrder":1338,"chapterDepth":943,"docKey":926,"docRoot":927,"docTitle":928,"isWikiDoc":145,"isWikiIndex":145},"wiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2机器人操作系统教程",[7],null,[1340,1342,1345,1348],{"name":7,"image":1341},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":1343,"image":1344},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":1346,"image":1347},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":1349,"image":1350},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431903605]