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