[{"data":1,"prerenderedAt":900},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-can-tong-xin":3,"wiki-doc-items-2023-12-30-ros2-tutorial":606},{"id":4,"title":5,"body":6,"chapterDepth":160,"chapterOrder":593,"date":594,"description":153,"docKey":595,"docRoot":596,"docTitle":597,"extension":598,"isWikiDoc":599,"isWikiIndex":600,"meta":601,"navigation":599,"path":602,"seo":603,"stem":604,"wikiDepth":160,"__hash__":605},"wiki\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-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",{},"\u002Fdev\u002FttyUSB0"," 这种设备文件，而是被抽象成网络接口，例如：",[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 \u002F OpenCV \u002F Qt \u002F 普通 C++ 程序\n        ↓\n自己封装的 CanDriver 类\n        ↓\nSocketCAN\n        ↓\ncan0\n        ↓\n电机驱动器 \u002F STM32 \u002F 底盘控制板\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},"1300-0200","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-0200-can-tong-xin",{"title":5,"description":153},"wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-CAN通信","Iko5rdXedK0cBzdXcObxo0W_2KDW7mx0qpdqgjH3KYs",[607,613,618,623,628,633,638,643,648,653,658,663,668,673,678,683,688,693,698,703,708,713,718,722,727,728,732,737,741,746,751,756,761,766,771,776,781,786,791,796,801,806,811,816,821,826,831,836,841,846,851,856,861,866,871,876,881,886,891,896],{"path":608,"stem":609,"title":610,"date":594,"chapterOrder":611,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao","wiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍","ROS2介绍","0100",0,{"path":614,"stem":615,"title":616,"date":594,"chapterOrder":617,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","wiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作","入门操作","0200",{"path":619,"stem":620,"title":621,"date":594,"chapterOrder":622,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0300-gong-zuo-kong-jian-yu-gong-neng-bao","wiki\u002F2023-12-30-ros2-tutorial\u002F0300-工作空间与功能包","工作空间与功能包","0300",{"path":624,"stem":625,"title":626,"date":594,"chapterOrder":627,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信","四大通信","0400",{"path":629,"stem":630,"title":631,"date":594,"chapterOrder":632,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0500-ros2-qi-ta-tong-xin-ji-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F0500-ROS2其他通信机制","ROS2其他通信机制","0500",{"path":634,"stem":635,"title":636,"date":594,"chapterOrder":637,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-launch","wiki\u002F2023-12-30-ros2-tutorial\u002F0600-Launch","Launch","0600",{"path":639,"stem":640,"title":641,"date":594,"chapterOrder":642,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2","wiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2","回溯rosbag2","0700",{"path":644,"stem":645,"title":646,"date":594,"chapterOrder":647,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-zuo-biao-bian-huan-tf","wiki\u002F2023-12-30-ros2-tutorial\u002F0800-坐标变换TF","坐标变换TF","0800",{"path":649,"stem":650,"title":651,"date":594,"chapterOrder":652,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\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建模语言","0900",{"path":654,"stem":655,"title":656,"date":594,"chapterOrder":657,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1000-stage-ros2-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1000-Stage_Ros2仿真平台","Stage_Ros2仿真平台","1000",{"path":659,"stem":660,"title":661,"date":594,"chapterOrder":662,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic","Gezebo Classic","1100-0100",{"path":664,"stem":665,"title":666,"date":594,"chapterOrder":667,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-ignitiongazebo","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","1100-0200",{"path":669,"stem":670,"title":671,"date":594,"chapterOrder":672,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-gazebosim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-GazeboSim","Gz Sim（Gazebo Harmonic）","1100-0300",{"path":674,"stem":675,"title":676,"date":594,"chapterOrder":677,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim","1100-0400",{"path":679,"stem":680,"title":681,"date":594,"chapterOrder":682,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-gezebo-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-Gezebo仿真平台","Gezebo仿真平台","1100",{"path":684,"stem":685,"title":686,"date":594,"chapterOrder":687,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-humble-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-Humble版本","Humble导航仿真","1200-0100",{"path":689,"stem":690,"title":691,"date":594,"chapterOrder":692,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-jazzy-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-Jazzy版本","Jazzy导航仿真","1200-0200",{"path":694,"stem":695,"title":696,"date":594,"chapterOrder":697,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-humble2jazzy","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-Humble2Jazzy","Humble与Jazzy导航的差异","1200-0300",{"path":699,"stem":700,"title":701,"date":594,"chapterOrder":702,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\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(仿真篇)","1200",{"path":704,"stem":705,"title":706,"date":594,"chapterOrder":707,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-Boost.Aiso","Boost.Asio库","1300-0100-0100",{"path":709,"stem":710,"title":711,"date":594,"chapterOrder":712,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\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库","1300-0100-0200",{"path":714,"stem":715,"title":716,"date":594,"chapterOrder":717,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-chuan-kou-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-串口通信","UART串口通信","1300-0100",{"path":719,"stem":720,"title":226,"date":594,"chapterOrder":721,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","1300-0200-0100",{"path":723,"stem":724,"title":725,"date":594,"chapterOrder":726,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2_socketcan","ROS2_SocketCAN","1300-0200-0200",{"path":602,"stem":604,"title":5,"date":594,"chapterOrder":593,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},{"path":729,"stem":730,"title":706,"date":594,"chapterOrder":731,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-Boost.Aiso","1300-0300-0100",{"path":733,"stem":734,"title":735,"date":594,"chapterOrder":736,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-tcp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-TCP通信","TCP通信","1300-0300",{"path":738,"stem":739,"title":706,"date":594,"chapterOrder":740,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-Boost.Aiso","1300-0400-0100",{"path":742,"stem":743,"title":744,"date":594,"chapterOrder":745,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-udp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-UDP通信","UDP通信","1300-0400",{"path":747,"stem":748,"title":749,"date":594,"chapterOrder":750,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-linux-ying-jian-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-Linux硬件通信","Linux硬件通信","1300",{"path":752,"stem":753,"title":754,"date":594,"chapterOrder":755,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-ji-qi-ren-zu-cheng","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-机器人组成","机器人组成","1400-0100",{"path":757,"stem":758,"title":759,"date":594,"chapterOrder":760,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\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","1400-0200-0100",{"path":762,"stem":763,"title":764,"date":594,"chapterOrder":765,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-yuan-cheng-fang-wen-zhuo-mian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-远程访问桌面","远程访问桌面","1400-0200-0200",{"path":767,"stem":768,"title":769,"date":594,"chapterOrder":770,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\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-工控机之远程开发环境","工控机之远程开发环境","1400-0200",{"path":772,"stem":773,"title":774,"date":594,"chapterOrder":775,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\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设备","1400-0300",{"path":777,"stem":778,"title":779,"date":594,"chapterOrder":780,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-fen-bu-shi-da-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-分布式搭建","分布式搭建","1400-0400",{"path":782,"stem":783,"title":784,"date":594,"chapterOrder":785,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-you-hua-ri-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-优化日志","优化日志","1400-0500",{"path":787,"stem":788,"title":789,"date":594,"chapterOrder":790,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-li-cheng-ji-odom","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-里程计Odom","里程计Odom","1400-0600-0100",{"path":792,"stem":793,"title":794,"date":594,"chapterOrder":795,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-guan-xing-ji-imu","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-惯性计IMU","惯性计IMU","1400-0600-0200",{"path":797,"stem":798,"title":799,"date":594,"chapterOrder":800,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\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","1400-0600-0300",{"path":802,"stem":803,"title":804,"date":594,"chapterOrder":805,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-xiang-ji-camera","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-相机Camera","相机Camera","1400-0600-0400",{"path":807,"stem":808,"title":809,"date":594,"chapterOrder":810,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\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","1400-0600-0500",{"path":812,"stem":813,"title":814,"date":594,"chapterOrder":815,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-shou-bing-joy","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-手柄joy","手柄JOY","1400-0600-0600",{"path":817,"stem":818,"title":819,"date":594,"chapterOrder":820,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-jian-pan-kong-zhi-jie-dian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-键盘控制节点","键盘控制节点","1400-0600-0700",{"path":822,"stem":823,"title":824,"date":594,"chapterOrder":825,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-ying-jian-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-硬件平台","硬件平台","1400-0600",{"path":827,"stem":828,"title":829,"date":594,"chapterOrder":830,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-zuo-biao-xi-yu-hua-ti-guan-xi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-坐标系与话题关系","坐标系与话题关系","1400-0700",{"path":832,"stem":833,"title":834,"date":594,"chapterOrder":835,"chapterDepth":585,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\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-轮式里程计标定","轮式里程计标定","1400-0800-0100-0100",{"path":837,"stem":838,"title":839,"date":594,"chapterOrder":840,"chapterDepth":585,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\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融合","1400-0800-0100-0200",{"path":842,"stem":843,"title":844,"date":594,"chapterOrder":845,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\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-轮式里程计标定与融合","轮式里程计标定与融合","1400-0800-0100",{"path":847,"stem":848,"title":849,"date":594,"chapterOrder":850,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-ji-guang-lei-da-gong-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-激光雷达工具","激光雷达工具","1400-0800-0200",{"path":852,"stem":853,"title":854,"date":594,"chapterOrder":855,"chapterDepth":580,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-xiang-ji-shi-yong-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-相机使用进阶","相机使用进阶","1400-0800-0300",{"path":857,"stem":858,"title":859,"date":594,"chapterOrder":860,"chapterDepth":160,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-ying-jian-ping-tai-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-硬件平台进阶","硬件平台进阶","1400-0800",{"path":862,"stem":863,"title":864,"date":594,"chapterOrder":865,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-ji-qi-ren-ying-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-机器人硬件","机器人硬件","1400",{"path":867,"stem":868,"title":869,"date":594,"chapterOrder":870,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ros2-control","wiki\u002F2023-12-30-ros2-tutorial\u002F1500-ROS2_Control","ROS2_Control","1500",{"path":872,"stem":873,"title":874,"date":594,"chapterOrder":875,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\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工业机器人机械臂","1600",{"path":877,"stem":878,"title":879,"date":594,"chapterOrder":880,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\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(实体篇)","1700",{"path":882,"stem":883,"title":884,"date":594,"chapterOrder":885,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-microros","wiki\u002F2023-12-30-ros2-tutorial\u002F1800-MicroROS","MicroROS","1800",{"path":887,"stem":888,"title":889,"date":594,"chapterOrder":890,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-webots-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1900-Webots仿真平台","Webots仿真平台","1900",{"path":892,"stem":893,"title":894,"date":594,"chapterOrder":895,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":600},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-opencv","wiki\u002F2023-12-30-ros2-tutorial\u002F2000-OpenCV","OpenCV","2000",{"path":596,"stem":897,"title":898,"date":594,"chapterOrder":899,"chapterDepth":612,"docKey":595,"docRoot":596,"docTitle":597,"isWikiDoc":599,"isWikiIndex":599},"wiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2机器人操作系统教程",null,1784505231037]