[{"data":1,"prerenderedAt":844},["ShallowReactive",2],{"wiki-page-/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin":3,"wiki-doc-items-/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin":476,"language-switcher-data-/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin":828,"wiki-i18n-paths-/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin":843},{"id":4,"title":5,"body":6,"canonicalPath":456,"chapter":457,"chapterSort":458,"date":459,"description":57,"docI18nKey":460,"docKey":461,"docRoot":462,"docTitle":463,"extension":464,"i18nKey":465,"isBlogPost":466,"isWikiDoc":467,"isWikiIndex":466,"layout":468,"legacyPath":468,"locale":469,"localeSlug":470,"meta":471,"navigation":467,"path":456,"seo":472,"sourcePath":473,"sourceStem":465,"stem":474,"wikiDepth":65,"__hash__":475},"content/_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-串口通信.md","UART serial communication",{"type":7,"value":8,"toc":446},"minimark",[9,14,18,21,40,43,48,51,82,85,88,163,166,170,173,263,266,270,336,340,343,351,354,377,380,386,390,393,398,401,407,410,414,417,442],[10,11,13],"h2",{"id":12},"linux-serial-communication","Linux Serial Communication",[15,16,17],"p",{},"Serial communication is one of the most common low-level communication methods in robotics and embedded projects.",[15,19,20],{},"In actual projects, the host computer often needs to exchange data with devices such as STM32, ESP32, Arduino, sensor modules, and debug boards via serial port. For example:",[22,23,24,28,31,34,37],"ul",{},[25,26,27],"li",{},"The host computer sends motor speed commands to the STM32.",[25,29,30],{},"STM32 sends encoder data back to the host computer",[25,32,33],{},"Read sensor data from IMU, GPS, laser ranging module, etc.",[25,35,36],{},"Using a USB to serial module for debugging",[25,38,39],{},"Communicating with the lower-level controller in ROS 2 chassis control",[15,41,42],{},"Serial communication is characterized by simplicity, versatility, and low cost, making it especially suitable for point-to-point communication between a host computer and a microcontroller.",[44,45,47],"h3",{"id":46},"what-is-serial-communication","What is serial communication?",[15,49,50],{},"Serial communication usually refers to UART communication. On Linux, common USB-to-serial devices are recognized as device files like the following:",[52,53,58],"pre",{"className":54,"code":55,"language":56,"meta":57,"style":57},"language-bash shiki shiki-themes github-light github-dark","/dev/ttyUSB0\n/dev/ttyUSB1\n/dev/ttyACM0\n","bash","",[59,60,61,70,76],"code",{"__ignoreMap":57},[62,63,66],"span",{"class":64,"line":65},"line",1,[62,67,69],{"class":68},"sScJk","/dev/ttyUSB0\n",[62,71,73],{"class":64,"line":72},2,[62,74,75],{"class":68},"/dev/ttyUSB1\n",[62,77,79],{"class":64,"line":78},3,[62,80,81],{"class":68},"/dev/ttyACM0\n",[15,83,84],{},"The program only needs to open the corresponding device file and set parameters such as baud rate, data bits, stop bits, and parity bit, and then it can send and receive data.",[15,86,87],{},"Common parameters include:",[89,90,91,104],"table",{},[92,93,94],"thead",{},[95,96,97,101],"tr",{},[98,99,100],"th",{},"parameter",[98,102,103],{},"Explanation",[105,106,107,123,131,139,147,155],"tbody",{},[95,108,109,113],{},[110,111,112],"td",{},"device name",[110,114,115,116,119,120],{},"For example, ",[59,117,118],{},"/dev/ttyUSB0",", ",[59,121,122],{},"/dev/ttyACM0",[95,124,125,128],{},[110,126,127],{},"baud rate",[110,129,130],{},"For example, 115200, 921600",[95,132,133,136],{},[110,134,135],{},"data bits",[110,137,138],{},"Commonly 8-bit",[95,140,141,144],{},[110,142,143],{},"stop bit",[110,145,146],{},"Commonly 1 bit",[95,148,149,152],{},[110,150,151],{},"check bit",[110,153,154],{},"Commonly without checksum",[95,156,157,160],{},[110,158,159],{},"rate limiting",[110,161,162],{},"In typical projects, hardware flow control is often disabled.",[15,164,165],{},"In robotics projects, serial ports typically do not just send plain strings; instead, they design their own binary communication protocols, such as frame header, length, command word, data area, CRC check, etc.",[44,167,169],{"id":168},"common-serial-port-libraries-for-linux","Common Serial Port Libraries for Linux",[15,171,172],{},"There are multiple options for using serial communication on Linux, common ones include:",[89,174,175,191],{},[92,176,177],{},[95,178,179,182,185,188],{},[98,180,181],{},"solution",[98,183,184],{},"type",[98,186,187],{},"Features",[98,189,190],{},"Suitable scenarios",[105,192,193,207,221,235,249],{},[95,194,195,198,201,204],{},[110,196,197],{},"termios",[110,199,200],{},"Linux native interface",[110,202,203],{},"Lowest level, few dependencies, strong generality, but the code is relatively cumbersome.",[110,205,206],{},"Want to deeply understand the Linux serial port mechanism",[95,208,209,212,215,218],{},[110,210,211],{},"boost::asio",[110,213,214],{},"General C++ Library",[110,216,217],{},"Supports synchronous and asynchronous modes, has a relatively clear code structure, and offers good cross-platform capabilities.",[110,219,220],{},"Recommended for C++ project packaging",[95,222,223,226,229,232],{},[110,224,225],{},"libserial",[110,227,228],{},"third-party serial library",[110,230,231],{},"Easy to use and easier to learn than termios.",[110,233,234],{},"Basic Serial Port Communication Project",[95,236,237,240,243,246],{},[110,238,239],{},"serial_driver",[110,241,242],{},"ROS 2 Ecosystem Encapsulation",[110,244,245],{},"More convenient to integrate with ROS 2, but not suitable for projects that rely solely on systems other than ROS 2.",[110,247,248],{},"Pure ROS 2 project or reference implementation",[95,250,251,254,257,260],{},[110,252,253],{},"pyserial",[110,255,256],{},"Python serial library",[110,258,259],{},"Very simple to use, ideal for quick testing.",[110,261,262],{},"Python debugging script",[15,264,265],{},"These libraries are essentially designed to accomplish the opening, configuration, reading, and writing of serial ports, differing only in their level of encapsulation.",[44,267,269],{"id":268},"comparison-of-solutions","Comparison of Solutions",[89,271,272,284],{},[92,273,274],{},[95,275,276,278,281],{},[98,277,181],{},[98,279,280],{},"Advantages",[98,282,283],{},"Disadvantages",[105,285,286,296,306,316,326],{},[95,287,288,290,293],{},[110,289,197],{},[110,291,292],{},"Linux native, minimal dependencies, strong underlying capabilities",[110,294,295],{},"The configuration is cumbersome, and beginners easily make mistakes.",[95,297,298,300,303],{},[110,299,211],{},[110,301,302],{},"C++ project-friendly, convenient asynchronous communication, suitable for encapsulating drivers.",[110,304,305],{},"Need to understand the basic model of asio.",[95,307,308,310,313],{},[110,309,225],{},[110,311,312],{},"Simple and easy to use, quick to get started",[110,314,315],{},"Flexibility and engineering controllability are not as good as rolling your own.",[95,317,318,320,323],{},[110,319,239],{},[110,321,322],{},"Convenient integration with the ROS 2 ecosystem",[110,324,325],{},"After leaving ROS 2, reusability is poor.",[95,327,328,330,333],{},[110,329,253],{},[110,331,332],{},"Quick debugging, good for scripts.",[110,334,335],{},"Not suitable as the main focus for high-performance C++ low-level drivers.",[44,337,339],{"id":338},"this-tutorial-recommends-selecting","This tutorial recommends selecting",[15,341,342],{},"This tutorial recommends prioritizing:",[52,344,349],{"className":345,"code":347,"language":348,"meta":57},[346],"language-text","boost::asio\n","text",[59,350,347],{"__ignoreMap":57},[15,352,353],{},"The reason is:",[22,355,356,361,364,367,374],{},[25,357,358,359],{},"more suitable for C++ development than directly using ",[59,360,197],{},[25,362,363],{},"It can be encapsulated into a regular C++ driver for easy reuse.",[25,365,366],{},"Without relying on ROS 2, it can be used with OpenCV, Qt, and ordinary C++ projects.",[25,368,369,370,373],{},"Later, it can also naturally integrate ",[59,371,372],{},"ros2_control hardware_interface",".",[25,375,376],{},"More suitable for robot host computer and STM32 communication scenarios.",[15,378,379],{},"The recommended project structure is:",[52,381,384],{"className":382,"code":383,"language":348,"meta":57},[346],"上层项目：ROS 2 / OpenCV / Qt / 普通 C++ 程序\n        ↓\n自己封装的 SerialDriver 类\n        ↓\nboost::asio\n        ↓\n/dev/ttyUSB0\n        ↓\nSTM32 / ESP32 / 传感器\n",[59,385,383],{"__ignoreMap":57},[44,387,389],{"id":388},"relationship-with-ros-2","Relationship with ROS 2",[15,391,392],{},"Learning Linux serial communication does not mean you don't use ROS 2.",[15,394,395,396,373],{},"In a ROS 2 project, serial communication can be encapsulated as a normal C++ class, which is then called within a ROS 2 node or ",[59,397,372],{},[15,399,400],{},"For example:",[52,402,405],{"className":403,"code":404,"language":348,"meta":57},[346],"ros2_control controller\n        ↓\nhardware_interface\n        ↓\n自己封装的 SerialDriver\n        ↓\nboost::asio\n        ↓\nSTM32\n",[59,406,404],{"__ignoreMap":57},[15,408,409],{},"The advantage of this is that the serial communication code is not tightly coupled with ROS 2. In the future, even when writing OpenCV projects, Qt host computer applications, or ordinary C++ debugging programs, you can still reuse the same serial port driver.",[44,411,413],{"id":412},"chapter-learning-objectives","Chapter learning objectives",[15,415,416],{},"After completing this chapter, you should be able to:",[22,418,419,422,427,430,433,436,439],{},[25,420,421],{},"Basic Concepts of Serial Devices in Linux",[25,423,424,425],{},"How to view and open serial port devices such as ",[59,426,118],{},[25,428,429],{},"Serial port baud rate, data bits, stop bits, parity bit, and other basic parameters",[25,431,432],{},"Sending and Receiving Serial Port Data Using C++",[25,434,435],{},"Design a simple communication protocol between a host computer and a lower-level computer.",[25,437,438],{},"Encapsulate serial communication into a reusable C++ class.",[25,440,441],{},"Lay the foundation for future integration with ROS 2, OpenCV, and Qt projects.",[443,444,445],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":57,"searchDepth":72,"depth":72,"links":447},[448],{"id":12,"depth":72,"text":13,"children":449},[450,451,452,453,454,455],{"id":46,"depth":78,"text":47},{"id":168,"depth":78,"text":169},{"id":268,"depth":78,"text":269},{"id":338,"depth":78,"text":339},{"id":388,"depth":78,"text":389},{"id":412,"depth":78,"text":413},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","13.1",13010000,"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-1-串口通信",false,true,null,"en-US","en-us",{},{"title":5,"description":57},"/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-串口通信","Q4ppzvS0vrZfUL0S9sGpyKzZMNUjUVCte_c7Yj0SsSk",[477,483,489,495,501,507,513,519,525,531,537,543,549,555,556,562,568,574,579,585,590,596,602,608,614,620,626,632,638,644,650,656,662,668,674,680,686,692,698,704,710,716,722,728,734,740,746,752,758,764,770,776,782,788,794,800,806,812,818,824],{"path":478,"stem":479,"title":480,"date":459,"chapter":481,"chapterSort":482,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":484,"stem":485,"title":486,"date":459,"chapter":487,"chapterSort":488,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":490,"stem":491,"title":492,"date":459,"chapter":493,"chapterSort":494,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":496,"stem":497,"title":498,"date":459,"chapter":499,"chapterSort":500,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":502,"stem":503,"title":504,"date":459,"chapter":505,"chapterSort":506,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":508,"stem":509,"title":510,"date":459,"chapter":511,"chapterSort":512,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":514,"stem":515,"title":516,"date":459,"chapter":517,"chapterSort":518,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":520,"stem":521,"title":522,"date":459,"chapter":523,"chapterSort":524,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":526,"stem":527,"title":528,"date":459,"chapter":529,"chapterSort":530,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":532,"stem":533,"title":534,"date":459,"chapter":535,"chapterSort":536,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":538,"stem":539,"title":540,"date":459,"chapter":541,"chapterSort":542,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":544,"stem":545,"title":546,"date":459,"chapter":547,"chapterSort":548,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":550,"stem":551,"title":552,"date":459,"chapter":553,"chapterSort":554,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":456,"stem":474,"title":5,"date":459,"chapter":457,"chapterSort":458,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},{"path":557,"stem":558,"title":559,"date":459,"chapter":560,"chapterSort":561,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":563,"stem":564,"title":565,"date":459,"chapter":566,"chapterSort":567,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":569,"stem":570,"title":571,"date":459,"chapter":572,"chapterSort":573,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":575,"stem":576,"title":546,"date":459,"chapter":577,"chapterSort":578,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":580,"stem":581,"title":582,"date":459,"chapter":583,"chapterSort":584,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信","TCP communication","13.3",13030000,{"path":586,"stem":587,"title":546,"date":459,"chapter":588,"chapterSort":589,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":591,"stem":592,"title":593,"date":459,"chapter":594,"chapterSort":595,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":597,"stem":598,"title":599,"date":459,"chapter":600,"chapterSort":601,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":603,"stem":604,"title":605,"date":459,"chapter":606,"chapterSort":607,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":609,"stem":610,"title":611,"date":459,"chapter":612,"chapterSort":613,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":615,"stem":616,"title":617,"date":459,"chapter":618,"chapterSort":619,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":621,"stem":622,"title":623,"date":459,"chapter":624,"chapterSort":625,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":627,"stem":628,"title":629,"date":459,"chapter":630,"chapterSort":631,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":633,"stem":634,"title":635,"date":459,"chapter":636,"chapterSort":637,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":639,"stem":640,"title":641,"date":459,"chapter":642,"chapterSort":643,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":645,"stem":646,"title":647,"date":459,"chapter":648,"chapterSort":649,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":651,"stem":652,"title":653,"date":459,"chapter":654,"chapterSort":655,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":657,"stem":658,"title":659,"date":459,"chapter":660,"chapterSort":661,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":663,"stem":664,"title":665,"date":459,"chapter":666,"chapterSort":667,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":669,"stem":670,"title":671,"date":459,"chapter":672,"chapterSort":673,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":675,"stem":676,"title":677,"date":459,"chapter":678,"chapterSort":679,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":681,"stem":682,"title":683,"date":459,"chapter":684,"chapterSort":685,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":687,"stem":688,"title":689,"date":459,"chapter":690,"chapterSort":691,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":693,"stem":694,"title":695,"date":459,"chapter":696,"chapterSort":697,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":699,"stem":700,"title":701,"date":459,"chapter":702,"chapterSort":703,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":705,"stem":706,"title":707,"date":459,"chapter":708,"chapterSort":709,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":711,"stem":712,"title":713,"date":459,"chapter":714,"chapterSort":715,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":717,"stem":718,"title":719,"date":459,"chapter":720,"chapterSort":721,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":723,"stem":724,"title":725,"date":459,"chapter":726,"chapterSort":727,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":729,"stem":730,"title":731,"date":459,"chapter":732,"chapterSort":733,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":735,"stem":736,"title":737,"date":459,"chapter":738,"chapterSort":739,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":741,"stem":742,"title":743,"date":459,"chapter":744,"chapterSort":745,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":747,"stem":748,"title":749,"date":459,"chapter":750,"chapterSort":751,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":753,"stem":754,"title":755,"date":459,"chapter":756,"chapterSort":757,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":759,"stem":760,"title":761,"date":459,"chapter":762,"chapterSort":763,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":765,"stem":766,"title":767,"date":459,"chapter":768,"chapterSort":769,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":771,"stem":772,"title":773,"date":459,"chapter":774,"chapterSort":775,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":777,"stem":778,"title":779,"date":459,"chapter":780,"chapterSort":781,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":783,"stem":784,"title":785,"date":459,"chapter":786,"chapterSort":787,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":789,"stem":790,"title":791,"date":459,"chapter":792,"chapterSort":793,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":795,"stem":796,"title":797,"date":459,"chapter":798,"chapterSort":799,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":801,"stem":802,"title":803,"date":459,"chapter":804,"chapterSort":805,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":807,"stem":808,"title":809,"date":459,"chapter":810,"chapterSort":811,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":813,"stem":814,"title":815,"date":459,"chapter":816,"chapterSort":817,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":819,"stem":820,"title":821,"date":459,"chapter":822,"chapterSort":823,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":466},"/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":462,"stem":825,"title":826,"date":459,"chapter":468,"chapterSort":827,"docKey":461,"docRoot":462,"docTitle":463,"isWikiDoc":467,"isWikiIndex":467},"_i18n/en-us/wiki/2023-12-30-ros2-tutorial/index","ROS2 Robot Operating System Tutorial",0,{"variants":829},[830,831,834,837,840],{"path":456,"localeSlug":470,"i18nKey":465},{"path":832,"localeSlug":833,"i18nKey":465},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","zh-hant",{"path":835,"localeSlug":836,"i18nKey":465},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","zh-hk",{"path":838,"localeSlug":839,"i18nKey":465},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","zh-tw",{"path":841,"localeSlug":842,"i18nKey":465},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","zh-cn",[456,473,832,473,835,473,838,473,841,473],1780671802122]