[{"data":1,"prerenderedAt":2379},["ShallowReactive",2],{"wiki-page-/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo":3,"wiki-doc-items-/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo":2235},{"id":4,"title":5,"body":6,"chapter":2221,"chapterSort":2222,"date":2223,"description":19,"docKey":2224,"docRoot":2225,"docTitle":2226,"extension":2227,"isWikiDoc":860,"isWikiIndex":2228,"layout":2229,"meta":2230,"navigation":860,"path":2231,"seo":2232,"stem":2233,"wikiDepth":74,"__hash__":2234},"content/wiki/2023-12-30-ros2-tutorial/ch2-入门操作.md","入门操作",{"type":7,"value":8,"toc":2208},"minimark",[9,13,21,26,31,36,41,44,49,57,62,106,109,114,134,139,144,147,152,169,177,205,210,213,218,221,224,227,230,233,235,240,245,248,253,258,261,266,271,274,279,281,286,291,296,299,304,334,339,344,368,373,378,383,413,416,419,424,427,430,434,439,444,449,452,457,462,465,468,504,509,514,517,522,525,530,535,540,543,546,549,554,557,560,563,566,569,572,577,582,585,588,591,596,599,604,619,624,639,642,647,650,655,663,668,673,678,683,687,692,722,725,730,735,740,743,748,751,756,761,766,769,772,777,780,785,790,793,798,810,813,828,833,835,840,944,949,954,959,963,968,973,976,981,986,989,993,998,1006,1014,1022,1025,1028,1033,1036,1041,1044,1052,1055,1060,1063,1068,1071,1076,1079,1081,1086,1091,1096,1099,1104,1109,1114,1119,1124,1156,1161,1164,1169,1174,1176,1179,1184,1189,1192,1197,1202,1207,1210,1215,1218,1223,1226,1231,1233,1238,1243,1248,1253,1255,1258,1263,1266,1269,1272,1277,1282,1285,1290,1295,1300,1305,1309,1314,1317,1322,1348,1353,1357,1362,1370,1373,1376,1379,1443,1468,1475,1480,1483,1505,1519,1526,1560,1563,1568,1571,1576,1579,1584,1589,1594,1597,1602,1605,1610,1613,1616,1635,1640,1788,1791,1814,1825,2119,2128,2131,2148,2153,2161,2165,2170,2175,2180,2185,2188,2191,2194,2199,2204],[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/image83.webp",[14,22,23],{},[17,24],{"alt":19,"src":25},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image84.webp",[14,27,28],{},[17,29],{"alt":19,"src":30},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image85.webp",[14,32,33],{},[17,34],{"alt":19,"src":35},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image86.webp",[14,37,38],{},[17,39],{"alt":19,"src":40},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image87.webp",[10,42,43],{"id":43},"终端环境搭建",[14,45,46],{},[17,47],{"alt":19,"src":48},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image88.webp",[14,50,51,52,56],{},"如果在上方安装ROS2的时候，已经将该语句添加到",[53,54,55],"code",{},"~/.bashrc","了，则不必再跟着这步操作了。",[14,58,59],{},[17,60],{"alt":19,"src":61},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image89.webp",[63,64,68],"pre",{"className":65,"code":66,"language":67,"meta":19,"style":19},"language-bash shiki shiki-themes github-light github-dark","source /opt/ros/humble/setup.bash  #将ROS2环境变量配置到当前位置\necho \" source /opt/ros/humble/setup.bash\" >> ~/.bashrc    #每次启动终端都会运行该句\n","bash",[53,69,70,87],{"__ignoreMap":19},[71,72,75,79,83],"span",{"class":73,"line":74},"line",1,[71,76,78],{"class":77},"sj4cs","source",[71,80,82],{"class":81},"sZZnC"," /opt/ros/humble/setup.bash",[71,84,86],{"class":85},"sJ8bj","  #将ROS2环境变量配置到当前位置\n",[71,88,90,93,96,100,103],{"class":73,"line":89},2,[71,91,92],{"class":77},"echo",[71,94,95],{"class":81}," \" source /opt/ros/humble/setup.bash\"",[71,97,99],{"class":98},"szBVR"," >>",[71,101,102],{"class":81}," ~/.bashrc",[71,104,105],{"class":85},"    #每次启动终端都会运行该句\n",[107,108],"hr",{},[14,110,111],{},[17,112],{"alt":19,"src":113},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image90.webp",[63,115,117],{"className":65,"code":116,"language":67,"meta":19,"style":19},"ros2 run demo_nodes_cpp talker\n",[53,118,119],{"__ignoreMap":19},[71,120,121,125,128,131],{"class":73,"line":74},[71,122,124],{"class":123},"sScJk","ros2",[71,126,127],{"class":81}," run",[71,129,130],{"class":81}," demo_nodes_cpp",[71,132,133],{"class":81}," talker\n",[14,135,136],{},[17,137],{"alt":19,"src":138},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image91.webp",[14,140,141],{},[17,142],{"alt":19,"src":143},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image92.webp",[14,145,146],{},"用ctrl+c来进行取消程序运行",[14,148,149],{},[17,150],{"alt":19,"src":151},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image93.webp",[63,153,155],{"className":65,"code":154,"language":67,"meta":19,"style":19},"ros2 run demo_nodes_py listener\n",[53,156,157],{"__ignoreMap":19},[71,158,159,161,163,166],{"class":73,"line":74},[71,160,124],{"class":123},[71,162,127],{"class":81},[71,164,165],{"class":81}," demo_nodes_py",[71,167,168],{"class":81}," listener\n",[14,170,171,174],{},[17,172],{"alt":19,"src":173},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image94.webp",[17,175],{"alt":19,"src":176},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image95.webp",[63,178,180],{"className":65,"code":179,"language":67,"meta":19,"style":19},"ros2 run turtlesim turtlesim_node\nros2 run turtlesim turtle_teleop_key\n",[53,181,182,194],{"__ignoreMap":19},[71,183,184,186,188,191],{"class":73,"line":74},[71,185,124],{"class":123},[71,187,127],{"class":81},[71,189,190],{"class":81}," turtlesim",[71,192,193],{"class":81}," turtlesim_node\n",[71,195,196,198,200,202],{"class":73,"line":89},[71,197,124],{"class":123},[71,199,127],{"class":81},[71,201,190],{"class":81},[71,203,204],{"class":81}," turtle_teleop_key\n",[14,206,207],{},[17,208],{"alt":19,"src":209},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image96.webp",[10,211,212],{"id":212},"命令行操作",[14,214,215],{},[17,216],{"alt":19,"src":217},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image97.webp",[14,219,220],{},"mkdir -p 新建文件夹",[14,222,223],{},"rm -R 递归删除（删掉文件夹及里面包含的文件夹及文件）",[14,225,226],{},"touch 新建文件",[14,228,229],{},"rm 删除文件",[14,231,232],{},"cd ..退回上级目录（cd 点点）",[107,234],{},[14,236,237],{},[17,238],{"alt":19,"src":239},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image98.webp",[14,241,242],{},[17,243],{"alt":19,"src":244},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image99.webp",[14,246,247],{},"会弹提示信息，告诉我们后面要跟的参数",[14,249,250],{},[17,251],{"alt":19,"src":252},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image100.webp",[14,254,255],{},[17,256],{"alt":19,"src":257},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image101.webp",[14,259,260],{},"ros2 node list会把当前ROS2正在运行的节点列出来",[14,262,263],{},[17,264],{"alt":19,"src":265},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image102.webp",[14,267,268],{},[17,269],{"alt":19,"src":270},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image103.webp",[14,272,273],{},"ros2 node info + /节点名 可以查看目标节点的详细情况",[14,275,276],{},[17,277],{"alt":19,"src":278},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image104.webp",[14,280,247],{},[14,282,283],{},[17,284],{"alt":19,"src":285},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image105.webp",[14,287,288],{},[17,289],{"alt":19,"src":290},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image106.webp",[14,292,293],{},[17,294],{"alt":19,"src":295},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image107.webp",[14,297,298],{},"可以通过话题来显示机器人运动的状态",[14,300,301],{},[17,302],{"alt":19,"src":303},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image108.webp",[63,305,307],{"className":65,"code":306,"language":67,"meta":19,"style":19},"ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist \"{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}\"\n",[53,308,309],{"__ignoreMap":19},[71,310,311,313,316,319,322,325,328,331],{"class":73,"line":74},[71,312,124],{"class":123},[71,314,315],{"class":81}," topic",[71,317,318],{"class":81}," pub",[71,320,321],{"class":77}," --rate",[71,323,324],{"class":77}," 1",[71,326,327],{"class":81}," /turtle1/cmd_vel",[71,329,330],{"class":81}," geometry_msgs/msg/Twist",[71,332,333],{"class":81}," \"{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}\"\n",[14,335,336],{},[17,337],{"alt":19,"src":338},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image109.webp",[14,340,341],{},[17,342],{"alt":19,"src":343},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image110.webp",[63,345,347],{"className":65,"code":346,"language":67,"meta":19,"style":19},"ros2 service call /spawn turtlesim/srv/Spawn \"{x: 2, y: 2, theta: 0.2, name: ''}\"\n",[53,348,349],{"__ignoreMap":19},[71,350,351,353,356,359,362,365],{"class":73,"line":74},[71,352,124],{"class":123},[71,354,355],{"class":81}," service",[71,357,358],{"class":81}," call",[71,360,361],{"class":81}," /spawn",[71,363,364],{"class":81}," turtlesim/srv/Spawn",[71,366,367],{"class":81}," \"{x: 2, y: 2, theta: 0.2, name: ''}\"\n",[14,369,370],{},[17,371],{"alt":19,"src":372},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image111.webp",[14,374,375],{},[17,376],{"alt":19,"src":377},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image112.webp",[14,379,380],{},[17,381],{"alt":19,"src":382},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image113.webp",[63,384,386],{"className":65,"code":385,"language":67,"meta":19,"style":19},"ros2 bag record /turtle1/cmd_vel\nros2 bag play rosbag2_2022_04_11-17_35_40/rosbag2_2022_04_11-17_35_40_0.db3\n",[53,387,388,401],{"__ignoreMap":19},[71,389,390,392,395,398],{"class":73,"line":74},[71,391,124],{"class":123},[71,393,394],{"class":81}," bag",[71,396,397],{"class":81}," record",[71,399,400],{"class":81}," /turtle1/cmd_vel\n",[71,402,403,405,407,410],{"class":73,"line":89},[71,404,124],{"class":123},[71,406,394],{"class":81},[71,408,409],{"class":81}," play",[71,411,412],{"class":81}," rosbag2_2022_04_11-17_35_40/rosbag2_2022_04_11-17_35_40_0.db3\n",[14,414,415],{},"ros2 bag record + 话题",[14,417,418],{},"按Ctrl+C结束，然后录制的数据在当前终端的目录下",[14,420,421],{},[17,422],{"alt":19,"src":423},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image114.webp",[14,425,426],{},"如何去复现呢？",[14,428,429],{},"ros2 bag play + 文件夹名称",[10,431,433],{"id":432},"ros2-helloworldc","ROS2 HelloWorld(C++)",[14,435,436],{},[17,437],{"alt":19,"src":438},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image115.webp",[14,440,441],{},[17,442],{"alt":19,"src":443},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image116.webp",[14,445,446],{},[17,447],{"alt":19,"src":448},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image117.webp",[14,450,451],{},"1.创建功能包",[14,453,454],{},[17,455],{"alt":19,"src":456},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image118.webp",[14,458,459],{},[17,460],{"alt":19,"src":461},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image119.webp",[14,463,464],{},"指令就是创建ros2的功能包",[14,466,467],{},"ros2 pkg create + 功能包名 + --build-type(构建类型) + ament_cmake / ament_python + --dependencies（依赖） + rclcpp(ROS2的CPP客户端) + --node-name（节点名） + 节点名",[63,469,471],{"className":65,"code":470,"language":67,"meta":19,"style":19},"ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld\n",[53,472,473],{"__ignoreMap":19},[71,474,475,477,480,483,486,489,492,495,498,501],{"class":73,"line":74},[71,476,124],{"class":123},[71,478,479],{"class":81}," pkg",[71,481,482],{"class":81}," create",[71,484,485],{"class":81}," pkg01_helloworld_cpp",[71,487,488],{"class":77}," --build-type",[71,490,491],{"class":81}," ament_cmake",[71,493,494],{"class":77}," --dependencies",[71,496,497],{"class":81}," rclcpp",[71,499,500],{"class":77}," --node-name",[71,502,503],{"class":81}," helloworld\n",[14,505,506],{},[17,507],{"alt":19,"src":508},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image120.webp",[14,510,511],{},[17,512],{"alt":19,"src":513},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image121.webp",[14,515,516],{},"源文件自动生成了，文件名和我们指定的node name是一致的。",[14,518,519],{},[17,520],{"alt":19,"src":521},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image122.webp",[14,523,524],{},"这是自动生成的内容，但是和ROS2没有任何关系。",[14,526,527],{},[17,528],{"alt":19,"src":529},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image123.webp",[14,531,532],{},[17,533],{"alt":19,"src":534},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image124.webp",[14,536,537],{},[17,538],{"alt":19,"src":539},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image125.webp",[14,541,542],{},"如果依赖的库不止这一个，则再回车，",[14,544,545],{},"xxx",[14,547,548],{},"再添加下一个",[14,550,551],{},[17,552],{"alt":19,"src":553},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image126.webp",[14,555,556],{},"10行是查找包",[14,558,559],{},"12行是添加可执行的",[14,561,562],{},"add_executable 的第一个参数是 可执行文件的名字（默认和节点名一致，默认和源文件名一致） 第二个参数是源文件的名字",[14,564,565],{},"17行是为我们的可执行程序添加依赖 我们的可执行程序依赖于RCLCPP这个库",[14,567,568],{},"22行是要为我们的可执行程序设立一个安装目录，创建在了当前功能包下的lib目录，也就是 工作空间名/install/功能包名/lib",[14,570,571],{},"编辑配置文件之后编译，用cd..返回ws目录",[14,573,574],{},[17,575],{"alt":19,"src":576},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image127.webp",[14,578,579],{},[17,580],{"alt":19,"src":581},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image128.webp",[14,583,584],{},"图标为绿色，是没有警告也没有错误",[14,586,587],{},"是黄色的则有警告",[14,589,590],{},"是红色的则有致命错误",[14,592,593],{},[17,594],{"alt":19,"src":595},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image129.webp",[14,597,598],{},"可执行二进制文件的路径",[14,600,601],{},[17,602],{"alt":19,"src":603},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image130.webp",[63,605,607],{"className":65,"code":606,"language":67,"meta":19,"style":19},"source install/setup.bash #刷新环境变量\n",[53,608,609],{"__ignoreMap":19},[71,610,611,613,616],{"class":73,"line":74},[71,612,78],{"class":77},[71,614,615],{"class":81}," install/setup.bash",[71,617,618],{"class":85}," #刷新环境变量\n",[14,620,621],{},[17,622],{"alt":19,"src":623},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image131.webp",[63,625,627],{"className":65,"code":626,"language":67,"meta":19,"style":19},"ros2 run pkg01_helloworld_cpp helloworld\n",[53,628,629],{"__ignoreMap":19},[71,630,631,633,635,637],{"class":73,"line":74},[71,632,124],{"class":123},[71,634,127],{"class":81},[71,636,485],{"class":81},[71,638,503],{"class":81},[14,640,641],{},"ros2 run 功能包名称 可执行文件名(默认和节点名一致)",[14,643,644],{},[17,645],{"alt":19,"src":646},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image132.webp",[14,648,649],{},"编辑ROS2 C++源文件：",[14,651,652],{},[17,653],{"alt":19,"src":654},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image133.webp",[63,656,661],{"className":657,"code":659,"language":660},[658],"language-text","#include \"rclcpp/rclcpp.hpp\"\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto node = rclcpp::Node::make_shared(\"helloworld_node\");\n\n  RCLCPP_INFO(node->get_logger(),\"hello world!\");\n\n  rclcpp::shutdown();\n\n  return 0;\n}\n","text",[53,662,659],{"__ignoreMap":19},[14,664,665],{},[17,666],{"alt":19,"src":667},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image134.webp",[14,669,670],{},[17,671],{"alt":19,"src":672},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image135.webp",[14,674,675],{},[17,676],{"alt":19,"src":677},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image136.webp",[14,679,680],{},[17,681],{"alt":19,"src":682},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image137.webp",[10,684,686],{"id":685},"ros2-helloworldpython","ROS2 HelloWorld(Python)",[14,688,689],{},[17,690],{"alt":19,"src":691},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image138.webp",[63,693,695],{"className":65,"code":694,"language":67,"meta":19,"style":19},"ros2 pkg create pkg02_helloworld_py --build-type ament_python --dependencies rclpy --node-name helloworld\n",[53,696,697],{"__ignoreMap":19},[71,698,699,701,703,705,708,710,713,715,718,720],{"class":73,"line":74},[71,700,124],{"class":123},[71,702,479],{"class":81},[71,704,482],{"class":81},[71,706,707],{"class":81}," pkg02_helloworld_py",[71,709,488],{"class":77},[71,711,712],{"class":81}," ament_python",[71,714,494],{"class":77},[71,716,717],{"class":81}," rclpy",[71,719,500],{"class":77},[71,721,503],{"class":81},[14,723,724],{},"ros2 pkg create + 功能包名 + --build-type(构建类型) + ament_cmake / ament_python + --dependencies（依赖） + rclpy(ROS2的Python客户端) + --node-name（节点名） + 节点名",[14,726,727],{},[17,728],{"alt":19,"src":729},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image139.webp",[14,731,732],{},[17,733],{"alt":19,"src":734},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image140.webp",[14,736,737],{},[17,738],{"alt":19,"src":739},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image141.webp",[14,741,742],{},"与node name和可执行二进制文件同名",[14,744,745],{},[17,746],{"alt":19,"src":747},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image142.webp",[14,749,750],{},"默认这里面已经有代码，但是和ROS2无关，这是标准的python代码",[14,752,753],{},[17,754],{"alt":19,"src":755},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image143.webp",[14,757,758],{},[17,759],{"alt":19,"src":760},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image144.webp",[14,762,763],{},[17,764],{"alt":19,"src":765},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image145.webp",[14,767,768],{},"二进制可执行文件 映射到 源文件的main函数",[14,770,771],{},"如何编译呢？",[14,773,774],{},[17,775],{"alt":19,"src":776},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image146.webp",[14,778,779],{},"先返回上一级，来到ws目录",[14,781,782],{},[17,783],{"alt":19,"src":784},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image147.webp",[14,786,787],{},[17,788],{"alt":19,"src":789},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image148.webp",[14,791,792],{},"有个黄色警告，但是不影响我们使用。",[14,794,795],{},[17,796],{"alt":19,"src":797},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image149.webp",[63,799,801],{"className":65,"code":800,"language":67,"meta":19,"style":19},"source ./install/setup.bash\n",[53,802,803],{"__ignoreMap":19},[71,804,805,807],{"class":73,"line":74},[71,806,78],{"class":77},[71,808,809],{"class":81}," ./install/setup.bash\n",[14,811,812],{},"刷新环境变量",[63,814,816],{"className":65,"code":815,"language":67,"meta":19,"style":19},"ros2 run pkg02_helloworld_py helloworld\n",[53,817,818],{"__ignoreMap":19},[71,819,820,822,824,826],{"class":73,"line":74},[71,821,124],{"class":123},[71,823,127],{"class":81},[71,825,707],{"class":81},[71,827,503],{"class":81},[14,829,830],{},[17,831],{"alt":19,"src":832},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image150.webp",[107,834],{},[14,836,837],{},[17,838],{"alt":19,"src":839},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image151.webp",[63,841,845],{"className":842,"code":843,"language":844,"meta":19,"style":19},"language-python shiki shiki-themes github-light github-dark","import rclpy\n\ndef main():\n    rclpy.init()\n    node = rclpy.create_node(\"helloworld_py_node\")\n    node.get_logger().info(\"hello world by python!\")\n    rclpy.shutdown()\n\nif name == '__main__':\n    main()\n","python",[53,846,847,856,862,874,880,898,909,915,920,938],{"__ignoreMap":19},[71,848,849,852],{"class":73,"line":74},[71,850,851],{"class":98},"import",[71,853,855],{"class":854},"sVt8B"," rclpy\n",[71,857,858],{"class":73,"line":89},[71,859,861],{"emptyLinePlaceholder":860},true,"\n",[71,863,865,868,871],{"class":73,"line":864},3,[71,866,867],{"class":98},"def",[71,869,870],{"class":123}," main",[71,872,873],{"class":854},"():\n",[71,875,877],{"class":73,"line":876},4,[71,878,879],{"class":854},"    rclpy.init()\n",[71,881,883,886,889,892,895],{"class":73,"line":882},5,[71,884,885],{"class":854},"    node ",[71,887,888],{"class":98},"=",[71,890,891],{"class":854}," rclpy.create_node(",[71,893,894],{"class":81},"\"helloworld_py_node\"",[71,896,897],{"class":854},")\n",[71,899,901,904,907],{"class":73,"line":900},6,[71,902,903],{"class":854},"    node.get_logger().info(",[71,905,906],{"class":81},"\"hello world by python!\"",[71,908,897],{"class":854},[71,910,912],{"class":73,"line":911},7,[71,913,914],{"class":854},"    rclpy.shutdown()\n",[71,916,918],{"class":73,"line":917},8,[71,919,861],{"emptyLinePlaceholder":860},[71,921,923,926,929,932,935],{"class":73,"line":922},9,[71,924,925],{"class":98},"if",[71,927,928],{"class":854}," name ",[71,930,931],{"class":98},"==",[71,933,934],{"class":81}," '__main__'",[71,936,937],{"class":854},":\n",[71,939,941],{"class":73,"line":940},10,[71,942,943],{"class":854},"    main()\n",[14,945,946],{},[17,947],{"alt":19,"src":948},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image152.webp",[14,950,951],{},[17,952],{"alt":19,"src":953},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image153.webp",[14,955,956],{},[17,957],{"alt":19,"src":958},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image154.webp",[10,960,962],{"id":961},"运行优化bash终端环境","运行优化(bash终端环境)",[14,964,965],{},[17,966],{"alt":19,"src":967},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image155.webp",[14,969,970],{},[17,971],{"alt":19,"src":972},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image156.webp",[14,974,975],{},"要使用绝对路径",[14,977,978],{},[17,979],{"alt":19,"src":980},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image157.webp",[14,982,983],{},[17,984],{"alt":19,"src":985},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image158.webp",[14,987,988],{},"尽量不要这么干，ROS2有一个bug，就是不同工作空间的功能包可能会调用混乱，所以先不要搞全局的运行优化。",[10,990,992],{"id":991},"vscode环境搭建","VScode环境搭建",[14,994,995],{},[17,996],{"alt":19,"src":997},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image159.webp",[14,999,1000,1003],{},[17,1001],{"alt":19,"src":1002},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image160.webp",[17,1004],{"alt":19,"src":1005},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image161.webp",[14,1007,1008,1011],{},[17,1009],{"alt":19,"src":1010},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image162.webp",[17,1012],{"alt":19,"src":1013},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image163.webp",[14,1015,1016,1019],{},[17,1017],{"alt":19,"src":1018},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image164.webp",[17,1020],{"alt":19,"src":1021},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image165.webp",[14,1023,1024],{},"看C/C++，Python，CMake，XML,YAML文件就可以代码高亮显示",[14,1026,1027],{},"在写一些ROS2消息的代码可以提供代码补齐等操作",[14,1029,1030],{},[17,1031],{"alt":19,"src":1032},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image166.webp",[14,1034,1035],{},"编写机器人模型所要用的插件，也可以进行代码补齐",[14,1037,1038],{},[17,1039],{"alt":19,"src":1040},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image167.webp",[14,1042,1043],{},"ROS2经常生成PDF文件，可以通过这个插件来查看",[14,1045,1046,1049],{},[17,1047],{"alt":19,"src":1048},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image168.webp",[17,1050],{"alt":19,"src":1051},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image169.webp",[14,1053,1054],{},"ROS2插件建议等成熟之后再进行安装",[14,1056,1057],{},[17,1058],{"alt":19,"src":1059},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image170.webp",[14,1061,1062],{},"这个官方插件可以尝试安装",[14,1064,1065],{},[17,1066],{"alt":19,"src":1067},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image171.webp",[14,1069,1070],{},"人工智能代码补全",[14,1072,1073],{},[17,1074],{"alt":19,"src":1075},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image172.webp",[14,1077,1078],{},"MarkDown高亮",[107,1080],{},[14,1082,1083],{},[17,1084],{"alt":19,"src":1085},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image173.webp",[14,1087,1088],{},[17,1089],{"alt":19,"src":1090},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image174.webp",[14,1092,1093],{},[17,1094],{"alt":19,"src":1095},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image175.webp",[14,1097,1098],{},"虽然报错，但是程序是可以正常运行的。（主要是vscode找不到头文件）",[14,1100,1101],{},[17,1102],{"alt":19,"src":1103},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image176.webp",[14,1105,1106],{},[17,1107],{"alt":19,"src":1108},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image177.webp",[14,1110,1111],{},[17,1112],{"alt":19,"src":1113},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image178.webp",[14,1115,1116],{},[17,1117],{"alt":19,"src":1118},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image179.webp",[14,1120,1121],{},[17,1122],{"alt":19,"src":1123},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image180.webp",[63,1125,1129],{"className":1126,"code":1127,"language":1128,"meta":19,"style":19},"language-JSON shiki shiki-themes github-light github-dark","            \"includePath\": [\n                \"${default}\",\n                \"${workspaceFolder}/**\",\n                \"/opt/ros/humble/include/**\"\n            ],\n","JSON",[53,1130,1131,1136,1141,1146,1151],{"__ignoreMap":19},[71,1132,1133],{"class":73,"line":74},[71,1134,1135],{},"            \"includePath\": [\n",[71,1137,1138],{"class":73,"line":89},[71,1139,1140],{},"                \"${default}\",\n",[71,1142,1143],{"class":73,"line":864},[71,1144,1145],{},"                \"${workspaceFolder}/**\",\n",[71,1147,1148],{"class":73,"line":876},[71,1149,1150],{},"                \"/opt/ros/humble/include/**\"\n",[71,1152,1153],{"class":73,"line":882},[71,1154,1155],{},"            ],\n",[14,1157,1158],{},[17,1159],{"alt":19,"src":1160},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image181.webp",[14,1162,1163],{},"/**代表要包含该文件夹下的所有的子集",[14,1165,1166],{},[17,1167],{"alt":19,"src":1168},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image182.webp",[14,1170,1171],{},[17,1172],{"alt":19,"src":1173},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image183.webp",[107,1175],{},[14,1177,1178],{},"按Ctrl + `（ESC底下的按键）把VSCODE终端打开",[14,1180,1181],{},[17,1182],{"alt":19,"src":1183},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image184.webp",[14,1185,1186],{},[17,1187],{"alt":19,"src":1188},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image185.webp",[14,1190,1191],{},"--node-name也是可选参数，如果不配置，则不会有源文件，也不会有可执行文件到源文件的映射",[14,1193,1194],{},[17,1195],{"alt":19,"src":1196},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image186.webp",[14,1198,1199],{},[17,1200],{"alt":19,"src":1201},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image187.webp",[14,1203,1204],{},[17,1205],{"alt":19,"src":1206},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image188.webp",[14,1208,1209],{},"不需要修改，已经默认生成好了",[14,1211,1212],{},[17,1213],{"alt":19,"src":1214},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image189.webp",[14,1216,1217],{},"再返回WS目录进行编译（但是此时编译是编译整个WS目录下的所有功能包）",[14,1219,1220],{},[17,1221],{"alt":19,"src":1222},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image190.webp",[14,1224,1225],{},"刷新环境变量并运行",[14,1227,1228],{},[17,1229],{"alt":19,"src":1230},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image191.webp",[107,1232],{},[14,1234,1235],{},[17,1236],{"alt":19,"src":1237},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image192.webp",[14,1239,1240],{},[17,1241],{"alt":19,"src":1242},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image193.webp",[14,1244,1245],{},[17,1246],{"alt":19,"src":1247},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image194.webp",[14,1249,1250],{},[17,1251],{"alt":19,"src":1252},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image195.webp",[107,1254],{},[14,1256,1257],{},"如何在一个功能包里添加多个源文件呢？",[14,1259,1260],{},[17,1261],{"alt":19,"src":1262},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image196.webp",[14,1264,1265],{},"新建一个新文件，比如hellovscode2.cpp",[14,1267,1268],{},"但是此时该文件是一个孤零零的文件，他没有做任何的配置，对应的，编译完之后也不会被执行。",[14,1270,1271],{},"我们想编译执行该文件，必须配置相关的配置文件。",[14,1273,1274],{},[17,1275],{"alt":19,"src":1276},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image197.webp",[14,1278,1279],{},[17,1280],{"alt":19,"src":1281},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image198.webp",[14,1283,1284],{},"选中的这些用不着，可以删掉",[14,1286,1287],{},[17,1288],{"alt":19,"src":1289},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image199.webp",[14,1291,1292],{},[17,1293],{"alt":19,"src":1294},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image200.webp",[14,1296,1297],{},[17,1298],{"alt":19,"src":1299},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image201.webp",[14,1301,1302],{},[17,1303],{"alt":19,"src":1304},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image202.webp",[10,1306,1308],{"id":1307},"运行优化colcon-build","运行优化(colcon build)",[14,1310,1311],{},[17,1312],{"alt":19,"src":1313},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image203.webp",[14,1315,1316],{},"平常会全编译WS目录下的文件",[14,1318,1319],{},[17,1320],{"alt":19,"src":1321},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image204.webp",[63,1323,1325],{"className":65,"code":1324,"language":67,"meta":19,"style":19},"colcon build --packages-select xxx xxx xxx #可以指向多个包\n",[53,1326,1327],{"__ignoreMap":19},[71,1328,1329,1332,1335,1338,1341,1343,1345],{"class":73,"line":74},[71,1330,1331],{"class":123},"colcon",[71,1333,1334],{"class":81}," build",[71,1336,1337],{"class":77}," --packages-select",[71,1339,1340],{"class":81}," xxx",[71,1342,1340],{"class":81},[71,1344,1340],{"class":81},[71,1346,1347],{"class":85}," #可以指向多个包\n",[14,1349,1350],{},[17,1351],{"alt":19,"src":1352},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image205.webp",[10,1354,1356],{"id":1355},"vscode环境进阶","VScode环境进阶",[1358,1359,1361],"h4",{"id":1360},"clangd插件代码提示可选但是建议","clangd插件代码提示(可选,但是建议)",[14,1363,1364],{},[1365,1366,1367],"a",{"href":1367,"rel":1368},"https://colcon.readthedocs.io/en/released/index.html",[1369],"nofollow",[14,1371,1372],{},"由于C/C++插件在大项目里的表现简直拉胯的一批，所以我们选择使用llvm里的clangd插件来进行代码提示。",[14,1374,1375],{},"但clangd依赖于cmake生成一个编译信息文件，我们需要一些步骤来生成该文件。",[14,1377,1378],{},"由于ROS2没有像ROS1那样的一个总的规范的CMakeLists，所以配置起来没有ROS1那么方便。",[1380,1381,1382],"ol",{},[1383,1384,1385,1386,1396,1413,1416,1417,1438],"li",{},"配置colcon build参数",[1380,1387,1388],{},[1383,1389,1390,1391,1395],{},"方法一：（不建议） ",[1392,1393,1394],"strong",{},"每次"," 编译要用该命令：",[63,1397,1399],{"className":65,"code":1398,"language":67,"meta":19,"style":19},"colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[53,1400,1401],{"__ignoreMap":19},[71,1402,1403,1405,1407,1410],{"class":73,"line":74},[71,1404,1331],{"class":123},[71,1406,1334],{"class":81},[71,1408,1409],{"class":77}," --cmake-args",[71,1411,1412],{"class":77}," -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[1414,1415],"br",{},"  等同于在cmake文件里写上（一般不建议改cmakelists）",[63,1418,1420],{"className":65,"code":1419,"language":67,"meta":19,"style":19},"set(CMAKE_EXPORT_COMPILE_COMMANDS ON)\n",[53,1421,1422],{"__ignoreMap":19},[71,1423,1424,1427,1430,1433,1436],{"class":73,"line":74},[71,1425,1426],{"class":77},"set",[71,1428,1429],{"class":854},"(",[71,1431,1432],{"class":81},"CMAKE_EXPORT_COMPILE_COMMANDS",[71,1434,1435],{"class":81}," ON",[71,1437,897],{"class":854},[1380,1439,1440],{"start":882},[1383,1441,1442],{},"方法二：全局参数(更加推荐)",[63,1444,1446],{"className":65,"code":1445,"language":67,"meta":19,"style":19},"mkdir ~/.colcon\n\nvim ~/.colcon/defaults.yaml\n",[53,1447,1448,1456,1460],{"__ignoreMap":19},[71,1449,1450,1453],{"class":73,"line":74},[71,1451,1452],{"class":123},"mkdir",[71,1454,1455],{"class":81}," ~/.colcon\n",[71,1457,1458],{"class":73,"line":89},[71,1459,861],{"emptyLinePlaceholder":860},[71,1461,1462,1465],{"class":73,"line":864},[71,1463,1464],{"class":123},"vim",[71,1466,1467],{"class":81}," ~/.colcon/defaults.yaml\n",[14,1469,1470,1471,1474],{},"按下",[53,1472,1473],{},"insert（插入）","按键",[14,1476,1477],{},[17,1478],{"alt":19,"src":1479},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image206.webp",[14,1481,1482],{},"输入下方内容",[63,1484,1486],{"className":65,"code":1485,"language":67,"meta":19,"style":19},"build:\n  cmake-args:\n    - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[53,1487,1488,1493,1498],{"__ignoreMap":19},[71,1489,1490],{"class":73,"line":74},[71,1491,1492],{"class":123},"build:\n",[71,1494,1495],{"class":73,"line":89},[71,1496,1497],{"class":123},"  cmake-args:\n",[71,1499,1500,1503],{"class":73,"line":864},[71,1501,1502],{"class":123},"    -",[71,1504,1412],{"class":77},[14,1506,1470,1507,1510,1511,1514,1515,1518],{},[53,1508,1509],{},"ESC","，并按下",[53,1512,1513],{},":wq",",然后按下",[53,1516,1517],{},"Enter(回车)","即可成功保存。",[14,1520,1521,1522,1525],{},"在编译的时候正常用",[53,1523,1524],{},"colcon build","就可以自动启用CMAKE_EXPORT_COMPILE_COMMANDS=ON参数了。",[1380,1527,1528],{"start":89},[1383,1529,1530,1531,1544,1546,1547,1549,1550,1552,1555],{},"然后再来配置clangd插件",[1380,1532,1533,1541],{},[1383,1534,1535,1536,1538],{},"先下载clangd插件",[1414,1537],{},[17,1539],{"alt":19,"src":1540},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image207.webp",[1383,1542,1543],{},"下载clangd文件",[1414,1545],{},"  按住Ctrl shift P打开搜索框",[1414,1548],{},"  输入clangd 找到下载语言服务器这一项目，点击安装clangd（请保持良好的网络状况）",[1414,1551],{},[17,1553],{"alt":19,"src":1554},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image208.webp",[1380,1556,1557],{"start":900},[1383,1558,1559],{},"接着配置clangd：",[14,1561,1562],{},"禁用C/C++的代码提示功能",[14,1564,1565],{},[17,1566],{"alt":19,"src":1567},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image209.webp",[14,1569,1570],{},"如果没有上图的弹窗，可以进行手动关闭，依然是ctrl shift P,输入settings然后找到如下图的选项",[14,1572,1573],{},[17,1574],{"alt":19,"src":1575},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image210.webp",[14,1577,1578],{},"找到下图这个选项，改成disabled即可。",[14,1580,1581],{},[53,1582,1583],{},"\"C_Cpp.intelliSenseEngine\": \"disabled\"",[14,1585,1586],{},[17,1587],{"alt":19,"src":1588},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image211.webp",[1380,1590,1591],{"start":876},[1383,1592,1593],{},"重启clangd",[14,1595,1596],{},"然后ctrl shift P搜索clangd找到如下图的选项（重启clangd语言服务器前，要先colcon build）",[14,1598,1599],{},[17,1600],{"alt":19,"src":1601},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image212.webp",[14,1603,1604],{},"代码提示就正常啦",[14,1606,1607],{},[17,1608],{"alt":19,"src":1609},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image213.webp",[10,1611,1612],{"id":1612},"安装其他工具",[14,1614,1615],{},"安装terminator(建议装，选装,因人而异)",[63,1617,1619],{"className":65,"code":1618,"language":67,"meta":19,"style":19},"sudo apt install terminator\n",[53,1620,1621],{"__ignoreMap":19},[71,1622,1623,1626,1629,1632],{"class":73,"line":74},[71,1624,1625],{"class":123},"sudo",[71,1627,1628],{"class":81}," apt",[71,1630,1631],{"class":81}," install",[71,1633,1634],{"class":81}," terminator\n",[14,1636,1637],{},[17,1638],{"alt":19,"src":1639},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image214.webp",[1641,1642,1643,1659],"table",{},[1644,1645,1646],"thead",{},[1647,1648,1649,1653,1656],"tr",{},[1650,1651,1652],"th",{},"快捷键",[1650,1654,1655],{},"功能",[1650,1657,1658],{},"记忆方法",[1660,1661,1662,1679,1695,1711,1727,1740,1756,1772],"tbody",{},[1647,1663,1664,1670,1673],{},[1665,1666,1667],"td",{},[53,1668,1669],{},"Ctrl + Shift + E",[1665,1671,1672],{},"垂直分屏，左右分",[1665,1674,1675,1678],{},[1392,1676,1677],{},"E = East","，往东边开一个窗口，也就是左右分",[1647,1680,1681,1686,1689],{},[1665,1682,1683],{},[53,1684,1685],{},"Ctrl + Shift + O",[1665,1687,1688],{},"水平分屏，上下分",[1665,1690,1691,1694],{},[1392,1692,1693],{},"O = Over / Under","，上下叠放",[1647,1696,1697,1702,1705],{},[1665,1698,1699],{},[53,1700,1701],{},"Ctrl + Shift + S",[1665,1703,1704],{},"隐藏/显示滚动条",[1665,1706,1707,1710],{},[1392,1708,1709],{},"S = Scrollbar","，滚动条",[1647,1712,1713,1718,1721],{},[1665,1714,1715],{},[53,1716,1717],{},"F11",[1665,1719,1720],{},"全屏/退出全屏",[1665,1722,1723,1726],{},[1392,1724,1725],{},"F = Fullscreen","，F11 本来就是很多软件的全屏键",[1647,1728,1729,1734,1737],{},[1665,1730,1731],{},[53,1732,1733],{},"Ctrl + Tab",[1665,1735,1736],{},"在不同 pane 之间切换",[1665,1738,1739],{},"跟浏览器切 Tab 类似，循环切换",[1647,1741,1742,1747,1750],{},[1665,1743,1744],{},[53,1745,1746],{},"Ctrl + L",[1665,1748,1749],{},"清屏",[1665,1751,1752,1755],{},[1392,1753,1754],{},"L = clear 里的 L","，也可以理解成“拉到新页面”",[1647,1757,1758,1763,1766],{},[1665,1759,1760],{},[53,1761,1762],{},"Ctrl + Shift + W",[1665,1764,1765],{},"关闭当前 pane",[1665,1767,1768,1771],{},[1392,1769,1770],{},"W = Window","，关当前小窗口",[1647,1773,1774,1779,1782],{},[1665,1775,1776],{},[53,1777,1778],{},"Ctrl + Shift + Q",[1665,1780,1781],{},"退出整个 Terminator",[1665,1783,1784,1787],{},[1392,1785,1786],{},"Q = Quit","，退出程序",[14,1789,1790],{},"因为他本身的字体非常暗,所以要设置一下.",[63,1792,1794],{"className":65,"code":1793,"language":67,"meta":19,"style":19},"cp ~/.config/terminator/config ~/.config/terminator/config.bak\nvim ~/.config/terminator/config\n",[53,1795,1796,1807],{"__ignoreMap":19},[71,1797,1798,1801,1804],{"class":73,"line":74},[71,1799,1800],{"class":123},"cp",[71,1802,1803],{"class":81}," ~/.config/terminator/config",[71,1805,1806],{"class":81}," ~/.config/terminator/config.bak\n",[71,1808,1809,1811],{"class":73,"line":89},[71,1810,1464],{"class":123},[71,1812,1813],{"class":81}," ~/.config/terminator/config\n",[14,1815,1816,1817,1820,1821,1824],{},"按一下",[53,1818,1819],{},"ggdG",",注意大小写.\n然后按下",[53,1822,1823],{},"insert","按键,\n然后让文件内容为:",[63,1826,1828],{"className":65,"code":1827,"language":67,"meta":19,"style":19},"[global_config]\n  title_transmit_bg_color = \"#31363b\"\n  title_transmit_fg_color = \"#fcfcfc\"\n  title_receive_bg_color = \"#232629\"\n  title_receive_fg_color = \"#fcfcfc\"\n  title_inactive_bg_color = \"#232629\"\n  title_inactive_fg_color = \"#bdc3c7\"\n\n[keybindings]\n\n[profiles]\n  [[default]]\n    use_theme_colors = False\n    use_system_font = False\n    font = Noto Sans Mono 11\n\n    background_type = solid\n    background_color = \"#232629\"\n    foreground_color = \"#fcfcfc\"\n    cursor_color = \"#fcfcfc\"\n\n    palette = \"#232629:#ed1515:#11d116:#f67400:#1d99f3:#9b59b6:#1abc9c:#fcfcfc:#7f8c8d:#ff5555:#50fa7b:#fdbc4b:#3daee9:#ff79c6:#8be9fd:#ffffff\"\n\n    scrollback_infinite = True\n\n[layouts]\n  [[default]]\n    [[[window0]]]\n      type = Window\n      parent = \"\"\n    [[[child1]]]\n      type = Terminal\n      parent = window0\n\n[plugins]\n",[53,1829,1830,1835,1846,1856,1866,1875,1884,1894,1898,1903,1907,1913,1919,1930,1940,1960,1965,1976,1986,1996,2006,2011,2022,2027,2038,2043,2049,2054,2060,2071,2082,2088,2098,2108,2113],{"__ignoreMap":19},[71,1831,1832],{"class":73,"line":74},[71,1833,1834],{"class":854},"[global_config]\n",[71,1836,1837,1840,1843],{"class":73,"line":89},[71,1838,1839],{"class":123},"  title_transmit_bg_color",[71,1841,1842],{"class":81}," =",[71,1844,1845],{"class":81}," \"#31363b\"\n",[71,1847,1848,1851,1853],{"class":73,"line":864},[71,1849,1850],{"class":123},"  title_transmit_fg_color",[71,1852,1842],{"class":81},[71,1854,1855],{"class":81}," \"#fcfcfc\"\n",[71,1857,1858,1861,1863],{"class":73,"line":876},[71,1859,1860],{"class":123},"  title_receive_bg_color",[71,1862,1842],{"class":81},[71,1864,1865],{"class":81}," \"#232629\"\n",[71,1867,1868,1871,1873],{"class":73,"line":882},[71,1869,1870],{"class":123},"  title_receive_fg_color",[71,1872,1842],{"class":81},[71,1874,1855],{"class":81},[71,1876,1877,1880,1882],{"class":73,"line":900},[71,1878,1879],{"class":123},"  title_inactive_bg_color",[71,1881,1842],{"class":81},[71,1883,1865],{"class":81},[71,1885,1886,1889,1891],{"class":73,"line":911},[71,1887,1888],{"class":123},"  title_inactive_fg_color",[71,1890,1842],{"class":81},[71,1892,1893],{"class":81}," \"#bdc3c7\"\n",[71,1895,1896],{"class":73,"line":917},[71,1897,861],{"emptyLinePlaceholder":860},[71,1899,1900],{"class":73,"line":922},[71,1901,1902],{"class":854},"[keybindings]\n",[71,1904,1905],{"class":73,"line":940},[71,1906,861],{"emptyLinePlaceholder":860},[71,1908,1910],{"class":73,"line":1909},11,[71,1911,1912],{"class":854},"[profiles]\n",[71,1914,1916],{"class":73,"line":1915},12,[71,1917,1918],{"class":854},"  [[default]]\n",[71,1920,1922,1925,1927],{"class":73,"line":1921},13,[71,1923,1924],{"class":123},"    use_theme_colors",[71,1926,1842],{"class":81},[71,1928,1929],{"class":81}," False\n",[71,1931,1933,1936,1938],{"class":73,"line":1932},14,[71,1934,1935],{"class":123},"    use_system_font",[71,1937,1842],{"class":81},[71,1939,1929],{"class":81},[71,1941,1943,1946,1948,1951,1954,1957],{"class":73,"line":1942},15,[71,1944,1945],{"class":123},"    font",[71,1947,1842],{"class":81},[71,1949,1950],{"class":81}," Noto",[71,1952,1953],{"class":81}," Sans",[71,1955,1956],{"class":81}," Mono",[71,1958,1959],{"class":77}," 11\n",[71,1961,1963],{"class":73,"line":1962},16,[71,1964,861],{"emptyLinePlaceholder":860},[71,1966,1968,1971,1973],{"class":73,"line":1967},17,[71,1969,1970],{"class":123},"    background_type",[71,1972,1842],{"class":81},[71,1974,1975],{"class":81}," solid\n",[71,1977,1979,1982,1984],{"class":73,"line":1978},18,[71,1980,1981],{"class":123},"    background_color",[71,1983,1842],{"class":81},[71,1985,1865],{"class":81},[71,1987,1989,1992,1994],{"class":73,"line":1988},19,[71,1990,1991],{"class":123},"    foreground_color",[71,1993,1842],{"class":81},[71,1995,1855],{"class":81},[71,1997,1999,2002,2004],{"class":73,"line":1998},20,[71,2000,2001],{"class":123},"    cursor_color",[71,2003,1842],{"class":81},[71,2005,1855],{"class":81},[71,2007,2009],{"class":73,"line":2008},21,[71,2010,861],{"emptyLinePlaceholder":860},[71,2012,2014,2017,2019],{"class":73,"line":2013},22,[71,2015,2016],{"class":123},"    palette",[71,2018,1842],{"class":81},[71,2020,2021],{"class":81}," \"#232629:#ed1515:#11d116:#f67400:#1d99f3:#9b59b6:#1abc9c:#fcfcfc:#7f8c8d:#ff5555:#50fa7b:#fdbc4b:#3daee9:#ff79c6:#8be9fd:#ffffff\"\n",[71,2023,2025],{"class":73,"line":2024},23,[71,2026,861],{"emptyLinePlaceholder":860},[71,2028,2030,2033,2035],{"class":73,"line":2029},24,[71,2031,2032],{"class":123},"    scrollback_infinite",[71,2034,1842],{"class":81},[71,2036,2037],{"class":81}," True\n",[71,2039,2041],{"class":73,"line":2040},25,[71,2042,861],{"emptyLinePlaceholder":860},[71,2044,2046],{"class":73,"line":2045},26,[71,2047,2048],{"class":854},"[layouts]\n",[71,2050,2052],{"class":73,"line":2051},27,[71,2053,1918],{"class":854},[71,2055,2057],{"class":73,"line":2056},28,[71,2058,2059],{"class":854},"    [[[window0]]]\n",[71,2061,2063,2066,2068],{"class":73,"line":2062},29,[71,2064,2065],{"class":77},"      type",[71,2067,1842],{"class":81},[71,2069,2070],{"class":81}," Window\n",[71,2072,2074,2077,2079],{"class":73,"line":2073},30,[71,2075,2076],{"class":123},"      parent",[71,2078,1842],{"class":81},[71,2080,2081],{"class":81}," \"\"\n",[71,2083,2085],{"class":73,"line":2084},31,[71,2086,2087],{"class":854},"    [[[child1]]]\n",[71,2089,2091,2093,2095],{"class":73,"line":2090},32,[71,2092,2065],{"class":77},[71,2094,1842],{"class":81},[71,2096,2097],{"class":81}," Terminal\n",[71,2099,2101,2103,2105],{"class":73,"line":2100},33,[71,2102,2076],{"class":123},[71,2104,1842],{"class":81},[71,2106,2107],{"class":81}," window0\n",[71,2109,2111],{"class":73,"line":2110},34,[71,2112,861],{"emptyLinePlaceholder":860},[71,2114,2116],{"class":73,"line":2115},35,[71,2117,2118],{"class":854},"[plugins]\n",[14,2120,2121,2122,2124,2125,2127],{},"最后,按下",[53,2123,1509],{},",输入",[53,2126,1513],{},"保存并退出.",[14,2129,2130],{},"然后完全关闭 Terminator，再重新打开。\n这个配置会做几件事：",[1380,2132,2133,2136,2139,2142,2145],{},[1383,2134,2135],{},"背景：接近 Konsole Breeze 的深灰，不是死黑",[1383,2137,2138],{},"字体：接近纯白，比以前亮很多",[1383,2140,2141],{},"蓝色：换成更亮的 KDE 蓝",[1383,2143,2144],{},"绿色/黄色/青色：也整体提亮",[1383,2146,2147],{},"顶部红色标题条：改成灰色，不再那么刺眼",[14,2149,2150],{},[17,2151],{"alt":19,"src":2152},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image215.webp",[14,2154,2155,2156],{},"咱们的Git入门教程：",[1365,2157,2160],{"href":2158,"rel":2159},"https://sdutvincirobot.feishu.cn/docx/B7arde6u0ob5tsxk5QOcFLG7nYd",[1369],"Vinci机器人队Git入门教程",[10,2162,2164],{"id":2163},"ros2体系框架","ROS2体系框架",[14,2166,2167],{},[17,2168],{"alt":19,"src":2169},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image216.webp",[14,2171,2172],{},[17,2173],{"alt":19,"src":2174},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image217.webp",[14,2176,2177],{},[17,2178],{"alt":19,"src":2179},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image218.webp",[14,2181,2182],{},[17,2183],{"alt":19,"src":2184},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image219.webp",[14,2186,2187],{},"Client Library就是ROS2的客户端，比如rclcpp，rclpy。",[14,2189,2190],{},"Abstract DDS Layer是DDS抽象层，这样DDS可以实现可插拔，可以随便替换DDS模块。",[14,2192,2193],{},"Intra-process API是进程内通讯API，可以提高通信效率的一类API。",[14,2195,2196],{},[17,2197],{"alt":19,"src":2198},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image220.webp",[14,2200,2201],{},[17,2202],{"alt":19,"src":2203},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image221.webp",[2205,2206,2207],"style",{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}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 .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":19,"searchDepth":89,"depth":89,"links":2209},[2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220],{"id":12,"depth":864,"text":12},{"id":43,"depth":864,"text":43},{"id":212,"depth":864,"text":212},{"id":432,"depth":864,"text":433},{"id":685,"depth":864,"text":686},{"id":961,"depth":864,"text":962},{"id":991,"depth":864,"text":992},{"id":1307,"depth":864,"text":1308},{"id":1355,"depth":864,"text":1356},{"id":1612,"depth":864,"text":1612},{"id":2163,"depth":864,"text":2164},"2",2000000,"2023-12-30","2023-12-30-ros2-tutorial","/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,null,{},"/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo",{"title":5,"description":19},"wiki/2023-12-30-ros2-tutorial/ch2-入门操作","rNW3zKtutN64tg6tlECKzAU8lnK5xnIREh6g9EcEz4Y",[2236,2242,2248,2254,2260,2266,2272,2278,2284,2290,2296,2302,2308,2314,2320,2326,2327,2333,2339,2345,2351,2357,2363,2369,2375],{"path":2237,"stem":2238,"title":2239,"date":2223,"chapter":2240,"chapterSort":2241,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","ROS2介绍","1",1000000,{"path":2243,"stem":2244,"title":2245,"date":2223,"chapter":2246,"chapterSort":2247,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2仿真平台","10",10000000,{"path":2249,"stem":2250,"title":2251,"date":2223,"chapter":2252,"chapterSort":2253,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":2255,"stem":2256,"title":2257,"date":2223,"chapter":2258,"chapterSort":2259,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":2261,"stem":2262,"title":2263,"date":2223,"chapter":2264,"chapterSort":2265,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":2267,"stem":2268,"title":2269,"date":2223,"chapter":2270,"chapterSort":2271,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim","11.4",11040000,{"path":2273,"stem":2274,"title":2275,"date":2223,"chapter":2276,"chapterSort":2277,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gezebo仿真平台","11",11000000,{"path":2279,"stem":2280,"title":2281,"date":2223,"chapter":2282,"chapterSort":2283,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)","12",12000000,{"path":2285,"stem":2286,"title":2287,"date":2223,"chapter":2288,"chapterSort":2289,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch13-ros2serial","wiki/2023-12-30-ros2-tutorial/ch13-ROS2Serial","ROS2 Serial","13",13000000,{"path":2291,"stem":2292,"title":2293,"date":2223,"chapter":2294,"chapterSort":2295,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","机器人硬件","14",14000000,{"path":2297,"stem":2298,"title":2299,"date":2223,"chapter":2300,"chapterSort":2301,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":2303,"stem":2304,"title":2305,"date":2223,"chapter":2306,"chapterSort":2307,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂","16",16000000,{"path":2309,"stem":2310,"title":2311,"date":2223,"chapter":2312,"chapterSort":2313,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)","17",17000000,{"path":2315,"stem":2316,"title":2317,"date":2223,"chapter":2318,"chapterSort":2319,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch18-microros","wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":2321,"stem":2322,"title":2323,"date":2223,"chapter":2324,"chapterSort":2325,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots仿真平台","19",19000000,{"path":2231,"stem":2233,"title":5,"date":2223,"chapter":2221,"chapterSort":2222,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},{"path":2328,"stem":2329,"title":2330,"date":2223,"chapter":2331,"chapterSort":2332,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch20-opencv","wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":2334,"stem":2335,"title":2336,"date":2223,"chapter":2337,"chapterSort":2338,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","工作空间与功能包","3",3000000,{"path":2340,"stem":2341,"title":2342,"date":2223,"chapter":2343,"chapterSort":2344,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","wiki/2023-12-30-ros2-tutorial/ch4-四大通信","四大通信","4",4000000,{"path":2346,"stem":2347,"title":2348,"date":2223,"chapter":2349,"chapterSort":2350,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2其他通信机制","5",5000000,{"path":2352,"stem":2353,"title":2354,"date":2223,"chapter":2355,"chapterSort":2356,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch6-launch","wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":2358,"stem":2359,"title":2360,"date":2223,"chapter":2361,"chapterSort":2362,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","回溯rosbag2","7",7000000,{"path":2364,"stem":2365,"title":2366,"date":2223,"chapter":2367,"chapterSort":2368,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","坐标变换TF","8",8000000,{"path":2370,"stem":2371,"title":2372,"date":2223,"chapter":2373,"chapterSort":2374,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":2228},"/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言","9",9000000,{"path":2225,"stem":2376,"title":2377,"date":2223,"chapter":2229,"chapterSort":2378,"docKey":2224,"docRoot":2225,"docTitle":2226,"isWikiDoc":860,"isWikiIndex":860},"wiki/2023-12-30-ros2-tutorial/index","ROS2机器人操作系统教程",0,1778560328685]