[{"data":1,"prerenderedAt":3563},["ShallowReactive",2],{"wiki-page-/en-us/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo":3,"wiki-doc-items-/en-us/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo":3195,"language-switcher-data-/en-us/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo":3547,"wiki-i18n-paths-/en-us/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo":3562},{"id":4,"title":5,"body":6,"canonicalPath":3176,"chapter":3177,"chapterSort":3178,"date":3179,"description":20,"docI18nKey":3180,"docKey":3181,"docRoot":3182,"docTitle":3183,"extension":3184,"i18nKey":3185,"isBlogPost":3186,"isWikiDoc":898,"isWikiIndex":3186,"layout":3187,"legacyPath":3187,"locale":3188,"localeSlug":3189,"meta":3190,"navigation":898,"path":3176,"seo":3191,"sourcePath":3192,"sourceStem":3185,"stem":3193,"wikiDepth":76,"__hash__":3194},"content/_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch2-入门操作.md","Getting Started",{"type":7,"value":8,"toc":3160},"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,1194,1199,1202,1207,1212,1214,1217,1222,1227,1233,1238,1243,1248,1251,1256,1259,1264,1267,1272,1274,1279,1284,1289,1294,1296,1299,1304,1307,1310,1313,1318,1323,1326,1331,1336,1341,1346,1350,1355,1358,1363,1389,1394,1398,1403,1411,1414,1417,1420,1452,1455,1521,1528,1533,1538,1543,1547,1551,1561,1583,1598,1605,1624,1627,1637,1643,1646,1651,1654,1659,1662,1667,1672,1677,1683,1688,1691,1696,1700,1703,1708,1727,1732,1879,1882,1905,1915,2223,2232,2235,2252,2256,2259,2262,2265,2305,2308,3071,3088,3091,3094,3097,3100,3105,3113,3117,3122,3127,3132,3137,3140,3143,3146,3151,3156],[10,11,13],"h3",{"id":12},"introduction","Introduction",[15,16,17],"p",{},[18,19],"img",{"alt":20,"src":21},"","https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image83.webp",[15,23,24],{},[18,25],{"alt":20,"src":26},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image84.webp",[15,28,29],{},[18,30],{"alt":20,"src":31},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image85.webp",[15,33,34],{},[18,35],{"alt":20,"src":36},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image86.webp",[15,38,39],{},[18,40],{"alt":20,"src":41},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image87.webp",[10,43,45],{"id":44},"terminal-environment-setup","Terminal Environment Setup",[15,47,48],{},[18,49],{"alt":20,"src":50},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image88.webp",[15,52,53,54,58],{},"If you already added this statement to ",[55,56,57],"code",{},"~/.bashrc"," when installing ROS2 above, you don't need to follow this step.",[15,60,61],{},[18,62],{"alt":20,"src":63},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image89.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 /opt/ros/humble/setup.bash  #将ROS2环境变量配置到当前位置\necho \" source /opt/ros/humble/setup.bash\" >> ~/.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"," /opt/ros/humble/setup.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 /opt/ros/humble/setup.bash\"",[73,99,101],{"class":100},"szBVR"," >>",[73,103,104],{"class":83}," ~/.bashrc",[73,106,107],{"class":87},"    #每次启动终端都会运行该句\n",[109,110],"hr",{},[15,112,113],{},[18,114],{"alt":20,"src":115},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image90.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image91.webp",[15,142,143],{},[18,144],{"alt":20,"src":145},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image92.webp",[15,147,148],{},"Use Ctrl+C to cancel program execution.",[15,150,151],{},[18,152],{"alt":20,"src":153},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image93.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image94.webp",[18,177],{"alt":20,"src":178},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image95.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image96.webp",[10,213,215],{"id":214},"command-line-operations","Command line operations",[15,217,218],{},[18,219],{"alt":20,"src":220},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image97.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image98.webp",[15,244,245],{},[18,246],{"alt":20,"src":247},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image99.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image100.webp",[15,257,258],{},[18,259],{"alt":20,"src":260},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image101.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image102.webp",[15,274,275],{},[18,276],{"alt":20,"src":277},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image103.webp",[15,279,280,283],{},[55,281,282],{},"ros2 node info + /node_name"," can be used to view the details of the target node.",[15,285,286],{},[18,287],{"alt":20,"src":288},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image104.webp",[15,290,250],{},[15,292,293],{},[18,294],{"alt":20,"src":295},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image105.webp",[15,297,298],{},[18,299],{"alt":20,"src":300},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image106.webp",[15,302,303],{},[18,304],{"alt":20,"src":305},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image107.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image108.webp",[65,315,317],{"className":67,"code":316,"language":69,"meta":20,"style":20},"ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist \"{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}\"\n",[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}," /turtle1/cmd_vel",[73,339,340],{"class":83}," geometry_msgs/msg/Twist",[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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image109.webp",[15,350,351],{},[18,352],{"alt":20,"src":353},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image110.webp",[65,355,357],{"className":67,"code":356,"language":69,"meta":20,"style":20},"ros2 service call /spawn turtlesim/srv/Spawn \"{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}," /spawn",[73,373,374],{"class":83}," turtlesim/srv/Spawn",[73,376,377],{"class":83}," \"{x: 2, y: 2, theta: 0.2, name: ''}\"\n",[15,379,380],{},[18,381],{"alt":20,"src":382},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image111.webp",[15,384,385],{},[18,386],{"alt":20,"src":387},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image112.webp",[15,389,390],{},[18,391],{"alt":20,"src":392},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image113.webp",[65,394,396],{"className":67,"code":395,"language":69,"meta":20,"style":20},"ros2 bag record /turtle1/cmd_vel\nros2 bag play rosbag2_2022_04_11-17_35_40/rosbag2_2022_04_11-17_35_40_0.db3\n",[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}," /turtle1/cmd_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/rosbag2_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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image114.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image115.webp",[15,450,451],{},[18,452],{"alt":20,"src":453},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image116.webp",[15,455,456],{},[18,457],{"alt":20,"src":458},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image117.webp",[460,461,462],"ol",{},[463,464,465],"li",{},"Create a function package",[15,467,468],{},[18,469],{"alt":20,"src":470},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image118.webp",[15,472,473],{},[18,474],{"alt":20,"src":475},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image119.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 / 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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image120.webp",[15,524,525],{},[18,526],{"alt":20,"src":527},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image121.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image122.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image123.webp",[15,545,546],{},[18,547],{"alt":20,"src":548},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image124.webp",[15,550,551],{},[18,552],{"alt":20,"src":553},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image125.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image126.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 argument of ",[55,578,579],{},"add_executable"," is the name of the executable (by default, it matches the node name and the source file name). The second argument 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/install/package_name/lib",".",[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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image127.webp",[15,608,609],{},[18,610],{"alt":20,"src":611},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image128.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image129.webp",[15,627,628],{},"Path to the executable binary file",[15,630,631],{},[18,632],{"alt":20,"src":633},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image130.webp",[65,635,637],{"className":67,"code":636,"language":69,"meta":20,"style":20},"source install/setup.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/setup.bash",[73,647,648],{"class":87}," #刷新环境变量\n",[15,650,651],{},[18,652],{"alt":20,"src":653},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image131.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image132.webp",[15,678,679],{},"Edit the ROS2 C++ source file:",[15,681,682],{},[18,683],{"alt":20,"src":684},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image133.webp",[65,686,691],{"className":687,"code":689,"language":690},[688],"language-text","#include \"rclcpp/rclcpp.hpp\"\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto node = rclcpp::Node::make_shared(\"helloworld_node\");\n\n  RCLCPP_INFO(node->get_logger(),\"hello world!\");\n\n  rclcpp::shutdown();\n\n  return 0;\n}\n","text",[55,692,689],{"__ignoreMap":20},[15,694,695],{},[18,696],{"alt":20,"src":697},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image134.webp",[15,699,700],{},[18,701],{"alt":20,"src":702},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image135.webp",[15,704,705],{},[18,706],{"alt":20,"src":707},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image136.webp",[15,709,710],{},[18,711],{"alt":20,"src":712},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image137.webp",[10,714,716],{"id":715},"ros2-helloworldpython","ROS2 HelloWorld(Python)",[15,718,719],{},[18,720],{"alt":20,"src":721},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image138.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 / ament_python + --dependencies (dependencies) + rclpy (ROS2 Python client) + --node-name (node name) + node name",[15,756,757],{},[18,758],{"alt":20,"src":759},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image139.webp",[15,761,762],{},[18,763],{"alt":20,"src":764},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image140.webp",[15,766,767],{},[18,768],{"alt":20,"src":769},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image141.webp",[15,771,772],{},"Same as the node name and the executable binary file.",[15,774,775],{},[18,776],{"alt":20,"src":777},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image142.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image143.webp",[15,787,788],{},[18,789],{"alt":20,"src":790},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image144.webp",[15,792,793],{},[18,794],{"alt":20,"src":795},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image145.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image146.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image147.webp",[15,824,825],{},[18,826],{"alt":20,"src":827},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image148.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image149.webp",[65,837,839],{"className":67,"code":838,"language":69,"meta":20,"style":20},"source ./install/setup.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}," ./install/setup.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image150.webp",[109,872],{},[15,874,875],{},[18,876],{"alt":20,"src":877},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image151.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image152.webp",[15,988,989],{},[18,990],{"alt":20,"src":991},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image153.webp",[15,993,994],{},[18,995],{"alt":20,"src":996},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image154.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image155.webp",[15,1007,1008],{},[18,1009],{"alt":20,"src":1010},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image156.webp",[15,1012,1013],{},"To use an absolute path",[15,1015,1016],{},[18,1017],{"alt":20,"src":1018},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image157.webp",[15,1020,1021],{},[18,1022],{"alt":20,"src":1023},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image158.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image159.webp",[15,1037,1038,1041],{},[18,1039],{"alt":20,"src":1040},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image160.webp",[18,1042],{"alt":20,"src":1043},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image161.webp",[15,1045,1046,1049],{},[18,1047],{"alt":20,"src":1048},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image162.webp",[18,1050],{"alt":20,"src":1051},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image163.webp",[15,1053,1054,1057],{},[18,1055],{"alt":20,"src":1056},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image164.webp",[18,1058],{"alt":20,"src":1059},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image165.webp",[15,1061,1062],{},"Looking at C/C++, 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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image166.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image167.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image168.webp",[18,1088],{"alt":20,"src":1089},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image169.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image170.webp",[15,1099,1100],{},"You can try installing this official plugin.",[15,1102,1103],{},[18,1104],{"alt":20,"src":1105},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image171.webp",[15,1107,1108],{},"AI code completion",[15,1110,1111],{},[18,1112],{"alt":20,"src":1113},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image172.webp",[15,1115,1116],{},"MarkDown highlighting",[109,1118],{},[15,1120,1121],{},[18,1122],{"alt":20,"src":1123},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image173.webp",[15,1125,1126],{},[18,1127],{"alt":20,"src":1128},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image174.webp",[15,1130,1131],{},[18,1132],{"alt":20,"src":1133},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image175.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://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image176.webp",[15,1143,1144],{},[18,1145],{"alt":20,"src":1146},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image177.webp",[15,1148,1149],{},[18,1150],{"alt":20,"src":1151},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image178.webp",[15,1153,1154],{},[18,1155],{"alt":20,"src":1156},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image179.webp",[15,1158,1159],{},[18,1160],{"alt":20,"src":1161},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image180.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}/**\",\n                \"/opt/ros/humble/include/**\"\n            ],\n","JSON",[55,1168,1169,1174,1179,1184,1189],{"__ignoreMap":20},[73,1170,1171],{"class":75,"line":76},[73,1172,1173],{},"            \"includePath\": [\n",[73,1175,1176],{"class":75,"line":91},[73,1177,1178],{},"                \"${default}\",\n",[73,1180,1181],{"class":75,"line":902},[73,1182,1183],{},"                \"${workspaceFolder}/**\",\n",[73,1185,1186],{"class":75,"line":914},[73,1187,1188],{},"                \"/opt/ros/humble/include/**\"\n",[73,1190,1191],{"class":75,"line":920},[73,1192,1193],{},"            ],\n",[15,1195,1196],{},[18,1197],{"alt":20,"src":1198},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image181.webp",[15,1200,1201],{},"/** represents including all subsets under this folder.",[15,1203,1204],{},[18,1205],{"alt":20,"src":1206},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image182.webp",[15,1208,1209],{},[18,1210],{"alt":20,"src":1211},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image183.webp",[109,1213],{},[15,1215,1216],{},"Press Ctrl + ` (the key below ESC) to open the VS Code terminal.",[15,1218,1219],{},[18,1220],{"alt":20,"src":1221},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image184.webp",[15,1223,1224],{},[18,1225],{"alt":20,"src":1226},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image185.webp",[15,1228,263,1229,1232],{},[55,1230,1231],{},"--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,1234,1235],{},[18,1236],{"alt":20,"src":1237},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image186.webp",[15,1239,1240],{},[18,1241],{"alt":20,"src":1242},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image187.webp",[15,1244,1245],{},[18,1246],{"alt":20,"src":1247},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image188.webp",[15,1249,1250],{},"No changes needed; it has already been generated by default.",[15,1252,1253],{},[18,1254],{"alt":20,"src":1255},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image189.webp",[15,1257,1258],{},"Return to the WS directory to compile (but at this point, the compilation will build all the packages under the entire WS directory).",[15,1260,1261],{},[18,1262],{"alt":20,"src":1263},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image190.webp",[15,1265,1266],{},"Refresh the environment variables and run.",[15,1268,1269],{},[18,1270],{"alt":20,"src":1271},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image191.webp",[109,1273],{},[15,1275,1276],{},[18,1277],{"alt":20,"src":1278},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image192.webp",[15,1280,1281],{},[18,1282],{"alt":20,"src":1283},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image193.webp",[15,1285,1286],{},[18,1287],{"alt":20,"src":1288},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image194.webp",[15,1290,1291],{},[18,1292],{"alt":20,"src":1293},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image195.webp",[109,1295],{},[15,1297,1298],{},"How do I add multiple source files to a feature package?",[15,1300,1301],{},[18,1302],{"alt":20,"src":1303},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image196.webp",[15,1305,1306],{},"Create a new file, for example hellovscode2.cpp.",[15,1308,1309],{},"However, at this point the file is isolated—it has no configuration, and accordingly, it will not be executed after compilation.",[15,1311,1312],{},"To compile and execute this file, we must configure the relevant configuration files.",[15,1314,1315],{},[18,1316],{"alt":20,"src":1317},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image197.webp",[15,1319,1320],{},[18,1321],{"alt":20,"src":1322},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image198.webp",[15,1324,1325],{},"You don't need the selected ones; you can delete them.",[15,1327,1328],{},[18,1329],{"alt":20,"src":1330},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image199.webp",[15,1332,1333],{},[18,1334],{"alt":20,"src":1335},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image200.webp",[15,1337,1338],{},[18,1339],{"alt":20,"src":1340},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image201.webp",[15,1342,1343],{},[18,1344],{"alt":20,"src":1345},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image202.webp",[10,1347,1349],{"id":1348},"build-optimization-colcon-build","Build Optimization (colcon build)",[15,1351,1352],{},[18,1353],{"alt":20,"src":1354},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image203.webp",[15,1356,1357],{},"I usually do a full build of the files in the WS directory.",[15,1359,1360],{},[18,1361],{"alt":20,"src":1362},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image204.webp",[65,1364,1366],{"className":67,"code":1365,"language":69,"meta":20,"style":20},"colcon build --packages-select xxx xxx xxx #可以指向多个包\n",[55,1367,1368],{"__ignoreMap":20},[73,1369,1370,1373,1376,1379,1382,1384,1386],{"class":75,"line":76},[73,1371,1372],{"class":125},"colcon",[73,1374,1375],{"class":83}," build",[73,1377,1378],{"class":79}," --packages-select",[73,1380,1381],{"class":83}," xxx",[73,1383,1381],{"class":83},[73,1385,1381],{"class":83},[73,1387,1388],{"class":87}," #可以指向多个包\n",[15,1390,1391],{},[18,1392],{"alt":20,"src":1393},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image205.webp",[10,1395,1397],{"id":1396},"advanced-vscode-environment-setup","Advanced VScode Environment Setup",[1399,1400,1402],"h4",{"id":1401},"clangd-plugin-code-completion-optional-but-recommended","clangd plugin code completion (optional, but recommended)",[15,1404,1405],{},[1406,1407,1408],"a",{"href":1408,"rel":1409},"https://colcon.readthedocs.io/en/released/index.html",[1410],"nofollow",[15,1412,1413],{},"Since the C/C++ plugin performs terribly in large projects, we choose to use the clangd plugin from LLVM for code suggestions.",[15,1415,1416],{},"However, clangd relies on CMake to generate a compilation information file, so we need a few steps to generate that file.",[15,1418,1419],{},"Since ROS2 does not have a single standardized CMakeLists like ROS1, configuring it is not as convenient as ROS1.",[460,1421,1422],{},[463,1423,1424,1425,1435],{},"Configure colcon build parameters",[460,1426,1427],{},[463,1428,1429,1430,1434],{},"Method 1: (Not recommended) Use this command ",[1431,1432,1433],"strong",{},"every time"," you compile:",[65,1436,1438],{"className":67,"code":1437,"language":69,"meta":20,"style":20},"colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[55,1439,1440],{"__ignoreMap":20},[73,1441,1442,1444,1446,1449],{"class":75,"line":76},[73,1443,1372],{"class":125},[73,1445,1375],{"class":83},[73,1447,1448],{"class":79}," --cmake-args",[73,1450,1451],{"class":79}," -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[15,1453,1454],{},"Equivalent to writing it in the CMake file (generally not recommended to modify CMakeLists).",[65,1456,1458],{"className":67,"code":1457,"language":69,"meta":20,"style":20},"set(CMAKE_EXPORT_COMPILE_COMMANDS ON)\n```\n5.  Method 2: Global Parameters (Recommended)\n\n```bash\nmkdir ~/.colcon\n\nvim ~/.colcon/defaults.yaml\n",[55,1459,1460,1476,1481,1489,1493,1501,1509,1513],{"__ignoreMap":20},[73,1461,1462,1465,1468,1471,1474],{"class":75,"line":76},[73,1463,1464],{"class":79},"set",[73,1466,1467],{"class":892},"(",[73,1469,1470],{"class":83},"CMAKE_EXPORT_COMPILE_COMMANDS",[73,1472,1473],{"class":83}," ON",[73,1475,935],{"class":892},[73,1477,1478],{"class":75,"line":91},[73,1479,1480],{"class":83},"```\n",[73,1482,1483,1486],{"class":75,"line":902},[73,1484,1485],{"class":125},"5.",[73,1487,1488],{"class":83},"  Method 2: Global Parameters (Recommended)\n",[73,1490,1491],{"class":75,"line":914},[73,1492,899],{"emptyLinePlaceholder":898},[73,1494,1495,1498],{"class":75,"line":920},[73,1496,1497],{"class":83},"```",[73,1499,1500],{"class":125},"bash\n",[73,1502,1503,1506],{"class":75,"line":938},[73,1504,1505],{"class":125},"mkdir",[73,1507,1508],{"class":83}," ~/.colcon\n",[73,1510,1511],{"class":75,"line":949},[73,1512,899],{"emptyLinePlaceholder":898},[73,1514,1515,1518],{"class":75,"line":955},[73,1516,1517],{"class":125},"vim",[73,1519,1520],{"class":83}," ~/.colcon/defaults.yaml\n",[15,1522,1523,1524,1527],{},"Press the ",[55,1525,1526],{},"insert（插入）"," button.",[15,1529,1530],{},[18,1531],{"alt":20,"src":1532},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image206.webp",[1534,1535,1537],"h1",{"id":1536},"_11-microcontroller-environment-setup","1.1 Microcontroller Environment Setup",[1539,1540,1542],"h2",{"id":1541},"_111-microcontroller-development-environment-setup","1.1.1 Microcontroller Development Environment Setup",[10,1544,1546],{"id":1545},"_1111-stm32-development-environment-setup","1.1.1.1 STM32 Development Environment Setup",[1399,1548,1550],{"id":1549},"_11111-installing-keil-mdk","1.1.1.1.1 Installing Keil MDK",[15,1552,1553,1556,1557,1560],{},[1431,1554,1555],{},"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 ",[1431,1558,1559],{},"STM32CubeMX"," code generation tool to quickly build STM32 microcontroller projects.",[65,1562,1564],{"className":67,"code":1563,"language":69,"meta":20,"style":20},"build:\n  cmake-args:\n    - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[55,1565,1566,1571,1576],{"__ignoreMap":20},[73,1567,1568],{"class":75,"line":76},[73,1569,1570],{"class":125},"build:\n",[73,1572,1573],{"class":75,"line":91},[73,1574,1575],{"class":125},"  cmake-args:\n",[73,1577,1578,1581],{"class":75,"line":902},[73,1579,1580],{"class":125},"    -",[73,1582,1451],{"class":79},[15,1584,1585,1586,1589,1590,1593,1594,1597],{},"Press ",[55,1587,1588],{},"ESC",", then press ",[55,1591,1592],{},":wq",", and finally press ",[55,1595,1596],{},"Enter(回车)"," to save successfully.",[15,1599,1600,1601,1604],{},"When compiling, using ",[55,1602,1603],{},"colcon build"," normally will automatically enable the CMAKE_EXPORT_COMPILE_COMMANDS=ON parameter.",[460,1606,1607],{"start":91},[463,1608,1609,1610],{},"Then configure the clangd plugin.",[460,1611,1612,1621],{},[463,1613,1614,1615,1618],{},"First, download the clangd plugin.",[1616,1617],"br",{},[18,1619],{"alt":20,"src":1620},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image207.webp",[463,1622,1623],{},"Download the clangd file",[15,1625,1626],{},"Hold down Ctrl+Shift+P to open the search box.",[15,1628,1629,1630,1633,1634,1636],{},"Enter ",[55,1631,1632],{},"clangd",", find the \"Download Language Server\" option, and click to install ",[55,1635,1632],{}," (please ensure a stable internet connection).",[65,1638,1641],{"className":1639,"code":1640,"language":690},[688],"![](https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image208.webp)\n\n6.  Next, configure clangd:\n",[55,1642,1640],{"__ignoreMap":20},[15,1644,1645],{},"Disable C/C++ code suggestion features.",[15,1647,1648],{},[18,1649],{"alt":20,"src":1650},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image209.webp",[15,1652,1653],{},"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,1655,1656],{},[18,1657],{"alt":20,"src":1658},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image210.webp",[15,1660,1661],{},"Find the option shown in the image below and change it to disabled.",[15,1663,1664],{},[55,1665,1666],{},"\"C_Cpp.intelliSenseEngine\": \"disabled\"",[15,1668,1669],{},[18,1670],{"alt":20,"src":1671},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image211.webp",[460,1673,1674],{"start":914},[463,1675,1676],{},"Restart clangd",[15,1678,1679,1680,1682],{},"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,1681,1603],{}," first).",[15,1684,1685],{},[18,1686],{"alt":20,"src":1687},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image212.webp",[15,1689,1690],{},"The code hints are working normally now.",[15,1692,1693],{},[18,1694],{"alt":20,"src":1695},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image213.webp",[10,1697,1699],{"id":1698},"install-other-tools","Install other tools",[1399,1701,1702],{"id":1702},"terminal",[1704,1705,1707],"h5",{"id":1706},"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,1709,1711],{"className":67,"code":1710,"language":69,"meta":20,"style":20},"sudo apt install terminator\n",[55,1712,1713],{"__ignoreMap":20},[73,1714,1715,1718,1721,1724],{"class":75,"line":76},[73,1716,1717],{"class":125},"sudo",[73,1719,1720],{"class":83}," apt",[73,1722,1723],{"class":83}," install",[73,1725,1726],{"class":83}," terminator\n",[15,1728,1729],{},[18,1730],{"alt":20,"src":1731},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image214.webp",[1733,1734,1735,1751],"table",{},[1736,1737,1738],"thead",{},[1739,1740,1741,1745,1748],"tr",{},[1742,1743,1744],"th",{},"Shortcut keys",[1742,1746,1747],{},"Function",[1742,1749,1750],{},"Memory techniques",[1752,1753,1754,1771,1787,1802,1818,1831,1847,1863],"tbody",{},[1739,1755,1756,1762,1765],{},[1757,1758,1759],"td",{},[55,1760,1761],{},"Ctrl + Shift + E",[1757,1763,1764],{},"Vertical split screen, left and right split",[1757,1766,1767,1770],{},[1431,1768,1769],{},"E = East",", open a window to the east, meaning left-right split.",[1739,1772,1773,1778,1781],{},[1757,1774,1775],{},[55,1776,1777],{},"Ctrl + Shift + O",[1757,1779,1780],{},"Horizontal split screen, top and bottom split",[1757,1782,1783,1786],{},[1431,1784,1785],{},"O = Over / Under",", stacked vertically",[1739,1788,1789,1794,1797],{},[1757,1790,1791],{},[55,1792,1793],{},"Ctrl + Shift + S",[1757,1795,1796],{},"Hide/Show scrollbar",[1757,1798,1799],{},[1431,1800,1801],{},"S = Scrollbar",[1739,1803,1804,1809,1812],{},[1757,1805,1806],{},[55,1807,1808],{},"F11",[1757,1810,1811],{},"Full screen / Exit full screen",[1757,1813,1814,1817],{},[1431,1815,1816],{},"F = Fullscreen"," — F11 has always been the fullscreen key for many applications.",[1739,1819,1820,1825,1828],{},[1757,1821,1822],{},[55,1823,1824],{},"Ctrl + Tab",[1757,1826,1827],{},"Switch between different panes",[1757,1829,1830],{},"Similar to switching tabs in a browser, it cycles through them.",[1739,1832,1833,1838,1841],{},[1757,1834,1835],{},[55,1836,1837],{},"Ctrl + L",[1757,1839,1840],{},"Clear screen",[1757,1842,1843,1846],{},[1431,1844,1845],{},"L in \"clear L\""," can also be understood as \"pull to a new page.\"",[1739,1848,1849,1854,1857],{},[1757,1850,1851],{},[55,1852,1853],{},"Ctrl + Shift + W",[1757,1855,1856],{},"Close the current pane.",[1757,1858,1859,1862],{},[1431,1860,1861],{},"W = Window",", closes the current small window.",[1739,1864,1865,1870,1873],{},[1757,1866,1867],{},[55,1868,1869],{},"Ctrl + Shift + Q",[1757,1871,1872],{},"Exit the entire Terminator.",[1757,1874,1875,1878],{},[1431,1876,1877],{},"Q = Quit",", exits the program.",[15,1880,1881],{},"Because its font is very dark, you need to adjust the settings.",[65,1883,1885],{"className":67,"code":1884,"language":69,"meta":20,"style":20},"cp ~/.config/terminator/config ~/.config/terminator/config.bak\nvim ~/.config/terminator/config\n",[55,1886,1887,1898],{"__ignoreMap":20},[73,1888,1889,1892,1895],{"class":75,"line":76},[73,1890,1891],{"class":125},"cp",[73,1893,1894],{"class":83}," ~/.config/terminator/config",[73,1896,1897],{"class":83}," ~/.config/terminator/config.bak\n",[73,1899,1900,1902],{"class":75,"line":91},[73,1901,1517],{"class":125},[73,1903,1904],{"class":83}," ~/.config/terminator/config\n",[15,1906,1585,1907,1910,1911,1914],{},[55,1908,1909],{},"ggdG",", note the case.\nThen press the ",[55,1912,1913],{},"insert"," button.\nThen set the file content to:",[65,1916,1918],{"className":67,"code":1917,"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,1919,1920,1925,1936,1946,1956,1965,1974,1984,1988,1993,1997,2003,2009,2020,2030,2050,2055,2066,2076,2086,2096,2101,2112,2117,2128,2133,2139,2144,2150,2161,2172,2186,2192,2202,2212,2217],{"__ignoreMap":20},[73,1921,1922],{"class":75,"line":76},[73,1923,1924],{"class":892},"[global_config]\n",[73,1926,1927,1930,1933],{"class":75,"line":91},[73,1928,1929],{"class":125},"  title_transmit_bg_color",[73,1931,1932],{"class":83}," =",[73,1934,1935],{"class":83}," \"#31363b\"\n",[73,1937,1938,1941,1943],{"class":75,"line":902},[73,1939,1940],{"class":125},"  title_transmit_fg_color",[73,1942,1932],{"class":83},[73,1944,1945],{"class":83}," \"#fcfcfc\"\n",[73,1947,1948,1951,1953],{"class":75,"line":914},[73,1949,1950],{"class":125},"  title_receive_bg_color",[73,1952,1932],{"class":83},[73,1954,1955],{"class":83}," \"#232629\"\n",[73,1957,1958,1961,1963],{"class":75,"line":920},[73,1959,1960],{"class":125},"  title_receive_fg_color",[73,1962,1932],{"class":83},[73,1964,1945],{"class":83},[73,1966,1967,1970,1972],{"class":75,"line":938},[73,1968,1969],{"class":125},"  title_inactive_bg_color",[73,1971,1932],{"class":83},[73,1973,1955],{"class":83},[73,1975,1976,1979,1981],{"class":75,"line":949},[73,1977,1978],{"class":125},"  title_inactive_fg_color",[73,1980,1932],{"class":83},[73,1982,1983],{"class":83}," \"#bdc3c7\"\n",[73,1985,1986],{"class":75,"line":955},[73,1987,899],{"emptyLinePlaceholder":898},[73,1989,1990],{"class":75,"line":960},[73,1991,1992],{"class":892},"[keybindings]\n",[73,1994,1995],{"class":75,"line":978},[73,1996,899],{"emptyLinePlaceholder":898},[73,1998,2000],{"class":75,"line":1999},11,[73,2001,2002],{"class":892},"[profiles]\n",[73,2004,2006],{"class":75,"line":2005},12,[73,2007,2008],{"class":892},"  [[default]]\n",[73,2010,2012,2015,2017],{"class":75,"line":2011},13,[73,2013,2014],{"class":125},"    use_theme_colors",[73,2016,1932],{"class":83},[73,2018,2019],{"class":83}," False\n",[73,2021,2023,2026,2028],{"class":75,"line":2022},14,[73,2024,2025],{"class":125},"    use_system_font",[73,2027,1932],{"class":83},[73,2029,2019],{"class":83},[73,2031,2033,2036,2038,2041,2044,2047],{"class":75,"line":2032},15,[73,2034,2035],{"class":125},"    font",[73,2037,1932],{"class":83},[73,2039,2040],{"class":83}," Noto",[73,2042,2043],{"class":83}," Sans",[73,2045,2046],{"class":83}," Mono",[73,2048,2049],{"class":79}," 11\n",[73,2051,2053],{"class":75,"line":2052},16,[73,2054,899],{"emptyLinePlaceholder":898},[73,2056,2058,2061,2063],{"class":75,"line":2057},17,[73,2059,2060],{"class":125},"    background_type",[73,2062,1932],{"class":83},[73,2064,2065],{"class":83}," solid\n",[73,2067,2069,2072,2074],{"class":75,"line":2068},18,[73,2070,2071],{"class":125},"    background_color",[73,2073,1932],{"class":83},[73,2075,1955],{"class":83},[73,2077,2079,2082,2084],{"class":75,"line":2078},19,[73,2080,2081],{"class":125},"    foreground_color",[73,2083,1932],{"class":83},[73,2085,1945],{"class":83},[73,2087,2089,2092,2094],{"class":75,"line":2088},20,[73,2090,2091],{"class":125},"    cursor_color",[73,2093,1932],{"class":83},[73,2095,1945],{"class":83},[73,2097,2099],{"class":75,"line":2098},21,[73,2100,899],{"emptyLinePlaceholder":898},[73,2102,2104,2107,2109],{"class":75,"line":2103},22,[73,2105,2106],{"class":125},"    palette",[73,2108,1932],{"class":83},[73,2110,2111],{"class":83}," \"#232629:#ed1515:#11d116:#f67400:#1d99f3:#9b59b6:#1abc9c:#fcfcfc:#7f8c8d:#ff5555:#50fa7b:#fdbc4b:#3daee9:#ff79c6:#8be9fd:#ffffff\"\n",[73,2113,2115],{"class":75,"line":2114},23,[73,2116,899],{"emptyLinePlaceholder":898},[73,2118,2120,2123,2125],{"class":75,"line":2119},24,[73,2121,2122],{"class":125},"    scrollback_infinite",[73,2124,1932],{"class":83},[73,2126,2127],{"class":83}," True\n",[73,2129,2131],{"class":75,"line":2130},25,[73,2132,899],{"emptyLinePlaceholder":898},[73,2134,2136],{"class":75,"line":2135},26,[73,2137,2138],{"class":892},"[layouts]\n",[73,2140,2142],{"class":75,"line":2141},27,[73,2143,2008],{"class":892},[73,2145,2147],{"class":75,"line":2146},28,[73,2148,2149],{"class":892},"    [[[window0]]]\n",[73,2151,2153,2156,2158],{"class":75,"line":2152},29,[73,2154,2155],{"class":79},"      type",[73,2157,1932],{"class":83},[73,2159,2160],{"class":83}," Window\n",[73,2162,2164,2167,2169],{"class":75,"line":2163},30,[73,2165,2166],{"class":125},"      parent",[73,2168,1932],{"class":83},[73,2170,2171],{"class":83}," \"\"\n",[73,2173,2175,2178,2180,2183],{"class":75,"line":2174},31,[73,2176,2177],{"class":125},"      size",[73,2179,1932],{"class":83},[73,2181,2182],{"class":83}," 920,",[73,2184,2185],{"class":79}," 660\n",[73,2187,2189],{"class":75,"line":2188},32,[73,2190,2191],{"class":892},"    [[[child1]]]\n",[73,2193,2195,2197,2199],{"class":75,"line":2194},33,[73,2196,2155],{"class":79},[73,2198,1932],{"class":83},[73,2200,2201],{"class":83}," Terminal\n",[73,2203,2205,2207,2209],{"class":75,"line":2204},34,[73,2206,2166],{"class":125},[73,2208,1932],{"class":83},[73,2210,2211],{"class":83}," window0\n",[73,2213,2215],{"class":75,"line":2214},35,[73,2216,899],{"emptyLinePlaceholder":898},[73,2218,2220],{"class":75,"line":2219},36,[73,2221,2222],{"class":892},"[plugins]\n",[15,2224,2225,2226,2228,2229,2231],{},"Finally, press ",[55,2227,1588],{},", type ",[55,2230,1592],{}," to save and exit.",[15,2233,2234],{},"Then completely close Terminator, and reopen it.\nThis configuration will do several things:",[460,2236,2237,2240,2243,2246,2249],{},[463,2238,2239],{},"Background: a deep gray close to Konsole Breeze, not pure black.",[463,2241,2242],{},"Font color: nearly pure white, much brighter than before.",[463,2244,2245],{},"Blue: Switch to a brighter KDE blue",[463,2247,2248],{},"Green/yellow/cyan: also overall brightening.",[463,2250,2251],{},"Top red title bar: change to gray, no longer so glaring.",[1704,2253,2255],{"id":2254},"warp-terminal-recommended-looks-better-also-supports-split-screen","Warp Terminal (recommended, looks better, also supports split screen)",[15,2257,2258],{},"Compared to Terminator, Warp Terminal's default appearance is more modern, the font is clearer, and the interface is brighter.",[15,2260,2261],{},"Most importantly, it also supports multi-pane split screens like Terminator, so it can serve as a modern replacement for Terminator.",[15,2263,2264],{},"However, note that Warp's keyboard shortcuts are not exactly the same as Terminator's.",[460,2266,2267],{},[463,2268,2269,2270],{},"Install",[460,2271,2272],{},[463,2273,2274,2275],{},"Ubuntu / Debian installation",[65,2276,2278],{"className":67,"code":2277,"language":69,"meta":20,"style":20},"wget -O warp-terminal.deb \"https://app.warp.dev/download?package=deb\"\nsudo apt install ./warp-terminal.deb\n",[55,2279,2280,2294],{"__ignoreMap":20},[73,2281,2282,2285,2288,2291],{"class":75,"line":76},[73,2283,2284],{"class":125},"wget",[73,2286,2287],{"class":79}," -O",[73,2289,2290],{"class":83}," warp-terminal.deb",[73,2292,2293],{"class":83}," \"https://app.warp.dev/download?package=deb\"\n",[73,2295,2296,2298,2300,2302],{"class":75,"line":91},[73,2297,1717],{"class":125},[73,2299,1720],{"class":83},[73,2301,1723],{"class":83},[73,2303,2304],{"class":83}," ./warp-terminal.deb\n",[15,2306,2307],{},"After installation is complete, you can open Warp from the application menu, or type in the terminal:",[65,2309,2311],{"className":67,"code":2310,"language":69,"meta":20,"style":20},"warp-terminal\n```\n\n2. Fedora / 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://app.warp.dev/download?package=rpm\"\nsudo dnf install ./warp-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/restore 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,2312,2313,2318,2322,2326,2334,2338,2346,2350,2356,2368,2380,2384,2388,2396,2400,2406,2410,2414,2418,2422,2426,2433,2437,2463,2480,2523,2559,2595,2639,2664,2717,2751,2782,2825,2863,2894,2959,3003,3042,3047,3052,3057],{"__ignoreMap":20},[73,2314,2315],{"class":75,"line":76},[73,2316,2317],{"class":125},"warp-terminal\n",[73,2319,2320],{"class":75,"line":91},[73,2321,1480],{"class":83},[73,2323,2324],{"class":75,"line":902},[73,2325,899],{"emptyLinePlaceholder":898},[73,2327,2328,2331],{"class":75,"line":914},[73,2329,2330],{"class":125},"2.",[73,2332,2333],{"class":83}," Fedora / RHEL Installation\n",[73,2335,2336],{"class":75,"line":920},[73,2337,899],{"emptyLinePlaceholder":898},[73,2339,2340,2343],{"class":75,"line":938},[73,2341,2342],{"class":125},"If",[73,2344,2345],{"class":83}," you are using distributions like Fedora, RHEL, or CentOS, you can install the rpm package:\n",[73,2347,2348],{"class":75,"line":949},[73,2349,899],{"emptyLinePlaceholder":898},[73,2351,2352,2354],{"class":75,"line":955},[73,2353,1497],{"class":83},[73,2355,1500],{"class":125},[73,2357,2358,2360,2362,2365],{"class":75,"line":960},[73,2359,2284],{"class":125},[73,2361,2287],{"class":79},[73,2363,2364],{"class":83}," warp-terminal.rpm",[73,2366,2367],{"class":83}," \"https://app.warp.dev/download?package=rpm\"\n",[73,2369,2370,2372,2375,2377],{"class":75,"line":978},[73,2371,1717],{"class":125},[73,2373,2374],{"class":83}," dnf",[73,2376,1723],{"class":83},[73,2378,2379],{"class":83}," ./warp-terminal.rpm\n",[73,2381,2382],{"class":75,"line":1999},[73,2383,1480],{"class":83},[73,2385,2386],{"class":75,"line":2005},[73,2387,899],{"emptyLinePlaceholder":898},[73,2389,2390,2393],{"class":75,"line":2011},[73,2391,2392],{"class":125},"The",[73,2394,2395],{"class":83}," startup method is the same:\n",[73,2397,2398],{"class":75,"line":2022},[73,2399,899],{"emptyLinePlaceholder":898},[73,2401,2402,2404],{"class":75,"line":2032},[73,2403,1497],{"class":83},[73,2405,1500],{"class":125},[73,2407,2408],{"class":75,"line":2052},[73,2409,2317],{"class":125},[73,2411,2412],{"class":75,"line":2057},[73,2413,1480],{"class":83},[73,2415,2416],{"class":75,"line":2068},[73,2417,899],{"emptyLinePlaceholder":898},[73,2419,2420],{"class":75,"line":2078},[73,2421,899],{"emptyLinePlaceholder":898},[73,2423,2424],{"class":75,"line":2088},[73,2425,899],{"emptyLinePlaceholder":898},[73,2427,2428,2430],{"class":75,"line":2098},[73,2429,2330],{"class":125},[73,2431,2432],{"class":83}," Warp Common Keyboard Shortcuts\n",[73,2434,2435],{"class":75,"line":2103},[73,2436,899],{"emptyLinePlaceholder":898},[73,2438,2439,2442,2445,2448,2450,2452,2454,2457,2460],{"class":75,"line":2114},[73,2440,2441],{"class":100},"|",[73,2443,2444],{"class":125},"Shortcut",[73,2446,2447],{"class":83}," keys",[73,2449,2441],{"class":100},[73,2451,1747],{"class":125},[73,2453,2441],{"class":100},[73,2455,2456],{"class":125},"Memory",[73,2458,2459],{"class":83}," techniques",[73,2461,2462],{"class":100},"|\n",[73,2464,2465,2467,2470,2472,2474,2476,2478],{"class":75,"line":2119},[73,2466,2441],{"class":100},[73,2468,2469],{"class":125},"---",[73,2471,2441],{"class":100},[73,2473,2469],{"class":125},[73,2475,2441],{"class":100},[73,2477,2469],{"class":125},[73,2479,2462],{"class":100},[73,2481,2482,2484,2487,2490,2493,2496,2498,2501,2503,2506,2509,2512,2515,2518,2521],{"class":75,"line":2130},[73,2483,2441],{"class":100},[73,2485,2486],{"class":83},"`",[73,2488,2489],{"class":125},"Ctrl",[73,2491,2492],{"class":83}," +",[73,2494,2495],{"class":83}," Shift",[73,2497,2492],{"class":83},[73,2499,2500],{"class":83}," D`",[73,2502,2441],{"class":100},[73,2504,2505],{"class":125},"Split",[73,2507,2508],{"class":83}," screen to the right",[73,2510,2511],{"class":100},"|**",[73,2513,2514],{"class":83},"D = Divide",[73,2516,2517],{"class":100},"**",[73,2519,2520],{"class":83},", splits out a new pane, default opens to the right.",[73,2522,2462],{"class":100},[73,2524,2525,2527,2529,2531,2533,2535,2537,2540,2542,2544,2547,2549,2552,2554,2557],{"class":75,"line":2135},[73,2526,2441],{"class":100},[73,2528,2486],{"class":83},[73,2530,2489],{"class":125},[73,2532,2492],{"class":83},[73,2534,2495],{"class":83},[73,2536,2492],{"class":83},[73,2538,2539],{"class":83}," E`",[73,2541,2441],{"class":100},[73,2543,2505],{"class":125},[73,2545,2546],{"class":83}," Downwards",[73,2548,2511],{"class":100},[73,2550,2551],{"class":83},"E = Extend Down",[73,2553,2517],{"class":100},[73,2555,2556],{"class":83},", extend a new pane downward",[73,2558,2462],{"class":100},[73,2560,2561,2563,2565,2567,2569,2572,2574,2577,2579,2582,2585,2587,2590,2593],{"class":75,"line":2141},[73,2562,2441],{"class":100},[73,2564,2486],{"class":83},[73,2566,2489],{"class":125},[73,2568,2492],{"class":83},[73,2570,2571],{"class":83}," Alt",[73,2573,2492],{"class":83},[73,2575,2576],{"class":83}," 方向键`",[73,2578,2441],{"class":100},[73,2580,2581],{"class":125},"Switch",[73,2583,2584],{"class":83}," pane by direction",[73,2586,2441],{"class":100},[73,2588,2589],{"class":125},"Press",[73,2591,2592],{"class":83}," the direction key corresponding to where you want to go.",[73,2594,2462],{"class":100},[73,2596,2597,2599,2601,2603,2605,2607,2609,2612,2614,2616,2618,2621,2623,2625,2628,2631,2634,2637],{"class":75,"line":2146},[73,2598,2441],{"class":100},[73,2600,2486],{"class":83},[73,2602,2489],{"class":125},[73,2604,2492],{"class":83},[73,2606,2495],{"class":83},[73,2608,2492],{"class":83},[73,2610,2611],{"class":892}," [",[73,2613,2486],{"class":83},[73,2615,2441],{"class":100},[73,2617,2581],{"class":125},[73,2619,2620],{"class":83}," to the previous pane",[73,2622,2441],{"class":100},[73,2624,2486],{"class":83},[73,2626,2627],{"class":892},"[",[73,2629,2630],{"class":83},"` ",[73,2632,2633],{"class":125},"can",[73,2635,2636],{"class":83}," be understood as cutting forward.",[73,2638,2462],{"class":100},[73,2640,2641,2643,2645,2648,2650,2652,2654,2657,2659,2661],{"class":75,"line":2152},[73,2642,2441],{"class":100},[73,2644,2486],{"class":83},[73,2646,2647],{"class":892},"Ctrl + Shift + ]",[73,2649,2486],{"class":83},[73,2651,2441],{"class":100},[73,2653,2581],{"class":125},[73,2655,2656],{"class":83}," to the next pane.",[73,2658,2441],{"class":100},[73,2660,2486],{"class":83},[73,2662,2663],{"class":892},"]` can be understood as cutting backwards.|\n",[73,2665,2666,2668,2670,2672,2675,2677,2680,2683,2686,2688,2691,2694,2697,2700,2703,2706,2709,2711,2713,2715],{"class":75,"line":2163},[73,2667,2441],{"class":100},[73,2669,2486],{"class":83},[73,2671,2489],{"class":125},[73,2673,2674],{"class":83}," + Shift + Enter`",[73,2676,2441],{"class":100},[73,2678,2679],{"class":125},"Maximize/restore",[73,2681,2682],{"class":83}," current",[73,2684,2685],{"class":83}," pane",[73,2687,2441],{"class":100},[73,2689,2690],{"class":125},"Enter",[73,2692,2693],{"class":83}," to",[73,2695,2696],{"class":83}," enter",[73,2698,2699],{"class":83}," the",[73,2701,2702],{"class":83}," focus",[73,2704,2705],{"class":83}," mode",[73,2707,2708],{"class":83}," of",[73,2710,2699],{"class":83},[73,2712,2682],{"class":83},[73,2714,2685],{"class":83},[73,2716,2462],{"class":100},[73,2718,2719,2721,2723,2725,2728,2730,2733,2735,2737,2740,2742,2744,2746,2749],{"class":75,"line":2174},[73,2720,2441],{"class":100},[73,2722,2486],{"class":83},[73,2724,2489],{"class":125},[73,2726,2727],{"class":83}," + Shift + W`",[73,2729,2441],{"class":100},[73,2731,2732],{"class":125},"Close",[73,2734,2699],{"class":83},[73,2736,2682],{"class":83},[73,2738,2739],{"class":83}," pane.",[73,2741,2511],{"class":100},[73,2743,1861],{"class":892},[73,2745,2517],{"class":100},[73,2747,2748],{"class":892},", close the current small window.",[73,2750,2462],{"class":100},[73,2752,2753,2755,2757,2759,2762,2764,2767,2770,2772,2775,2777,2780],{"class":75,"line":2188},[73,2754,2441],{"class":100},[73,2756,2486],{"class":83},[73,2758,2489],{"class":125},[73,2760,2761],{"class":83}," + Shift + T`",[73,2763,2441],{"class":100},[73,2765,2766],{"class":125},"New",[73,2768,2769],{"class":83}," tab",[73,2771,2511],{"class":100},[73,2773,2774],{"class":892},"T = Tab",[73,2776,2517],{"class":100},[73,2778,2779],{"class":892},", opens a new tab.",[73,2781,2462],{"class":100},[73,2783,2784,2786,2788,2790,2793,2795,2797,2799,2801,2804,2807,2809,2812,2814,2817,2820,2823],{"class":75,"line":2194},[73,2785,2441],{"class":100},[73,2787,2486],{"class":83},[73,2789,2489],{"class":125},[73,2791,2792],{"class":83}," + PageUp`",[73,2794,2441],{"class":100},[73,2796,2581],{"class":125},[73,2798,2693],{"class":83},[73,2800,2699],{"class":83},[73,2802,2803],{"class":83}," previous",[73,2805,2806],{"class":83}," tab.",[73,2808,2441],{"class":100},[73,2810,2811],{"class":125},"Similar",[73,2813,2693],{"class":83},[73,2815,2816],{"class":83}," switching",[73,2818,2819],{"class":83}," browser",[73,2821,2822],{"class":83}," tabs",[73,2824,2462],{"class":100},[73,2826,2827,2829,2831,2833,2836,2838,2840,2842,2844,2847,2849,2851,2853,2855,2857,2859,2861],{"class":75,"line":2204},[73,2828,2441],{"class":100},[73,2830,2486],{"class":83},[73,2832,2489],{"class":125},[73,2834,2835],{"class":83}," + PageDown`",[73,2837,2441],{"class":100},[73,2839,2581],{"class":125},[73,2841,2693],{"class":83},[73,2843,2699],{"class":83},[73,2845,2846],{"class":83}," next",[73,2848,2806],{"class":83},[73,2850,2441],{"class":100},[73,2852,2811],{"class":125},[73,2854,2693],{"class":83},[73,2856,2816],{"class":83},[73,2858,2819],{"class":83},[73,2860,2822],{"class":83},[73,2862,2462],{"class":100},[73,2864,2865,2867,2869,2871,2874,2876,2879,2882,2884,2887,2889,2892],{"class":75,"line":2214},[73,2866,2441],{"class":100},[73,2868,2486],{"class":83},[73,2870,2489],{"class":125},[73,2872,2873],{"class":83}," + L`",[73,2875,2441],{"class":100},[73,2877,2878],{"class":125},"Clear",[73,2880,2881],{"class":83}," screen",[73,2883,2511],{"class":100},[73,2885,2886],{"class":892},"L in L = clear",[73,2888,2517],{"class":100},[73,2890,2891],{"class":892},", equivalent to navigating to a new page.",[73,2893,2462],{"class":100},[73,2895,2896,2898,2900,2902,2905,2907,2910,2913,2916,2918,2921,2923,2925,2928,2931,2934,2937,2940,2943,2946,2949,2951,2954,2957],{"class":75,"line":2219},[73,2897,2441],{"class":100},[73,2899,2486],{"class":83},[73,2901,2489],{"class":125},[73,2903,2904],{"class":83}," + =`",[73,2906,2441],{"class":100},[73,2908,2909],{"class":125},"Increase",[73,2911,2912],{"class":83}," font",[73,2914,2915],{"class":83}," size",[73,2917,2441],{"class":100},[73,2919,2920],{"class":125},"Next",[73,2922,2693],{"class":83},[73,2924,2699],{"class":83},[73,2926,2927],{"class":83}," equals",[73,2929,2930],{"class":83}," sign,",[73,2932,2933],{"class":83}," there",[73,2935,2936],{"class":83}," is",[73,2938,2939],{"class":83}," usually",[73,2941,2942],{"class":83}," also",[73,2944,2945],{"class":83}," a",[73,2947,2948],{"class":83}," plus",[73,2950,2930],{"class":83},[73,2952,2953],{"class":83}," indicating",[73,2955,2956],{"class":83}," enlargement.",[73,2958,2462],{"class":100},[73,2960,2962,2964,2966,2968,2971,2974,2976,2978,2981,2983,2985,2987,2990,2992,2995,2998,3001],{"class":75,"line":2961},37,[73,2963,2441],{"class":100},[73,2965,2486],{"class":83},[73,2967,2489],{"class":125},[73,2969,2970],{"class":83}," + ",[73,2972,2973],{"class":79},"-",[73,2975,2486],{"class":83},[73,2977,2441],{"class":100},[73,2979,2980],{"class":125},"Reduce",[73,2982,2912],{"class":83},[73,2984,2915],{"class":83},[73,2986,2441],{"class":100},[73,2988,2989],{"class":125},"Minus",[73,2991,2930],{"class":83},[73,2993,2994],{"class":83}," indicates",[73,2996,2997],{"class":83}," zoom",[73,2999,3000],{"class":83}," out.",[73,3002,2462],{"class":100},[73,3004,3006,3008,3010,3012,3014,3017,3019,3021,3024,3027,3029,3031,3033,3036,3038,3040],{"class":75,"line":3005},38,[73,3007,2441],{"class":100},[73,3009,2486],{"class":83},[73,3011,2489],{"class":125},[73,3013,2970],{"class":83},[73,3015,3016],{"class":79},"0",[73,3018,2486],{"class":83},[73,3020,2441],{"class":100},[73,3022,3023],{"class":125},"Restore",[73,3025,3026],{"class":83}," default",[73,3028,2912],{"class":83},[73,3030,2915],{"class":83},[73,3032,2441],{"class":100},[73,3034,3035],{"class":125},"Reset",[73,3037,2693],{"class":83},[73,3039,3026],{"class":83},[73,3041,2462],{"class":100},[73,3043,3045],{"class":75,"line":3044},39,[73,3046,899],{"emptyLinePlaceholder":898},[73,3048,3050],{"class":75,"line":3049},40,[73,3051,899],{"emptyLinePlaceholder":898},[73,3053,3055],{"class":75,"line":3054},41,[73,3056,899],{"emptyLinePlaceholder":898},[73,3058,3060,3063,3066,3068],{"class":75,"line":3059},42,[73,3061,3062],{"class":125},"3.",[73,3064,3065],{"class":83}," Features",[73,3067,2708],{"class":83},[73,3069,3070],{"class":83}," Warp\n",[460,3072,3073,3076,3079,3082,3085],{},[463,3074,3075],{},"By default, it looks better than Terminator, so no need to bother with color schemes.",[463,3077,3078],{},"Supports persistent split screen, suitable for large screen development.",[463,3080,3081],{},"The font rendering is quite clear, and it looks brighter than Terminator.",[463,3083,3084],{},"Supports command blocks, long command outputs appear clearer.",[463,3086,3087],{},"Supports AI features, but can also be used as a normal terminal without AI.",[15,3089,3090],{},"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,3092,3093],{},"If you just want a traditional, stable, lightweight terminal, you can continue to use Terminator.",[15,3095,3096],{},"If you want a better-looking interface, a more modern interactive experience, and also need split-screen, then Warp is a great choice.",[1399,3098,3099],{"id":3099},"git",[15,3101,3102],{},[18,3103],{"alt":20,"src":3104},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image215.webp",[15,3106,3107,3108],{},"Our Git introductory tutorial: ",[1406,3109,3112],{"href":3110,"rel":3111},"https://sdutvincirobot.feishu.cn/docx/B7arde6u0ob5tsxk5QOcFLG7nYd",[1410],"Vinci Robotics Team Git Introductory Tutorial",[10,3114,3116],{"id":3115},"ros2-architecture-framework","ROS2 Architecture Framework",[15,3118,3119],{},[18,3120],{"alt":20,"src":3121},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image216.webp",[15,3123,3124],{},[18,3125],{"alt":20,"src":3126},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image217.webp",[15,3128,3129],{},[18,3130],{"alt":20,"src":3131},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image218.webp",[15,3133,3134],{},[18,3135],{"alt":20,"src":3136},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image219.webp",[15,3138,3139],{},"Client Library refers to the ROS2 client libraries, such as rclcpp and rclpy.",[15,3141,3142],{},"The Abstract DDS Layer is a DDS abstraction layer that makes DDS pluggable, allowing the DDS module to be easily swapped out.",[15,3144,3145],{},"Intra-process APIs are in-process communication APIs, a type of API that can improve communication efficiency.",[15,3147,3148],{},[18,3149],{"alt":20,"src":3150},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image220.webp",[15,3152,3153],{},[18,3154],{"alt":20,"src":3155},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image221.webp",[3157,3158,3159],"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":3161},[3162,3163,3164,3165,3166,3167,3168,3169,3170,3171],{"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":1348,"depth":902,"text":1349},{"id":1396,"depth":902,"text":1397},{"id":1541,"depth":91,"text":1542,"children":3172},[3173,3174,3175],{"id":1545,"depth":902,"text":1546},{"id":1698,"depth":902,"text":1699},{"id":3115,"depth":902,"text":3116},"/en-us/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","2",2000000,"2023-12-30","wiki/2023-12-30-ros2-tutorial","en-us:2023-12-30-ros2-tutorial","/en-us/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki/2023-12-30-ros2-tutorial/ch2-入门操作",false,null,"en-US","en-us",{},{"title":5,"description":20},"/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch2-入门操作","RbNbgyxbD9f-2PfadELx55S7mMzU89mnbyJWYQjQnPs",[3196,3202,3208,3214,3220,3226,3232,3238,3244,3250,3256,3262,3268,3274,3280,3286,3292,3298,3303,3309,3314,3320,3326,3332,3338,3344,3350,3356,3362,3368,3374,3380,3386,3392,3398,3404,3410,3416,3422,3428,3434,3440,3446,3452,3458,3464,3470,3476,3482,3488,3494,3495,3501,3507,3513,3519,3525,3531,3537,3543],{"path":3197,"stem":3198,"title":3199,"date":3179,"chapter":3200,"chapterSort":3201,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","Introduction to ROS2","1",1000000,{"path":3203,"stem":3204,"title":3205,"date":3179,"chapter":3206,"chapterSort":3207,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2 Simulation Platform","10",10000000,{"path":3209,"stem":3210,"title":3211,"date":3179,"chapter":3212,"chapterSort":3213,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":3215,"stem":3216,"title":3217,"date":3179,"chapter":3218,"chapterSort":3219,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":3221,"stem":3222,"title":3223,"date":3179,"chapter":3224,"chapterSort":3225,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":3227,"stem":3228,"title":3229,"date":3179,"chapter":3230,"chapterSort":3231,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","Migrate Ign Gazebo to Gz Sim","11.4",11040000,{"path":3233,"stem":3234,"title":3235,"date":3179,"chapter":3236,"chapterSort":3237,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gazebo simulation platform","11",11000000,{"path":3239,"stem":3240,"title":3241,"date":3179,"chapter":3242,"chapterSort":3243,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-1-humble-ban-ben","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-1-Humble版本","Humble Navigation Simulation","12.1",12010000,{"path":3245,"stem":3246,"title":3247,"date":3179,"chapter":3248,"chapterSort":3249,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-2-jazzy-ban-ben","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-2-Jazzy版本","Jazzy Navigation Simulation","12.2",12020000,{"path":3251,"stem":3252,"title":3253,"date":3179,"chapter":3254,"chapterSort":3255,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-3-humble2jazzy","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-3-Humble2Jazzy","Differences in Navigation between Humble and Jazzy","12.3",12030000,{"path":3257,"stem":3258,"title":3259,"date":3179,"chapter":3260,"chapterSort":3261,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","Robot Navigation with Navigation2 (Simulation)","12",12000000,{"path":3263,"stem":3264,"title":3265,"date":3179,"chapter":3266,"chapterSort":3267,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-1-Boost.Aiso","Boost.Asio库","13.1.1",13010100,{"path":3269,"stem":3270,"title":3271,"date":3179,"chapter":3272,"chapterSort":3273,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2-serial-driver","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2_serial_driver","ROS2 Serial Driver Library","13.1.2",13010200,{"path":3275,"stem":3276,"title":3277,"date":3179,"chapter":3278,"chapterSort":3279,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-1-串口通信","UART serial communication","13.1",13010000,{"path":3281,"stem":3282,"title":3283,"date":3179,"chapter":3284,"chapterSort":3285,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","SocketCAN","13.2.1",13020100,{"path":3287,"stem":3288,"title":3289,"date":3179,"chapter":3290,"chapterSort":3291,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2-socketcan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2_socketcan","ROS2_SocketCAN","13.2.2",13020200,{"path":3293,"stem":3294,"title":3295,"date":3179,"chapter":3296,"chapterSort":3297,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-2-CAN通信","CAN communication","13.2",13020000,{"path":3299,"stem":3300,"title":3265,"date":3179,"chapter":3301,"chapterSort":3302,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-1-Boost.Aiso","13.3.1",13030100,{"path":3304,"stem":3305,"title":3306,"date":3179,"chapter":3307,"chapterSort":3308,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信","TCP communication","13.3",13030000,{"path":3310,"stem":3311,"title":3265,"date":3179,"chapter":3312,"chapterSort":3313,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-1-boost-aiso","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-1-Boost.Aiso","13.4.1",13040100,{"path":3315,"stem":3316,"title":3317,"date":3179,"chapter":3318,"chapterSort":3319,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-udp-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-4-UDP通信","UDP communication","13.4",13040000,{"path":3321,"stem":3322,"title":3323,"date":3179,"chapter":3324,"chapterSort":3325,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch13-linux-ying-jian-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch13-Linux硬件通信","Linux hardware communication","13",13000000,{"path":3327,"stem":3328,"title":3329,"date":3179,"chapter":3330,"chapterSort":3331,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-1-ji-qi-ren-zu-cheng","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-1-机器人组成","Robot Composition","14.1",14010000,{"path":3333,"stem":3334,"title":3335,"date":3179,"chapter":3336,"chapterSort":3337,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-1-yuan-cheng-kai-fa-ssh","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-1-远程开发SSH","Remote Development SSH","14.2.1",14020100,{"path":3339,"stem":3340,"title":3341,"date":3179,"chapter":3342,"chapterSort":3343,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-2-yuan-cheng-fang-wen-zhuo-mian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-2-远程访问桌面","Remote Desktop Access","14.2.2",14020200,{"path":3345,"stem":3346,"title":3347,"date":3179,"chapter":3348,"chapterSort":3349,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-2-工控机之远程开发环境","Remote Development Environment for Industrial PC","14.2",14020000,{"path":3351,"stem":3352,"title":3353,"date":3179,"chapter":3354,"chapterSort":3355,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-3-gong-kong-ji-zhi-wai-jie-usb-she-bei","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-3-工控机之外接USB设备","External USB Devices for the Industrial PC","14.3",14030000,{"path":3357,"stem":3358,"title":3359,"date":3179,"chapter":3360,"chapterSort":3361,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-4-fen-bu-shi-da-jian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-4-分布式搭建","Distributed setup","14.4",14040000,{"path":3363,"stem":3364,"title":3365,"date":3179,"chapter":3366,"chapterSort":3367,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-5-you-hua-ri-zhi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-5-优化日志","Optimize logs","14.5",14050000,{"path":3369,"stem":3370,"title":3371,"date":3179,"chapter":3372,"chapterSort":3373,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-1-li-cheng-ji-odom","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-1-里程计Odom","odometry","14.6.1",14060100,{"path":3375,"stem":3376,"title":3377,"date":3179,"chapter":3378,"chapterSort":3379,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-2-惯性计IMU","Inertial Measurement Unit (IMU)","14.6.2",14060200,{"path":3381,"stem":3382,"title":3383,"date":3179,"chapter":3384,"chapterSort":3385,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-3-ji-guang-lei-da-lidar","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-3-激光雷达LiDAR","LiDAR","14.6.3",14060300,{"path":3387,"stem":3388,"title":3389,"date":3179,"chapter":3390,"chapterSort":3391,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-4-xiang-ji-camera","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-4-相机Camera","Camera","14.6.4",14060400,{"path":3393,"stem":3394,"title":3395,"date":3179,"chapter":3396,"chapterSort":3397,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-5-quan-qiu-ding-wei-gnss","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-5-全球定位GNSS","Global Navigation Satellite System (GNSS)","14.6.5",14060500,{"path":3399,"stem":3400,"title":3401,"date":3179,"chapter":3402,"chapterSort":3403,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-6-shou-bing-joy","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-6-手柄joy","The query \"手柄JOY\" is a bit ambiguous. To help you better, could you please provide more details? For example:","14.6.6",14060600,{"path":3405,"stem":3406,"title":3407,"date":3179,"chapter":3408,"chapterSort":3409,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-7-jian-pan-kong-zhi-jie-dian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-7-键盘控制节点","Keyboard control node","14.6.7",14060700,{"path":3411,"stem":3412,"title":3413,"date":3179,"chapter":3414,"chapterSort":3415,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-ying-jian-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-6-硬件平台","Hardware platform","14.6",14060000,{"path":3417,"stem":3418,"title":3419,"date":3179,"chapter":3420,"chapterSort":3421,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-7-zuo-biao-xi-yu-hua-ti-guan-xi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-7-坐标系与话题关系","Coordinate System and Topic Relationship","14.7",14070000,{"path":3423,"stem":3424,"title":3425,"date":3179,"chapter":3426,"chapterSort":3427,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-lun-shi-li-cheng-ji-biao-ding","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-轮式里程计标定","Wheel odometry calibration","14.8.1.1",14080101,{"path":3429,"stem":3430,"title":3431,"date":3179,"chapter":3432,"chapterSort":3433,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-轮式里程计与IMU融合","Fusion of Wheel Odometry and IMU","14.8.1.2",14080102,{"path":3435,"stem":3436,"title":3437,"date":3179,"chapter":3438,"chapterSort":3439,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-1-轮式里程计标定与融合","Wheel odometry calibration and fusion","14.8.1",14080100,{"path":3441,"stem":3442,"title":3443,"date":3179,"chapter":3444,"chapterSort":3445,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-2-ji-guang-lei-da-gong-ju","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-2-激光雷达工具","Lidar Tool","14.8.2",14080200,{"path":3447,"stem":3448,"title":3449,"date":3179,"chapter":3450,"chapterSort":3451,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-3-xiang-ji-shi-yong-jin-jie","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-3-相机使用进阶","Advanced Camera Usage","14.8.3",14080300,{"path":3453,"stem":3454,"title":3455,"date":3179,"chapter":3456,"chapterSort":3457,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-ying-jian-ping-tai-jin-jie","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-8-硬件平台进阶","Advanced Hardware Platform","14.8",14080000,{"path":3459,"stem":3460,"title":3461,"date":3179,"chapter":3462,"chapterSort":3463,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","Robot hardware","14",14000000,{"path":3465,"stem":3466,"title":3467,"date":3179,"chapter":3468,"chapterSort":3469,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":3471,"stem":3472,"title":3473,"date":3179,"chapter":3474,"chapterSort":3475,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","MoveIt2 industrial robot arm","16",16000000,{"path":3477,"stem":3478,"title":3479,"date":3179,"chapter":3480,"chapterSort":3481,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","Robot Navigation with Navigation2 (Physical Robot)","17",17000000,{"path":3483,"stem":3484,"title":3485,"date":3179,"chapter":3486,"chapterSort":3487,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch18-microros","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":3489,"stem":3490,"title":3491,"date":3179,"chapter":3492,"chapterSort":3493,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots simulation platform","19",19000000,{"path":3176,"stem":3193,"title":5,"date":3179,"chapter":3177,"chapterSort":3178,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},{"path":3496,"stem":3497,"title":3498,"date":3179,"chapter":3499,"chapterSort":3500,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch20-opencv","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":3502,"stem":3503,"title":3504,"date":3179,"chapter":3505,"chapterSort":3506,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","Workspace and Function Packages","3",3000000,{"path":3508,"stem":3509,"title":3510,"date":3179,"chapter":3511,"chapterSort":3512,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch4-四大通信","Four Major Communications","4",4000000,{"path":3514,"stem":3515,"title":3516,"date":3179,"chapter":3517,"chapterSort":3518,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2 Other Communication Mechanisms","5",5000000,{"path":3520,"stem":3521,"title":3522,"date":3179,"chapter":3523,"chapterSort":3524,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch6-launch","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":3526,"stem":3527,"title":3528,"date":3179,"chapter":3529,"chapterSort":3530,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","Replaying rosbag2","7",7000000,{"path":3532,"stem":3533,"title":3534,"date":3179,"chapter":3535,"chapterSort":3536,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","Coordinate Transformation TF","8",8000000,{"path":3538,"stem":3539,"title":3540,"date":3179,"chapter":3541,"chapterSort":3542,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":3186},"/en-us/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","_i18n/en-us/wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","Visualization Platform RVIZ2 and URDF Modeling Language","9",9000000,{"path":3182,"stem":3544,"title":3545,"date":3179,"chapter":3187,"chapterSort":3546,"docKey":3181,"docRoot":3182,"docTitle":3183,"isWikiDoc":898,"isWikiIndex":898},"_i18n/en-us/wiki/2023-12-30-ros2-tutorial/index","ROS2 Robot Operating System Tutorial",0,{"variants":3548},[3549,3550,3553,3556,3559],{"path":3176,"localeSlug":3189,"i18nKey":3185},{"path":3551,"localeSlug":3552,"i18nKey":3185},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","zh-hant",{"path":3554,"localeSlug":3555,"i18nKey":3185},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","zh-hk",{"path":3557,"localeSlug":3558,"i18nKey":3185},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","zh-tw",{"path":3560,"localeSlug":3561,"i18nKey":3185},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","zh-cn",[3176,3192,3551,3192,3554,3192,3557,3192,3560,3192],1780671798021]