[{"data":1,"prerenderedAt":979},["ShallowReactive",2],{"wiki-page-/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin":3,"wiki-doc-items-/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin":612,"language-switcher-data-/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin":963,"wiki-i18n-paths-/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin":978},{"id":4,"title":5,"body":6,"canonicalPath":593,"chapter":594,"chapterSort":595,"date":596,"description":153,"docI18nKey":597,"docKey":598,"docRoot":599,"docTitle":600,"extension":601,"i18nKey":602,"isBlogPost":603,"isWikiDoc":604,"isWikiIndex":603,"layout":605,"legacyPath":606,"locale":607,"localeSlug":608,"meta":609,"navigation":604,"path":593,"seo":610,"sourcePath":606,"sourceStem":602,"stem":602,"wikiDepth":160,"__hash__":611},"content/wiki/2023-12-30-ros2-tutorial/ch13-2-CAN通信.md","CAN通信",{"type":7,"value":8,"toc":579},"minimark",[9,14,18,21,24,46,49,54,57,60,63,139,147,164,167,181,185,188,199,202,316,319,395,398,401,409,412,434,437,443,446,452,456,459,465,468,474,477,481,486,492,495,498,504,510,514,517,520,523,529,532,535,538,575],[10,11,13],"h2",{"id":12},"linux-can-通信","Linux CAN 通信",[15,16,17],"p",{},"CAN 通信是机器人、车辆、工业控制和电机驱动中非常常见的总线通信方式。",[15,19,20],{},"相比串口通信，CAN 更适合多个设备挂在同一条总线上进行通信。例如一个机器人底盘中，可能有多个电机驱动器、底盘控制板、传感器节点共同连接在 CAN 总线上。",[15,22,23],{},"在实际项目中，CAN 通信常见于：",[25,26,27,31,34,37,40,43],"ul",{},[28,29,30],"li",{},"控制电机驱动器",[28,32,33],{},"读取电机编码器反馈",[28,35,36],{},"连接底盘控制板",[28,38,39],{},"多个控制节点之间通信",[28,41,42],{},"车辆总线通信",[28,44,45],{},"工业设备和运动控制系统",[15,47,48],{},"对于移动机器人底盘、电机控制、自动驾驶线控系统等方向来说，CAN 是非常重要的一类通信方式。",[50,51,53],"h3",{"id":52},"can-通信是什么","CAN 通信是什么",[15,55,56],{},"CAN，全称 Controller Area Network，是一种多主机总线通信协议。",[15,58,59],{},"和串口点对点通信不同，CAN 总线上可以挂多个节点。每个节点都可以发送消息，其他节点根据 CAN ID 判断是否需要处理这条消息。",[15,61,62],{},"CAN 通信中常见概念包括：",[64,65,66,79],"table",{},[67,68,69],"thead",{},[70,71,72,76],"tr",{},[73,74,75],"th",{},"概念",[73,77,78],{},"说明",[80,81,82,91,99,107,115,123,131],"tbody",{},[70,83,84,88],{},[85,86,87],"td",{},"CAN ID",[85,89,90],{},"用来标识一帧 CAN 消息的含义或来源",[70,92,93,96],{},[85,94,95],{},"标准帧",[85,97,98],{},"11 位 CAN ID",[70,100,101,104],{},[85,102,103],{},"扩展帧",[85,105,106],{},"29 位 CAN ID",[70,108,109,112],{},[85,110,111],{},"数据区",[85,113,114],{},"经典 CAN 一帧最多 8 字节数据",[70,116,117,120],{},[85,118,119],{},"CAN FD",[85,121,122],{},"CAN 的扩展版本，支持更长数据区和更高数据速率",[70,124,125,128],{},[85,126,127],{},"波特率",[85,129,130],{},"常见有 250K、500K、1M",[70,132,133,136],{},[85,134,135],{},"终端电阻",[85,137,138],{},"CAN 总线两端通常需要 120Ω 终端电阻",[15,140,141,142,146],{},"在 Linux 中，CAN 设备通常不是 ",[143,144,145],"code",{},"/dev/ttyUSB0"," 这种设备文件，而是被抽象成网络接口，例如：",[148,149,154],"pre",{"className":150,"code":151,"language":152,"meta":153,"style":153},"language-bash shiki shiki-themes github-light github-dark","can0\n","bash","",[143,155,156],{"__ignoreMap":153},[157,158,161],"span",{"class":159,"line":160},"line",1,[157,162,151],{"class":163},"sScJk",[15,165,166],{},"可以使用下面的命令查看：",[148,168,170],{"className":150,"code":169,"language":152,"meta":153,"style":153},"ip link\n",[143,171,172],{"__ignoreMap":153},[157,173,174,177],{"class":159,"line":160},[157,175,176],{"class":163},"ip",[157,178,180],{"class":179},"sZZnC"," link\n",[50,182,184],{"id":183},"linux-下常见-can-工具和库","Linux 下常见 CAN 工具和库",[15,186,187],{},"Linux 下 CAN 通信的核心是 SocketCAN。",[15,189,190,191,194,195,198],{},"SocketCAN 是 Linux 内核提供的 CAN 通信框架，它把 CAN 设备抽象成类似网络接口的形式，例如 ",[143,192,193],{},"can0","、",[143,196,197],{},"can1","。",[15,200,201],{},"常见工具和库包括：",[64,203,204,220],{},[67,205,206],{},[70,207,208,211,214,217],{},[73,209,210],{},"方案",[73,212,213],{},"类型",[73,215,216],{},"特点",[73,218,219],{},"适合场景",[80,221,222,236,260,274,288,302],{},[70,223,224,227,230,233],{},[85,225,226],{},"SocketCAN",[85,228,229],{},"Linux 原生 CAN 接口",[85,231,232],{},"Linux 标准方案，通用、稳定、工程常用",[85,234,235],{},"推荐作为主线学习",[70,237,238,241,244,257],{},[85,239,240],{},"can-utils",[85,242,243],{},"SocketCAN 命令行工具集",[85,245,246,247,194,250,194,253,256],{},"提供 ",[143,248,249],{},"candump",[143,251,252],{},"cansend",[143,254,255],{},"cangen"," 等工具",[85,258,259],{},"调试 CAN 总线",[70,261,262,265,268,271],{},[85,263,264],{},"libsocketcan",[85,266,267],{},"SocketCAN 辅助库",[85,269,270],{},"便于配置和管理 CAN 接口",[85,272,273],{},"需要程序内配置 CAN 参数时使用",[70,275,276,279,282,285],{},[85,277,278],{},"ros2_socketcan",[85,280,281],{},"ROS 2 封装库",[85,283,284],{},"将 SocketCAN 封装进 ROS 2 生态",[85,286,287],{},"纯 ROS 2 项目或参考实现",[70,289,290,293,296,299],{},[85,291,292],{},"ros2_canopen",[85,294,295],{},"ROS 2 CANopen 协议栈",[85,297,298],{},"适合 CANopen 设备",[85,300,301],{},"电机驱动器使用 CANopen 协议时",[70,303,304,307,310,313],{},[85,305,306],{},"厂商 SDK",[85,308,309],{},"厂商提供的驱动库",[85,311,312],{},"和具体硬件绑定",[85,314,315],{},"使用特定 USB-CAN、PCIe-CAN 设备时",[50,317,318],{"id":318},"各方案对比",[64,320,321,333],{},[67,322,323],{},[70,324,325,327,330],{},[73,326,210],{},[73,328,329],{},"优点",[73,331,332],{},"缺点",[80,334,335,345,355,365,375,385],{},[70,336,337,339,342],{},[85,338,226],{},[85,340,341],{},"Linux 原生、通用、稳定、适合长期学习",[85,343,344],{},"需要理解 socket 编程和 CAN 帧结构",[70,346,347,349,352],{},[85,348,240],{},[85,350,351],{},"调试方便，命令简单",[85,353,354],{},"主要用于命令行测试，不是完整工程封装",[70,356,357,359,362],{},[85,358,264],{},[85,360,361],{},"配置 CAN 接口方便",[85,363,364],{},"不是主要的数据收发方案",[70,366,367,369,372],{},[85,368,278],{},[85,370,371],{},"和 ROS 2 生态结合方便",[85,373,374],{},"离开 ROS 2 后复用性较差",[70,376,377,379,382],{},[85,378,292],{},[85,380,381],{},"适合 CANopen 设备，协议栈完整",[85,383,384],{},"只适合 CANopen 场景，学习成本较高",[70,386,387,389,392],{},[85,388,306],{},[85,390,391],{},"对特定硬件支持好",[85,393,394],{},"通用性较差，容易绑定厂商",[50,396,397],{"id":397},"本教程建议选择",[15,399,400],{},"本教程建议优先选择：",[148,402,407],{"className":403,"code":405,"language":406,"meta":153},[404],"language-text","SocketCAN + can-utils\n","text",[143,408,405],{"__ignoreMap":153},[15,410,411],{},"原因是：",[25,413,414,417,420,425,428],{},[28,415,416],{},"SocketCAN 是 Linux 下 CAN 通信的标准方案",[28,418,419],{},"不依赖 ROS 2，适合普通 C++、OpenCV、Qt、嵌入式 Linux 项目",[28,421,422,424],{},[143,423,240],{}," 非常适合调试和验证 CAN 设备",[28,426,427],{},"后续可以封装成普通 C++ driver",[28,429,430,431],{},"可以自然接入 ",[143,432,433],{},"ros2_control hardware_interface",[15,435,436],{},"推荐的学习顺序是：",[148,438,441],{"className":439,"code":440,"language":406,"meta":153},[404],"1. 使用 ip link 配置 can0\n2. 使用 candump 接收 CAN 帧\n3. 使用 cansend 发送 CAN 帧\n4. 理解 struct can_frame\n5. 使用 C++ SocketCAN 进行收发\n6. 封装自己的 CanDriver 类\n7. 接入 ROS 2 或 ros2_control\n",[143,442,440],{"__ignoreMap":153},[15,444,445],{},"推荐的工程结构是：",[148,447,450],{"className":448,"code":449,"language":406,"meta":153},[404],"上层项目：ROS 2 / OpenCV / Qt / 普通 C++ 程序\n        ↓\n自己封装的 CanDriver 类\n        ↓\nSocketCAN\n        ↓\ncan0\n        ↓\n电机驱动器 / STM32 / 底盘控制板\n",[143,451,449],{"__ignoreMap":153},[50,453,455],{"id":454},"与-ros-2-的关系","与 ROS 2 的关系",[15,457,458],{},"学习 SocketCAN，并不代表不用 ROS 2。",[15,460,461,462,464],{},"在 ROS 2 项目中，可以将 CAN 通信封装成一个普通 C++ 类，然后在 ROS 2 节点或 ",[143,463,433],{}," 中调用。",[15,466,467],{},"例如：",[148,469,472],{"className":470,"code":471,"language":406,"meta":153},[404],"ros2_control controller\n        ↓\nhardware_interface\n        ↓\n自己封装的 CanDriver\n        ↓\nSocketCAN\n        ↓\ncan0\n        ↓\n电机驱动器\n",[143,473,471],{"__ignoreMap":153},[15,475,476],{},"这样做的好处是，CAN 通信代码不会和 ROS 2 强绑定。以后即使写普通 C++ 项目、Qt 上位机或者 OpenCV 控制程序，也可以继续复用同一套 CAN driver。",[50,478,480],{"id":479},"什么时候使用-ros2_socketcan","什么时候使用 ros2_socketcan",[15,482,483,485],{},[143,484,278],{}," 并不是不能用。",[15,487,488,489,491],{},"如果项目本身就是纯 ROS 2 架构，并且希望快速把 CAN 帧转换成 ROS 2 topic，那么 ",[143,490,278],{}," 是一个可以考虑的方案。",[15,493,494],{},"但是对于底层驱动学习和长期工程复用来说，仍然建议先掌握 SocketCAN。",[15,496,497],{},"可以这样理解：",[148,499,502],{"className":500,"code":501,"language":406,"meta":153},[404],"SocketCAN：底层能力\nros2_socketcan：ROS 2 封装\n",[143,503,501],{"__ignoreMap":153},[15,505,506,507,509],{},"先学 SocketCAN，再看 ",[143,508,278],{}," 会更容易理解。",[50,511,513],{"id":512},"什么时候使用-ros2_canopen","什么时候使用 ros2_canopen",[15,515,516],{},"如果你的电机驱动器或工业设备使用的是 CANopen 协议，那么就不能只把它当作普通 CAN 帧通信来看待。",[15,518,519],{},"CANopen 是建立在 CAN 之上的高层协议，涉及对象字典、PDO、SDO、NMT 等概念。",[15,521,522],{},"这种情况下，可以考虑学习：",[148,524,527],{"className":525,"code":526,"language":406,"meta":153},[404],"ros2_canopen\n",[143,528,526],{"__ignoreMap":153},[15,530,531],{},"但如果你的设备只是自定义 CAN 协议，例如自己规定 CAN ID 和数据格式，那么优先学习 SocketCAN 就足够了。",[50,533,534],{"id":534},"本章学习目标",[15,536,537],{},"学习完本章后，应该能够掌握：",[25,539,540,543,549,556,563,566,569,572],{},[28,541,542],{},"CAN 通信的基本概念",[28,544,545,546,548],{},"Linux 下 ",[143,547,193],{}," 设备的使用方式",[28,550,551,552,555],{},"使用 ",[143,553,554],{},"ip link"," 配置 CAN 波特率",[28,557,551,558,194,560,562],{},[143,559,249],{},[143,561,252],{}," 调试 CAN 总线",[28,564,565],{},"理解 CAN ID、标准帧、扩展帧、数据区等概念",[28,567,568],{},"使用 C++ SocketCAN 进行 CAN 帧收发",[28,570,571],{},"将 CAN 通信封装成可复用的 C++ 类",[28,573,574],{},"为后续接入 ROS 2、ros2_control、电机驱动器控制打基础",[576,577,578],"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);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":153,"searchDepth":580,"depth":580,"links":581},2,[582],{"id":12,"depth":580,"text":13,"children":583},[584,586,587,588,589,590,591,592],{"id":52,"depth":585,"text":53},3,{"id":183,"depth":585,"text":184},{"id":318,"depth":585,"text":318},{"id":397,"depth":585,"text":397},{"id":454,"depth":585,"text":455},{"id":479,"depth":585,"text":480},{"id":512,"depth":585,"text":513},{"id":534,"depth":585,"text":534},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","13.2",13020000,"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-2-CAN通信",false,true,null,"/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","zh-CN","zh-cn",{},{"title":5,"description":153},"Shnt0XpzQYpC_a8AtYjGTEo6tTPWHpRCl8MWTyhGLoc",[613,619,625,631,637,643,649,655,661,667,673,679,685,691,697,702,708,709,714,720,725,731,737,743,749,755,761,767,773,779,785,791,797,803,809,815,821,827,833,839,845,851,857,863,869,875,881,887,893,899,905,911,917,923,929,935,941,947,953,959],{"path":614,"stem":615,"title":616,"date":596,"chapter":617,"chapterSort":618,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","ROS2介绍","1",1000000,{"path":620,"stem":621,"title":622,"date":596,"chapter":623,"chapterSort":624,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":626,"stem":627,"title":628,"date":596,"chapter":629,"chapterSort":630,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":632,"stem":633,"title":634,"date":596,"chapter":635,"chapterSort":636,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":638,"stem":639,"title":640,"date":596,"chapter":641,"chapterSort":642,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":644,"stem":645,"title":646,"date":596,"chapter":647,"chapterSort":648,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":650,"stem":651,"title":652,"date":596,"chapter":653,"chapterSort":654,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":656,"stem":657,"title":658,"date":596,"chapter":659,"chapterSort":660,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":662,"stem":663,"title":664,"date":596,"chapter":665,"chapterSort":666,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":668,"stem":669,"title":670,"date":596,"chapter":671,"chapterSort":672,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":674,"stem":675,"title":676,"date":596,"chapter":677,"chapterSort":678,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":680,"stem":681,"title":682,"date":596,"chapter":683,"chapterSort":684,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":686,"stem":687,"title":688,"date":596,"chapter":689,"chapterSort":690,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":692,"stem":693,"title":694,"date":596,"chapter":695,"chapterSort":696,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":698,"stem":699,"title":226,"date":596,"chapter":700,"chapterSort":701,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","13.2.1",13020100,{"path":703,"stem":704,"title":705,"date":596,"chapter":706,"chapterSort":707,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":593,"stem":602,"title":5,"date":596,"chapter":594,"chapterSort":595,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},{"path":710,"stem":711,"title":682,"date":596,"chapter":712,"chapterSort":713,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":715,"stem":716,"title":717,"date":596,"chapter":718,"chapterSort":719,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信","TCP通信","13.3",13030000,{"path":721,"stem":722,"title":682,"date":596,"chapter":723,"chapterSort":724,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":726,"stem":727,"title":728,"date":596,"chapter":729,"chapterSort":730,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":732,"stem":733,"title":734,"date":596,"chapter":735,"chapterSort":736,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":738,"stem":739,"title":740,"date":596,"chapter":741,"chapterSort":742,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":744,"stem":745,"title":746,"date":596,"chapter":747,"chapterSort":748,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":750,"stem":751,"title":752,"date":596,"chapter":753,"chapterSort":754,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":756,"stem":757,"title":758,"date":596,"chapter":759,"chapterSort":760,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":762,"stem":763,"title":764,"date":596,"chapter":765,"chapterSort":766,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":768,"stem":769,"title":770,"date":596,"chapter":771,"chapterSort":772,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":774,"stem":775,"title":776,"date":596,"chapter":777,"chapterSort":778,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":780,"stem":781,"title":782,"date":596,"chapter":783,"chapterSort":784,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":786,"stem":787,"title":788,"date":596,"chapter":789,"chapterSort":790,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":792,"stem":793,"title":794,"date":596,"chapter":795,"chapterSort":796,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":798,"stem":799,"title":800,"date":596,"chapter":801,"chapterSort":802,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":804,"stem":805,"title":806,"date":596,"chapter":807,"chapterSort":808,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":810,"stem":811,"title":812,"date":596,"chapter":813,"chapterSort":814,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":816,"stem":817,"title":818,"date":596,"chapter":819,"chapterSort":820,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":822,"stem":823,"title":824,"date":596,"chapter":825,"chapterSort":826,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":828,"stem":829,"title":830,"date":596,"chapter":831,"chapterSort":832,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":834,"stem":835,"title":836,"date":596,"chapter":837,"chapterSort":838,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":840,"stem":841,"title":842,"date":596,"chapter":843,"chapterSort":844,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":846,"stem":847,"title":848,"date":596,"chapter":849,"chapterSort":850,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":852,"stem":853,"title":854,"date":596,"chapter":855,"chapterSort":856,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":858,"stem":859,"title":860,"date":596,"chapter":861,"chapterSort":862,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":864,"stem":865,"title":866,"date":596,"chapter":867,"chapterSort":868,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":870,"stem":871,"title":872,"date":596,"chapter":873,"chapterSort":874,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","机器人硬件","14",14000000,{"path":876,"stem":877,"title":878,"date":596,"chapter":879,"chapterSort":880,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":882,"stem":883,"title":884,"date":596,"chapter":885,"chapterSort":886,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":888,"stem":889,"title":890,"date":596,"chapter":891,"chapterSort":892,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":894,"stem":895,"title":896,"date":596,"chapter":897,"chapterSort":898,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch18-microros","wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":900,"stem":901,"title":902,"date":596,"chapter":903,"chapterSort":904,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":906,"stem":907,"title":908,"date":596,"chapter":909,"chapterSort":910,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","wiki/2023-12-30-ros2-tutorial/ch2-入门操作","入门操作","2",2000000,{"path":912,"stem":913,"title":914,"date":596,"chapter":915,"chapterSort":916,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch20-opencv","wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":918,"stem":919,"title":920,"date":596,"chapter":921,"chapterSort":922,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":924,"stem":925,"title":926,"date":596,"chapter":927,"chapterSort":928,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","wiki/2023-12-30-ros2-tutorial/ch4-四大通信","四大通信","4",4000000,{"path":930,"stem":931,"title":932,"date":596,"chapter":933,"chapterSort":934,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":936,"stem":937,"title":938,"date":596,"chapter":939,"chapterSort":940,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch6-launch","wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":942,"stem":943,"title":944,"date":596,"chapter":945,"chapterSort":946,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","回溯rosbag2","7",7000000,{"path":948,"stem":949,"title":950,"date":596,"chapter":951,"chapterSort":952,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":954,"stem":955,"title":956,"date":596,"chapter":957,"chapterSort":958,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":603},"/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":599,"stem":960,"title":961,"date":596,"chapter":605,"chapterSort":962,"docKey":598,"docRoot":599,"docTitle":600,"isWikiDoc":604,"isWikiIndex":604},"wiki/2023-12-30-ros2-tutorial/index","ROS2机器人操作系统教程",0,{"variants":964},[965,968,971,974,977],{"path":966,"localeSlug":967,"i18nKey":602},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","en-us",{"path":969,"localeSlug":970,"i18nKey":602},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","zh-hant",{"path":972,"localeSlug":973,"i18nKey":602},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","zh-hk",{"path":975,"localeSlug":976,"i18nKey":602},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","zh-tw",{"path":593,"localeSlug":608,"i18nKey":602},[966,606,969,606,972,606,975,606,593,606],1780663047676]