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