[{"data":1,"prerenderedAt":857},["ShallowReactive",2],{"wiki-page-/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin":3,"wiki-doc-items-/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin":489,"language-switcher-data-/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin":841,"wiki-i18n-paths-/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin":856},{"id":4,"title":5,"body":6,"canonicalPath":469,"chapter":470,"chapterSort":471,"date":472,"description":76,"docI18nKey":473,"docKey":474,"docRoot":475,"docTitle":476,"extension":477,"i18nKey":478,"isBlogPost":479,"isWikiDoc":480,"isWikiIndex":479,"layout":481,"legacyPath":482,"locale":483,"localeSlug":484,"meta":485,"navigation":480,"path":469,"seo":486,"sourcePath":482,"sourceStem":478,"stem":478,"wikiDepth":487,"__hash__":488},"content/wiki/2023-12-30-ros2-tutorial/ch13-3-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],{},"支持同步/异步，适合 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/service/action",[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/O 编程风格",[15,395,396],{},"推荐的工程结构是：",[70,398,401],{"className":399,"code":400,"language":75,"meta":76},[73],"上层项目：ROS 2 / OpenCV / Qt / 普通 C++ 程序\n        ↓\n自己封装的 TcpClient / TcpServer 类\n        ↓\nboost::asio\n        ↓\nTCP socket\n        ↓\n远程设备 / 服务器 / 调试软件\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远程服务器 / Qt 调试软件 / 网络设备\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},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","13.3",13030000,"2023-12-30","wiki/2023-12-30-ros2-tutorial","zh-cn:2023-12-30-ros2-tutorial","/zh-cn/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信",false,true,null,"/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","zh-CN","zh-cn",{},{"title":5,"description":76},1,"nYuYPlmK2RX0oRbTb5BG94oKEMRVMB8sSXw87eCl-gk",[490,496,502,508,514,520,526,532,538,544,550,556,562,568,574,580,586,592,597,598,603,609,615,621,627,633,639,645,651,657,663,669,675,681,687,693,699,705,711,717,723,729,735,741,747,753,759,765,771,777,783,789,795,801,807,813,819,825,831,837],{"path":491,"stem":492,"title":493,"date":472,"chapter":494,"chapterSort":495,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","ROS2介绍","1",1000000,{"path":497,"stem":498,"title":499,"date":472,"chapter":500,"chapterSort":501,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2仿真平台","10",10000000,{"path":503,"stem":504,"title":505,"date":472,"chapter":506,"chapterSort":507,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":509,"stem":510,"title":511,"date":472,"chapter":512,"chapterSort":513,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":515,"stem":516,"title":517,"date":472,"chapter":518,"chapterSort":519,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":521,"stem":522,"title":523,"date":472,"chapter":524,"chapterSort":525,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim","11.4",11040000,{"path":527,"stem":528,"title":529,"date":472,"chapter":530,"chapterSort":531,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gezebo仿真平台","11",11000000,{"path":533,"stem":534,"title":535,"date":472,"chapter":536,"chapterSort":537,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch12-1-humble-ban-ben","wiki/2023-12-30-ros2-tutorial/ch12-1-Humble版本","Humble导航仿真","12.1",12010000,{"path":539,"stem":540,"title":541,"date":472,"chapter":542,"chapterSort":543,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch12-2-jazzy-ban-ben","wiki/2023-12-30-ros2-tutorial/ch12-2-Jazzy版本","Jazzy导航仿真","12.2",12020000,{"path":545,"stem":546,"title":547,"date":472,"chapter":548,"chapterSort":549,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch12-3-humble2jazzy","wiki/2023-12-30-ros2-tutorial/ch12-3-Humble2Jazzy","Humble与Jazzy导航的差异","12.3",12030000,{"path":551,"stem":552,"title":553,"date":472,"chapter":554,"chapterSort":555,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)","12",12000000,{"path":557,"stem":558,"title":559,"date":472,"chapter":560,"chapterSort":561,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-1-1-boost-aiso","wiki/2023-12-30-ros2-tutorial/ch13-1-1-Boost.Aiso","Boost.Asio库","13.1.1",13010100,{"path":563,"stem":564,"title":565,"date":472,"chapter":566,"chapterSort":567,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2-serial-driver","wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2_serial_driver","ROS2 Serial Driver库","13.1.2",13010200,{"path":569,"stem":570,"title":571,"date":472,"chapter":572,"chapterSort":573,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","wiki/2023-12-30-ros2-tutorial/ch13-1-串口通信","UART串口通信","13.1",13010000,{"path":575,"stem":576,"title":577,"date":472,"chapter":578,"chapterSort":579,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","SocketCAN","13.2.1",13020100,{"path":581,"stem":582,"title":583,"date":472,"chapter":584,"chapterSort":585,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2-socketcan","wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2_socketcan","ROS2_SocketCAN","13.2.2",13020200,{"path":587,"stem":588,"title":589,"date":472,"chapter":590,"chapterSort":591,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","wiki/2023-12-30-ros2-tutorial/ch13-2-CAN通信","CAN通信","13.2",13020000,{"path":593,"stem":594,"title":559,"date":472,"chapter":595,"chapterSort":596,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-3-1-boost-aiso","wiki/2023-12-30-ros2-tutorial/ch13-3-1-Boost.Aiso","13.3.1",13030100,{"path":469,"stem":478,"title":5,"date":472,"chapter":470,"chapterSort":471,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},{"path":599,"stem":600,"title":559,"date":472,"chapter":601,"chapterSort":602,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-4-1-boost-aiso","wiki/2023-12-30-ros2-tutorial/ch13-4-1-Boost.Aiso","13.4.1",13040100,{"path":604,"stem":605,"title":606,"date":472,"chapter":607,"chapterSort":608,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-4-udp-tong-xin","wiki/2023-12-30-ros2-tutorial/ch13-4-UDP通信","UDP通信","13.4",13040000,{"path":610,"stem":611,"title":612,"date":472,"chapter":613,"chapterSort":614,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-linux-ying-jian-tong-xin","wiki/2023-12-30-ros2-tutorial/ch13-Linux硬件通信","Linux硬件通信","13",13000000,{"path":616,"stem":617,"title":618,"date":472,"chapter":619,"chapterSort":620,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-1-ji-qi-ren-zu-cheng","wiki/2023-12-30-ros2-tutorial/ch14-1-机器人组成","机器人组成","14.1",14010000,{"path":622,"stem":623,"title":624,"date":472,"chapter":625,"chapterSort":626,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-2-1-yuan-cheng-kai-fa-ssh","wiki/2023-12-30-ros2-tutorial/ch14-2-1-远程开发SSH","远程开发SSH","14.2.1",14020100,{"path":628,"stem":629,"title":630,"date":472,"chapter":631,"chapterSort":632,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-2-2-yuan-cheng-fang-wen-zhuo-mian","wiki/2023-12-30-ros2-tutorial/ch14-2-2-远程访问桌面","远程访问桌面","14.2.2",14020200,{"path":634,"stem":635,"title":636,"date":472,"chapter":637,"chapterSort":638,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-2-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","wiki/2023-12-30-ros2-tutorial/ch14-2-工控机之远程开发环境","工控机之远程开发环境","14.2",14020000,{"path":640,"stem":641,"title":642,"date":472,"chapter":643,"chapterSort":644,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-3-gong-kong-ji-zhi-wai-jie-usb-she-bei","wiki/2023-12-30-ros2-tutorial/ch14-3-工控机之外接USB设备","工控机之外接USB设备","14.3",14030000,{"path":646,"stem":647,"title":648,"date":472,"chapter":649,"chapterSort":650,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-4-fen-bu-shi-da-jian","wiki/2023-12-30-ros2-tutorial/ch14-4-分布式搭建","分布式搭建","14.4",14040000,{"path":652,"stem":653,"title":654,"date":472,"chapter":655,"chapterSort":656,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-5-you-hua-ri-zhi","wiki/2023-12-30-ros2-tutorial/ch14-5-优化日志","优化日志","14.5",14050000,{"path":658,"stem":659,"title":660,"date":472,"chapter":661,"chapterSort":662,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-1-li-cheng-ji-odom","wiki/2023-12-30-ros2-tutorial/ch14-6-1-里程计Odom","里程计Odom","14.6.1",14060100,{"path":664,"stem":665,"title":666,"date":472,"chapter":667,"chapterSort":668,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","wiki/2023-12-30-ros2-tutorial/ch14-6-2-惯性计IMU","惯性计IMU","14.6.2",14060200,{"path":670,"stem":671,"title":672,"date":472,"chapter":673,"chapterSort":674,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-3-ji-guang-lei-da-lidar","wiki/2023-12-30-ros2-tutorial/ch14-6-3-激光雷达LiDAR","激光雷达LiDAR","14.6.3",14060300,{"path":676,"stem":677,"title":678,"date":472,"chapter":679,"chapterSort":680,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-4-xiang-ji-camera","wiki/2023-12-30-ros2-tutorial/ch14-6-4-相机Camera","相机Camera","14.6.4",14060400,{"path":682,"stem":683,"title":684,"date":472,"chapter":685,"chapterSort":686,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-5-quan-qiu-ding-wei-gnss","wiki/2023-12-30-ros2-tutorial/ch14-6-5-全球定位GNSS","全球定位GNSS","14.6.5",14060500,{"path":688,"stem":689,"title":690,"date":472,"chapter":691,"chapterSort":692,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-6-shou-bing-joy","wiki/2023-12-30-ros2-tutorial/ch14-6-6-手柄joy","手柄JOY","14.6.6",14060600,{"path":694,"stem":695,"title":696,"date":472,"chapter":697,"chapterSort":698,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-7-jian-pan-kong-zhi-jie-dian","wiki/2023-12-30-ros2-tutorial/ch14-6-7-键盘控制节点","键盘控制节点","14.6.7",14060700,{"path":700,"stem":701,"title":702,"date":472,"chapter":703,"chapterSort":704,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-6-ying-jian-ping-tai","wiki/2023-12-30-ros2-tutorial/ch14-6-硬件平台","硬件平台","14.6",14060000,{"path":706,"stem":707,"title":708,"date":472,"chapter":709,"chapterSort":710,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-7-zuo-biao-xi-yu-hua-ti-guan-xi","wiki/2023-12-30-ros2-tutorial/ch14-7-坐标系与话题关系","坐标系与话题关系","14.7",14070000,{"path":712,"stem":713,"title":714,"date":472,"chapter":715,"chapterSort":716,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-lun-shi-li-cheng-ji-biao-ding","wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-轮式里程计标定","轮式里程计标定","14.8.1.1",14080101,{"path":718,"stem":719,"title":720,"date":472,"chapter":721,"chapterSort":722,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-轮式里程计与IMU融合","轮式里程计与IMU融合","14.8.1.2",14080102,{"path":724,"stem":725,"title":726,"date":472,"chapter":727,"chapterSort":728,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-8-1-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","wiki/2023-12-30-ros2-tutorial/ch14-8-1-轮式里程计标定与融合","轮式里程计标定与融合","14.8.1",14080100,{"path":730,"stem":731,"title":732,"date":472,"chapter":733,"chapterSort":734,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-8-2-ji-guang-lei-da-gong-ju","wiki/2023-12-30-ros2-tutorial/ch14-8-2-激光雷达工具","激光雷达工具","14.8.2",14080200,{"path":736,"stem":737,"title":738,"date":472,"chapter":739,"chapterSort":740,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-8-3-xiang-ji-shi-yong-jin-jie","wiki/2023-12-30-ros2-tutorial/ch14-8-3-相机使用进阶","相机使用进阶","14.8.3",14080300,{"path":742,"stem":743,"title":744,"date":472,"chapter":745,"chapterSort":746,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-8-ying-jian-ping-tai-jin-jie","wiki/2023-12-30-ros2-tutorial/ch14-8-硬件平台进阶","硬件平台进阶","14.8",14080000,{"path":748,"stem":749,"title":750,"date":472,"chapter":751,"chapterSort":752,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","机器人硬件","14",14000000,{"path":754,"stem":755,"title":756,"date":472,"chapter":757,"chapterSort":758,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":760,"stem":761,"title":762,"date":472,"chapter":763,"chapterSort":764,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂","16",16000000,{"path":766,"stem":767,"title":768,"date":472,"chapter":769,"chapterSort":770,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)","17",17000000,{"path":772,"stem":773,"title":774,"date":472,"chapter":775,"chapterSort":776,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch18-microros","wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":778,"stem":779,"title":780,"date":472,"chapter":781,"chapterSort":782,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots仿真平台","19",19000000,{"path":784,"stem":785,"title":786,"date":472,"chapter":787,"chapterSort":788,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","wiki/2023-12-30-ros2-tutorial/ch2-入门操作","入门操作","2",2000000,{"path":790,"stem":791,"title":792,"date":472,"chapter":793,"chapterSort":794,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch20-opencv","wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":796,"stem":797,"title":798,"date":472,"chapter":799,"chapterSort":800,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","工作空间与功能包","3",3000000,{"path":802,"stem":803,"title":804,"date":472,"chapter":805,"chapterSort":806,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","wiki/2023-12-30-ros2-tutorial/ch4-四大通信","四大通信","4",4000000,{"path":808,"stem":809,"title":810,"date":472,"chapter":811,"chapterSort":812,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2其他通信机制","5",5000000,{"path":814,"stem":815,"title":816,"date":472,"chapter":817,"chapterSort":818,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch6-launch","wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":820,"stem":821,"title":822,"date":472,"chapter":823,"chapterSort":824,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","回溯rosbag2","7",7000000,{"path":826,"stem":827,"title":828,"date":472,"chapter":829,"chapterSort":830,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","坐标变换TF","8",8000000,{"path":832,"stem":833,"title":834,"date":472,"chapter":835,"chapterSort":836,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":479},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言","9",9000000,{"path":475,"stem":838,"title":839,"date":472,"chapter":481,"chapterSort":840,"docKey":474,"docRoot":475,"docTitle":476,"isWikiDoc":480,"isWikiIndex":480},"wiki/2023-12-30-ros2-tutorial/index","ROS2机器人操作系统教程",0,{"variants":842},[843,846,849,852,855],{"path":844,"localeSlug":845,"i18nKey":478},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","en-us",{"path":847,"localeSlug":848,"i18nKey":478},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","zh-hant",{"path":850,"localeSlug":851,"i18nKey":478},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","zh-hk",{"path":853,"localeSlug":854,"i18nKey":478},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","zh-tw",{"path":469,"localeSlug":484,"i18nKey":478},[844,482,847,482,850,482,853,482,469,482],1780663048316]