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