[{"data":1,"prerenderedAt":861},["ShallowReactive",2],{"wiki-page-/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin":3,"wiki-doc-items-/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin":493,"language-switcher-data-/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin":845,"wiki-i18n-paths-/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin":860},{"id":4,"title":5,"body":6,"canonicalPath":472,"chapter":473,"chapterSort":474,"date":475,"description":76,"docI18nKey":476,"docKey":477,"docRoot":478,"docTitle":479,"extension":480,"i18nKey":481,"isBlogPost":482,"isWikiDoc":483,"isWikiIndex":482,"layout":484,"legacyPath":484,"locale":485,"localeSlug":486,"meta":487,"navigation":483,"path":472,"seo":488,"sourcePath":489,"sourceStem":481,"stem":490,"wikiDepth":491,"__hash__":492},"content/_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信.md","TCP communication",{"type":7,"value":8,"toc":460},"minimark",[9,14,18,21,24,27,52,55,60,63,66,69,80,83,165,168,172,175,279,282,286,363,367,370,376,379,396,399,405,409,412,415,418,424,427,431,434],[10,11,13],"h2",{"id":12},"linux-tcp-communication","Linux TCP Communication",[15,16,17],"p",{},"TCP communication is one of the most common communication methods in Linux network programming.",[15,19,20],{},"In robot and embedded Linux projects, TCP is commonly used for reliable communication between host computers, between robots and servers, and between robots and debugging software.",[15,22,23],{},"Compared to serial ports and CAN, TCP is more network-oriented. It usually runs on Ethernet, Wi-Fi, or local loopback networks, suitable for transmitting control commands, configuration parameters, logs, status information, file data, etc.",[15,25,26],{},"In actual projects, TCP communication is common in:",[28,29,30,34,37,40,43,46,49],"ul",{},[31,32,33],"li",{},"Communication between Qt host computer and robot main controller",[31,35,36],{},"Communication between robot and remote server",[31,38,39],{},"Industrial computer and network device communication",[31,41,42],{},"Reliable data exchange between multiple programs",[31,44,45],{},"Remotely send control commands",[31,47,48],{},"Upload logs, configuration files, and map files.",[31,50,51],{},"Communicating with the SDKs of certain radars, cameras, and industrial equipment",[15,53,54],{},"TCP is characterized by reliable, in-order transmission with low data loss, making it suitable for scenarios with high data integrity requirements.",[56,57,59],"h3",{"id":58},"what-is-tcp-communication","What is TCP communication?",[15,61,62],{},"TCP, short for Transmission Control Protocol, is a connection-oriented reliable transport protocol.",[15,64,65],{},"Before using TCP communication, the client and server need to establish a connection. Once the connection is established, both parties can send and receive data just like reading and writing files.",[15,67,68],{},"A typical structure is as follows:",[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],{},"Common concepts include:",[84,85,86,99],"table",{},[87,88,89],"thead",{},[90,91,92,96],"tr",{},[93,94,95],"th",{},"concept",[93,97,98],{},"Explanation",[100,101,102,114,125,133,141,149,157],"tbody",{},[90,103,104,108],{},[105,106,107],"td",{},"IP address",[105,109,110,111],{},"Used to locate devices on the network, such as ",[78,112,113],{},"192.168.1.10",[90,115,116,119],{},[105,117,118],{},"port number",[105,120,121,122],{},"used to distinguish different services on the same device, such as ",[78,123,124],{},"8080",[90,126,127,130],{},[105,128,129],{},"Server",[105,131,132],{},"Server, responsible for listening on a port and waiting for connections.",[90,134,135,138],{},[105,136,137],{},"Client",[105,139,140],{},"Client, actively connect to the server.",[90,142,143,146],{},[105,144,145],{},"Socket",[105,147,148],{},"Abstract interface for network communication",[90,150,151,154],{},[105,152,153],{},"Connection",[105,155,156],{},"A connection must be established before TCP communication.",[90,158,159,162],{},[105,160,161],{},"sticky packet",[105,163,164],{},"TCP is a byte stream protocol, so you need to design your own application layer protocol.",[15,166,167],{},"It is important to note that TCP does not map one message to one receive operation. TCP is essentially a byte stream protocol, so in practical engineering, you usually need to design your own data protocol, such as frame header, length, command word, data area, checksum, etc.",[56,169,171],{"id":170},"common-tcp-libraries-on-linux","Common TCP libraries on Linux",[15,173,174],{},"There are multiple approaches for TCP communication under Linux, common ones include:",[84,176,177,193],{},[87,178,179],{},[90,180,181,184,187,190],{},[93,182,183],{},"solution",[93,185,186],{},"type",[93,188,189],{},"Features",[93,191,192],{},"Suitable scenarios",[100,194,195,209,223,237,251,265],{},[90,196,197,200,203,206],{},[105,198,199],{},"Linux socket API",[105,201,202],{},"Linux native interface",[105,204,205],{},"Lowest level, few dependencies, high versatility.",[105,207,208],{},"Want to deeply understand network communication mechanisms.",[90,210,211,214,217,220],{},[105,212,213],{},"boost::asio",[105,215,216],{},"General-purpose C++ networking library",[105,218,219],{},"Supports synchronous/asynchronous modes, suitable for C++ project encapsulation.",[105,221,222],{},"Recommended for C++ projects",[90,224,225,228,231,234],{},[105,226,227],{},"Qt Network",[105,229,230],{},"Qt Network Module",[105,232,233],{},"Easy to integrate with Qt interface programs.",[105,235,236],{},"Qt host computer",[90,238,239,242,245,248],{},[105,240,241],{},"Poco Net",[105,243,244],{},"C++ networking library",[105,246,247],{},"Fully encapsulated, feature-rich.",[105,249,250],{},"Medium-to-large C++ service programs",[90,252,253,256,259,262],{},[105,254,255],{},"Python socket",[105,257,258],{},"Python standard library",[105,260,261],{},"Simple and convenient, suitable for testing.",[105,263,264],{},"Python debugging script",[90,266,267,270,273,276],{},[105,268,269],{},"ROS 2 topic/service/action",[105,271,272],{},"ROS 2 communication mechanism",[105,274,275],{},"Suitable for ROS 2 internal node communication.",[105,277,278],{},"ROS 2 internal communication",[15,280,281],{},"These solutions are all fundamentally designed to complete TCP connections, sending, and receiving, differing only in their level of encapsulation.",[56,283,285],{"id":284},"comparison-of-solutions","Comparison of Solutions",[84,287,288,300],{},[87,289,290],{},[90,291,292,294,297],{},[93,293,183],{},[93,295,296],{},"Advantages",[93,298,299],{},"Disadvantages",[100,301,302,312,322,332,342,352],{},[90,303,304,306,309],{},[105,305,199],{},[105,307,308],{},"native, stable, few dependencies, strong versatility",[105,310,311],{},"The code is relatively cumbersome, and asynchronous handling is troublesome.",[90,313,314,316,319],{},[105,315,213],{},[105,317,318],{},"C++ project-friendly, convenient asynchronous communication, suitable for encapsulating drivers.",[105,320,321],{},"Need to understand concepts such as io_context, socket, and callbacks.",[90,323,324,326,329],{},[105,325,227],{},[105,327,328],{},"Integrates naturally with Qt programs; signals and slots are convenient to use.",[105,330,331],{},"Not suitable to be detached from Qt's underlying driver.",[90,333,334,336,339],{},[105,335,241],{},[105,337,338],{},"Encapsulation is complete, strong engineering capability.",[105,340,341],{},"A bit heavy for beginners.",[90,343,344,346,349],{},[105,345,255],{},[105,347,348],{},"Quick to learn and suitable for testing.",[105,350,351],{},"Not suitable as the main thread for C++ low-level",[90,353,354,357,360],{},[105,355,356],{},"ROS 2 Communication",[105,358,359],{},"ROS 2's internal integration is convenient.",[105,361,362],{},"Not suitable as a replacement for general TCP learning",[56,364,366],{"id":365},"this-tutorial-recommends-selecting","This tutorial recommends selecting",[15,368,369],{},"This tutorial recommends prioritizing:",[70,371,374],{"className":372,"code":373,"language":75,"meta":76},[73],"boost::asio\n",[78,375,373],{"__ignoreMap":76},[15,377,378],{},"The reason is:",[28,380,381,384,387,390,393],{},[31,382,383],{},"Suitable for C++ engineering development",[31,385,386],{},"Supports TCP, UDP, serial port, timer, and other features.",[31,388,389],{},"You can write synchronous code, or you can write asynchronous code.",[31,391,392],{},"Does not depend on ROS 2, making it easy to reuse in ordinary C++, OpenCV, Qt, and embedded Linux projects.",[31,394,395],{},"Subsequently, it can be combined with serial port, UDP, and timer to form a unified I/O programming style.",[15,397,398],{},"The recommended project structure is:",[70,400,403],{"className":401,"code":402,"language":75,"meta":76},[73],"上层项目：ROS 2 / OpenCV / Qt / 普通 C++ 程序\n        ↓\n自己封装的 TcpClient / TcpServer 类\n        ↓\nboost::asio\n        ↓\nTCP socket\n        ↓\n远程设备 / 服务器 / 调试软件\n",[78,404,402],{"__ignoreMap":76},[56,406,408],{"id":407},"relationship-with-ros-2","Relationship with ROS 2",[15,410,411],{},"Learning TCP communication does not mean you need to use TCP to replace ROS 2's topics, services, and actions.",[15,413,414],{},"Within the ROS 2 system, communication between nodes typically prioritizes using ROS 2's own communication mechanisms. TCP is better suited for use between devices, programs, or services outside the ROS 2 system.",[15,416,417],{},"For example:",[70,419,422],{"className":420,"code":421,"language":75,"meta":76},[73],"ROS 2 节点\n        ↓\n自己封装的 TcpClient\n        ↓\nboost::asio\n        ↓\n远程服务器 / Qt 调试软件 / 网络设备\n",[78,423,421],{"__ignoreMap":76},[15,425,426],{},"In other words, ROS 2 is responsible for internal communication within the robot system, while TCP handles interaction with external systems, network devices, and remote services.",[56,428,430],{"id":429},"chapter-learning-objectives","Chapter learning objectives",[15,432,433],{},"After completing this chapter, you should be able to:",[28,435,436,439,442,445,448,451,454,457],{},[31,437,438],{},"Basic concepts of TCP communication",[31,440,441],{},"The meaning of IP address, port number, server, and client",[31,443,444],{},"The basic relationship between Linux socket and Boost.Asio",[31,446,447],{},"Creating a TCP client and server using C++",[31,449,450],{},"Understand TCP byte streams and the sticky packet problem",[31,452,453],{},"Design a simple TCP application-layer protocol",[31,455,456],{},"Encapsulate TCP communication as a reusable C++ class",[31,458,459],{},"Lay the foundation for subsequent network device communication, remote control, and Qt host computer.",{"title":76,"searchDepth":461,"depth":461,"links":462},2,[463],{"id":12,"depth":461,"text":13,"children":464},[465,467,468,469,470,471],{"id":58,"depth":466,"text":59},3,{"id":170,"depth":466,"text":171},{"id":284,"depth":466,"text":285},{"id":365,"depth":466,"text":366},{"id":407,"depth":466,"text":408},{"id":429,"depth":466,"text":430},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","13.3",13030000,"2023-12-30","wiki/2023-12-30-ros2-tutorial","en-us:2023-12-30-ros2-tutorial","/en-us/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信",false,true,null,"en-US","en-us",{},{"title":5,"description":76},"/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信",1,"WoXbo1O0LhAuy3FFttBfg-mgYC0yIXn2qSZZFi6xsOQ",[494,500,506,512,518,524,530,536,542,548,554,560,566,572,578,584,590,596,601,602,607,613,619,625,631,637,643,649,655,661,667,673,679,685,691,697,703,709,715,721,727,733,739,745,751,757,763,769,775,781,787,793,799,805,811,817,823,829,835,841],{"path":495,"stem":496,"title":497,"date":475,"chapter":498,"chapterSort":499,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","Introduction to ROS2","1",1000000,{"path":501,"stem":502,"title":503,"date":475,"chapter":504,"chapterSort":505,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2 Simulation Platform","10",10000000,{"path":507,"stem":508,"title":509,"date":475,"chapter":510,"chapterSort":511,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":513,"stem":514,"title":515,"date":475,"chapter":516,"chapterSort":517,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":519,"stem":520,"title":521,"date":475,"chapter":522,"chapterSort":523,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":525,"stem":526,"title":527,"date":475,"chapter":528,"chapterSort":529,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","Migrate Ign Gazebo to Gz Sim","11.4",11040000,{"path":531,"stem":532,"title":533,"date":475,"chapter":534,"chapterSort":535,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gazebo simulation platform","11",11000000,{"path":537,"stem":538,"title":539,"date":475,"chapter":540,"chapterSort":541,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-1-humble-ban-ben","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-1-Humble版本","Humble Navigation Simulation","12.1",12010000,{"path":543,"stem":544,"title":545,"date":475,"chapter":546,"chapterSort":547,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-2-jazzy-ban-ben","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-2-Jazzy版本","Jazzy Navigation Simulation","12.2",12020000,{"path":549,"stem":550,"title":551,"date":475,"chapter":552,"chapterSort":553,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-3-humble2jazzy","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-3-Humble2Jazzy","Differences in Navigation between Humble and Jazzy","12.3",12030000,{"path":555,"stem":556,"title":557,"date":475,"chapter":558,"chapterSort":559,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","Robot Navigation with Navigation2 (Simulation)","12",12000000,{"path":561,"stem":562,"title":563,"date":475,"chapter":564,"chapterSort":565,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-1-Boost.Aiso","Boost.Asio库","13.1.1",13010100,{"path":567,"stem":568,"title":569,"date":475,"chapter":570,"chapterSort":571,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2-serial-driver","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2_serial_driver","ROS2 Serial Driver Library","13.1.2",13010200,{"path":573,"stem":574,"title":575,"date":475,"chapter":576,"chapterSort":577,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-串口通信","UART serial communication","13.1",13010000,{"path":579,"stem":580,"title":581,"date":475,"chapter":582,"chapterSort":583,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","SocketCAN","13.2.1",13020100,{"path":585,"stem":586,"title":587,"date":475,"chapter":588,"chapterSort":589,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2-socketcan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2_socketcan","ROS2_SocketCAN","13.2.2",13020200,{"path":591,"stem":592,"title":593,"date":475,"chapter":594,"chapterSort":595,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-CAN通信","CAN communication","13.2",13020000,{"path":597,"stem":598,"title":563,"date":475,"chapter":599,"chapterSort":600,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-1-Boost.Aiso","13.3.1",13030100,{"path":472,"stem":490,"title":5,"date":475,"chapter":473,"chapterSort":474,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},{"path":603,"stem":604,"title":563,"date":475,"chapter":605,"chapterSort":606,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-1-Boost.Aiso","13.4.1",13040100,{"path":608,"stem":609,"title":610,"date":475,"chapter":611,"chapterSort":612,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-udp-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-UDP通信","UDP communication","13.4",13040000,{"path":614,"stem":615,"title":616,"date":475,"chapter":617,"chapterSort":618,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-linux-ying-jian-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-Linux硬件通信","Linux hardware communication","13",13000000,{"path":620,"stem":621,"title":622,"date":475,"chapter":623,"chapterSort":624,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-1-ji-qi-ren-zu-cheng","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-1-机器人组成","Robot Composition","14.1",14010000,{"path":626,"stem":627,"title":628,"date":475,"chapter":629,"chapterSort":630,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-1-yuan-cheng-kai-fa-ssh","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-1-远程开发SSH","Remote Development SSH","14.2.1",14020100,{"path":632,"stem":633,"title":634,"date":475,"chapter":635,"chapterSort":636,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-2-yuan-cheng-fang-wen-zhuo-mian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-2-远程访问桌面","Remote Desktop Access","14.2.2",14020200,{"path":638,"stem":639,"title":640,"date":475,"chapter":641,"chapterSort":642,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-工控机之远程开发环境","Remote Development Environment for Industrial PC","14.2",14020000,{"path":644,"stem":645,"title":646,"date":475,"chapter":647,"chapterSort":648,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-3-gong-kong-ji-zhi-wai-jie-usb-she-bei","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-3-工控机之外接USB设备","External USB Devices for the Industrial PC","14.3",14030000,{"path":650,"stem":651,"title":652,"date":475,"chapter":653,"chapterSort":654,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-4-fen-bu-shi-da-jian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-4-分布式搭建","Distributed setup","14.4",14040000,{"path":656,"stem":657,"title":658,"date":475,"chapter":659,"chapterSort":660,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-5-you-hua-ri-zhi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-5-优化日志","Optimize logs","14.5",14050000,{"path":662,"stem":663,"title":664,"date":475,"chapter":665,"chapterSort":666,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-1-li-cheng-ji-odom","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-1-里程计Odom","odometry","14.6.1",14060100,{"path":668,"stem":669,"title":670,"date":475,"chapter":671,"chapterSort":672,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-2-惯性计IMU","Inertial Measurement Unit (IMU)","14.6.2",14060200,{"path":674,"stem":675,"title":676,"date":475,"chapter":677,"chapterSort":678,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-3-ji-guang-lei-da-lidar","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-3-激光雷达LiDAR","LiDAR","14.6.3",14060300,{"path":680,"stem":681,"title":682,"date":475,"chapter":683,"chapterSort":684,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-4-xiang-ji-camera","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-4-相机Camera","Camera","14.6.4",14060400,{"path":686,"stem":687,"title":688,"date":475,"chapter":689,"chapterSort":690,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-5-quan-qiu-ding-wei-gnss","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-5-全球定位GNSS","Global Navigation Satellite System (GNSS)","14.6.5",14060500,{"path":692,"stem":693,"title":694,"date":475,"chapter":695,"chapterSort":696,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-6-shou-bing-joy","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-6-手柄joy","The query \"手柄JOY\" is a bit ambiguous. To help you better, could you please provide more details? For example:","14.6.6",14060600,{"path":698,"stem":699,"title":700,"date":475,"chapter":701,"chapterSort":702,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-7-jian-pan-kong-zhi-jie-dian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-7-键盘控制节点","Keyboard control node","14.6.7",14060700,{"path":704,"stem":705,"title":706,"date":475,"chapter":707,"chapterSort":708,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-ying-jian-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-硬件平台","Hardware platform","14.6",14060000,{"path":710,"stem":711,"title":712,"date":475,"chapter":713,"chapterSort":714,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-7-zuo-biao-xi-yu-hua-ti-guan-xi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-7-坐标系与话题关系","Coordinate System and Topic Relationship","14.7",14070000,{"path":716,"stem":717,"title":718,"date":475,"chapter":719,"chapterSort":720,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-lun-shi-li-cheng-ji-biao-ding","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-轮式里程计标定","Wheel odometry calibration","14.8.1.1",14080101,{"path":722,"stem":723,"title":724,"date":475,"chapter":725,"chapterSort":726,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-轮式里程计与IMU融合","Fusion of Wheel Odometry and IMU","14.8.1.2",14080102,{"path":728,"stem":729,"title":730,"date":475,"chapter":731,"chapterSort":732,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-轮式里程计标定与融合","Wheel odometry calibration and fusion","14.8.1",14080100,{"path":734,"stem":735,"title":736,"date":475,"chapter":737,"chapterSort":738,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-2-ji-guang-lei-da-gong-ju","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-2-激光雷达工具","Lidar Tool","14.8.2",14080200,{"path":740,"stem":741,"title":742,"date":475,"chapter":743,"chapterSort":744,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-3-xiang-ji-shi-yong-jin-jie","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-3-相机使用进阶","Advanced Camera Usage","14.8.3",14080300,{"path":746,"stem":747,"title":748,"date":475,"chapter":749,"chapterSort":750,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-ying-jian-ping-tai-jin-jie","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-硬件平台进阶","Advanced Hardware Platform","14.8",14080000,{"path":752,"stem":753,"title":754,"date":475,"chapter":755,"chapterSort":756,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","Robot hardware","14",14000000,{"path":758,"stem":759,"title":760,"date":475,"chapter":761,"chapterSort":762,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":764,"stem":765,"title":766,"date":475,"chapter":767,"chapterSort":768,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","MoveIt2 industrial robot arm","16",16000000,{"path":770,"stem":771,"title":772,"date":475,"chapter":773,"chapterSort":774,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","Robot Navigation with Navigation2 (Physical Robot)","17",17000000,{"path":776,"stem":777,"title":778,"date":475,"chapter":779,"chapterSort":780,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch18-microros","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":782,"stem":783,"title":784,"date":475,"chapter":785,"chapterSort":786,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots simulation platform","19",19000000,{"path":788,"stem":789,"title":790,"date":475,"chapter":791,"chapterSort":792,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch2-入门操作","Getting Started","2",2000000,{"path":794,"stem":795,"title":796,"date":475,"chapter":797,"chapterSort":798,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch20-opencv","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":800,"stem":801,"title":802,"date":475,"chapter":803,"chapterSort":804,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","Workspace and Function Packages","3",3000000,{"path":806,"stem":807,"title":808,"date":475,"chapter":809,"chapterSort":810,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch4-四大通信","Four Major Communications","4",4000000,{"path":812,"stem":813,"title":814,"date":475,"chapter":815,"chapterSort":816,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2 Other Communication Mechanisms","5",5000000,{"path":818,"stem":819,"title":820,"date":475,"chapter":821,"chapterSort":822,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch6-launch","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":824,"stem":825,"title":826,"date":475,"chapter":827,"chapterSort":828,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","Replaying rosbag2","7",7000000,{"path":830,"stem":831,"title":832,"date":475,"chapter":833,"chapterSort":834,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","Coordinate Transformation TF","8",8000000,{"path":836,"stem":837,"title":838,"date":475,"chapter":839,"chapterSort":840,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":482},"/en-us/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","Visualization Platform RVIZ2 and URDF Modeling Language","9",9000000,{"path":478,"stem":842,"title":843,"date":475,"chapter":484,"chapterSort":844,"docKey":477,"docRoot":478,"docTitle":479,"isWikiDoc":483,"isWikiIndex":483},"_i18n/en-us/wiki/2023-12-30-ros2-tutorial/index","ROS2 Robot Operating System Tutorial",0,{"variants":846},[847,848,851,854,857],{"path":472,"localeSlug":486,"i18nKey":481},{"path":849,"localeSlug":850,"i18nKey":481},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","zh-hant",{"path":852,"localeSlug":853,"i18nKey":481},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","zh-hk",{"path":855,"localeSlug":856,"i18nKey":481},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","zh-tw",{"path":858,"localeSlug":859,"i18nKey":481},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","zh-cn",[472,489,849,489,852,489,855,489,858,489],1780671802963]