[{"data":1,"prerenderedAt":2931},["ShallowReactive",2],{"wiki-page-\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo":3,"wiki-doc-items-\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo":2622,"language-switcher-data-\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo":2915,"wiki-i18n-paths-\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo":2930},{"id":4,"title":5,"body":6,"canonicalPath":2604,"chapterDepth":2605,"chapterOrder":2606,"date":2607,"description":19,"docI18nKey":2608,"docKey":2609,"docRoot":2610,"docTitle":2611,"extension":2612,"i18nKey":2613,"isBlogPost":2614,"isWikiDoc":860,"isWikiIndex":2614,"layout":2615,"legacyPath":2616,"locale":2617,"localeSlug":2618,"meta":2619,"navigation":860,"path":2604,"seo":2620,"sourcePath":2616,"sourceStem":2613,"stem":2613,"wikiDepth":74,"__hash__":2621},"content\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作.md","入门操作",{"type":7,"value":8,"toc":2591},"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,1164,1169,1172,1177,1182,1184,1187,1192,1197,1200,1205,1210,1215,1218,1223,1226,1231,1234,1239,1241,1246,1251,1256,1261,1263,1266,1271,1274,1277,1280,1285,1290,1293,1298,1303,1308,1313,1317,1322,1325,1330,1356,1361,1365,1370,1378,1381,1384,1387,1451,1476,1483,1488,1491,1513,1527,1534,1568,1571,1576,1579,1584,1587,1592,1597,1602,1605,1610,1613,1618,1621,1624,1629,1648,1653,1801,1804,1827,1838,2146,2155,2158,2175,2179,2182,2185,2188,2289,2498,2520,2523,2526,2529,2532,2537,2544,2548,2553,2558,2563,2568,2571,2574,2577,2582,2587],[10,11,12],"h3",{"id":12},"简介",[14,15,16],"p",{},[17,18],"img",{"alt":19,"src":20},"","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage83.webp",[14,22,23],{},[17,24],{"alt":19,"src":25},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage84.webp",[14,27,28],{},[17,29],{"alt":19,"src":30},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage85.webp",[14,32,33],{},[17,34],{"alt":19,"src":35},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage86.webp",[14,37,38],{},[17,39],{"alt":19,"src":40},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage87.webp",[10,42,43],{"id":43},"终端环境搭建",[14,45,46],{},[17,47],{"alt":19,"src":48},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage88.webp",[14,50,51,52,56],{},"如果在上方安装ROS2的时候，已经将该语句添加到",[53,54,55],"code",{},"~\u002F.bashrc","了，则不必再跟着这步操作了。",[14,58,59],{},[17,60],{"alt":19,"src":61},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage89.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 \u002Fopt\u002Fros\u002Fhumble\u002Fsetup.bash  #将ROS2环境变量配置到当前位置\necho \" source \u002Fopt\u002Fros\u002Fhumble\u002Fsetup.bash\" >> ~\u002F.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"," \u002Fopt\u002Fros\u002Fhumble\u002Fsetup.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 \u002Fopt\u002Fros\u002Fhumble\u002Fsetup.bash\"",[71,97,99],{"class":98},"szBVR"," >>",[71,101,102],{"class":81}," ~\u002F.bashrc",[71,104,105],{"class":85},"    #每次启动终端都会运行该句\n",[107,108],"hr",{},[14,110,111],{},[17,112],{"alt":19,"src":113},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage90.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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage91.webp",[14,140,141],{},[17,142],{"alt":19,"src":143},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage92.webp",[14,145,146],{},"用ctrl+c来进行取消程序运行",[14,148,149],{},[17,150],{"alt":19,"src":151},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage93.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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage94.webp",[17,175],{"alt":19,"src":176},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage95.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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage96.webp",[10,211,212],{"id":212},"命令行操作",[14,214,215],{},[17,216],{"alt":19,"src":217},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage97.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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage98.webp",[14,241,242],{},[17,243],{"alt":19,"src":244},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage99.webp",[14,246,247],{},"会弹提示信息，告诉我们后面要跟的参数",[14,249,250],{},[17,251],{"alt":19,"src":252},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage100.webp",[14,254,255],{},[17,256],{"alt":19,"src":257},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage101.webp",[14,259,260],{},"ros2 node list会把当前ROS2正在运行的节点列出来",[14,262,263],{},[17,264],{"alt":19,"src":265},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage102.webp",[14,267,268],{},[17,269],{"alt":19,"src":270},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage103.webp",[14,272,273],{},"ros2 node info + \u002F节点名 可以查看目标节点的详细情况",[14,275,276],{},[17,277],{"alt":19,"src":278},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage104.webp",[14,280,247],{},[14,282,283],{},[17,284],{"alt":19,"src":285},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage105.webp",[14,287,288],{},[17,289],{"alt":19,"src":290},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage106.webp",[14,292,293],{},[17,294],{"alt":19,"src":295},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage107.webp",[14,297,298],{},"可以通过话题来显示机器人运动的状态",[14,300,301],{},[17,302],{"alt":19,"src":303},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage108.webp",[63,305,307],{"className":65,"code":306,"language":67,"meta":19,"style":19},"ros2 topic pub --rate 1 \u002Fturtle1\u002Fcmd_vel geometry_msgs\u002Fmsg\u002FTwist \"{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}," \u002Fturtle1\u002Fcmd_vel",[71,329,330],{"class":81}," geometry_msgs\u002Fmsg\u002FTwist",[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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage109.webp",[14,340,341],{},[17,342],{"alt":19,"src":343},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage110.webp",[63,345,347],{"className":65,"code":346,"language":67,"meta":19,"style":19},"ros2 service call \u002Fspawn turtlesim\u002Fsrv\u002FSpawn \"{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}," \u002Fspawn",[71,363,364],{"class":81}," turtlesim\u002Fsrv\u002FSpawn",[71,366,367],{"class":81}," \"{x: 2, y: 2, theta: 0.2, name: ''}\"\n",[14,369,370],{},[17,371],{"alt":19,"src":372},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage111.webp",[14,374,375],{},[17,376],{"alt":19,"src":377},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage112.webp",[14,379,380],{},[17,381],{"alt":19,"src":382},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage113.webp",[63,384,386],{"className":65,"code":385,"language":67,"meta":19,"style":19},"ros2 bag record \u002Fturtle1\u002Fcmd_vel\nros2 bag play rosbag2_2022_04_11-17_35_40\u002Frosbag2_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}," \u002Fturtle1\u002Fcmd_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\u002Frosbag2_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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage114.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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage115.webp",[14,440,441],{},[17,442],{"alt":19,"src":443},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage116.webp",[14,445,446],{},[17,447],{"alt":19,"src":448},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage117.webp",[14,450,451],{},"1.创建功能包",[14,453,454],{},[17,455],{"alt":19,"src":456},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage118.webp",[14,458,459],{},[17,460],{"alt":19,"src":461},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage119.webp",[14,463,464],{},"指令就是创建ros2的功能包",[14,466,467],{},"ros2 pkg create + 功能包名 + --build-type(构建类型) + ament_cmake \u002F 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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage120.webp",[14,510,511],{},[17,512],{"alt":19,"src":513},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage121.webp",[14,515,516],{},"源文件自动生成了，文件名和我们指定的node name是一致的。",[14,518,519],{},[17,520],{"alt":19,"src":521},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage122.webp",[14,523,524],{},"这是自动生成的内容，但是和ROS2没有任何关系。",[14,526,527],{},[17,528],{"alt":19,"src":529},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage123.webp",[14,531,532],{},[17,533],{"alt":19,"src":534},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage124.webp",[14,536,537],{},[17,538],{"alt":19,"src":539},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage125.webp",[14,541,542],{},"如果依赖的库不止这一个，则再回车，",[14,544,545],{},"xxx",[14,547,548],{},"再添加下一个",[14,550,551],{},[17,552],{"alt":19,"src":553},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage126.webp",[14,555,556],{},"10行是查找包",[14,558,559],{},"12行是添加可执行的",[14,561,562],{},"add_executable 的第一个参数是 可执行文件的名字（默认和节点名一致，默认和源文件名一致） 第二个参数是源文件的名字",[14,564,565],{},"17行是为我们的可执行程序添加依赖 我们的可执行程序依赖于RCLCPP这个库",[14,567,568],{},"22行是要为我们的可执行程序设立一个安装目录，创建在了当前功能包下的lib目录，也就是 工作空间名\u002Finstall\u002F功能包名\u002Flib",[14,570,571],{},"编辑配置文件之后编译，用cd..返回ws目录",[14,573,574],{},[17,575],{"alt":19,"src":576},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage127.webp",[14,578,579],{},[17,580],{"alt":19,"src":581},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage128.webp",[14,583,584],{},"图标为绿色，是没有警告也没有错误",[14,586,587],{},"是黄色的则有警告",[14,589,590],{},"是红色的则有致命错误",[14,592,593],{},[17,594],{"alt":19,"src":595},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage129.webp",[14,597,598],{},"可执行二进制文件的路径",[14,600,601],{},[17,602],{"alt":19,"src":603},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage130.webp",[63,605,607],{"className":65,"code":606,"language":67,"meta":19,"style":19},"source install\u002Fsetup.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\u002Fsetup.bash",[71,617,618],{"class":85}," #刷新环境变量\n",[14,620,621],{},[17,622],{"alt":19,"src":623},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage131.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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage132.webp",[14,648,649],{},"编辑ROS2 C++源文件：",[14,651,652],{},[17,653],{"alt":19,"src":654},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage133.webp",[63,656,661],{"className":657,"code":659,"language":660},[658],"language-text","#include \"rclcpp\u002Frclcpp.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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage134.webp",[14,669,670],{},[17,671],{"alt":19,"src":672},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage135.webp",[14,674,675],{},[17,676],{"alt":19,"src":677},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage136.webp",[14,679,680],{},[17,681],{"alt":19,"src":682},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage137.webp",[10,684,686],{"id":685},"ros2-helloworldpython","ROS2 HelloWorld(Python)",[14,688,689],{},[17,690],{"alt":19,"src":691},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage138.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 \u002F ament_python + --dependencies（依赖） + rclpy(ROS2的Python客户端) + --node-name（节点名） + 节点名",[14,726,727],{},[17,728],{"alt":19,"src":729},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage139.webp",[14,731,732],{},[17,733],{"alt":19,"src":734},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage140.webp",[14,736,737],{},[17,738],{"alt":19,"src":739},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage141.webp",[14,741,742],{},"与node name和可执行二进制文件同名",[14,744,745],{},[17,746],{"alt":19,"src":747},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage142.webp",[14,749,750],{},"默认这里面已经有代码，但是和ROS2无关，这是标准的python代码",[14,752,753],{},[17,754],{"alt":19,"src":755},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage143.webp",[14,757,758],{},[17,759],{"alt":19,"src":760},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage144.webp",[14,762,763],{},[17,764],{"alt":19,"src":765},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage145.webp",[14,767,768],{},"二进制可执行文件 映射到 源文件的main函数",[14,770,771],{},"如何编译呢？",[14,773,774],{},[17,775],{"alt":19,"src":776},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage146.webp",[14,778,779],{},"先返回上一级，来到ws目录",[14,781,782],{},[17,783],{"alt":19,"src":784},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage147.webp",[14,786,787],{},[17,788],{"alt":19,"src":789},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage148.webp",[14,791,792],{},"有个黄色警告，但是不影响我们使用。",[14,794,795],{},[17,796],{"alt":19,"src":797},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage149.webp",[63,799,801],{"className":65,"code":800,"language":67,"meta":19,"style":19},"source .\u002Finstall\u002Fsetup.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}," .\u002Finstall\u002Fsetup.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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage150.webp",[107,834],{},[14,836,837],{},[17,838],{"alt":19,"src":839},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage151.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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage152.webp",[14,950,951],{},[17,952],{"alt":19,"src":953},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage153.webp",[14,955,956],{},[17,957],{"alt":19,"src":958},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage154.webp",[10,960,962],{"id":961},"运行优化bash终端环境","运行优化(bash终端环境)",[14,964,965],{},[17,966],{"alt":19,"src":967},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage155.webp",[14,969,970],{},[17,971],{"alt":19,"src":972},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage156.webp",[14,974,975],{},"要使用绝对路径",[14,977,978],{},[17,979],{"alt":19,"src":980},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage157.webp",[14,982,983],{},[17,984],{"alt":19,"src":985},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage158.webp",[14,987,988],{},"尽量不要这么干，ROS2有一个bug，就是不同工作空间的功能包可能会调用混乱，所以先不要搞全局的运行优化。",[10,990,992],{"id":991},"vscode环境搭建","VScode环境搭建",[14,994,995],{},[17,996],{"alt":19,"src":997},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage159.webp",[14,999,1000,1003],{},[17,1001],{"alt":19,"src":1002},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage160.webp",[17,1004],{"alt":19,"src":1005},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage161.webp",[14,1007,1008,1011],{},[17,1009],{"alt":19,"src":1010},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage162.webp",[17,1012],{"alt":19,"src":1013},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage163.webp",[14,1015,1016,1019],{},[17,1017],{"alt":19,"src":1018},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage164.webp",[17,1020],{"alt":19,"src":1021},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage165.webp",[14,1023,1024],{},"看C\u002FC++，Python，CMake，XML,YAML文件就可以代码高亮显示",[14,1026,1027],{},"在写一些ROS2消息的代码可以提供代码补齐等操作",[14,1029,1030],{},[17,1031],{"alt":19,"src":1032},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage166.webp",[14,1034,1035],{},"编写机器人模型所要用的插件，也可以进行代码补齐",[14,1037,1038],{},[17,1039],{"alt":19,"src":1040},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage167.webp",[14,1042,1043],{},"ROS2经常生成PDF文件，可以通过这个插件来查看",[14,1045,1046,1049],{},[17,1047],{"alt":19,"src":1048},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage168.webp",[17,1050],{"alt":19,"src":1051},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage169.webp",[14,1053,1054],{},"ROS2插件建议等成熟之后再进行安装",[14,1056,1057],{},[17,1058],{"alt":19,"src":1059},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage170.webp",[14,1061,1062],{},"这个官方插件可以尝试安装",[14,1064,1065],{},[17,1066],{"alt":19,"src":1067},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage171.webp",[14,1069,1070],{},"人工智能代码补全",[14,1072,1073],{},[17,1074],{"alt":19,"src":1075},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage172.webp",[14,1077,1078],{},"MarkDown高亮",[107,1080],{},[14,1082,1083],{},[17,1084],{"alt":19,"src":1085},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage173.webp",[14,1087,1088],{},[17,1089],{"alt":19,"src":1090},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage174.webp",[14,1092,1093],{},[17,1094],{"alt":19,"src":1095},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage175.webp",[14,1097,1098],{},"虽然报错，但是程序是可以正常运行的。（主要是vscode找不到头文件）",[14,1100,1101],{},[17,1102],{"alt":19,"src":1103},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage176.webp",[14,1105,1106],{},[17,1107],{"alt":19,"src":1108},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage177.webp",[14,1110,1111],{},[17,1112],{"alt":19,"src":1113},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage178.webp",[14,1115,1116],{},[17,1117],{"alt":19,"src":1118},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage179.webp",[14,1120,1121],{},[17,1122],{"alt":19,"src":1123},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage180.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}\u002F**\",\n                \"\u002Fopt\u002Fros\u002Fhumble\u002Finclude\u002F**\"\n            ],\n","JSON",[53,1130,1131,1139,1147,1154,1159],{"__ignoreMap":19},[71,1132,1133,1136],{"class":73,"line":74},[71,1134,1135],{"class":81},"            \"includePath\"",[71,1137,1138],{"class":854},": [\n",[71,1140,1141,1144],{"class":73,"line":89},[71,1142,1143],{"class":81},"                \"${default}\"",[71,1145,1146],{"class":854},",\n",[71,1148,1149,1152],{"class":73,"line":864},[71,1150,1151],{"class":81},"                \"${workspaceFolder}\u002F**\"",[71,1153,1146],{"class":854},[71,1155,1156],{"class":73,"line":876},[71,1157,1158],{"class":81},"                \"\u002Fopt\u002Fros\u002Fhumble\u002Finclude\u002F**\"\n",[71,1160,1161],{"class":73,"line":882},[71,1162,1163],{"class":854},"            ],\n",[14,1165,1166],{},[17,1167],{"alt":19,"src":1168},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage181.webp",[14,1170,1171],{},"\u002F**代表要包含该文件夹下的所有的子集",[14,1173,1174],{},[17,1175],{"alt":19,"src":1176},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage182.webp",[14,1178,1179],{},[17,1180],{"alt":19,"src":1181},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage183.webp",[107,1183],{},[14,1185,1186],{},"按Ctrl + `（ESC底下的按键）把VSCODE终端打开",[14,1188,1189],{},[17,1190],{"alt":19,"src":1191},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage184.webp",[14,1193,1194],{},[17,1195],{"alt":19,"src":1196},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage185.webp",[14,1198,1199],{},"--node-name也是可选参数，如果不配置，则不会有源文件，也不会有可执行文件到源文件的映射",[14,1201,1202],{},[17,1203],{"alt":19,"src":1204},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage186.webp",[14,1206,1207],{},[17,1208],{"alt":19,"src":1209},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage187.webp",[14,1211,1212],{},[17,1213],{"alt":19,"src":1214},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage188.webp",[14,1216,1217],{},"不需要修改，已经默认生成好了",[14,1219,1220],{},[17,1221],{"alt":19,"src":1222},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage189.webp",[14,1224,1225],{},"再返回WS目录进行编译（但是此时编译是编译整个WS目录下的所有功能包）",[14,1227,1228],{},[17,1229],{"alt":19,"src":1230},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage190.webp",[14,1232,1233],{},"刷新环境变量并运行",[14,1235,1236],{},[17,1237],{"alt":19,"src":1238},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage191.webp",[107,1240],{},[14,1242,1243],{},[17,1244],{"alt":19,"src":1245},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage192.webp",[14,1247,1248],{},[17,1249],{"alt":19,"src":1250},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage193.webp",[14,1252,1253],{},[17,1254],{"alt":19,"src":1255},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage194.webp",[14,1257,1258],{},[17,1259],{"alt":19,"src":1260},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage195.webp",[107,1262],{},[14,1264,1265],{},"如何在一个功能包里添加多个源文件呢？",[14,1267,1268],{},[17,1269],{"alt":19,"src":1270},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage196.webp",[14,1272,1273],{},"新建一个新文件，比如hellovscode2.cpp",[14,1275,1276],{},"但是此时该文件是一个孤零零的文件，他没有做任何的配置，对应的，编译完之后也不会被执行。",[14,1278,1279],{},"我们想编译执行该文件，必须配置相关的配置文件。",[14,1281,1282],{},[17,1283],{"alt":19,"src":1284},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage197.webp",[14,1286,1287],{},[17,1288],{"alt":19,"src":1289},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage198.webp",[14,1291,1292],{},"选中的这些用不着，可以删掉",[14,1294,1295],{},[17,1296],{"alt":19,"src":1297},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage199.webp",[14,1299,1300],{},[17,1301],{"alt":19,"src":1302},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage200.webp",[14,1304,1305],{},[17,1306],{"alt":19,"src":1307},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage201.webp",[14,1309,1310],{},[17,1311],{"alt":19,"src":1312},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage202.webp",[10,1314,1316],{"id":1315},"运行优化colcon-build","运行优化(colcon build)",[14,1318,1319],{},[17,1320],{"alt":19,"src":1321},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage203.webp",[14,1323,1324],{},"平常会全编译WS目录下的文件",[14,1326,1327],{},[17,1328],{"alt":19,"src":1329},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage204.webp",[63,1331,1333],{"className":65,"code":1332,"language":67,"meta":19,"style":19},"colcon build --packages-select xxx xxx xxx #可以指向多个包\n",[53,1334,1335],{"__ignoreMap":19},[71,1336,1337,1340,1343,1346,1349,1351,1353],{"class":73,"line":74},[71,1338,1339],{"class":123},"colcon",[71,1341,1342],{"class":81}," build",[71,1344,1345],{"class":77}," --packages-select",[71,1347,1348],{"class":81}," xxx",[71,1350,1348],{"class":81},[71,1352,1348],{"class":81},[71,1354,1355],{"class":85}," #可以指向多个包\n",[14,1357,1358],{},[17,1359],{"alt":19,"src":1360},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage205.webp",[10,1362,1364],{"id":1363},"vscode环境进阶","VScode环境进阶",[1366,1367,1369],"h4",{"id":1368},"clangd插件代码提示可选但是建议","clangd插件代码提示(可选,但是建议)",[14,1371,1372],{},[1373,1374,1375],"a",{"href":1375,"rel":1376},"https:\u002F\u002Fcolcon.readthedocs.io\u002Fen\u002Freleased\u002Findex.html",[1377],"nofollow",[14,1379,1380],{},"由于C\u002FC++插件在大项目里的表现简直拉胯的一批，所以我们选择使用llvm里的clangd插件来进行代码提示。",[14,1382,1383],{},"但clangd依赖于cmake生成一个编译信息文件，我们需要一些步骤来生成该文件。",[14,1385,1386],{},"由于ROS2没有像ROS1那样的一个总的规范的CMakeLists，所以配置起来没有ROS1那么方便。",[1388,1389,1390],"ol",{},[1391,1392,1393,1394,1404,1421,1424,1425,1446],"li",{},"配置colcon build参数",[1388,1395,1396],{},[1391,1397,1398,1399,1403],{},"方法一：（不建议） ",[1400,1401,1402],"strong",{},"每次"," 编译要用该命令：",[63,1405,1407],{"className":65,"code":1406,"language":67,"meta":19,"style":19},"colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[53,1408,1409],{"__ignoreMap":19},[71,1410,1411,1413,1415,1418],{"class":73,"line":74},[71,1412,1339],{"class":123},[71,1414,1342],{"class":81},[71,1416,1417],{"class":77}," --cmake-args",[71,1419,1420],{"class":77}," -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[1422,1423],"br",{},"  等同于在cmake文件里写上（一般不建议改cmakelists）",[63,1426,1428],{"className":65,"code":1427,"language":67,"meta":19,"style":19},"set(CMAKE_EXPORT_COMPILE_COMMANDS ON)\n",[53,1429,1430],{"__ignoreMap":19},[71,1431,1432,1435,1438,1441,1444],{"class":73,"line":74},[71,1433,1434],{"class":77},"set",[71,1436,1437],{"class":854},"(",[71,1439,1440],{"class":81},"CMAKE_EXPORT_COMPILE_COMMANDS",[71,1442,1443],{"class":81}," ON",[71,1445,897],{"class":854},[1388,1447,1448],{"start":882},[1391,1449,1450],{},"方法二：全局参数(更加推荐)",[63,1452,1454],{"className":65,"code":1453,"language":67,"meta":19,"style":19},"mkdir ~\u002F.colcon\n\nvim ~\u002F.colcon\u002Fdefaults.yaml\n",[53,1455,1456,1464,1468],{"__ignoreMap":19},[71,1457,1458,1461],{"class":73,"line":74},[71,1459,1460],{"class":123},"mkdir",[71,1462,1463],{"class":81}," ~\u002F.colcon\n",[71,1465,1466],{"class":73,"line":89},[71,1467,861],{"emptyLinePlaceholder":860},[71,1469,1470,1473],{"class":73,"line":864},[71,1471,1472],{"class":123},"vim",[71,1474,1475],{"class":81}," ~\u002F.colcon\u002Fdefaults.yaml\n",[14,1477,1478,1479,1482],{},"按下",[53,1480,1481],{},"insert（插入）","按键",[14,1484,1485],{},[17,1486],{"alt":19,"src":1487},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage206.webp",[14,1489,1490],{},"输入下方内容",[63,1492,1494],{"className":65,"code":1493,"language":67,"meta":19,"style":19},"build:\n  cmake-args:\n    - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[53,1495,1496,1501,1506],{"__ignoreMap":19},[71,1497,1498],{"class":73,"line":74},[71,1499,1500],{"class":123},"build:\n",[71,1502,1503],{"class":73,"line":89},[71,1504,1505],{"class":123},"  cmake-args:\n",[71,1507,1508,1511],{"class":73,"line":864},[71,1509,1510],{"class":123},"    -",[71,1512,1420],{"class":77},[14,1514,1478,1515,1518,1519,1522,1523,1526],{},[53,1516,1517],{},"ESC","，并按下",[53,1520,1521],{},":wq",",然后按下",[53,1524,1525],{},"Enter(回车)","即可成功保存。",[14,1528,1529,1530,1533],{},"在编译的时候正常用",[53,1531,1532],{},"colcon build","就可以自动启用CMAKE_EXPORT_COMPILE_COMMANDS=ON参数了。",[1388,1535,1536],{"start":89},[1391,1537,1538,1539,1552,1554,1555,1557,1558,1560,1563],{},"然后再来配置clangd插件",[1388,1540,1541,1549],{},[1391,1542,1543,1544,1546],{},"先下载clangd插件",[1422,1545],{},[17,1547],{"alt":19,"src":1548},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage207.webp",[1391,1550,1551],{},"下载clangd文件",[1422,1553],{},"  按住Ctrl shift P打开搜索框",[1422,1556],{},"  输入clangd 找到下载语言服务器这一项目，点击安装clangd（请保持良好的网络状况）",[1422,1559],{},[17,1561],{"alt":19,"src":1562},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage208.webp",[1388,1564,1565],{"start":900},[1391,1566,1567],{},"接着配置clangd：",[14,1569,1570],{},"禁用C\u002FC++的代码提示功能",[14,1572,1573],{},[17,1574],{"alt":19,"src":1575},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage209.webp",[14,1577,1578],{},"如果没有上图的弹窗，可以进行手动关闭，依然是ctrl shift P,输入settings然后找到如下图的选项",[14,1580,1581],{},[17,1582],{"alt":19,"src":1583},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage210.webp",[14,1585,1586],{},"找到下图这个选项，改成disabled即可。",[14,1588,1589],{},[53,1590,1591],{},"\"C_Cpp.intelliSenseEngine\": \"disabled\"",[14,1593,1594],{},[17,1595],{"alt":19,"src":1596},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage211.webp",[1388,1598,1599],{"start":876},[1391,1600,1601],{},"重启clangd",[14,1603,1604],{},"然后ctrl shift P搜索clangd找到如下图的选项（重启clangd语言服务器前，要先colcon build）",[14,1606,1607],{},[17,1608],{"alt":19,"src":1609},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage212.webp",[14,1611,1612],{},"代码提示就正常啦",[14,1614,1615],{},[17,1616],{"alt":19,"src":1617},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage213.webp",[10,1619,1620],{"id":1620},"安装其他工具",[1366,1622,1623],{"id":1623},"terminal",[1625,1626,1628],"h5",{"id":1627},"安装terminator选装因人而异有更好用的warp请往下看","安装terminator(选装,因人而异,有更好用的Warp,请往下看)",[63,1630,1632],{"className":65,"code":1631,"language":67,"meta":19,"style":19},"sudo apt install terminator\n",[53,1633,1634],{"__ignoreMap":19},[71,1635,1636,1639,1642,1645],{"class":73,"line":74},[71,1637,1638],{"class":123},"sudo",[71,1640,1641],{"class":81}," apt",[71,1643,1644],{"class":81}," install",[71,1646,1647],{"class":81}," terminator\n",[14,1649,1650],{},[17,1651],{"alt":19,"src":1652},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage214.webp",[1654,1655,1656,1672],"table",{},[1657,1658,1659],"thead",{},[1660,1661,1662,1666,1669],"tr",{},[1663,1664,1665],"th",{},"快捷键",[1663,1667,1668],{},"功能",[1663,1670,1671],{},"记忆方法",[1673,1674,1675,1692,1708,1724,1740,1753,1769,1785],"tbody",{},[1660,1676,1677,1683,1686],{},[1678,1679,1680],"td",{},[53,1681,1682],{},"Ctrl + Shift + E",[1678,1684,1685],{},"垂直分屏，左右分",[1678,1687,1688,1691],{},[1400,1689,1690],{},"E = East","，往东边开一个窗口，也就是左右分",[1660,1693,1694,1699,1702],{},[1678,1695,1696],{},[53,1697,1698],{},"Ctrl + Shift + O",[1678,1700,1701],{},"水平分屏，上下分",[1678,1703,1704,1707],{},[1400,1705,1706],{},"O = Over \u002F Under","，上下叠放",[1660,1709,1710,1715,1718],{},[1678,1711,1712],{},[53,1713,1714],{},"Ctrl + Shift + S",[1678,1716,1717],{},"隐藏\u002F显示滚动条",[1678,1719,1720,1723],{},[1400,1721,1722],{},"S = Scrollbar","，滚动条",[1660,1725,1726,1731,1734],{},[1678,1727,1728],{},[53,1729,1730],{},"F11",[1678,1732,1733],{},"全屏\u002F退出全屏",[1678,1735,1736,1739],{},[1400,1737,1738],{},"F = Fullscreen","，F11 本来就是很多软件的全屏键",[1660,1741,1742,1747,1750],{},[1678,1743,1744],{},[53,1745,1746],{},"Ctrl + Tab",[1678,1748,1749],{},"在不同 pane 之间切换",[1678,1751,1752],{},"跟浏览器切 Tab 类似，循环切换",[1660,1754,1755,1760,1763],{},[1678,1756,1757],{},[53,1758,1759],{},"Ctrl + L",[1678,1761,1762],{},"清屏",[1678,1764,1765,1768],{},[1400,1766,1767],{},"L = clear 里的 L","，也可以理解成“拉到新页面”",[1660,1770,1771,1776,1779],{},[1678,1772,1773],{},[53,1774,1775],{},"Ctrl + Shift + W",[1678,1777,1778],{},"关闭当前 pane",[1678,1780,1781,1784],{},[1400,1782,1783],{},"W = Window","，关当前小窗口",[1660,1786,1787,1792,1795],{},[1678,1788,1789],{},[53,1790,1791],{},"Ctrl + Shift + Q",[1678,1793,1794],{},"退出整个 Terminator",[1678,1796,1797,1800],{},[1400,1798,1799],{},"Q = Quit","，退出程序",[14,1802,1803],{},"因为他本身的字体非常暗,所以要设置一下.",[63,1805,1807],{"className":65,"code":1806,"language":67,"meta":19,"style":19},"cp ~\u002F.config\u002Fterminator\u002Fconfig ~\u002F.config\u002Fterminator\u002Fconfig.bak\nvim ~\u002F.config\u002Fterminator\u002Fconfig\n",[53,1808,1809,1820],{"__ignoreMap":19},[71,1810,1811,1814,1817],{"class":73,"line":74},[71,1812,1813],{"class":123},"cp",[71,1815,1816],{"class":81}," ~\u002F.config\u002Fterminator\u002Fconfig",[71,1818,1819],{"class":81}," ~\u002F.config\u002Fterminator\u002Fconfig.bak\n",[71,1821,1822,1824],{"class":73,"line":89},[71,1823,1472],{"class":123},[71,1825,1826],{"class":81}," ~\u002F.config\u002Fterminator\u002Fconfig\n",[14,1828,1829,1830,1833,1834,1837],{},"按一下",[53,1831,1832],{},"ggdG",",注意大小写.\n然后按下",[53,1835,1836],{},"insert","按键,\n然后让文件内容为:",[63,1839,1841],{"className":65,"code":1840,"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      size = 920, 660\n    [[[child1]]]\n      type = Terminal\n      parent = window0\n\n[plugins]\n",[53,1842,1843,1848,1859,1869,1879,1888,1897,1907,1911,1916,1920,1926,1932,1943,1953,1973,1978,1989,1999,2009,2019,2024,2035,2040,2051,2056,2062,2067,2073,2084,2095,2109,2115,2125,2135,2140],{"__ignoreMap":19},[71,1844,1845],{"class":73,"line":74},[71,1846,1847],{"class":854},"[global_config]\n",[71,1849,1850,1853,1856],{"class":73,"line":89},[71,1851,1852],{"class":123},"  title_transmit_bg_color",[71,1854,1855],{"class":81}," =",[71,1857,1858],{"class":81}," \"#31363b\"\n",[71,1860,1861,1864,1866],{"class":73,"line":864},[71,1862,1863],{"class":123},"  title_transmit_fg_color",[71,1865,1855],{"class":81},[71,1867,1868],{"class":81}," \"#fcfcfc\"\n",[71,1870,1871,1874,1876],{"class":73,"line":876},[71,1872,1873],{"class":123},"  title_receive_bg_color",[71,1875,1855],{"class":81},[71,1877,1878],{"class":81}," \"#232629\"\n",[71,1880,1881,1884,1886],{"class":73,"line":882},[71,1882,1883],{"class":123},"  title_receive_fg_color",[71,1885,1855],{"class":81},[71,1887,1868],{"class":81},[71,1889,1890,1893,1895],{"class":73,"line":900},[71,1891,1892],{"class":123},"  title_inactive_bg_color",[71,1894,1855],{"class":81},[71,1896,1878],{"class":81},[71,1898,1899,1902,1904],{"class":73,"line":911},[71,1900,1901],{"class":123},"  title_inactive_fg_color",[71,1903,1855],{"class":81},[71,1905,1906],{"class":81}," \"#bdc3c7\"\n",[71,1908,1909],{"class":73,"line":917},[71,1910,861],{"emptyLinePlaceholder":860},[71,1912,1913],{"class":73,"line":922},[71,1914,1915],{"class":854},"[keybindings]\n",[71,1917,1918],{"class":73,"line":940},[71,1919,861],{"emptyLinePlaceholder":860},[71,1921,1923],{"class":73,"line":1922},11,[71,1924,1925],{"class":854},"[profiles]\n",[71,1927,1929],{"class":73,"line":1928},12,[71,1930,1931],{"class":854},"  [[default]]\n",[71,1933,1935,1938,1940],{"class":73,"line":1934},13,[71,1936,1937],{"class":123},"    use_theme_colors",[71,1939,1855],{"class":81},[71,1941,1942],{"class":81}," False\n",[71,1944,1946,1949,1951],{"class":73,"line":1945},14,[71,1947,1948],{"class":123},"    use_system_font",[71,1950,1855],{"class":81},[71,1952,1942],{"class":81},[71,1954,1956,1959,1961,1964,1967,1970],{"class":73,"line":1955},15,[71,1957,1958],{"class":123},"    font",[71,1960,1855],{"class":81},[71,1962,1963],{"class":81}," Noto",[71,1965,1966],{"class":81}," Sans",[71,1968,1969],{"class":81}," Mono",[71,1971,1972],{"class":77}," 11\n",[71,1974,1976],{"class":73,"line":1975},16,[71,1977,861],{"emptyLinePlaceholder":860},[71,1979,1981,1984,1986],{"class":73,"line":1980},17,[71,1982,1983],{"class":123},"    background_type",[71,1985,1855],{"class":81},[71,1987,1988],{"class":81}," solid\n",[71,1990,1992,1995,1997],{"class":73,"line":1991},18,[71,1993,1994],{"class":123},"    background_color",[71,1996,1855],{"class":81},[71,1998,1878],{"class":81},[71,2000,2002,2005,2007],{"class":73,"line":2001},19,[71,2003,2004],{"class":123},"    foreground_color",[71,2006,1855],{"class":81},[71,2008,1868],{"class":81},[71,2010,2012,2015,2017],{"class":73,"line":2011},20,[71,2013,2014],{"class":123},"    cursor_color",[71,2016,1855],{"class":81},[71,2018,1868],{"class":81},[71,2020,2022],{"class":73,"line":2021},21,[71,2023,861],{"emptyLinePlaceholder":860},[71,2025,2027,2030,2032],{"class":73,"line":2026},22,[71,2028,2029],{"class":123},"    palette",[71,2031,1855],{"class":81},[71,2033,2034],{"class":81}," \"#232629:#ed1515:#11d116:#f67400:#1d99f3:#9b59b6:#1abc9c:#fcfcfc:#7f8c8d:#ff5555:#50fa7b:#fdbc4b:#3daee9:#ff79c6:#8be9fd:#ffffff\"\n",[71,2036,2038],{"class":73,"line":2037},23,[71,2039,861],{"emptyLinePlaceholder":860},[71,2041,2043,2046,2048],{"class":73,"line":2042},24,[71,2044,2045],{"class":123},"    scrollback_infinite",[71,2047,1855],{"class":81},[71,2049,2050],{"class":81}," True\n",[71,2052,2054],{"class":73,"line":2053},25,[71,2055,861],{"emptyLinePlaceholder":860},[71,2057,2059],{"class":73,"line":2058},26,[71,2060,2061],{"class":854},"[layouts]\n",[71,2063,2065],{"class":73,"line":2064},27,[71,2066,1931],{"class":854},[71,2068,2070],{"class":73,"line":2069},28,[71,2071,2072],{"class":854},"    [[[window0]]]\n",[71,2074,2076,2079,2081],{"class":73,"line":2075},29,[71,2077,2078],{"class":77},"      type",[71,2080,1855],{"class":81},[71,2082,2083],{"class":81}," Window\n",[71,2085,2087,2090,2092],{"class":73,"line":2086},30,[71,2088,2089],{"class":123},"      parent",[71,2091,1855],{"class":81},[71,2093,2094],{"class":81}," \"\"\n",[71,2096,2098,2101,2103,2106],{"class":73,"line":2097},31,[71,2099,2100],{"class":123},"      size",[71,2102,1855],{"class":81},[71,2104,2105],{"class":81}," 920,",[71,2107,2108],{"class":77}," 660\n",[71,2110,2112],{"class":73,"line":2111},32,[71,2113,2114],{"class":854},"    [[[child1]]]\n",[71,2116,2118,2120,2122],{"class":73,"line":2117},33,[71,2119,2078],{"class":77},[71,2121,1855],{"class":81},[71,2123,2124],{"class":81}," Terminal\n",[71,2126,2128,2130,2132],{"class":73,"line":2127},34,[71,2129,2089],{"class":123},[71,2131,1855],{"class":81},[71,2133,2134],{"class":81}," window0\n",[71,2136,2138],{"class":73,"line":2137},35,[71,2139,861],{"emptyLinePlaceholder":860},[71,2141,2143],{"class":73,"line":2142},36,[71,2144,2145],{"class":854},"[plugins]\n",[14,2147,2148,2149,2151,2152,2154],{},"最后,按下",[53,2150,1517],{},",输入",[53,2153,1521],{},"保存并退出.",[14,2156,2157],{},"然后完全关闭 Terminator，再重新打开。\n这个配置会做几件事：",[1388,2159,2160,2163,2166,2169,2172],{},[1391,2161,2162],{},"背景：接近 Konsole Breeze 的深灰，不是死黑",[1391,2164,2165],{},"字体：接近纯白，比以前亮很多",[1391,2167,2168],{},"蓝色：换成更亮的 KDE 蓝",[1391,2170,2171],{},"绿色\u002F黄色\u002F青色：也整体提亮",[1391,2173,2174],{},"顶部红色标题条：改成灰色，不再那么刺眼",[1625,2176,2178],{"id":2177},"warp-terminal推荐更好看也支持分屏","Warp Terminal（推荐，更好看，也支持分屏）",[14,2180,2181],{},"相比 Terminator，Warp Terminal 的默认外观更现代，字体更清楚，界面也更亮堂。",[14,2183,2184],{},"最重要的是，它也支持类似 Terminator 的多 pane 分屏，所以可以作为 Terminator 的现代平替。",[14,2186,2187],{},"不过需要注意，Warp 的快捷键和 Terminator 不完全一样。",[1388,2189,2190,2286],{},[1391,2191,2192,2193],{},"安装",[1388,2194,2195,2240],{},[1391,2196,2197,2198,2228,2230,2231],{},"Ubuntu \u002F Debian 安装",[63,2199,2201],{"className":65,"code":2200,"language":67,"meta":19,"style":19},"wget -O warp-terminal.deb \"https:\u002F\u002Fapp.warp.dev\u002Fdownload?package=deb\"\nsudo apt install .\u002Fwarp-terminal.deb\n",[53,2202,2203,2217],{"__ignoreMap":19},[71,2204,2205,2208,2211,2214],{"class":73,"line":74},[71,2206,2207],{"class":123},"wget",[71,2209,2210],{"class":77}," -O",[71,2212,2213],{"class":81}," warp-terminal.deb",[71,2215,2216],{"class":81}," \"https:\u002F\u002Fapp.warp.dev\u002Fdownload?package=deb\"\n",[71,2218,2219,2221,2223,2225],{"class":73,"line":89},[71,2220,1638],{"class":123},[71,2222,1641],{"class":81},[71,2224,1644],{"class":81},[71,2226,2227],{"class":81}," .\u002Fwarp-terminal.deb\n",[1422,2229],{},"安装完成后，可以在应用菜单里打开 Warp，也可以在终端里输入：",[63,2232,2234],{"className":65,"code":2233,"language":67,"meta":19,"style":19},"warp-terminal\n",[53,2235,2236],{"__ignoreMap":19},[71,2237,2238],{"class":73,"line":74},[71,2239,2233],{"class":123},[1391,2241,2242,2243,2245,2246,2275,2277,2278],{},"Fedora \u002F RHEL 安装",[1422,2244],{},"如果你用的是 Fedora、RHEL、CentOS 这类发行版，可以安装 rpm 包：",[63,2247,2249],{"className":65,"code":2248,"language":67,"meta":19,"style":19},"wget -O warp-terminal.rpm \"https:\u002F\u002Fapp.warp.dev\u002Fdownload?package=rpm\"\nsudo dnf install .\u002Fwarp-terminal.rpm\n",[53,2250,2251,2263],{"__ignoreMap":19},[71,2252,2253,2255,2257,2260],{"class":73,"line":74},[71,2254,2207],{"class":123},[71,2256,2210],{"class":77},[71,2258,2259],{"class":81}," warp-terminal.rpm",[71,2261,2262],{"class":81}," \"https:\u002F\u002Fapp.warp.dev\u002Fdownload?package=rpm\"\n",[71,2264,2265,2267,2270,2272],{"class":73,"line":89},[71,2266,1638],{"class":123},[71,2268,2269],{"class":81}," dnf",[71,2271,1644],{"class":81},[71,2273,2274],{"class":81}," .\u002Fwarp-terminal.rpm\n",[1422,2276],{},"启动方式同样是：",[63,2279,2280],{"className":65,"code":2233,"language":67,"meta":19,"style":19},[53,2281,2282],{"__ignoreMap":19},[71,2283,2284],{"class":73,"line":74},[71,2285,2233],{"class":123},[1391,2287,2288],{},"Warp 常用快捷键",[1654,2290,2291,2301],{},[1657,2292,2293],{},[1660,2294,2295,2297,2299],{},[1663,2296,1665],{},[1663,2298,1668],{},[1663,2300,1671],{},[1673,2302,2303,2319,2334,2347,2363,2379,2392,2405,2421,2434,2446,2459,2472,2485],{},[1660,2304,2305,2310,2313],{},[1678,2306,2307],{},[53,2308,2309],{},"Ctrl + Shift + D",[1678,2311,2312],{},"向右分屏",[1678,2314,2315,2318],{},[1400,2316,2317],{},"D = Divide","，分割出一个新的 pane，默认往右边开",[1660,2320,2321,2325,2328],{},[1678,2322,2323],{},[53,2324,1682],{},[1678,2326,2327],{},"向下分屏",[1678,2329,2330,2333],{},[1400,2331,2332],{},"E = Extend Down","，向下面扩展一个新的 pane",[1660,2335,2336,2341,2344],{},[1678,2337,2338],{},[53,2339,2340],{},"Ctrl + Alt + 方向键",[1678,2342,2343],{},"按方向切换 pane",[1678,2345,2346],{},"想去哪边就按哪个方向键",[1660,2348,2349,2354,2357],{},[1678,2350,2351],{},[53,2352,2353],{},"Ctrl + Shift + [",[1678,2355,2356],{},"切换到上一个 pane",[1678,2358,2359,2362],{},[53,2360,2361],{},"["," 可以理解成往前切",[1660,2364,2365,2370,2373],{},[1678,2366,2367],{},[53,2368,2369],{},"Ctrl + Shift + ]",[1678,2371,2372],{},"切换到下一个 pane",[1678,2374,2375,2378],{},[53,2376,2377],{},"]"," 可以理解成往后切",[1660,2380,2381,2386,2389],{},[1678,2382,2383],{},[53,2384,2385],{},"Ctrl + Shift + Enter",[1678,2387,2388],{},"最大化\u002F还原当前 pane",[1678,2390,2391],{},"Enter 进入当前 pane 的专注模式",[1660,2393,2394,2398,2400],{},[1678,2395,2396],{},[53,2397,1775],{},[1678,2399,1778],{},[1678,2401,2402,2404],{},[1400,2403,1783],{},"，关闭当前小窗口",[1660,2406,2407,2412,2415],{},[1678,2408,2409],{},[53,2410,2411],{},"Ctrl + Shift + T",[1678,2413,2414],{},"新建标签页",[1678,2416,2417,2420],{},[1400,2418,2419],{},"T = Tab","，新开一个标签页",[1660,2422,2423,2428,2431],{},[1678,2424,2425],{},[53,2426,2427],{},"Ctrl + PageUp",[1678,2429,2430],{},"切换到上一个标签页",[1678,2432,2433],{},"类似浏览器切换标签",[1660,2435,2436,2441,2444],{},[1678,2437,2438],{},[53,2439,2440],{},"Ctrl + PageDown",[1678,2442,2443],{},"切换到下一个标签页",[1678,2445,2433],{},[1660,2447,2448,2452,2454],{},[1678,2449,2450],{},[53,2451,1759],{},[1678,2453,1762],{},[1678,2455,2456,2458],{},[1400,2457,1767],{},"，相当于翻到一个新页面",[1660,2460,2461,2466,2469],{},[1678,2462,2463],{},[53,2464,2465],{},"Ctrl + =",[1678,2467,2468],{},"放大字体",[1678,2470,2471],{},"等号旁边通常也是加号，表示放大",[1660,2473,2474,2479,2482],{},[1678,2475,2476],{},[53,2477,2478],{},"Ctrl + -",[1678,2480,2481],{},"缩小字体",[1678,2483,2484],{},"减号，表示缩小",[1660,2486,2487,2492,2495],{},[1678,2488,2489],{},[53,2490,2491],{},"Ctrl + 0",[1678,2493,2494],{},"恢复默认字体大小",[1678,2496,2497],{},"归零，恢复默认",[1388,2499,2500],{"start":864},[1391,2501,2502,2503],{},"Warp 的特点",[1388,2504,2505,2508,2511,2514,2517],{},[1391,2506,2507],{},"默认颜值比 Terminator 高，不需要额外折腾配色",[1391,2509,2510],{},"支持一直分屏，适合大屏幕开发",[1391,2512,2513],{},"字体渲染比较清楚，观感比 Terminator 亮堂",[1391,2515,2516],{},"支持命令块，长命令输出看起来更清晰",[1391,2518,2519],{},"支持 AI 功能，但不使用 AI 也可以当普通终端使用",[14,2521,2522],{},"首次打开 Warp 时可能需要联网初始化。之后即使离线也可以作为普通终端使用，只是 AI、协作等云端功能不能用。",[14,2524,2525],{},"如果只是想要一个传统、稳定、轻量的终端，可以继续用 Terminator。",[14,2527,2528],{},"如果想要更好看的界面、更现代的交互体验，并且也需要分屏，那么 Warp 是一个很不错的选择。",[1366,2530,2531],{"id":2531},"git",[14,2533,2534],{},[17,2535],{"alt":19,"src":2536},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage215.webp",[14,2538,2539,2540],{},"咱们的Git入门教程：",[1373,2541,2543],{"href":2542},"\u002Fwiki\u002F2023-12-29-git-jiao-xue","Vinci机器人队Git入门教程",[10,2545,2547],{"id":2546},"ros2体系框架","ROS2体系框架",[14,2549,2550],{},[17,2551],{"alt":19,"src":2552},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage216.webp",[14,2554,2555],{},[17,2556],{"alt":19,"src":2557},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage217.webp",[14,2559,2560],{},[17,2561],{"alt":19,"src":2562},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage218.webp",[14,2564,2565],{},[17,2566],{"alt":19,"src":2567},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage219.webp",[14,2569,2570],{},"Client Library就是ROS2的客户端，比如rclcpp，rclpy。",[14,2572,2573],{},"Abstract DDS Layer是DDS抽象层，这样DDS可以实现可插拔，可以随便替换DDS模块。",[14,2575,2576],{},"Intra-process API是进程内通讯API，可以提高通信效率的一类API。",[14,2578,2579],{},[17,2580],{"alt":19,"src":2581},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage220.webp",[14,2583,2584],{},[17,2585],{"alt":19,"src":2586},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage221.webp",[2588,2589,2590],"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":2592},[2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603],{"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":1315,"depth":864,"text":1316},{"id":1363,"depth":864,"text":1364},{"id":1620,"depth":864,"text":1620},{"id":2546,"depth":864,"text":2547},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo",0,"0200","2023-12-30","wiki\u002F2023-12-30-ros2-tutorial","zh-cn:2023-12-30-ros2-tutorial","\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作",false,null,"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","zh-CN","zh-cn",{},{"title":5,"description":19},"_A1Fj6OJOR1Ps1C3YV69a2RzMdGGAZf-Xs8gsH7PgtE",[2623,2628,2629,2634,2639,2644,2649,2654,2659,2664,2669,2674,2679,2684,2689,2694,2699,2704,2709,2714,2719,2724,2729,2734,2739,2744,2748,2753,2757,2762,2767,2772,2777,2782,2787,2792,2797,2802,2807,2812,2817,2822,2827,2832,2837,2842,2847,2852,2857,2862,2867,2872,2877,2882,2887,2892,2897,2902,2907,2912],{"path":2624,"stem":2625,"title":2626,"date":2607,"chapterOrder":2627,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao","wiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍","ROS2介绍","0100",{"path":2604,"stem":2613,"title":5,"date":2607,"chapterOrder":2606,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},{"path":2630,"stem":2631,"title":2632,"date":2607,"chapterOrder":2633,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0300-gong-zuo-kong-jian-yu-gong-neng-bao","wiki\u002F2023-12-30-ros2-tutorial\u002F0300-工作空间与功能包","工作空间与功能包","0300",{"path":2635,"stem":2636,"title":2637,"date":2607,"chapterOrder":2638,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信","四大通信","0400",{"path":2640,"stem":2641,"title":2642,"date":2607,"chapterOrder":2643,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0500-ros2-qi-ta-tong-xin-ji-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F0500-ROS2其他通信机制","ROS2其他通信机制","0500",{"path":2645,"stem":2646,"title":2647,"date":2607,"chapterOrder":2648,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-launch","wiki\u002F2023-12-30-ros2-tutorial\u002F0600-Launch","Launch","0600",{"path":2650,"stem":2651,"title":2652,"date":2607,"chapterOrder":2653,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2","wiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2","回溯rosbag2","0700",{"path":2655,"stem":2656,"title":2657,"date":2607,"chapterOrder":2658,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-zuo-biao-bian-huan-tf","wiki\u002F2023-12-30-ros2-tutorial\u002F0800-坐标变换TF","坐标变换TF","0800",{"path":2660,"stem":2661,"title":2662,"date":2607,"chapterOrder":2663,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0900-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki\u002F2023-12-30-ros2-tutorial\u002F0900-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言","0900",{"path":2665,"stem":2666,"title":2667,"date":2607,"chapterOrder":2668,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1000-stage-ros2-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1000-Stage_Ros2仿真平台","Stage_Ros2仿真平台","1000",{"path":2670,"stem":2671,"title":2672,"date":2607,"chapterOrder":2673,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic","Gezebo Classic","1100-0100",{"path":2675,"stem":2676,"title":2677,"date":2607,"chapterOrder":2678,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-ignitiongazebo","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","1100-0200",{"path":2680,"stem":2681,"title":2682,"date":2607,"chapterOrder":2683,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-gazebosim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-GazeboSim","Gz Sim（Gazebo Harmonic）","1100-0300",{"path":2685,"stem":2686,"title":2687,"date":2607,"chapterOrder":2688,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim","1100-0400",{"path":2690,"stem":2691,"title":2692,"date":2607,"chapterOrder":2693,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-gezebo-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-Gezebo仿真平台","Gezebo仿真平台","1100",{"path":2695,"stem":2696,"title":2697,"date":2607,"chapterOrder":2698,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-humble-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-Humble版本","Humble导航仿真","1200-0100",{"path":2700,"stem":2701,"title":2702,"date":2607,"chapterOrder":2703,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-jazzy-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-Jazzy版本","Jazzy导航仿真","1200-0200",{"path":2705,"stem":2706,"title":2707,"date":2607,"chapterOrder":2708,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-humble2jazzy","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-Humble2Jazzy","Humble与Jazzy导航的差异","1200-0300",{"path":2710,"stem":2711,"title":2712,"date":2607,"chapterOrder":2713,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)","1200",{"path":2715,"stem":2716,"title":2717,"date":2607,"chapterOrder":2718,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-Boost.Aiso","Boost.Asio库","1300-0100-0100",{"path":2720,"stem":2721,"title":2722,"date":2607,"chapterOrder":2723,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2-serial-driver","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2_serial_driver","ROS2 Serial Driver库","1300-0100-0200",{"path":2725,"stem":2726,"title":2727,"date":2607,"chapterOrder":2728,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-chuan-kou-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-串口通信","UART串口通信","1300-0100",{"path":2730,"stem":2731,"title":2732,"date":2607,"chapterOrder":2733,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","SocketCAN","1300-0200-0100",{"path":2735,"stem":2736,"title":2737,"date":2607,"chapterOrder":2738,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2_socketcan","ROS2_SocketCAN","1300-0200-0200",{"path":2740,"stem":2741,"title":2742,"date":2607,"chapterOrder":2743,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-can-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-CAN通信","CAN通信","1300-0200",{"path":2745,"stem":2746,"title":2717,"date":2607,"chapterOrder":2747,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-Boost.Aiso","1300-0300-0100",{"path":2749,"stem":2750,"title":2751,"date":2607,"chapterOrder":2752,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-tcp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-TCP通信","TCP通信","1300-0300",{"path":2754,"stem":2755,"title":2717,"date":2607,"chapterOrder":2756,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-Boost.Aiso","1300-0400-0100",{"path":2758,"stem":2759,"title":2760,"date":2607,"chapterOrder":2761,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-udp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-UDP通信","UDP通信","1300-0400",{"path":2763,"stem":2764,"title":2765,"date":2607,"chapterOrder":2766,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-linux-ying-jian-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-Linux硬件通信","Linux硬件通信","1300",{"path":2768,"stem":2769,"title":2770,"date":2607,"chapterOrder":2771,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-ji-qi-ren-zu-cheng","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-机器人组成","机器人组成","1400-0100",{"path":2773,"stem":2774,"title":2775,"date":2607,"chapterOrder":2776,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-yuan-cheng-kai-fa-ssh","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-远程开发SSH","远程开发SSH","1400-0200-0100",{"path":2778,"stem":2779,"title":2780,"date":2607,"chapterOrder":2781,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-yuan-cheng-fang-wen-zhuo-mian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-远程访问桌面","远程访问桌面","1400-0200-0200",{"path":2783,"stem":2784,"title":2785,"date":2607,"chapterOrder":2786,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-工控机之远程开发环境","工控机之远程开发环境","1400-0200",{"path":2788,"stem":2789,"title":2790,"date":2607,"chapterOrder":2791,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-gong-kong-ji-zhi-wai-jie-usb-she-bei","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-工控机之外接USB设备","工控机之外接USB设备","1400-0300",{"path":2793,"stem":2794,"title":2795,"date":2607,"chapterOrder":2796,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-fen-bu-shi-da-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-分布式搭建","分布式搭建","1400-0400",{"path":2798,"stem":2799,"title":2800,"date":2607,"chapterOrder":2801,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-you-hua-ri-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-优化日志","优化日志","1400-0500",{"path":2803,"stem":2804,"title":2805,"date":2607,"chapterOrder":2806,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-li-cheng-ji-odom","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-里程计Odom","里程计Odom","1400-0600-0100",{"path":2808,"stem":2809,"title":2810,"date":2607,"chapterOrder":2811,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-guan-xing-ji-imu","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-惯性计IMU","惯性计IMU","1400-0600-0200",{"path":2813,"stem":2814,"title":2815,"date":2607,"chapterOrder":2816,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-ji-guang-lei-da-lidar","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-激光雷达LiDAR","激光雷达LiDAR","1400-0600-0300",{"path":2818,"stem":2819,"title":2820,"date":2607,"chapterOrder":2821,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-xiang-ji-camera","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-相机Camera","相机Camera","1400-0600-0400",{"path":2823,"stem":2824,"title":2825,"date":2607,"chapterOrder":2826,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-quan-qiu-ding-wei-gnss","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-全球定位GNSS","全球定位GNSS","1400-0600-0500",{"path":2828,"stem":2829,"title":2830,"date":2607,"chapterOrder":2831,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-shou-bing-joy","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-手柄joy","手柄JOY","1400-0600-0600",{"path":2833,"stem":2834,"title":2835,"date":2607,"chapterOrder":2836,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-jian-pan-kong-zhi-jie-dian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-键盘控制节点","键盘控制节点","1400-0600-0700",{"path":2838,"stem":2839,"title":2840,"date":2607,"chapterOrder":2841,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-ying-jian-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-硬件平台","硬件平台","1400-0600",{"path":2843,"stem":2844,"title":2845,"date":2607,"chapterOrder":2846,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-zuo-biao-xi-yu-hua-ti-guan-xi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-坐标系与话题关系","坐标系与话题关系","1400-0700",{"path":2848,"stem":2849,"title":2850,"date":2607,"chapterOrder":2851,"chapterDepth":864,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-lun-shi-li-cheng-ji-biao-ding","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-轮式里程计标定","轮式里程计标定","1400-0800-0100-0100",{"path":2853,"stem":2854,"title":2855,"date":2607,"chapterOrder":2856,"chapterDepth":864,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-lun-shi-li-cheng-ji-yu-imu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-轮式里程计与IMU融合","轮式里程计与IMU融合","1400-0800-0100-0200",{"path":2858,"stem":2859,"title":2860,"date":2607,"chapterOrder":2861,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-轮式里程计标定与融合","轮式里程计标定与融合","1400-0800-0100",{"path":2863,"stem":2864,"title":2865,"date":2607,"chapterOrder":2866,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-ji-guang-lei-da-gong-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-激光雷达工具","激光雷达工具","1400-0800-0200",{"path":2868,"stem":2869,"title":2870,"date":2607,"chapterOrder":2871,"chapterDepth":89,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-xiang-ji-shi-yong-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-相机使用进阶","相机使用进阶","1400-0800-0300",{"path":2873,"stem":2874,"title":2875,"date":2607,"chapterOrder":2876,"chapterDepth":74,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-ying-jian-ping-tai-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-硬件平台进阶","硬件平台进阶","1400-0800",{"path":2878,"stem":2879,"title":2880,"date":2607,"chapterOrder":2881,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-ji-qi-ren-ying-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-机器人硬件","机器人硬件","1400",{"path":2883,"stem":2884,"title":2885,"date":2607,"chapterOrder":2886,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ros2-control","wiki\u002F2023-12-30-ros2-tutorial\u002F1500-ROS2_Control","ROS2_Control","1500",{"path":2888,"stem":2889,"title":2890,"date":2607,"chapterOrder":2891,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1600-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki\u002F2023-12-30-ros2-tutorial\u002F1600-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂","1600",{"path":2893,"stem":2894,"title":2895,"date":2607,"chapterOrder":2896,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1700-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1700-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)","1700",{"path":2898,"stem":2899,"title":2900,"date":2607,"chapterOrder":2901,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-microros","wiki\u002F2023-12-30-ros2-tutorial\u002F1800-MicroROS","MicroROS","1800",{"path":2903,"stem":2904,"title":2905,"date":2607,"chapterOrder":2906,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-webots-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1900-Webots仿真平台","Webots仿真平台","1900",{"path":2908,"stem":2909,"title":2910,"date":2607,"chapterOrder":2911,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":2614},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-opencv","wiki\u002F2023-12-30-ros2-tutorial\u002F2000-OpenCV","OpenCV","2000",{"path":2610,"stem":2913,"title":2914,"date":2607,"chapterOrder":2615,"chapterDepth":2605,"docKey":2609,"docRoot":2610,"docTitle":2611,"isWikiDoc":860,"isWikiIndex":860},"wiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2机器人操作系统教程",{"variants":2916},[2917,2920,2923,2926,2929],{"path":2918,"localeSlug":2919,"i18nKey":2613},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","en-us",{"path":2921,"localeSlug":2922,"i18nKey":2613},"\u002Fzh-hant\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","zh-hant",{"path":2924,"localeSlug":2925,"i18nKey":2613},"\u002Fzh-hk\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","zh-hk",{"path":2927,"localeSlug":2928,"i18nKey":2613},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","zh-tw",{"path":2604,"localeSlug":2618,"i18nKey":2613},[2918,2616,2921,2616,2924,2616,2927,2616,2604,2616],1784646768365]