[{"data":1,"prerenderedAt":2064},["ShallowReactive",2],{"wiki-page-/en-us/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2":3,"wiki-doc-items-/en-us/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2":1697,"language-switcher-data-/en-us/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2":2048,"wiki-i18n-paths-/en-us/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2":2063},{"id":4,"title":5,"body":6,"canonicalPath":1678,"chapter":1679,"chapterSort":1680,"date":1681,"description":20,"docI18nKey":1682,"docKey":1683,"docRoot":1684,"docTitle":1685,"extension":1686,"i18nKey":1687,"isBlogPost":1688,"isWikiDoc":346,"isWikiIndex":1688,"layout":1689,"legacyPath":1689,"locale":1690,"localeSlug":1691,"meta":1692,"navigation":346,"path":1678,"seo":1693,"sourcePath":1694,"sourceStem":1687,"stem":1695,"wikiDepth":77,"__hash__":1696},"content/_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2.md","Replaying rosbag2",{"type":7,"value":8,"toc":1671},"minimark",[9,14,22,25,28,31,34,37,42,45,48,53,58,61,64,117,121,126,133,136,141,144,152,157,164,169,172,175,182,185,188,191,196,199,202,205,210,215,220,227,232,239,242,247,252,255,260,265,268,271,274,278,283,288,422,426,1076,1081,1084,1089,1092,1097,1100,1105,1108,1113,1118,1123,1126,1131,1134,1139,1142,1145,1150,1153,1156,1159,1180,1185,1188,1193,1200,1206,1210,1638,1643,1648,1651,1656,1659,1664,1667],[10,11,13],"h3",{"id":12},"overview","Overview",[15,16,17],"p",{},[18,19],"img",{"alt":20,"src":21},"","https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1228.webp",[15,23,24],{},"Method 1: Collect data and generate map information simultaneously.",[15,26,27],{},"Method 2 separates data collection from map information generation, achieving decoupling and thus greater flexibility. The same set of data can be processed with different algorithms — in short, it's very flexible.",[15,29,30],{},"The process of saving can also be called serialization (converting to a disk file).",[15,32,33],{},"Persistence is generally called recording (serialization).",[15,35,36],{},"Reading is generally called playback (deserialization).",[15,38,39],{},[18,40],{"alt":20,"src":41},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1229.webp",[15,43,44],{},"When saving, files can also be split into volumes, meaning each file can have a maximum size. If that size is exceeded, a new file is created to continue saving (similar to splitting a compressed file into volumes).",[15,46,47],{},"In that case, storing too much data would make it too slow to open all at once, so we can open it in segments.",[15,49,50],{},[18,51],{"alt":20,"src":52},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1230.webp",[15,54,55],{},[18,56],{"alt":20,"src":57},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1231.webp",[15,59,60],{},"Must depend on rosbag2_cpp or rosbag2_py",[15,62,63],{},"We also depend on geometry_msgs, because the data we need to serialize is the velocity command from this package.",[65,66,70],"pre",{"className":67,"code":68,"language":69,"meta":20,"style":20},"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",[71,72,73],"code",{"__ignoreMap":20},[74,75,78,82,86,89,92,96,99,102,105,108,111,114],"span",{"class":76,"line":77},"line",1,[74,79,81],{"class":80},"sScJk","ros2",[74,83,85],{"class":84},"sZZnC"," pkg",[74,87,88],{"class":84}," create",[74,90,91],{"class":84}," cpp02_rosbag",[74,93,95],{"class":94},"sj4cs"," --build-type",[74,97,98],{"class":84}," ament_cmake",[74,100,101],{"class":94}," --dependencies",[74,103,104],{"class":84}," rclcpp",[74,106,107],{"class":84}," rosbag2_cpp",[74,109,110],{"class":84}," geometry_msgs",[74,112,113],{"class":94}," --node-name",[74,115,116],{"class":84}," cpp01_writer\n",[10,118,120],{"id":119},"rosbag2-command-line-tools","rosbag2 command-line tools",[15,122,123],{},[18,124],{"alt":20,"src":125},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1232.webp",[15,127,128,129],{},"Generally, ROSBAG2 can be used in two ways: command-line tools and coding. ",[130,131,132],"strong",{},"The command-line tools are quite feature-rich and sufficient for most needs.",[15,134,135],{},"View the help documentation: ros2 bag -h",[15,137,138],{},[18,139],{"alt":20,"src":140},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1233.webp",[15,142,143],{},"There are mainly 6 instructions.",[15,145,146,149],{},[18,147],{"alt":20,"src":148},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1234.webp",[18,150],{"alt":20,"src":151},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1235.webp",[15,153,154],{},[18,155],{"alt":20,"src":156},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1236.webp",[15,158,159,160,163],{},"You can check the detailed usage of ",[71,161,162],{},"record",".",[15,165,166],{},[18,167],{"alt":20,"src":168},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1237.webp",[15,170,171],{},"The record is used to serialize messages. (Recording)",[15,173,174],{},"play is used to deserialize messages. (playback)",[15,176,177,178,181],{},"The ",[71,179,180],{},"info"," command is used to output relevant information about a bag file, such as how many messages it contains, the recording start and end times, and the duration.",[15,183,184],{},"Reindex rebuilds the bag file and can modify the bag source data file.",[15,186,187],{},"list is used to output the available plugins in rosbag2 (advanced application).",[15,189,190],{},"We can use this to change the file extension of a bag file, or merge multiple bag files into a single file.",[15,192,193],{},[18,194],{"alt":20,"src":195},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1238.webp",[15,197,198],{},"Open the turtlesim node and the keyboard control node for the turtle.",[15,200,201],{},"We use the keyboard to control the little turtle, and then serialize the velocity commands through rosbag2.",[15,203,204],{},"Then we shut down the two nodes, restart the turtle node, and this time, instead of controlling it via the keyboard, we make the turtle move by playing a bag file.",[15,206,177,207,209],{},[71,208,162],{}," command must be followed by a list of topics, but in the operation below, only one topic is used.",[15,211,212],{},[18,213],{"alt":20,"src":214},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1239.webp",[15,216,217],{},[18,218],{"alt":20,"src":219},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1240.webp",[15,221,222,223,226],{},"Then use ",[71,224,225],{},"output"," to write the serialized file to a disk directory.",[15,228,229],{},[18,230],{"alt":20,"src":231},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1241.webp",[15,233,234,235,238],{},"Change directory into the folder where you want to save the bag file, then enter the record command followed by the topic name, and then ",[71,236,237],{},"-o"," plus the bag file name. You can also choose not to rename the bag file, in which case the default name will be used. The default name is based on the year, month, and day.",[15,240,241],{},"This means recording has already started.",[15,243,244],{},[18,245],{"alt":20,"src":246},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1242.webp",[15,248,249],{},[18,250],{"alt":20,"src":251},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1243.webp",[15,253,254],{},"Press Ctrl + C to stop. A prompt will appear saying it is writing messages to the bag, which will take a moment.",[15,256,257],{},[18,258],{"alt":20,"src":259},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1244.webp",[15,261,262],{},[18,263],{"alt":20,"src":264},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1245.webp",[15,266,267],{},"This yaml file is the source data file.",[15,269,270],{},"db3 is an SQLite database, which is a commonly used database on mobile devices (such as smartphones).",[15,272,273],{},"This database stores the recorded data.",[10,275,277],{"id":276},"rosbag2-c-case-analysis-and-framework-setup","## rosbag2 C++ Case Analysis and Framework Setup",[15,279,280],{},[18,281],{"alt":20,"src":282},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1246.webp",[15,284,285],{},[18,286],{"alt":20,"src":287},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1247.webp",[65,289,293],{"className":290,"code":291,"language":292,"meta":20,"style":20},"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",[71,294,295,305,311,317,323,329,335,341,348,356,361,367,372,377,382,387,392,401,406,411],{"__ignoreMap":20},[74,296,297,301],{"class":76,"line":77},[74,298,300],{"class":299},"szBVR","add_executable",[74,302,304],{"class":303},"sVt8B","(demo01_writer src/demo01_writer.cpp)\n",[74,306,308],{"class":76,"line":307},2,[74,309,310],{"class":303},"ament_target_dependencies(\n",[74,312,314],{"class":76,"line":313},3,[74,315,316],{"class":303},"  demo01_writer\n",[74,318,320],{"class":76,"line":319},4,[74,321,322],{"class":84},"  \"rclcpp\"\n",[74,324,326],{"class":76,"line":325},5,[74,327,328],{"class":84},"  \"rosbag2_cpp\"\n",[74,330,332],{"class":76,"line":331},6,[74,333,334],{"class":84},"  \"geometry_msgs\"\n",[74,336,338],{"class":76,"line":337},7,[74,339,340],{"class":303},")\n",[74,342,344],{"class":76,"line":343},8,[74,345,347],{"emptyLinePlaceholder":346},true,"\n",[74,349,351,353],{"class":76,"line":350},9,[74,352,300],{"class":299},[74,354,355],{"class":303},"(demo02_reader src/demo02_reader.cpp)\n",[74,357,359],{"class":76,"line":358},10,[74,360,310],{"class":303},[74,362,364],{"class":76,"line":363},11,[74,365,366],{"class":303},"  demo02_reader\n",[74,368,370],{"class":76,"line":369},12,[74,371,322],{"class":84},[74,373,375],{"class":76,"line":374},13,[74,376,328],{"class":84},[74,378,380],{"class":76,"line":379},14,[74,381,334],{"class":84},[74,383,385],{"class":76,"line":384},15,[74,386,340],{"class":303},[74,388,390],{"class":76,"line":389},16,[74,391,347],{"emptyLinePlaceholder":346},[74,393,395,398],{"class":76,"line":394},17,[74,396,397],{"class":299},"install",[74,399,400],{"class":303},"(TARGETS \n",[74,402,404],{"class":76,"line":403},18,[74,405,316],{"class":303},[74,407,409],{"class":76,"line":408},19,[74,410,366],{"class":303},[74,412,414,417,420],{"class":76,"line":413},20,[74,415,416],{"class":303},"  DESTINATION lib/",[74,418,419],{"class":299},"${PROJECT_NAME}",[74,421,340],{"class":303},[10,423,425],{"id":424},"rosbag2-c-recording-data","rosbag2 C++ Recording Data",[65,427,431],{"className":428,"code":429,"language":430,"meta":20,"style":20},"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",[71,432,433,439,444,449,454,459,464,469,474,479,484,489,493,498,503,511,518,525,529,546,550,556,578,584,590,599,616,622,628,658,664,681,710,749,755,760,766,806,811,834,840,863,885,890,895,921,943,949,954,984,989,995,1008,1014,1040,1046,1058,1070],{"__ignoreMap":20},[74,434,435],{"class":76,"line":77},[74,436,438],{"class":437},"sJ8bj","/* \n",[74,440,441],{"class":76,"line":307},[74,442,443],{"class":437},"  需求：录制 turtle_teleop_key 节点发布的速度指令。\n",[74,445,446],{"class":76,"line":313},[74,447,448],{"class":437},"  步骤：\n",[74,450,451],{"class":76,"line":319},[74,452,453],{"class":437},"    1.包含头文件；\n",[74,455,456],{"class":76,"line":325},[74,457,458],{"class":437},"    2.初始化 ROS 客户端；\n",[74,460,461],{"class":76,"line":331},[74,462,463],{"class":437},"    3.定义节点类；\n",[74,465,466],{"class":76,"line":337},[74,467,468],{"class":437},"      3-1.创建写出对象指针；\n",[74,470,471],{"class":76,"line":343},[74,472,473],{"class":437},"      3-2.设置写出的目标文件；\n",[74,475,476],{"class":76,"line":350},[74,477,478],{"class":437},"      3-3.写出消息。\n",[74,480,481],{"class":76,"line":358},[74,482,483],{"class":437},"    4.调用 spin 函数，并传入对象指针；\n",[74,485,486],{"class":76,"line":363},[74,487,488],{"class":437},"    5.释放资源。\n",[74,490,491],{"class":76,"line":369},[74,492,347],{"emptyLinePlaceholder":346},[74,494,495],{"class":76,"line":374},[74,496,497],{"class":437}," */\n",[74,499,500],{"class":76,"line":379},[74,501,502],{"class":437},"// 1.包含头文件；\n",[74,504,505,508],{"class":76,"line":384},[74,506,507],{"class":299},"#include",[74,509,510],{"class":84}," \"rclcpp/rclcpp.hpp\"\n",[74,512,513,515],{"class":76,"line":389},[74,514,507],{"class":299},[74,516,517],{"class":84}," \"rosbag2_cpp/writer.hpp\"\n",[74,519,520,522],{"class":76,"line":394},[74,521,507],{"class":299},[74,523,524],{"class":84}," \"geometry_msgs/msg/twist.hpp\"\n",[74,526,527],{"class":76,"line":403},[74,528,347],{"emptyLinePlaceholder":346},[74,530,531,534,537,540,543],{"class":76,"line":408},[74,532,533],{"class":299},"using",[74,535,536],{"class":80}," std",[74,538,539],{"class":303},"::",[74,541,542],{"class":80},"placeholders",[74,544,545],{"class":303},"::_1;\n",[74,547,548],{"class":76,"line":413},[74,549,347],{"emptyLinePlaceholder":346},[74,551,553],{"class":76,"line":552},21,[74,554,555],{"class":437},"// 3.定义节点类；\n",[74,557,559,562,565,568,571,573,575],{"class":76,"line":558},22,[74,560,561],{"class":299},"class",[74,563,564],{"class":80}," SimpleBagRecorder",[74,566,567],{"class":303}," : ",[74,569,570],{"class":299},"public",[74,572,104],{"class":80},[74,574,539],{"class":303},[74,576,577],{"class":80},"Node\n",[74,579,581],{"class":76,"line":580},23,[74,582,583],{"class":303},"{\n",[74,585,587],{"class":76,"line":586},24,[74,588,589],{"class":299},"public:\n",[74,591,593,596],{"class":76,"line":592},25,[74,594,595],{"class":80},"  SimpleBagRecorder",[74,597,598],{"class":303},"()\n",[74,600,602,605,608,611,614],{"class":76,"line":601},26,[74,603,604],{"class":303},"  : ",[74,606,607],{"class":80},"Node",[74,609,610],{"class":303},"(",[74,612,613],{"class":84},"\"simple_bag_recorder\"",[74,615,340],{"class":303},[74,617,619],{"class":76,"line":618},27,[74,620,621],{"class":303},"  {\n",[74,623,625],{"class":76,"line":624},28,[74,626,627],{"class":437},"    // 3-1.创建写出对象指针；\n",[74,629,631,634,637,639,641,644,647,650,652,655],{"class":76,"line":630},29,[74,632,633],{"class":303},"    writer_ ",[74,635,636],{"class":299},"=",[74,638,536],{"class":80},[74,640,539],{"class":303},[74,642,643],{"class":80},"make_unique",[74,645,646],{"class":303},"\u003C",[74,648,649],{"class":80},"rosbag2_cpp",[74,651,539],{"class":303},[74,653,654],{"class":80},"Writer",[74,656,657],{"class":303},">();\n",[74,659,661],{"class":76,"line":660},30,[74,662,663],{"class":437},"    // 3-2.设置写出的目标文件；(目录为ws目录)\n",[74,665,667,670,673,675,678],{"class":76,"line":666},31,[74,668,669],{"class":303},"    writer_->",[74,671,672],{"class":80},"open",[74,674,610],{"class":303},[74,676,677],{"class":84},"\"src/cpp02_rosbag/my_bag\"",[74,679,680],{"class":303},");\n",[74,682,684,687,689,692,694,697,699,702,704,707],{"class":76,"line":683},32,[74,685,686],{"class":303},"    subscription_ ",[74,688,636],{"class":299},[74,690,691],{"class":80}," create_subscription",[74,693,646],{"class":303},[74,695,696],{"class":80},"geometry_msgs",[74,698,539],{"class":303},[74,700,701],{"class":80},"msg",[74,703,539],{"class":303},[74,705,706],{"class":80},"Twist",[74,708,709],{"class":303},">(\n",[74,711,713,716,719,722,724,727,729,732,734,737,740,743,746],{"class":76,"line":712},33,[74,714,715],{"class":84},"      \"/turtle1/cmd_vel\"",[74,717,718],{"class":303},", ",[74,720,721],{"class":94},"10",[74,723,718],{"class":303},[74,725,726],{"class":80},"std",[74,728,539],{"class":303},[74,730,731],{"class":80},"bind",[74,733,610],{"class":303},[74,735,736],{"class":299},"&",[74,738,739],{"class":80},"SimpleBagRecorder",[74,741,742],{"class":303},"::topic_callback, ",[74,744,745],{"class":94},"this",[74,747,748],{"class":303},", _1));\n",[74,750,752],{"class":76,"line":751},34,[74,753,754],{"class":303},"  }\n",[74,756,758],{"class":76,"line":757},35,[74,759,347],{"emptyLinePlaceholder":346},[74,761,763],{"class":76,"line":762},36,[74,764,765],{"class":299},"private:\n",[74,767,769,772,775,777,779,781,784,786,789,791,794,797,800,803],{"class":76,"line":768},37,[74,770,771],{"class":299},"  void",[74,773,774],{"class":80}," topic_callback",[74,776,610],{"class":303},[74,778,726],{"class":80},[74,780,539],{"class":303},[74,782,783],{"class":80},"shared_ptr",[74,785,646],{"class":303},[74,787,788],{"class":80},"rclcpp",[74,790,539],{"class":303},[74,792,793],{"class":80},"SerializedMessage",[74,795,796],{"class":303},"> ",[74,798,701],{"class":799},"s4XuR",[74,801,802],{"class":303},") ",[74,804,805],{"class":299},"const\n",[74,807,809],{"class":76,"line":808},38,[74,810,621],{"class":303},[74,812,814,817,820,822,825,828,831],{"class":76,"line":813},39,[74,815,816],{"class":80},"    rclcpp",[74,818,819],{"class":303},"::Time time_stamp ",[74,821,636],{"class":299},[74,823,824],{"class":94}," this",[74,826,827],{"class":303},"->",[74,829,830],{"class":80},"now",[74,832,833],{"class":303},"();\n",[74,835,837],{"class":76,"line":836},40,[74,838,839],{"class":437},"    // 3-3.写出消息。\n",[74,841,843,846,848,850,852,855,858,861],{"class":76,"line":842},41,[74,844,845],{"class":80},"    RCLCPP_INFO",[74,847,610],{"class":303},[74,849,745],{"class":94},[74,851,827],{"class":303},[74,853,854],{"class":80},"get_logger",[74,856,857],{"class":303},"(),",[74,859,860],{"class":84},"\"数据写出... ...\"",[74,862,680],{"class":303},[74,864,866,868,871,874,877,879,882],{"class":76,"line":865},42,[74,867,669],{"class":303},[74,869,870],{"class":80},"write",[74,872,873],{"class":303},"(msg, ",[74,875,876],{"class":84},"\"/turtle1/cmd_vel\"",[74,878,718],{"class":303},[74,880,881],{"class":84},"\"geometry_msgs/msg/Twist\"",[74,883,884],{"class":303},", time_stamp);\n",[74,886,888],{"class":76,"line":887},43,[74,889,754],{"class":303},[74,891,893],{"class":76,"line":892},44,[74,894,347],{"emptyLinePlaceholder":346},[74,896,898,901,903,906,908,910,912,914,916,918],{"class":76,"line":897},45,[74,899,900],{"class":80},"  rclcpp",[74,902,539],{"class":303},[74,904,905],{"class":80},"Subscription",[74,907,646],{"class":303},[74,909,696],{"class":80},[74,911,539],{"class":303},[74,913,701],{"class":80},[74,915,539],{"class":303},[74,917,706],{"class":80},[74,919,920],{"class":303},">::SharedPtr subscription_;\n",[74,922,924,927,930,932,934,937,940],{"class":76,"line":923},46,[74,925,926],{"class":80},"  std",[74,928,929],{"class":303},"::unique_ptr",[74,931,646],{"class":299},[74,933,649],{"class":80},[74,935,936],{"class":303},"::Writer",[74,938,939],{"class":299},">",[74,941,942],{"class":303}," writer_;\n",[74,944,946],{"class":76,"line":945},47,[74,947,948],{"class":303},"};\n",[74,950,952],{"class":76,"line":951},48,[74,953,347],{"emptyLinePlaceholder":346},[74,955,957,960,963,965,967,970,972,975,978,981],{"class":76,"line":956},49,[74,958,959],{"class":299},"int",[74,961,962],{"class":80}," main",[74,964,610],{"class":303},[74,966,959],{"class":299},[74,968,969],{"class":799}," argc",[74,971,718],{"class":303},[74,973,974],{"class":299},"char",[74,976,977],{"class":299}," *",[74,979,980],{"class":799}," argv",[74,982,983],{"class":303},"[])\n",[74,985,987],{"class":76,"line":986},50,[74,988,583],{"class":303},[74,990,992],{"class":76,"line":991},51,[74,993,994],{"class":437},"  // 2.初始化 ROS 客户端；\n",[74,996,998,1000,1002,1005],{"class":76,"line":997},52,[74,999,900],{"class":80},[74,1001,539],{"class":303},[74,1003,1004],{"class":80},"init",[74,1006,1007],{"class":303},"(argc, argv);\n",[74,1009,1011],{"class":76,"line":1010},53,[74,1012,1013],{"class":437},"  // 4.调用 spin 函数，并传入对象指针；\n",[74,1015,1017,1019,1021,1024,1026,1028,1030,1033,1035,1037],{"class":76,"line":1016},54,[74,1018,900],{"class":80},[74,1020,539],{"class":303},[74,1022,1023],{"class":80},"spin",[74,1025,610],{"class":303},[74,1027,726],{"class":80},[74,1029,539],{"class":303},[74,1031,1032],{"class":80},"make_shared",[74,1034,646],{"class":303},[74,1036,739],{"class":80},[74,1038,1039],{"class":303},">());\n",[74,1041,1043],{"class":76,"line":1042},55,[74,1044,1045],{"class":437},"  // 5.释放资源。\n",[74,1047,1049,1051,1053,1056],{"class":76,"line":1048},56,[74,1050,900],{"class":80},[74,1052,539],{"class":303},[74,1054,1055],{"class":80},"shutdown",[74,1057,833],{"class":303},[74,1059,1061,1064,1067],{"class":76,"line":1060},57,[74,1062,1063],{"class":299},"  return",[74,1065,1066],{"class":94}," 0",[74,1068,1069],{"class":303},";\n",[74,1071,1073],{"class":76,"line":1072},58,[74,1074,1075],{"class":303},"}\n",[15,1077,1078],{},[18,1079],{"alt":20,"src":1080},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1248.webp",[15,1082,1083],{},"This is a relative directory, located in the workspace directory.",[15,1085,1086],{},[18,1087],{"alt":20,"src":1088},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1249.webp",[15,1090,1091],{},"Before writing data, you must first create a subscriber, which needs to establish a callback function.",[15,1093,1094],{},[18,1095],{"alt":20,"src":1096},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1250.webp",[15,1098,1099],{},"Callback function entry parameters, with the message type using the entry parameters of the write function.",[15,1101,1102],{},[18,1103],{"alt":20,"src":1104},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1251.webp",[15,1106,1107],{},"Here, use a slash instead of a colon, because the entry is of type string.",[15,1109,1110],{},[18,1111],{"alt":20,"src":1112},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1252.webp",[15,1114,1115],{},[18,1116],{"alt":20,"src":1117},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1253.webp",[15,1119,1120],{},[18,1121],{"alt":20,"src":1122},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1254.webp",[15,1124,1125],{},"Create the turtle node.",[15,1127,1128],{},[18,1129],{"alt":20,"src":1130},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1255.webp",[15,1132,1133],{},"Start the writer node",[15,1135,1136],{},[18,1137],{"alt":20,"src":1138},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1256.webp",[15,1140,1141],{},"Run the little turtle",[15,1143,1144],{},"After running for a while, shut down all nodes.",[15,1146,1147],{},[18,1148],{"alt":20,"src":1149},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1257.webp",[15,1151,1152],{},"The file was successfully generated.",[15,1154,1155],{},"Verify whether the recording file was successful.",[15,1157,1158],{},"Before verification, first create a turtle node without creating a control node.",[65,1160,1162],{"className":428,"code":1161,"language":430,"meta":20,"style":20},"ros2 bag play src/cpp02_rosbag/my_bag\n",[71,1163,1164],{"__ignoreMap":20},[74,1165,1166,1169,1172,1175,1177],{"class":76,"line":77},[74,1167,1168],{"class":303},"ros2 bag play src",[74,1170,1171],{"class":299},"/",[74,1173,1174],{"class":303},"cpp02_rosbag",[74,1176,1171],{"class":299},[74,1178,1179],{"class":303},"my_bag\n",[15,1181,1182],{},[18,1183],{"alt":20,"src":1184},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1258.webp",[15,1186,1187],{},"You can see the turtle moving normally. Playback successful!",[15,1189,1190],{},[18,1191],{"alt":20,"src":1192},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1259.webp",[15,1194,1195,1196,1199],{},"If you have already generated ",[71,1197,1198],{},"my_bag"," once, trying to generate it again will show that it cannot be overwritten.",[15,1201,1202,1203,1205],{},"The solution is to make ",[71,1204,1198],{}," dynamic by adding a timestamp or naming it directly based on its function.",[10,1207,1209],{"id":1208},"rosbag2-c-reading-data","rosbag2 C++ reading data",[65,1211,1213],{"className":428,"code":1212,"language":430,"meta":20,"style":20},"/* \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",[71,1214,1215,1219,1224,1228,1232,1236,1240,1245,1250,1255,1260,1264,1268,1272,1276,1281,1288,1295,1301,1306,1327,1331,1349,1354,1378,1383,1396,1401,1415,1420,1448,1480,1485,1490,1499,1504,1508,1527,1531,1535,1539,1566,1571,1582,1587,1610,1615,1625,1634],{"__ignoreMap":20},[74,1216,1217],{"class":76,"line":77},[74,1218,438],{"class":437},[74,1220,1221],{"class":76,"line":307},[74,1222,1223],{"class":437},"  需求：读取 bag 文件数据。\n",[74,1225,1226],{"class":76,"line":313},[74,1227,448],{"class":437},[74,1229,1230],{"class":76,"line":319},[74,1231,453],{"class":437},[74,1233,1234],{"class":76,"line":325},[74,1235,458],{"class":437},[74,1237,1238],{"class":76,"line":331},[74,1239,463],{"class":437},[74,1241,1242],{"class":76,"line":337},[74,1243,1244],{"class":437},"      3-1.创建读取对象指针；\n",[74,1246,1247],{"class":76,"line":343},[74,1248,1249],{"class":437},"      3-2.设置读取的目标文件；\n",[74,1251,1252],{"class":76,"line":350},[74,1253,1254],{"class":437},"      3-3.读消息；\n",[74,1256,1257],{"class":76,"line":358},[74,1258,1259],{"class":437},"      3-4.关闭文件。\n",[74,1261,1262],{"class":76,"line":363},[74,1263,483],{"class":437},[74,1265,1266],{"class":76,"line":369},[74,1267,488],{"class":437},[74,1269,1270],{"class":76,"line":374},[74,1271,347],{"emptyLinePlaceholder":346},[74,1273,1274],{"class":76,"line":379},[74,1275,497],{"class":437},[74,1277,1278],{"class":76,"line":384},[74,1279,1280],{"class":437}," // 1.包含头文件；\n",[74,1282,1283,1286],{"class":76,"line":389},[74,1284,1285],{"class":299}," #include",[74,1287,510],{"class":84},[74,1289,1290,1292],{"class":76,"line":394},[74,1291,1285],{"class":299},[74,1293,1294],{"class":84}," \"rosbag2_cpp/reader.hpp\"\n",[74,1296,1297,1299],{"class":76,"line":403},[74,1298,1285],{"class":299},[74,1300,524],{"class":84},[74,1302,1303],{"class":76,"line":408},[74,1304,1305],{"class":437}," // 3.定义节点类；\n",[74,1307,1308,1310,1313,1316,1318,1320,1322,1324],{"class":76,"line":413},[74,1309,561],{"class":299},[74,1311,1312],{"class":80}," SimpleBagPlayer",[74,1314,1315],{"class":303},": ",[74,1317,570],{"class":299},[74,1319,104],{"class":80},[74,1321,539],{"class":303},[74,1323,607],{"class":80},[74,1325,1326],{"class":303}," {\n",[74,1328,1329],{"class":76,"line":552},[74,1330,589],{"class":299},[74,1332,1333,1336,1339,1341,1343,1346],{"class":76,"line":558},[74,1334,1335],{"class":80},"    SimpleBagPlayer",[74,1337,1338],{"class":303},"():",[74,1340,607],{"class":80},[74,1342,610],{"class":303},[74,1344,1345],{"class":84},"\"simple_bag_player\"",[74,1347,1348],{"class":303},"){\n",[74,1350,1351],{"class":76,"line":580},[74,1352,1353],{"class":437},"        // 3-1.创建读取对象指针；\n",[74,1355,1356,1359,1361,1363,1365,1367,1369,1371,1373,1376],{"class":76,"line":586},[74,1357,1358],{"class":303},"        reader_ ",[74,1360,636],{"class":299},[74,1362,536],{"class":80},[74,1364,539],{"class":303},[74,1366,643],{"class":80},[74,1368,646],{"class":303},[74,1370,649],{"class":80},[74,1372,539],{"class":303},[74,1374,1375],{"class":80},"Reader",[74,1377,657],{"class":303},[74,1379,1380],{"class":76,"line":592},[74,1381,1382],{"class":437},"        // 3-2.设置读取的目标文件；\n",[74,1384,1385,1388,1390,1392,1394],{"class":76,"line":601},[74,1386,1387],{"class":303},"        reader_->",[74,1389,672],{"class":80},[74,1391,610],{"class":303},[74,1393,677],{"class":84},[74,1395,680],{"class":303},[74,1397,1398],{"class":76,"line":618},[74,1399,1400],{"class":437},"        // 3-3.读消息；\n",[74,1402,1403,1406,1409,1412],{"class":76,"line":624},[74,1404,1405],{"class":299},"        while",[74,1407,1408],{"class":303}," (reader_->",[74,1410,1411],{"class":80},"has_next",[74,1413,1414],{"class":303},"())\n",[74,1416,1417],{"class":76,"line":630},[74,1418,1419],{"class":303},"        {\n",[74,1421,1422,1425,1428,1430,1433,1435,1437,1439,1441,1444,1446],{"class":76,"line":660},[74,1423,1424],{"class":299},"            auto",[74,1426,1427],{"class":303}," twist ",[74,1429,636],{"class":299},[74,1431,1432],{"class":303}," reader_->read_next",[74,1434,646],{"class":299},[74,1436,696],{"class":80},[74,1438,539],{"class":303},[74,1440,701],{"class":80},[74,1442,1443],{"class":303},"::Twist",[74,1445,939],{"class":299},[74,1447,833],{"class":303},[74,1449,1450,1453,1455,1457,1459,1461,1463,1466,1469,1472,1474,1477],{"class":76,"line":666},[74,1451,1452],{"class":80},"            RCLCPP_INFO",[74,1454,610],{"class":303},[74,1456,745],{"class":94},[74,1458,827],{"class":303},[74,1460,854],{"class":80},[74,1462,857],{"class":303},[74,1464,1465],{"class":84},"\"线速度:",[74,1467,1468],{"class":94},"%.2f",[74,1470,1471],{"class":84},", 角速度: ",[74,1473,1468],{"class":94},[74,1475,1476],{"class":84},"\"",[74,1478,1479],{"class":303},",twist.linear.x, twist.angular.z);\n",[74,1481,1482],{"class":76,"line":683},[74,1483,1484],{"class":303},"        }\n",[74,1486,1487],{"class":76,"line":712},[74,1488,1489],{"class":437},"        // 3-4.关闭文件。\n",[74,1491,1492,1494,1497],{"class":76,"line":751},[74,1493,1387],{"class":303},[74,1495,1496],{"class":80},"close",[74,1498,833],{"class":303},[74,1500,1501],{"class":76,"line":757},[74,1502,1503],{"class":303},"    }\n",[74,1505,1506],{"class":76,"line":762},[74,1507,765],{"class":299},[74,1509,1510,1513,1515,1517,1519,1522,1524],{"class":76,"line":768},[74,1511,1512],{"class":80},"    std",[74,1514,929],{"class":303},[74,1516,646],{"class":299},[74,1518,649],{"class":80},[74,1520,1521],{"class":303},"::Reader",[74,1523,939],{"class":299},[74,1525,1526],{"class":303}," reader_;\n",[74,1528,1529],{"class":76,"line":808},[74,1530,347],{"emptyLinePlaceholder":346},[74,1532,1533],{"class":76,"line":813},[74,1534,948],{"class":303},[74,1536,1537],{"class":76,"line":836},[74,1538,347],{"emptyLinePlaceholder":346},[74,1540,1541,1543,1545,1547,1549,1551,1553,1555,1558,1560,1563],{"class":76,"line":842},[74,1542,959],{"class":299},[74,1544,962],{"class":80},[74,1546,610],{"class":303},[74,1548,959],{"class":299},[74,1550,969],{"class":799},[74,1552,718],{"class":303},[74,1554,974],{"class":299},[74,1556,1557],{"class":299}," const",[74,1559,977],{"class":299},[74,1561,1562],{"class":799},"argv",[74,1564,1565],{"class":303},"[]){\n",[74,1567,1568],{"class":76,"line":865},[74,1569,1570],{"class":437},"    // 2.初始化 ROS 客户端；\n",[74,1572,1573,1575,1577,1579],{"class":76,"line":887},[74,1574,816],{"class":80},[74,1576,539],{"class":303},[74,1578,1004],{"class":80},[74,1580,1581],{"class":303},"(argc,argv);\n",[74,1583,1584],{"class":76,"line":892},[74,1585,1586],{"class":437},"    // 4.调用 spin 函数，并传入对象指针；\n",[74,1588,1589,1591,1593,1595,1597,1599,1601,1603,1605,1608],{"class":76,"line":897},[74,1590,816],{"class":80},[74,1592,539],{"class":303},[74,1594,1023],{"class":80},[74,1596,610],{"class":303},[74,1598,726],{"class":80},[74,1600,539],{"class":303},[74,1602,1032],{"class":80},[74,1604,646],{"class":303},[74,1606,1607],{"class":80},"SimpleBagPlayer",[74,1609,1039],{"class":303},[74,1611,1612],{"class":76,"line":923},[74,1613,1614],{"class":437},"    // 5.释放资源。\n",[74,1616,1617,1619,1621,1623],{"class":76,"line":945},[74,1618,816],{"class":80},[74,1620,539],{"class":303},[74,1622,1055],{"class":80},[74,1624,833],{"class":303},[74,1626,1627,1630,1632],{"class":76,"line":951},[74,1628,1629],{"class":299},"    return",[74,1631,1066],{"class":94},[74,1633,1069],{"class":303},[74,1635,1636],{"class":76,"line":956},[74,1637,1075],{"class":303},[15,1639,1640],{},[18,1641],{"alt":20,"src":1642},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1260.webp",[15,1644,1645],{},[18,1646],{"alt":20,"src":1647},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1261.webp",[15,1649,1650],{},"Compile",[15,1652,1653],{},[18,1654],{"alt":20,"src":1655},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1262.webp",[15,1657,1658],{},"This shows it can read out several pieces of information. It can read out 8.",[15,1660,1661],{},[18,1662],{"alt":20,"src":1663},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1263.webp",[15,1665,1666],{},"Exactly 8.",[1668,1669,1670],"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":20,"searchDepth":307,"depth":307,"links":1672},[1673,1674,1675,1676,1677],{"id":12,"depth":313,"text":13},{"id":119,"depth":313,"text":120},{"id":276,"depth":313,"text":277},{"id":424,"depth":313,"text":425},{"id":1208,"depth":313,"text":1209},"/en-us/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","7",7000000,"2023-12-30","wiki/2023-12-30-ros2-tutorial","en-us:2023-12-30-ros2-tutorial","/en-us/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2",false,null,"en-US","en-us",{},{"title":5,"description":20},"/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","_V6eoUSwX4ByQNw2cldII2mFx1AHpDJd1TyaZHY0lxo",[1698,1704,1709,1715,1721,1727,1733,1739,1745,1751,1757,1763,1769,1775,1781,1787,1793,1799,1804,1810,1815,1821,1827,1833,1839,1845,1851,1857,1863,1869,1875,1881,1887,1893,1899,1905,1911,1917,1923,1929,1935,1941,1947,1953,1959,1965,1971,1977,1983,1989,1995,2001,2007,2013,2019,2025,2031,2032,2038,2044],{"path":1699,"stem":1700,"title":1701,"date":1681,"chapter":1702,"chapterSort":1703,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","Introduction to ROS2","1",1000000,{"path":1705,"stem":1706,"title":1707,"date":1681,"chapter":721,"chapterSort":1708,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2 Simulation Platform",10000000,{"path":1710,"stem":1711,"title":1712,"date":1681,"chapter":1713,"chapterSort":1714,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":1716,"stem":1717,"title":1718,"date":1681,"chapter":1719,"chapterSort":1720,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":1722,"stem":1723,"title":1724,"date":1681,"chapter":1725,"chapterSort":1726,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":1728,"stem":1729,"title":1730,"date":1681,"chapter":1731,"chapterSort":1732,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","Migrate Ign Gazebo to Gz Sim","11.4",11040000,{"path":1734,"stem":1735,"title":1736,"date":1681,"chapter":1737,"chapterSort":1738,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gazebo simulation platform","11",11000000,{"path":1740,"stem":1741,"title":1742,"date":1681,"chapter":1743,"chapterSort":1744,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-1-humble-ban-ben","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-1-Humble版本","Humble Navigation Simulation","12.1",12010000,{"path":1746,"stem":1747,"title":1748,"date":1681,"chapter":1749,"chapterSort":1750,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-2-jazzy-ban-ben","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-2-Jazzy版本","Jazzy Navigation Simulation","12.2",12020000,{"path":1752,"stem":1753,"title":1754,"date":1681,"chapter":1755,"chapterSort":1756,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-3-humble2jazzy","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-3-Humble2Jazzy","Differences in Navigation between Humble and Jazzy","12.3",12030000,{"path":1758,"stem":1759,"title":1760,"date":1681,"chapter":1761,"chapterSort":1762,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","Robot Navigation with Navigation2 (Simulation)","12",12000000,{"path":1764,"stem":1765,"title":1766,"date":1681,"chapter":1767,"chapterSort":1768,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-1-Boost.Aiso","Boost.Asio库","13.1.1",13010100,{"path":1770,"stem":1771,"title":1772,"date":1681,"chapter":1773,"chapterSort":1774,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2-serial-driver","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2_serial_driver","ROS2 Serial Driver Library","13.1.2",13010200,{"path":1776,"stem":1777,"title":1778,"date":1681,"chapter":1779,"chapterSort":1780,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-串口通信","UART serial communication","13.1",13010000,{"path":1782,"stem":1783,"title":1784,"date":1681,"chapter":1785,"chapterSort":1786,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","SocketCAN","13.2.1",13020100,{"path":1788,"stem":1789,"title":1790,"date":1681,"chapter":1791,"chapterSort":1792,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2-socketcan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2_socketcan","ROS2_SocketCAN","13.2.2",13020200,{"path":1794,"stem":1795,"title":1796,"date":1681,"chapter":1797,"chapterSort":1798,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-CAN通信","CAN communication","13.2",13020000,{"path":1800,"stem":1801,"title":1766,"date":1681,"chapter":1802,"chapterSort":1803,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-1-Boost.Aiso","13.3.1",13030100,{"path":1805,"stem":1806,"title":1807,"date":1681,"chapter":1808,"chapterSort":1809,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信","TCP communication","13.3",13030000,{"path":1811,"stem":1812,"title":1766,"date":1681,"chapter":1813,"chapterSort":1814,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-1-Boost.Aiso","13.4.1",13040100,{"path":1816,"stem":1817,"title":1818,"date":1681,"chapter":1819,"chapterSort":1820,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-udp-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-UDP通信","UDP communication","13.4",13040000,{"path":1822,"stem":1823,"title":1824,"date":1681,"chapter":1825,"chapterSort":1826,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-linux-ying-jian-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-Linux硬件通信","Linux hardware communication","13",13000000,{"path":1828,"stem":1829,"title":1830,"date":1681,"chapter":1831,"chapterSort":1832,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-1-ji-qi-ren-zu-cheng","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-1-机器人组成","Robot Composition","14.1",14010000,{"path":1834,"stem":1835,"title":1836,"date":1681,"chapter":1837,"chapterSort":1838,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-1-yuan-cheng-kai-fa-ssh","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-1-远程开发SSH","Remote Development SSH","14.2.1",14020100,{"path":1840,"stem":1841,"title":1842,"date":1681,"chapter":1843,"chapterSort":1844,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-2-yuan-cheng-fang-wen-zhuo-mian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-2-远程访问桌面","Remote Desktop Access","14.2.2",14020200,{"path":1846,"stem":1847,"title":1848,"date":1681,"chapter":1849,"chapterSort":1850,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-工控机之远程开发环境","Remote Development Environment for Industrial PC","14.2",14020000,{"path":1852,"stem":1853,"title":1854,"date":1681,"chapter":1855,"chapterSort":1856,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-3-gong-kong-ji-zhi-wai-jie-usb-she-bei","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-3-工控机之外接USB设备","External USB Devices for the Industrial PC","14.3",14030000,{"path":1858,"stem":1859,"title":1860,"date":1681,"chapter":1861,"chapterSort":1862,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-4-fen-bu-shi-da-jian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-4-分布式搭建","Distributed setup","14.4",14040000,{"path":1864,"stem":1865,"title":1866,"date":1681,"chapter":1867,"chapterSort":1868,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-5-you-hua-ri-zhi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-5-优化日志","Optimize logs","14.5",14050000,{"path":1870,"stem":1871,"title":1872,"date":1681,"chapter":1873,"chapterSort":1874,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-1-li-cheng-ji-odom","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-1-里程计Odom","odometry","14.6.1",14060100,{"path":1876,"stem":1877,"title":1878,"date":1681,"chapter":1879,"chapterSort":1880,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-2-惯性计IMU","Inertial Measurement Unit (IMU)","14.6.2",14060200,{"path":1882,"stem":1883,"title":1884,"date":1681,"chapter":1885,"chapterSort":1886,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-3-ji-guang-lei-da-lidar","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-3-激光雷达LiDAR","LiDAR","14.6.3",14060300,{"path":1888,"stem":1889,"title":1890,"date":1681,"chapter":1891,"chapterSort":1892,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-4-xiang-ji-camera","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-4-相机Camera","Camera","14.6.4",14060400,{"path":1894,"stem":1895,"title":1896,"date":1681,"chapter":1897,"chapterSort":1898,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-5-quan-qiu-ding-wei-gnss","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-5-全球定位GNSS","Global Navigation Satellite System (GNSS)","14.6.5",14060500,{"path":1900,"stem":1901,"title":1902,"date":1681,"chapter":1903,"chapterSort":1904,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-6-shou-bing-joy","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-6-手柄joy","The query \"手柄JOY\" is a bit ambiguous. To help you better, could you please provide more details? For example:","14.6.6",14060600,{"path":1906,"stem":1907,"title":1908,"date":1681,"chapter":1909,"chapterSort":1910,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-7-jian-pan-kong-zhi-jie-dian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-7-键盘控制节点","Keyboard control node","14.6.7",14060700,{"path":1912,"stem":1913,"title":1914,"date":1681,"chapter":1915,"chapterSort":1916,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-ying-jian-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-硬件平台","Hardware platform","14.6",14060000,{"path":1918,"stem":1919,"title":1920,"date":1681,"chapter":1921,"chapterSort":1922,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-7-zuo-biao-xi-yu-hua-ti-guan-xi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-7-坐标系与话题关系","Coordinate System and Topic Relationship","14.7",14070000,{"path":1924,"stem":1925,"title":1926,"date":1681,"chapter":1927,"chapterSort":1928,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-lun-shi-li-cheng-ji-biao-ding","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-轮式里程计标定","Wheel odometry calibration","14.8.1.1",14080101,{"path":1930,"stem":1931,"title":1932,"date":1681,"chapter":1933,"chapterSort":1934,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-轮式里程计与IMU融合","Fusion of Wheel Odometry and IMU","14.8.1.2",14080102,{"path":1936,"stem":1937,"title":1938,"date":1681,"chapter":1939,"chapterSort":1940,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-轮式里程计标定与融合","Wheel odometry calibration and fusion","14.8.1",14080100,{"path":1942,"stem":1943,"title":1944,"date":1681,"chapter":1945,"chapterSort":1946,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-2-ji-guang-lei-da-gong-ju","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-2-激光雷达工具","Lidar Tool","14.8.2",14080200,{"path":1948,"stem":1949,"title":1950,"date":1681,"chapter":1951,"chapterSort":1952,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-3-xiang-ji-shi-yong-jin-jie","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-3-相机使用进阶","Advanced Camera Usage","14.8.3",14080300,{"path":1954,"stem":1955,"title":1956,"date":1681,"chapter":1957,"chapterSort":1958,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-ying-jian-ping-tai-jin-jie","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-硬件平台进阶","Advanced Hardware Platform","14.8",14080000,{"path":1960,"stem":1961,"title":1962,"date":1681,"chapter":1963,"chapterSort":1964,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","Robot hardware","14",14000000,{"path":1966,"stem":1967,"title":1968,"date":1681,"chapter":1969,"chapterSort":1970,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":1972,"stem":1973,"title":1974,"date":1681,"chapter":1975,"chapterSort":1976,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","MoveIt2 industrial robot arm","16",16000000,{"path":1978,"stem":1979,"title":1980,"date":1681,"chapter":1981,"chapterSort":1982,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","Robot Navigation with Navigation2 (Physical Robot)","17",17000000,{"path":1984,"stem":1985,"title":1986,"date":1681,"chapter":1987,"chapterSort":1988,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch18-microros","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":1990,"stem":1991,"title":1992,"date":1681,"chapter":1993,"chapterSort":1994,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots simulation platform","19",19000000,{"path":1996,"stem":1997,"title":1998,"date":1681,"chapter":1999,"chapterSort":2000,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch2-入门操作","Getting Started","2",2000000,{"path":2002,"stem":2003,"title":2004,"date":1681,"chapter":2005,"chapterSort":2006,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch20-opencv","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":2008,"stem":2009,"title":2010,"date":1681,"chapter":2011,"chapterSort":2012,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","Workspace and Function Packages","3",3000000,{"path":2014,"stem":2015,"title":2016,"date":1681,"chapter":2017,"chapterSort":2018,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch4-四大通信","Four Major Communications","4",4000000,{"path":2020,"stem":2021,"title":2022,"date":1681,"chapter":2023,"chapterSort":2024,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2 Other Communication Mechanisms","5",5000000,{"path":2026,"stem":2027,"title":2028,"date":1681,"chapter":2029,"chapterSort":2030,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch6-launch","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":1678,"stem":1695,"title":5,"date":1681,"chapter":1679,"chapterSort":1680,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},{"path":2033,"stem":2034,"title":2035,"date":1681,"chapter":2036,"chapterSort":2037,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","Coordinate Transformation TF","8",8000000,{"path":2039,"stem":2040,"title":2041,"date":1681,"chapter":2042,"chapterSort":2043,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":1688},"/en-us/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","Visualization Platform RVIZ2 and URDF Modeling Language","9",9000000,{"path":1684,"stem":2045,"title":2046,"date":1681,"chapter":1689,"chapterSort":2047,"docKey":1683,"docRoot":1684,"docTitle":1685,"isWikiDoc":346,"isWikiIndex":346},"_i18n/en-us/wiki/2023-12-30-ros2-tutorial/index","ROS2 Robot Operating System Tutorial",0,{"variants":2049},[2050,2051,2054,2057,2060],{"path":1678,"localeSlug":1691,"i18nKey":1687},{"path":2052,"localeSlug":2053,"i18nKey":1687},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","zh-hant",{"path":2055,"localeSlug":2056,"i18nKey":1687},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","zh-hk",{"path":2058,"localeSlug":2059,"i18nKey":1687},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","zh-tw",{"path":2061,"localeSlug":2062,"i18nKey":1687},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","zh-cn",[1678,1694,2052,1694,2055,1694,2058,1694,2061,1694],1780671798653]