[{"data":1,"prerenderedAt":1686},["ShallowReactive",2],{"wiki-page-/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao":3,"wiki-doc-items-/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao":1544},{"id":4,"title":5,"body":6,"chapter":1530,"chapterSort":1531,"date":1532,"description":19,"docKey":1533,"docRoot":1534,"docTitle":1535,"extension":1536,"isWikiDoc":210,"isWikiIndex":1537,"layout":1538,"meta":1539,"navigation":210,"path":1540,"seo":1541,"stem":1542,"wikiDepth":86,"__hash__":1543},"content/wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包.md","工作空间与功能包",{"type":7,"value":8,"toc":1519},"minimark",[9,13,21,24,27,30,33,36,39,42,47,52,55,60,65,70,73,147,149,154,157,162,167,170,175,180,185,190,428,433,438,441,444,449,454,456,461,466,469,472,477,480,482,487,492,495,500,510,513,516,519,662,667,670,673,678,681,686,689,694,699,704,707,710,713,716,719,724,729,734,739,744,749,754,759,764,767,770,775,780,783,788,793,798,801,806,825,833,852,857,874,879,901,906,911,932,937,940,945,950,953,958,963,966,971,976,979,984,989,994,999,1004,1007,1012,1017,1020,1023,1028,1033,1038,1043,1046,1051,1054,1059,1064,1069,1077,1082,1085,1090,1095,1098,1103,1106,1109,1114,1119,1124,1129,1132,1137,1142,1147,1152,1157,1162,1167,1172,1175,1179,1182,1188,1191,1197,1200,1206,1209,1215,1220,1225,1230,1235,1240,1245,1250,1255,1260,1265,1269,1272,1275,1281,1286,1288,1296,1299,1302,1308,1313,1315,1321,1324,1327,1333,1341,1346,1348,1354,1357,1363,1368,1370,1376,1379,1382,1388,1393,1395,1401,1404,1407,1413,1418,1420,1426,1429,1432,1438,1443,1445,1451,1454,1457,1463,1468,1470,1476,1479,1482,1488,1493,1495,1501,1504,1510,1515],[10,11,12],"h3",{"id":12},"工作空间简介",[14,15,16],"p",{},[17,18],"img",{"alt":19,"src":20},"","https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image222.webp",[14,22,23],{},"工作空间里有4个子空间",[14,25,26],{},"未来编写的代码和脚本都需要人为的放入src空间里，",[14,28,29],{},"编译所形成的中间文件会存放到build空间里，",[14,31,32],{},"可执行文件会存放到install空间里，",[14,34,35],{},"编译过程以及运行之后各种警告，错误信息等会存放到log空间里。",[37,38],"hr",{},[14,40,41],{},"用pip工具可以很方便的安装各种python的包",[14,43,44],{},[17,45],{"alt":19,"src":46},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image223.webp",[14,48,49],{},[17,50],{"alt":19,"src":51},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image224.webp",[14,53,54],{},"国内开发者@鱼香ROS 开发的一个专门处理ROS2依赖的工具",[14,56,57],{},[17,58],{"alt":19,"src":59},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image225.webp",[14,61,62],{},[17,63],{"alt":19,"src":64},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image226.webp",[14,66,67],{},[17,68],{"alt":19,"src":69},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image227.webp",[14,71,72],{},"实际上就是扫描了各个功能包里的package.xml里的depend，然后查找本机是否含有该依赖，再决定是否安装。",[74,75,79],"pre",{"className":76,"code":77,"language":78,"meta":19,"style":19},"language-bash shiki shiki-themes github-light github-dark","sudo rosdepc init\nrosdepc update\ncd ..\nrosdepc install -i --from-path src --rosdistro humble -y  #在src文件里看功能包所需依赖并查找安装\n","bash",[80,81,82,98,107,117],"code",{"__ignoreMap":19},[83,84,87,91,95],"span",{"class":85,"line":86},"line",1,[83,88,90],{"class":89},"sScJk","sudo",[83,92,94],{"class":93},"sZZnC"," rosdepc",[83,96,97],{"class":93}," init\n",[83,99,101,104],{"class":85,"line":100},2,[83,102,103],{"class":89},"rosdepc",[83,105,106],{"class":93}," update\n",[83,108,110,114],{"class":85,"line":109},3,[83,111,113],{"class":112},"sj4cs","cd",[83,115,116],{"class":93}," ..\n",[83,118,120,122,125,128,131,134,137,140,143],{"class":85,"line":119},4,[83,121,103],{"class":89},[83,123,124],{"class":93}," install",[83,126,127],{"class":112}," -i",[83,129,130],{"class":112}," --from-path",[83,132,133],{"class":93}," src",[83,135,136],{"class":112}," --rosdistro",[83,138,139],{"class":93}," humble",[83,141,142],{"class":112}," -y",[83,144,146],{"class":145},"sJ8bj","  #在src文件里看功能包所需依赖并查找安装\n",[37,148],{},[14,150,151],{},[17,152],{"alt":19,"src":153},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image228.webp",[14,155,156],{},"后面还需要创建好几个目录，这些目录大多都是和接口文件相关的。",[14,158,159],{},[17,160],{"alt":19,"src":161},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image229.webp",[14,163,164],{},[17,165],{"alt":19,"src":166},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image230.webp",[10,168,169],{"id":169},"源文件编译",[14,171,172],{},[17,173],{"alt":19,"src":174},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image231.webp",[14,176,177],{},[17,178],{"alt":19,"src":179},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image232.webp",[14,181,182],{},[17,183],{"alt":19,"src":184},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image233.webp",[14,186,187],{},[17,188],{"alt":19,"src":189},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image234.webp",[74,191,195],{"className":192,"code":193,"language":194,"meta":19,"style":19},"language-cpp shiki shiki-themes github-light github-dark","#include \"rclcpp/rclcpp.hpp\"\n\nclass MyNode: public rclcpp::Node\n{\n  public:\n    MyNode():Node(\"node_name\")\n    {\n      RCLCPP_INFO(this->get_logger(),\"hello world!\");\n    }\n};\n\nint main(int argc,char *argv[])\n{\n  rclcpp::init(argc,argv);\n  auto node = std::make_shared\u003CMyNode>();\n  rclcpp::shutdown();\n  return 0;\n}\n","cpp",[80,196,197,206,212,236,241,247,268,274,300,306,312,317,349,354,368,397,410,422],{"__ignoreMap":19},[83,198,199,203],{"class":85,"line":86},[83,200,202],{"class":201},"szBVR","#include",[83,204,205],{"class":93}," \"rclcpp/rclcpp.hpp\"\n",[83,207,208],{"class":85,"line":100},[83,209,211],{"emptyLinePlaceholder":210},true,"\n",[83,213,214,217,220,224,227,230,233],{"class":85,"line":109},[83,215,216],{"class":201},"class",[83,218,219],{"class":89}," MyNode",[83,221,223],{"class":222},"sVt8B",": ",[83,225,226],{"class":201},"public",[83,228,229],{"class":89}," rclcpp",[83,231,232],{"class":222},"::",[83,234,235],{"class":89},"Node\n",[83,237,238],{"class":85,"line":119},[83,239,240],{"class":222},"{\n",[83,242,244],{"class":85,"line":243},5,[83,245,246],{"class":201},"  public:\n",[83,248,250,253,256,259,262,265],{"class":85,"line":249},6,[83,251,252],{"class":89},"    MyNode",[83,254,255],{"class":222},"():",[83,257,258],{"class":89},"Node",[83,260,261],{"class":222},"(",[83,263,264],{"class":93},"\"node_name\"",[83,266,267],{"class":222},")\n",[83,269,271],{"class":85,"line":270},7,[83,272,273],{"class":222},"    {\n",[83,275,277,280,282,285,288,291,294,297],{"class":85,"line":276},8,[83,278,279],{"class":89},"      RCLCPP_INFO",[83,281,261],{"class":222},[83,283,284],{"class":112},"this",[83,286,287],{"class":222},"->",[83,289,290],{"class":89},"get_logger",[83,292,293],{"class":222},"(),",[83,295,296],{"class":93},"\"hello world!\"",[83,298,299],{"class":222},");\n",[83,301,303],{"class":85,"line":302},9,[83,304,305],{"class":222},"    }\n",[83,307,309],{"class":85,"line":308},10,[83,310,311],{"class":222},"};\n",[83,313,315],{"class":85,"line":314},11,[83,316,211],{"emptyLinePlaceholder":210},[83,318,320,323,326,328,330,334,337,340,343,346],{"class":85,"line":319},12,[83,321,322],{"class":201},"int",[83,324,325],{"class":89}," main",[83,327,261],{"class":222},[83,329,322],{"class":201},[83,331,333],{"class":332},"s4XuR"," argc",[83,335,336],{"class":222},",",[83,338,339],{"class":201},"char",[83,341,342],{"class":201}," *",[83,344,345],{"class":332},"argv",[83,347,348],{"class":222},"[])\n",[83,350,352],{"class":85,"line":351},13,[83,353,240],{"class":222},[83,355,357,360,362,365],{"class":85,"line":356},14,[83,358,359],{"class":89},"  rclcpp",[83,361,232],{"class":222},[83,363,364],{"class":89},"init",[83,366,367],{"class":222},"(argc,argv);\n",[83,369,371,374,377,380,383,385,388,391,394],{"class":85,"line":370},15,[83,372,373],{"class":201},"  auto",[83,375,376],{"class":222}," node ",[83,378,379],{"class":201},"=",[83,381,382],{"class":89}," std",[83,384,232],{"class":222},[83,386,387],{"class":89},"make_shared",[83,389,390],{"class":222},"\u003C",[83,392,393],{"class":89},"MyNode",[83,395,396],{"class":222},">();\n",[83,398,400,402,404,407],{"class":85,"line":399},16,[83,401,359],{"class":89},[83,403,232],{"class":222},[83,405,406],{"class":89},"shutdown",[83,408,409],{"class":222},"();\n",[83,411,413,416,419],{"class":85,"line":412},17,[83,414,415],{"class":201},"  return",[83,417,418],{"class":112}," 0",[83,420,421],{"class":222},";\n",[83,423,425],{"class":85,"line":424},18,[83,426,427],{"class":222},"}\n",[14,429,430],{},[17,431],{"alt":19,"src":432},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image235.webp",[14,434,435],{},[17,436],{"alt":19,"src":437},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image236.webp",[14,439,440],{},"实例化只能一个进程组织一个节点，",[14,442,443],{},"而继承可以组织多个节点。",[14,445,446],{},[17,447],{"alt":19,"src":448},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image237.webp",[14,450,451],{},[17,452],{"alt":19,"src":453},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image238.webp",[37,455],{},[14,457,458],{},[17,459],{"alt":19,"src":460},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image239.webp",[14,462,463],{},[17,464],{"alt":19,"src":465},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image240.webp",[14,467,468],{},"初始化和资源释放的作用是什么？",[14,470,471],{},"可以往context对象里放数据，也可以取数据，类似于FreeRTOS里的消息队列，但也不完全类似，它可以存储之前的数据。",[14,473,474],{},[17,475],{"alt":19,"src":476},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image241.webp",[14,478,479],{},"初始化不是仅仅只创建context对象，这是它的其中一个功能，它还有其他比较重要的功能。",[37,481],{},[14,483,484],{},[17,485],{"alt":19,"src":486},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image242.webp",[14,488,489],{},[17,490],{"alt":19,"src":491},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image243.webp",[14,493,494],{},"先初始化父类构造，并传入一个节点名称。",[14,496,497],{},[17,498],{"alt":19,"src":499},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image244.webp",[14,501,502,503],{},"智能指针忘记的可以看",[504,505,509],"a",{"href":506,"rel":507},"https://sdutvincirobot.feishu.cn/docx/N0GAdx6IDoqnRnx1q0TcX1Wfnvc",[508],"nofollow","Vinci机器人队C/C++资料",[14,511,512],{},"智能指针是一种自动管理内存的指针，它会在不需要对象时自动释放内存。使用智能指针可以避免内存泄漏和空悬指针等问题。",[14,514,515],{},"最安全的分配和使用动态内存的方法是调用一个名为 make_shared 的标准库函数。 此函数在动态内存中分配一个对象并初始化它，返回指向此对象的 shared_ptr。与智能指针一样，make_shared 也定义在头文件 memory 中。",[14,517,518],{},"当要用 make_shared 时，必须指定想要创建的对象的类型。定义方式与模板类相同， 在函数名之后跟一个尖括号，在其中给出类型：",[74,520,522],{"className":192,"code":521,"language":194,"meta":19,"style":19},"// 指向一个值为42的int的shared_ptr\nshared_ptr\u003Cint> p3 = make_shared\u003Cint>(42);\n\n// p4 指向一个值为\"9999999999\"的string\nshared_ptr\u003Cstring> p4 = make_shared\u003Cstring>(10,'9');\n\n// p5指向一个未初始化的int\nshared_ptr\u003Cint> p5 = make_shared\u003Cint>();\n//当然，我们通常用 auto 定义一个对象来保存 make_shared 的结果，这种方式较为简单：\n\n// p6指向一个动态分配的空vector\u003Cstring>\nauto p6 = make_shared\u003Cvector>();\n",[80,523,524,529,557,561,566,601,605,610,629,634,638,643],{"__ignoreMap":19},[83,525,526],{"class":85,"line":86},[83,527,528],{"class":145},"// 指向一个值为42的int的shared_ptr\n",[83,530,531,534,537,540,542,545,547,549,552,555],{"class":85,"line":100},[83,532,533],{"class":222},"shared_ptr",[83,535,536],{"class":201},"\u003Cint>",[83,538,539],{"class":222}," p3 ",[83,541,379],{"class":201},[83,543,544],{"class":89}," make_shared",[83,546,390],{"class":222},[83,548,322],{"class":201},[83,550,551],{"class":222},">(",[83,553,554],{"class":112},"42",[83,556,299],{"class":222},[83,558,559],{"class":85,"line":109},[83,560,211],{"emptyLinePlaceholder":210},[83,562,563],{"class":85,"line":119},[83,564,565],{"class":145},"// p4 指向一个值为\"9999999999\"的string\n",[83,567,568,570,572,575,578,581,583,585,587,589,591,594,596,599],{"class":85,"line":243},[83,569,533],{"class":222},[83,571,390],{"class":201},[83,573,574],{"class":222},"string",[83,576,577],{"class":201},">",[83,579,580],{"class":222}," p4 ",[83,582,379],{"class":201},[83,584,544],{"class":89},[83,586,390],{"class":222},[83,588,574],{"class":89},[83,590,551],{"class":222},[83,592,593],{"class":112},"10",[83,595,336],{"class":222},[83,597,598],{"class":93},"'9'",[83,600,299],{"class":222},[83,602,603],{"class":85,"line":249},[83,604,211],{"emptyLinePlaceholder":210},[83,606,607],{"class":85,"line":270},[83,608,609],{"class":145},"// p5指向一个未初始化的int\n",[83,611,612,614,616,619,621,623,625,627],{"class":85,"line":276},[83,613,533],{"class":222},[83,615,536],{"class":201},[83,617,618],{"class":222}," p5 ",[83,620,379],{"class":201},[83,622,544],{"class":89},[83,624,390],{"class":222},[83,626,322],{"class":201},[83,628,396],{"class":222},[83,630,631],{"class":85,"line":302},[83,632,633],{"class":145},"//当然，我们通常用 auto 定义一个对象来保存 make_shared 的结果，这种方式较为简单：\n",[83,635,636],{"class":85,"line":308},[83,637,211],{"emptyLinePlaceholder":210},[83,639,640],{"class":85,"line":314},[83,641,642],{"class":145},"// p6指向一个动态分配的空vector\u003Cstring>\n",[83,644,645,648,651,653,655,657,660],{"class":85,"line":319},[83,646,647],{"class":201},"auto",[83,649,650],{"class":222}," p6 ",[83,652,379],{"class":201},[83,654,544],{"class":89},[83,656,390],{"class":222},[83,658,659],{"class":89},"vector",[83,661,396],{"class":222},[14,663,664],{},[17,665],{"alt":19,"src":666},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image245.webp",[14,668,669],{},"用make_shared可以分配堆区内存。",[10,671,672],{"id":672},"配置文件",[14,674,675],{},[17,676],{"alt":19,"src":677},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image246.webp",[14,679,680],{},"C++",[14,682,683],{},[17,684],{"alt":19,"src":685},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image247.webp",[14,687,688],{},"Python",[14,690,691],{},[17,692],{"alt":19,"src":693},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image248.webp",[14,695,696],{},[17,697],{"alt":19,"src":698},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image249.webp",[14,700,701],{},[17,702],{"alt":19,"src":703},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image250.webp",[14,705,706],{},"name是功能包名称",[14,708,709],{},"version是包的版本",[14,711,712],{},"description是描述包的信息，也就是包是干嘛的",[14,714,715],{},"email是维护者的邮箱地址",[14,717,718],{},"license是我们的功能包使用的软件协议",[14,720,721],{},[17,722],{"alt":19,"src":723},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image251.webp",[14,725,726],{},[17,727],{"alt":19,"src":728},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image252.webp",[14,730,731],{},[17,732],{"alt":19,"src":733},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image253.webp",[14,735,736],{},[17,737],{"alt":19,"src":738},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image254.webp",[14,740,741],{},[17,742],{"alt":19,"src":743},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image255.webp",[14,745,746],{},[17,747],{"alt":19,"src":748},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image256.webp",[14,750,751],{},[17,752],{"alt":19,"src":753},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image257.webp",[14,755,756],{},[17,757],{"alt":19,"src":758},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image258.webp",[14,760,761],{},[17,762],{"alt":19,"src":763},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image259.webp",[14,765,766],{},"不建议直接重命名功能包的名字，当修改了文件夹名称，则里面很多文件里的配置内容也需要被修改。建议重新建。",[10,768,769],{"id":769},"常用操作命令",[14,771,772],{},[17,773],{"alt":19,"src":774},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image260.webp",[14,776,777],{},[17,778],{"alt":19,"src":779},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image261.webp",[14,781,782],{},"ament_cmake是cmake的增强版",[14,784,785],{},[17,786],{"alt":19,"src":787},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image262.webp",[14,789,790],{},[17,791],{"alt":19,"src":792},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image263.webp",[14,794,795],{},[17,796],{"alt":19,"src":797},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image264.webp",[14,799,800],{},"-h 是查看帮助信息",[14,802,803],{},[17,804],{"alt":19,"src":805},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image265.webp",[74,807,809],{"className":76,"code":808,"language":78,"meta":19,"style":19},"ros2 pkg executables #输出当前系统可执行的功能包和节点\n",[80,810,811],{"__ignoreMap":19},[83,812,813,816,819,822],{"class":85,"line":86},[83,814,815],{"class":89},"ros2",[83,817,818],{"class":93}," pkg",[83,820,821],{"class":93}," executables",[83,823,824],{"class":145}," #输出当前系统可执行的功能包和节点\n",[14,826,827,830],{},[17,828],{"alt":19,"src":829},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image266.webp",[17,831],{"alt":19,"src":832},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image267.webp",[74,834,836],{"className":76,"code":835,"language":78,"meta":19,"style":19},"ros2 pkg executables 功能包名         #是输出当前包下可执行的功能包和节点\n",[80,837,838],{"__ignoreMap":19},[83,839,840,842,844,846,849],{"class":85,"line":86},[83,841,815],{"class":89},[83,843,818],{"class":93},[83,845,821],{"class":93},[83,847,848],{"class":93}," 功能包名",[83,850,851],{"class":145},"         #是输出当前包下可执行的功能包和节点\n",[14,853,854],{},[17,855],{"alt":19,"src":856},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image268.webp",[74,858,860],{"className":76,"code":859,"language":78,"meta":19,"style":19},"ros2 pkg list #是输出当前系统可执行的功能包\n",[80,861,862],{"__ignoreMap":19},[83,863,864,866,868,871],{"class":85,"line":86},[83,865,815],{"class":89},[83,867,818],{"class":93},[83,869,870],{"class":93}," list",[83,872,873],{"class":145}," #是输出当前系统可执行的功能包\n",[14,875,876],{},[17,877],{"alt":19,"src":878},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image269.webp",[74,880,882],{"className":76,"code":881,"language":78,"meta":19,"style":19},"ros2 pkg prefix + 功能包名   #是输出该功能包的路径(重要，后面经常要用)\n",[80,883,884],{"__ignoreMap":19},[83,885,886,888,890,893,896,898],{"class":85,"line":86},[83,887,815],{"class":89},[83,889,818],{"class":93},[83,891,892],{"class":93}," prefix",[83,894,895],{"class":93}," +",[83,897,848],{"class":93},[83,899,900],{"class":145},"   #是输出该功能包的路径(重要，后面经常要用)\n",[14,902,903],{},[17,904],{"alt":19,"src":905},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image270.webp",[14,907,908],{},[17,909],{"alt":19,"src":910},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image271.webp",[74,912,914],{"className":76,"code":913,"language":78,"meta":19,"style":19},"ros2 pkg xml + 功能包名   #是输出该功能包里的packages.xml的内容\n",[80,915,916],{"__ignoreMap":19},[83,917,918,920,922,925,927,929],{"class":85,"line":86},[83,919,815],{"class":89},[83,921,818],{"class":93},[83,923,924],{"class":93}," xml",[83,926,895],{"class":93},[83,928,848],{"class":93},[83,930,931],{"class":145},"   #是输出该功能包里的packages.xml的内容\n",[14,933,934],{},[17,935],{"alt":19,"src":936},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image272.webp",[10,938,939],{"id":939},"核心模块_通信相关",[14,941,942],{},[17,943],{"alt":19,"src":944},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image273.webp",[14,946,947],{},[17,948],{"alt":19,"src":949},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image274.webp",[14,951,952],{},"通信模块被封装进了功能包",[14,954,955],{},[17,956],{"alt":19,"src":957},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image275.webp",[14,959,960],{},[17,961],{"alt":19,"src":962},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image276.webp",[14,964,965],{},"比如（例子）",[14,967,968],{},[17,969],{"alt":19,"src":970},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image277.webp",[14,972,973],{},[17,974],{"alt":19,"src":975},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image278.webp",[14,977,978],{},"会搜到巨多的内容，可以用grep进一步搜索",[14,980,981],{},[17,982],{"alt":19,"src":983},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image279.webp",[14,985,986],{},[17,987],{"alt":19,"src":988},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image280.webp",[14,990,991],{},[17,992],{"alt":19,"src":993},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image281.webp",[14,995,996],{},[17,997],{"alt":19,"src":998},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image282.webp",[14,1000,1001],{},[17,1002],{"alt":19,"src":1003},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image283.webp",[14,1005,1006],{},"下载分支用 -b",[14,1008,1009],{},[17,1010],{"alt":19,"src":1011},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image284.webp",[14,1013,1014],{},[17,1015],{"alt":19,"src":1016},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image285.webp",[14,1018,1019],{},"有个警告，因为有两个功能包都叫humble了",[14,1021,1022],{},"如果允许覆盖需要加参数 --allow-overriding",[14,1024,1025],{},[17,1026],{"alt":19,"src":1027},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image286.webp",[14,1029,1030],{},[17,1031],{"alt":19,"src":1032},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image287.webp",[14,1034,1035],{},[17,1036],{"alt":19,"src":1037},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image288.webp",[14,1039,1040],{},[17,1041],{"alt":19,"src":1042},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image289.webp",[14,1044,1045],{},"也就是helloworld那样的",[14,1047,1048],{},[17,1049],{"alt":19,"src":1050},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image290.webp",[10,1052,1053],{"id":1053},"核心模块_工具相关",[14,1055,1056],{},[17,1057],{"alt":19,"src":1058},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image291.webp",[14,1060,1061],{},[17,1062],{"alt":19,"src":1063},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image292.webp",[14,1065,1066],{},[17,1067],{"alt":19,"src":1068},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image293.webp",[14,1070,1071,1074],{},[17,1072],{"alt":19,"src":1073},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image294.webp",[17,1075],{"alt":19,"src":1076},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image295.webp",[14,1078,1079],{},[17,1080],{"alt":19,"src":1081},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image296.webp",[14,1083,1084],{},"命令行在某些地方比图形化工具比较好用，在远程登录时只能用命令行",[14,1086,1087],{},[17,1088],{"alt":19,"src":1089},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image297.webp",[14,1091,1092],{},[17,1093],{"alt":19,"src":1094},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image298.webp",[14,1096,1097],{},"Lanuch文件现在在ROS2里是一个Python文件了。",[14,1099,1100],{},[17,1101],{"alt":19,"src":1102},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image299.webp",[14,1104,1105],{},"Camera是摄像头位置，Base_Link是车体的位置，Laser是激光雷达的位置。",[14,1107,1108],{},"雷达检测的距离信息，会转化成车体的位置信息。",[14,1110,1111],{},[17,1112],{"alt":19,"src":1113},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image300.webp",[14,1115,1116],{},[17,1117],{"alt":19,"src":1118},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image301.webp",[14,1120,1121],{},[17,1122],{"alt":19,"src":1123},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image302.webp",[14,1125,1126],{},[17,1127],{"alt":19,"src":1128},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image303.webp",[10,1130,1131],{"id":1131},"功能包",[14,1133,1134],{},[17,1135],{"alt":19,"src":1136},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image304.webp",[14,1138,1139],{},[17,1140],{"alt":19,"src":1141},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image305.webp",[14,1143,1144],{},[17,1145],{"alt":19,"src":1146},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image306.webp",[14,1148,1149],{},[17,1150],{"alt":19,"src":1151},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image307.webp",[14,1153,1154],{},[17,1155],{"alt":19,"src":1156},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image308.webp",[14,1158,1159],{},[17,1160],{"alt":19,"src":1161},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image309.webp",[14,1163,1164],{},[17,1165],{"alt":19,"src":1166},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image310.webp",[14,1168,1169],{},[17,1170],{"alt":19,"src":1171},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image311.webp",[14,1173,1174],{},"python是解析型语言，不用编译，但是需要setup.py文件，setup.py主要功能是把可执行文件移动到install的。",[10,1176,1178],{"id":1177},"ros2技术支持","ROS2技术支持",[14,1180,1181],{},"ROS2_Wiki官网:",[14,1183,1184],{},[504,1185,1186],{"href":1186,"rel":1187},"http://wiki.ros.org/",[508],[14,1189,1190],{},"ROS2_Wiki中文官网(ROS2维基百科现已支持简体中文):",[14,1192,1193],{},[504,1194,1195],{"href":1195,"rel":1196},"http://wiki.ros.org/cn",[508],[14,1198,1199],{},"ROS2简体中文社区：",[14,1201,1202],{},[504,1203,1204],{"href":1204,"rel":1205},"http://wiki.ros.org/cn/community",[508],[14,1207,1208],{},"ROS2插件索引网址:",[14,1210,1211],{},[504,1212,1213],{"href":1213,"rel":1214},"https://index.ros.org/packages/",[508],[14,1216,1217],{},[17,1218],{"alt":19,"src":1219},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image312.webp",[14,1221,1222],{},[17,1223],{"alt":19,"src":1224},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image313.webp",[14,1226,1227],{},[17,1228],{"alt":19,"src":1229},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image314.webp",[14,1231,1232],{},[17,1233],{"alt":19,"src":1234},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image315.webp",[14,1236,1237],{},[17,1238],{"alt":19,"src":1239},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image316.webp",[14,1241,1242],{},[17,1243],{"alt":19,"src":1244},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image317.webp",[14,1246,1247],{},[17,1248],{"alt":19,"src":1249},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image318.webp",[14,1251,1252],{},[17,1253],{"alt":19,"src":1254},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image319.webp",[14,1256,1257],{},[17,1258],{"alt":19,"src":1259},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image320.webp",[14,1261,1262],{},[17,1263],{"alt":19,"src":1264},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image321.webp",[10,1266,1268],{"id":1267},"ros2应用方向","ROS2应用方向",[14,1270,1271],{},"许多ROS团队伴随ROS成长到今日，其规模已经发展到足以被认为是独立组织的程度了。在导航、机械臂、无人驾驶、无人机等诸多领域大放异彩，下面列出了其中的一些团队项目，这些项目对我们以后的进阶发展，也提供了指导。",[14,1273,1274],{},"ROS2社区：",[14,1276,1277],{},[504,1278,1279],{"href":1279,"rel":1280},"https://www.ros.org/blog/community/",[508],[14,1282,1283],{},[17,1284],{"alt":19,"src":1285},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image322.webp",[37,1287],{},[1289,1290,1292],"h4",{"id":1291},"nav2",[1293,1294,1295],"strong",{},"NAV2",[14,1297,1298],{},"Nav2项目继承自ROS Navigation Stack。该项目旨在可以让移动机器人从A点安全的移动到B点。它也可以应用于涉及机器人导航的其他应用，例如跟随动态点。Nav2将用于实现路径规划、运动控制、动态避障和恢复行为等一系列功能。",[14,1300,1301],{},"NAV2官网：",[14,1303,1304],{},[504,1305,1306],{"href":1306,"rel":1307},"https://navigation.ros.org/",[508],[14,1309,1310],{},[17,1311],{"alt":19,"src":1312},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image323.webp",[37,1314],{},[1289,1316,1318],{"id":1317},"opencv",[1293,1319,1320],{},"OpenCV",[14,1322,1323],{},"OpenCV（Open Source Computer Vision Library）是一个开源的计算机视觉和机器学习软件库。OpenCV旨在为计算机视觉应用程序提供通用基础架构，并加速机器感知在商业产品中的使用。OpenCV允许企业轻松地使用和修改代码。",[14,1325,1326],{},"OpenCV官网：",[14,1328,1329],{},[504,1330,1331],{"href":1331,"rel":1332},"https://opencv.org/",[508],[14,1334,1335,1336],{},"教程：",[504,1337,1340],{"href":1338,"rel":1339},"https://sdutvincirobot.feishu.cn/docx/K7gxdJjSFoAjerxTzaNcH3ufnpb",[508],"OpenCV教程",[14,1342,1343],{},[17,1344],{"alt":19,"src":1345},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image324.webp",[37,1347],{},[1289,1349,1351],{"id":1350},"moveit",[1293,1352,1353],{},"MoveIt",[14,1355,1356],{},"MoveIt是一组ROS软件包， 主要包含运动规划、碰撞检测、运动学、3D感知、操作控制等功能。它可以用于构建机械臂的高级行为。MoveIt现在可以用于市面上的大多数机械臂，并被许多大公司使用。",[14,1358,1359],{},[504,1360,1361],{"href":1361,"rel":1362},"https://moveit.ros.org/",[508],[14,1364,1365],{},[17,1366],{"alt":19,"src":1367},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image325.webp",[37,1369],{},[1289,1371,1373],{"id":1372},"the-autoware-foundation",[1293,1374,1375],{},"The Autoware Foundation",[14,1377,1378],{},"Autoware Foundation是ROS下属的非营利组织，支持实现自动驾驶的开源项目。Autoware基金会在企业发展和学术研究之间创造协同效应，为每个人提供自动驾驶技术。",[14,1380,1381],{},"TAF官网:",[14,1383,1384],{},[504,1385,1386],{"href":1386,"rel":1387},"https://www.autoware.org/",[508],[14,1389,1390],{},[17,1391],{"alt":19,"src":1392},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image326.webp",[37,1394],{},[1289,1396,1398],{"id":1397},"f1-tenth",[1293,1399,1400],{},"F1 Tenth",[14,1402,1403],{},"F1 Tenth是将模型车改为无人车的竞速赛事，是一个由研究人员、工程师和自主系统爱好者组成的国际社区。它最初于 2016 年在宾夕法尼亚大学成立，但后来扩展到全球许多其他机构。",[14,1405,1406],{},"F1 Tenth官网:",[14,1408,1409],{},[504,1410,1411],{"href":1411,"rel":1412},"https://f1tenth.org/",[508],[14,1414,1415],{},[17,1416],{"alt":19,"src":1417},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image327.webp",[37,1419],{},[1289,1421,1423],{"id":1422},"microros",[1293,1424,1425],{},"microROS",[14,1427,1428],{},"在基于ROS的机器人应用中，micro-ROS正在弥合性能有限的微控制器和一般处理器之间的差距。micro-ROS在各种嵌入式硬件上运行，使ROS能直接应用于机器人硬件。",[14,1430,1431],{},"MicroROS官网:",[14,1433,1434],{},[504,1435,1436],{"href":1436,"rel":1437},"https://micro.ros.org/",[508],[14,1439,1440],{},[17,1441],{"alt":19,"src":1442},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image328.webp",[37,1444],{},[1289,1446,1448],{"id":1447},"open-robotics",[1293,1449,1450],{},"Open Robotics",[14,1452,1453],{},"Open Robotics与全球ROS社区合作，为机器人创建开放的软件和硬件平台，包括 ROS1、ROS2、Gazebo模拟器和Ignition模拟器。Open Robotics使用这些平台解决一些重要问题，并通过为各种客户组织提供软件和硬件开发服务来帮助其他人做同样的事情。",[14,1455,1456],{},"Open Robotics官网:",[14,1458,1459],{},[504,1460,1461],{"href":1461,"rel":1462},"https://www.openrobotics.org/",[508],[14,1464,1465],{},[17,1466],{"alt":19,"src":1467},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image329.webp",[37,1469],{},[1289,1471,1473],{"id":1472},"px4",[1293,1474,1475],{},"PX4",[14,1477,1478],{},"PX4是一款用于无人机和其他无人驾驶车辆的开源飞行控制软件。该项目为无人机开发人员提供了一套灵活的工具，用于共享技术并为无人机应用程序创建量身定制解决方案。",[14,1480,1481],{},"PX4官网:",[14,1483,1484],{},[504,1485,1486],{"href":1486,"rel":1487},"https://px4.io/",[508],[14,1489,1490],{},[17,1491],{"alt":19,"src":1492},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image330.webp",[37,1494],{},[1289,1496,1498],{"id":1497},"ros-industrial",[1293,1499,1500],{},"ROS-Industrial",[14,1502,1503],{},"ROS-Industrial是一个开源项目，将 ROS 软件的高级功能扩展到工业相关硬件和应用程序。",[14,1505,1506],{},[504,1507,1508],{"href":1508,"rel":1509},"https://rosindustrial.org/",[508],[14,1511,1512],{},[17,1513],{"alt":19,"src":1514},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image331.webp",[1516,1517,1518],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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 .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":19,"searchDepth":100,"depth":100,"links":1520},[1521,1522,1523,1524,1525,1526,1527,1528,1529],{"id":12,"depth":109,"text":12},{"id":169,"depth":109,"text":169},{"id":672,"depth":109,"text":672},{"id":769,"depth":109,"text":769},{"id":939,"depth":109,"text":939},{"id":1053,"depth":109,"text":1053},{"id":1131,"depth":109,"text":1131},{"id":1177,"depth":109,"text":1178},{"id":1267,"depth":109,"text":1268},"3",3000000,"2023-12-30","2023-12-30-ros2-tutorial","/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,null,{},"/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao",{"title":5,"description":19},"wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","_q1LGRja6KNuNZyk9-tN0kldiFOYUdTkoWHG-xMxJm0",[1545,1551,1556,1562,1568,1574,1580,1586,1592,1598,1604,1610,1616,1622,1628,1634,1640,1645,1646,1652,1658,1664,1670,1676,1682],{"path":1546,"stem":1547,"title":1548,"date":1532,"chapter":1549,"chapterSort":1550,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","ROS2介绍","1",1000000,{"path":1552,"stem":1553,"title":1554,"date":1532,"chapter":593,"chapterSort":1555,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2仿真平台",10000000,{"path":1557,"stem":1558,"title":1559,"date":1532,"chapter":1560,"chapterSort":1561,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":1563,"stem":1564,"title":1565,"date":1532,"chapter":1566,"chapterSort":1567,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":1569,"stem":1570,"title":1571,"date":1532,"chapter":1572,"chapterSort":1573,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":1575,"stem":1576,"title":1577,"date":1532,"chapter":1578,"chapterSort":1579,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim","11.4",11040000,{"path":1581,"stem":1582,"title":1583,"date":1532,"chapter":1584,"chapterSort":1585,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gezebo仿真平台","11",11000000,{"path":1587,"stem":1588,"title":1589,"date":1532,"chapter":1590,"chapterSort":1591,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)","12",12000000,{"path":1593,"stem":1594,"title":1595,"date":1532,"chapter":1596,"chapterSort":1597,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch13-ros2serial","wiki/2023-12-30-ros2-tutorial/ch13-ROS2Serial","ROS2 Serial","13",13000000,{"path":1599,"stem":1600,"title":1601,"date":1532,"chapter":1602,"chapterSort":1603,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","机器人硬件","14",14000000,{"path":1605,"stem":1606,"title":1607,"date":1532,"chapter":1608,"chapterSort":1609,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":1611,"stem":1612,"title":1613,"date":1532,"chapter":1614,"chapterSort":1615,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂","16",16000000,{"path":1617,"stem":1618,"title":1619,"date":1532,"chapter":1620,"chapterSort":1621,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)","17",17000000,{"path":1623,"stem":1624,"title":1625,"date":1532,"chapter":1626,"chapterSort":1627,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch18-microros","wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":1629,"stem":1630,"title":1631,"date":1532,"chapter":1632,"chapterSort":1633,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots仿真平台","19",19000000,{"path":1635,"stem":1636,"title":1637,"date":1532,"chapter":1638,"chapterSort":1639,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","wiki/2023-12-30-ros2-tutorial/ch2-入门操作","入门操作","2",2000000,{"path":1641,"stem":1642,"title":1320,"date":1532,"chapter":1643,"chapterSort":1644,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch20-opencv","wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","20",20000000,{"path":1540,"stem":1542,"title":5,"date":1532,"chapter":1530,"chapterSort":1531,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},{"path":1647,"stem":1648,"title":1649,"date":1532,"chapter":1650,"chapterSort":1651,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","wiki/2023-12-30-ros2-tutorial/ch4-四大通信","四大通信","4",4000000,{"path":1653,"stem":1654,"title":1655,"date":1532,"chapter":1656,"chapterSort":1657,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2其他通信机制","5",5000000,{"path":1659,"stem":1660,"title":1661,"date":1532,"chapter":1662,"chapterSort":1663,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch6-launch","wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":1665,"stem":1666,"title":1667,"date":1532,"chapter":1668,"chapterSort":1669,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","回溯rosbag2","7",7000000,{"path":1671,"stem":1672,"title":1673,"date":1532,"chapter":1674,"chapterSort":1675,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","坐标变换TF","8",8000000,{"path":1677,"stem":1678,"title":1679,"date":1532,"chapter":1680,"chapterSort":1681,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":1537},"/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言","9",9000000,{"path":1534,"stem":1683,"title":1684,"date":1532,"chapter":1538,"chapterSort":1685,"docKey":1533,"docRoot":1534,"docTitle":1535,"isWikiDoc":210,"isWikiIndex":210},"wiki/2023-12-30-ros2-tutorial/index","ROS2机器人操作系统教程",0,1778560328693]