[{"data":1,"prerenderedAt":890},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-chuan-kou-tong-xin":3,"wiki-doc-items-2023-12-30-ros2-tutorial":469,"wiki:author-members":878},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":66,"chapterOrder":456,"date":457,"description":58,"docKey":458,"docRoot":459,"docTitle":460,"extension":461,"isWikiDoc":462,"isWikiIndex":463,"meta":464,"navigation":462,"path":465,"seo":466,"stem":467,"wikiDepth":66,"__hash__":468},"wiki\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-串口通信.md","UART串口通信",[7],"董佳辉",{"type":9,"value":10,"toc":446},"minimark",[11,16,20,23,42,45,49,52,83,86,89,164,167,171,174,264,267,270,336,339,342,350,353,376,379,385,389,392,398,401,407,410,413,416,442],[12,13,15],"h2",{"id":14},"linux-串口通信","Linux 串口通信",[17,18,19],"p",{},"串口通信是机器人和嵌入式项目中最常见的底层通信方式之一。",[17,21,22],{},"在实际项目中，上位机经常需要通过串口和 STM32、ESP32、Arduino、传感器模块、调试板等设备进行数据交互。例如：",[24,25,26,30,33,36,39],"ul",{},[27,28,29],"li",{},"上位机向 STM32 发送电机速度指令",[27,31,32],{},"STM32 向上位机返回编码器数据",[27,34,35],{},"读取 IMU、GPS、激光测距模块等传感器数据",[27,37,38],{},"使用 USB 转串口模块进行调试",[27,40,41],{},"在 ROS 2 底盘控制中和下位机通信",[17,43,44],{},"串口通信的特点是简单、通用、成本低，特别适合上位机和单片机之间的点对点通信。",[46,47,48],"h3",{"id":48},"串口通信是什么",[17,50,51],{},"串口通信通常指 UART 通信。在 Linux 上，常见的 USB 转串口设备会被识别为类似下面的设备文件：",[53,54,59],"pre",{"className":55,"code":56,"language":57,"meta":58,"style":58},"language-bash shiki shiki-themes github-light github-dark","\u002Fdev\u002FttyUSB0\n\u002Fdev\u002FttyUSB1\n\u002Fdev\u002FttyACM0\n","bash","",[60,61,62,71,77],"code",{"__ignoreMap":58},[63,64,67],"span",{"class":65,"line":66},"line",1,[63,68,70],{"class":69},"sScJk","\u002Fdev\u002FttyUSB0\n",[63,72,74],{"class":65,"line":73},2,[63,75,76],{"class":69},"\u002Fdev\u002FttyUSB1\n",[63,78,80],{"class":65,"line":79},3,[63,81,82],{"class":69},"\u002Fdev\u002FttyACM0\n",[17,84,85],{},"程序只需要打开对应的设备文件，并设置好波特率、数据位、停止位、校验位等参数，就可以进行数据收发。",[17,87,88],{},"常见参数包括：",[90,91,92,105],"table",{},[93,94,95],"thead",{},[96,97,98,102],"tr",{},[99,100,101],"th",{},"参数",[99,103,104],{},"说明",[106,107,108,124,132,140,148,156],"tbody",{},[96,109,110,114],{},[111,112,113],"td",{},"设备名",[111,115,116,117,120,121],{},"例如 ",[60,118,119],{},"\u002Fdev\u002FttyUSB0","、",[60,122,123],{},"\u002Fdev\u002FttyACM0",[96,125,126,129],{},[111,127,128],{},"波特率",[111,130,131],{},"例如 115200、921600",[96,133,134,137],{},[111,135,136],{},"数据位",[111,138,139],{},"常见为 8 位",[96,141,142,145],{},[111,143,144],{},"停止位",[111,146,147],{},"常见为 1 位",[96,149,150,153],{},[111,151,152],{},"校验位",[111,154,155],{},"常见为无校验",[96,157,158,161],{},[111,159,160],{},"流控",[111,162,163],{},"一般项目中常关闭硬件流控",[17,165,166],{},"在机器人项目中，串口通常不会只发送普通字符串，而是会设计自己的二进制通信协议，例如帧头、长度、命令字、数据区、CRC 校验等。",[46,168,170],{"id":169},"linux-下常见串口库","Linux 下常见串口库",[17,172,173],{},"Linux 下使用串口通信有多种方案，常见的包括：",[90,175,176,192],{},[93,177,178],{},[96,179,180,183,186,189],{},[99,181,182],{},"方案",[99,184,185],{},"类型",[99,187,188],{},"特点",[99,190,191],{},"适合场景",[106,193,194,208,222,236,250],{},[96,195,196,199,202,205],{},[111,197,198],{},"termios",[111,200,201],{},"Linux 原生接口",[111,203,204],{},"最底层、依赖少、通用性强，但代码相对繁琐",[111,206,207],{},"想深入理解 Linux 串口机制",[96,209,210,213,216,219],{},[111,211,212],{},"boost::asio",[111,214,215],{},"通用 C++ 库",[111,217,218],{},"支持同步\u002F异步，代码结构较清晰，跨平台能力较好",[111,220,221],{},"推荐用于 C++ 工程封装",[96,223,224,227,230,233],{},[111,225,226],{},"libserial",[111,228,229],{},"第三方串口库",[111,231,232],{},"使用简单，比 termios 更易上手",[111,234,235],{},"普通串口收发项目",[96,237,238,241,244,247],{},[111,239,240],{},"serial_driver",[111,242,243],{},"ROS 2 生态封装",[111,245,246],{},"更方便接入 ROS 2，但不适合只依赖 ROS 2 以外的项目",[111,248,249],{},"纯 ROS 2 项目或参考实现",[96,251,252,255,258,261],{},[111,253,254],{},"pyserial",[111,256,257],{},"Python 串口库",[111,259,260],{},"使用非常简单，适合快速测试",[111,262,263],{},"Python 调试脚本",[17,265,266],{},"这些库本质上都是为了完成串口的打开、配置、读取和写入，只是封装层次不同。",[46,268,269],{"id":269},"各方案对比",[90,271,272,284],{},[93,273,274],{},[96,275,276,278,281],{},[99,277,182],{},[99,279,280],{},"优点",[99,282,283],{},"缺点",[106,285,286,296,306,316,326],{},[96,287,288,290,293],{},[111,289,198],{},[111,291,292],{},"Linux 原生、依赖最少、底层能力强",[111,294,295],{},"配置繁琐，初学者容易写错",[96,297,298,300,303],{},[111,299,212],{},[111,301,302],{},"C++ 工程友好，异步通信方便，适合封装 driver",[111,304,305],{},"需要理解 asio 的基本模型",[96,307,308,310,313],{},[111,309,226],{},[111,311,312],{},"简单易用，上手快",[111,314,315],{},"灵活性和工程可控性不如自己封装",[96,317,318,320,323],{},[111,319,240],{},[111,321,322],{},"和 ROS 2 生态结合方便",[111,324,325],{},"离开 ROS 2 后复用性较差",[96,327,328,330,333],{},[111,329,254],{},[111,331,332],{},"调试快，适合脚本",[111,334,335],{},"不适合作为高性能 C++ 底层驱动主线",[46,337,338],{"id":338},"本教程建议选择",[17,340,341],{},"本教程建议优先选择：",[53,343,348],{"className":344,"code":346,"language":347,"meta":58},[345],"language-text","boost::asio\n","text",[60,349,346],{"__ignoreMap":58},[17,351,352],{},"原因是：",[24,354,355,361,364,367,373],{},[27,356,357,358,360],{},"比直接使用 ",[60,359,198],{}," 更适合 C++ 工程开发",[27,362,363],{},"可以封装成普通 C++ driver，方便复用",[27,365,366],{},"不依赖 ROS 2，OpenCV、Qt、普通 C++ 项目都能使用",[27,368,369,370],{},"后续也可以很自然地接入 ",[60,371,372],{},"ros2_control hardware_interface",[27,374,375],{},"比较适合机器人上位机和 STM32 通信场景",[17,377,378],{},"推荐的工程结构是：",[53,380,383],{"className":381,"code":382,"language":347,"meta":58},[345],"上层项目：ROS 2 \u002F OpenCV \u002F Qt \u002F 普通 C++ 程序\n        ↓\n自己封装的 SerialDriver 类\n        ↓\nboost::asio\n        ↓\n\u002Fdev\u002FttyUSB0\n        ↓\nSTM32 \u002F ESP32 \u002F 传感器\n",[60,384,382],{"__ignoreMap":58},[46,386,388],{"id":387},"与-ros-2-的关系","与 ROS 2 的关系",[17,390,391],{},"学习 Linux 串口通信，并不代表不用 ROS 2。",[17,393,394,395,397],{},"在 ROS 2 项目中，可以将串口通信封装成一个普通 C++ 类，然后在 ROS 2 节点或 ",[60,396,372],{}," 中调用它。",[17,399,400],{},"例如：",[53,402,405],{"className":403,"code":404,"language":347,"meta":58},[345],"ros2_control controller\n        ↓\nhardware_interface\n        ↓\n自己封装的 SerialDriver\n        ↓\nboost::asio\n        ↓\nSTM32\n",[60,406,404],{"__ignoreMap":58},[17,408,409],{},"这样做的好处是，串口通信代码不会和 ROS 2 强绑定。以后即使写 OpenCV 项目、Qt 上位机或者普通 C++ 调试程序，也可以继续复用同一套串口 driver。",[46,411,412],{"id":412},"本章学习目标",[17,414,415],{},"学习完本章后，应该能够掌握：",[24,417,418,421,427,430,433,436,439],{},[27,419,420],{},"Linux 下串口设备的基本概念",[27,422,423,424,426],{},"如何查看和打开 ",[60,425,119],{}," 等串口设备",[27,428,429],{},"串口波特率、数据位、停止位、校验位等基本参数",[27,431,432],{},"使用 C++ 进行串口数据收发",[27,434,435],{},"设计简单的上位机与下位机通信协议",[27,437,438],{},"将串口通信封装成可复用的 C++ 类",[27,440,441],{},"为后续接入 ROS 2、OpenCV、Qt 项目打基础",[443,444,445],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}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":58,"searchDepth":73,"depth":73,"links":447},[448],{"id":14,"depth":73,"text":15,"children":449},[450,451,452,453,454,455],{"id":48,"depth":79,"text":48},{"id":169,"depth":79,"text":170},{"id":269,"depth":79,"text":269},{"id":338,"depth":79,"text":338},{"id":387,"depth":79,"text":388},{"id":412,"depth":79,"text":412},"1300-0100","2023-12-30","2023-12-30-ros2-tutorial","\u002Fwiki\u002F2023-12-30-ros2-tutorial","Ros2 Tutorial","md",true,false,{},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-chuan-kou-tong-xin",{"title":5,"description":58},"wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-串口通信","cjQzFeksQRfrra1-nHKm-gh2lwPFoLiCqz1d2YZHPQ0",[470,477,483,489,495,501,507,513,519,525,531,537,543,549,555,561,567,573,579,585,591,597,603,609,615,621,627,633,639,645,651,653,659,665,671,676,682,687,693,699,705,711,717,723,729,735,741,747,753,759,765,771,777,783,789,795,801,807,813,819,825,831,837,843,849,855,861,867,873],{"path":471,"stem":472,"title":473,"authors":474,"date":457,"chapterOrder":475,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao","wiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍","ROS2介绍",[7],"0100",0,{"path":478,"stem":479,"title":480,"authors":481,"date":457,"chapterOrder":482,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","wiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作","入门操作",[7],"0200",{"path":484,"stem":485,"title":486,"authors":487,"date":457,"chapterOrder":488,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":490,"stem":491,"title":492,"authors":493,"date":457,"chapterOrder":494,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信","四大通信",[7],"0400",{"path":496,"stem":497,"title":498,"authors":499,"date":457,"chapterOrder":500,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":502,"stem":503,"title":504,"authors":505,"date":457,"chapterOrder":506,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-launch","wiki\u002F2023-12-30-ros2-tutorial\u002F0600-Launch","Launch",[7],"0600",{"path":508,"stem":509,"title":510,"authors":511,"date":457,"chapterOrder":512,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2","wiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2","回溯rosbag2",[7],"0700",{"path":514,"stem":515,"title":516,"authors":517,"date":457,"chapterOrder":518,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-zuo-biao-bian-huan-tf","wiki\u002F2023-12-30-ros2-tutorial\u002F0800-坐标变换TF","坐标变换TF",[7],"0800",{"path":520,"stem":521,"title":522,"authors":523,"date":457,"chapterOrder":524,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":526,"stem":527,"title":528,"authors":529,"date":457,"chapterOrder":530,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":532,"stem":533,"title":534,"authors":535,"date":457,"chapterOrder":536,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic","Gezebo Classic",[7],"1100-0100",{"path":538,"stem":539,"title":540,"authors":541,"date":457,"chapterOrder":542,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":544,"stem":545,"title":546,"authors":547,"date":457,"chapterOrder":548,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":550,"stem":551,"title":552,"authors":553,"date":457,"chapterOrder":554,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":556,"stem":557,"title":558,"authors":559,"date":457,"chapterOrder":560,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-gezebo-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-Gezebo仿真平台","Gezebo仿真平台",[7],"1100",{"path":562,"stem":563,"title":564,"authors":565,"date":457,"chapterOrder":566,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":568,"stem":569,"title":570,"authors":571,"date":457,"chapterOrder":572,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":574,"stem":575,"title":576,"authors":577,"date":457,"chapterOrder":578,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-humble2jazzy","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-Humble2Jazzy","Humble与Jazzy导航的差异",[7],"1200-0300",{"path":580,"stem":581,"title":582,"authors":583,"date":457,"chapterOrder":584,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":586,"stem":587,"title":588,"authors":589,"date":457,"chapterOrder":590,"chapterDepth":79,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":592,"stem":593,"title":594,"authors":595,"date":457,"chapterOrder":596,"chapterDepth":79,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":598,"stem":599,"title":600,"authors":601,"date":457,"chapterOrder":602,"chapterDepth":79,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":604,"stem":605,"title":606,"authors":607,"date":457,"chapterOrder":608,"chapterDepth":79,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":610,"stem":611,"title":612,"authors":613,"date":457,"chapterOrder":614,"chapterDepth":79,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":616,"stem":617,"title":618,"authors":619,"date":457,"chapterOrder":620,"chapterDepth":79,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":622,"stem":623,"title":624,"authors":625,"date":457,"chapterOrder":626,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-xing-wei-shu-bt","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-行为树BT","行为树（BehaviorTree.CPP）",[7],"1200-0400-0200",{"path":628,"stem":629,"title":630,"authors":631,"date":457,"chapterOrder":632,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":634,"stem":635,"title":636,"authors":637,"date":457,"chapterOrder":638,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":640,"stem":641,"title":642,"authors":643,"date":457,"chapterOrder":644,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":646,"stem":647,"title":648,"authors":649,"date":457,"chapterOrder":650,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":465,"stem":467,"title":5,"authors":652,"date":457,"chapterOrder":456,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},[7],{"path":654,"stem":655,"title":656,"authors":657,"date":457,"chapterOrder":658,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":660,"stem":661,"title":662,"authors":663,"date":457,"chapterOrder":664,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":666,"stem":667,"title":668,"authors":669,"date":457,"chapterOrder":670,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":672,"stem":673,"title":642,"authors":674,"date":457,"chapterOrder":675,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":677,"stem":678,"title":679,"authors":680,"date":457,"chapterOrder":681,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":683,"stem":684,"title":642,"authors":685,"date":457,"chapterOrder":686,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":688,"stem":689,"title":690,"authors":691,"date":457,"chapterOrder":692,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":694,"stem":695,"title":696,"authors":697,"date":457,"chapterOrder":698,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-linux-ying-jian-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-Linux硬件通信","Linux硬件通信",[7],"1300",{"path":700,"stem":701,"title":702,"authors":703,"date":457,"chapterOrder":704,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":706,"stem":707,"title":708,"authors":709,"date":457,"chapterOrder":710,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":712,"stem":713,"title":714,"authors":715,"date":457,"chapterOrder":716,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":718,"stem":719,"title":720,"authors":721,"date":457,"chapterOrder":722,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":724,"stem":725,"title":726,"authors":727,"date":457,"chapterOrder":728,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":730,"stem":731,"title":732,"authors":733,"date":457,"chapterOrder":734,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":736,"stem":737,"title":738,"authors":739,"date":457,"chapterOrder":740,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-you-hua-ri-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-优化日志","优化日志",[7],"1400-0500",{"path":742,"stem":743,"title":744,"authors":745,"date":457,"chapterOrder":746,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":748,"stem":749,"title":750,"authors":751,"date":457,"chapterOrder":752,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":754,"stem":755,"title":756,"authors":757,"date":457,"chapterOrder":758,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":760,"stem":761,"title":762,"authors":763,"date":457,"chapterOrder":764,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":766,"stem":767,"title":768,"authors":769,"date":457,"chapterOrder":770,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":772,"stem":773,"title":774,"authors":775,"date":457,"chapterOrder":776,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":778,"stem":779,"title":780,"authors":781,"date":457,"chapterOrder":782,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":784,"stem":785,"title":786,"authors":787,"date":457,"chapterOrder":788,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-ying-jian-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-硬件平台","硬件平台",[7],"1400-0600",{"path":790,"stem":791,"title":792,"authors":793,"date":457,"chapterOrder":794,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":796,"stem":797,"title":798,"authors":799,"date":457,"chapterOrder":800,"chapterDepth":79,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":802,"stem":803,"title":804,"authors":805,"date":457,"chapterOrder":806,"chapterDepth":79,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":808,"stem":809,"title":810,"authors":811,"date":457,"chapterOrder":812,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":814,"stem":815,"title":816,"authors":817,"date":457,"chapterOrder":818,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":820,"stem":821,"title":822,"authors":823,"date":457,"chapterOrder":824,"chapterDepth":73,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":826,"stem":827,"title":828,"authors":829,"date":457,"chapterOrder":830,"chapterDepth":66,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":832,"stem":833,"title":834,"authors":835,"date":457,"chapterOrder":836,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-ji-qi-ren-ying-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-机器人硬件","机器人硬件",[7],"1400",{"path":838,"stem":839,"title":840,"authors":841,"date":457,"chapterOrder":842,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ros2-control","wiki\u002F2023-12-30-ros2-tutorial\u002F1500-ROS2_Control","ROS2_Control",[7],"1500",{"path":844,"stem":845,"title":846,"authors":847,"date":457,"chapterOrder":848,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":850,"stem":851,"title":852,"authors":853,"date":457,"chapterOrder":854,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\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":856,"stem":857,"title":858,"authors":859,"date":457,"chapterOrder":860,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-microros","wiki\u002F2023-12-30-ros2-tutorial\u002F1800-MicroROS","MicroROS",[7],"1800",{"path":862,"stem":863,"title":864,"authors":865,"date":457,"chapterOrder":866,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-webots-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1900-Webots仿真平台","Webots仿真平台",[7],"1900",{"path":868,"stem":869,"title":870,"authors":871,"date":457,"chapterOrder":872,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":463},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-opencv","wiki\u002F2023-12-30-ros2-tutorial\u002F2000-OpenCV","OpenCV",[7],"2000",{"path":459,"stem":874,"title":875,"authors":876,"date":457,"chapterOrder":877,"chapterDepth":476,"docKey":458,"docRoot":459,"docTitle":460,"isWikiDoc":462,"isWikiIndex":462},"wiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2机器人操作系统教程",[7],null,[879,881,884,887],{"name":7,"image":880},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":882,"image":883},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":885,"image":886},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":888,"image":889},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431903789]