[{"data":1,"prerenderedAt":3511},["ShallowReactive",2],{"wiki-page-\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo":3,"wiki-doc-items-\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo":3202,"language-switcher-data-\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo":3495,"wiki-i18n-paths-\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo":3510},{"id":4,"title":5,"body":6,"canonicalPath":3183,"chapterDepth":3184,"chapterOrder":3185,"date":3186,"description":20,"docI18nKey":3187,"docKey":3188,"docRoot":3189,"docTitle":3190,"extension":3191,"i18nKey":3192,"isBlogPost":3193,"isWikiDoc":898,"isWikiIndex":3193,"layout":3194,"legacyPath":3194,"locale":3195,"localeSlug":3196,"meta":3197,"navigation":898,"path":3183,"seo":3198,"sourcePath":3199,"sourceStem":3192,"stem":3200,"wikiDepth":76,"__hash__":3201},"content\u002F_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作.md","Getting Started",{"type":7,"value":8,"toc":3167},"minimark",[9,14,22,27,32,37,42,46,51,59,64,108,111,116,136,141,146,149,154,171,179,207,212,216,221,224,227,230,233,236,238,243,248,251,256,261,268,273,278,284,289,291,296,301,306,309,314,344,349,354,378,383,388,393,423,426,429,434,437,440,444,449,454,459,466,471,476,479,482,518,523,528,531,536,539,544,549,554,557,560,563,568,571,574,581,584,595,602,607,612,615,618,621,626,629,634,649,654,669,672,677,680,685,693,698,703,708,713,717,722,752,755,760,765,770,773,778,781,786,791,796,803,806,811,818,823,828,831,836,848,851,866,871,873,878,982,987,992,997,1001,1006,1011,1014,1019,1024,1027,1031,1036,1044,1052,1060,1063,1066,1071,1074,1079,1082,1090,1093,1098,1101,1106,1109,1114,1117,1119,1124,1129,1134,1137,1142,1147,1152,1157,1162,1202,1207,1210,1215,1220,1222,1225,1230,1235,1241,1246,1251,1256,1259,1264,1267,1272,1275,1280,1282,1287,1292,1297,1302,1304,1307,1312,1315,1318,1321,1326,1331,1334,1339,1344,1349,1354,1358,1363,1366,1371,1397,1402,1406,1411,1419,1422,1425,1428,1460,1463,1529,1536,1541,1546,1551,1555,1559,1569,1591,1606,1613,1632,1635,1645,1651,1654,1659,1662,1667,1670,1675,1680,1685,1691,1696,1699,1704,1708,1711,1716,1735,1740,1887,1890,1913,1923,2231,2240,2243,2260,2264,2267,2270,2273,2313,2316,3079,3096,3099,3102,3105,3108,3113,3120,3124,3129,3134,3139,3144,3147,3150,3153,3158,3163],[10,11,13],"h3",{"id":12},"introduction","Introduction",[15,16,17],"p",{},[18,19],"img",{"alt":20,"src":21},"","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage83.webp",[15,23,24],{},[18,25],{"alt":20,"src":26},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage84.webp",[15,28,29],{},[18,30],{"alt":20,"src":31},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage85.webp",[15,33,34],{},[18,35],{"alt":20,"src":36},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage86.webp",[15,38,39],{},[18,40],{"alt":20,"src":41},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage87.webp",[10,43,45],{"id":44},"terminal-environment-setup","Terminal Environment Setup",[15,47,48],{},[18,49],{"alt":20,"src":50},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage88.webp",[15,52,53,54,58],{},"If you already added this statement to ",[55,56,57],"code",{},"~\u002F.bashrc"," when installing ROS2 above, you don't need to follow this step.",[15,60,61],{},[18,62],{"alt":20,"src":63},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage89.webp",[65,66,70],"pre",{"className":67,"code":68,"language":69,"meta":20,"style":20},"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",[55,71,72,89],{"__ignoreMap":20},[73,74,77,81,85],"span",{"class":75,"line":76},"line",1,[73,78,80],{"class":79},"sj4cs","source",[73,82,84],{"class":83},"sZZnC"," \u002Fopt\u002Fros\u002Fhumble\u002Fsetup.bash",[73,86,88],{"class":87},"sJ8bj","  #将ROS2环境变量配置到当前位置\n",[73,90,92,95,98,102,105],{"class":75,"line":91},2,[73,93,94],{"class":79},"echo",[73,96,97],{"class":83}," \" source \u002Fopt\u002Fros\u002Fhumble\u002Fsetup.bash\"",[73,99,101],{"class":100},"szBVR"," >>",[73,103,104],{"class":83}," ~\u002F.bashrc",[73,106,107],{"class":87},"    #每次启动终端都会运行该句\n",[109,110],"hr",{},[15,112,113],{},[18,114],{"alt":20,"src":115},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage90.webp",[65,117,119],{"className":67,"code":118,"language":69,"meta":20,"style":20},"ros2 run demo_nodes_cpp talker\n",[55,120,121],{"__ignoreMap":20},[73,122,123,127,130,133],{"class":75,"line":76},[73,124,126],{"class":125},"sScJk","ros2",[73,128,129],{"class":83}," run",[73,131,132],{"class":83}," demo_nodes_cpp",[73,134,135],{"class":83}," talker\n",[15,137,138],{},[18,139],{"alt":20,"src":140},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage91.webp",[15,142,143],{},[18,144],{"alt":20,"src":145},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage92.webp",[15,147,148],{},"Use Ctrl+C to cancel program execution.",[15,150,151],{},[18,152],{"alt":20,"src":153},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage93.webp",[65,155,157],{"className":67,"code":156,"language":69,"meta":20,"style":20},"ros2 run demo_nodes_py listener\n",[55,158,159],{"__ignoreMap":20},[73,160,161,163,165,168],{"class":75,"line":76},[73,162,126],{"class":125},[73,164,129],{"class":83},[73,166,167],{"class":83}," demo_nodes_py",[73,169,170],{"class":83}," listener\n",[15,172,173,176],{},[18,174],{"alt":20,"src":175},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage94.webp",[18,177],{"alt":20,"src":178},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage95.webp",[65,180,182],{"className":67,"code":181,"language":69,"meta":20,"style":20},"ros2 run turtlesim turtlesim_node\nros2 run turtlesim turtle_teleop_key\n",[55,183,184,196],{"__ignoreMap":20},[73,185,186,188,190,193],{"class":75,"line":76},[73,187,126],{"class":125},[73,189,129],{"class":83},[73,191,192],{"class":83}," turtlesim",[73,194,195],{"class":83}," turtlesim_node\n",[73,197,198,200,202,204],{"class":75,"line":91},[73,199,126],{"class":125},[73,201,129],{"class":83},[73,203,192],{"class":83},[73,205,206],{"class":83}," turtle_teleop_key\n",[15,208,209],{},[18,210],{"alt":20,"src":211},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage96.webp",[10,213,215],{"id":214},"command-line-operations","Command line operations",[15,217,218],{},[18,219],{"alt":20,"src":220},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage97.webp",[15,222,223],{},"mkdir -p create a new folder",[15,225,226],{},"rm -R  recursively deletes (removes a folder along with all folders and files it contains).",[15,228,229],{},"touch creates a new file",[15,231,232],{},"rm deletes files",[15,234,235],{},"cd .. goes back to the parent directory (cd dot dot).",[109,237],{},[15,239,240],{},[18,241],{"alt":20,"src":242},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage98.webp",[15,244,245],{},[18,246],{"alt":20,"src":247},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage99.webp",[15,249,250],{},"It will pop up a prompt message telling us the parameters to follow.",[15,252,253],{},[18,254],{"alt":20,"src":255},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage100.webp",[15,257,258],{},[18,259],{"alt":20,"src":260},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage101.webp",[15,262,263,264,267],{},"The ",[55,265,266],{},"ros2 node list"," command will list the nodes currently running in ROS 2.",[15,269,270],{},[18,271],{"alt":20,"src":272},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage102.webp",[15,274,275],{},[18,276],{"alt":20,"src":277},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage103.webp",[15,279,280,283],{},[55,281,282],{},"ros2 node info + \u002Fnode_name"," can be used to view the details of the target node.",[15,285,286],{},[18,287],{"alt":20,"src":288},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage104.webp",[15,290,250],{},[15,292,293],{},[18,294],{"alt":20,"src":295},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage105.webp",[15,297,298],{},[18,299],{"alt":20,"src":300},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage106.webp",[15,302,303],{},[18,304],{"alt":20,"src":305},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage107.webp",[15,307,308],{},"The status of the robot's movement can be displayed through topics.",[15,310,311],{},[18,312],{"alt":20,"src":313},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage108.webp",[65,315,317],{"className":67,"code":316,"language":69,"meta":20,"style":20},"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",[55,318,319],{"__ignoreMap":20},[73,320,321,323,326,329,332,335,338,341],{"class":75,"line":76},[73,322,126],{"class":125},[73,324,325],{"class":83}," topic",[73,327,328],{"class":83}," pub",[73,330,331],{"class":79}," --rate",[73,333,334],{"class":79}," 1",[73,336,337],{"class":83}," \u002Fturtle1\u002Fcmd_vel",[73,339,340],{"class":83}," geometry_msgs\u002Fmsg\u002FTwist",[73,342,343],{"class":83}," \"{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}\"\n",[15,345,346],{},[18,347],{"alt":20,"src":348},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage109.webp",[15,350,351],{},[18,352],{"alt":20,"src":353},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage110.webp",[65,355,357],{"className":67,"code":356,"language":69,"meta":20,"style":20},"ros2 service call \u002Fspawn turtlesim\u002Fsrv\u002FSpawn \"{x: 2, y: 2, theta: 0.2, name: ''}\"\n",[55,358,359],{"__ignoreMap":20},[73,360,361,363,366,369,372,375],{"class":75,"line":76},[73,362,126],{"class":125},[73,364,365],{"class":83}," service",[73,367,368],{"class":83}," call",[73,370,371],{"class":83}," \u002Fspawn",[73,373,374],{"class":83}," turtlesim\u002Fsrv\u002FSpawn",[73,376,377],{"class":83}," \"{x: 2, y: 2, theta: 0.2, name: ''}\"\n",[15,379,380],{},[18,381],{"alt":20,"src":382},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage111.webp",[15,384,385],{},[18,386],{"alt":20,"src":387},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage112.webp",[15,389,390],{},[18,391],{"alt":20,"src":392},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage113.webp",[65,394,396],{"className":67,"code":395,"language":69,"meta":20,"style":20},"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",[55,397,398,411],{"__ignoreMap":20},[73,399,400,402,405,408],{"class":75,"line":76},[73,401,126],{"class":125},[73,403,404],{"class":83}," bag",[73,406,407],{"class":83}," record",[73,409,410],{"class":83}," \u002Fturtle1\u002Fcmd_vel\n",[73,412,413,415,417,420],{"class":75,"line":91},[73,414,126],{"class":125},[73,416,404],{"class":83},[73,418,419],{"class":83}," play",[73,421,422],{"class":83}," rosbag2_2022_04_11-17_35_40\u002Frosbag2_2022_04_11-17_35_40_0.db3\n",[15,424,425],{},"ros2 bag record + topic",[15,427,428],{},"Press Ctrl+C to stop, and the recorded data will be saved in the current terminal's directory.",[15,430,431],{},[18,432],{"alt":20,"src":433},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage114.webp",[15,435,436],{},"How can I reproduce it?",[15,438,439],{},"ros2 bag play + folder name",[10,441,443],{"id":442},"ros2-helloworldc","ROS2 HelloWorld(C++)",[15,445,446],{},[18,447],{"alt":20,"src":448},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage115.webp",[15,450,451],{},[18,452],{"alt":20,"src":453},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage116.webp",[15,455,456],{},[18,457],{"alt":20,"src":458},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage117.webp",[460,461,462],"ol",{},[463,464,465],"li",{},"Create a function package",[15,467,468],{},[18,469],{"alt":20,"src":470},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage118.webp",[15,472,473],{},[18,474],{"alt":20,"src":475},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage119.webp",[15,477,478],{},"The instruction is to create a ROS2 package.",[15,480,481],{},"ros2 pkg create + package name + --build-type (build type) + ament_cmake \u002F ament_python + --dependencies (dependencies) + rclcpp (ROS2 C++ client) + --node-name (node name) + node name",[65,483,485],{"className":67,"code":484,"language":69,"meta":20,"style":20},"ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld\n",[55,486,487],{"__ignoreMap":20},[73,488,489,491,494,497,500,503,506,509,512,515],{"class":75,"line":76},[73,490,126],{"class":125},[73,492,493],{"class":83}," pkg",[73,495,496],{"class":83}," create",[73,498,499],{"class":83}," pkg01_helloworld_cpp",[73,501,502],{"class":79}," --build-type",[73,504,505],{"class":83}," ament_cmake",[73,507,508],{"class":79}," --dependencies",[73,510,511],{"class":83}," rclcpp",[73,513,514],{"class":79}," --node-name",[73,516,517],{"class":83}," helloworld\n",[15,519,520],{},[18,521],{"alt":20,"src":522},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage120.webp",[15,524,525],{},[18,526],{"alt":20,"src":527},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage121.webp",[15,529,530],{},"The source file was automatically generated, and the filename matches the node name we specified.",[15,532,533],{},[18,534],{"alt":20,"src":535},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage122.webp",[15,537,538],{},"This is auto-generated content, but it has nothing to do with ROS2.",[15,540,541],{},[18,542],{"alt":20,"src":543},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage123.webp",[15,545,546],{},[18,547],{"alt":20,"src":548},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage124.webp",[15,550,551],{},[18,552],{"alt":20,"src":553},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage125.webp",[15,555,556],{},"If there are more dependent libraries than just this one, press Enter again.",[15,558,559],{},"xxx",[15,561,562],{},"Add the next one.",[15,564,565],{},[18,566],{"alt":20,"src":567},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage126.webp",[15,569,570],{},"10 lines is to find the package",[15,572,573],{},"Line 12 adds executable permissions.",[15,575,576,577,580],{},"The first parameter of ",[55,578,579],{},"add_executable"," is the name of the executable file (by default, it matches the node name and the source file name). The second parameter is the name of the source file.",[15,582,583],{},"Line 17 adds a dependency for our executable — it depends on the RCLCPP library.",[15,585,586,587,590,591,594],{},"Line 22 is to set up an installation directory for our executable program, created under the ",[55,588,589],{},"lib"," directory of the current package, which is ",[55,592,593],{},"workspace_name\u002Finstall\u002Fpackage_name\u002Flib",".",[15,596,597,598,601],{},"After editing the configuration file, compile and use ",[55,599,600],{},"cd.."," to return to the ws directory.",[15,603,604],{},[18,605],{"alt":20,"src":606},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage127.webp",[15,608,609],{},[18,610],{"alt":20,"src":611},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage128.webp",[15,613,614],{},"The icon is green, indicating no warnings or errors.",[15,616,617],{},"If it is yellow, there is a warning.",[15,619,620],{},"If it is red, there is a fatal error.",[15,622,623],{},[18,624],{"alt":20,"src":625},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage129.webp",[15,627,628],{},"Path to the executable binary file",[15,630,631],{},[18,632],{"alt":20,"src":633},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage130.webp",[65,635,637],{"className":67,"code":636,"language":69,"meta":20,"style":20},"source install\u002Fsetup.bash #刷新环境变量\n",[55,638,639],{"__ignoreMap":20},[73,640,641,643,646],{"class":75,"line":76},[73,642,80],{"class":79},[73,644,645],{"class":83}," install\u002Fsetup.bash",[73,647,648],{"class":87}," #刷新环境变量\n",[15,650,651],{},[18,652],{"alt":20,"src":653},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage131.webp",[65,655,657],{"className":67,"code":656,"language":69,"meta":20,"style":20},"ros2 run pkg01_helloworld_cpp helloworld\n",[55,658,659],{"__ignoreMap":20},[73,660,661,663,665,667],{"class":75,"line":76},[73,662,126],{"class":125},[73,664,129],{"class":83},[73,666,499],{"class":83},[73,668,517],{"class":83},[15,670,671],{},"ros2 run package_name executable_name (default matches the node name)",[15,673,674],{},[18,675],{"alt":20,"src":676},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage132.webp",[15,678,679],{},"Edit the ROS2 C++ source file:",[15,681,682],{},[18,683],{"alt":20,"src":684},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage133.webp",[65,686,691],{"className":687,"code":689,"language":690},[688],"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",[55,692,689],{"__ignoreMap":20},[15,694,695],{},[18,696],{"alt":20,"src":697},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage134.webp",[15,699,700],{},[18,701],{"alt":20,"src":702},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage135.webp",[15,704,705],{},[18,706],{"alt":20,"src":707},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage136.webp",[15,709,710],{},[18,711],{"alt":20,"src":712},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage137.webp",[10,714,716],{"id":715},"ros2-helloworldpython","ROS2 HelloWorld(Python)",[15,718,719],{},[18,720],{"alt":20,"src":721},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage138.webp",[65,723,725],{"className":67,"code":724,"language":69,"meta":20,"style":20},"ros2 pkg create pkg02_helloworld_py --build-type ament_python --dependencies rclpy --node-name helloworld\n",[55,726,727],{"__ignoreMap":20},[73,728,729,731,733,735,738,740,743,745,748,750],{"class":75,"line":76},[73,730,126],{"class":125},[73,732,493],{"class":83},[73,734,496],{"class":83},[73,736,737],{"class":83}," pkg02_helloworld_py",[73,739,502],{"class":79},[73,741,742],{"class":83}," ament_python",[73,744,508],{"class":79},[73,746,747],{"class":83}," rclpy",[73,749,514],{"class":79},[73,751,517],{"class":83},[15,753,754],{},"ros2 pkg create + package name + --build-type (build type) + ament_cmake \u002F ament_python + --dependencies (dependencies) + rclpy (ROS2's Python client) + --node-name (node name) + node name",[15,756,757],{},[18,758],{"alt":20,"src":759},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage139.webp",[15,761,762],{},[18,763],{"alt":20,"src":764},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage140.webp",[15,766,767],{},[18,768],{"alt":20,"src":769},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage141.webp",[15,771,772],{},"Same as the node name and the executable binary file.",[15,774,775],{},[18,776],{"alt":20,"src":777},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage142.webp",[15,779,780],{},"By default, there is already code in here, but it has nothing to do with ROS2 — this is standard Python code.",[15,782,783],{},[18,784],{"alt":20,"src":785},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage143.webp",[15,787,788],{},[18,789],{"alt":20,"src":790},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage144.webp",[15,792,793],{},[18,794],{"alt":20,"src":795},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage145.webp",[15,797,798,799,802],{},"The binary executable file maps to the ",[55,800,801],{},"main"," function in the source file.",[15,804,805],{},"How do I compile it?",[15,807,808],{},[18,809],{"alt":20,"src":810},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage146.webp",[15,812,813,814,817],{},"First, go back to the parent directory to reach the ",[55,815,816],{},"ws"," directory.",[15,819,820],{},[18,821],{"alt":20,"src":822},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage147.webp",[15,824,825],{},[18,826],{"alt":20,"src":827},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage148.webp",[15,829,830],{},"There's a yellow warning, but it doesn't affect our usage.",[15,832,833],{},[18,834],{"alt":20,"src":835},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage149.webp",[65,837,839],{"className":67,"code":838,"language":69,"meta":20,"style":20},"source .\u002Finstall\u002Fsetup.bash\n",[55,840,841],{"__ignoreMap":20},[73,842,843,845],{"class":75,"line":76},[73,844,80],{"class":79},[73,846,847],{"class":83}," .\u002Finstall\u002Fsetup.bash\n",[15,849,850],{},"Refresh environment variables",[65,852,854],{"className":67,"code":853,"language":69,"meta":20,"style":20},"ros2 run pkg02_helloworld_py helloworld\n",[55,855,856],{"__ignoreMap":20},[73,857,858,860,862,864],{"class":75,"line":76},[73,859,126],{"class":125},[73,861,129],{"class":83},[73,863,737],{"class":83},[73,865,517],{"class":83},[15,867,868],{},[18,869],{"alt":20,"src":870},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage150.webp",[109,872],{},[15,874,875],{},[18,876],{"alt":20,"src":877},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage151.webp",[65,879,883],{"className":880,"code":881,"language":882,"meta":20,"style":20},"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",[55,884,885,894,900,912,918,936,947,953,958,976],{"__ignoreMap":20},[73,886,887,890],{"class":75,"line":76},[73,888,889],{"class":100},"import",[73,891,893],{"class":892},"sVt8B"," rclpy\n",[73,895,896],{"class":75,"line":91},[73,897,899],{"emptyLinePlaceholder":898},true,"\n",[73,901,903,906,909],{"class":75,"line":902},3,[73,904,905],{"class":100},"def",[73,907,908],{"class":125}," main",[73,910,911],{"class":892},"():\n",[73,913,915],{"class":75,"line":914},4,[73,916,917],{"class":892},"    rclpy.init()\n",[73,919,921,924,927,930,933],{"class":75,"line":920},5,[73,922,923],{"class":892},"    node ",[73,925,926],{"class":100},"=",[73,928,929],{"class":892}," rclpy.create_node(",[73,931,932],{"class":83},"\"helloworld_py_node\"",[73,934,935],{"class":892},")\n",[73,937,939,942,945],{"class":75,"line":938},6,[73,940,941],{"class":892},"    node.get_logger().info(",[73,943,944],{"class":83},"\"hello world by python!\"",[73,946,935],{"class":892},[73,948,950],{"class":75,"line":949},7,[73,951,952],{"class":892},"    rclpy.shutdown()\n",[73,954,956],{"class":75,"line":955},8,[73,957,899],{"emptyLinePlaceholder":898},[73,959,961,964,967,970,973],{"class":75,"line":960},9,[73,962,963],{"class":100},"if",[73,965,966],{"class":892}," name ",[73,968,969],{"class":100},"==",[73,971,972],{"class":83}," '__main__'",[73,974,975],{"class":892},":\n",[73,977,979],{"class":75,"line":978},10,[73,980,981],{"class":892},"    main()\n",[15,983,984],{},[18,985],{"alt":20,"src":986},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage152.webp",[15,988,989],{},[18,990],{"alt":20,"src":991},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage153.webp",[15,993,994],{},[18,995],{"alt":20,"src":996},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage154.webp",[10,998,1000],{"id":999},"runtime-optimization-bash-terminal-environment","Runtime Optimization (Bash Terminal Environment)",[15,1002,1003],{},[18,1004],{"alt":20,"src":1005},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage155.webp",[15,1007,1008],{},[18,1009],{"alt":20,"src":1010},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage156.webp",[15,1012,1013],{},"To use an absolute path",[15,1015,1016],{},[18,1017],{"alt":20,"src":1018},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage157.webp",[15,1020,1021],{},[18,1022],{"alt":20,"src":1023},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage158.webp",[15,1025,1026],{},"Try to avoid doing this. ROS2 has a bug where function packages from different workspaces may get mixed up, so don't enable global runtime optimization for now.",[10,1028,1030],{"id":1029},"vscode-environment-setup","VScode environment setup",[15,1032,1033],{},[18,1034],{"alt":20,"src":1035},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage159.webp",[15,1037,1038,1041],{},[18,1039],{"alt":20,"src":1040},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage160.webp",[18,1042],{"alt":20,"src":1043},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage161.webp",[15,1045,1046,1049],{},[18,1047],{"alt":20,"src":1048},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage162.webp",[18,1050],{"alt":20,"src":1051},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage163.webp",[15,1053,1054,1057],{},[18,1055],{"alt":20,"src":1056},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage164.webp",[18,1058],{"alt":20,"src":1059},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage165.webp",[15,1061,1062],{},"Looking at C\u002FC++, Python, CMake, XML, and YAML files, code syntax highlighting will be displayed.",[15,1064,1065],{},"When writing ROS2 message code, it can provide features like code completion.",[15,1067,1068],{},[18,1069],{"alt":20,"src":1070},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage166.webp",[15,1072,1073],{},"Write the plugins needed for the robot model, and also enable code completion.",[15,1075,1076],{},[18,1077],{"alt":20,"src":1078},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage167.webp",[15,1080,1081],{},"ROS2 frequently generates PDF files, and this plugin can be used to view them.",[15,1083,1084,1087],{},[18,1085],{"alt":20,"src":1086},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage168.webp",[18,1088],{"alt":20,"src":1089},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage169.webp",[15,1091,1092],{},"It is recommended to install ROS2 plugins only after they have matured.",[15,1094,1095],{},[18,1096],{"alt":20,"src":1097},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage170.webp",[15,1099,1100],{},"You can try installing this official plugin.",[15,1102,1103],{},[18,1104],{"alt":20,"src":1105},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage171.webp",[15,1107,1108],{},"AI code completion",[15,1110,1111],{},[18,1112],{"alt":20,"src":1113},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage172.webp",[15,1115,1116],{},"MarkDown highlighting",[109,1118],{},[15,1120,1121],{},[18,1122],{"alt":20,"src":1123},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage173.webp",[15,1125,1126],{},[18,1127],{"alt":20,"src":1128},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage174.webp",[15,1130,1131],{},[18,1132],{"alt":20,"src":1133},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage175.webp",[15,1135,1136],{},"Although an error is reported, the program can still run normally. (The main issue is that VSCode cannot find the header file.)",[15,1138,1139],{},[18,1140],{"alt":20,"src":1141},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage176.webp",[15,1143,1144],{},[18,1145],{"alt":20,"src":1146},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage177.webp",[15,1148,1149],{},[18,1150],{"alt":20,"src":1151},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage178.webp",[15,1153,1154],{},[18,1155],{"alt":20,"src":1156},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage179.webp",[15,1158,1159],{},[18,1160],{"alt":20,"src":1161},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage180.webp",[65,1163,1167],{"className":1164,"code":1165,"language":1166,"meta":20,"style":20},"language-JSON shiki shiki-themes github-light github-dark","            \"includePath\": [\n                \"${default}\",\n                \"${workspaceFolder}\u002F**\",\n                \"\u002Fopt\u002Fros\u002Fhumble\u002Finclude\u002F**\"\n            ],\n","JSON",[55,1168,1169,1177,1185,1192,1197],{"__ignoreMap":20},[73,1170,1171,1174],{"class":75,"line":76},[73,1172,1173],{"class":83},"            \"includePath\"",[73,1175,1176],{"class":892},": [\n",[73,1178,1179,1182],{"class":75,"line":91},[73,1180,1181],{"class":83},"                \"${default}\"",[73,1183,1184],{"class":892},",\n",[73,1186,1187,1190],{"class":75,"line":902},[73,1188,1189],{"class":83},"                \"${workspaceFolder}\u002F**\"",[73,1191,1184],{"class":892},[73,1193,1194],{"class":75,"line":914},[73,1195,1196],{"class":83},"                \"\u002Fopt\u002Fros\u002Fhumble\u002Finclude\u002F**\"\n",[73,1198,1199],{"class":75,"line":920},[73,1200,1201],{"class":892},"            ],\n",[15,1203,1204],{},[18,1205],{"alt":20,"src":1206},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage181.webp",[15,1208,1209],{},"\u002F** represents including all subsets under this folder.",[15,1211,1212],{},[18,1213],{"alt":20,"src":1214},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage182.webp",[15,1216,1217],{},[18,1218],{"alt":20,"src":1219},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage183.webp",[109,1221],{},[15,1223,1224],{},"Press Ctrl + ` (the key below ESC) to open the VS Code terminal.",[15,1226,1227],{},[18,1228],{"alt":20,"src":1229},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage184.webp",[15,1231,1232],{},[18,1233],{"alt":20,"src":1234},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage185.webp",[15,1236,263,1237,1240],{},[55,1238,1239],{},"--node-name"," parameter is also optional. If not configured, there will be no source file and no mapping from the executable file to the source file.",[15,1242,1243],{},[18,1244],{"alt":20,"src":1245},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage186.webp",[15,1247,1248],{},[18,1249],{"alt":20,"src":1250},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage187.webp",[15,1252,1253],{},[18,1254],{"alt":20,"src":1255},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage188.webp",[15,1257,1258],{},"No changes needed; it has already been generated by default.",[15,1260,1261],{},[18,1262],{"alt":20,"src":1263},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage189.webp",[15,1265,1266],{},"Return to the WS directory to compile (but at this point, the compilation will build all the packages under the entire WS directory).",[15,1268,1269],{},[18,1270],{"alt":20,"src":1271},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage190.webp",[15,1273,1274],{},"Refresh the environment variables and run.",[15,1276,1277],{},[18,1278],{"alt":20,"src":1279},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage191.webp",[109,1281],{},[15,1283,1284],{},[18,1285],{"alt":20,"src":1286},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage192.webp",[15,1288,1289],{},[18,1290],{"alt":20,"src":1291},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage193.webp",[15,1293,1294],{},[18,1295],{"alt":20,"src":1296},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage194.webp",[15,1298,1299],{},[18,1300],{"alt":20,"src":1301},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage195.webp",[109,1303],{},[15,1305,1306],{},"How do I add multiple source files to a feature package?",[15,1308,1309],{},[18,1310],{"alt":20,"src":1311},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage196.webp",[15,1313,1314],{},"Create a new file, for example hellovscode2.cpp.",[15,1316,1317],{},"However, at this point the file is isolated—it has no configuration, and accordingly, it will not be executed after compilation.",[15,1319,1320],{},"To compile and execute this file, we must configure the relevant configuration files.",[15,1322,1323],{},[18,1324],{"alt":20,"src":1325},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage197.webp",[15,1327,1328],{},[18,1329],{"alt":20,"src":1330},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage198.webp",[15,1332,1333],{},"You don't need the selected ones; you can delete them.",[15,1335,1336],{},[18,1337],{"alt":20,"src":1338},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage199.webp",[15,1340,1341],{},[18,1342],{"alt":20,"src":1343},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage200.webp",[15,1345,1346],{},[18,1347],{"alt":20,"src":1348},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage201.webp",[15,1350,1351],{},[18,1352],{"alt":20,"src":1353},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage202.webp",[10,1355,1357],{"id":1356},"build-optimization-colcon-build","Build Optimization (colcon build)",[15,1359,1360],{},[18,1361],{"alt":20,"src":1362},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage203.webp",[15,1364,1365],{},"I usually do a full build of the files in the WS directory.",[15,1367,1368],{},[18,1369],{"alt":20,"src":1370},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage204.webp",[65,1372,1374],{"className":67,"code":1373,"language":69,"meta":20,"style":20},"colcon build --packages-select xxx xxx xxx #可以指向多个包\n",[55,1375,1376],{"__ignoreMap":20},[73,1377,1378,1381,1384,1387,1390,1392,1394],{"class":75,"line":76},[73,1379,1380],{"class":125},"colcon",[73,1382,1383],{"class":83}," build",[73,1385,1386],{"class":79}," --packages-select",[73,1388,1389],{"class":83}," xxx",[73,1391,1389],{"class":83},[73,1393,1389],{"class":83},[73,1395,1396],{"class":87}," #可以指向多个包\n",[15,1398,1399],{},[18,1400],{"alt":20,"src":1401},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage205.webp",[10,1403,1405],{"id":1404},"advanced-vscode-environment-setup","Advanced VScode Environment Setup",[1407,1408,1410],"h4",{"id":1409},"clangd-plugin-code-completion-optional-but-recommended","clangd plugin code completion (optional, but recommended)",[15,1412,1413],{},[1414,1415,1416],"a",{"href":1416,"rel":1417},"https:\u002F\u002Fcolcon.readthedocs.io\u002Fen\u002Freleased\u002Findex.html",[1418],"nofollow",[15,1420,1421],{},"Since the C\u002FC++ plugin performs terribly in large projects, we choose to use the clangd plugin from LLVM for code suggestions.",[15,1423,1424],{},"However, clangd relies on CMake to generate a compilation information file, so we need a few steps to generate that file.",[15,1426,1427],{},"Since ROS2 does not have a single standardized CMakeLists like ROS1, configuring it is not as convenient as ROS1.",[460,1429,1430],{},[463,1431,1432,1433,1443],{},"Configure colcon build parameters",[460,1434,1435],{},[463,1436,1437,1438,1442],{},"Method 1: (Not recommended) Use this command ",[1439,1440,1441],"strong",{},"every time"," you compile:",[65,1444,1446],{"className":67,"code":1445,"language":69,"meta":20,"style":20},"colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[55,1447,1448],{"__ignoreMap":20},[73,1449,1450,1452,1454,1457],{"class":75,"line":76},[73,1451,1380],{"class":125},[73,1453,1383],{"class":83},[73,1455,1456],{"class":79}," --cmake-args",[73,1458,1459],{"class":79}," -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[15,1461,1462],{},"Equivalent to writing it in the CMake file (generally not recommended to modify CMakeLists).",[65,1464,1466],{"className":67,"code":1465,"language":69,"meta":20,"style":20},"set(CMAKE_EXPORT_COMPILE_COMMANDS ON)\n```\n5.  Method 2: Global Parameters (Recommended)\n\n```bash\nmkdir ~\u002F.colcon\n\nvim ~\u002F.colcon\u002Fdefaults.yaml\n",[55,1467,1468,1484,1489,1497,1501,1509,1517,1521],{"__ignoreMap":20},[73,1469,1470,1473,1476,1479,1482],{"class":75,"line":76},[73,1471,1472],{"class":79},"set",[73,1474,1475],{"class":892},"(",[73,1477,1478],{"class":83},"CMAKE_EXPORT_COMPILE_COMMANDS",[73,1480,1481],{"class":83}," ON",[73,1483,935],{"class":892},[73,1485,1486],{"class":75,"line":91},[73,1487,1488],{"class":83},"```\n",[73,1490,1491,1494],{"class":75,"line":902},[73,1492,1493],{"class":125},"5.",[73,1495,1496],{"class":83},"  Method 2: Global Parameters (Recommended)\n",[73,1498,1499],{"class":75,"line":914},[73,1500,899],{"emptyLinePlaceholder":898},[73,1502,1503,1506],{"class":75,"line":920},[73,1504,1505],{"class":83},"```",[73,1507,1508],{"class":125},"bash\n",[73,1510,1511,1514],{"class":75,"line":938},[73,1512,1513],{"class":125},"mkdir",[73,1515,1516],{"class":83}," ~\u002F.colcon\n",[73,1518,1519],{"class":75,"line":949},[73,1520,899],{"emptyLinePlaceholder":898},[73,1522,1523,1526],{"class":75,"line":955},[73,1524,1525],{"class":125},"vim",[73,1527,1528],{"class":83}," ~\u002F.colcon\u002Fdefaults.yaml\n",[15,1530,1531,1532,1535],{},"Press the ",[55,1533,1534],{},"insert（插入）"," button.",[15,1537,1538],{},[18,1539],{"alt":20,"src":1540},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage206.webp",[1542,1543,1545],"h1",{"id":1544},"_11-microcontroller-environment-setup","1.1 Microcontroller Environment Setup",[1547,1548,1550],"h2",{"id":1549},"_111-microcontroller-development-environment-setup","1.1.1 Microcontroller Development Environment Setup",[10,1552,1554],{"id":1553},"_1111-stm32-development-environment-setup","1.1.1.1 STM32 Development Environment Setup",[1407,1556,1558],{"id":1557},"_11111-installing-keil-mdk","1.1.1.1.1 Installing Keil MDK",[15,1560,1561,1564,1565,1568],{},[1439,1562,1563],{},"Keil MDK"," is a microcontroller development tool launched by ARM, which is currently the most widely used development environment for STM32 microcontrollers. It integrates with the ",[1439,1566,1567],{},"STM32CubeMX"," code generation tool to quickly build STM32 microcontroller projects.",[65,1570,1572],{"className":67,"code":1571,"language":69,"meta":20,"style":20},"build:\n  cmake-args:\n    - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[55,1573,1574,1579,1584],{"__ignoreMap":20},[73,1575,1576],{"class":75,"line":76},[73,1577,1578],{"class":125},"build:\n",[73,1580,1581],{"class":75,"line":91},[73,1582,1583],{"class":125},"  cmake-args:\n",[73,1585,1586,1589],{"class":75,"line":902},[73,1587,1588],{"class":125},"    -",[73,1590,1459],{"class":79},[15,1592,1593,1594,1597,1598,1601,1602,1605],{},"Press ",[55,1595,1596],{},"ESC",", then press ",[55,1599,1600],{},":wq",", and finally press ",[55,1603,1604],{},"Enter(回车)"," to save successfully.",[15,1607,1608,1609,1612],{},"Normally during compilation, using ",[55,1610,1611],{},"colcon build"," will automatically enable the CMAKE_EXPORT_COMPILE_COMMANDS=ON parameter.",[460,1614,1615],{"start":91},[463,1616,1617,1618],{},"Then configure the clangd plugin.",[460,1619,1620,1629],{},[463,1621,1622,1623,1626],{},"First, download the clangd plugin.",[1624,1625],"br",{},[18,1627],{"alt":20,"src":1628},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage207.webp",[463,1630,1631],{},"Download the clangd file",[15,1633,1634],{},"Hold down Ctrl+Shift+P to open the search box.",[15,1636,1637,1638,1641,1642,1644],{},"Enter ",[55,1639,1640],{},"clangd",", find the \"Download Language Server\" option, and click to install ",[55,1643,1640],{}," (please ensure a stable internet connection).",[65,1646,1649],{"className":1647,"code":1648,"language":690},[688],"![](https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage208.webp)\n\n6.  Next, configure clangd:\n",[55,1650,1648],{"__ignoreMap":20},[15,1652,1653],{},"Disable C\u002FC++ code suggestion features.",[15,1655,1656],{},[18,1657],{"alt":20,"src":1658},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage209.webp",[15,1660,1661],{},"If the pop-up shown above does not appear, you can manually close it. Again, press Ctrl+Shift+P, type \"settings\", and then find the option shown in the image below.",[15,1663,1664],{},[18,1665],{"alt":20,"src":1666},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage210.webp",[15,1668,1669],{},"Find the option shown in the image below and change it to disabled.",[15,1671,1672],{},[55,1673,1674],{},"\"C_Cpp.intelliSenseEngine\": \"disabled\"",[15,1676,1677],{},[18,1678],{"alt":20,"src":1679},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage211.webp",[460,1681,1682],{"start":914},[463,1683,1684],{},"Restart clangd",[15,1686,1687,1688,1690],{},"Then press Ctrl+Shift+P, search for \"clangd\", and find the option shown in the image below (before restarting the clangd language server, you need to run ",[55,1689,1611],{}," first).",[15,1692,1693],{},[18,1694],{"alt":20,"src":1695},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage212.webp",[15,1697,1698],{},"The code hints are working normally now.",[15,1700,1701],{},[18,1702],{"alt":20,"src":1703},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage213.webp",[10,1705,1707],{"id":1706},"install-other-tools","Install other tools",[1407,1709,1710],{"id":1710},"terminal",[1712,1713,1715],"h5",{"id":1714},"we-choose-to-install-terminator-optional-depends-on-personal-preferencetheres-an-even-better-one-called-warp-see-below","We choose to install Terminator (optional, depends on personal preference—there's an even better one called Warp, see below).",[65,1717,1719],{"className":67,"code":1718,"language":69,"meta":20,"style":20},"sudo apt install terminator\n",[55,1720,1721],{"__ignoreMap":20},[73,1722,1723,1726,1729,1732],{"class":75,"line":76},[73,1724,1725],{"class":125},"sudo",[73,1727,1728],{"class":83}," apt",[73,1730,1731],{"class":83}," install",[73,1733,1734],{"class":83}," terminator\n",[15,1736,1737],{},[18,1738],{"alt":20,"src":1739},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage214.webp",[1741,1742,1743,1759],"table",{},[1744,1745,1746],"thead",{},[1747,1748,1749,1753,1756],"tr",{},[1750,1751,1752],"th",{},"Shortcut keys",[1750,1754,1755],{},"Function",[1750,1757,1758],{},"Memory techniques",[1760,1761,1762,1779,1795,1810,1826,1839,1855,1871],"tbody",{},[1747,1763,1764,1770,1773],{},[1765,1766,1767],"td",{},[55,1768,1769],{},"Ctrl + Shift + E",[1765,1771,1772],{},"Vertical split screen, left and right split",[1765,1774,1775,1778],{},[1439,1776,1777],{},"E = East",", open a window to the east, meaning left-right split.",[1747,1780,1781,1786,1789],{},[1765,1782,1783],{},[55,1784,1785],{},"Ctrl + Shift + O",[1765,1787,1788],{},"Horizontal split screen, top and bottom split",[1765,1790,1791,1794],{},[1439,1792,1793],{},"O = Over \u002F Under",", stacked vertically",[1747,1796,1797,1802,1805],{},[1765,1798,1799],{},[55,1800,1801],{},"Ctrl + Shift + S",[1765,1803,1804],{},"Hide\u002FShow scrollbar",[1765,1806,1807],{},[1439,1808,1809],{},"S = Scrollbar",[1747,1811,1812,1817,1820],{},[1765,1813,1814],{},[55,1815,1816],{},"F11",[1765,1818,1819],{},"Full screen \u002F Exit full screen",[1765,1821,1822,1825],{},[1439,1823,1824],{},"F = Fullscreen"," — F11 has always been the fullscreen key for many applications.",[1747,1827,1828,1833,1836],{},[1765,1829,1830],{},[55,1831,1832],{},"Ctrl + Tab",[1765,1834,1835],{},"Switch between different panes",[1765,1837,1838],{},"Similar to switching tabs in a browser, it cycles through them.",[1747,1840,1841,1846,1849],{},[1765,1842,1843],{},[55,1844,1845],{},"Ctrl + L",[1765,1847,1848],{},"Clear screen",[1765,1850,1851,1854],{},[1439,1852,1853],{},"L in \"clear L\""," can also be understood as \"pull to a new page.\"",[1747,1856,1857,1862,1865],{},[1765,1858,1859],{},[55,1860,1861],{},"Ctrl + Shift + W",[1765,1863,1864],{},"Close the current pane.",[1765,1866,1867,1870],{},[1439,1868,1869],{},"W = Window",", closes the current small window.",[1747,1872,1873,1878,1881],{},[1765,1874,1875],{},[55,1876,1877],{},"Ctrl + Shift + Q",[1765,1879,1880],{},"Exit the entire Terminator.",[1765,1882,1883,1886],{},[1439,1884,1885],{},"Q = Quit",", exits the program.",[15,1888,1889],{},"Because its font is very dark, you need to adjust the settings.",[65,1891,1893],{"className":67,"code":1892,"language":69,"meta":20,"style":20},"cp ~\u002F.config\u002Fterminator\u002Fconfig ~\u002F.config\u002Fterminator\u002Fconfig.bak\nvim ~\u002F.config\u002Fterminator\u002Fconfig\n",[55,1894,1895,1906],{"__ignoreMap":20},[73,1896,1897,1900,1903],{"class":75,"line":76},[73,1898,1899],{"class":125},"cp",[73,1901,1902],{"class":83}," ~\u002F.config\u002Fterminator\u002Fconfig",[73,1904,1905],{"class":83}," ~\u002F.config\u002Fterminator\u002Fconfig.bak\n",[73,1907,1908,1910],{"class":75,"line":91},[73,1909,1525],{"class":125},[73,1911,1912],{"class":83}," ~\u002F.config\u002Fterminator\u002Fconfig\n",[15,1914,1593,1915,1918,1919,1922],{},[55,1916,1917],{},"ggdG",", note the case.\nThen press the ",[55,1920,1921],{},"insert"," button.\nThen set the file content to:",[65,1924,1926],{"className":67,"code":1925,"language":69,"meta":20,"style":20},"[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",[55,1927,1928,1933,1944,1954,1964,1973,1982,1992,1996,2001,2005,2011,2017,2028,2038,2058,2063,2074,2084,2094,2104,2109,2120,2125,2136,2141,2147,2152,2158,2169,2180,2194,2200,2210,2220,2225],{"__ignoreMap":20},[73,1929,1930],{"class":75,"line":76},[73,1931,1932],{"class":892},"[global_config]\n",[73,1934,1935,1938,1941],{"class":75,"line":91},[73,1936,1937],{"class":125},"  title_transmit_bg_color",[73,1939,1940],{"class":83}," =",[73,1942,1943],{"class":83}," \"#31363b\"\n",[73,1945,1946,1949,1951],{"class":75,"line":902},[73,1947,1948],{"class":125},"  title_transmit_fg_color",[73,1950,1940],{"class":83},[73,1952,1953],{"class":83}," \"#fcfcfc\"\n",[73,1955,1956,1959,1961],{"class":75,"line":914},[73,1957,1958],{"class":125},"  title_receive_bg_color",[73,1960,1940],{"class":83},[73,1962,1963],{"class":83}," \"#232629\"\n",[73,1965,1966,1969,1971],{"class":75,"line":920},[73,1967,1968],{"class":125},"  title_receive_fg_color",[73,1970,1940],{"class":83},[73,1972,1953],{"class":83},[73,1974,1975,1978,1980],{"class":75,"line":938},[73,1976,1977],{"class":125},"  title_inactive_bg_color",[73,1979,1940],{"class":83},[73,1981,1963],{"class":83},[73,1983,1984,1987,1989],{"class":75,"line":949},[73,1985,1986],{"class":125},"  title_inactive_fg_color",[73,1988,1940],{"class":83},[73,1990,1991],{"class":83}," \"#bdc3c7\"\n",[73,1993,1994],{"class":75,"line":955},[73,1995,899],{"emptyLinePlaceholder":898},[73,1997,1998],{"class":75,"line":960},[73,1999,2000],{"class":892},"[keybindings]\n",[73,2002,2003],{"class":75,"line":978},[73,2004,899],{"emptyLinePlaceholder":898},[73,2006,2008],{"class":75,"line":2007},11,[73,2009,2010],{"class":892},"[profiles]\n",[73,2012,2014],{"class":75,"line":2013},12,[73,2015,2016],{"class":892},"  [[default]]\n",[73,2018,2020,2023,2025],{"class":75,"line":2019},13,[73,2021,2022],{"class":125},"    use_theme_colors",[73,2024,1940],{"class":83},[73,2026,2027],{"class":83}," False\n",[73,2029,2031,2034,2036],{"class":75,"line":2030},14,[73,2032,2033],{"class":125},"    use_system_font",[73,2035,1940],{"class":83},[73,2037,2027],{"class":83},[73,2039,2041,2044,2046,2049,2052,2055],{"class":75,"line":2040},15,[73,2042,2043],{"class":125},"    font",[73,2045,1940],{"class":83},[73,2047,2048],{"class":83}," Noto",[73,2050,2051],{"class":83}," Sans",[73,2053,2054],{"class":83}," Mono",[73,2056,2057],{"class":79}," 11\n",[73,2059,2061],{"class":75,"line":2060},16,[73,2062,899],{"emptyLinePlaceholder":898},[73,2064,2066,2069,2071],{"class":75,"line":2065},17,[73,2067,2068],{"class":125},"    background_type",[73,2070,1940],{"class":83},[73,2072,2073],{"class":83}," solid\n",[73,2075,2077,2080,2082],{"class":75,"line":2076},18,[73,2078,2079],{"class":125},"    background_color",[73,2081,1940],{"class":83},[73,2083,1963],{"class":83},[73,2085,2087,2090,2092],{"class":75,"line":2086},19,[73,2088,2089],{"class":125},"    foreground_color",[73,2091,1940],{"class":83},[73,2093,1953],{"class":83},[73,2095,2097,2100,2102],{"class":75,"line":2096},20,[73,2098,2099],{"class":125},"    cursor_color",[73,2101,1940],{"class":83},[73,2103,1953],{"class":83},[73,2105,2107],{"class":75,"line":2106},21,[73,2108,899],{"emptyLinePlaceholder":898},[73,2110,2112,2115,2117],{"class":75,"line":2111},22,[73,2113,2114],{"class":125},"    palette",[73,2116,1940],{"class":83},[73,2118,2119],{"class":83}," \"#232629:#ed1515:#11d116:#f67400:#1d99f3:#9b59b6:#1abc9c:#fcfcfc:#7f8c8d:#ff5555:#50fa7b:#fdbc4b:#3daee9:#ff79c6:#8be9fd:#ffffff\"\n",[73,2121,2123],{"class":75,"line":2122},23,[73,2124,899],{"emptyLinePlaceholder":898},[73,2126,2128,2131,2133],{"class":75,"line":2127},24,[73,2129,2130],{"class":125},"    scrollback_infinite",[73,2132,1940],{"class":83},[73,2134,2135],{"class":83}," True\n",[73,2137,2139],{"class":75,"line":2138},25,[73,2140,899],{"emptyLinePlaceholder":898},[73,2142,2144],{"class":75,"line":2143},26,[73,2145,2146],{"class":892},"[layouts]\n",[73,2148,2150],{"class":75,"line":2149},27,[73,2151,2016],{"class":892},[73,2153,2155],{"class":75,"line":2154},28,[73,2156,2157],{"class":892},"    [[[window0]]]\n",[73,2159,2161,2164,2166],{"class":75,"line":2160},29,[73,2162,2163],{"class":79},"      type",[73,2165,1940],{"class":83},[73,2167,2168],{"class":83}," Window\n",[73,2170,2172,2175,2177],{"class":75,"line":2171},30,[73,2173,2174],{"class":125},"      parent",[73,2176,1940],{"class":83},[73,2178,2179],{"class":83}," \"\"\n",[73,2181,2183,2186,2188,2191],{"class":75,"line":2182},31,[73,2184,2185],{"class":125},"      size",[73,2187,1940],{"class":83},[73,2189,2190],{"class":83}," 920,",[73,2192,2193],{"class":79}," 660\n",[73,2195,2197],{"class":75,"line":2196},32,[73,2198,2199],{"class":892},"    [[[child1]]]\n",[73,2201,2203,2205,2207],{"class":75,"line":2202},33,[73,2204,2163],{"class":79},[73,2206,1940],{"class":83},[73,2208,2209],{"class":83}," Terminal\n",[73,2211,2213,2215,2217],{"class":75,"line":2212},34,[73,2214,2174],{"class":125},[73,2216,1940],{"class":83},[73,2218,2219],{"class":83}," window0\n",[73,2221,2223],{"class":75,"line":2222},35,[73,2224,899],{"emptyLinePlaceholder":898},[73,2226,2228],{"class":75,"line":2227},36,[73,2229,2230],{"class":892},"[plugins]\n",[15,2232,2233,2234,2236,2237,2239],{},"Finally, press ",[55,2235,1596],{},", type ",[55,2238,1600],{}," to save and exit.",[15,2241,2242],{},"Then completely close Terminator, and reopen it.\nThis configuration will do several things:",[460,2244,2245,2248,2251,2254,2257],{},[463,2246,2247],{},"Background: a deep gray close to Konsole Breeze, not pure black.",[463,2249,2250],{},"Font color: nearly pure white, much brighter than before.",[463,2252,2253],{},"Blue: Switch to a brighter KDE blue",[463,2255,2256],{},"Green\u002Fyellow\u002Fcyan: also overall brightening.",[463,2258,2259],{},"Top red title bar: change to gray, no longer so glaring.",[1712,2261,2263],{"id":2262},"warp-terminal-recommended-looks-better-also-supports-split-screen","Warp Terminal (recommended, looks better, also supports split screen)",[15,2265,2266],{},"Compared to Terminator, Warp Terminal's default appearance is more modern, the font is clearer, and the interface is brighter.",[15,2268,2269],{},"Most importantly, it also supports multi-pane split screens like Terminator, so it can serve as a modern replacement for Terminator.",[15,2271,2272],{},"However, note that Warp's keyboard shortcuts are not exactly the same as Terminator's.",[460,2274,2275],{},[463,2276,2277,2278],{},"Install",[460,2279,2280],{},[463,2281,2282,2283],{},"Ubuntu \u002F Debian installation",[65,2284,2286],{"className":67,"code":2285,"language":69,"meta":20,"style":20},"wget -O warp-terminal.deb \"https:\u002F\u002Fapp.warp.dev\u002Fdownload?package=deb\"\nsudo apt install .\u002Fwarp-terminal.deb\n",[55,2287,2288,2302],{"__ignoreMap":20},[73,2289,2290,2293,2296,2299],{"class":75,"line":76},[73,2291,2292],{"class":125},"wget",[73,2294,2295],{"class":79}," -O",[73,2297,2298],{"class":83}," warp-terminal.deb",[73,2300,2301],{"class":83}," \"https:\u002F\u002Fapp.warp.dev\u002Fdownload?package=deb\"\n",[73,2303,2304,2306,2308,2310],{"class":75,"line":91},[73,2305,1725],{"class":125},[73,2307,1728],{"class":83},[73,2309,1731],{"class":83},[73,2311,2312],{"class":83}," .\u002Fwarp-terminal.deb\n",[15,2314,2315],{},"After installation is complete, you can open Warp from the application menu, or type in the terminal:",[65,2317,2319],{"className":67,"code":2318,"language":69,"meta":20,"style":20},"warp-terminal\n```\n\n2. Fedora \u002F RHEL Installation\n\nIf you are using distributions like Fedora, RHEL, or CentOS, you can install the rpm package:\n\n```bash\nwget -O warp-terminal.rpm \"https:\u002F\u002Fapp.warp.dev\u002Fdownload?package=rpm\"\nsudo dnf install .\u002Fwarp-terminal.rpm\n```\n\nThe startup method is the same:\n\n```bash\nwarp-terminal\n```\n\n\n\n2. Warp Common Keyboard Shortcuts\n\n|Shortcut keys|Function|Memory techniques|\n|---|---|---|\n|`Ctrl + Shift + D`|Split screen to the right|**D = Divide**, splits out a new pane, default opens to the right.|\n|`Ctrl + Shift + E`|Split Downwards|**E = Extend Down**, extend a new pane downward|\n|`Ctrl + Alt + 方向键`|Switch pane by direction|Press the direction key corresponding to where you want to go.|\n|`Ctrl + Shift + [`|Switch to the previous pane|`[` can be understood as cutting forward.|\n|`Ctrl + Shift + ]`|Switch to the next pane.|`]` can be understood as cutting backwards.|\n|`Ctrl + Shift + Enter`|Maximize\u002Frestore current pane|Enter to enter the focus mode of the current pane|\n|`Ctrl + Shift + W`|Close the current pane.|**W = Window**, close the current small window.|\n|`Ctrl + Shift + T`|New tab|**T = Tab**, opens a new tab.|\n|`Ctrl + PageUp`|Switch to the previous tab.|Similar to switching browser tabs|\n|`Ctrl + PageDown`|Switch to the next tab.|Similar to switching browser tabs|\n|`Ctrl + L`|Clear screen|**L in L = clear**, equivalent to navigating to a new page.|\n|`Ctrl + =`|Increase font size|Next to the equals sign, there is usually also a plus sign, indicating enlargement.|\n|`Ctrl + -`|Reduce font size|Minus sign, indicates zoom out.|\n|`Ctrl + 0`|Restore default font size|Reset to default|\n\n\n\n3. Features of Warp\n\n",[55,2320,2321,2326,2330,2334,2342,2346,2354,2358,2364,2376,2388,2392,2396,2404,2408,2414,2418,2422,2426,2430,2434,2441,2445,2471,2488,2531,2567,2603,2647,2672,2725,2759,2790,2833,2871,2902,2967,3011,3050,3055,3060,3065],{"__ignoreMap":20},[73,2322,2323],{"class":75,"line":76},[73,2324,2325],{"class":125},"warp-terminal\n",[73,2327,2328],{"class":75,"line":91},[73,2329,1488],{"class":83},[73,2331,2332],{"class":75,"line":902},[73,2333,899],{"emptyLinePlaceholder":898},[73,2335,2336,2339],{"class":75,"line":914},[73,2337,2338],{"class":125},"2.",[73,2340,2341],{"class":83}," Fedora \u002F RHEL Installation\n",[73,2343,2344],{"class":75,"line":920},[73,2345,899],{"emptyLinePlaceholder":898},[73,2347,2348,2351],{"class":75,"line":938},[73,2349,2350],{"class":125},"If",[73,2352,2353],{"class":83}," you are using distributions like Fedora, RHEL, or CentOS, you can install the rpm package:\n",[73,2355,2356],{"class":75,"line":949},[73,2357,899],{"emptyLinePlaceholder":898},[73,2359,2360,2362],{"class":75,"line":955},[73,2361,1505],{"class":83},[73,2363,1508],{"class":125},[73,2365,2366,2368,2370,2373],{"class":75,"line":960},[73,2367,2292],{"class":125},[73,2369,2295],{"class":79},[73,2371,2372],{"class":83}," warp-terminal.rpm",[73,2374,2375],{"class":83}," \"https:\u002F\u002Fapp.warp.dev\u002Fdownload?package=rpm\"\n",[73,2377,2378,2380,2383,2385],{"class":75,"line":978},[73,2379,1725],{"class":125},[73,2381,2382],{"class":83}," dnf",[73,2384,1731],{"class":83},[73,2386,2387],{"class":83}," .\u002Fwarp-terminal.rpm\n",[73,2389,2390],{"class":75,"line":2007},[73,2391,1488],{"class":83},[73,2393,2394],{"class":75,"line":2013},[73,2395,899],{"emptyLinePlaceholder":898},[73,2397,2398,2401],{"class":75,"line":2019},[73,2399,2400],{"class":125},"The",[73,2402,2403],{"class":83}," startup method is the same:\n",[73,2405,2406],{"class":75,"line":2030},[73,2407,899],{"emptyLinePlaceholder":898},[73,2409,2410,2412],{"class":75,"line":2040},[73,2411,1505],{"class":83},[73,2413,1508],{"class":125},[73,2415,2416],{"class":75,"line":2060},[73,2417,2325],{"class":125},[73,2419,2420],{"class":75,"line":2065},[73,2421,1488],{"class":83},[73,2423,2424],{"class":75,"line":2076},[73,2425,899],{"emptyLinePlaceholder":898},[73,2427,2428],{"class":75,"line":2086},[73,2429,899],{"emptyLinePlaceholder":898},[73,2431,2432],{"class":75,"line":2096},[73,2433,899],{"emptyLinePlaceholder":898},[73,2435,2436,2438],{"class":75,"line":2106},[73,2437,2338],{"class":125},[73,2439,2440],{"class":83}," Warp Common Keyboard Shortcuts\n",[73,2442,2443],{"class":75,"line":2111},[73,2444,899],{"emptyLinePlaceholder":898},[73,2446,2447,2450,2453,2456,2458,2460,2462,2465,2468],{"class":75,"line":2122},[73,2448,2449],{"class":100},"|",[73,2451,2452],{"class":125},"Shortcut",[73,2454,2455],{"class":83}," keys",[73,2457,2449],{"class":100},[73,2459,1755],{"class":125},[73,2461,2449],{"class":100},[73,2463,2464],{"class":125},"Memory",[73,2466,2467],{"class":83}," techniques",[73,2469,2470],{"class":100},"|\n",[73,2472,2473,2475,2478,2480,2482,2484,2486],{"class":75,"line":2127},[73,2474,2449],{"class":100},[73,2476,2477],{"class":125},"---",[73,2479,2449],{"class":100},[73,2481,2477],{"class":125},[73,2483,2449],{"class":100},[73,2485,2477],{"class":125},[73,2487,2470],{"class":100},[73,2489,2490,2492,2495,2498,2501,2504,2506,2509,2511,2514,2517,2520,2523,2526,2529],{"class":75,"line":2138},[73,2491,2449],{"class":100},[73,2493,2494],{"class":83},"`",[73,2496,2497],{"class":125},"Ctrl",[73,2499,2500],{"class":83}," +",[73,2502,2503],{"class":83}," Shift",[73,2505,2500],{"class":83},[73,2507,2508],{"class":83}," D`",[73,2510,2449],{"class":100},[73,2512,2513],{"class":125},"Split",[73,2515,2516],{"class":83}," screen to the right",[73,2518,2519],{"class":100},"|**",[73,2521,2522],{"class":83},"D = Divide",[73,2524,2525],{"class":100},"**",[73,2527,2528],{"class":83},", splits out a new pane, default opens to the right.",[73,2530,2470],{"class":100},[73,2532,2533,2535,2537,2539,2541,2543,2545,2548,2550,2552,2555,2557,2560,2562,2565],{"class":75,"line":2143},[73,2534,2449],{"class":100},[73,2536,2494],{"class":83},[73,2538,2497],{"class":125},[73,2540,2500],{"class":83},[73,2542,2503],{"class":83},[73,2544,2500],{"class":83},[73,2546,2547],{"class":83}," E`",[73,2549,2449],{"class":100},[73,2551,2513],{"class":125},[73,2553,2554],{"class":83}," Downwards",[73,2556,2519],{"class":100},[73,2558,2559],{"class":83},"E = Extend Down",[73,2561,2525],{"class":100},[73,2563,2564],{"class":83},", extend a new pane downward",[73,2566,2470],{"class":100},[73,2568,2569,2571,2573,2575,2577,2580,2582,2585,2587,2590,2593,2595,2598,2601],{"class":75,"line":2149},[73,2570,2449],{"class":100},[73,2572,2494],{"class":83},[73,2574,2497],{"class":125},[73,2576,2500],{"class":83},[73,2578,2579],{"class":83}," Alt",[73,2581,2500],{"class":83},[73,2583,2584],{"class":83}," 方向键`",[73,2586,2449],{"class":100},[73,2588,2589],{"class":125},"Switch",[73,2591,2592],{"class":83}," pane by direction",[73,2594,2449],{"class":100},[73,2596,2597],{"class":125},"Press",[73,2599,2600],{"class":83}," the direction key corresponding to where you want to go.",[73,2602,2470],{"class":100},[73,2604,2605,2607,2609,2611,2613,2615,2617,2620,2622,2624,2626,2629,2631,2633,2636,2639,2642,2645],{"class":75,"line":2154},[73,2606,2449],{"class":100},[73,2608,2494],{"class":83},[73,2610,2497],{"class":125},[73,2612,2500],{"class":83},[73,2614,2503],{"class":83},[73,2616,2500],{"class":83},[73,2618,2619],{"class":892}," [",[73,2621,2494],{"class":83},[73,2623,2449],{"class":100},[73,2625,2589],{"class":125},[73,2627,2628],{"class":83}," to the previous pane",[73,2630,2449],{"class":100},[73,2632,2494],{"class":83},[73,2634,2635],{"class":892},"[",[73,2637,2638],{"class":83},"` ",[73,2640,2641],{"class":125},"can",[73,2643,2644],{"class":83}," be understood as cutting forward.",[73,2646,2470],{"class":100},[73,2648,2649,2651,2653,2656,2658,2660,2662,2665,2667,2669],{"class":75,"line":2160},[73,2650,2449],{"class":100},[73,2652,2494],{"class":83},[73,2654,2655],{"class":892},"Ctrl + Shift + ]",[73,2657,2494],{"class":83},[73,2659,2449],{"class":100},[73,2661,2589],{"class":125},[73,2663,2664],{"class":83}," to the next pane.",[73,2666,2449],{"class":100},[73,2668,2494],{"class":83},[73,2670,2671],{"class":892},"]` can be understood as cutting backwards.|\n",[73,2673,2674,2676,2678,2680,2683,2685,2688,2691,2694,2696,2699,2702,2705,2708,2711,2714,2717,2719,2721,2723],{"class":75,"line":2171},[73,2675,2449],{"class":100},[73,2677,2494],{"class":83},[73,2679,2497],{"class":125},[73,2681,2682],{"class":83}," + Shift + Enter`",[73,2684,2449],{"class":100},[73,2686,2687],{"class":125},"Maximize\u002Frestore",[73,2689,2690],{"class":83}," current",[73,2692,2693],{"class":83}," pane",[73,2695,2449],{"class":100},[73,2697,2698],{"class":125},"Enter",[73,2700,2701],{"class":83}," to",[73,2703,2704],{"class":83}," enter",[73,2706,2707],{"class":83}," the",[73,2709,2710],{"class":83}," focus",[73,2712,2713],{"class":83}," mode",[73,2715,2716],{"class":83}," of",[73,2718,2707],{"class":83},[73,2720,2690],{"class":83},[73,2722,2693],{"class":83},[73,2724,2470],{"class":100},[73,2726,2727,2729,2731,2733,2736,2738,2741,2743,2745,2748,2750,2752,2754,2757],{"class":75,"line":2182},[73,2728,2449],{"class":100},[73,2730,2494],{"class":83},[73,2732,2497],{"class":125},[73,2734,2735],{"class":83}," + Shift + W`",[73,2737,2449],{"class":100},[73,2739,2740],{"class":125},"Close",[73,2742,2707],{"class":83},[73,2744,2690],{"class":83},[73,2746,2747],{"class":83}," pane.",[73,2749,2519],{"class":100},[73,2751,1869],{"class":892},[73,2753,2525],{"class":100},[73,2755,2756],{"class":892},", close the current small window.",[73,2758,2470],{"class":100},[73,2760,2761,2763,2765,2767,2770,2772,2775,2778,2780,2783,2785,2788],{"class":75,"line":2196},[73,2762,2449],{"class":100},[73,2764,2494],{"class":83},[73,2766,2497],{"class":125},[73,2768,2769],{"class":83}," + Shift + T`",[73,2771,2449],{"class":100},[73,2773,2774],{"class":125},"New",[73,2776,2777],{"class":83}," tab",[73,2779,2519],{"class":100},[73,2781,2782],{"class":892},"T = Tab",[73,2784,2525],{"class":100},[73,2786,2787],{"class":892},", opens a new tab.",[73,2789,2470],{"class":100},[73,2791,2792,2794,2796,2798,2801,2803,2805,2807,2809,2812,2815,2817,2820,2822,2825,2828,2831],{"class":75,"line":2202},[73,2793,2449],{"class":100},[73,2795,2494],{"class":83},[73,2797,2497],{"class":125},[73,2799,2800],{"class":83}," + PageUp`",[73,2802,2449],{"class":100},[73,2804,2589],{"class":125},[73,2806,2701],{"class":83},[73,2808,2707],{"class":83},[73,2810,2811],{"class":83}," previous",[73,2813,2814],{"class":83}," tab.",[73,2816,2449],{"class":100},[73,2818,2819],{"class":125},"Similar",[73,2821,2701],{"class":83},[73,2823,2824],{"class":83}," switching",[73,2826,2827],{"class":83}," browser",[73,2829,2830],{"class":83}," tabs",[73,2832,2470],{"class":100},[73,2834,2835,2837,2839,2841,2844,2846,2848,2850,2852,2855,2857,2859,2861,2863,2865,2867,2869],{"class":75,"line":2212},[73,2836,2449],{"class":100},[73,2838,2494],{"class":83},[73,2840,2497],{"class":125},[73,2842,2843],{"class":83}," + PageDown`",[73,2845,2449],{"class":100},[73,2847,2589],{"class":125},[73,2849,2701],{"class":83},[73,2851,2707],{"class":83},[73,2853,2854],{"class":83}," next",[73,2856,2814],{"class":83},[73,2858,2449],{"class":100},[73,2860,2819],{"class":125},[73,2862,2701],{"class":83},[73,2864,2824],{"class":83},[73,2866,2827],{"class":83},[73,2868,2830],{"class":83},[73,2870,2470],{"class":100},[73,2872,2873,2875,2877,2879,2882,2884,2887,2890,2892,2895,2897,2900],{"class":75,"line":2222},[73,2874,2449],{"class":100},[73,2876,2494],{"class":83},[73,2878,2497],{"class":125},[73,2880,2881],{"class":83}," + L`",[73,2883,2449],{"class":100},[73,2885,2886],{"class":125},"Clear",[73,2888,2889],{"class":83}," screen",[73,2891,2519],{"class":100},[73,2893,2894],{"class":892},"L in L = clear",[73,2896,2525],{"class":100},[73,2898,2899],{"class":892},", equivalent to navigating to a new page.",[73,2901,2470],{"class":100},[73,2903,2904,2906,2908,2910,2913,2915,2918,2921,2924,2926,2929,2931,2933,2936,2939,2942,2945,2948,2951,2954,2957,2959,2962,2965],{"class":75,"line":2227},[73,2905,2449],{"class":100},[73,2907,2494],{"class":83},[73,2909,2497],{"class":125},[73,2911,2912],{"class":83}," + =`",[73,2914,2449],{"class":100},[73,2916,2917],{"class":125},"Increase",[73,2919,2920],{"class":83}," font",[73,2922,2923],{"class":83}," size",[73,2925,2449],{"class":100},[73,2927,2928],{"class":125},"Next",[73,2930,2701],{"class":83},[73,2932,2707],{"class":83},[73,2934,2935],{"class":83}," equals",[73,2937,2938],{"class":83}," sign,",[73,2940,2941],{"class":83}," there",[73,2943,2944],{"class":83}," is",[73,2946,2947],{"class":83}," usually",[73,2949,2950],{"class":83}," also",[73,2952,2953],{"class":83}," a",[73,2955,2956],{"class":83}," plus",[73,2958,2938],{"class":83},[73,2960,2961],{"class":83}," indicating",[73,2963,2964],{"class":83}," enlargement.",[73,2966,2470],{"class":100},[73,2968,2970,2972,2974,2976,2979,2982,2984,2986,2989,2991,2993,2995,2998,3000,3003,3006,3009],{"class":75,"line":2969},37,[73,2971,2449],{"class":100},[73,2973,2494],{"class":83},[73,2975,2497],{"class":125},[73,2977,2978],{"class":83}," + ",[73,2980,2981],{"class":79},"-",[73,2983,2494],{"class":83},[73,2985,2449],{"class":100},[73,2987,2988],{"class":125},"Reduce",[73,2990,2920],{"class":83},[73,2992,2923],{"class":83},[73,2994,2449],{"class":100},[73,2996,2997],{"class":125},"Minus",[73,2999,2938],{"class":83},[73,3001,3002],{"class":83}," indicates",[73,3004,3005],{"class":83}," zoom",[73,3007,3008],{"class":83}," out.",[73,3010,2470],{"class":100},[73,3012,3014,3016,3018,3020,3022,3025,3027,3029,3032,3035,3037,3039,3041,3044,3046,3048],{"class":75,"line":3013},38,[73,3015,2449],{"class":100},[73,3017,2494],{"class":83},[73,3019,2497],{"class":125},[73,3021,2978],{"class":83},[73,3023,3024],{"class":79},"0",[73,3026,2494],{"class":83},[73,3028,2449],{"class":100},[73,3030,3031],{"class":125},"Restore",[73,3033,3034],{"class":83}," default",[73,3036,2920],{"class":83},[73,3038,2923],{"class":83},[73,3040,2449],{"class":100},[73,3042,3043],{"class":125},"Reset",[73,3045,2701],{"class":83},[73,3047,3034],{"class":83},[73,3049,2470],{"class":100},[73,3051,3053],{"class":75,"line":3052},39,[73,3054,899],{"emptyLinePlaceholder":898},[73,3056,3058],{"class":75,"line":3057},40,[73,3059,899],{"emptyLinePlaceholder":898},[73,3061,3063],{"class":75,"line":3062},41,[73,3064,899],{"emptyLinePlaceholder":898},[73,3066,3068,3071,3074,3076],{"class":75,"line":3067},42,[73,3069,3070],{"class":125},"3.",[73,3072,3073],{"class":83}," Features",[73,3075,2716],{"class":83},[73,3077,3078],{"class":83}," Warp\n",[460,3080,3081,3084,3087,3090,3093],{},[463,3082,3083],{},"By default, it looks better than Terminator, so no need to bother with color schemes.",[463,3085,3086],{},"Supports persistent split screen, suitable for large screen development.",[463,3088,3089],{},"The font rendering is quite clear, and it looks brighter than Terminator.",[463,3091,3092],{},"Supports command blocks, long command outputs appear clearer.",[463,3094,3095],{},"Supports AI features, but can also be used as a normal terminal without AI.",[15,3097,3098],{},"When opening Warp for the first time, it may require an internet connection for initialization. After that, it can be used as a regular terminal even offline, though cloud-based features like AI and collaboration will not be available.",[15,3100,3101],{},"If you just want a traditional, stable, lightweight terminal, you can continue to use Terminator.",[15,3103,3104],{},"If you want a better-looking interface, a more modern interactive experience, and also need split-screen, then Warp is a great choice.",[1407,3106,3107],{"id":3107},"git",[15,3109,3110],{},[18,3111],{"alt":20,"src":3112},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage215.webp",[15,3114,3115,3116],{},"Our Git introductory tutorial: ",[1414,3117,3119],{"href":3118},"\u002Fwiki\u002F2023-12-29-git-jiao-xue","Vinci Robotics Team Git Introductory Tutorial",[10,3121,3123],{"id":3122},"ros2-architecture-framework","ROS2 Architecture Framework",[15,3125,3126],{},[18,3127],{"alt":20,"src":3128},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage216.webp",[15,3130,3131],{},[18,3132],{"alt":20,"src":3133},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage217.webp",[15,3135,3136],{},[18,3137],{"alt":20,"src":3138},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage218.webp",[15,3140,3141],{},[18,3142],{"alt":20,"src":3143},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage219.webp",[15,3145,3146],{},"Client Library refers to the ROS2 client libraries, such as rclcpp and rclpy.",[15,3148,3149],{},"The Abstract DDS Layer is a DDS abstraction layer that makes DDS pluggable, allowing the DDS module to be easily swapped out.",[15,3151,3152],{},"Intra-process APIs are in-process communication APIs, a type of API that can improve communication efficiency.",[15,3154,3155],{},[18,3156],{"alt":20,"src":3157},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage220.webp",[15,3159,3160],{},[18,3161],{"alt":20,"src":3162},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage221.webp",[3164,3165,3166],"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":20,"searchDepth":91,"depth":91,"links":3168},[3169,3170,3171,3172,3173,3174,3175,3176,3177,3178],{"id":12,"depth":902,"text":13},{"id":44,"depth":902,"text":45},{"id":214,"depth":902,"text":215},{"id":442,"depth":902,"text":443},{"id":715,"depth":902,"text":716},{"id":999,"depth":902,"text":1000},{"id":1029,"depth":902,"text":1030},{"id":1356,"depth":902,"text":1357},{"id":1404,"depth":902,"text":1405},{"id":1549,"depth":91,"text":1550,"children":3179},[3180,3181,3182],{"id":1553,"depth":902,"text":1554},{"id":1706,"depth":902,"text":1707},{"id":3122,"depth":902,"text":3123},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo",0,"0200","2023-12-30","wiki\u002F2023-12-30-ros2-tutorial","en-us:2023-12-30-ros2-tutorial","\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作",false,null,"en-US","en-us",{},{"title":5,"description":20},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作","ydzZEBCIBKKiyl73vIuKqQcgF_AboqYGiNNA90xaBp4",[3203,3208,3209,3214,3219,3224,3229,3234,3239,3244,3249,3254,3259,3264,3269,3274,3279,3284,3289,3294,3299,3304,3309,3314,3319,3324,3328,3333,3337,3342,3347,3352,3357,3362,3367,3372,3377,3382,3387,3392,3397,3402,3407,3412,3417,3422,3427,3432,3437,3442,3447,3452,3457,3462,3467,3472,3477,3482,3487,3492],{"path":3204,"stem":3205,"title":3206,"date":3186,"chapterOrder":3207,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍","Introduction to ROS2","0100",{"path":3183,"stem":3200,"title":5,"date":3186,"chapterOrder":3185,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},{"path":3210,"stem":3211,"title":3212,"date":3186,"chapterOrder":3213,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0300-gong-zuo-kong-jian-yu-gong-neng-bao","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0300-工作空间与功能包","Workspace and Function Packages","0300",{"path":3215,"stem":3216,"title":3217,"date":3186,"chapterOrder":3218,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信","Four Major Communications","0400",{"path":3220,"stem":3221,"title":3222,"date":3186,"chapterOrder":3223,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0500-ros2-qi-ta-tong-xin-ji-zhi","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0500-ROS2其他通信机制","ROS2 Other Communication Mechanisms","0500",{"path":3225,"stem":3226,"title":3227,"date":3186,"chapterOrder":3228,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-launch","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-Launch","Launch","0600",{"path":3230,"stem":3231,"title":3232,"date":3186,"chapterOrder":3233,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2","Replaying rosbag2","0700",{"path":3235,"stem":3236,"title":3237,"date":3186,"chapterOrder":3238,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-zuo-biao-bian-huan-tf","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-坐标变换TF","Coordinate Transformation TF","0800",{"path":3240,"stem":3241,"title":3242,"date":3186,"chapterOrder":3243,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0900-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0900-可视化平台RVIZ2与URDF建模语言","Visualization Platform RVIZ2 and URDF Modeling Language","0900",{"path":3245,"stem":3246,"title":3247,"date":3186,"chapterOrder":3248,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1000-stage-ros2-fang-zhen-ping-tai","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1000-Stage_Ros2仿真平台","Stage_Ros2 Simulation Platform","1000",{"path":3250,"stem":3251,"title":3252,"date":3186,"chapterOrder":3253,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic","Gezebo Classic","1100-0100",{"path":3255,"stem":3256,"title":3257,"date":3186,"chapterOrder":3258,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-ignitiongazebo","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","1100-0200",{"path":3260,"stem":3261,"title":3262,"date":3186,"chapterOrder":3263,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-gazebosim","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-GazeboSim","Gz Sim（Gazebo Harmonic）","1100-0300",{"path":3265,"stem":3266,"title":3267,"date":3186,"chapterOrder":3268,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-Igngz2gzsim","Migrate Ign Gazebo to Gz Sim","1100-0400",{"path":3270,"stem":3271,"title":3272,"date":3186,"chapterOrder":3273,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-gezebo-fang-zhen-ping-tai","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-Gezebo仿真平台","Gazebo simulation platform","1100",{"path":3275,"stem":3276,"title":3277,"date":3186,"chapterOrder":3278,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-humble-ban-ben","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-Humble版本","Humble Navigation Simulation","1200-0100",{"path":3280,"stem":3281,"title":3282,"date":3186,"chapterOrder":3283,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-jazzy-ban-ben","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-Jazzy版本","Jazzy Navigation Simulation","1200-0200",{"path":3285,"stem":3286,"title":3287,"date":3186,"chapterOrder":3288,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-humble2jazzy","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-Humble2Jazzy","Differences in Navigation between Humble and Jazzy","1200-0300",{"path":3290,"stem":3291,"title":3292,"date":3186,"chapterOrder":3293,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-机器人导航Navigation2(仿真篇)","Robot Navigation with Navigation2 (Simulation)","1200",{"path":3295,"stem":3296,"title":3297,"date":3186,"chapterOrder":3298,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-boost-aiso","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-Boost.Aiso","Boost.Asio库","1300-0100-0100",{"path":3300,"stem":3301,"title":3302,"date":3186,"chapterOrder":3303,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2-serial-driver","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2_serial_driver","ROS2 Serial Driver Library","1300-0100-0200",{"path":3305,"stem":3306,"title":3307,"date":3186,"chapterOrder":3308,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-chuan-kou-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-串口通信","UART serial communication","1300-0100",{"path":3310,"stem":3311,"title":3312,"date":3186,"chapterOrder":3313,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","SocketCAN","1300-0200-0100",{"path":3315,"stem":3316,"title":3317,"date":3186,"chapterOrder":3318,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2-socketcan","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2_socketcan","ROS2_SocketCAN","1300-0200-0200",{"path":3320,"stem":3321,"title":3322,"date":3186,"chapterOrder":3323,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-can-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-CAN通信","CAN communication","1300-0200",{"path":3325,"stem":3326,"title":3297,"date":3186,"chapterOrder":3327,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-boost-aiso","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-Boost.Aiso","1300-0300-0100",{"path":3329,"stem":3330,"title":3331,"date":3186,"chapterOrder":3332,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-tcp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-TCP通信","TCP communication","1300-0300",{"path":3334,"stem":3335,"title":3297,"date":3186,"chapterOrder":3336,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-boost-aiso","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-Boost.Aiso","1300-0400-0100",{"path":3338,"stem":3339,"title":3340,"date":3186,"chapterOrder":3341,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-udp-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-UDP通信","UDP communication","1300-0400",{"path":3343,"stem":3344,"title":3345,"date":3186,"chapterOrder":3346,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-linux-ying-jian-tong-xin","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-Linux硬件通信","Linux hardware communication","1300",{"path":3348,"stem":3349,"title":3350,"date":3186,"chapterOrder":3351,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-ji-qi-ren-zu-cheng","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-机器人组成","Robot Composition","1400-0100",{"path":3353,"stem":3354,"title":3355,"date":3186,"chapterOrder":3356,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-yuan-cheng-kai-fa-ssh","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-远程开发SSH","Remote Development SSH","1400-0200-0100",{"path":3358,"stem":3359,"title":3360,"date":3186,"chapterOrder":3361,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-yuan-cheng-fang-wen-zhuo-mian","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-远程访问桌面","Remote Desktop Access","1400-0200-0200",{"path":3363,"stem":3364,"title":3365,"date":3186,"chapterOrder":3366,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-工控机之远程开发环境","Remote Development Environment for Industrial PC","1400-0200",{"path":3368,"stem":3369,"title":3370,"date":3186,"chapterOrder":3371,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-gong-kong-ji-zhi-wai-jie-usb-she-bei","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-工控机之外接USB设备","External USB Devices for the Industrial PC","1400-0300",{"path":3373,"stem":3374,"title":3375,"date":3186,"chapterOrder":3376,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-fen-bu-shi-da-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-分布式搭建","Distributed setup","1400-0400",{"path":3378,"stem":3379,"title":3380,"date":3186,"chapterOrder":3381,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-you-hua-ri-zhi","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-优化日志","Optimize logs","1400-0500",{"path":3383,"stem":3384,"title":3385,"date":3186,"chapterOrder":3386,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-li-cheng-ji-odom","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-里程计Odom","odometry","1400-0600-0100",{"path":3388,"stem":3389,"title":3390,"date":3186,"chapterOrder":3391,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-guan-xing-ji-imu","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-惯性计IMU","Inertial Measurement Unit (IMU)","1400-0600-0200",{"path":3393,"stem":3394,"title":3395,"date":3186,"chapterOrder":3396,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-ji-guang-lei-da-lidar","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-激光雷达LiDAR","LiDAR","1400-0600-0300",{"path":3398,"stem":3399,"title":3400,"date":3186,"chapterOrder":3401,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-xiang-ji-camera","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-相机Camera","Camera","1400-0600-0400",{"path":3403,"stem":3404,"title":3405,"date":3186,"chapterOrder":3406,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-quan-qiu-ding-wei-gnss","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-全球定位GNSS","Global Navigation Satellite System (GNSS)","1400-0600-0500",{"path":3408,"stem":3409,"title":3410,"date":3186,"chapterOrder":3411,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-shou-bing-joy","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-手柄joy","The query \"手柄JOY\" is a bit ambiguous. To help you better, could you please provide more details? For example:","1400-0600-0600",{"path":3413,"stem":3414,"title":3415,"date":3186,"chapterOrder":3416,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-jian-pan-kong-zhi-jie-dian","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-键盘控制节点","Keyboard control node","1400-0600-0700",{"path":3418,"stem":3419,"title":3420,"date":3186,"chapterOrder":3421,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-ying-jian-ping-tai","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-硬件平台","Hardware platform","1400-0600",{"path":3423,"stem":3424,"title":3425,"date":3186,"chapterOrder":3426,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-zuo-biao-xi-yu-hua-ti-guan-xi","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-坐标系与话题关系","Coordinate System and Topic Relationship","1400-0700",{"path":3428,"stem":3429,"title":3430,"date":3186,"chapterOrder":3431,"chapterDepth":902,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-lun-shi-li-cheng-ji-biao-ding","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-轮式里程计标定","Wheel odometry calibration","1400-0800-0100-0100",{"path":3433,"stem":3434,"title":3435,"date":3186,"chapterOrder":3436,"chapterDepth":902,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-lun-shi-li-cheng-ji-yu-imu-rong-he","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-轮式里程计与IMU融合","Fusion of Wheel Odometry and IMU","1400-0800-0100-0200",{"path":3438,"stem":3439,"title":3440,"date":3186,"chapterOrder":3441,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-轮式里程计标定与融合","Wheel odometry calibration and fusion","1400-0800-0100",{"path":3443,"stem":3444,"title":3445,"date":3186,"chapterOrder":3446,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-ji-guang-lei-da-gong-ju","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-激光雷达工具","Lidar Tool","1400-0800-0200",{"path":3448,"stem":3449,"title":3450,"date":3186,"chapterOrder":3451,"chapterDepth":91,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-xiang-ji-shi-yong-jin-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-相机使用进阶","Advanced Camera Usage","1400-0800-0300",{"path":3453,"stem":3454,"title":3455,"date":3186,"chapterOrder":3456,"chapterDepth":76,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-ying-jian-ping-tai-jin-jie","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-硬件平台进阶","Advanced Hardware Platform","1400-0800",{"path":3458,"stem":3459,"title":3460,"date":3186,"chapterOrder":3461,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-ji-qi-ren-ying-jian","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-机器人硬件","Robot hardware","1400",{"path":3463,"stem":3464,"title":3465,"date":3186,"chapterOrder":3466,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ros2-control","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ROS2_Control","ROS2_Control","1500",{"path":3468,"stem":3469,"title":3470,"date":3186,"chapterOrder":3471,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1600-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1600-Moveit2工业机器人机械臂","MoveIt2 industrial robot arm","1600",{"path":3473,"stem":3474,"title":3475,"date":3186,"chapterOrder":3476,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1700-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1700-机器人导航Navigation2(实体篇)","Robot Navigation with Navigation2 (Physical Robot)","1700",{"path":3478,"stem":3479,"title":3480,"date":3186,"chapterOrder":3481,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-microros","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-MicroROS","MicroROS","1800",{"path":3483,"stem":3484,"title":3485,"date":3186,"chapterOrder":3486,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-webots-fang-zhen-ping-tai","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-Webots仿真平台","Webots simulation platform","1900",{"path":3488,"stem":3489,"title":3490,"date":3186,"chapterOrder":3491,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":3193},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-opencv","_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-OpenCV","OpenCV","2000",{"path":3189,"stem":3493,"title":3494,"date":3186,"chapterOrder":3194,"chapterDepth":3184,"docKey":3188,"docRoot":3189,"docTitle":3190,"isWikiDoc":898,"isWikiIndex":898},"_i18n\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2 Robot Operating System Tutorial",{"variants":3496},[3497,3498,3501,3504,3507],{"path":3183,"localeSlug":3196,"i18nKey":3192},{"path":3499,"localeSlug":3500,"i18nKey":3192},"\u002Fzh-hant\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","zh-hant",{"path":3502,"localeSlug":3503,"i18nKey":3192},"\u002Fzh-hk\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","zh-hk",{"path":3505,"localeSlug":3506,"i18nKey":3192},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","zh-tw",{"path":3508,"localeSlug":3509,"i18nKey":3192},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","zh-cn",[3183,3199,3499,3199,3502,3199,3505,3199,3508,3199],1784646851825]