[{"data":1,"prerenderedAt":2086},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2":3,"wiki-doc-items-2023-12-30-ros2-tutorial":1666,"wiki:author-members":2074},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":1653,"chapterOrder":1654,"date":1655,"description":21,"docKey":1656,"docRoot":1657,"docTitle":1658,"extension":1659,"isWikiDoc":328,"isWikiIndex":1660,"meta":1661,"navigation":328,"path":1662,"seo":1663,"stem":1664,"wikiDepth":78,"__hash__":1665},"wiki\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2.md","回溯rosbag2",[7],"董佳辉",{"type":9,"value":10,"toc":1646},"minimark",[11,15,23,26,29,32,35,38,43,46,49,54,59,62,65,118,121,126,133,136,141,144,152,157,160,165,168,171,174,177,180,183,188,191,194,197,200,205,210,213,218,221,224,229,234,237,242,247,250,253,256,260,265,270,404,408,1058,1063,1066,1071,1074,1079,1082,1087,1090,1095,1100,1105,1108,1113,1116,1121,1124,1127,1132,1135,1138,1141,1162,1167,1170,1175,1178,1181,1185,1613,1618,1623,1626,1631,1634,1639,1642],[12,13,14],"h3",{"id":14},"概述",[16,17,18],"p",{},[19,20],"img",{"alt":21,"src":22},"","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1228.webp",[16,24,25],{},"方式1一边采集数据，一边生成地图信息。",[16,27,28],{},"方式2是将采集数据和生成地图信息分割开来了，方式2做到了解耦合，所以更灵活一些。用同一套数据，可能用不同的算法处理，总之，非常灵活。",[16,30,31],{},"留存的过程咱们也可以叫做序列化。（转化为磁盘文件）",[16,33,34],{},"留存一般叫录制（序列化）。",[16,36,37],{},"读取一般叫回放(反序列化)。",[16,39,40],{},[19,41],{"alt":21,"src":42},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1229.webp",[16,44,45],{},"留存时也可以将文件进行分卷，也就是每个文件最大能占多大的大小，如果超过该大小，就新建一个文件继续留存。（类似于压缩文件的分卷）",[16,47,48],{},"这样的话，存的数据太大，我们一次性打开太慢，就可以分段打开。",[16,50,51],{},[19,52],{"alt":21,"src":53},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1230.webp",[16,55,56],{},[19,57],{"alt":21,"src":58},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1231.webp",[16,60,61],{},"需要依赖于rosbag2_cpp或者rosbag2_py",[16,63,64],{},"然后还要依赖于geometry_msgs，这个是因为我们要序列化的数据是这个包下的速度指令。",[66,67,71],"pre",{"className":68,"code":69,"language":70,"meta":21,"style":21},"language-bash shiki shiki-themes github-light github-dark","ros2 pkg create cpp02_rosbag --build-type ament_cmake --dependencies rclcpp rosbag2_cpp geometry_msgs --node-name cpp01_writer\n","bash",[72,73,74],"code",{"__ignoreMap":21},[75,76,79,83,87,90,93,97,100,103,106,109,112,115],"span",{"class":77,"line":78},"line",1,[75,80,82],{"class":81},"sScJk","ros2",[75,84,86],{"class":85},"sZZnC"," pkg",[75,88,89],{"class":85}," create",[75,91,92],{"class":85}," cpp02_rosbag",[75,94,96],{"class":95},"sj4cs"," --build-type",[75,98,99],{"class":85}," ament_cmake",[75,101,102],{"class":95}," --dependencies",[75,104,105],{"class":85}," rclcpp",[75,107,108],{"class":85}," rosbag2_cpp",[75,110,111],{"class":85}," geometry_msgs",[75,113,114],{"class":95}," --node-name",[75,116,117],{"class":85}," cpp01_writer\n",[12,119,120],{"id":120},"rosbag2的命令工具",[16,122,123],{},[19,124],{"alt":21,"src":125},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1232.webp",[16,127,128,129],{},"一般ROSBAG2的使用有命令行工具和编码两种使用方式，",[130,131,132],"strong",{},"命令行工具功能比较齐全，够用。",[16,134,135],{},"查看帮助文档ros2 bag -h",[16,137,138],{},[19,139],{"alt":21,"src":140},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1233.webp",[16,142,143],{},"主要有6个指令。",[16,145,146,149],{},[19,147],{"alt":21,"src":148},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1234.webp",[19,150],{"alt":21,"src":151},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1235.webp",[16,153,154],{},[19,155],{"alt":21,"src":156},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1236.webp",[16,158,159],{},"可以看record的详细用法。",[16,161,162],{},[19,163],{"alt":21,"src":164},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1237.webp",[16,166,167],{},"record是用来将消息序列化的。(录制)",[16,169,170],{},"play是用来反序列化消息的。(回放)",[16,172,173],{},"info是用来输出bag文件的相关信息的。比如有多少条消息，录制起始时间和终止时间以及持续时间。",[16,175,176],{},"reindex是重建bag文件，可以修改bag源数据文件。",[16,178,179],{},"list是输出rosbag2中可用的插件(高阶应用)。",[16,181,182],{},"convert我们可以用这个给bag文件修改扩展名，也可以把多个bag文件合并成一个文件。",[16,184,185],{},[19,186],{"alt":21,"src":187},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1238.webp",[16,189,190],{},"打开小乌龟节点与键盘控制小乌龟节点。",[16,192,193],{},"我们用键盘控制小乌龟，然后把速度指令通过rosbag2给序列化。",[16,195,196],{},"然后我们关掉两个节点，再重启小乌龟节点，然后这次不通过键盘控制，而是通过play bag文件让小乌龟运动。",[16,198,199],{},"record指令后面要跟一个话题组成的列表，但是在咱们下面的操作中，只用到了一个话题。",[16,201,202],{},[19,203],{"alt":21,"src":204},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1239.webp",[16,206,207],{},[19,208],{"alt":21,"src":209},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1240.webp",[16,211,212],{},"然后再用output，把序列化后的文件写出到一个磁盘目录中去。",[16,214,215],{},[19,216],{"alt":21,"src":217},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1241.webp",[16,219,220],{},"cd进想保存bag的目录，然输入record指令，后面跟话题名称，然后-o +bag文件名，这里也可以不重新命名bag文件，这样会用默认的名字，默认的名称是年月日命名的。",[16,222,223],{},"这样就已经开始录制了。",[16,225,226],{},[19,227],{"alt":21,"src":228},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1242.webp",[16,230,231],{},[19,232],{"alt":21,"src":233},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1243.webp",[16,235,236],{},"按Ctrl + C进行结束，结束有个提示，说正在将消息写入bag，需要一段时间。",[16,238,239],{},[19,240],{"alt":21,"src":241},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1244.webp",[16,243,244],{},[19,245],{"alt":21,"src":246},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1245.webp",[16,248,249],{},"这个yaml文件是源数据文件。",[16,251,252],{},"db3是SQLite数据库，这个是移动端(比如手机)常用的数据库。",[16,254,255],{},"这个数据库就存储了录制的数据。",[12,257,259],{"id":258},"rosbag2-c案例分析及框架搭建","rosbag2 C++案例分析及框架搭建",[16,261,262],{},[19,263],{"alt":21,"src":264},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1246.webp",[16,266,267],{},[19,268],{"alt":21,"src":269},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1247.webp",[66,271,275],{"className":272,"code":273,"language":274,"meta":21,"style":21},"language-cmake shiki shiki-themes github-light github-dark","add_executable(demo01_writer src\u002Fdemo01_writer.cpp)\nament_target_dependencies(\n  demo01_writer\n  \"rclcpp\"\n  \"rosbag2_cpp\"\n  \"geometry_msgs\"\n)\n\nadd_executable(demo02_reader src\u002Fdemo02_reader.cpp)\nament_target_dependencies(\n  demo02_reader\n  \"rclcpp\"\n  \"rosbag2_cpp\"\n  \"geometry_msgs\"\n)\n\ninstall(TARGETS \n  demo01_writer\n  demo02_reader\n  DESTINATION lib\u002F${PROJECT_NAME})\n","cmake",[72,276,277,287,293,299,305,311,317,323,330,338,343,349,354,359,364,369,374,383,388,393],{"__ignoreMap":21},[75,278,279,283],{"class":77,"line":78},[75,280,282],{"class":281},"szBVR","add_executable",[75,284,286],{"class":285},"sVt8B","(demo01_writer src\u002Fdemo01_writer.cpp)\n",[75,288,290],{"class":77,"line":289},2,[75,291,292],{"class":285},"ament_target_dependencies(\n",[75,294,296],{"class":77,"line":295},3,[75,297,298],{"class":285},"  demo01_writer\n",[75,300,302],{"class":77,"line":301},4,[75,303,304],{"class":85},"  \"rclcpp\"\n",[75,306,308],{"class":77,"line":307},5,[75,309,310],{"class":85},"  \"rosbag2_cpp\"\n",[75,312,314],{"class":77,"line":313},6,[75,315,316],{"class":85},"  \"geometry_msgs\"\n",[75,318,320],{"class":77,"line":319},7,[75,321,322],{"class":285},")\n",[75,324,326],{"class":77,"line":325},8,[75,327,329],{"emptyLinePlaceholder":328},true,"\n",[75,331,333,335],{"class":77,"line":332},9,[75,334,282],{"class":281},[75,336,337],{"class":285},"(demo02_reader src\u002Fdemo02_reader.cpp)\n",[75,339,341],{"class":77,"line":340},10,[75,342,292],{"class":285},[75,344,346],{"class":77,"line":345},11,[75,347,348],{"class":285},"  demo02_reader\n",[75,350,352],{"class":77,"line":351},12,[75,353,304],{"class":85},[75,355,357],{"class":77,"line":356},13,[75,358,310],{"class":85},[75,360,362],{"class":77,"line":361},14,[75,363,316],{"class":85},[75,365,367],{"class":77,"line":366},15,[75,368,322],{"class":285},[75,370,372],{"class":77,"line":371},16,[75,373,329],{"emptyLinePlaceholder":328},[75,375,377,380],{"class":77,"line":376},17,[75,378,379],{"class":281},"install",[75,381,382],{"class":285},"(TARGETS \n",[75,384,386],{"class":77,"line":385},18,[75,387,298],{"class":285},[75,389,391],{"class":77,"line":390},19,[75,392,348],{"class":285},[75,394,396,399,402],{"class":77,"line":395},20,[75,397,398],{"class":285},"  DESTINATION lib\u002F",[75,400,401],{"class":281},"${PROJECT_NAME}",[75,403,322],{"class":285},[12,405,407],{"id":406},"rosbag2-c-录制数据","rosbag2 C++ 录制数据",[66,409,413],{"className":410,"code":411,"language":412,"meta":21,"style":21},"language-cpp shiki shiki-themes github-light github-dark","\u002F* \n  需求：录制 turtle_teleop_key 节点发布的速度指令。\n  步骤：\n    1.包含头文件；\n    2.初始化 ROS 客户端；\n    3.定义节点类；\n      3-1.创建写出对象指针；\n      3-2.设置写出的目标文件；\n      3-3.写出消息。\n    4.调用 spin 函数，并传入对象指针；\n    5.释放资源。\n\n *\u002F\n\u002F\u002F 1.包含头文件；\n#include \"rclcpp\u002Frclcpp.hpp\"\n#include \"rosbag2_cpp\u002Fwriter.hpp\"\n#include \"geometry_msgs\u002Fmsg\u002Ftwist.hpp\"\n\nusing std::placeholders::_1;\n\n\u002F\u002F 3.定义节点类；\nclass SimpleBagRecorder : public rclcpp::Node\n{\npublic:\n  SimpleBagRecorder()\n  : Node(\"simple_bag_recorder\")\n  {\n    \u002F\u002F 3-1.创建写出对象指针；\n    writer_ = std::make_unique\u003Crosbag2_cpp::Writer>();\n    \u002F\u002F 3-2.设置写出的目标文件；(目录为ws目录)\n    writer_->open(\"src\u002Fcpp02_rosbag\u002Fmy_bag\");\n    subscription_ = create_subscription\u003Cgeometry_msgs::msg::Twist>(\n      \"\u002Fturtle1\u002Fcmd_vel\", 10, std::bind(&SimpleBagRecorder::topic_callback, this, _1));\n  }\n\nprivate:\n  void topic_callback(std::shared_ptr\u003Crclcpp::SerializedMessage> msg) const\n  {\n    rclcpp::Time time_stamp = this->now();\n    \u002F\u002F 3-3.写出消息。\n    RCLCPP_INFO(this->get_logger(),\"数据写出... ...\");\n    writer_->write(msg, \"\u002Fturtle1\u002Fcmd_vel\", \"geometry_msgs\u002Fmsg\u002FTwist\", time_stamp);\n  }\n\n  rclcpp::Subscription\u003Cgeometry_msgs::msg::Twist>::SharedPtr subscription_;\n  std::unique_ptr\u003Crosbag2_cpp::Writer> writer_;\n};\n\nint main(int argc, char * argv[])\n{\n  \u002F\u002F 2.初始化 ROS 客户端；\n  rclcpp::init(argc, argv);\n  \u002F\u002F 4.调用 spin 函数，并传入对象指针；\n  rclcpp::spin(std::make_shared\u003CSimpleBagRecorder>());\n  \u002F\u002F 5.释放资源。\n  rclcpp::shutdown();\n  return 0;\n}\n","cpp",[72,414,415,421,426,431,436,441,446,451,456,461,466,471,475,480,485,493,500,507,511,528,532,538,560,566,572,581,598,604,610,640,646,663,692,731,737,742,748,788,793,816,822,845,867,872,877,903,925,931,936,966,971,977,990,996,1022,1028,1040,1052],{"__ignoreMap":21},[75,416,417],{"class":77,"line":78},[75,418,420],{"class":419},"sJ8bj","\u002F* \n",[75,422,423],{"class":77,"line":289},[75,424,425],{"class":419},"  需求：录制 turtle_teleop_key 节点发布的速度指令。\n",[75,427,428],{"class":77,"line":295},[75,429,430],{"class":419},"  步骤：\n",[75,432,433],{"class":77,"line":301},[75,434,435],{"class":419},"    1.包含头文件；\n",[75,437,438],{"class":77,"line":307},[75,439,440],{"class":419},"    2.初始化 ROS 客户端；\n",[75,442,443],{"class":77,"line":313},[75,444,445],{"class":419},"    3.定义节点类；\n",[75,447,448],{"class":77,"line":319},[75,449,450],{"class":419},"      3-1.创建写出对象指针；\n",[75,452,453],{"class":77,"line":325},[75,454,455],{"class":419},"      3-2.设置写出的目标文件；\n",[75,457,458],{"class":77,"line":332},[75,459,460],{"class":419},"      3-3.写出消息。\n",[75,462,463],{"class":77,"line":340},[75,464,465],{"class":419},"    4.调用 spin 函数，并传入对象指针；\n",[75,467,468],{"class":77,"line":345},[75,469,470],{"class":419},"    5.释放资源。\n",[75,472,473],{"class":77,"line":351},[75,474,329],{"emptyLinePlaceholder":328},[75,476,477],{"class":77,"line":356},[75,478,479],{"class":419}," *\u002F\n",[75,481,482],{"class":77,"line":361},[75,483,484],{"class":419},"\u002F\u002F 1.包含头文件；\n",[75,486,487,490],{"class":77,"line":366},[75,488,489],{"class":281},"#include",[75,491,492],{"class":85}," \"rclcpp\u002Frclcpp.hpp\"\n",[75,494,495,497],{"class":77,"line":371},[75,496,489],{"class":281},[75,498,499],{"class":85}," \"rosbag2_cpp\u002Fwriter.hpp\"\n",[75,501,502,504],{"class":77,"line":376},[75,503,489],{"class":281},[75,505,506],{"class":85}," \"geometry_msgs\u002Fmsg\u002Ftwist.hpp\"\n",[75,508,509],{"class":77,"line":385},[75,510,329],{"emptyLinePlaceholder":328},[75,512,513,516,519,522,525],{"class":77,"line":390},[75,514,515],{"class":281},"using",[75,517,518],{"class":81}," std",[75,520,521],{"class":285},"::",[75,523,524],{"class":81},"placeholders",[75,526,527],{"class":285},"::_1;\n",[75,529,530],{"class":77,"line":395},[75,531,329],{"emptyLinePlaceholder":328},[75,533,535],{"class":77,"line":534},21,[75,536,537],{"class":419},"\u002F\u002F 3.定义节点类；\n",[75,539,541,544,547,550,553,555,557],{"class":77,"line":540},22,[75,542,543],{"class":281},"class",[75,545,546],{"class":81}," SimpleBagRecorder",[75,548,549],{"class":285}," : ",[75,551,552],{"class":281},"public",[75,554,105],{"class":81},[75,556,521],{"class":285},[75,558,559],{"class":81},"Node\n",[75,561,563],{"class":77,"line":562},23,[75,564,565],{"class":285},"{\n",[75,567,569],{"class":77,"line":568},24,[75,570,571],{"class":281},"public:\n",[75,573,575,578],{"class":77,"line":574},25,[75,576,577],{"class":81},"  SimpleBagRecorder",[75,579,580],{"class":285},"()\n",[75,582,584,587,590,593,596],{"class":77,"line":583},26,[75,585,586],{"class":285},"  : ",[75,588,589],{"class":81},"Node",[75,591,592],{"class":285},"(",[75,594,595],{"class":85},"\"simple_bag_recorder\"",[75,597,322],{"class":285},[75,599,601],{"class":77,"line":600},27,[75,602,603],{"class":285},"  {\n",[75,605,607],{"class":77,"line":606},28,[75,608,609],{"class":419},"    \u002F\u002F 3-1.创建写出对象指针；\n",[75,611,613,616,619,621,623,626,629,632,634,637],{"class":77,"line":612},29,[75,614,615],{"class":285},"    writer_ ",[75,617,618],{"class":281},"=",[75,620,518],{"class":81},[75,622,521],{"class":285},[75,624,625],{"class":81},"make_unique",[75,627,628],{"class":285},"\u003C",[75,630,631],{"class":81},"rosbag2_cpp",[75,633,521],{"class":285},[75,635,636],{"class":81},"Writer",[75,638,639],{"class":285},">();\n",[75,641,643],{"class":77,"line":642},30,[75,644,645],{"class":419},"    \u002F\u002F 3-2.设置写出的目标文件；(目录为ws目录)\n",[75,647,649,652,655,657,660],{"class":77,"line":648},31,[75,650,651],{"class":285},"    writer_->",[75,653,654],{"class":81},"open",[75,656,592],{"class":285},[75,658,659],{"class":85},"\"src\u002Fcpp02_rosbag\u002Fmy_bag\"",[75,661,662],{"class":285},");\n",[75,664,666,669,671,674,676,679,681,684,686,689],{"class":77,"line":665},32,[75,667,668],{"class":285},"    subscription_ ",[75,670,618],{"class":281},[75,672,673],{"class":81}," create_subscription",[75,675,628],{"class":285},[75,677,678],{"class":81},"geometry_msgs",[75,680,521],{"class":285},[75,682,683],{"class":81},"msg",[75,685,521],{"class":285},[75,687,688],{"class":81},"Twist",[75,690,691],{"class":285},">(\n",[75,693,695,698,701,704,706,709,711,714,716,719,722,725,728],{"class":77,"line":694},33,[75,696,697],{"class":85},"      \"\u002Fturtle1\u002Fcmd_vel\"",[75,699,700],{"class":285},", ",[75,702,703],{"class":95},"10",[75,705,700],{"class":285},[75,707,708],{"class":81},"std",[75,710,521],{"class":285},[75,712,713],{"class":81},"bind",[75,715,592],{"class":285},[75,717,718],{"class":281},"&",[75,720,721],{"class":81},"SimpleBagRecorder",[75,723,724],{"class":285},"::topic_callback, ",[75,726,727],{"class":95},"this",[75,729,730],{"class":285},", _1));\n",[75,732,734],{"class":77,"line":733},34,[75,735,736],{"class":285},"  }\n",[75,738,740],{"class":77,"line":739},35,[75,741,329],{"emptyLinePlaceholder":328},[75,743,745],{"class":77,"line":744},36,[75,746,747],{"class":281},"private:\n",[75,749,751,754,757,759,761,763,766,768,771,773,776,779,782,785],{"class":77,"line":750},37,[75,752,753],{"class":281},"  void",[75,755,756],{"class":81}," topic_callback",[75,758,592],{"class":285},[75,760,708],{"class":81},[75,762,521],{"class":285},[75,764,765],{"class":81},"shared_ptr",[75,767,628],{"class":285},[75,769,770],{"class":81},"rclcpp",[75,772,521],{"class":285},[75,774,775],{"class":81},"SerializedMessage",[75,777,778],{"class":285},"> ",[75,780,683],{"class":781},"s4XuR",[75,783,784],{"class":285},") ",[75,786,787],{"class":281},"const\n",[75,789,791],{"class":77,"line":790},38,[75,792,603],{"class":285},[75,794,796,799,802,804,807,810,813],{"class":77,"line":795},39,[75,797,798],{"class":81},"    rclcpp",[75,800,801],{"class":285},"::Time time_stamp ",[75,803,618],{"class":281},[75,805,806],{"class":95}," this",[75,808,809],{"class":285},"->",[75,811,812],{"class":81},"now",[75,814,815],{"class":285},"();\n",[75,817,819],{"class":77,"line":818},40,[75,820,821],{"class":419},"    \u002F\u002F 3-3.写出消息。\n",[75,823,825,828,830,832,834,837,840,843],{"class":77,"line":824},41,[75,826,827],{"class":81},"    RCLCPP_INFO",[75,829,592],{"class":285},[75,831,727],{"class":95},[75,833,809],{"class":285},[75,835,836],{"class":81},"get_logger",[75,838,839],{"class":285},"(),",[75,841,842],{"class":85},"\"数据写出... ...\"",[75,844,662],{"class":285},[75,846,848,850,853,856,859,861,864],{"class":77,"line":847},42,[75,849,651],{"class":285},[75,851,852],{"class":81},"write",[75,854,855],{"class":285},"(msg, ",[75,857,858],{"class":85},"\"\u002Fturtle1\u002Fcmd_vel\"",[75,860,700],{"class":285},[75,862,863],{"class":85},"\"geometry_msgs\u002Fmsg\u002FTwist\"",[75,865,866],{"class":285},", time_stamp);\n",[75,868,870],{"class":77,"line":869},43,[75,871,736],{"class":285},[75,873,875],{"class":77,"line":874},44,[75,876,329],{"emptyLinePlaceholder":328},[75,878,880,883,885,888,890,892,894,896,898,900],{"class":77,"line":879},45,[75,881,882],{"class":81},"  rclcpp",[75,884,521],{"class":285},[75,886,887],{"class":81},"Subscription",[75,889,628],{"class":285},[75,891,678],{"class":81},[75,893,521],{"class":285},[75,895,683],{"class":81},[75,897,521],{"class":285},[75,899,688],{"class":81},[75,901,902],{"class":285},">::SharedPtr subscription_;\n",[75,904,906,909,912,914,916,919,922],{"class":77,"line":905},46,[75,907,908],{"class":81},"  std",[75,910,911],{"class":285},"::unique_ptr",[75,913,628],{"class":281},[75,915,631],{"class":81},[75,917,918],{"class":285},"::Writer",[75,920,921],{"class":281},">",[75,923,924],{"class":285}," writer_;\n",[75,926,928],{"class":77,"line":927},47,[75,929,930],{"class":285},"};\n",[75,932,934],{"class":77,"line":933},48,[75,935,329],{"emptyLinePlaceholder":328},[75,937,939,942,945,947,949,952,954,957,960,963],{"class":77,"line":938},49,[75,940,941],{"class":281},"int",[75,943,944],{"class":81}," main",[75,946,592],{"class":285},[75,948,941],{"class":281},[75,950,951],{"class":781}," argc",[75,953,700],{"class":285},[75,955,956],{"class":281},"char",[75,958,959],{"class":281}," *",[75,961,962],{"class":781}," argv",[75,964,965],{"class":285},"[])\n",[75,967,969],{"class":77,"line":968},50,[75,970,565],{"class":285},[75,972,974],{"class":77,"line":973},51,[75,975,976],{"class":419},"  \u002F\u002F 2.初始化 ROS 客户端；\n",[75,978,980,982,984,987],{"class":77,"line":979},52,[75,981,882],{"class":81},[75,983,521],{"class":285},[75,985,986],{"class":81},"init",[75,988,989],{"class":285},"(argc, argv);\n",[75,991,993],{"class":77,"line":992},53,[75,994,995],{"class":419},"  \u002F\u002F 4.调用 spin 函数，并传入对象指针；\n",[75,997,999,1001,1003,1006,1008,1010,1012,1015,1017,1019],{"class":77,"line":998},54,[75,1000,882],{"class":81},[75,1002,521],{"class":285},[75,1004,1005],{"class":81},"spin",[75,1007,592],{"class":285},[75,1009,708],{"class":81},[75,1011,521],{"class":285},[75,1013,1014],{"class":81},"make_shared",[75,1016,628],{"class":285},[75,1018,721],{"class":81},[75,1020,1021],{"class":285},">());\n",[75,1023,1025],{"class":77,"line":1024},55,[75,1026,1027],{"class":419},"  \u002F\u002F 5.释放资源。\n",[75,1029,1031,1033,1035,1038],{"class":77,"line":1030},56,[75,1032,882],{"class":81},[75,1034,521],{"class":285},[75,1036,1037],{"class":81},"shutdown",[75,1039,815],{"class":285},[75,1041,1043,1046,1049],{"class":77,"line":1042},57,[75,1044,1045],{"class":281},"  return",[75,1047,1048],{"class":95}," 0",[75,1050,1051],{"class":285},";\n",[75,1053,1055],{"class":77,"line":1054},58,[75,1056,1057],{"class":285},"}\n",[16,1059,1060],{},[19,1061],{"alt":21,"src":1062},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1248.webp",[16,1064,1065],{},"这是一个相对目录，目录位置是工作空间目录。",[16,1067,1068],{},[19,1069],{"alt":21,"src":1070},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1249.webp",[16,1072,1073],{},"写数据之前，要先创建一个订阅方，订阅方要建立一个回调函数。",[16,1075,1076],{},[19,1077],{"alt":21,"src":1078},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1250.webp",[16,1080,1081],{},"回调函数入口参数，消息类型用write函数的入口参数。",[16,1083,1084],{},[19,1085],{"alt":21,"src":1086},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1251.webp",[16,1088,1089],{},"这里要用斜杠代替冒号，因为入口是string类型。",[16,1091,1092],{},[19,1093],{"alt":21,"src":1094},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1252.webp",[16,1096,1097],{},[19,1098],{"alt":21,"src":1099},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1253.webp",[16,1101,1102],{},[19,1103],{"alt":21,"src":1104},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1254.webp",[16,1106,1107],{},"创建乌龟节点。",[16,1109,1110],{},[19,1111],{"alt":21,"src":1112},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1255.webp",[16,1114,1115],{},"启动writer节点",[16,1117,1118],{},[19,1119],{"alt":21,"src":1120},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1256.webp",[16,1122,1123],{},"运行小乌龟",[16,1125,1126],{},"运行一会儿后，关掉所有节点。",[16,1128,1129],{},[19,1130],{"alt":21,"src":1131},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1257.webp",[16,1133,1134],{},"成功生成了文件",[16,1136,1137],{},"验证录制文件是否成功。",[16,1139,1140],{},"在验证前，先创建一个乌龟节点，不用创建控制节点。",[66,1142,1144],{"className":410,"code":1143,"language":412,"meta":21,"style":21},"ros2 bag play src\u002Fcpp02_rosbag\u002Fmy_bag\n",[72,1145,1146],{"__ignoreMap":21},[75,1147,1148,1151,1154,1157,1159],{"class":77,"line":78},[75,1149,1150],{"class":285},"ros2 bag play src",[75,1152,1153],{"class":281},"\u002F",[75,1155,1156],{"class":285},"cpp02_rosbag",[75,1158,1153],{"class":281},[75,1160,1161],{"class":285},"my_bag\n",[16,1163,1164],{},[19,1165],{"alt":21,"src":1166},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1258.webp",[16,1168,1169],{},"可以看到乌龟正常走了。回放成功！",[16,1171,1172],{},[19,1173],{"alt":21,"src":1174},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1259.webp",[16,1176,1177],{},"如果已经生成了一遍my_bag，再想生成新的会显示不能覆盖。",[16,1179,1180],{},"解决方案，可以把my_bag设置为动态的，加个时间戳或者直接按功能命名。",[12,1182,1184],{"id":1183},"rosbag2-c-读取数据","rosbag2 C++ 读取数据",[66,1186,1188],{"className":410,"code":1187,"language":412,"meta":21,"style":21},"\u002F* \n  需求：读取 bag 文件数据。\n  步骤：\n    1.包含头文件；\n    2.初始化 ROS 客户端；\n    3.定义节点类；\n      3-1.创建读取对象指针；\n      3-2.设置读取的目标文件；\n      3-3.读消息；\n      3-4.关闭文件。\n    4.调用 spin 函数，并传入对象指针；\n    5.释放资源。\n\n *\u002F\n \u002F\u002F 1.包含头文件；\n #include \"rclcpp\u002Frclcpp.hpp\"\n #include \"rosbag2_cpp\u002Freader.hpp\"\n #include \"geometry_msgs\u002Fmsg\u002Ftwist.hpp\"\n \u002F\u002F 3.定义节点类；\nclass SimpleBagPlayer: public rclcpp::Node {\npublic:\n    SimpleBagPlayer():Node(\"simple_bag_player\"){\n        \u002F\u002F 3-1.创建读取对象指针；\n        reader_ = std::make_unique\u003Crosbag2_cpp::Reader>();\n        \u002F\u002F 3-2.设置读取的目标文件；\n        reader_->open(\"src\u002Fcpp02_rosbag\u002Fmy_bag\");\n        \u002F\u002F 3-3.读消息；\n        while (reader_->has_next())\n        {\n            auto twist = reader_->read_next\u003Cgeometry_msgs::msg::Twist>();\n            RCLCPP_INFO(this->get_logger(),\"线速度:%.2f, 角速度: %.2f\",twist.linear.x, twist.angular.z);\n        }\n        \u002F\u002F 3-4.关闭文件。\n        reader_->close();\n    }\nprivate:\n    std::unique_ptr\u003Crosbag2_cpp::Reader> reader_;\n\n};\n\nint main(int argc, char const *argv[]){\n    \u002F\u002F 2.初始化 ROS 客户端；\n    rclcpp::init(argc,argv);\n    \u002F\u002F 4.调用 spin 函数，并传入对象指针；\n    rclcpp::spin(std::make_shared\u003CSimpleBagPlayer>());\n    \u002F\u002F 5.释放资源。\n    rclcpp::shutdown();\n    return 0;\n}\n",[72,1189,1190,1194,1199,1203,1207,1211,1215,1220,1225,1230,1235,1239,1243,1247,1251,1256,1263,1270,1276,1281,1302,1306,1324,1329,1353,1358,1371,1376,1390,1395,1423,1455,1460,1465,1474,1479,1483,1502,1506,1510,1514,1541,1546,1557,1562,1585,1590,1600,1609],{"__ignoreMap":21},[75,1191,1192],{"class":77,"line":78},[75,1193,420],{"class":419},[75,1195,1196],{"class":77,"line":289},[75,1197,1198],{"class":419},"  需求：读取 bag 文件数据。\n",[75,1200,1201],{"class":77,"line":295},[75,1202,430],{"class":419},[75,1204,1205],{"class":77,"line":301},[75,1206,435],{"class":419},[75,1208,1209],{"class":77,"line":307},[75,1210,440],{"class":419},[75,1212,1213],{"class":77,"line":313},[75,1214,445],{"class":419},[75,1216,1217],{"class":77,"line":319},[75,1218,1219],{"class":419},"      3-1.创建读取对象指针；\n",[75,1221,1222],{"class":77,"line":325},[75,1223,1224],{"class":419},"      3-2.设置读取的目标文件；\n",[75,1226,1227],{"class":77,"line":332},[75,1228,1229],{"class":419},"      3-3.读消息；\n",[75,1231,1232],{"class":77,"line":340},[75,1233,1234],{"class":419},"      3-4.关闭文件。\n",[75,1236,1237],{"class":77,"line":345},[75,1238,465],{"class":419},[75,1240,1241],{"class":77,"line":351},[75,1242,470],{"class":419},[75,1244,1245],{"class":77,"line":356},[75,1246,329],{"emptyLinePlaceholder":328},[75,1248,1249],{"class":77,"line":361},[75,1250,479],{"class":419},[75,1252,1253],{"class":77,"line":366},[75,1254,1255],{"class":419}," \u002F\u002F 1.包含头文件；\n",[75,1257,1258,1261],{"class":77,"line":371},[75,1259,1260],{"class":281}," #include",[75,1262,492],{"class":85},[75,1264,1265,1267],{"class":77,"line":376},[75,1266,1260],{"class":281},[75,1268,1269],{"class":85}," \"rosbag2_cpp\u002Freader.hpp\"\n",[75,1271,1272,1274],{"class":77,"line":385},[75,1273,1260],{"class":281},[75,1275,506],{"class":85},[75,1277,1278],{"class":77,"line":390},[75,1279,1280],{"class":419}," \u002F\u002F 3.定义节点类；\n",[75,1282,1283,1285,1288,1291,1293,1295,1297,1299],{"class":77,"line":395},[75,1284,543],{"class":281},[75,1286,1287],{"class":81}," SimpleBagPlayer",[75,1289,1290],{"class":285},": ",[75,1292,552],{"class":281},[75,1294,105],{"class":81},[75,1296,521],{"class":285},[75,1298,589],{"class":81},[75,1300,1301],{"class":285}," {\n",[75,1303,1304],{"class":77,"line":534},[75,1305,571],{"class":281},[75,1307,1308,1311,1314,1316,1318,1321],{"class":77,"line":540},[75,1309,1310],{"class":81},"    SimpleBagPlayer",[75,1312,1313],{"class":285},"():",[75,1315,589],{"class":81},[75,1317,592],{"class":285},[75,1319,1320],{"class":85},"\"simple_bag_player\"",[75,1322,1323],{"class":285},"){\n",[75,1325,1326],{"class":77,"line":562},[75,1327,1328],{"class":419},"        \u002F\u002F 3-1.创建读取对象指针；\n",[75,1330,1331,1334,1336,1338,1340,1342,1344,1346,1348,1351],{"class":77,"line":568},[75,1332,1333],{"class":285},"        reader_ ",[75,1335,618],{"class":281},[75,1337,518],{"class":81},[75,1339,521],{"class":285},[75,1341,625],{"class":81},[75,1343,628],{"class":285},[75,1345,631],{"class":81},[75,1347,521],{"class":285},[75,1349,1350],{"class":81},"Reader",[75,1352,639],{"class":285},[75,1354,1355],{"class":77,"line":574},[75,1356,1357],{"class":419},"        \u002F\u002F 3-2.设置读取的目标文件；\n",[75,1359,1360,1363,1365,1367,1369],{"class":77,"line":583},[75,1361,1362],{"class":285},"        reader_->",[75,1364,654],{"class":81},[75,1366,592],{"class":285},[75,1368,659],{"class":85},[75,1370,662],{"class":285},[75,1372,1373],{"class":77,"line":600},[75,1374,1375],{"class":419},"        \u002F\u002F 3-3.读消息；\n",[75,1377,1378,1381,1384,1387],{"class":77,"line":606},[75,1379,1380],{"class":281},"        while",[75,1382,1383],{"class":285}," (reader_->",[75,1385,1386],{"class":81},"has_next",[75,1388,1389],{"class":285},"())\n",[75,1391,1392],{"class":77,"line":612},[75,1393,1394],{"class":285},"        {\n",[75,1396,1397,1400,1403,1405,1408,1410,1412,1414,1416,1419,1421],{"class":77,"line":642},[75,1398,1399],{"class":281},"            auto",[75,1401,1402],{"class":285}," twist ",[75,1404,618],{"class":281},[75,1406,1407],{"class":285}," reader_->read_next",[75,1409,628],{"class":281},[75,1411,678],{"class":81},[75,1413,521],{"class":285},[75,1415,683],{"class":81},[75,1417,1418],{"class":285},"::Twist",[75,1420,921],{"class":281},[75,1422,815],{"class":285},[75,1424,1425,1428,1430,1432,1434,1436,1438,1441,1444,1447,1449,1452],{"class":77,"line":648},[75,1426,1427],{"class":81},"            RCLCPP_INFO",[75,1429,592],{"class":285},[75,1431,727],{"class":95},[75,1433,809],{"class":285},[75,1435,836],{"class":81},[75,1437,839],{"class":285},[75,1439,1440],{"class":85},"\"线速度:",[75,1442,1443],{"class":95},"%.2f",[75,1445,1446],{"class":85},", 角速度: ",[75,1448,1443],{"class":95},[75,1450,1451],{"class":85},"\"",[75,1453,1454],{"class":285},",twist.linear.x, twist.angular.z);\n",[75,1456,1457],{"class":77,"line":665},[75,1458,1459],{"class":285},"        }\n",[75,1461,1462],{"class":77,"line":694},[75,1463,1464],{"class":419},"        \u002F\u002F 3-4.关闭文件。\n",[75,1466,1467,1469,1472],{"class":77,"line":733},[75,1468,1362],{"class":285},[75,1470,1471],{"class":81},"close",[75,1473,815],{"class":285},[75,1475,1476],{"class":77,"line":739},[75,1477,1478],{"class":285},"    }\n",[75,1480,1481],{"class":77,"line":744},[75,1482,747],{"class":281},[75,1484,1485,1488,1490,1492,1494,1497,1499],{"class":77,"line":750},[75,1486,1487],{"class":81},"    std",[75,1489,911],{"class":285},[75,1491,628],{"class":281},[75,1493,631],{"class":81},[75,1495,1496],{"class":285},"::Reader",[75,1498,921],{"class":281},[75,1500,1501],{"class":285}," reader_;\n",[75,1503,1504],{"class":77,"line":790},[75,1505,329],{"emptyLinePlaceholder":328},[75,1507,1508],{"class":77,"line":795},[75,1509,930],{"class":285},[75,1511,1512],{"class":77,"line":818},[75,1513,329],{"emptyLinePlaceholder":328},[75,1515,1516,1518,1520,1522,1524,1526,1528,1530,1533,1535,1538],{"class":77,"line":824},[75,1517,941],{"class":281},[75,1519,944],{"class":81},[75,1521,592],{"class":285},[75,1523,941],{"class":281},[75,1525,951],{"class":781},[75,1527,700],{"class":285},[75,1529,956],{"class":281},[75,1531,1532],{"class":281}," const",[75,1534,959],{"class":281},[75,1536,1537],{"class":781},"argv",[75,1539,1540],{"class":285},"[]){\n",[75,1542,1543],{"class":77,"line":847},[75,1544,1545],{"class":419},"    \u002F\u002F 2.初始化 ROS 客户端；\n",[75,1547,1548,1550,1552,1554],{"class":77,"line":869},[75,1549,798],{"class":81},[75,1551,521],{"class":285},[75,1553,986],{"class":81},[75,1555,1556],{"class":285},"(argc,argv);\n",[75,1558,1559],{"class":77,"line":874},[75,1560,1561],{"class":419},"    \u002F\u002F 4.调用 spin 函数，并传入对象指针；\n",[75,1563,1564,1566,1568,1570,1572,1574,1576,1578,1580,1583],{"class":77,"line":879},[75,1565,798],{"class":81},[75,1567,521],{"class":285},[75,1569,1005],{"class":81},[75,1571,592],{"class":285},[75,1573,708],{"class":81},[75,1575,521],{"class":285},[75,1577,1014],{"class":81},[75,1579,628],{"class":285},[75,1581,1582],{"class":81},"SimpleBagPlayer",[75,1584,1021],{"class":285},[75,1586,1587],{"class":77,"line":905},[75,1588,1589],{"class":419},"    \u002F\u002F 5.释放资源。\n",[75,1591,1592,1594,1596,1598],{"class":77,"line":927},[75,1593,798],{"class":81},[75,1595,521],{"class":285},[75,1597,1037],{"class":81},[75,1599,815],{"class":285},[75,1601,1602,1605,1607],{"class":77,"line":933},[75,1603,1604],{"class":281},"    return",[75,1606,1048],{"class":95},[75,1608,1051],{"class":285},[75,1610,1611],{"class":77,"line":938},[75,1612,1057],{"class":285},[16,1614,1615],{},[19,1616],{"alt":21,"src":1617},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1260.webp",[16,1619,1620],{},[19,1621],{"alt":21,"src":1622},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1261.webp",[16,1624,1625],{},"编译",[16,1627,1628],{},[19,1629],{"alt":21,"src":1630},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1262.webp",[16,1632,1633],{},"这显示能读出来几条信息。能读出来8条。",[16,1635,1636],{},[19,1637],{"alt":21,"src":1638},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1263.webp",[16,1640,1641],{},"正好8条",[1643,1644,1645],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":21,"searchDepth":289,"depth":289,"links":1647},[1648,1649,1650,1651,1652],{"id":14,"depth":295,"text":14},{"id":120,"depth":295,"text":120},{"id":258,"depth":295,"text":259},{"id":406,"depth":295,"text":407},{"id":1183,"depth":295,"text":1184},0,"0700","2023-12-30","2023-12-30-ros2-tutorial","\u002Fwiki\u002F2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,{},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2",{"title":5,"description":21},"wiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2","Gm4U7oqb9lYrKD1YNIdwwALW40xrJvlwXqJU263e1F8",[1667,1673,1679,1685,1691,1697,1703,1705,1711,1717,1723,1729,1735,1741,1747,1753,1759,1765,1771,1777,1783,1789,1795,1801,1807,1813,1819,1825,1831,1837,1843,1849,1855,1861,1867,1872,1878,1883,1889,1895,1901,1907,1913,1919,1925,1931,1937,1943,1949,1955,1961,1967,1973,1979,1985,1991,1997,2003,2009,2015,2021,2027,2033,2039,2045,2051,2057,2063,2069],{"path":1668,"stem":1669,"title":1670,"authors":1671,"date":1655,"chapterOrder":1672,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao","wiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍","ROS2介绍",[7],"0100",{"path":1674,"stem":1675,"title":1676,"authors":1677,"date":1655,"chapterOrder":1678,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","wiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作","入门操作",[7],"0200",{"path":1680,"stem":1681,"title":1682,"authors":1683,"date":1655,"chapterOrder":1684,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1686,"stem":1687,"title":1688,"authors":1689,"date":1655,"chapterOrder":1690,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信","四大通信",[7],"0400",{"path":1692,"stem":1693,"title":1694,"authors":1695,"date":1655,"chapterOrder":1696,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1698,"stem":1699,"title":1700,"authors":1701,"date":1655,"chapterOrder":1702,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-launch","wiki\u002F2023-12-30-ros2-tutorial\u002F0600-Launch","Launch",[7],"0600",{"path":1662,"stem":1664,"title":5,"authors":1704,"date":1655,"chapterOrder":1654,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},[7],{"path":1706,"stem":1707,"title":1708,"authors":1709,"date":1655,"chapterOrder":1710,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-zuo-biao-bian-huan-tf","wiki\u002F2023-12-30-ros2-tutorial\u002F0800-坐标变换TF","坐标变换TF",[7],"0800",{"path":1712,"stem":1713,"title":1714,"authors":1715,"date":1655,"chapterOrder":1716,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1718,"stem":1719,"title":1720,"authors":1721,"date":1655,"chapterOrder":1722,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1724,"stem":1725,"title":1726,"authors":1727,"date":1655,"chapterOrder":1728,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic","Gezebo Classic",[7],"1100-0100",{"path":1730,"stem":1731,"title":1732,"authors":1733,"date":1655,"chapterOrder":1734,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1736,"stem":1737,"title":1738,"authors":1739,"date":1655,"chapterOrder":1740,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1742,"stem":1743,"title":1744,"authors":1745,"date":1655,"chapterOrder":1746,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1748,"stem":1749,"title":1750,"authors":1751,"date":1655,"chapterOrder":1752,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-gezebo-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-Gezebo仿真平台","Gezebo仿真平台",[7],"1100",{"path":1754,"stem":1755,"title":1756,"authors":1757,"date":1655,"chapterOrder":1758,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1760,"stem":1761,"title":1762,"authors":1763,"date":1655,"chapterOrder":1764,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1766,"stem":1767,"title":1768,"authors":1769,"date":1655,"chapterOrder":1770,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-humble2jazzy","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-Humble2Jazzy","Humble与Jazzy导航的差异",[7],"1200-0300",{"path":1772,"stem":1773,"title":1774,"authors":1775,"date":1655,"chapterOrder":1776,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1778,"stem":1779,"title":1780,"authors":1781,"date":1655,"chapterOrder":1782,"chapterDepth":295,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1784,"stem":1785,"title":1786,"authors":1787,"date":1655,"chapterOrder":1788,"chapterDepth":295,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1790,"stem":1791,"title":1792,"authors":1793,"date":1655,"chapterOrder":1794,"chapterDepth":295,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1796,"stem":1797,"title":1798,"authors":1799,"date":1655,"chapterOrder":1800,"chapterDepth":295,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1802,"stem":1803,"title":1804,"authors":1805,"date":1655,"chapterOrder":1806,"chapterDepth":295,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1808,"stem":1809,"title":1810,"authors":1811,"date":1655,"chapterOrder":1812,"chapterDepth":295,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1814,"stem":1815,"title":1816,"authors":1817,"date":1655,"chapterOrder":1818,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1820,"stem":1821,"title":1822,"authors":1823,"date":1655,"chapterOrder":1824,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1826,"stem":1827,"title":1828,"authors":1829,"date":1655,"chapterOrder":1830,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1832,"stem":1833,"title":1834,"authors":1835,"date":1655,"chapterOrder":1836,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1838,"stem":1839,"title":1840,"authors":1841,"date":1655,"chapterOrder":1842,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1844,"stem":1845,"title":1846,"authors":1847,"date":1655,"chapterOrder":1848,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1850,"stem":1851,"title":1852,"authors":1853,"date":1655,"chapterOrder":1854,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1856,"stem":1857,"title":1858,"authors":1859,"date":1655,"chapterOrder":1860,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1862,"stem":1863,"title":1864,"authors":1865,"date":1655,"chapterOrder":1866,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1868,"stem":1869,"title":1834,"authors":1870,"date":1655,"chapterOrder":1871,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1873,"stem":1874,"title":1875,"authors":1876,"date":1655,"chapterOrder":1877,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1879,"stem":1880,"title":1834,"authors":1881,"date":1655,"chapterOrder":1882,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1884,"stem":1885,"title":1886,"authors":1887,"date":1655,"chapterOrder":1888,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-udp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-UDP通信","UDP通信",[7],"1300-0400",{"path":1890,"stem":1891,"title":1892,"authors":1893,"date":1655,"chapterOrder":1894,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-linux-ying-jian-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-Linux硬件通信","Linux硬件通信",[7],"1300",{"path":1896,"stem":1897,"title":1898,"authors":1899,"date":1655,"chapterOrder":1900,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1902,"stem":1903,"title":1904,"authors":1905,"date":1655,"chapterOrder":1906,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1908,"stem":1909,"title":1910,"authors":1911,"date":1655,"chapterOrder":1912,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1914,"stem":1915,"title":1916,"authors":1917,"date":1655,"chapterOrder":1918,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1920,"stem":1921,"title":1922,"authors":1923,"date":1655,"chapterOrder":1924,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1926,"stem":1927,"title":1928,"authors":1929,"date":1655,"chapterOrder":1930,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1932,"stem":1933,"title":1934,"authors":1935,"date":1655,"chapterOrder":1936,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-you-hua-ri-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-优化日志","优化日志",[7],"1400-0500",{"path":1938,"stem":1939,"title":1940,"authors":1941,"date":1655,"chapterOrder":1942,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1944,"stem":1945,"title":1946,"authors":1947,"date":1655,"chapterOrder":1948,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1950,"stem":1951,"title":1952,"authors":1953,"date":1655,"chapterOrder":1954,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1956,"stem":1957,"title":1958,"authors":1959,"date":1655,"chapterOrder":1960,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1962,"stem":1963,"title":1964,"authors":1965,"date":1655,"chapterOrder":1966,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1968,"stem":1969,"title":1970,"authors":1971,"date":1655,"chapterOrder":1972,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1974,"stem":1975,"title":1976,"authors":1977,"date":1655,"chapterOrder":1978,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1980,"stem":1981,"title":1982,"authors":1983,"date":1655,"chapterOrder":1984,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-ying-jian-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-硬件平台","硬件平台",[7],"1400-0600",{"path":1986,"stem":1987,"title":1988,"authors":1989,"date":1655,"chapterOrder":1990,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1992,"stem":1993,"title":1994,"authors":1995,"date":1655,"chapterOrder":1996,"chapterDepth":295,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":1998,"stem":1999,"title":2000,"authors":2001,"date":1655,"chapterOrder":2002,"chapterDepth":295,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":2004,"stem":2005,"title":2006,"authors":2007,"date":1655,"chapterOrder":2008,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":2010,"stem":2011,"title":2012,"authors":2013,"date":1655,"chapterOrder":2014,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":2016,"stem":2017,"title":2018,"authors":2019,"date":1655,"chapterOrder":2020,"chapterDepth":289,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":2022,"stem":2023,"title":2024,"authors":2025,"date":1655,"chapterOrder":2026,"chapterDepth":78,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":2028,"stem":2029,"title":2030,"authors":2031,"date":1655,"chapterOrder":2032,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-ji-qi-ren-ying-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-机器人硬件","机器人硬件",[7],"1400",{"path":2034,"stem":2035,"title":2036,"authors":2037,"date":1655,"chapterOrder":2038,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ros2-control","wiki\u002F2023-12-30-ros2-tutorial\u002F1500-ROS2_Control","ROS2_Control",[7],"1500",{"path":2040,"stem":2041,"title":2042,"authors":2043,"date":1655,"chapterOrder":2044,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":2046,"stem":2047,"title":2048,"authors":2049,"date":1655,"chapterOrder":2050,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\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":2052,"stem":2053,"title":2054,"authors":2055,"date":1655,"chapterOrder":2056,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-microros","wiki\u002F2023-12-30-ros2-tutorial\u002F1800-MicroROS","MicroROS",[7],"1800",{"path":2058,"stem":2059,"title":2060,"authors":2061,"date":1655,"chapterOrder":2062,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-webots-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1900-Webots仿真平台","Webots仿真平台",[7],"1900",{"path":2064,"stem":2065,"title":2066,"authors":2067,"date":1655,"chapterOrder":2068,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":1660},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-opencv","wiki\u002F2023-12-30-ros2-tutorial\u002F2000-OpenCV","OpenCV",[7],"2000",{"path":1657,"stem":2070,"title":2071,"authors":2072,"date":1655,"chapterOrder":2073,"chapterDepth":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":328,"isWikiIndex":328},"wiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2机器人操作系统教程",[7],null,[2075,2077,2080,2083],{"name":7,"image":2076},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":2078,"image":2079},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":2081,"image":2082},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":2084,"image":2085},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431901409]