[{"data":1,"prerenderedAt":3591},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo":3,"wiki-doc-items-2023-12-30-ros2-tutorial":3171,"wiki:author-members":3579},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":3158,"chapterOrder":3159,"date":3160,"description":21,"docKey":3161,"docRoot":3162,"docTitle":3163,"extension":3164,"isWikiDoc":862,"isWikiIndex":3165,"meta":3166,"navigation":862,"path":3167,"seo":3168,"stem":3169,"wikiDepth":76,"__hash__":3170},"wiki\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作.md","入门操作",[7],"董佳辉",{"type":9,"value":10,"toc":3145},"minimark",[11,15,23,28,33,38,43,46,51,59,64,108,111,116,136,141,146,149,154,171,179,207,212,215,220,223,226,229,232,235,237,242,247,250,255,260,263,268,273,276,281,283,288,293,298,301,306,336,341,346,370,375,380,385,415,418,421,426,429,432,436,441,446,451,454,459,464,467,470,506,511,516,519,524,527,532,537,542,545,548,551,556,559,562,565,568,571,574,579,584,587,590,593,598,601,606,621,626,641,644,649,652,657,665,670,675,680,685,689,694,724,727,732,737,742,745,750,753,758,763,768,771,774,779,782,787,792,795,800,812,815,830,835,837,842,946,951,956,961,965,970,975,978,983,988,991,995,1000,1008,1016,1024,1027,1030,1035,1038,1043,1046,1054,1057,1062,1065,1070,1073,1078,1081,1083,1088,1093,1098,1101,1106,1111,1116,1121,1126,1166,1171,1174,1179,1184,1186,1189,1194,1199,1202,1207,1212,1217,1220,1225,1228,1233,1236,1241,1243,1248,1253,1258,1263,1265,1268,1273,1276,1279,1282,1287,1292,1295,1300,1305,1310,1315,1319,1324,1327,1332,1358,1363,1367,1372,1380,1383,1386,1389,1453,1478,1485,1490,1493,1515,1529,1536,1570,1573,1578,1581,1586,1589,1594,1599,1604,1607,1612,1615,1620,1623,1626,1631,1650,1655,1803,1806,1829,1840,2148,2157,2160,2177,2181,2184,2187,2190,2291,2500,2522,2525,2528,2531,2535,2538,2985,2988,2991,2994,2999,3006,3009,3049,3054,3061,3073,3076,3093,3098,3102,3107,3112,3117,3122,3125,3128,3131,3136,3141],[12,13,14],"h3",{"id":14},"简介",[16,17,18],"p",{},[19,20],"img",{"alt":21,"src":22},"","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage83.webp",[16,24,25],{},[19,26],{"alt":21,"src":27},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage84.webp",[16,29,30],{},[19,31],{"alt":21,"src":32},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage85.webp",[16,34,35],{},[19,36],{"alt":21,"src":37},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage86.webp",[16,39,40],{},[19,41],{"alt":21,"src":42},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage87.webp",[12,44,45],{"id":45},"终端环境搭建",[16,47,48],{},[19,49],{"alt":21,"src":50},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage88.webp",[16,52,53,54,58],{},"如果在上方安装ROS2的时候，已经将该语句添加到",[55,56,57],"code",{},"~\u002F.bashrc","了，则不必再跟着这步操作了。",[16,60,61],{},[19,62],{"alt":21,"src":63},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage89.webp",[65,66,70],"pre",{"className":67,"code":68,"language":69,"meta":21,"style":21},"language-bash shiki shiki-themes github-light github-dark","source \u002Fopt\u002Fros\u002Fhumble\u002Fsetup.bash  #将ROS2环境变量配置到当前位置\necho \" source \u002Fopt\u002Fros\u002Fhumble\u002Fsetup.bash\" >> ~\u002F.bashrc    #每次启动终端都会运行该句\n","bash",[55,71,72,89],{"__ignoreMap":21},[73,74,77,81,85],"span",{"class":75,"line":76},"line",1,[73,78,80],{"class":79},"sj4cs","source",[73,82,84],{"class":83},"sZZnC"," \u002Fopt\u002Fros\u002Fhumble\u002Fsetup.bash",[73,86,88],{"class":87},"sJ8bj","  #将ROS2环境变量配置到当前位置\n",[73,90,92,95,98,102,105],{"class":75,"line":91},2,[73,93,94],{"class":79},"echo",[73,96,97],{"class":83}," \" source \u002Fopt\u002Fros\u002Fhumble\u002Fsetup.bash\"",[73,99,101],{"class":100},"szBVR"," >>",[73,103,104],{"class":83}," ~\u002F.bashrc",[73,106,107],{"class":87},"    #每次启动终端都会运行该句\n",[109,110],"hr",{},[16,112,113],{},[19,114],{"alt":21,"src":115},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage90.webp",[65,117,119],{"className":67,"code":118,"language":69,"meta":21,"style":21},"ros2 run demo_nodes_cpp talker\n",[55,120,121],{"__ignoreMap":21},[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",[16,137,138],{},[19,139],{"alt":21,"src":140},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage91.webp",[16,142,143],{},[19,144],{"alt":21,"src":145},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage92.webp",[16,147,148],{},"用ctrl+c来进行取消程序运行",[16,150,151],{},[19,152],{"alt":21,"src":153},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage93.webp",[65,155,157],{"className":67,"code":156,"language":69,"meta":21,"style":21},"ros2 run demo_nodes_py listener\n",[55,158,159],{"__ignoreMap":21},[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",[16,172,173,176],{},[19,174],{"alt":21,"src":175},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage94.webp",[19,177],{"alt":21,"src":178},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage95.webp",[65,180,182],{"className":67,"code":181,"language":69,"meta":21,"style":21},"ros2 run turtlesim turtlesim_node\nros2 run turtlesim turtle_teleop_key\n",[55,183,184,196],{"__ignoreMap":21},[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",[16,208,209],{},[19,210],{"alt":21,"src":211},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage96.webp",[12,213,214],{"id":214},"命令行操作",[16,216,217],{},[19,218],{"alt":21,"src":219},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage97.webp",[16,221,222],{},"mkdir -p 新建文件夹",[16,224,225],{},"rm -R 递归删除（删掉文件夹及里面包含的文件夹及文件）",[16,227,228],{},"touch 新建文件",[16,230,231],{},"rm 删除文件",[16,233,234],{},"cd ..退回上级目录（cd 点点）",[109,236],{},[16,238,239],{},[19,240],{"alt":21,"src":241},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage98.webp",[16,243,244],{},[19,245],{"alt":21,"src":246},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage99.webp",[16,248,249],{},"会弹提示信息，告诉我们后面要跟的参数",[16,251,252],{},[19,253],{"alt":21,"src":254},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage100.webp",[16,256,257],{},[19,258],{"alt":21,"src":259},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage101.webp",[16,261,262],{},"ros2 node list会把当前ROS2正在运行的节点列出来",[16,264,265],{},[19,266],{"alt":21,"src":267},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage102.webp",[16,269,270],{},[19,271],{"alt":21,"src":272},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage103.webp",[16,274,275],{},"ros2 node info + \u002F节点名 可以查看目标节点的详细情况",[16,277,278],{},[19,279],{"alt":21,"src":280},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage104.webp",[16,282,249],{},[16,284,285],{},[19,286],{"alt":21,"src":287},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage105.webp",[16,289,290],{},[19,291],{"alt":21,"src":292},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage106.webp",[16,294,295],{},[19,296],{"alt":21,"src":297},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage107.webp",[16,299,300],{},"可以通过话题来显示机器人运动的状态",[16,302,303],{},[19,304],{"alt":21,"src":305},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage108.webp",[65,307,309],{"className":67,"code":308,"language":69,"meta":21,"style":21},"ros2 topic pub --rate 1 \u002Fturtle1\u002Fcmd_vel geometry_msgs\u002Fmsg\u002FTwist \"{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}\"\n",[55,310,311],{"__ignoreMap":21},[73,312,313,315,318,321,324,327,330,333],{"class":75,"line":76},[73,314,126],{"class":125},[73,316,317],{"class":83}," topic",[73,319,320],{"class":83}," pub",[73,322,323],{"class":79}," --rate",[73,325,326],{"class":79}," 1",[73,328,329],{"class":83}," \u002Fturtle1\u002Fcmd_vel",[73,331,332],{"class":83}," geometry_msgs\u002Fmsg\u002FTwist",[73,334,335],{"class":83}," \"{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}\"\n",[16,337,338],{},[19,339],{"alt":21,"src":340},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage109.webp",[16,342,343],{},[19,344],{"alt":21,"src":345},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage110.webp",[65,347,349],{"className":67,"code":348,"language":69,"meta":21,"style":21},"ros2 service call \u002Fspawn turtlesim\u002Fsrv\u002FSpawn \"{x: 2, y: 2, theta: 0.2, name: ''}\"\n",[55,350,351],{"__ignoreMap":21},[73,352,353,355,358,361,364,367],{"class":75,"line":76},[73,354,126],{"class":125},[73,356,357],{"class":83}," service",[73,359,360],{"class":83}," call",[73,362,363],{"class":83}," \u002Fspawn",[73,365,366],{"class":83}," turtlesim\u002Fsrv\u002FSpawn",[73,368,369],{"class":83}," \"{x: 2, y: 2, theta: 0.2, name: ''}\"\n",[16,371,372],{},[19,373],{"alt":21,"src":374},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage111.webp",[16,376,377],{},[19,378],{"alt":21,"src":379},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage112.webp",[16,381,382],{},[19,383],{"alt":21,"src":384},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage113.webp",[65,386,388],{"className":67,"code":387,"language":69,"meta":21,"style":21},"ros2 bag record \u002Fturtle1\u002Fcmd_vel\nros2 bag play rosbag2_2022_04_11-17_35_40\u002Frosbag2_2022_04_11-17_35_40_0.db3\n",[55,389,390,403],{"__ignoreMap":21},[73,391,392,394,397,400],{"class":75,"line":76},[73,393,126],{"class":125},[73,395,396],{"class":83}," bag",[73,398,399],{"class":83}," record",[73,401,402],{"class":83}," \u002Fturtle1\u002Fcmd_vel\n",[73,404,405,407,409,412],{"class":75,"line":91},[73,406,126],{"class":125},[73,408,396],{"class":83},[73,410,411],{"class":83}," play",[73,413,414],{"class":83}," rosbag2_2022_04_11-17_35_40\u002Frosbag2_2022_04_11-17_35_40_0.db3\n",[16,416,417],{},"ros2 bag record + 话题",[16,419,420],{},"按Ctrl+C结束，然后录制的数据在当前终端的目录下",[16,422,423],{},[19,424],{"alt":21,"src":425},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage114.webp",[16,427,428],{},"如何去复现呢？",[16,430,431],{},"ros2 bag play + 文件夹名称",[12,433,435],{"id":434},"ros2-helloworldc","ROS2 HelloWorld(C++)",[16,437,438],{},[19,439],{"alt":21,"src":440},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage115.webp",[16,442,443],{},[19,444],{"alt":21,"src":445},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage116.webp",[16,447,448],{},[19,449],{"alt":21,"src":450},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage117.webp",[16,452,453],{},"1.创建功能包",[16,455,456],{},[19,457],{"alt":21,"src":458},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage118.webp",[16,460,461],{},[19,462],{"alt":21,"src":463},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage119.webp",[16,465,466],{},"指令就是创建ros2的功能包",[16,468,469],{},"ros2 pkg create + 功能包名 + --build-type(构建类型) + ament_cmake \u002F ament_python + --dependencies（依赖） + rclcpp(ROS2的CPP客户端) + --node-name（节点名） + 节点名",[65,471,473],{"className":67,"code":472,"language":69,"meta":21,"style":21},"ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld\n",[55,474,475],{"__ignoreMap":21},[73,476,477,479,482,485,488,491,494,497,500,503],{"class":75,"line":76},[73,478,126],{"class":125},[73,480,481],{"class":83}," pkg",[73,483,484],{"class":83}," create",[73,486,487],{"class":83}," pkg01_helloworld_cpp",[73,489,490],{"class":79}," --build-type",[73,492,493],{"class":83}," ament_cmake",[73,495,496],{"class":79}," --dependencies",[73,498,499],{"class":83}," rclcpp",[73,501,502],{"class":79}," --node-name",[73,504,505],{"class":83}," helloworld\n",[16,507,508],{},[19,509],{"alt":21,"src":510},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage120.webp",[16,512,513],{},[19,514],{"alt":21,"src":515},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage121.webp",[16,517,518],{},"源文件自动生成了，文件名和我们指定的node name是一致的。",[16,520,521],{},[19,522],{"alt":21,"src":523},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage122.webp",[16,525,526],{},"这是自动生成的内容，但是和ROS2没有任何关系。",[16,528,529],{},[19,530],{"alt":21,"src":531},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage123.webp",[16,533,534],{},[19,535],{"alt":21,"src":536},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage124.webp",[16,538,539],{},[19,540],{"alt":21,"src":541},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage125.webp",[16,543,544],{},"如果依赖的库不止这一个，则再回车，",[16,546,547],{},"xxx",[16,549,550],{},"再添加下一个",[16,552,553],{},[19,554],{"alt":21,"src":555},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage126.webp",[16,557,558],{},"10行是查找包",[16,560,561],{},"12行是添加可执行的",[16,563,564],{},"add_executable 的第一个参数是 可执行文件的名字（默认和节点名一致，默认和源文件名一致） 第二个参数是源文件的名字",[16,566,567],{},"17行是为我们的可执行程序添加依赖 我们的可执行程序依赖于RCLCPP这个库",[16,569,570],{},"22行是要为我们的可执行程序设立一个安装目录，创建在了当前功能包下的lib目录，也就是 工作空间名\u002Finstall\u002F功能包名\u002Flib",[16,572,573],{},"编辑配置文件之后编译，用cd..返回ws目录",[16,575,576],{},[19,577],{"alt":21,"src":578},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage127.webp",[16,580,581],{},[19,582],{"alt":21,"src":583},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage128.webp",[16,585,586],{},"图标为绿色，是没有警告也没有错误",[16,588,589],{},"是黄色的则有警告",[16,591,592],{},"是红色的则有致命错误",[16,594,595],{},[19,596],{"alt":21,"src":597},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage129.webp",[16,599,600],{},"可执行二进制文件的路径",[16,602,603],{},[19,604],{"alt":21,"src":605},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage130.webp",[65,607,609],{"className":67,"code":608,"language":69,"meta":21,"style":21},"source install\u002Fsetup.bash #刷新环境变量\n",[55,610,611],{"__ignoreMap":21},[73,612,613,615,618],{"class":75,"line":76},[73,614,80],{"class":79},[73,616,617],{"class":83}," install\u002Fsetup.bash",[73,619,620],{"class":87}," #刷新环境变量\n",[16,622,623],{},[19,624],{"alt":21,"src":625},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage131.webp",[65,627,629],{"className":67,"code":628,"language":69,"meta":21,"style":21},"ros2 run pkg01_helloworld_cpp helloworld\n",[55,630,631],{"__ignoreMap":21},[73,632,633,635,637,639],{"class":75,"line":76},[73,634,126],{"class":125},[73,636,129],{"class":83},[73,638,487],{"class":83},[73,640,505],{"class":83},[16,642,643],{},"ros2 run 功能包名称 可执行文件名(默认和节点名一致)",[16,645,646],{},[19,647],{"alt":21,"src":648},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage132.webp",[16,650,651],{},"编辑ROS2 C++源文件：",[16,653,654],{},[19,655],{"alt":21,"src":656},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage133.webp",[65,658,663],{"className":659,"code":661,"language":662},[660],"language-text","#include \"rclcpp\u002Frclcpp.hpp\"\n\nint main(int argc, char ** argv)\n{\n  rclcpp::init(argc,argv);\n\n  auto node = rclcpp::Node::make_shared(\"helloworld_node\");\n\n  RCLCPP_INFO(node->get_logger(),\"hello world!\");\n\n  rclcpp::shutdown();\n\n  return 0;\n}\n","text",[55,664,661],{"__ignoreMap":21},[16,666,667],{},[19,668],{"alt":21,"src":669},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage134.webp",[16,671,672],{},[19,673],{"alt":21,"src":674},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage135.webp",[16,676,677],{},[19,678],{"alt":21,"src":679},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage136.webp",[16,681,682],{},[19,683],{"alt":21,"src":684},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage137.webp",[12,686,688],{"id":687},"ros2-helloworldpython","ROS2 HelloWorld(Python)",[16,690,691],{},[19,692],{"alt":21,"src":693},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage138.webp",[65,695,697],{"className":67,"code":696,"language":69,"meta":21,"style":21},"ros2 pkg create pkg02_helloworld_py --build-type ament_python --dependencies rclpy --node-name helloworld\n",[55,698,699],{"__ignoreMap":21},[73,700,701,703,705,707,710,712,715,717,720,722],{"class":75,"line":76},[73,702,126],{"class":125},[73,704,481],{"class":83},[73,706,484],{"class":83},[73,708,709],{"class":83}," pkg02_helloworld_py",[73,711,490],{"class":79},[73,713,714],{"class":83}," ament_python",[73,716,496],{"class":79},[73,718,719],{"class":83}," rclpy",[73,721,502],{"class":79},[73,723,505],{"class":83},[16,725,726],{},"ros2 pkg create + 功能包名 + --build-type(构建类型) + ament_cmake \u002F ament_python + --dependencies（依赖） + rclpy(ROS2的Python客户端) + --node-name（节点名） + 节点名",[16,728,729],{},[19,730],{"alt":21,"src":731},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage139.webp",[16,733,734],{},[19,735],{"alt":21,"src":736},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage140.webp",[16,738,739],{},[19,740],{"alt":21,"src":741},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage141.webp",[16,743,744],{},"与node name和可执行二进制文件同名",[16,746,747],{},[19,748],{"alt":21,"src":749},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage142.webp",[16,751,752],{},"默认这里面已经有代码，但是和ROS2无关，这是标准的python代码",[16,754,755],{},[19,756],{"alt":21,"src":757},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage143.webp",[16,759,760],{},[19,761],{"alt":21,"src":762},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage144.webp",[16,764,765],{},[19,766],{"alt":21,"src":767},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage145.webp",[16,769,770],{},"二进制可执行文件 映射到 源文件的main函数",[16,772,773],{},"如何编译呢？",[16,775,776],{},[19,777],{"alt":21,"src":778},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage146.webp",[16,780,781],{},"先返回上一级，来到ws目录",[16,783,784],{},[19,785],{"alt":21,"src":786},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage147.webp",[16,788,789],{},[19,790],{"alt":21,"src":791},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage148.webp",[16,793,794],{},"有个黄色警告，但是不影响我们使用。",[16,796,797],{},[19,798],{"alt":21,"src":799},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage149.webp",[65,801,803],{"className":67,"code":802,"language":69,"meta":21,"style":21},"source .\u002Finstall\u002Fsetup.bash\n",[55,804,805],{"__ignoreMap":21},[73,806,807,809],{"class":75,"line":76},[73,808,80],{"class":79},[73,810,811],{"class":83}," .\u002Finstall\u002Fsetup.bash\n",[16,813,814],{},"刷新环境变量",[65,816,818],{"className":67,"code":817,"language":69,"meta":21,"style":21},"ros2 run pkg02_helloworld_py helloworld\n",[55,819,820],{"__ignoreMap":21},[73,821,822,824,826,828],{"class":75,"line":76},[73,823,126],{"class":125},[73,825,129],{"class":83},[73,827,709],{"class":83},[73,829,505],{"class":83},[16,831,832],{},[19,833],{"alt":21,"src":834},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage150.webp",[109,836],{},[16,838,839],{},[19,840],{"alt":21,"src":841},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage151.webp",[65,843,847],{"className":844,"code":845,"language":846,"meta":21,"style":21},"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,848,849,858,864,876,882,900,911,917,922,940],{"__ignoreMap":21},[73,850,851,854],{"class":75,"line":76},[73,852,853],{"class":100},"import",[73,855,857],{"class":856},"sVt8B"," rclpy\n",[73,859,860],{"class":75,"line":91},[73,861,863],{"emptyLinePlaceholder":862},true,"\n",[73,865,867,870,873],{"class":75,"line":866},3,[73,868,869],{"class":100},"def",[73,871,872],{"class":125}," main",[73,874,875],{"class":856},"():\n",[73,877,879],{"class":75,"line":878},4,[73,880,881],{"class":856},"    rclpy.init()\n",[73,883,885,888,891,894,897],{"class":75,"line":884},5,[73,886,887],{"class":856},"    node ",[73,889,890],{"class":100},"=",[73,892,893],{"class":856}," rclpy.create_node(",[73,895,896],{"class":83},"\"helloworld_py_node\"",[73,898,899],{"class":856},")\n",[73,901,903,906,909],{"class":75,"line":902},6,[73,904,905],{"class":856},"    node.get_logger().info(",[73,907,908],{"class":83},"\"hello world by python!\"",[73,910,899],{"class":856},[73,912,914],{"class":75,"line":913},7,[73,915,916],{"class":856},"    rclpy.shutdown()\n",[73,918,920],{"class":75,"line":919},8,[73,921,863],{"emptyLinePlaceholder":862},[73,923,925,928,931,934,937],{"class":75,"line":924},9,[73,926,927],{"class":100},"if",[73,929,930],{"class":856}," name ",[73,932,933],{"class":100},"==",[73,935,936],{"class":83}," '__main__'",[73,938,939],{"class":856},":\n",[73,941,943],{"class":75,"line":942},10,[73,944,945],{"class":856},"    main()\n",[16,947,948],{},[19,949],{"alt":21,"src":950},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage152.webp",[16,952,953],{},[19,954],{"alt":21,"src":955},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage153.webp",[16,957,958],{},[19,959],{"alt":21,"src":960},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage154.webp",[12,962,964],{"id":963},"运行优化bash终端环境","运行优化(bash终端环境)",[16,966,967],{},[19,968],{"alt":21,"src":969},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage155.webp",[16,971,972],{},[19,973],{"alt":21,"src":974},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage156.webp",[16,976,977],{},"要使用绝对路径",[16,979,980],{},[19,981],{"alt":21,"src":982},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage157.webp",[16,984,985],{},[19,986],{"alt":21,"src":987},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage158.webp",[16,989,990],{},"尽量不要这么干，ROS2有一个bug，就是不同工作空间的功能包可能会调用混乱，所以先不要搞全局的运行优化。",[12,992,994],{"id":993},"vscode环境搭建","VScode环境搭建",[16,996,997],{},[19,998],{"alt":21,"src":999},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage159.webp",[16,1001,1002,1005],{},[19,1003],{"alt":21,"src":1004},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage160.webp",[19,1006],{"alt":21,"src":1007},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage161.webp",[16,1009,1010,1013],{},[19,1011],{"alt":21,"src":1012},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage162.webp",[19,1014],{"alt":21,"src":1015},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage163.webp",[16,1017,1018,1021],{},[19,1019],{"alt":21,"src":1020},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage164.webp",[19,1022],{"alt":21,"src":1023},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage165.webp",[16,1025,1026],{},"看C\u002FC++，Python，CMake，XML,YAML文件就可以代码高亮显示",[16,1028,1029],{},"在写一些ROS2消息的代码可以提供代码补齐等操作",[16,1031,1032],{},[19,1033],{"alt":21,"src":1034},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage166.webp",[16,1036,1037],{},"编写机器人模型所要用的插件，也可以进行代码补齐",[16,1039,1040],{},[19,1041],{"alt":21,"src":1042},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage167.webp",[16,1044,1045],{},"ROS2经常生成PDF文件，可以通过这个插件来查看",[16,1047,1048,1051],{},[19,1049],{"alt":21,"src":1050},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage168.webp",[19,1052],{"alt":21,"src":1053},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage169.webp",[16,1055,1056],{},"ROS2插件建议等成熟之后再进行安装",[16,1058,1059],{},[19,1060],{"alt":21,"src":1061},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage170.webp",[16,1063,1064],{},"这个官方插件可以尝试安装",[16,1066,1067],{},[19,1068],{"alt":21,"src":1069},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage171.webp",[16,1071,1072],{},"人工智能代码补全",[16,1074,1075],{},[19,1076],{"alt":21,"src":1077},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage172.webp",[16,1079,1080],{},"MarkDown高亮",[109,1082],{},[16,1084,1085],{},[19,1086],{"alt":21,"src":1087},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage173.webp",[16,1089,1090],{},[19,1091],{"alt":21,"src":1092},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage174.webp",[16,1094,1095],{},[19,1096],{"alt":21,"src":1097},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage175.webp",[16,1099,1100],{},"虽然报错，但是程序是可以正常运行的。（主要是vscode找不到头文件）",[16,1102,1103],{},[19,1104],{"alt":21,"src":1105},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage176.webp",[16,1107,1108],{},[19,1109],{"alt":21,"src":1110},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage177.webp",[16,1112,1113],{},[19,1114],{"alt":21,"src":1115},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage178.webp",[16,1117,1118],{},[19,1119],{"alt":21,"src":1120},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage179.webp",[16,1122,1123],{},[19,1124],{"alt":21,"src":1125},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage180.webp",[65,1127,1131],{"className":1128,"code":1129,"language":1130,"meta":21,"style":21},"language-JSON shiki shiki-themes github-light github-dark","            \"includePath\": [\n                \"${default}\",\n                \"${workspaceFolder}\u002F**\",\n                \"\u002Fopt\u002Fros\u002Fhumble\u002Finclude\u002F**\"\n            ],\n","JSON",[55,1132,1133,1141,1149,1156,1161],{"__ignoreMap":21},[73,1134,1135,1138],{"class":75,"line":76},[73,1136,1137],{"class":83},"            \"includePath\"",[73,1139,1140],{"class":856},": [\n",[73,1142,1143,1146],{"class":75,"line":91},[73,1144,1145],{"class":83},"                \"${default}\"",[73,1147,1148],{"class":856},",\n",[73,1150,1151,1154],{"class":75,"line":866},[73,1152,1153],{"class":83},"                \"${workspaceFolder}\u002F**\"",[73,1155,1148],{"class":856},[73,1157,1158],{"class":75,"line":878},[73,1159,1160],{"class":83},"                \"\u002Fopt\u002Fros\u002Fhumble\u002Finclude\u002F**\"\n",[73,1162,1163],{"class":75,"line":884},[73,1164,1165],{"class":856},"            ],\n",[16,1167,1168],{},[19,1169],{"alt":21,"src":1170},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage181.webp",[16,1172,1173],{},"\u002F**代表要包含该文件夹下的所有的子集",[16,1175,1176],{},[19,1177],{"alt":21,"src":1178},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage182.webp",[16,1180,1181],{},[19,1182],{"alt":21,"src":1183},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage183.webp",[109,1185],{},[16,1187,1188],{},"按Ctrl + `（ESC底下的按键）把VSCODE终端打开",[16,1190,1191],{},[19,1192],{"alt":21,"src":1193},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage184.webp",[16,1195,1196],{},[19,1197],{"alt":21,"src":1198},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage185.webp",[16,1200,1201],{},"--node-name也是可选参数，如果不配置，则不会有源文件，也不会有可执行文件到源文件的映射",[16,1203,1204],{},[19,1205],{"alt":21,"src":1206},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage186.webp",[16,1208,1209],{},[19,1210],{"alt":21,"src":1211},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage187.webp",[16,1213,1214],{},[19,1215],{"alt":21,"src":1216},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage188.webp",[16,1218,1219],{},"不需要修改，已经默认生成好了",[16,1221,1222],{},[19,1223],{"alt":21,"src":1224},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage189.webp",[16,1226,1227],{},"再返回WS目录进行编译（但是此时编译是编译整个WS目录下的所有功能包）",[16,1229,1230],{},[19,1231],{"alt":21,"src":1232},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage190.webp",[16,1234,1235],{},"刷新环境变量并运行",[16,1237,1238],{},[19,1239],{"alt":21,"src":1240},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage191.webp",[109,1242],{},[16,1244,1245],{},[19,1246],{"alt":21,"src":1247},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage192.webp",[16,1249,1250],{},[19,1251],{"alt":21,"src":1252},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage193.webp",[16,1254,1255],{},[19,1256],{"alt":21,"src":1257},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage194.webp",[16,1259,1260],{},[19,1261],{"alt":21,"src":1262},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage195.webp",[109,1264],{},[16,1266,1267],{},"如何在一个功能包里添加多个源文件呢？",[16,1269,1270],{},[19,1271],{"alt":21,"src":1272},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage196.webp",[16,1274,1275],{},"新建一个新文件，比如hellovscode2.cpp",[16,1277,1278],{},"但是此时该文件是一个孤零零的文件，他没有做任何的配置，对应的，编译完之后也不会被执行。",[16,1280,1281],{},"我们想编译执行该文件，必须配置相关的配置文件。",[16,1283,1284],{},[19,1285],{"alt":21,"src":1286},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage197.webp",[16,1288,1289],{},[19,1290],{"alt":21,"src":1291},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage198.webp",[16,1293,1294],{},"选中的这些用不着，可以删掉",[16,1296,1297],{},[19,1298],{"alt":21,"src":1299},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage199.webp",[16,1301,1302],{},[19,1303],{"alt":21,"src":1304},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage200.webp",[16,1306,1307],{},[19,1308],{"alt":21,"src":1309},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage201.webp",[16,1311,1312],{},[19,1313],{"alt":21,"src":1314},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage202.webp",[12,1316,1318],{"id":1317},"运行优化colcon-build","运行优化(colcon build)",[16,1320,1321],{},[19,1322],{"alt":21,"src":1323},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage203.webp",[16,1325,1326],{},"平常会全编译WS目录下的文件",[16,1328,1329],{},[19,1330],{"alt":21,"src":1331},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage204.webp",[65,1333,1335],{"className":67,"code":1334,"language":69,"meta":21,"style":21},"colcon build --packages-select xxx xxx xxx #可以指向多个包\n",[55,1336,1337],{"__ignoreMap":21},[73,1338,1339,1342,1345,1348,1351,1353,1355],{"class":75,"line":76},[73,1340,1341],{"class":125},"colcon",[73,1343,1344],{"class":83}," build",[73,1346,1347],{"class":79}," --packages-select",[73,1349,1350],{"class":83}," xxx",[73,1352,1350],{"class":83},[73,1354,1350],{"class":83},[73,1356,1357],{"class":87}," #可以指向多个包\n",[16,1359,1360],{},[19,1361],{"alt":21,"src":1362},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage205.webp",[12,1364,1366],{"id":1365},"vscode环境进阶","VScode环境进阶",[1368,1369,1371],"h4",{"id":1370},"clangd插件代码提示可选但是建议","clangd插件代码提示(可选,但是建议)",[16,1373,1374],{},[1375,1376,1377],"a",{"href":1377,"rel":1378},"https:\u002F\u002Fcolcon.readthedocs.io\u002Fen\u002Freleased\u002Findex.html",[1379],"nofollow",[16,1381,1382],{},"由于C\u002FC++插件在大项目里的表现简直拉胯的一批，所以我们选择使用llvm里的clangd插件来进行代码提示。",[16,1384,1385],{},"但clangd依赖于cmake生成一个编译信息文件，我们需要一些步骤来生成该文件。",[16,1387,1388],{},"由于ROS2没有像ROS1那样的一个总的规范的CMakeLists，所以配置起来没有ROS1那么方便。",[1390,1391,1392],"ol",{},[1393,1394,1395,1396,1406,1423,1426,1427,1448],"li",{},"配置colcon build参数",[1390,1397,1398],{},[1393,1399,1400,1401,1405],{},"方法一：（不建议） ",[1402,1403,1404],"strong",{},"每次"," 编译要用该命令：",[65,1407,1409],{"className":67,"code":1408,"language":69,"meta":21,"style":21},"colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[55,1410,1411],{"__ignoreMap":21},[73,1412,1413,1415,1417,1420],{"class":75,"line":76},[73,1414,1341],{"class":125},[73,1416,1344],{"class":83},[73,1418,1419],{"class":79}," --cmake-args",[73,1421,1422],{"class":79}," -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[1424,1425],"br",{},"  等同于在cmake文件里写上（一般不建议改cmakelists）",[65,1428,1430],{"className":67,"code":1429,"language":69,"meta":21,"style":21},"set(CMAKE_EXPORT_COMPILE_COMMANDS ON)\n",[55,1431,1432],{"__ignoreMap":21},[73,1433,1434,1437,1440,1443,1446],{"class":75,"line":76},[73,1435,1436],{"class":79},"set",[73,1438,1439],{"class":856},"(",[73,1441,1442],{"class":83},"CMAKE_EXPORT_COMPILE_COMMANDS",[73,1444,1445],{"class":83}," ON",[73,1447,899],{"class":856},[1390,1449,1450],{"start":884},[1393,1451,1452],{},"方法二：全局参数(更加推荐)",[65,1454,1456],{"className":67,"code":1455,"language":69,"meta":21,"style":21},"mkdir ~\u002F.colcon\n\nvim ~\u002F.colcon\u002Fdefaults.yaml\n",[55,1457,1458,1466,1470],{"__ignoreMap":21},[73,1459,1460,1463],{"class":75,"line":76},[73,1461,1462],{"class":125},"mkdir",[73,1464,1465],{"class":83}," ~\u002F.colcon\n",[73,1467,1468],{"class":75,"line":91},[73,1469,863],{"emptyLinePlaceholder":862},[73,1471,1472,1475],{"class":75,"line":866},[73,1473,1474],{"class":125},"vim",[73,1476,1477],{"class":83}," ~\u002F.colcon\u002Fdefaults.yaml\n",[16,1479,1480,1481,1484],{},"按下",[55,1482,1483],{},"insert（插入）","按键",[16,1486,1487],{},[19,1488],{"alt":21,"src":1489},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage206.webp",[16,1491,1492],{},"输入下方内容",[65,1494,1496],{"className":67,"code":1495,"language":69,"meta":21,"style":21},"build:\n  cmake-args:\n    - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n",[55,1497,1498,1503,1508],{"__ignoreMap":21},[73,1499,1500],{"class":75,"line":76},[73,1501,1502],{"class":125},"build:\n",[73,1504,1505],{"class":75,"line":91},[73,1506,1507],{"class":125},"  cmake-args:\n",[73,1509,1510,1513],{"class":75,"line":866},[73,1511,1512],{"class":125},"    -",[73,1514,1422],{"class":79},[16,1516,1480,1517,1520,1521,1524,1525,1528],{},[55,1518,1519],{},"ESC","，并按下",[55,1522,1523],{},":wq",",然后按下",[55,1526,1527],{},"Enter(回车)","即可成功保存。",[16,1530,1531,1532,1535],{},"在编译的时候正常用",[55,1533,1534],{},"colcon build","就可以自动启用CMAKE_EXPORT_COMPILE_COMMANDS=ON参数了。",[1390,1537,1538],{"start":91},[1393,1539,1540,1541,1554,1556,1557,1559,1560,1562,1565],{},"然后再来配置clangd插件",[1390,1542,1543,1551],{},[1393,1544,1545,1546,1548],{},"先下载clangd插件",[1424,1547],{},[19,1549],{"alt":21,"src":1550},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage207.webp",[1393,1552,1553],{},"下载clangd文件",[1424,1555],{},"  按住Ctrl shift P打开搜索框",[1424,1558],{},"  输入clangd 找到下载语言服务器这一项目，点击安装clangd（请保持良好的网络状况）",[1424,1561],{},[19,1563],{"alt":21,"src":1564},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage208.webp",[1390,1566,1567],{"start":902},[1393,1568,1569],{},"接着配置clangd：",[16,1571,1572],{},"禁用C\u002FC++的代码提示功能",[16,1574,1575],{},[19,1576],{"alt":21,"src":1577},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage209.webp",[16,1579,1580],{},"如果没有上图的弹窗，可以进行手动关闭，依然是ctrl shift P,输入settings然后找到如下图的选项",[16,1582,1583],{},[19,1584],{"alt":21,"src":1585},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage210.webp",[16,1587,1588],{},"找到下图这个选项，改成disabled即可。",[16,1590,1591],{},[55,1592,1593],{},"\"C_Cpp.intelliSenseEngine\": \"disabled\"",[16,1595,1596],{},[19,1597],{"alt":21,"src":1598},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage211.webp",[1390,1600,1601],{"start":878},[1393,1602,1603],{},"重启clangd",[16,1605,1606],{},"然后ctrl shift P搜索clangd找到如下图的选项（重启clangd语言服务器前，要先colcon build）",[16,1608,1609],{},[19,1610],{"alt":21,"src":1611},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage212.webp",[16,1613,1614],{},"代码提示就正常啦",[16,1616,1617],{},[19,1618],{"alt":21,"src":1619},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage213.webp",[12,1621,1622],{"id":1622},"安装其他工具",[1368,1624,1625],{"id":1625},"terminal",[1627,1628,1630],"h5",{"id":1629},"安装terminator选装因人而异有更好用的warp请往下看","安装terminator(选装,因人而异,有更好用的Warp,请往下看)",[65,1632,1634],{"className":67,"code":1633,"language":69,"meta":21,"style":21},"sudo apt install terminator\n",[55,1635,1636],{"__ignoreMap":21},[73,1637,1638,1641,1644,1647],{"class":75,"line":76},[73,1639,1640],{"class":125},"sudo",[73,1642,1643],{"class":83}," apt",[73,1645,1646],{"class":83}," install",[73,1648,1649],{"class":83}," terminator\n",[16,1651,1652],{},[19,1653],{"alt":21,"src":1654},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage214.webp",[1656,1657,1658,1674],"table",{},[1659,1660,1661],"thead",{},[1662,1663,1664,1668,1671],"tr",{},[1665,1666,1667],"th",{},"快捷键",[1665,1669,1670],{},"功能",[1665,1672,1673],{},"记忆方法",[1675,1676,1677,1694,1710,1726,1742,1755,1771,1787],"tbody",{},[1662,1678,1679,1685,1688],{},[1680,1681,1682],"td",{},[55,1683,1684],{},"Ctrl + Shift + E",[1680,1686,1687],{},"垂直分屏，左右分",[1680,1689,1690,1693],{},[1402,1691,1692],{},"E = East","，往东边开一个窗口，也就是左右分",[1662,1695,1696,1701,1704],{},[1680,1697,1698],{},[55,1699,1700],{},"Ctrl + Shift + O",[1680,1702,1703],{},"水平分屏，上下分",[1680,1705,1706,1709],{},[1402,1707,1708],{},"O = Over \u002F Under","，上下叠放",[1662,1711,1712,1717,1720],{},[1680,1713,1714],{},[55,1715,1716],{},"Ctrl + Shift + S",[1680,1718,1719],{},"隐藏\u002F显示滚动条",[1680,1721,1722,1725],{},[1402,1723,1724],{},"S = Scrollbar","，滚动条",[1662,1727,1728,1733,1736],{},[1680,1729,1730],{},[55,1731,1732],{},"F11",[1680,1734,1735],{},"全屏\u002F退出全屏",[1680,1737,1738,1741],{},[1402,1739,1740],{},"F = Fullscreen","，F11 本来就是很多软件的全屏键",[1662,1743,1744,1749,1752],{},[1680,1745,1746],{},[55,1747,1748],{},"Ctrl + Tab",[1680,1750,1751],{},"在不同 pane 之间切换",[1680,1753,1754],{},"跟浏览器切 Tab 类似，循环切换",[1662,1756,1757,1762,1765],{},[1680,1758,1759],{},[55,1760,1761],{},"Ctrl + L",[1680,1763,1764],{},"清屏",[1680,1766,1767,1770],{},[1402,1768,1769],{},"L = clear 里的 L","，也可以理解成“拉到新页面”",[1662,1772,1773,1778,1781],{},[1680,1774,1775],{},[55,1776,1777],{},"Ctrl + Shift + W",[1680,1779,1780],{},"关闭当前 pane",[1680,1782,1783,1786],{},[1402,1784,1785],{},"W = Window","，关当前小窗口",[1662,1788,1789,1794,1797],{},[1680,1790,1791],{},[55,1792,1793],{},"Ctrl + Shift + Q",[1680,1795,1796],{},"退出整个 Terminator",[1680,1798,1799,1802],{},[1402,1800,1801],{},"Q = Quit","，退出程序",[16,1804,1805],{},"因为他本身的字体非常暗,所以要设置一下.",[65,1807,1809],{"className":67,"code":1808,"language":69,"meta":21,"style":21},"cp ~\u002F.config\u002Fterminator\u002Fconfig ~\u002F.config\u002Fterminator\u002Fconfig.bak\nvim ~\u002F.config\u002Fterminator\u002Fconfig\n",[55,1810,1811,1822],{"__ignoreMap":21},[73,1812,1813,1816,1819],{"class":75,"line":76},[73,1814,1815],{"class":125},"cp",[73,1817,1818],{"class":83}," ~\u002F.config\u002Fterminator\u002Fconfig",[73,1820,1821],{"class":83}," ~\u002F.config\u002Fterminator\u002Fconfig.bak\n",[73,1823,1824,1826],{"class":75,"line":91},[73,1825,1474],{"class":125},[73,1827,1828],{"class":83}," ~\u002F.config\u002Fterminator\u002Fconfig\n",[16,1830,1831,1832,1835,1836,1839],{},"按一下",[55,1833,1834],{},"ggdG",",注意大小写.\n然后按下",[55,1837,1838],{},"insert","按键,\n然后让文件内容为:",[65,1841,1843],{"className":67,"code":1842,"language":69,"meta":21,"style":21},"[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,1844,1845,1850,1861,1871,1881,1890,1899,1909,1913,1918,1922,1928,1934,1945,1955,1975,1980,1991,2001,2011,2021,2026,2037,2042,2053,2058,2064,2069,2075,2086,2097,2111,2117,2127,2137,2142],{"__ignoreMap":21},[73,1846,1847],{"class":75,"line":76},[73,1848,1849],{"class":856},"[global_config]\n",[73,1851,1852,1855,1858],{"class":75,"line":91},[73,1853,1854],{"class":125},"  title_transmit_bg_color",[73,1856,1857],{"class":83}," =",[73,1859,1860],{"class":83}," \"#31363b\"\n",[73,1862,1863,1866,1868],{"class":75,"line":866},[73,1864,1865],{"class":125},"  title_transmit_fg_color",[73,1867,1857],{"class":83},[73,1869,1870],{"class":83}," \"#fcfcfc\"\n",[73,1872,1873,1876,1878],{"class":75,"line":878},[73,1874,1875],{"class":125},"  title_receive_bg_color",[73,1877,1857],{"class":83},[73,1879,1880],{"class":83}," \"#232629\"\n",[73,1882,1883,1886,1888],{"class":75,"line":884},[73,1884,1885],{"class":125},"  title_receive_fg_color",[73,1887,1857],{"class":83},[73,1889,1870],{"class":83},[73,1891,1892,1895,1897],{"class":75,"line":902},[73,1893,1894],{"class":125},"  title_inactive_bg_color",[73,1896,1857],{"class":83},[73,1898,1880],{"class":83},[73,1900,1901,1904,1906],{"class":75,"line":913},[73,1902,1903],{"class":125},"  title_inactive_fg_color",[73,1905,1857],{"class":83},[73,1907,1908],{"class":83}," \"#bdc3c7\"\n",[73,1910,1911],{"class":75,"line":919},[73,1912,863],{"emptyLinePlaceholder":862},[73,1914,1915],{"class":75,"line":924},[73,1916,1917],{"class":856},"[keybindings]\n",[73,1919,1920],{"class":75,"line":942},[73,1921,863],{"emptyLinePlaceholder":862},[73,1923,1925],{"class":75,"line":1924},11,[73,1926,1927],{"class":856},"[profiles]\n",[73,1929,1931],{"class":75,"line":1930},12,[73,1932,1933],{"class":856},"  [[default]]\n",[73,1935,1937,1940,1942],{"class":75,"line":1936},13,[73,1938,1939],{"class":125},"    use_theme_colors",[73,1941,1857],{"class":83},[73,1943,1944],{"class":83}," False\n",[73,1946,1948,1951,1953],{"class":75,"line":1947},14,[73,1949,1950],{"class":125},"    use_system_font",[73,1952,1857],{"class":83},[73,1954,1944],{"class":83},[73,1956,1958,1961,1963,1966,1969,1972],{"class":75,"line":1957},15,[73,1959,1960],{"class":125},"    font",[73,1962,1857],{"class":83},[73,1964,1965],{"class":83}," Noto",[73,1967,1968],{"class":83}," Sans",[73,1970,1971],{"class":83}," Mono",[73,1973,1974],{"class":79}," 11\n",[73,1976,1978],{"class":75,"line":1977},16,[73,1979,863],{"emptyLinePlaceholder":862},[73,1981,1983,1986,1988],{"class":75,"line":1982},17,[73,1984,1985],{"class":125},"    background_type",[73,1987,1857],{"class":83},[73,1989,1990],{"class":83}," solid\n",[73,1992,1994,1997,1999],{"class":75,"line":1993},18,[73,1995,1996],{"class":125},"    background_color",[73,1998,1857],{"class":83},[73,2000,1880],{"class":83},[73,2002,2004,2007,2009],{"class":75,"line":2003},19,[73,2005,2006],{"class":125},"    foreground_color",[73,2008,1857],{"class":83},[73,2010,1870],{"class":83},[73,2012,2014,2017,2019],{"class":75,"line":2013},20,[73,2015,2016],{"class":125},"    cursor_color",[73,2018,1857],{"class":83},[73,2020,1870],{"class":83},[73,2022,2024],{"class":75,"line":2023},21,[73,2025,863],{"emptyLinePlaceholder":862},[73,2027,2029,2032,2034],{"class":75,"line":2028},22,[73,2030,2031],{"class":125},"    palette",[73,2033,1857],{"class":83},[73,2035,2036],{"class":83}," \"#232629:#ed1515:#11d116:#f67400:#1d99f3:#9b59b6:#1abc9c:#fcfcfc:#7f8c8d:#ff5555:#50fa7b:#fdbc4b:#3daee9:#ff79c6:#8be9fd:#ffffff\"\n",[73,2038,2040],{"class":75,"line":2039},23,[73,2041,863],{"emptyLinePlaceholder":862},[73,2043,2045,2048,2050],{"class":75,"line":2044},24,[73,2046,2047],{"class":125},"    scrollback_infinite",[73,2049,1857],{"class":83},[73,2051,2052],{"class":83}," True\n",[73,2054,2056],{"class":75,"line":2055},25,[73,2057,863],{"emptyLinePlaceholder":862},[73,2059,2061],{"class":75,"line":2060},26,[73,2062,2063],{"class":856},"[layouts]\n",[73,2065,2067],{"class":75,"line":2066},27,[73,2068,1933],{"class":856},[73,2070,2072],{"class":75,"line":2071},28,[73,2073,2074],{"class":856},"    [[[window0]]]\n",[73,2076,2078,2081,2083],{"class":75,"line":2077},29,[73,2079,2080],{"class":79},"      type",[73,2082,1857],{"class":83},[73,2084,2085],{"class":83}," Window\n",[73,2087,2089,2092,2094],{"class":75,"line":2088},30,[73,2090,2091],{"class":125},"      parent",[73,2093,1857],{"class":83},[73,2095,2096],{"class":83}," \"\"\n",[73,2098,2100,2103,2105,2108],{"class":75,"line":2099},31,[73,2101,2102],{"class":125},"      size",[73,2104,1857],{"class":83},[73,2106,2107],{"class":83}," 920,",[73,2109,2110],{"class":79}," 660\n",[73,2112,2114],{"class":75,"line":2113},32,[73,2115,2116],{"class":856},"    [[[child1]]]\n",[73,2118,2120,2122,2124],{"class":75,"line":2119},33,[73,2121,2080],{"class":79},[73,2123,1857],{"class":83},[73,2125,2126],{"class":83}," Terminal\n",[73,2128,2130,2132,2134],{"class":75,"line":2129},34,[73,2131,2091],{"class":125},[73,2133,1857],{"class":83},[73,2135,2136],{"class":83}," window0\n",[73,2138,2140],{"class":75,"line":2139},35,[73,2141,863],{"emptyLinePlaceholder":862},[73,2143,2145],{"class":75,"line":2144},36,[73,2146,2147],{"class":856},"[plugins]\n",[16,2149,2150,2151,2153,2154,2156],{},"最后,按下",[55,2152,1519],{},",输入",[55,2155,1523],{},"保存并退出.",[16,2158,2159],{},"然后完全关闭 Terminator，再重新打开。\n这个配置会做几件事：",[1390,2161,2162,2165,2168,2171,2174],{},[1393,2163,2164],{},"背景：接近 Konsole Breeze 的深灰，不是死黑",[1393,2166,2167],{},"字体：接近纯白，比以前亮很多",[1393,2169,2170],{},"蓝色：换成更亮的 KDE 蓝",[1393,2172,2173],{},"绿色\u002F黄色\u002F青色：也整体提亮",[1393,2175,2176],{},"顶部红色标题条：改成灰色，不再那么刺眼",[1627,2178,2180],{"id":2179},"warp-terminal推荐更好看也支持分屏","Warp Terminal（推荐，更好看，也支持分屏）",[16,2182,2183],{},"相比 Terminator，Warp Terminal 的默认外观更现代，字体更清楚，界面也更亮堂。",[16,2185,2186],{},"最重要的是，它也支持类似 Terminator 的多 pane 分屏，所以可以作为 Terminator 的现代平替。",[16,2188,2189],{},"不过需要注意，Warp 的快捷键和 Terminator 不完全一样。",[1390,2191,2192,2288],{},[1393,2193,2194,2195],{},"安装",[1390,2196,2197,2242],{},[1393,2198,2199,2200,2230,2232,2233],{},"Ubuntu \u002F Debian 安装",[65,2201,2203],{"className":67,"code":2202,"language":69,"meta":21,"style":21},"wget -O warp-terminal.deb \"https:\u002F\u002Fapp.warp.dev\u002Fdownload?package=deb\"\nsudo apt install .\u002Fwarp-terminal.deb\n",[55,2204,2205,2219],{"__ignoreMap":21},[73,2206,2207,2210,2213,2216],{"class":75,"line":76},[73,2208,2209],{"class":125},"wget",[73,2211,2212],{"class":79}," -O",[73,2214,2215],{"class":83}," warp-terminal.deb",[73,2217,2218],{"class":83}," \"https:\u002F\u002Fapp.warp.dev\u002Fdownload?package=deb\"\n",[73,2220,2221,2223,2225,2227],{"class":75,"line":91},[73,2222,1640],{"class":125},[73,2224,1643],{"class":83},[73,2226,1646],{"class":83},[73,2228,2229],{"class":83}," .\u002Fwarp-terminal.deb\n",[1424,2231],{},"安装完成后，可以在应用菜单里打开 Warp，也可以在终端里输入：",[65,2234,2236],{"className":67,"code":2235,"language":69,"meta":21,"style":21},"warp-terminal\n",[55,2237,2238],{"__ignoreMap":21},[73,2239,2240],{"class":75,"line":76},[73,2241,2235],{"class":125},[1393,2243,2244,2245,2247,2248,2277,2279,2280],{},"Fedora \u002F RHEL 安装",[1424,2246],{},"如果你用的是 Fedora、RHEL、CentOS 这类发行版，可以安装 rpm 包：",[65,2249,2251],{"className":67,"code":2250,"language":69,"meta":21,"style":21},"wget -O warp-terminal.rpm \"https:\u002F\u002Fapp.warp.dev\u002Fdownload?package=rpm\"\nsudo dnf install .\u002Fwarp-terminal.rpm\n",[55,2252,2253,2265],{"__ignoreMap":21},[73,2254,2255,2257,2259,2262],{"class":75,"line":76},[73,2256,2209],{"class":125},[73,2258,2212],{"class":79},[73,2260,2261],{"class":83}," warp-terminal.rpm",[73,2263,2264],{"class":83}," \"https:\u002F\u002Fapp.warp.dev\u002Fdownload?package=rpm\"\n",[73,2266,2267,2269,2272,2274],{"class":75,"line":91},[73,2268,1640],{"class":125},[73,2270,2271],{"class":83}," dnf",[73,2273,1646],{"class":83},[73,2275,2276],{"class":83}," .\u002Fwarp-terminal.rpm\n",[1424,2278],{},"启动方式同样是：",[65,2281,2282],{"className":67,"code":2235,"language":69,"meta":21,"style":21},[55,2283,2284],{"__ignoreMap":21},[73,2285,2286],{"class":75,"line":76},[73,2287,2235],{"class":125},[1393,2289,2290],{},"Warp 常用快捷键",[1656,2292,2293,2303],{},[1659,2294,2295],{},[1662,2296,2297,2299,2301],{},[1665,2298,1667],{},[1665,2300,1670],{},[1665,2302,1673],{},[1675,2304,2305,2321,2336,2349,2365,2381,2394,2407,2423,2436,2448,2461,2474,2487],{},[1662,2306,2307,2312,2315],{},[1680,2308,2309],{},[55,2310,2311],{},"Ctrl + Shift + D",[1680,2313,2314],{},"向右分屏",[1680,2316,2317,2320],{},[1402,2318,2319],{},"D = Divide","，分割出一个新的 pane，默认往右边开",[1662,2322,2323,2327,2330],{},[1680,2324,2325],{},[55,2326,1684],{},[1680,2328,2329],{},"向下分屏",[1680,2331,2332,2335],{},[1402,2333,2334],{},"E = Extend Down","，向下面扩展一个新的 pane",[1662,2337,2338,2343,2346],{},[1680,2339,2340],{},[55,2341,2342],{},"Ctrl + Alt + 方向键",[1680,2344,2345],{},"按方向切换 pane",[1680,2347,2348],{},"想去哪边就按哪个方向键",[1662,2350,2351,2356,2359],{},[1680,2352,2353],{},[55,2354,2355],{},"Ctrl + Shift + [",[1680,2357,2358],{},"切换到上一个 pane",[1680,2360,2361,2364],{},[55,2362,2363],{},"["," 可以理解成往前切",[1662,2366,2367,2372,2375],{},[1680,2368,2369],{},[55,2370,2371],{},"Ctrl + Shift + ]",[1680,2373,2374],{},"切换到下一个 pane",[1680,2376,2377,2380],{},[55,2378,2379],{},"]"," 可以理解成往后切",[1662,2382,2383,2388,2391],{},[1680,2384,2385],{},[55,2386,2387],{},"Ctrl + Shift + Enter",[1680,2389,2390],{},"最大化\u002F还原当前 pane",[1680,2392,2393],{},"Enter 进入当前 pane 的专注模式",[1662,2395,2396,2400,2402],{},[1680,2397,2398],{},[55,2399,1777],{},[1680,2401,1780],{},[1680,2403,2404,2406],{},[1402,2405,1785],{},"，关闭当前小窗口",[1662,2408,2409,2414,2417],{},[1680,2410,2411],{},[55,2412,2413],{},"Ctrl + Shift + T",[1680,2415,2416],{},"新建标签页",[1680,2418,2419,2422],{},[1402,2420,2421],{},"T = Tab","，新开一个标签页",[1662,2424,2425,2430,2433],{},[1680,2426,2427],{},[55,2428,2429],{},"Ctrl + PageUp",[1680,2431,2432],{},"切换到上一个标签页",[1680,2434,2435],{},"类似浏览器切换标签",[1662,2437,2438,2443,2446],{},[1680,2439,2440],{},[55,2441,2442],{},"Ctrl + PageDown",[1680,2444,2445],{},"切换到下一个标签页",[1680,2447,2435],{},[1662,2449,2450,2454,2456],{},[1680,2451,2452],{},[55,2453,1761],{},[1680,2455,1764],{},[1680,2457,2458,2460],{},[1402,2459,1769],{},"，相当于翻到一个新页面",[1662,2462,2463,2468,2471],{},[1680,2464,2465],{},[55,2466,2467],{},"Ctrl + =",[1680,2469,2470],{},"放大字体",[1680,2472,2473],{},"等号旁边通常也是加号，表示放大",[1662,2475,2476,2481,2484],{},[1680,2477,2478],{},[55,2479,2480],{},"Ctrl + -",[1680,2482,2483],{},"缩小字体",[1680,2485,2486],{},"减号，表示缩小",[1662,2488,2489,2494,2497],{},[1680,2490,2491],{},[55,2492,2493],{},"Ctrl + 0",[1680,2495,2496],{},"恢复默认字体大小",[1680,2498,2499],{},"归零，恢复默认",[1390,2501,2502],{"start":866},[1393,2503,2504,2505],{},"Warp 的特点",[1390,2506,2507,2510,2513,2516,2519],{},[1393,2508,2509],{},"默认颜值比 Terminator 高，不需要额外折腾配色",[1393,2511,2512],{},"支持一直分屏，适合大屏幕开发",[1393,2514,2515],{},"字体渲染比较清楚，观感比 Terminator 亮堂",[1393,2517,2518],{},"支持命令块，长命令输出看起来更清晰",[1393,2520,2521],{},"支持 AI 功能，但不使用 AI 也可以当普通终端使用",[16,2523,2524],{},"首次打开 Warp 时可能需要联网初始化。之后即使离线也可以作为普通终端使用，只是 AI、协作等云端功能不能用。",[16,2526,2527],{},"如果只是想要一个传统、稳定、轻量的终端，可以继续用 Terminator。",[16,2529,2530],{},"如果想要更好看的界面、更现代的交互体验，并且也需要分屏，那么 Warp 是一个很不错的选择。",[1627,2532,2534],{"id":2533},"在-kde-dolphin-中右键使用-warp-打开当前目录","在 KDE Dolphin 中右键使用 Warp 打开当前目录",[16,2536,2537],{},"即使已经在 KDE 的“默认应用程序”中将终端设置为 Warp，Dolphin 的“在此处打开终端”仍然可能没有反应。这是 Dolphin\u002FKIO 与 Warp Linux 版启动方式的兼容问题，可以通过添加一个 Dolphin 服务菜单解决。",[1390,2539,2540,2757,2861,2949],{},[1393,2541,2542,2543,2566,2568,2569,2739,2741,2742],{},"创建 Warp 启动脚本：",[65,2544,2546],{"className":67,"code":2545,"language":69,"meta":21,"style":21},"mkdir -p ~\u002F.local\u002Fbin\nnano ~\u002F.local\u002Fbin\u002Fwarp-here\n",[55,2547,2548,2558],{"__ignoreMap":21},[73,2549,2550,2552,2555],{"class":75,"line":76},[73,2551,1462],{"class":125},[73,2553,2554],{"class":79}," -p",[73,2556,2557],{"class":83}," ~\u002F.local\u002Fbin\n",[73,2559,2560,2563],{"class":75,"line":91},[73,2561,2562],{"class":125},"nano",[73,2564,2565],{"class":83}," ~\u002F.local\u002Fbin\u002Fwarp-here\n",[1424,2567],{},"写入以下内容：",[65,2570,2572],{"className":67,"code":2571,"language":69,"meta":21,"style":21},"#!\u002Fbin\u002Fbash\n\ntarget_dir=\"${1:-$HOME}\"\n\n# Warp 已经运行时，使用 URI 新建指定目录的窗口\nif pgrep -x warp-terminal >\u002Fdev\u002Fnull; then\n    encoded_path=$(\n        python3 -c \\\n        'import sys, urllib.parse; print(urllib.parse.quote(sys.argv[1], safe=\"\u002F\"))' \\\n        \"$target_dir\"\n    )\n    exec xdg-open \"warp:\u002F\u002Faction\u002Fnew_window?path=$encoded_path\"\nfi\n\n# Warp 冷启动时，将目标目录传给新启动的 Shell\nexport WARP_DOLPHIN_DIR=\"$target_dir\"\nexec \u002Fusr\u002Fbin\u002Fwarp-terminal\n",[55,2573,2574,2579,2583,2608,2612,2617,2642,2652,2663,2670,2680,2685,2701,2706,2710,2715,2731],{"__ignoreMap":21},[73,2575,2576],{"class":75,"line":76},[73,2577,2578],{"class":87},"#!\u002Fbin\u002Fbash\n",[73,2580,2581],{"class":75,"line":91},[73,2582,863],{"emptyLinePlaceholder":862},[73,2584,2585,2588,2590,2593,2596,2599,2602,2605],{"class":75,"line":866},[73,2586,2587],{"class":856},"target_dir",[73,2589,890],{"class":100},[73,2591,2592],{"class":83},"\"",[73,2594,2595],{"class":79},"${1",[73,2597,2598],{"class":100},":-",[73,2600,2601],{"class":856},"$HOME",[73,2603,2604],{"class":79},"}",[73,2606,2607],{"class":83},"\"\n",[73,2609,2610],{"class":75,"line":878},[73,2611,863],{"emptyLinePlaceholder":862},[73,2613,2614],{"class":75,"line":884},[73,2615,2616],{"class":87},"# Warp 已经运行时，使用 URI 新建指定目录的窗口\n",[73,2618,2619,2621,2624,2627,2630,2633,2636,2639],{"class":75,"line":902},[73,2620,927],{"class":100},[73,2622,2623],{"class":125}," pgrep",[73,2625,2626],{"class":79}," -x",[73,2628,2629],{"class":83}," warp-terminal",[73,2631,2632],{"class":100}," >",[73,2634,2635],{"class":83},"\u002Fdev\u002Fnull",[73,2637,2638],{"class":856},"; ",[73,2640,2641],{"class":100},"then\n",[73,2643,2644,2647,2649],{"class":75,"line":913},[73,2645,2646],{"class":856},"    encoded_path",[73,2648,890],{"class":100},[73,2650,2651],{"class":856},"$(\n",[73,2653,2654,2657,2660],{"class":75,"line":919},[73,2655,2656],{"class":125},"        python3",[73,2658,2659],{"class":79}," -c",[73,2661,2662],{"class":79}," \\\n",[73,2664,2665,2668],{"class":75,"line":924},[73,2666,2667],{"class":83},"        'import sys, urllib.parse; print(urllib.parse.quote(sys.argv[1], safe=\"\u002F\"))'",[73,2669,2662],{"class":79},[73,2671,2672,2675,2678],{"class":75,"line":942},[73,2673,2674],{"class":83},"        \"",[73,2676,2677],{"class":856},"$target_dir",[73,2679,2607],{"class":83},[73,2681,2682],{"class":75,"line":1924},[73,2683,2684],{"class":856},"    )\n",[73,2686,2687,2690,2693,2696,2699],{"class":75,"line":1930},[73,2688,2689],{"class":79},"    exec",[73,2691,2692],{"class":83}," xdg-open",[73,2694,2695],{"class":83}," \"warp:\u002F\u002Faction\u002Fnew_window?path=",[73,2697,2698],{"class":856},"$encoded_path",[73,2700,2607],{"class":83},[73,2702,2703],{"class":75,"line":1936},[73,2704,2705],{"class":100},"fi\n",[73,2707,2708],{"class":75,"line":1947},[73,2709,863],{"emptyLinePlaceholder":862},[73,2711,2712],{"class":75,"line":1957},[73,2713,2714],{"class":87},"# Warp 冷启动时，将目标目录传给新启动的 Shell\n",[73,2716,2717,2720,2723,2725,2727,2729],{"class":75,"line":1977},[73,2718,2719],{"class":100},"export",[73,2721,2722],{"class":856}," WARP_DOLPHIN_DIR",[73,2724,890],{"class":100},[73,2726,2592],{"class":83},[73,2728,2677],{"class":856},[73,2730,2607],{"class":83},[73,2732,2733,2736],{"class":75,"line":1982},[73,2734,2735],{"class":79},"exec",[73,2737,2738],{"class":83}," \u002Fusr\u002Fbin\u002Fwarp-terminal\n",[1424,2740],{},"保存后添加执行权限：",[65,2743,2745],{"className":67,"code":2744,"language":69,"meta":21,"style":21},"chmod +x ~\u002F.local\u002Fbin\u002Fwarp-here\n",[55,2746,2747],{"__ignoreMap":21},[73,2748,2749,2752,2755],{"class":75,"line":76},[73,2750,2751],{"class":125},"chmod",[73,2753,2754],{"class":83}," +x",[73,2756,2565],{"class":83},[1393,2758,2759,2760,2762,2763,2775,2777,2778,2854,2856,2857,2860],{},"配置 Shell 处理 Warp 冷启动时传入的目录。如果使用 Bash，打开 ",[55,2761,57],{},"：",[65,2764,2766],{"className":67,"code":2765,"language":69,"meta":21,"style":21},"nano ~\u002F.bashrc\n",[55,2767,2768],{"__ignoreMap":21},[73,2769,2770,2772],{"class":75,"line":76},[73,2771,2562],{"class":125},[73,2773,2774],{"class":83}," ~\u002F.bashrc\n",[1424,2776],{},"在文件末尾添加：",[65,2779,2781],{"className":67,"code":2780,"language":69,"meta":21,"style":21},"# 从 Dolphin 冷启动 Warp 时进入指定目录\nif [[ -n \"${WARP_DOLPHIN_DIR:-}\" && -d \"$WARP_DOLPHIN_DIR\" ]]; then\n    cd -- \"$WARP_DOLPHIN_DIR\"\n    unset WARP_DOLPHIN_DIR\nfi\n",[55,2782,2783,2788,2828,2842,2850],{"__ignoreMap":21},[73,2784,2785],{"class":75,"line":76},[73,2786,2787],{"class":87},"# 从 Dolphin 冷启动 Warp 时进入指定目录\n",[73,2789,2790,2792,2795,2798,2801,2804,2806,2809,2812,2815,2818,2821,2823,2826],{"class":75,"line":91},[73,2791,927],{"class":100},[73,2793,2794],{"class":856}," [[ ",[73,2796,2797],{"class":100},"-n",[73,2799,2800],{"class":83}," \"${",[73,2802,2803],{"class":856},"WARP_DOLPHIN_DIR",[73,2805,2598],{"class":100},[73,2807,2808],{"class":83},"}\"",[73,2810,2811],{"class":100}," &&",[73,2813,2814],{"class":100}," -d",[73,2816,2817],{"class":83}," \"",[73,2819,2820],{"class":856},"$WARP_DOLPHIN_DIR",[73,2822,2592],{"class":83},[73,2824,2825],{"class":856}," ]]; ",[73,2827,2641],{"class":100},[73,2829,2830,2833,2836,2838,2840],{"class":75,"line":866},[73,2831,2832],{"class":79},"    cd",[73,2834,2835],{"class":79}," --",[73,2837,2817],{"class":83},[73,2839,2820],{"class":856},[73,2841,2607],{"class":83},[73,2843,2844,2847],{"class":75,"line":878},[73,2845,2846],{"class":79},"    unset",[73,2848,2849],{"class":83}," WARP_DOLPHIN_DIR\n",[73,2851,2852],{"class":75,"line":884},[73,2853,2705],{"class":100},[1424,2855],{},"如果 Warp 使用的是 Zsh，则将上述内容添加到 ",[55,2858,2859],{},"~\u002F.zshrc","。",[1393,2862,2863,2864,2885,2568,2887,2943,2945,2948],{},"创建 Dolphin 服务菜单：",[65,2865,2867],{"className":67,"code":2866,"language":69,"meta":21,"style":21},"mkdir -p ~\u002F.local\u002Fshare\u002Fkio\u002Fservicemenus\nnano ~\u002F.local\u002Fshare\u002Fkio\u002Fservicemenus\u002Fwarp-here.desktop\n",[55,2868,2869,2878],{"__ignoreMap":21},[73,2870,2871,2873,2875],{"class":75,"line":76},[73,2872,1462],{"class":125},[73,2874,2554],{"class":79},[73,2876,2877],{"class":83}," ~\u002F.local\u002Fshare\u002Fkio\u002Fservicemenus\n",[73,2879,2880,2882],{"class":75,"line":91},[73,2881,2562],{"class":125},[73,2883,2884],{"class":83}," ~\u002F.local\u002Fshare\u002Fkio\u002Fservicemenus\u002Fwarp-here.desktop\n",[1424,2886],{},[65,2888,2892],{"className":2889,"code":2890,"language":2891,"meta":21,"style":21},"language-ini shiki shiki-themes github-light github-dark","[Desktop Entry]\nType=Service\nMimeType=inode\u002Fdirectory;\nActions=openWarpHere;\nX-KDE-Priority=TopLevel\n\n[Desktop Action openWarpHere]\nName=Open Warp Here\nIcon=dev.warp.Warp\nExec=\u002Fhome\u002Ftungchiahui\u002F.local\u002Fbin\u002Fwarp-here %f\n","ini",[55,2893,2894,2899,2904,2909,2914,2919,2923,2928,2933,2938],{"__ignoreMap":21},[73,2895,2896],{"class":75,"line":76},[73,2897,2898],{},"[Desktop Entry]\n",[73,2900,2901],{"class":75,"line":91},[73,2902,2903],{},"Type=Service\n",[73,2905,2906],{"class":75,"line":866},[73,2907,2908],{},"MimeType=inode\u002Fdirectory;\n",[73,2910,2911],{"class":75,"line":878},[73,2912,2913],{},"Actions=openWarpHere;\n",[73,2915,2916],{"class":75,"line":884},[73,2917,2918],{},"X-KDE-Priority=TopLevel\n",[73,2920,2921],{"class":75,"line":902},[73,2922,863],{"emptyLinePlaceholder":862},[73,2924,2925],{"class":75,"line":913},[73,2926,2927],{},"[Desktop Action openWarpHere]\n",[73,2929,2930],{"class":75,"line":919},[73,2931,2932],{},"Name=Open Warp Here\n",[73,2934,2935],{"class":75,"line":924},[73,2936,2937],{},"Icon=dev.warp.Warp\n",[73,2939,2940],{"class":75,"line":942},[73,2941,2942],{},"Exec=\u002Fhome\u002Ftungchiahui\u002F.local\u002Fbin\u002Fwarp-here %f\n",[1424,2944],{},[55,2946,2947],{},"%f"," 会由 Dolphin 替换为当前选中的文件夹路径。",[1393,2950,2951,2952],{},"设置权限、刷新 KDE 缓存并重启 Dolphin：",[65,2953,2955],{"className":67,"code":2954,"language":69,"meta":21,"style":21},"chmod +x ~\u002F.local\u002Fshare\u002Fkio\u002Fservicemenus\u002Fwarp-here.desktop\nkbuildsycoca6\ndolphin --quit\ndolphin &\n",[55,2956,2957,2965,2970,2978],{"__ignoreMap":21},[73,2958,2959,2961,2963],{"class":75,"line":76},[73,2960,2751],{"class":125},[73,2962,2754],{"class":83},[73,2964,2884],{"class":83},[73,2966,2967],{"class":75,"line":91},[73,2968,2969],{"class":125},"kbuildsycoca6\n",[73,2971,2972,2975],{"class":75,"line":866},[73,2973,2974],{"class":125},"dolphin",[73,2976,2977],{"class":79}," --quit\n",[73,2979,2980,2982],{"class":75,"line":878},[73,2981,2974],{"class":125},[73,2983,2984],{"class":856}," &\n",[16,2986,2987],{},"重新打开 Dolphin 后，右键文件夹即可看到“在此处打开 Warp”。Warp 尚未运行时，脚本会通过环境变量让第一个窗口进入目标目录；Warp 已经运行时，则通过官方 URI Scheme 新建指定目录的窗口。这样可以避免冷启动时同时出现一个默认目录窗口和一个目标目录窗口。",[16,2989,2990],{},"Dolphin 的 F4 内嵌终端依赖 KonsolePart，仍然只能使用 Konsole，与这个右键菜单无关。",[1368,2992,2993],{"id":2993},"git",[16,2995,2996],{},[19,2997],{"alt":21,"src":2998},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage215.webp",[16,3000,3001,3002],{},"Git入门教程：",[1375,3003,3005],{"href":3004},"\u002Fwiki\u002F2023-12-29-git-jiao-xue","Git入门教程",[1368,3007,3008],{"id":3008},"pcl_viewer",[65,3010,3012],{"className":67,"code":3011,"language":69,"meta":21,"style":21},"# Debian系（Ubuntu）\nsudo apt install pcl-tools\n\n# 红帽系（Fedora）\nsudo dnf install pcl-tools\n",[55,3013,3014,3019,3030,3034,3039],{"__ignoreMap":21},[73,3015,3016],{"class":75,"line":76},[73,3017,3018],{"class":87},"# Debian系（Ubuntu）\n",[73,3020,3021,3023,3025,3027],{"class":75,"line":91},[73,3022,1640],{"class":125},[73,3024,1643],{"class":83},[73,3026,1646],{"class":83},[73,3028,3029],{"class":83}," pcl-tools\n",[73,3031,3032],{"class":75,"line":866},[73,3033,863],{"emptyLinePlaceholder":862},[73,3035,3036],{"class":75,"line":878},[73,3037,3038],{"class":87},"# 红帽系（Fedora）\n",[73,3040,3041,3043,3045,3047],{"class":75,"line":884},[73,3042,1640],{"class":125},[73,3044,2271],{"class":83},[73,3046,1646],{"class":83},[73,3048,3029],{"class":83},[16,3050,3051],{},[19,3052],{"alt":21,"src":3053},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002F1791903122181-e65511bb.webp",[16,3055,3056,3057,3060],{},"然后查看某个",[55,3058,3059],{},"xxx.pcd","是：",[65,3062,3064],{"className":67,"code":3063,"language":69,"meta":21,"style":21},"pcl_viewer xxx.pcd\n",[55,3065,3066],{"__ignoreMap":21},[73,3067,3068,3070],{"class":75,"line":76},[73,3069,3008],{"class":125},[73,3071,3072],{"class":83}," xxx.pcd\n",[16,3074,3075],{},"或者",[65,3077,3079],{"className":67,"code":3078,"language":69,"meta":21,"style":21},"pcl_viewer -bc 255,255,255 xxx.pcd\n",[55,3080,3081],{"__ignoreMap":21},[73,3082,3083,3085,3088,3091],{"class":75,"line":76},[73,3084,3008],{"class":125},[73,3086,3087],{"class":79}," -bc",[73,3089,3090],{"class":83}," 255,255,255",[73,3092,3072],{"class":83},[16,3094,3095],{},[19,3096],{"alt":21,"src":3097},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002F1791903376516-73fbe326.webp",[12,3099,3101],{"id":3100},"ros2体系框架","ROS2体系框架",[16,3103,3104],{},[19,3105],{"alt":21,"src":3106},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage216.webp",[16,3108,3109],{},[19,3110],{"alt":21,"src":3111},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage217.webp",[16,3113,3114],{},[19,3115],{"alt":21,"src":3116},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage218.webp",[16,3118,3119],{},[19,3120],{"alt":21,"src":3121},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage219.webp",[16,3123,3124],{},"Client Library就是ROS2的客户端，比如rclcpp，rclpy。",[16,3126,3127],{},"Abstract DDS Layer是DDS抽象层，这样DDS可以实现可插拔，可以随便替换DDS模块。",[16,3129,3130],{},"Intra-process API是进程内通讯API，可以提高通信效率的一类API。",[16,3132,3133],{},[19,3134],{"alt":21,"src":3135},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage220.webp",[16,3137,3138],{},[19,3139],{"alt":21,"src":3140},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage221.webp",[3142,3143,3144],"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":21,"searchDepth":91,"depth":91,"links":3146},[3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157],{"id":14,"depth":866,"text":14},{"id":45,"depth":866,"text":45},{"id":214,"depth":866,"text":214},{"id":434,"depth":866,"text":435},{"id":687,"depth":866,"text":688},{"id":963,"depth":866,"text":964},{"id":993,"depth":866,"text":994},{"id":1317,"depth":866,"text":1318},{"id":1365,"depth":866,"text":1366},{"id":1622,"depth":866,"text":1622},{"id":3100,"depth":866,"text":3101},0,"0200","2023-12-30","2023-12-30-ros2-tutorial","\u002Fwiki\u002F2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,{},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo",{"title":5,"description":21},"wiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作","IUIc4-kms0ZYg0DjSVBTbyDDvZMcxp1lKZ_LmrYDggY",[3172,3178,3180,3186,3192,3198,3204,3210,3216,3222,3228,3234,3240,3246,3252,3258,3264,3270,3276,3282,3288,3294,3300,3306,3312,3318,3324,3330,3336,3342,3348,3354,3360,3366,3372,3377,3383,3388,3394,3400,3406,3412,3418,3424,3430,3436,3442,3448,3454,3460,3466,3472,3478,3484,3490,3496,3502,3508,3514,3520,3526,3532,3538,3544,3550,3556,3562,3568,3574],{"path":3173,"stem":3174,"title":3175,"authors":3176,"date":3160,"chapterOrder":3177,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao","wiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍","ROS2介绍",[7],"0100",{"path":3167,"stem":3169,"title":5,"authors":3179,"date":3160,"chapterOrder":3159,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},[7],{"path":3181,"stem":3182,"title":3183,"authors":3184,"date":3160,"chapterOrder":3185,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0300-gong-zuo-kong-jian-yu-gong-neng-bao","wiki\u002F2023-12-30-ros2-tutorial\u002F0300-工作空间与功能包","工作空间与功能包",[7],"0300",{"path":3187,"stem":3188,"title":3189,"authors":3190,"date":3160,"chapterOrder":3191,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信","四大通信",[7],"0400",{"path":3193,"stem":3194,"title":3195,"authors":3196,"date":3160,"chapterOrder":3197,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0500-ros2-qi-ta-tong-xin-ji-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F0500-ROS2其他通信机制","ROS2其他通信机制",[7],"0500",{"path":3199,"stem":3200,"title":3201,"authors":3202,"date":3160,"chapterOrder":3203,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-launch","wiki\u002F2023-12-30-ros2-tutorial\u002F0600-Launch","Launch",[7],"0600",{"path":3205,"stem":3206,"title":3207,"authors":3208,"date":3160,"chapterOrder":3209,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2","wiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2","回溯rosbag2",[7],"0700",{"path":3211,"stem":3212,"title":3213,"authors":3214,"date":3160,"chapterOrder":3215,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-zuo-biao-bian-huan-tf","wiki\u002F2023-12-30-ros2-tutorial\u002F0800-坐标变换TF","坐标变换TF",[7],"0800",{"path":3217,"stem":3218,"title":3219,"authors":3220,"date":3160,"chapterOrder":3221,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0900-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki\u002F2023-12-30-ros2-tutorial\u002F0900-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言",[7],"0900",{"path":3223,"stem":3224,"title":3225,"authors":3226,"date":3160,"chapterOrder":3227,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1000-stage-ros2-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1000-Stage_Ros2仿真平台","Stage_Ros2仿真平台",[7],"1000",{"path":3229,"stem":3230,"title":3231,"authors":3232,"date":3160,"chapterOrder":3233,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic","Gezebo Classic",[7],"1100-0100",{"path":3235,"stem":3236,"title":3237,"authors":3238,"date":3160,"chapterOrder":3239,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-ignitiongazebo","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）",[7],"1100-0200",{"path":3241,"stem":3242,"title":3243,"authors":3244,"date":3160,"chapterOrder":3245,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-gazebosim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-GazeboSim","Gz Sim（Gazebo Harmonic）",[7],"1100-0300",{"path":3247,"stem":3248,"title":3249,"authors":3250,"date":3160,"chapterOrder":3251,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim",[7],"1100-0400",{"path":3253,"stem":3254,"title":3255,"authors":3256,"date":3160,"chapterOrder":3257,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-gezebo-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-Gezebo仿真平台","Gezebo仿真平台",[7],"1100",{"path":3259,"stem":3260,"title":3261,"authors":3262,"date":3160,"chapterOrder":3263,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-humble-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-Humble版本","Humble导航仿真",[7],"1200-0100",{"path":3265,"stem":3266,"title":3267,"authors":3268,"date":3160,"chapterOrder":3269,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-jazzy-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-Jazzy版本","Jazzy导航仿真",[7],"1200-0200",{"path":3271,"stem":3272,"title":3273,"authors":3274,"date":3160,"chapterOrder":3275,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-humble2jazzy","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-Humble2Jazzy","Humble与Jazzy导航的差异",[7],"1200-0300",{"path":3277,"stem":3278,"title":3279,"authors":3280,"date":3160,"chapterOrder":3281,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0100-you-xian-zhuang-tai-ji-fsm","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0100-有限状态机FSM","有限状态机（Finite State Machine）",[7],"1200-0400-0100",{"path":3283,"stem":3284,"title":3285,"authors":3286,"date":3160,"chapterOrder":3287,"chapterDepth":866,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0100-ji-ben-gai-nian","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0100-基本概念","基本概念",[7],"1200-0400-0200-0100",{"path":3289,"stem":3290,"title":3291,"authors":3292,"date":3160,"chapterOrder":3293,"chapterDepth":866,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0200-kong-zhi-yu-zhuang-shi-gui-ze","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0200-控制与装饰规则","控制与装饰规则",[7],"1200-0400-0200-0200",{"path":3295,"stem":3296,"title":3297,"authors":3298,"date":3160,"chapterOrder":3299,"chapterDepth":866,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0300-di-yi-ge-wan-zheng-cheng-xu","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0300-第一个完整程序","第一个完整程序",[7],"1200-0400-0200-0300",{"path":3301,"stem":3302,"title":3303,"authors":3304,"date":3160,"chapterOrder":3305,"chapterDepth":866,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0400-jie-dian-zhi-jian-chuan-shu-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0400-节点之间传数据","节点之间传数据",[7],"1200-0400-0200-0400",{"path":3307,"stem":3308,"title":3309,"authors":3310,"date":3160,"chapterOrder":3311,"chapterDepth":866,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0500-chi-xu-ren-wu-yu-zhong-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0500-持续任务与中止","持续任务与中止",[7],"1200-0400-0200-0500",{"path":3313,"stem":3314,"title":3315,"authors":3316,"date":3160,"chapterOrder":3317,"chapterDepth":866,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0600-zu-he-shi-ji-ren-wu","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0600-组合实际任务","组合实际任务",[7],"1200-0400-0200-0600",{"path":3319,"stem":3320,"title":3321,"authors":3322,"date":3160,"chapterOrder":3323,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-xing-wei-shu-bt","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-行为树BT","行为树（BehaviorTree.CPP）",[7],"1200-0400-0200",{"path":3325,"stem":3326,"title":3327,"authors":3328,"date":3160,"chapterOrder":3329,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-fsm-yu-bt","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-FSM与BT","有限状态机FSM与行为树BT",[7],"1200-0400",{"path":3331,"stem":3332,"title":3333,"authors":3334,"date":3160,"chapterOrder":3335,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)",[7],"1200",{"path":3337,"stem":3338,"title":3339,"authors":3340,"date":3160,"chapterOrder":3341,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-Boost.Aiso","Boost.Asio库",[7],"1300-0100-0100",{"path":3343,"stem":3344,"title":3345,"authors":3346,"date":3160,"chapterOrder":3347,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2-serial-driver","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2_serial_driver","ROS2 Serial Driver库",[7],"1300-0100-0200",{"path":3349,"stem":3350,"title":3351,"authors":3352,"date":3160,"chapterOrder":3353,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-chuan-kou-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-串口通信","UART串口通信",[7],"1300-0100",{"path":3355,"stem":3356,"title":3357,"authors":3358,"date":3160,"chapterOrder":3359,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","SocketCAN",[7],"1300-0200-0100",{"path":3361,"stem":3362,"title":3363,"authors":3364,"date":3160,"chapterOrder":3365,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2_socketcan","ROS2_SocketCAN",[7],"1300-0200-0200",{"path":3367,"stem":3368,"title":3369,"authors":3370,"date":3160,"chapterOrder":3371,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-can-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-CAN通信","CAN通信",[7],"1300-0200",{"path":3373,"stem":3374,"title":3339,"authors":3375,"date":3160,"chapterOrder":3376,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-Boost.Aiso",[7],"1300-0300-0100",{"path":3378,"stem":3379,"title":3380,"authors":3381,"date":3160,"chapterOrder":3382,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-tcp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-TCP通信","TCP通信",[7],"1300-0300",{"path":3384,"stem":3385,"title":3339,"authors":3386,"date":3160,"chapterOrder":3387,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-Boost.Aiso",[7],"1300-0400-0100",{"path":3389,"stem":3390,"title":3391,"authors":3392,"date":3160,"chapterOrder":3393,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-udp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-UDP通信","UDP通信",[7],"1300-0400",{"path":3395,"stem":3396,"title":3397,"authors":3398,"date":3160,"chapterOrder":3399,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-linux-ying-jian-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-Linux硬件通信","Linux硬件通信",[7],"1300",{"path":3401,"stem":3402,"title":3403,"authors":3404,"date":3160,"chapterOrder":3405,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-ji-qi-ren-zu-cheng","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-机器人组成","机器人组成",[7],"1400-0100",{"path":3407,"stem":3408,"title":3409,"authors":3410,"date":3160,"chapterOrder":3411,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-yuan-cheng-kai-fa-ssh","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-远程开发SSH","远程开发SSH",[7],"1400-0200-0100",{"path":3413,"stem":3414,"title":3415,"authors":3416,"date":3160,"chapterOrder":3417,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-yuan-cheng-fang-wen-zhuo-mian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-远程访问桌面","远程访问桌面",[7],"1400-0200-0200",{"path":3419,"stem":3420,"title":3421,"authors":3422,"date":3160,"chapterOrder":3423,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-工控机之远程开发环境","工控机之远程开发环境",[7],"1400-0200",{"path":3425,"stem":3426,"title":3427,"authors":3428,"date":3160,"chapterOrder":3429,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-gong-kong-ji-zhi-wai-jie-usb-she-bei","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-工控机之外接USB设备","工控机之外接USB设备",[7],"1400-0300",{"path":3431,"stem":3432,"title":3433,"authors":3434,"date":3160,"chapterOrder":3435,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-fen-bu-shi-da-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-分布式搭建","分布式搭建",[7],"1400-0400",{"path":3437,"stem":3438,"title":3439,"authors":3440,"date":3160,"chapterOrder":3441,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-you-hua-ri-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-优化日志","优化日志",[7],"1400-0500",{"path":3443,"stem":3444,"title":3445,"authors":3446,"date":3160,"chapterOrder":3447,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-li-cheng-ji-odom","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-里程计Odom","里程计Odom",[7],"1400-0600-0100",{"path":3449,"stem":3450,"title":3451,"authors":3452,"date":3160,"chapterOrder":3453,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-guan-xing-ji-imu","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-惯性计IMU","惯性计IMU",[7],"1400-0600-0200",{"path":3455,"stem":3456,"title":3457,"authors":3458,"date":3160,"chapterOrder":3459,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-ji-guang-lei-da-lidar","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-激光雷达LiDAR","激光雷达LiDAR",[7],"1400-0600-0300",{"path":3461,"stem":3462,"title":3463,"authors":3464,"date":3160,"chapterOrder":3465,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-xiang-ji-camera","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-相机Camera","相机Camera",[7],"1400-0600-0400",{"path":3467,"stem":3468,"title":3469,"authors":3470,"date":3160,"chapterOrder":3471,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-quan-qiu-ding-wei-gnss","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-全球定位GNSS","全球定位GNSS",[7],"1400-0600-0500",{"path":3473,"stem":3474,"title":3475,"authors":3476,"date":3160,"chapterOrder":3477,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-shou-bing-joy","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-手柄joy","手柄JOY",[7],"1400-0600-0600",{"path":3479,"stem":3480,"title":3481,"authors":3482,"date":3160,"chapterOrder":3483,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-jian-pan-kong-zhi-jie-dian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-键盘控制节点","键盘控制节点",[7],"1400-0600-0700",{"path":3485,"stem":3486,"title":3487,"authors":3488,"date":3160,"chapterOrder":3489,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-ying-jian-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-硬件平台","硬件平台",[7],"1400-0600",{"path":3491,"stem":3492,"title":3493,"authors":3494,"date":3160,"chapterOrder":3495,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-zuo-biao-xi-yu-hua-ti-guan-xi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-坐标系与话题关系","坐标系与话题关系",[7],"1400-0700",{"path":3497,"stem":3498,"title":3499,"authors":3500,"date":3160,"chapterOrder":3501,"chapterDepth":866,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-lun-shi-li-cheng-ji-biao-ding","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-轮式里程计标定","轮式里程计标定",[7],"1400-0800-0100-0100",{"path":3503,"stem":3504,"title":3505,"authors":3506,"date":3160,"chapterOrder":3507,"chapterDepth":866,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-lun-shi-li-cheng-ji-yu-imu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-轮式里程计与IMU融合","轮式里程计与IMU融合",[7],"1400-0800-0100-0200",{"path":3509,"stem":3510,"title":3511,"authors":3512,"date":3160,"chapterOrder":3513,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-轮式里程计标定与融合","轮式里程计标定与融合",[7],"1400-0800-0100",{"path":3515,"stem":3516,"title":3517,"authors":3518,"date":3160,"chapterOrder":3519,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-ji-guang-lei-da-gong-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-激光雷达工具","激光雷达工具",[7],"1400-0800-0200",{"path":3521,"stem":3522,"title":3523,"authors":3524,"date":3160,"chapterOrder":3525,"chapterDepth":91,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-xiang-ji-shi-yong-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-相机使用进阶","相机使用进阶",[7],"1400-0800-0300",{"path":3527,"stem":3528,"title":3529,"authors":3530,"date":3160,"chapterOrder":3531,"chapterDepth":76,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-ying-jian-ping-tai-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-硬件平台进阶","硬件平台进阶",[7],"1400-0800",{"path":3533,"stem":3534,"title":3535,"authors":3536,"date":3160,"chapterOrder":3537,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-ji-qi-ren-ying-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-机器人硬件","机器人硬件",[7],"1400",{"path":3539,"stem":3540,"title":3541,"authors":3542,"date":3160,"chapterOrder":3543,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ros2-control","wiki\u002F2023-12-30-ros2-tutorial\u002F1500-ROS2_Control","ROS2_Control",[7],"1500",{"path":3545,"stem":3546,"title":3547,"authors":3548,"date":3160,"chapterOrder":3549,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1600-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki\u002F2023-12-30-ros2-tutorial\u002F1600-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂",[7],"1600",{"path":3551,"stem":3552,"title":3553,"authors":3554,"date":3160,"chapterOrder":3555,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1700-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1700-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)",[7],"1700",{"path":3557,"stem":3558,"title":3559,"authors":3560,"date":3160,"chapterOrder":3561,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-microros","wiki\u002F2023-12-30-ros2-tutorial\u002F1800-MicroROS","MicroROS",[7],"1800",{"path":3563,"stem":3564,"title":3565,"authors":3566,"date":3160,"chapterOrder":3567,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-webots-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1900-Webots仿真平台","Webots仿真平台",[7],"1900",{"path":3569,"stem":3570,"title":3571,"authors":3572,"date":3160,"chapterOrder":3573,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":3165},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-opencv","wiki\u002F2023-12-30-ros2-tutorial\u002F2000-OpenCV","OpenCV",[7],"2000",{"path":3162,"stem":3575,"title":3576,"authors":3577,"date":3160,"chapterOrder":3578,"chapterDepth":3158,"docKey":3161,"docRoot":3162,"docTitle":3163,"isWikiDoc":862,"isWikiIndex":862},"wiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2机器人操作系统教程",[7],null,[3580,3582,3585,3588],{"name":7,"image":3581},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":3583,"image":3584},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":3586,"image":3587},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":3589,"image":3590},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431901089]