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