[{"data":1,"prerenderedAt":2037},["ShallowReactive",2],{"wiki-page-/zh-hk/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2":3,"wiki-doc-items-/zh-hk/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2":1670,"language-switcher-data-/zh-hk/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2":2021,"wiki-i18n-paths-/zh-hk/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2":2036},{"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":1662,"locale":1663,"localeSlug":1664,"meta":1665,"navigation":326,"path":1651,"seo":1666,"sourcePath":1667,"sourceStem":1660,"stem":1668,"wikiDepth":76,"__hash__":1669},"content/_i18n/zh-hk/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-hk/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","7",7000000,"2023-12-30","wiki/2023-12-30-ros2-tutorial","zh-hk:2023-12-30-ros2-tutorial","/zh-hk/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2",false,null,"zh-HK","zh-hk",{},{"title":5,"description":19},"/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","szdQ-SOxbCSSMkkKTrMp9cNQZ34UZWA5jCH0PF0tbaA",[1671,1677,1682,1688,1694,1700,1706,1712,1718,1724,1730,1736,1742,1748,1754,1760,1766,1772,1777,1783,1788,1794,1800,1806,1812,1818,1824,1830,1836,1842,1848,1854,1860,1866,1872,1878,1884,1890,1896,1902,1908,1914,1920,1926,1932,1938,1944,1950,1956,1962,1968,1974,1980,1986,1992,1998,2004,2005,2011,2017],{"path":1672,"stem":1673,"title":1674,"date":1654,"chapter":1675,"chapterSort":1676,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","ROS2介紹","1",1000000,{"path":1678,"stem":1679,"title":1680,"date":1654,"chapter":701,"chapterSort":1681,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2仿真平台",10000000,{"path":1683,"stem":1684,"title":1685,"date":1654,"chapter":1686,"chapterSort":1687,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":1689,"stem":1690,"title":1691,"date":1654,"chapter":1692,"chapterSort":1693,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":1695,"stem":1696,"title":1697,"date":1654,"chapter":1698,"chapterSort":1699,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":1701,"stem":1702,"title":1703,"date":1654,"chapter":1704,"chapterSort":1705,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","將Ign Gazebo遷移至Gz Sim","11.4",11040000,{"path":1707,"stem":1708,"title":1709,"date":1654,"chapter":1710,"chapterSort":1711,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gezebo仿真平台","11",11000000,{"path":1713,"stem":1714,"title":1715,"date":1654,"chapter":1716,"chapterSort":1717,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch12-1-humble-ban-ben","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch12-1-Humble版本","Humble導航仿真","12.1",12010000,{"path":1719,"stem":1720,"title":1721,"date":1654,"chapter":1722,"chapterSort":1723,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch12-2-jazzy-ban-ben","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch12-2-Jazzy版本","Jazzy導航仿真","12.2",12020000,{"path":1725,"stem":1726,"title":1727,"date":1654,"chapter":1728,"chapterSort":1729,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch12-3-humble2jazzy","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch12-3-Humble2Jazzy","Humble與Jazzy導航的差異","12.3",12030000,{"path":1731,"stem":1732,"title":1733,"date":1654,"chapter":1734,"chapterSort":1735,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","機器人導航Navigation2(仿真篇)","12",12000000,{"path":1737,"stem":1738,"title":1739,"date":1654,"chapter":1740,"chapterSort":1741,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-1-1-boost-aiso","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-1-1-Boost.Aiso","Boost.Asio庫","13.1.1",13010100,{"path":1743,"stem":1744,"title":1745,"date":1654,"chapter":1746,"chapterSort":1747,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2-serial-driver","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2_serial_driver","ROS2 Serial Driver庫","13.1.2",13010200,{"path":1749,"stem":1750,"title":1751,"date":1654,"chapter":1752,"chapterSort":1753,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-1-串口通信","UART串口通信","13.1",13010000,{"path":1755,"stem":1756,"title":1757,"date":1654,"chapter":1758,"chapterSort":1759,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","SocketCAN","13.2.1",13020100,{"path":1761,"stem":1762,"title":1763,"date":1654,"chapter":1764,"chapterSort":1765,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2-socketcan","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2_socketcan","ROS2_SocketCAN","13.2.2",13020200,{"path":1767,"stem":1768,"title":1769,"date":1654,"chapter":1770,"chapterSort":1771,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-2-CAN通信","CAN通信","13.2",13020000,{"path":1773,"stem":1774,"title":1739,"date":1654,"chapter":1775,"chapterSort":1776,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-3-1-boost-aiso","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-3-1-Boost.Aiso","13.3.1",13030100,{"path":1778,"stem":1779,"title":1780,"date":1654,"chapter":1781,"chapterSort":1782,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信","TCP通信","13.3",13030000,{"path":1784,"stem":1785,"title":1739,"date":1654,"chapter":1786,"chapterSort":1787,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-4-1-boost-aiso","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-4-1-Boost.Aiso","13.4.1",13040100,{"path":1789,"stem":1790,"title":1791,"date":1654,"chapter":1792,"chapterSort":1793,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-4-udp-tong-xin","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-4-UDP通信","UDP通信","13.4",13040000,{"path":1795,"stem":1796,"title":1797,"date":1654,"chapter":1798,"chapterSort":1799,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-linux-ying-jian-tong-xin","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch13-Linux硬件通信","Linux硬件通信","13",13000000,{"path":1801,"stem":1802,"title":1803,"date":1654,"chapter":1804,"chapterSort":1805,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-1-ji-qi-ren-zu-cheng","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-1-机器人组成","機器人組成","14.1",14010000,{"path":1807,"stem":1808,"title":1809,"date":1654,"chapter":1810,"chapterSort":1811,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-2-1-yuan-cheng-kai-fa-ssh","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-2-1-远程开发SSH","遠程開發SSH","14.2.1",14020100,{"path":1813,"stem":1814,"title":1815,"date":1654,"chapter":1816,"chapterSort":1817,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-2-2-yuan-cheng-fang-wen-zhuo-mian","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-2-2-远程访问桌面","遠程訪問桌面","14.2.2",14020200,{"path":1819,"stem":1820,"title":1821,"date":1654,"chapter":1822,"chapterSort":1823,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-2-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-2-工控机之远程开发环境","工控機之遠程開發環境","14.2",14020000,{"path":1825,"stem":1826,"title":1827,"date":1654,"chapter":1828,"chapterSort":1829,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-3-gong-kong-ji-zhi-wai-jie-usb-she-bei","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-3-工控机之外接USB设备","工控機之外接USB設備","14.3",14030000,{"path":1831,"stem":1832,"title":1833,"date":1654,"chapter":1834,"chapterSort":1835,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-4-fen-bu-shi-da-jian","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-4-分布式搭建","分佈式搭建","14.4",14040000,{"path":1837,"stem":1838,"title":1839,"date":1654,"chapter":1840,"chapterSort":1841,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-5-you-hua-ri-zhi","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-5-优化日志","優化日誌","14.5",14050000,{"path":1843,"stem":1844,"title":1845,"date":1654,"chapter":1846,"chapterSort":1847,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-1-li-cheng-ji-odom","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-1-里程计Odom","里程計Odom","14.6.1",14060100,{"path":1849,"stem":1850,"title":1851,"date":1654,"chapter":1852,"chapterSort":1853,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-2-惯性计IMU","慣性計IMU","14.6.2",14060200,{"path":1855,"stem":1856,"title":1857,"date":1654,"chapter":1858,"chapterSort":1859,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-3-ji-guang-lei-da-lidar","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-3-激光雷达LiDAR","激光雷達LiDAR","14.6.3",14060300,{"path":1861,"stem":1862,"title":1863,"date":1654,"chapter":1864,"chapterSort":1865,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-4-xiang-ji-camera","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-4-相机Camera","相機Camera","14.6.4",14060400,{"path":1867,"stem":1868,"title":1869,"date":1654,"chapter":1870,"chapterSort":1871,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-5-quan-qiu-ding-wei-gnss","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-5-全球定位GNSS","全球定位GNSS","14.6.5",14060500,{"path":1873,"stem":1874,"title":1875,"date":1654,"chapter":1876,"chapterSort":1877,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-6-shou-bing-joy","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-6-手柄joy","手柄JOY","14.6.6",14060600,{"path":1879,"stem":1880,"title":1881,"date":1654,"chapter":1882,"chapterSort":1883,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-7-jian-pan-kong-zhi-jie-dian","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-7-键盘控制节点","鍵盤控制節點","14.6.7",14060700,{"path":1885,"stem":1886,"title":1887,"date":1654,"chapter":1888,"chapterSort":1889,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-ying-jian-ping-tai","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-6-硬件平台","硬件平台","14.6",14060000,{"path":1891,"stem":1892,"title":1893,"date":1654,"chapter":1894,"chapterSort":1895,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-7-zuo-biao-xi-yu-hua-ti-guan-xi","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-7-坐标系与话题关系","座標系與話題關係","14.7",14070000,{"path":1897,"stem":1898,"title":1899,"date":1654,"chapter":1900,"chapterSort":1901,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-lun-shi-li-cheng-ji-biao-ding","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-轮式里程计标定","輪式里程計標定","14.8.1.1",14080101,{"path":1903,"stem":1904,"title":1905,"date":1654,"chapter":1906,"chapterSort":1907,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-轮式里程计与IMU融合","輪式里程計與IMU融合","14.8.1.2",14080102,{"path":1909,"stem":1910,"title":1911,"date":1654,"chapter":1912,"chapterSort":1913,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-8-1-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-8-1-轮式里程计标定与融合","輪式里程計標定與融合","14.8.1",14080100,{"path":1915,"stem":1916,"title":1917,"date":1654,"chapter":1918,"chapterSort":1919,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-8-2-ji-guang-lei-da-gong-ju","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-8-2-激光雷达工具","激光雷達工具","14.8.2",14080200,{"path":1921,"stem":1922,"title":1923,"date":1654,"chapter":1924,"chapterSort":1925,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-8-3-xiang-ji-shi-yong-jin-jie","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-8-3-相机使用进阶","相機使用進階","14.8.3",14080300,{"path":1927,"stem":1928,"title":1929,"date":1654,"chapter":1930,"chapterSort":1931,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-8-ying-jian-ping-tai-jin-jie","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-8-硬件平台进阶","硬件平台進階","14.8",14080000,{"path":1933,"stem":1934,"title":1935,"date":1654,"chapter":1936,"chapterSort":1937,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","機器人硬件","14",14000000,{"path":1939,"stem":1940,"title":1941,"date":1654,"chapter":1942,"chapterSort":1943,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":1945,"stem":1946,"title":1947,"date":1654,"chapter":1948,"chapterSort":1949,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","Moveit2工業機器人機械臂","16",16000000,{"path":1951,"stem":1952,"title":1953,"date":1654,"chapter":1954,"chapterSort":1955,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","機器人導航Navigation2(實體篇)","17",17000000,{"path":1957,"stem":1958,"title":1959,"date":1654,"chapter":1960,"chapterSort":1961,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch18-microros","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":1963,"stem":1964,"title":1965,"date":1654,"chapter":1966,"chapterSort":1967,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots仿真平台","19",19000000,{"path":1969,"stem":1970,"title":1971,"date":1654,"chapter":1972,"chapterSort":1973,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch2-入门操作","入門操作","2",2000000,{"path":1975,"stem":1976,"title":1977,"date":1654,"chapter":1978,"chapterSort":1979,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch20-opencv","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":1981,"stem":1982,"title":1983,"date":1654,"chapter":1984,"chapterSort":1985,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","工作空間與功能包","3",3000000,{"path":1987,"stem":1988,"title":1989,"date":1654,"chapter":1990,"chapterSort":1991,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch4-四大通信","四大通信","4",4000000,{"path":1993,"stem":1994,"title":1995,"date":1654,"chapter":1996,"chapterSort":1997,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2其他通信機制","5",5000000,{"path":1999,"stem":2000,"title":2001,"date":1654,"chapter":2002,"chapterSort":2003,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch6-launch","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":1651,"stem":1668,"title":5,"date":1654,"chapter":1652,"chapterSort":1653,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},{"path":2006,"stem":2007,"title":2008,"date":1654,"chapter":2009,"chapterSort":2010,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","座標變換TF","8",8000000,{"path":2012,"stem":2013,"title":2014,"date":1654,"chapter":2015,"chapterSort":2016,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":1661},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","可視化平台RVIZ2與URDF建模語言","9",9000000,{"path":1657,"stem":2018,"title":2019,"date":1654,"chapter":1662,"chapterSort":2020,"docKey":1656,"docRoot":1657,"docTitle":1658,"isWikiDoc":326,"isWikiIndex":326},"_i18n/zh-hk/wiki/2023-12-30-ros2-tutorial/index","ROS2機器人操作系統教程",0,{"variants":2022},[2023,2026,2029,2030,2033],{"path":2024,"localeSlug":2025,"i18nKey":1660},"/en-us/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","en-us",{"path":2027,"localeSlug":2028,"i18nKey":1660},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","zh-hant",{"path":1651,"localeSlug":1664,"i18nKey":1660},{"path":2031,"localeSlug":2032,"i18nKey":1660},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","zh-tw",{"path":2034,"localeSlug":2035,"i18nKey":1660},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","zh-cn",[2024,1667,2027,1667,1651,1667,2031,1667,2034,1667],1780671859185]