[{"data":1,"prerenderedAt":989},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-udp-tong-xin":3,"wiki-doc-items-2023-12-30-ros2-tutorial":568,"wiki:author-members":977},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":554,"chapterOrder":555,"date":556,"description":81,"docKey":557,"docRoot":558,"docTitle":559,"extension":560,"isWikiDoc":561,"isWikiIndex":562,"meta":563,"navigation":561,"path":564,"seo":565,"stem":566,"wikiDepth":554,"__hash__":567},"wiki\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-UDP通信.md","UDP通信",[7],"董佳辉",{"type":9,"value":10,"toc":541},"minimark",[11,16,20,23,26,29,57,60,65,68,71,74,85,88,94,97,173,176,180,183,273,276,279,344,347,350,356,359,376,379,385,389,392,475,478,484,488,491,494,497,503,506,512,515,518],[12,13,15],"h2",{"id":14},"linux-udp-通信","Linux UDP 通信",[17,18,19],"p",{},"UDP 通信是 Linux 网络编程中非常常见的一种通信方式。",[17,21,22],{},"相比 TCP，UDP 不需要提前建立连接，发送方可以直接向指定 IP 和端口发送数据。它的特点是简单、延迟低、开销小，但不保证数据一定送达，也不保证顺序。",[17,24,25],{},"在机器人项目中，UDP 常用于高频、实时、允许少量丢包的数据传输场景。",[17,27,28],{},"在实际项目中，UDP 通信常见于：",[30,31,32,36,39,42,45,48,51,54],"ul",{},[33,34,35],"li",{},"激光雷达数据传输",[33,37,38],{},"网络相机或传感器数据流",[33,40,41],{},"机器人状态广播",[33,43,44],{},"局域网设备发现",[33,46,47],{},"遥控器或手柄数据传输",[33,49,50],{},"多机器人之间的简单通信",[33,52,53],{},"高频状态上报",[33,55,56],{},"对实时性要求高、但允许少量丢包的场景",[17,58,59],{},"UDP 的核心特点是快，但不可靠。因此它更适合“持续发送的数据流”，而不是“必须保证每条消息都送达”的场景。",[61,62,64],"h3",{"id":63},"udp-通信是什么","UDP 通信是什么",[17,66,67],{},"UDP，全称 User Datagram Protocol，是一种无连接的传输协议。",[17,69,70],{},"和 TCP 不同，UDP 通信不需要建立连接。只要知道目标 IP 和端口，就可以直接发送数据。",[17,72,73],{},"典型结构如下：",[75,76,82],"pre",{"className":77,"code":79,"language":80,"meta":81},[78],"language-text","UDP Sender\n    ↓\nUDP Receiver\n","text","",[83,84,79],"code",{"__ignoreMap":81},[17,86,87],{},"也可以是双向通信：",[75,89,92],{"className":90,"code":91,"language":80,"meta":81},[78],"程序 A  ←UDP→  程序 B\n",[83,93,91],{"__ignoreMap":81},[17,95,96],{},"常见概念包括：",[98,99,100,113],"table",{},[101,102,103],"thead",{},[104,105,106,110],"tr",{},[107,108,109],"th",{},"概念",[107,111,112],{},"说明",[114,115,116,125,133,141,149,157,165],"tbody",{},[104,117,118,122],{},[119,120,121],"td",{},"IP 地址",[119,123,124],{},"用来定位网络中的设备",[104,126,127,130],{},[119,128,129],{},"端口号",[119,131,132],{},"用来区分不同程序",[104,134,135,138],{},[119,136,137],{},"Datagram",[119,139,140],{},"UDP 数据报，一次发送对应一个数据报",[104,142,143,146],{},[119,144,145],{},"广播",[119,147,148],{},"向局域网内多个设备发送数据",[104,150,151,154],{},[119,152,153],{},"组播",[119,155,156],{},"向加入同一组播组的设备发送数据",[104,158,159,162],{},[119,160,161],{},"丢包",[119,163,164],{},"UDP 不保证数据一定送达",[104,166,167,170],{},[119,168,169],{},"乱序",[119,171,172],{},"UDP 不保证数据按顺序到达",[17,174,175],{},"UDP 和 TCP 最大的区别是：TCP 是可靠字节流，UDP 是不可靠数据报。",[61,177,179],{"id":178},"linux-下常见-udp-库","Linux 下常见 UDP 库",[17,181,182],{},"Linux 下进行 UDP 通信有多种方案，常见的包括：",[98,184,185,201],{},[101,186,187],{},[104,188,189,192,195,198],{},[107,190,191],{},"方案",[107,193,194],{},"类型",[107,196,197],{},"特点",[107,199,200],{},"适合场景",[114,202,203,217,231,245,259],{},[104,204,205,208,211,214],{},[119,206,207],{},"Linux socket API",[119,209,210],{},"Linux 原生接口",[119,212,213],{},"最底层、依赖少、通用性强",[119,215,216],{},"想深入理解网络通信机制",[104,218,219,222,225,228],{},[119,220,221],{},"boost::asio",[119,223,224],{},"通用 C++ 网络库",[119,226,227],{},"支持同步\u002F异步 UDP，适合工程封装",[119,229,230],{},"推荐用于 C++ 项目",[104,232,233,236,239,242],{},[119,234,235],{},"Qt Network",[119,237,238],{},"Qt 网络模块",[119,240,241],{},"和 Qt 界面程序结合方便",[119,243,244],{},"Qt 上位机",[104,246,247,250,253,256],{},[119,248,249],{},"Python socket",[119,251,252],{},"Python 标准库",[119,254,255],{},"简单方便，适合测试",[119,257,258],{},"Python 调试脚本",[104,260,261,264,267,270],{},[119,262,263],{},"ROS 2 topic",[119,265,266],{},"ROS 2 通信机制",[119,268,269],{},"ROS 2 内部通信方便",[119,271,272],{},"ROS 2 系统内部数据传输",[17,274,275],{},"这些方案本质上都是为了完成 UDP 数据报的发送和接收，只是封装方式不同。",[61,277,278],{"id":278},"各方案对比",[98,280,281,293],{},[101,282,283],{},[104,284,285,287,290],{},[107,286,191],{},[107,288,289],{},"优点",[107,291,292],{},"缺点",[114,294,295,305,315,325,335],{},[104,296,297,299,302],{},[119,298,207],{},[119,300,301],{},"原生、稳定、依赖少、通用性强",[119,303,304],{},"代码相对繁琐，异步处理麻烦",[104,306,307,309,312],{},[119,308,221],{},[119,310,311],{},"C++ 工程友好，异步 UDP 方便，适合封装 driver",[119,313,314],{},"需要理解 io_context、endpoint、socket 等概念",[104,316,317,319,322],{},[119,318,235],{},[119,320,321],{},"和 Qt 程序结合自然，适合上位机",[119,323,324],{},"不适合脱离 Qt 的底层 driver",[104,326,327,329,332],{},[119,328,249],{},[119,330,331],{},"上手快，适合测试 UDP 包",[119,333,334],{},"不适合作为 C++ 底层主线",[104,336,337,339,341],{},[119,338,263],{},[119,340,269],{},[119,342,343],{},"不适合替代通用 UDP 学习",[61,345,346],{"id":346},"本教程建议选择",[17,348,349],{},"本教程建议优先选择：",[75,351,354],{"className":352,"code":353,"language":80,"meta":81},[78],"boost::asio\n",[83,355,353],{"__ignoreMap":81},[17,357,358],{},"原因是：",[30,360,361,364,367,370,373],{},[33,362,363],{},"适合 C++ 工程开发",[33,365,366],{},"和 TCP、串口、定时器可以使用同一套 Boost.Asio 编程模型",[33,368,369],{},"支持同步和异步 UDP 收发",[33,371,372],{},"不依赖 ROS 2，方便在普通 C++、OpenCV、Qt、嵌入式 Linux 项目中复用",[33,374,375],{},"适合封装网络传感器、远程遥控、状态广播等功能",[17,377,378],{},"推荐的工程结构是：",[75,380,383],{"className":381,"code":382,"language":80,"meta":81},[78],"上层项目：ROS 2 \u002F OpenCV \u002F Qt \u002F 普通 C++ 程序\n        ↓\n自己封装的 UdpSender \u002F UdpReceiver 类\n        ↓\nboost::asio\n        ↓\nUDP socket\n        ↓\n雷达 \u002F 网络设备 \u002F 远程控制端\n",[83,384,382],{"__ignoreMap":81},[61,386,388],{"id":387},"tcp-和-udp-怎么选","TCP 和 UDP 怎么选",[17,390,391],{},"TCP 和 UDP 都很常用，但适合的场景不同。",[98,393,394,407],{},[101,395,396],{},[104,397,398,401,404],{},[107,399,400],{},"对比项",[107,402,403],{},"TCP",[107,405,406],{},"UDP",[114,408,409,420,431,442,453,464],{},[104,410,411,414,417],{},[119,412,413],{},"是否连接",[119,415,416],{},"需要建立连接",[119,418,419],{},"不需要建立连接",[104,421,422,425,428],{},[119,423,424],{},"可靠性",[119,426,427],{},"可靠传输",[119,429,430],{},"不保证送达",[104,432,433,436,439],{},[119,434,435],{},"顺序",[119,437,438],{},"保证顺序",[119,440,441],{},"不保证顺序",[104,443,444,447,450],{},[119,445,446],{},"延迟",[119,448,449],{},"相对更高",[119,451,452],{},"相对更低",[104,454,455,458,461],{},[119,456,457],{},"适合数据",[119,459,460],{},"命令、配置、文件、日志",[119,462,463],{},"高频数据、广播、实时状态",[104,465,466,469,472],{},[119,467,468],{},"典型场景",[119,470,471],{},"远程控制、服务器通信、参数配置",[119,473,474],{},"雷达数据、遥控数据、状态广播",[17,476,477],{},"简单理解：",[75,479,482],{"className":480,"code":481,"language":80,"meta":81},[78],"TCP：我要确保这条消息送到\nUDP：我要快速持续发送，偶尔丢一包也能接受\n",[83,483,481],{"__ignoreMap":81},[61,485,487],{"id":486},"与-ros-2-的关系","与 ROS 2 的关系",[17,489,490],{},"学习 UDP，并不代表要用 UDP 替代 ROS 2 的 topic。",[17,492,493],{},"在 ROS 2 系统内部，节点之间通信通常优先使用 ROS 2 自己的通信机制。而 UDP 更适合用来连接 ROS 2 系统之外的网络设备，或者实现轻量级的远程通信。",[17,495,496],{},"例如：",[75,498,501],{"className":499,"code":500,"language":80,"meta":81},[78],"激光雷达\n        ↓\nUDP 数据包\n        ↓\n自己封装的 UdpReceiver\n        ↓\nROS 2 节点发布点云 \u002F LaserScan\n",[83,502,500],{"__ignoreMap":81},[17,504,505],{},"也可以用于：",[75,507,510],{"className":508,"code":509,"language":80,"meta":81},[78],"远程遥控端\n        ↓\nUDP\n        ↓\n机器人主控程序\n",[83,511,509],{"__ignoreMap":81},[61,513,514],{"id":514},"本章学习目标",[17,516,517],{},"学习完本章后，应该能够掌握：",[30,519,520,523,526,529,532,535,538],{},[33,521,522],{},"UDP 通信的基本概念",[33,524,525],{},"UDP 和 TCP 的主要区别",[33,527,528],{},"IP 地址、端口号、endpoint 的含义",[33,530,531],{},"使用 C++ 发送和接收 UDP 数据",[33,533,534],{},"理解 UDP 丢包、乱序、广播等特性",[33,536,537],{},"使用 Boost.Asio 封装 UDP 通信类",[33,539,540],{},"为后续雷达数据接收、远程遥控、状态广播打基础",{"title":81,"searchDepth":542,"depth":542,"links":543},2,[544],{"id":14,"depth":542,"text":15,"children":545},[546,548,549,550,551,552,553],{"id":63,"depth":547,"text":64},3,{"id":178,"depth":547,"text":179},{"id":278,"depth":547,"text":278},{"id":346,"depth":547,"text":346},{"id":387,"depth":547,"text":388},{"id":486,"depth":547,"text":487},{"id":514,"depth":547,"text":514},1,"1300-0400","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-0400-udp-tong-xin",{"title":5,"description":81},"wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-UDP通信","WmX9HBPWT5HFSAdMnv9D2lq7pQazm-fZagMyh8b8Cfk",[569,576,582,588,594,600,606,612,618,624,630,636,642,648,654,660,666,672,678,684,690,696,702,708,714,720,726,732,738,744,750,756,762,768,774,779,785,790,792,798,804,810,816,822,828,834,840,846,852,858,864,870,876,882,888,894,900,906,912,918,924,930,936,942,948,954,960,966,972],{"path":570,"stem":571,"title":572,"authors":573,"date":556,"chapterOrder":574,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao","wiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍","ROS2介绍",[7],"0100",0,{"path":577,"stem":578,"title":579,"authors":580,"date":556,"chapterOrder":581,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","wiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作","入门操作",[7],"0200",{"path":583,"stem":584,"title":585,"authors":586,"date":556,"chapterOrder":587,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0300-gong-zuo-kong-jian-yu-gong-neng-bao","wiki\u002F2023-12-30-ros2-tutorial\u002F0300-工作空间与功能包","工作空间与功能包",[7],"0300",{"path":589,"stem":590,"title":591,"authors":592,"date":556,"chapterOrder":593,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信","四大通信",[7],"0400",{"path":595,"stem":596,"title":597,"authors":598,"date":556,"chapterOrder":599,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0500-ros2-qi-ta-tong-xin-ji-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F0500-ROS2其他通信机制","ROS2其他通信机制",[7],"0500",{"path":601,"stem":602,"title":603,"authors":604,"date":556,"chapterOrder":605,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-launch","wiki\u002F2023-12-30-ros2-tutorial\u002F0600-Launch","Launch",[7],"0600",{"path":607,"stem":608,"title":609,"authors":610,"date":556,"chapterOrder":611,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2","wiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2","回溯rosbag2",[7],"0700",{"path":613,"stem":614,"title":615,"authors":616,"date":556,"chapterOrder":617,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-zuo-biao-bian-huan-tf","wiki\u002F2023-12-30-ros2-tutorial\u002F0800-坐标变换TF","坐标变换TF",[7],"0800",{"path":619,"stem":620,"title":621,"authors":622,"date":556,"chapterOrder":623,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0900-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki\u002F2023-12-30-ros2-tutorial\u002F0900-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言",[7],"0900",{"path":625,"stem":626,"title":627,"authors":628,"date":556,"chapterOrder":629,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1000-stage-ros2-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1000-Stage_Ros2仿真平台","Stage_Ros2仿真平台",[7],"1000",{"path":631,"stem":632,"title":633,"authors":634,"date":556,"chapterOrder":635,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic","Gezebo Classic",[7],"1100-0100",{"path":637,"stem":638,"title":639,"authors":640,"date":556,"chapterOrder":641,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-ignitiongazebo","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）",[7],"1100-0200",{"path":643,"stem":644,"title":645,"authors":646,"date":556,"chapterOrder":647,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-gazebosim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-GazeboSim","Gz Sim（Gazebo Harmonic）",[7],"1100-0300",{"path":649,"stem":650,"title":651,"authors":652,"date":556,"chapterOrder":653,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim",[7],"1100-0400",{"path":655,"stem":656,"title":657,"authors":658,"date":556,"chapterOrder":659,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-gezebo-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-Gezebo仿真平台","Gezebo仿真平台",[7],"1100",{"path":661,"stem":662,"title":663,"authors":664,"date":556,"chapterOrder":665,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-humble-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-Humble版本","Humble导航仿真",[7],"1200-0100",{"path":667,"stem":668,"title":669,"authors":670,"date":556,"chapterOrder":671,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-jazzy-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-Jazzy版本","Jazzy导航仿真",[7],"1200-0200",{"path":673,"stem":674,"title":675,"authors":676,"date":556,"chapterOrder":677,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-humble2jazzy","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-Humble2Jazzy","Humble与Jazzy导航的差异",[7],"1200-0300",{"path":679,"stem":680,"title":681,"authors":682,"date":556,"chapterOrder":683,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0100-you-xian-zhuang-tai-ji-fsm","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0100-有限状态机FSM","有限状态机（Finite State Machine）",[7],"1200-0400-0100",{"path":685,"stem":686,"title":687,"authors":688,"date":556,"chapterOrder":689,"chapterDepth":547,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0100-ji-ben-gai-nian","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0100-基本概念","基本概念",[7],"1200-0400-0200-0100",{"path":691,"stem":692,"title":693,"authors":694,"date":556,"chapterOrder":695,"chapterDepth":547,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0200-kong-zhi-yu-zhuang-shi-gui-ze","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0200-控制与装饰规则","控制与装饰规则",[7],"1200-0400-0200-0200",{"path":697,"stem":698,"title":699,"authors":700,"date":556,"chapterOrder":701,"chapterDepth":547,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0300-di-yi-ge-wan-zheng-cheng-xu","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0300-第一个完整程序","第一个完整程序",[7],"1200-0400-0200-0300",{"path":703,"stem":704,"title":705,"authors":706,"date":556,"chapterOrder":707,"chapterDepth":547,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0400-jie-dian-zhi-jian-chuan-shu-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0400-节点之间传数据","节点之间传数据",[7],"1200-0400-0200-0400",{"path":709,"stem":710,"title":711,"authors":712,"date":556,"chapterOrder":713,"chapterDepth":547,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0500-chi-xu-ren-wu-yu-zhong-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0500-持续任务与中止","持续任务与中止",[7],"1200-0400-0200-0500",{"path":715,"stem":716,"title":717,"authors":718,"date":556,"chapterOrder":719,"chapterDepth":547,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0600-zu-he-shi-ji-ren-wu","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0600-组合实际任务","组合实际任务",[7],"1200-0400-0200-0600",{"path":721,"stem":722,"title":723,"authors":724,"date":556,"chapterOrder":725,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-xing-wei-shu-bt","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-行为树BT","行为树（BehaviorTree.CPP）",[7],"1200-0400-0200",{"path":727,"stem":728,"title":729,"authors":730,"date":556,"chapterOrder":731,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-fsm-yu-bt","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-FSM与BT","有限状态机FSM与行为树BT",[7],"1200-0400",{"path":733,"stem":734,"title":735,"authors":736,"date":556,"chapterOrder":737,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)",[7],"1200",{"path":739,"stem":740,"title":741,"authors":742,"date":556,"chapterOrder":743,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-Boost.Aiso","Boost.Asio库",[7],"1300-0100-0100",{"path":745,"stem":746,"title":747,"authors":748,"date":556,"chapterOrder":749,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2-serial-driver","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2_serial_driver","ROS2 Serial Driver库",[7],"1300-0100-0200",{"path":751,"stem":752,"title":753,"authors":754,"date":556,"chapterOrder":755,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-chuan-kou-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-串口通信","UART串口通信",[7],"1300-0100",{"path":757,"stem":758,"title":759,"authors":760,"date":556,"chapterOrder":761,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","SocketCAN",[7],"1300-0200-0100",{"path":763,"stem":764,"title":765,"authors":766,"date":556,"chapterOrder":767,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2_socketcan","ROS2_SocketCAN",[7],"1300-0200-0200",{"path":769,"stem":770,"title":771,"authors":772,"date":556,"chapterOrder":773,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-can-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-CAN通信","CAN通信",[7],"1300-0200",{"path":775,"stem":776,"title":741,"authors":777,"date":556,"chapterOrder":778,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-Boost.Aiso",[7],"1300-0300-0100",{"path":780,"stem":781,"title":782,"authors":783,"date":556,"chapterOrder":784,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-tcp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-TCP通信","TCP通信",[7],"1300-0300",{"path":786,"stem":787,"title":741,"authors":788,"date":556,"chapterOrder":789,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-Boost.Aiso",[7],"1300-0400-0100",{"path":564,"stem":566,"title":5,"authors":791,"date":556,"chapterOrder":555,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},[7],{"path":793,"stem":794,"title":795,"authors":796,"date":556,"chapterOrder":797,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-linux-ying-jian-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-Linux硬件通信","Linux硬件通信",[7],"1300",{"path":799,"stem":800,"title":801,"authors":802,"date":556,"chapterOrder":803,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-ji-qi-ren-zu-cheng","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-机器人组成","机器人组成",[7],"1400-0100",{"path":805,"stem":806,"title":807,"authors":808,"date":556,"chapterOrder":809,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-yuan-cheng-kai-fa-ssh","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-远程开发SSH","远程开发SSH",[7],"1400-0200-0100",{"path":811,"stem":812,"title":813,"authors":814,"date":556,"chapterOrder":815,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-yuan-cheng-fang-wen-zhuo-mian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-远程访问桌面","远程访问桌面",[7],"1400-0200-0200",{"path":817,"stem":818,"title":819,"authors":820,"date":556,"chapterOrder":821,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-工控机之远程开发环境","工控机之远程开发环境",[7],"1400-0200",{"path":823,"stem":824,"title":825,"authors":826,"date":556,"chapterOrder":827,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-gong-kong-ji-zhi-wai-jie-usb-she-bei","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-工控机之外接USB设备","工控机之外接USB设备",[7],"1400-0300",{"path":829,"stem":830,"title":831,"authors":832,"date":556,"chapterOrder":833,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-fen-bu-shi-da-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-分布式搭建","分布式搭建",[7],"1400-0400",{"path":835,"stem":836,"title":837,"authors":838,"date":556,"chapterOrder":839,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-you-hua-ri-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-优化日志","优化日志",[7],"1400-0500",{"path":841,"stem":842,"title":843,"authors":844,"date":556,"chapterOrder":845,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-li-cheng-ji-odom","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-里程计Odom","里程计Odom",[7],"1400-0600-0100",{"path":847,"stem":848,"title":849,"authors":850,"date":556,"chapterOrder":851,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-guan-xing-ji-imu","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-惯性计IMU","惯性计IMU",[7],"1400-0600-0200",{"path":853,"stem":854,"title":855,"authors":856,"date":556,"chapterOrder":857,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-ji-guang-lei-da-lidar","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-激光雷达LiDAR","激光雷达LiDAR",[7],"1400-0600-0300",{"path":859,"stem":860,"title":861,"authors":862,"date":556,"chapterOrder":863,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-xiang-ji-camera","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-相机Camera","相机Camera",[7],"1400-0600-0400",{"path":865,"stem":866,"title":867,"authors":868,"date":556,"chapterOrder":869,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-quan-qiu-ding-wei-gnss","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-全球定位GNSS","全球定位GNSS",[7],"1400-0600-0500",{"path":871,"stem":872,"title":873,"authors":874,"date":556,"chapterOrder":875,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-shou-bing-joy","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-手柄joy","手柄JOY",[7],"1400-0600-0600",{"path":877,"stem":878,"title":879,"authors":880,"date":556,"chapterOrder":881,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-jian-pan-kong-zhi-jie-dian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-键盘控制节点","键盘控制节点",[7],"1400-0600-0700",{"path":883,"stem":884,"title":885,"authors":886,"date":556,"chapterOrder":887,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-ying-jian-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-硬件平台","硬件平台",[7],"1400-0600",{"path":889,"stem":890,"title":891,"authors":892,"date":556,"chapterOrder":893,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-zuo-biao-xi-yu-hua-ti-guan-xi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-坐标系与话题关系","坐标系与话题关系",[7],"1400-0700",{"path":895,"stem":896,"title":897,"authors":898,"date":556,"chapterOrder":899,"chapterDepth":547,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-lun-shi-li-cheng-ji-biao-ding","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-轮式里程计标定","轮式里程计标定",[7],"1400-0800-0100-0100",{"path":901,"stem":902,"title":903,"authors":904,"date":556,"chapterOrder":905,"chapterDepth":547,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-lun-shi-li-cheng-ji-yu-imu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-轮式里程计与IMU融合","轮式里程计与IMU融合",[7],"1400-0800-0100-0200",{"path":907,"stem":908,"title":909,"authors":910,"date":556,"chapterOrder":911,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-轮式里程计标定与融合","轮式里程计标定与融合",[7],"1400-0800-0100",{"path":913,"stem":914,"title":915,"authors":916,"date":556,"chapterOrder":917,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-ji-guang-lei-da-gong-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-激光雷达工具","激光雷达工具",[7],"1400-0800-0200",{"path":919,"stem":920,"title":921,"authors":922,"date":556,"chapterOrder":923,"chapterDepth":542,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-xiang-ji-shi-yong-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-相机使用进阶","相机使用进阶",[7],"1400-0800-0300",{"path":925,"stem":926,"title":927,"authors":928,"date":556,"chapterOrder":929,"chapterDepth":554,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-ying-jian-ping-tai-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-硬件平台进阶","硬件平台进阶",[7],"1400-0800",{"path":931,"stem":932,"title":933,"authors":934,"date":556,"chapterOrder":935,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-ji-qi-ren-ying-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-机器人硬件","机器人硬件",[7],"1400",{"path":937,"stem":938,"title":939,"authors":940,"date":556,"chapterOrder":941,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ros2-control","wiki\u002F2023-12-30-ros2-tutorial\u002F1500-ROS2_Control","ROS2_Control",[7],"1500",{"path":943,"stem":944,"title":945,"authors":946,"date":556,"chapterOrder":947,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1600-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki\u002F2023-12-30-ros2-tutorial\u002F1600-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂",[7],"1600",{"path":949,"stem":950,"title":951,"authors":952,"date":556,"chapterOrder":953,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1700-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1700-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)",[7],"1700",{"path":955,"stem":956,"title":957,"authors":958,"date":556,"chapterOrder":959,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-microros","wiki\u002F2023-12-30-ros2-tutorial\u002F1800-MicroROS","MicroROS",[7],"1800",{"path":961,"stem":962,"title":963,"authors":964,"date":556,"chapterOrder":965,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-webots-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1900-Webots仿真平台","Webots仿真平台",[7],"1900",{"path":967,"stem":968,"title":969,"authors":970,"date":556,"chapterOrder":971,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":562},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-opencv","wiki\u002F2023-12-30-ros2-tutorial\u002F2000-OpenCV","OpenCV",[7],"2000",{"path":558,"stem":973,"title":974,"authors":975,"date":556,"chapterOrder":976,"chapterDepth":575,"docKey":557,"docRoot":558,"docTitle":559,"isWikiDoc":561,"isWikiIndex":561},"wiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2机器人操作系统教程",[7],null,[978,980,983,986],{"name":7,"image":979},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":981,"image":982},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":984,"image":985},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":987,"image":988},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431903916]