[{"data":1,"prerenderedAt":2888},["ShallowReactive",2],{"wiki-page-/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim":3,"wiki-doc-items-/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim":2520,"language-switcher-data-/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim":2872,"wiki-i18n-paths-/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim":2887},{"id":4,"title":5,"body":6,"canonicalPath":2500,"chapter":2501,"chapterSort":2502,"date":2503,"description":113,"docI18nKey":2504,"docKey":2505,"docRoot":2506,"docTitle":2507,"extension":2508,"i18nKey":2509,"isBlogPost":2510,"isWikiDoc":2511,"isWikiIndex":2510,"layout":2512,"legacyPath":2512,"locale":2513,"localeSlug":2514,"meta":2515,"navigation":2511,"path":2500,"seo":2516,"sourcePath":2517,"sourceStem":2509,"stem":2518,"wikiDepth":120,"__hash__":2519},"content/_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim.md","將Ign Gazebo遷移至Gz Sim",{"type":7,"value":8,"toc":2497},"minimark",[9,13,20,36,50,53,56,59,100,104,107,139,142,178,181,231,235,241,254,259,262,297,300,439,443,446,476,479,507,510,608,612,615,670,673,719,722,738,742,745,749,751,770,773,791,794,802,806,809,828,831,849,856,862,865,872,899,902,1046,1049,1186,1195,1207,1214,1219,1224,1228,1241,1244,1268,1271,1290,1293,1367,1370,1404,1407,1501,1505,1511,1584,1587,1607,1611,1622,1719,1722,1740,1744,1747,1766,1769,1787,1790,1808,1815,1823,1841,1844,1862,1865,1926,1929,1948,1951,1955,1989,1993,2020,2024,2041,2050,2054,2077,2081,2109,2112,2145,2148,2151,2154,2160,2163,2169,2173,2176,2189,2191,2204,2208,2210,2231,2234,2281,2284,2319,2323,2326,2332,2339,2343,2346,2362,2377,2380,2409,2413,2416,2422,2425,2428,2431,2469,2472,2490,2493],[10,11,5],"h3",{"id":12},"將ign-gazebo遷移至gz-sim",[14,15,16],"p",{},[17,18,19],"strong",{},"（即 ROS2 Humble 遷移至 ROS2 Jazzy 及之後版本。只用 Humble 的工程也建議看一下，因爲很多寫法會影響以後升級。）",[14,21,22,23,27,28,31,32,35],{},"ROS2 Humble 時代，新版 Gazebo 仍經常使用 Ignition / Ign Gazebo 的命名，例如命令是 ",[24,25,26],"code",{},"ign gazebo","，ROS 包名常見 ",[24,29,30],{},"ros_ign_*","，插件文件名常見 ",[24,33,34],{},"ignition-gazebo-xxx-system","。",[14,37,38,39,42,43,46,47,35],{},"到了 ROS2 Jazzy，官方搭配的是 Gazebo Harmonic。此時命名體系基本切換爲 Gazebo / Gz Sim，例如命令變成 ",[24,40,41],{},"gz sim","，ROS 包名改成 ",[24,44,45],{},"ros_gz_*","，插件文件名改成 ",[24,48,49],{},"gz-sim-xxx-system",[14,51,52],{},"所以從 Humble 遷移到 Jazzy 時，兼容性問題最大的地方通常就是 Gazebo。界面和功能看起來差不多，但代碼裏大量名字不互通，需要把 Ignition 時代的命名遷移到 Gz Sim / Gazebo Harmonic 寫法。",[14,54,55],{},"可以簡單理解爲：大部分遷移不是功能重寫，而是命名體系、插件名、launch 包名、SDF 標籤和環境變量的遷移。",[14,57,58],{},"官方參考：",[60,61,62,72,79,86,93],"ul",{},[63,64,65,66],"li",{},"Gazebo Harmonic 遷移說明：",[67,68,69],"a",{"href":69,"rel":70},"https://gazebosim.org/docs/harmonic/migration_from_ignition/",[71],"nofollow",[63,73,74,75],{},"Gazebo Fuel 模型引用示例：",[67,76,77],{"href":77,"rel":78},"https://gazebosim.org/docs/harmonic/fuel_insert/",[71],[63,80,81,82],{},"Gazebo Sensors 示例：",[67,83,84],{"href":84,"rel":85},"https://gazebosim.org/docs/harmonic/sensors/",[71],[63,87,88,89],{},"ROS2 Gazebo Classic 遷移到新 Gazebo 的說明：",[67,90,91],{"href":91,"rel":92},"https://gazebosim.org/docs/harmonic/migrating_gazebo_classic_ros2_packages/",[71],[63,94,95,96],{},"SDFormat Sensor 規範：",[67,97,98],{"href":98,"rel":99},"https://sdformat.org/spec",[71],[101,102,103],"h4",{"id":103},"遷移前先搜索舊寫法",[14,105,106],{},"在工程根目錄執行：",[108,109,114],"pre",{"className":110,"code":111,"language":112,"meta":113,"style":113},"language-bash shiki shiki-themes github-light github-dark","rg -n -i \"ignition|ignition-gazebo|libignition|ros_ign|ign_args|ign_version|fuel.ignitionrobotics|ignition_frame_id|\u003Cignition-gui>|ign gazebo|ign topic|alwaysOn\" src\n","bash","",[24,115,116],{"__ignoreMap":113},[117,118,121,125,129,132,136],"span",{"class":119,"line":120},"line",1,[117,122,124],{"class":123},"sScJk","rg",[117,126,128],{"class":127},"sj4cs"," -n",[117,130,131],{"class":127}," -i",[117,133,135],{"class":134},"sZZnC"," \"ignition|ignition-gazebo|libignition|ros_ign|ign_args|ign_version|fuel.ignitionrobotics|ignition_frame_id|\u003Cignition-gui>|ign gazebo|ign topic|alwaysOn\"",[117,137,138],{"class":134}," src\n",[14,140,141],{},"重點檢查這些文件：",[60,143,144,150,160,166,172],{},[63,145,146,149],{},[24,147,148],{},"*.sdf","：world、model、GUI、插件、Fuel URL 通常在這裏。",[63,151,152,155,156,159],{},[24,153,154],{},"*.urdf.xacro"," / ",[24,157,158],{},"*.urdf","：機器人插件、傳感器標籤通常在這裏。",[63,161,162,165],{},[24,163,164],{},"*.launch.py","：Gazebo 啓動包、啓動參數、橋接 topic 通常在這裏。",[63,167,168,171],{},[24,169,170],{},"package.xml","：運行依賴通常在這裏。",[63,173,174,177],{},[24,175,176],{},"CMakeLists.txt","：安裝目錄和編譯依賴通常在這裏。",[14,179,180],{},"建議修改時加成對中文註釋，方便以後知道從哪裏開始、到哪裏結束：",[108,182,186],{"className":183,"code":184,"language":185,"meta":113,"style":113},"language-xml shiki shiki-themes github-light github-dark","\u003C!-- Jazzy 迁移开始：说明这里为什么要改。 -->\n\u003Cplugin filename=\"gz-sim-physics-system\" name=\"gz::sim::systems::Physics\"/>\n\u003C!-- Jazzy 迁移结束：说明这里已经改成什么写法。 -->\n","xml",[24,187,188,194,225],{"__ignoreMap":113},[117,189,190],{"class":119,"line":120},[117,191,193],{"class":192},"sJ8bj","\u003C!-- Jazzy 迁移开始：说明这里为什么要改。 -->\n",[117,195,197,201,205,208,211,214,217,219,222],{"class":119,"line":196},2,[117,198,200],{"class":199},"sVt8B","\u003C",[117,202,204],{"class":203},"s9eBZ","plugin",[117,206,207],{"class":123}," filename",[117,209,210],{"class":199},"=",[117,212,213],{"class":134},"\"gz-sim-physics-system\"",[117,215,216],{"class":123}," name",[117,218,210],{"class":199},[117,220,221],{"class":134},"\"gz::sim::systems::Physics\"",[117,223,224],{"class":199},"/>\n",[117,226,228],{"class":119,"line":227},3,[117,229,230],{"class":192},"\u003C!-- Jazzy 迁移结束：说明这里已经改成什么写法。 -->\n",[101,232,234],{"id":233},"sdf文件","SDF文件",[14,236,237],{},[238,239],"img",{"alt":113,"src":240},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1741.webp",[14,242,243,244,155,247,250,251,35],{},"根據官方遷移說明，普通命名通常把 ",[24,245,246],{},"ignition",[24,248,249],{},"ign"," 換成 ",[24,252,253],{},"gz",[14,255,256],{},[238,257],{"alt":113,"src":258},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1742.webp",[14,260,261],{},"插件要按新命名修改，例如：",[60,263,264,273,282,290],{},[63,265,266,269,270],{},[24,267,268],{},"ignition::gazebo"," 命名空間改爲 ",[24,271,272],{},"gz::sim",[63,274,275,278,279],{},[24,276,277],{},"ignition::"," 改爲 ",[24,280,281],{},"gz::",[63,283,284,278,287],{},[24,285,286],{},"ignition-gazebo-XXX-system",[24,288,289],{},"gz-sim-XXX-system",[63,291,292,278,295],{},[24,293,294],{},"libignition-gazebo-XXX-system.so",[24,296,289],{},[14,298,299],{},"常見替換表：",[301,302,303,320],"table",{},[304,305,306],"thead",{},[307,308,309,314,317],"tr",{},[310,311,313],"th",{"align":312},"left","Humble / Ignition 寫法",[310,315,316],{"align":312},"Jazzy / Gazebo Harmonic 寫法",[310,318,319],{"align":312},"示例場景",[321,322,323,339,352,367,380,395,409,424],"tbody",{},[307,324,325,331,336],{},[326,327,328],"td",{"align":312},[24,329,330],{},"ignition-gazebo-*",[326,332,333],{"align":312},[24,334,335],{},"gz-sim-*",[326,337,338],{"align":312},"插件文件名",[307,340,341,346,350],{},[326,342,343],{"align":312},[24,344,345],{},"libignition-gazebo-*.so",[326,347,348],{"align":312},[24,349,335],{},[326,351,338],{"align":312},[307,353,354,359,364],{},[326,355,356],{"align":312},[24,357,358],{},"ignition::gazebo::*",[326,360,361],{"align":312},[24,362,363],{},"gz::sim::*",[326,365,366],{"align":312},"插件命名空間",[307,368,369,373,377],{},[326,370,371],{"align":312},[24,372,30],{},[326,374,375],{"align":312},[24,376,45],{},[326,378,379],{"align":312},"ROS-Gazebo 包名",[307,381,382,387,392],{},[326,383,384],{"align":312},[24,385,386],{},"ign_args",[326,388,389],{"align":312},[24,390,391],{},"gz_args",[326,393,394],{"align":312},"launch 參數",[307,396,397,402,407],{},[326,398,399],{"align":312},[24,400,401],{},"ign_version",[326,403,404],{"align":312},[24,405,406],{},"gz_version",[326,408,394],{"align":312},[307,410,411,416,421],{},[326,412,413],{"align":312},[24,414,415],{},"IGN_GAZEBO_RESOURCE_PATH",[326,417,418],{"align":312},[24,419,420],{},"GZ_SIM_RESOURCE_PATH",[326,422,423],{"align":312},"模型/資源路徑",[307,425,426,431,436],{},[326,427,428],{"align":312},[24,429,430],{},"fuel.ignitionrobotics.org",[326,432,433],{"align":312},[24,434,435],{},"fuel.gazebosim.org",[326,437,438],{"align":312},"Gazebo Fuel URL",[440,441,442],"h5",{"id":442},"系統插件",[14,444,445],{},"舊寫法：",[108,447,449],{"className":183,"code":448,"language":185,"meta":113,"style":113},"\u003Cplugin filename=\"libignition-gazebo-physics-system.so\"\n        name=\"ignition::gazebo::systems::Physics\"/>\n",[24,450,451,464],{"__ignoreMap":113},[117,452,453,455,457,459,461],{"class":119,"line":120},[117,454,200],{"class":199},[117,456,204],{"class":203},[117,458,207],{"class":123},[117,460,210],{"class":199},[117,462,463],{"class":134},"\"libignition-gazebo-physics-system.so\"\n",[117,465,466,469,471,474],{"class":119,"line":196},[117,467,468],{"class":123},"        name",[117,470,210],{"class":199},[117,472,473],{"class":134},"\"ignition::gazebo::systems::Physics\"",[117,475,224],{"class":199},[14,477,478],{},"Jazzy / Gazebo Harmonic 寫法：",[108,480,482],{"className":183,"code":481,"language":185,"meta":113,"style":113},"\u003Cplugin filename=\"gz-sim-physics-system\"\n        name=\"gz::sim::systems::Physics\"/>\n",[24,483,484,497],{"__ignoreMap":113},[117,485,486,488,490,492,494],{"class":119,"line":120},[117,487,200],{"class":199},[117,489,204],{"class":203},[117,491,207],{"class":123},[117,493,210],{"class":199},[117,495,496],{"class":134},"\"gz-sim-physics-system\"\n",[117,498,499,501,503,505],{"class":119,"line":196},[117,500,468],{"class":123},[117,502,210],{"class":199},[117,504,221],{"class":134},[117,506,224],{"class":199},[14,508,509],{},"常見系統插件：",[301,511,512,522],{},[304,513,514],{},[307,515,516,519],{},[310,517,518],{"align":312},"舊插件",[310,520,521],{"align":312},"新插件",[321,523,524,536,548,560,572,584,596],{},[307,525,526,531],{},[326,527,528],{"align":312},[24,529,530],{},"ignition-gazebo-physics-system",[326,532,533],{"align":312},[24,534,535],{},"gz-sim-physics-system",[307,537,538,543],{},[326,539,540],{"align":312},[24,541,542],{},"ignition-gazebo-sensors-system",[326,544,545],{"align":312},[24,546,547],{},"gz-sim-sensors-system",[307,549,550,555],{},[326,551,552],{"align":312},[24,553,554],{},"ignition-gazebo-scene-broadcaster-system",[326,556,557],{"align":312},[24,558,559],{},"gz-sim-scene-broadcaster-system",[307,561,562,567],{},[326,563,564],{"align":312},[24,565,566],{},"ignition-gazebo-user-commands-system",[326,568,569],{"align":312},[24,570,571],{},"gz-sim-user-commands-system",[307,573,574,579],{},[326,575,576],{"align":312},[24,577,578],{},"ignition-gazebo-contact-system",[326,580,581],{"align":312},[24,582,583],{},"gz-sim-contact-system",[307,585,586,591],{},[326,587,588],{"align":312},[24,589,590],{},"ignition-gazebo-diff-drive-system",[326,592,593],{"align":312},[24,594,595],{},"gz-sim-diff-drive-system",[307,597,598,603],{},[326,599,600],{"align":312},[24,601,602],{},"ignition-gazebo-joint-state-publisher-system",[326,604,605],{"align":312},[24,606,607],{},"gz-sim-joint-state-publisher-system",[440,609,611],{"id":610},"gui-標籤","GUI 標籤",[14,613,614],{},"舊版 Gazebo GUI 配置可能寫：",[108,616,618],{"className":183,"code":617,"language":185,"meta":113,"style":113},"\u003Cignition-gui>\n  \u003Cproperty type=\"string\" key=\"state\">docked\u003C/property>\n\u003C/ignition-gui>\n",[24,619,620,630,661],{"__ignoreMap":113},[117,621,622,624,627],{"class":119,"line":120},[117,623,200],{"class":199},[117,625,626],{"class":203},"ignition-gui",[117,628,629],{"class":199},">\n",[117,631,632,635,638,641,643,646,649,651,654,657,659],{"class":119,"line":196},[117,633,634],{"class":199},"  \u003C",[117,636,637],{"class":203},"property",[117,639,640],{"class":123}," type",[117,642,210],{"class":199},[117,644,645],{"class":134},"\"string\"",[117,647,648],{"class":123}," key",[117,650,210],{"class":199},[117,652,653],{"class":134},"\"state\"",[117,655,656],{"class":199},">docked\u003C/",[117,658,637],{"class":203},[117,660,629],{"class":199},[117,662,663,666,668],{"class":119,"line":227},[117,664,665],{"class":199},"\u003C/",[117,667,626],{"class":203},[117,669,629],{"class":199},[14,671,672],{},"Jazzy / Gazebo Harmonic 改成：",[108,674,676],{"className":183,"code":675,"language":185,"meta":113,"style":113},"\u003Cgz-gui>\n  \u003Cproperty type=\"string\" key=\"state\">docked\u003C/property>\n\u003C/gz-gui>\n",[24,677,678,687,711],{"__ignoreMap":113},[117,679,680,682,685],{"class":119,"line":120},[117,681,200],{"class":199},[117,683,684],{"class":203},"gz-gui",[117,686,629],{"class":199},[117,688,689,691,693,695,697,699,701,703,705,707,709],{"class":119,"line":196},[117,690,634],{"class":199},[117,692,637],{"class":203},[117,694,640],{"class":123},[117,696,210],{"class":199},[117,698,645],{"class":134},[117,700,648],{"class":123},[117,702,210],{"class":199},[117,704,653],{"class":134},[117,706,656],{"class":199},[117,708,637],{"class":203},[117,710,629],{"class":199},[117,712,713,715,717],{"class":119,"line":227},[117,714,665],{"class":199},[117,716,684],{"class":203},[117,718,629],{"class":199},[14,720,721],{},"可以用下面命令檢查：",[108,723,725],{"className":110,"code":724,"language":112,"meta":113,"style":113},"rg -n \"\u003Cignition-gui>|\u003C/ignition-gui>\" src\n",[24,726,727],{"__ignoreMap":113},[117,728,729,731,733,736],{"class":119,"line":120},[117,730,124],{"class":123},[117,732,128],{"class":127},[117,734,735],{"class":134}," \"\u003Cignition-gui>|\u003C/ignition-gui>\"",[117,737,138],{"class":134},[101,739,741],{"id":740},"urdf-xacro-裏的-gazebo-傳感器","URDF / Xacro 裏的 Gazebo 傳感器",[14,743,744],{},"傳感器部分是 Jazzy 遷移時最容易留下 warning 的地方。",[440,746,748],{"id":747},"alwayson-改爲-always_on","alwaysOn 改爲 always_on",[14,750,445],{},[108,752,754],{"className":183,"code":753,"language":185,"meta":113,"style":113},"\u003CalwaysOn>true\u003C/alwaysOn>\n",[24,755,756],{"__ignoreMap":113},[117,757,758,760,763,766,768],{"class":119,"line":120},[117,759,200],{"class":199},[117,761,762],{"class":203},"alwaysOn",[117,764,765],{"class":199},">true\u003C/",[117,767,762],{"class":203},[117,769,629],{"class":199},[14,771,772],{},"Jazzy / SDF 標準寫法：",[108,774,776],{"className":183,"code":775,"language":185,"meta":113,"style":113},"\u003Calways_on>true\u003C/always_on>\n",[24,777,778],{"__ignoreMap":113},[117,779,780,782,785,787,789],{"class":119,"line":120},[117,781,200],{"class":199},[117,783,784],{"class":203},"always_on",[117,786,765],{"class":199},[117,788,784],{"class":203},[117,790,629],{"class":199},[14,792,793],{},"如果不改，Gazebo 可能會提示：",[108,795,800],{"className":796,"code":798,"language":799,"meta":113},[797],"language-text","XML Element[alwaysOn], child of element[sensor], not defined in SDF.\n","text",[24,801,798],{"__ignoreMap":113},[440,803,805],{"id":804},"ignition_frame_id-gz_frame_id-與-pose-relative_to","ignition_frame_id / gz_frame_id 與 pose relative_to",[14,807,808],{},"舊寫法可能是：",[108,810,812],{"className":183,"code":811,"language":185,"meta":113,"style":113},"\u003Cignition_frame_id>laser\u003C/ignition_frame_id>\n",[24,813,814],{"__ignoreMap":113},[117,815,816,818,821,824,826],{"class":119,"line":120},[117,817,200],{"class":199},[117,819,820],{"class":203},"ignition_frame_id",[117,822,823],{"class":199},">laser\u003C/",[117,825,820],{"class":203},[117,827,629],{"class":199},[14,829,830],{},"有些 Gazebo ROS 遷移文檔裏會看到：",[108,832,834],{"className":183,"code":833,"language":185,"meta":113,"style":113},"\u003Cgz_frame_id>laser\u003C/gz_frame_id>\n",[24,835,836],{"__ignoreMap":113},[117,837,838,840,843,845,847],{"class":119,"line":120},[117,839,200],{"class":199},[117,841,842],{"class":203},"gz_frame_id",[117,844,823],{"class":199},[117,846,842],{"class":203},[117,848,629],{"class":199},[14,850,851,852,855],{},"但是在當前 ROS2 Jazzy / Gazebo Harmonic 工具鏈裏，URDF 轉 SDF 通常會輸出 SDF 1.11，而 SDF 1.11 沒有標準 ",[24,853,854],{},"\u003Cgz_frame_id>"," 元素。因此啓動時可能會出現：",[108,857,860],{"className":858,"code":859,"language":799,"meta":113},[797],"XML Element[gz_frame_id], child of element[sensor], not defined in SDF. Copying[gz_frame_id] as children of [sensor].\n",[24,861,859],{"__ignoreMap":113},[14,863,864],{},"但是這個警告說實話，是警告，但實際上這個標籤是生效的，必須要使用這個標籤，請忽略那些警告。",[14,866,867,868,871],{},"然後你也可以再加上一個下面這個",[24,869,870],{},"pose relative_to","標籤，這是官方示例裏給的。",[108,873,875],{"className":183,"code":874,"language":185,"meta":113,"style":113},"\u003Cpose relative_to=\"laser\">0 0 0 0 0 0\u003C/pose>\n",[24,876,877],{"__ignoreMap":113},[117,878,879,881,884,887,889,892,895,897],{"class":119,"line":120},[117,880,200],{"class":199},[117,882,883],{"class":203},"pose",[117,885,886],{"class":123}," relative_to",[117,888,210],{"class":199},[117,890,891],{"class":134},"\"laser\"",[117,893,894],{"class":199},">0 0 0 0 0 0\u003C/",[117,896,883],{"class":203},[117,898,629],{"class":199},[14,900,901],{},"相機示例：",[108,903,905],{"className":183,"code":904,"language":185,"meta":113,"style":113},"\u003Csensor name=\"cam_link\" type=\"camera\">\n  \u003Cupdate_rate>10.0\u003C/update_rate>\n  \u003Calways_on>true\u003C/always_on>\n  \u003Cpose relative_to=\"camera\">0 0 0 0 0 0\u003C/pose>\n  \u003Cgz_frame_id>camera\u003C/gz_frame_id>\n  \u003Ctopic>/image_raw\u003C/topic>\n  \u003Ccamera name=\"my_camera\">\n    ...\n  \u003C/camera>\n\u003C/sensor>\n",[24,906,907,930,944,956,975,989,1004,1021,1027,1037],{"__ignoreMap":113},[117,908,909,911,914,916,918,921,923,925,928],{"class":119,"line":120},[117,910,200],{"class":199},[117,912,913],{"class":203},"sensor",[117,915,216],{"class":123},[117,917,210],{"class":199},[117,919,920],{"class":134},"\"cam_link\"",[117,922,640],{"class":123},[117,924,210],{"class":199},[117,926,927],{"class":134},"\"camera\"",[117,929,629],{"class":199},[117,931,932,934,937,940,942],{"class":119,"line":196},[117,933,634],{"class":199},[117,935,936],{"class":203},"update_rate",[117,938,939],{"class":199},">10.0\u003C/",[117,941,936],{"class":203},[117,943,629],{"class":199},[117,945,946,948,950,952,954],{"class":119,"line":227},[117,947,634],{"class":199},[117,949,784],{"class":203},[117,951,765],{"class":199},[117,953,784],{"class":203},[117,955,629],{"class":199},[117,957,959,961,963,965,967,969,971,973],{"class":119,"line":958},4,[117,960,634],{"class":199},[117,962,883],{"class":203},[117,964,886],{"class":123},[117,966,210],{"class":199},[117,968,927],{"class":134},[117,970,894],{"class":199},[117,972,883],{"class":203},[117,974,629],{"class":199},[117,976,978,980,982,985,987],{"class":119,"line":977},5,[117,979,634],{"class":199},[117,981,842],{"class":203},[117,983,984],{"class":199},">camera\u003C/",[117,986,842],{"class":203},[117,988,629],{"class":199},[117,990,992,994,997,1000,1002],{"class":119,"line":991},6,[117,993,634],{"class":199},[117,995,996],{"class":203},"topic",[117,998,999],{"class":199},">/image_raw\u003C/",[117,1001,996],{"class":203},[117,1003,629],{"class":199},[117,1005,1007,1009,1012,1014,1016,1019],{"class":119,"line":1006},7,[117,1008,634],{"class":199},[117,1010,1011],{"class":203},"camera",[117,1013,216],{"class":123},[117,1015,210],{"class":199},[117,1017,1018],{"class":134},"\"my_camera\"",[117,1020,629],{"class":199},[117,1022,1024],{"class":119,"line":1023},8,[117,1025,1026],{"class":199},"    ...\n",[117,1028,1030,1033,1035],{"class":119,"line":1029},9,[117,1031,1032],{"class":199},"  \u003C/",[117,1034,1011],{"class":203},[117,1036,629],{"class":199},[117,1038,1040,1042,1044],{"class":119,"line":1039},10,[117,1041,665],{"class":199},[117,1043,913],{"class":203},[117,1045,629],{"class":199},[14,1047,1048],{},"雷達示例：",[108,1050,1052],{"className":183,"code":1051,"language":185,"meta":113,"style":113},"\u003Csensor name=\"gpu_lidar\" type=\"gpu_lidar\">\n  \u003Ctopic>scan\u003C/topic>\n  \u003Cupdate_rate>30\u003C/update_rate>\n  \u003Calways_on>true\u003C/always_on>\n  \u003Cvisualize>true\u003C/visualize>\n  \u003Cpose relative_to=\"laser\">0 0 0 0 0 0\u003C/pose>\n  \u003Cgz_frame_id>laser\u003C/gz_frame_id>\n  \u003Clidar>\n    ...\n  \u003C/lidar>\n\u003C/sensor>\n",[24,1053,1054,1075,1088,1101,1113,1126,1144,1156,1165,1169,1177],{"__ignoreMap":113},[117,1055,1056,1058,1060,1062,1064,1067,1069,1071,1073],{"class":119,"line":120},[117,1057,200],{"class":199},[117,1059,913],{"class":203},[117,1061,216],{"class":123},[117,1063,210],{"class":199},[117,1065,1066],{"class":134},"\"gpu_lidar\"",[117,1068,640],{"class":123},[117,1070,210],{"class":199},[117,1072,1066],{"class":134},[117,1074,629],{"class":199},[117,1076,1077,1079,1081,1084,1086],{"class":119,"line":196},[117,1078,634],{"class":199},[117,1080,996],{"class":203},[117,1082,1083],{"class":199},">scan\u003C/",[117,1085,996],{"class":203},[117,1087,629],{"class":199},[117,1089,1090,1092,1094,1097,1099],{"class":119,"line":227},[117,1091,634],{"class":199},[117,1093,936],{"class":203},[117,1095,1096],{"class":199},">30\u003C/",[117,1098,936],{"class":203},[117,1100,629],{"class":199},[117,1102,1103,1105,1107,1109,1111],{"class":119,"line":958},[117,1104,634],{"class":199},[117,1106,784],{"class":203},[117,1108,765],{"class":199},[117,1110,784],{"class":203},[117,1112,629],{"class":199},[117,1114,1115,1117,1120,1122,1124],{"class":119,"line":977},[117,1116,634],{"class":199},[117,1118,1119],{"class":203},"visualize",[117,1121,765],{"class":199},[117,1123,1119],{"class":203},[117,1125,629],{"class":199},[117,1127,1128,1130,1132,1134,1136,1138,1140,1142],{"class":119,"line":991},[117,1129,634],{"class":199},[117,1131,883],{"class":203},[117,1133,886],{"class":123},[117,1135,210],{"class":199},[117,1137,891],{"class":134},[117,1139,894],{"class":199},[117,1141,883],{"class":203},[117,1143,629],{"class":199},[117,1145,1146,1148,1150,1152,1154],{"class":119,"line":1006},[117,1147,634],{"class":199},[117,1149,842],{"class":203},[117,1151,823],{"class":199},[117,1153,842],{"class":203},[117,1155,629],{"class":199},[117,1157,1158,1160,1163],{"class":119,"line":1023},[117,1159,634],{"class":199},[117,1161,1162],{"class":203},"lidar",[117,1164,629],{"class":199},[117,1166,1167],{"class":119,"line":1029},[117,1168,1026],{"class":199},[117,1170,1171,1173,1175],{"class":119,"line":1039},[117,1172,1032],{"class":199},[117,1174,1162],{"class":203},[117,1176,629],{"class":199},[117,1178,1180,1182,1184],{"class":119,"line":1179},11,[117,1181,665],{"class":199},[117,1183,913],{"class":203},[117,1185,629],{"class":199},[14,1187,1188,1189,1191,1192,1194],{},"注意：",[24,1190,870],{}," 和 ",[24,1193,842],{}," 不是同一個概念。",[60,1196,1197,1202],{},[63,1198,1199,1201],{},[24,1200,870],{},"：表示傳感器的位姿相對於哪個 link/frame，解決“傳感器放在哪裏”的問題。",[63,1203,1204,1206],{},[24,1205,842],{},"：嘗試指定傳感器消息裏的 frame id，解決“消息 header.frame_id 寫什麼”的問題。",[14,1208,1209,1210,1191,1212,35],{},"建議同時採用 ",[24,1211,870],{},[24,1213,854],{},[14,1215,1216],{},[238,1217],{"alt":113,"src":1218},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1743.webp",[14,1220,1221],{},[238,1222],{"alt":113,"src":1223},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1744.webp",[101,1225,1227],{"id":1226},"launch-文件","Launch 文件",[14,1229,1230,1231,1234,1235,155,1238,35],{},"Jazzy 使用 ",[24,1232,1233],{},"ros_gz_sim"," 啓動 Gazebo，不再使用舊的 ",[24,1236,1237],{},"ros_ign_gazebo",[24,1239,1240],{},"ros_ign",[14,1242,1243],{},"舊思路常見是：",[108,1245,1249],{"className":1246,"code":1247,"language":1248,"meta":113,"style":113},"language-python shiki shiki-themes github-light github-dark","pkg_ros_ign_gazebo = get_package_share_directory(\"ros_ign_gazebo\")\n","python",[24,1250,1251],{"__ignoreMap":113},[117,1252,1253,1256,1259,1262,1265],{"class":119,"line":120},[117,1254,1255],{"class":199},"pkg_ros_ign_gazebo ",[117,1257,210],{"class":1258},"szBVR",[117,1260,1261],{"class":199}," get_package_share_directory(",[117,1263,1264],{"class":134},"\"ros_ign_gazebo\"",[117,1266,1267],{"class":199},")\n",[14,1269,1270],{},"Jazzy 推薦：",[108,1272,1274],{"className":1246,"code":1273,"language":1248,"meta":113,"style":113},"pkg_ros_gz_sim = get_package_share_directory(\"ros_gz_sim\")\n",[24,1275,1276],{"__ignoreMap":113},[117,1277,1278,1281,1283,1285,1288],{"class":119,"line":120},[117,1279,1280],{"class":199},"pkg_ros_gz_sim ",[117,1282,210],{"class":1258},[117,1284,1261],{"class":199},[117,1286,1287],{"class":134},"\"ros_gz_sim\"",[117,1289,1267],{"class":199},[14,1291,1292],{},"啓動 Gazebo 的 launch 寫法：",[108,1294,1296],{"className":1246,"code":1295,"language":1248,"meta":113,"style":113},"gz_sim = IncludeLaunchDescription(\n    PythonLaunchDescriptionSource(\n        os.path.join(pkg_ros_gz_sim, \"launch\", \"gz_sim.launch.py\")),\n    launch_arguments={\n        \"gz_args\": \"-r \" + world_file\n    }.items(),\n)\n",[24,1297,1298,1308,1313,1330,1341,1358,1363],{"__ignoreMap":113},[117,1299,1300,1303,1305],{"class":119,"line":120},[117,1301,1302],{"class":199},"gz_sim ",[117,1304,210],{"class":1258},[117,1306,1307],{"class":199}," IncludeLaunchDescription(\n",[117,1309,1310],{"class":119,"line":196},[117,1311,1312],{"class":199},"    PythonLaunchDescriptionSource(\n",[117,1314,1315,1318,1321,1324,1327],{"class":119,"line":227},[117,1316,1317],{"class":199},"        os.path.join(pkg_ros_gz_sim, ",[117,1319,1320],{"class":134},"\"launch\"",[117,1322,1323],{"class":199},", ",[117,1325,1326],{"class":134},"\"gz_sim.launch.py\"",[117,1328,1329],{"class":199},")),\n",[117,1331,1332,1336,1338],{"class":119,"line":958},[117,1333,1335],{"class":1334},"s4XuR","    launch_arguments",[117,1337,210],{"class":1258},[117,1339,1340],{"class":199},"{\n",[117,1342,1343,1346,1349,1352,1355],{"class":119,"line":977},[117,1344,1345],{"class":134},"        \"gz_args\"",[117,1347,1348],{"class":199},": ",[117,1350,1351],{"class":134},"\"-r \"",[117,1353,1354],{"class":1258}," +",[117,1356,1357],{"class":199}," world_file\n",[117,1359,1360],{"class":119,"line":991},[117,1361,1362],{"class":199},"    }.items(),\n",[117,1364,1365],{"class":119,"line":1006},[117,1366,1267],{"class":199},[14,1368,1369],{},"注意參數名也要改：",[301,1371,1372,1382],{},[304,1373,1374],{},[307,1375,1376,1379],{},[310,1377,1378],{"align":312},"Humble / Ignition",[310,1380,1381],{"align":312},"Jazzy / Gazebo Harmonic",[321,1383,1384,1394],{},[307,1385,1386,1390],{},[326,1387,1388],{"align":312},[24,1389,386],{},[326,1391,1392],{"align":312},[24,1393,391],{},[307,1395,1396,1400],{},[326,1397,1398],{"align":312},[24,1399,401],{},[326,1401,1402],{"align":312},[24,1403,406],{},[14,1405,1406],{},"如果要 spawn URDF / robot_description，Jazzy 使用：",[108,1408,1410],{"className":1246,"code":1409,"language":1248,"meta":113,"style":113},"spawn = Node(\n    package=\"ros_gz_sim\",\n    executable=\"create\",\n    arguments=[\n        \"-name\", \"mycar\",\n        \"-topic\", \"/robot_description\",\n    ],\n    output=\"screen\",\n)\n",[24,1411,1412,1422,1434,1446,1456,1468,1480,1485,1497],{"__ignoreMap":113},[117,1413,1414,1417,1419],{"class":119,"line":120},[117,1415,1416],{"class":199},"spawn ",[117,1418,210],{"class":1258},[117,1420,1421],{"class":199}," Node(\n",[117,1423,1424,1427,1429,1431],{"class":119,"line":196},[117,1425,1426],{"class":1334},"    package",[117,1428,210],{"class":1258},[117,1430,1287],{"class":134},[117,1432,1433],{"class":199},",\n",[117,1435,1436,1439,1441,1444],{"class":119,"line":227},[117,1437,1438],{"class":1334},"    executable",[117,1440,210],{"class":1258},[117,1442,1443],{"class":134},"\"create\"",[117,1445,1433],{"class":199},[117,1447,1448,1451,1453],{"class":119,"line":958},[117,1449,1450],{"class":1334},"    arguments",[117,1452,210],{"class":1258},[117,1454,1455],{"class":199},"[\n",[117,1457,1458,1461,1463,1466],{"class":119,"line":977},[117,1459,1460],{"class":134},"        \"-name\"",[117,1462,1323],{"class":199},[117,1464,1465],{"class":134},"\"mycar\"",[117,1467,1433],{"class":199},[117,1469,1470,1473,1475,1478],{"class":119,"line":991},[117,1471,1472],{"class":134},"        \"-topic\"",[117,1474,1323],{"class":199},[117,1476,1477],{"class":134},"\"/robot_description\"",[117,1479,1433],{"class":199},[117,1481,1482],{"class":119,"line":1006},[117,1483,1484],{"class":199},"    ],\n",[117,1486,1487,1490,1492,1495],{"class":119,"line":1023},[117,1488,1489],{"class":1334},"    output",[117,1491,210],{"class":1258},[117,1493,1494],{"class":134},"\"screen\"",[117,1496,1433],{"class":199},[117,1498,1499],{"class":119,"line":1029},[117,1500,1267],{"class":199},[101,1502,1504],{"id":1503},"ros-和-gazebo-消息橋接","ROS 和 Gazebo 消息橋接",[14,1506,1230,1507,1510],{},[24,1508,1509],{},"ros_gz_bridge","：",[108,1512,1514],{"className":1246,"code":1513,"language":1248,"meta":113,"style":113},"bridge = Node(\n    package=\"ros_gz_bridge\",\n    executable=\"parameter_bridge\",\n    arguments=[\n        \"/cmd_vel@geometry_msgs/msg/Twist@gz.msgs.Twist\",\n        \"/scan@sensor_msgs/msg/LaserScan@gz.msgs.LaserScan\",\n        \"/image_raw@sensor_msgs/msg/Image@gz.msgs.Image\",\n    ],\n)\n",[24,1515,1516,1525,1536,1547,1555,1562,1569,1576,1580],{"__ignoreMap":113},[117,1517,1518,1521,1523],{"class":119,"line":120},[117,1519,1520],{"class":199},"bridge ",[117,1522,210],{"class":1258},[117,1524,1421],{"class":199},[117,1526,1527,1529,1531,1534],{"class":119,"line":196},[117,1528,1426],{"class":1334},[117,1530,210],{"class":1258},[117,1532,1533],{"class":134},"\"ros_gz_bridge\"",[117,1535,1433],{"class":199},[117,1537,1538,1540,1542,1545],{"class":119,"line":227},[117,1539,1438],{"class":1334},[117,1541,210],{"class":1258},[117,1543,1544],{"class":134},"\"parameter_bridge\"",[117,1546,1433],{"class":199},[117,1548,1549,1551,1553],{"class":119,"line":958},[117,1550,1450],{"class":1334},[117,1552,210],{"class":1258},[117,1554,1455],{"class":199},[117,1556,1557,1560],{"class":119,"line":977},[117,1558,1559],{"class":134},"        \"/cmd_vel@geometry_msgs/msg/Twist@gz.msgs.Twist\"",[117,1561,1433],{"class":199},[117,1563,1564,1567],{"class":119,"line":991},[117,1565,1566],{"class":134},"        \"/scan@sensor_msgs/msg/LaserScan@gz.msgs.LaserScan\"",[117,1568,1433],{"class":199},[117,1570,1571,1574],{"class":119,"line":1006},[117,1572,1573],{"class":134},"        \"/image_raw@sensor_msgs/msg/Image@gz.msgs.Image\"",[117,1575,1433],{"class":199},[117,1577,1578],{"class":119,"line":1023},[117,1579,1484],{"class":199},[117,1581,1582],{"class":119,"line":1029},[117,1583,1267],{"class":199},[14,1585,1586],{},"檢查點：",[60,1588,1589,1594,1600],{},[63,1590,1591,1592],{},"ROS 包名用 ",[24,1593,1509],{},[63,1595,1596,1597],{},"Gazebo 消息命名空間用 ",[24,1598,1599],{},"gz.msgs.*",[63,1601,1602,1603,1606],{},"如果 topic 沒有橋出來，先執行 ",[24,1604,1605],{},"gz topic -l"," 看 Gazebo 側真實 topic 名稱，再改 bridge 參數",[101,1608,1610],{"id":1609},"packagexml-依賴","package.xml 依賴",[14,1612,1613,1614,1191,1616,1618,1619,1621],{},"如果 launch 文件裏用了 ",[24,1615,1233],{},[24,1617,1509],{},"，",[24,1620,170],{}," 也要聲明運行依賴：",[108,1623,1625],{"className":183,"code":1624,"language":185,"meta":113,"style":113},"\u003Cexec_depend>ros_gz_sim\u003C/exec_depend>\n\u003Cexec_depend>ros_gz_bridge\u003C/exec_depend>\n\u003Cexec_depend>geometry_msgs\u003C/exec_depend>\n\u003Cexec_depend>nav_msgs\u003C/exec_depend>\n\u003Cexec_depend>tf2_msgs\u003C/exec_depend>\n\u003Cexec_depend>sensor_msgs\u003C/exec_depend>\n\u003Cexec_depend>rosgraph_msgs\u003C/exec_depend>\n",[24,1626,1627,1641,1654,1667,1680,1693,1706],{"__ignoreMap":113},[117,1628,1629,1631,1634,1637,1639],{"class":119,"line":120},[117,1630,200],{"class":199},[117,1632,1633],{"class":203},"exec_depend",[117,1635,1636],{"class":199},">ros_gz_sim\u003C/",[117,1638,1633],{"class":203},[117,1640,629],{"class":199},[117,1642,1643,1645,1647,1650,1652],{"class":119,"line":196},[117,1644,200],{"class":199},[117,1646,1633],{"class":203},[117,1648,1649],{"class":199},">ros_gz_bridge\u003C/",[117,1651,1633],{"class":203},[117,1653,629],{"class":199},[117,1655,1656,1658,1660,1663,1665],{"class":119,"line":227},[117,1657,200],{"class":199},[117,1659,1633],{"class":203},[117,1661,1662],{"class":199},">geometry_msgs\u003C/",[117,1664,1633],{"class":203},[117,1666,629],{"class":199},[117,1668,1669,1671,1673,1676,1678],{"class":119,"line":958},[117,1670,200],{"class":199},[117,1672,1633],{"class":203},[117,1674,1675],{"class":199},">nav_msgs\u003C/",[117,1677,1633],{"class":203},[117,1679,629],{"class":199},[117,1681,1682,1684,1686,1689,1691],{"class":119,"line":977},[117,1683,200],{"class":199},[117,1685,1633],{"class":203},[117,1687,1688],{"class":199},">tf2_msgs\u003C/",[117,1690,1633],{"class":203},[117,1692,629],{"class":199},[117,1694,1695,1697,1699,1702,1704],{"class":119,"line":991},[117,1696,200],{"class":199},[117,1698,1633],{"class":203},[117,1700,1701],{"class":199},">sensor_msgs\u003C/",[117,1703,1633],{"class":203},[117,1705,629],{"class":199},[117,1707,1708,1710,1712,1715,1717],{"class":119,"line":1006},[117,1709,200],{"class":199},[117,1711,1633],{"class":203},[117,1713,1714],{"class":199},">rosgraph_msgs\u003C/",[117,1716,1633],{"class":203},[117,1718,629],{"class":199},[14,1720,1721],{},"如果還啓動 RViz，也補：",[108,1723,1725],{"className":183,"code":1724,"language":185,"meta":113,"style":113},"\u003Cexec_depend>rviz2\u003C/exec_depend>\n",[24,1726,1727],{"__ignoreMap":113},[117,1728,1729,1731,1733,1736,1738],{"class":119,"line":120},[117,1730,200],{"class":199},[117,1732,1633],{"class":203},[117,1734,1735],{"class":199},">rviz2\u003C/",[117,1737,1633],{"class":203},[117,1739,629],{"class":199},[101,1741,1743],{"id":1742},"fuel-url-和模型路徑","Fuel URL 和模型路徑",[14,1745,1746],{},"舊 Fuel URL（實際上舊的鏈接也生效，被重定向到新鏈接了）：",[108,1748,1750],{"className":183,"code":1749,"language":185,"meta":113,"style":113},"\u003Curi>https://fuel.ignitionrobotics.org/1.0/openrobotics/models/Playground\u003C/uri>\n",[24,1751,1752],{"__ignoreMap":113},[117,1753,1754,1756,1759,1762,1764],{"class":119,"line":120},[117,1755,200],{"class":199},[117,1757,1758],{"class":203},"uri",[117,1760,1761],{"class":199},">https://fuel.ignitionrobotics.org/1.0/openrobotics/models/Playground\u003C/",[117,1763,1758],{"class":203},[117,1765,629],{"class":199},[14,1767,1768],{},"新 Fuel URL：",[108,1770,1772],{"className":183,"code":1771,"language":185,"meta":113,"style":113},"\u003Curi>https://fuel.gazebosim.org/1.0/openrobotics/models/Playground\u003C/uri>\n",[24,1773,1774],{"__ignoreMap":113},[117,1775,1776,1778,1780,1783,1785],{"class":119,"line":120},[117,1777,200],{"class":199},[117,1779,1758],{"class":203},[117,1781,1782],{"class":199},">https://fuel.gazebosim.org/1.0/openrobotics/models/Playground\u003C/",[117,1784,1758],{"class":203},[117,1786,629],{"class":199},[14,1788,1789],{},"本地模型路徑不要盲目改。例如：",[108,1791,1793],{"className":183,"code":1792,"language":185,"meta":113,"style":113},"\u003Curi>file:///home/xxx/ROS_WS/ign_models/bed\u003C/uri>\n",[24,1794,1795],{"__ignoreMap":113},[117,1796,1797,1799,1801,1804,1806],{"class":119,"line":120},[117,1798,200],{"class":199},[117,1800,1758],{"class":203},[117,1802,1803],{"class":199},">file:///home/xxx/ROS_WS/ign_models/bed\u003C/",[117,1805,1758],{"class":203},[117,1807,629],{"class":199},[14,1809,1810,1811,1814],{},"這裏的 ",[24,1812,1813],{},"ign_models"," 可能只是自己建的文件夾名，不是 Gazebo API 名稱。只要這個目錄真實存在，就可以保留。",[14,1816,1817,1818,1820,1821,1510],{},"如果想改成更通用的模型路徑，可以設置下面這個宏，宏從",[24,1819,415],{},"修改爲",[24,1822,420],{},[108,1824,1826],{"className":110,"code":1825,"language":112,"meta":113,"style":113},"export GZ_SIM_RESOURCE_PATH=/path/to/model_parent\n",[24,1827,1828],{"__ignoreMap":113},[117,1829,1830,1833,1836,1838],{"class":119,"line":120},[117,1831,1832],{"class":1258},"export",[117,1834,1835],{"class":199}," GZ_SIM_RESOURCE_PATH",[117,1837,210],{"class":1258},[117,1839,1840],{"class":199},"/path/to/model_parent\n",[14,1842,1843],{},"然後 SDF 中寫：",[108,1845,1847],{"className":183,"code":1846,"language":185,"meta":113,"style":113},"\u003Curi>model://bed\u003C/uri>\n",[24,1848,1849],{"__ignoreMap":113},[117,1850,1851,1853,1855,1858,1860],{"class":119,"line":120},[117,1852,200],{"class":199},[117,1854,1758],{"class":203},[117,1856,1857],{"class":199},">model://bed\u003C/",[117,1859,1758],{"class":203},[117,1861,629],{"class":199},[101,1863,1864],{"id":1864},"命令行遷移",[301,1866,1867,1877],{},[304,1868,1869],{},[307,1870,1871,1874],{},[310,1872,1873],{"align":312},"Humble / Ignition 命令",[310,1875,1876],{"align":312},"Jazzy / Gazebo Harmonic 命令",[321,1878,1879,1891,1903,1914],{},[307,1880,1881,1886],{},[326,1882,1883],{"align":312},[24,1884,1885],{},"ign gazebo world.sdf",[326,1887,1888],{"align":312},[24,1889,1890],{},"gz sim world.sdf",[307,1892,1893,1898],{},[326,1894,1895],{"align":312},[24,1896,1897],{},"ign gazebo -r world.sdf",[326,1899,1900],{"align":312},[24,1901,1902],{},"gz sim -r world.sdf",[307,1904,1905,1910],{},[326,1906,1907],{"align":312},[24,1908,1909],{},"ign topic -l",[326,1911,1912],{"align":312},[24,1913,1605],{},[307,1915,1916,1921],{},[326,1917,1918],{"align":312},[24,1919,1920],{},"ign topic -e -t /scan",[326,1922,1923],{"align":312},[24,1924,1925],{},"gz topic -e -t /scan",[14,1927,1928],{},"ROS launch 仍然用：",[108,1930,1932],{"className":110,"code":1931,"language":112,"meta":113,"style":113},"ros2 launch 包名 launch文件.py\n",[24,1933,1934],{"__ignoreMap":113},[117,1935,1936,1939,1942,1945],{"class":119,"line":120},[117,1937,1938],{"class":123},"ros2",[117,1940,1941],{"class":134}," launch",[117,1943,1944],{"class":134}," 包名",[117,1946,1947],{"class":134}," launch文件.py\n",[101,1949,1950],{"id":1950},"遷移後的驗證順序",[440,1952,1954],{"id":1953},"_1-檢查-xml-sdf-是否合法","1. 檢查 XML / SDF 是否合法",[108,1956,1958],{"className":110,"code":1957,"language":112,"meta":113,"style":113},"xmllint --noout src/demo_gazebo_sim/world/house.sdf\nxmllint --noout src/demo_gazebo_sim/world/visualize_lidar.sdf\nxmllint --noout src/mycar_description/urdf/xacro/gazebo_sensor.urdf.xacro\n",[24,1959,1960,1971,1980],{"__ignoreMap":113},[117,1961,1962,1965,1968],{"class":119,"line":120},[117,1963,1964],{"class":123},"xmllint",[117,1966,1967],{"class":127}," --noout",[117,1969,1970],{"class":134}," src/demo_gazebo_sim/world/house.sdf\n",[117,1972,1973,1975,1977],{"class":119,"line":196},[117,1974,1964],{"class":123},[117,1976,1967],{"class":127},[117,1978,1979],{"class":134}," src/demo_gazebo_sim/world/visualize_lidar.sdf\n",[117,1981,1982,1984,1986],{"class":119,"line":227},[117,1983,1964],{"class":123},[117,1985,1967],{"class":127},[117,1987,1988],{"class":134}," src/mycar_description/urdf/xacro/gazebo_sensor.urdf.xacro\n",[440,1990,1992],{"id":1991},"_2-檢查-xacro-是否能生成-urdf","2. 檢查 xacro 是否能生成 URDF",[108,1994,1996],{"className":110,"code":1995,"language":112,"meta":113,"style":113},"source /opt/ros/jazzy/setup.bash\nxacro src/mycar_description/urdf/xacro/car.urdf.xacro -o /tmp/car_check.urdf\n",[24,1997,1998,2006],{"__ignoreMap":113},[117,1999,2000,2003],{"class":119,"line":120},[117,2001,2002],{"class":127},"source",[117,2004,2005],{"class":134}," /opt/ros/jazzy/setup.bash\n",[117,2007,2008,2011,2014,2017],{"class":119,"line":196},[117,2009,2010],{"class":123},"xacro",[117,2012,2013],{"class":134}," src/mycar_description/urdf/xacro/car.urdf.xacro",[117,2015,2016],{"class":127}," -o",[117,2018,2019],{"class":134}," /tmp/car_check.urdf\n",[440,2021,2023],{"id":2022},"_3-檢查-gazebo-轉-sdf-是否還有-warning","3. 檢查 Gazebo 轉 SDF 是否還有 warning",[108,2025,2027],{"className":110,"code":2026,"language":112,"meta":113,"style":113},"gz sdf -p /tmp/car_check.urdf\n",[24,2028,2029],{"__ignoreMap":113},[117,2030,2031,2033,2036,2039],{"class":119,"line":120},[117,2032,253],{"class":123},[117,2034,2035],{"class":134}," sdf",[117,2037,2038],{"class":127}," -p",[117,2040,2019],{"class":134},[14,2042,2043,2044,2046,2047,2049],{},"如果還有 ",[24,2045,842],{}," 或 ",[24,2048,762],{}," warning，就回到傳感器部分繼續改。",[440,2051,2053],{"id":2052},"_4-構建工程","4. 構建工程",[108,2055,2057],{"className":110,"code":2056,"language":112,"meta":113,"style":113},"colcon build --symlink-install\nsource install/setup.bash\n",[24,2058,2059,2070],{"__ignoreMap":113},[117,2060,2061,2064,2067],{"class":119,"line":120},[117,2062,2063],{"class":123},"colcon",[117,2065,2066],{"class":134}," build",[117,2068,2069],{"class":127}," --symlink-install\n",[117,2071,2072,2074],{"class":119,"line":196},[117,2073,2002],{"class":127},[117,2075,2076],{"class":134}," install/setup.bash\n",[440,2078,2080],{"id":2079},"_5-啓動-gazebo","5. 啓動 Gazebo",[108,2082,2084],{"className":110,"code":2083,"language":112,"meta":113,"style":113},"ros2 launch demo_gazebo_sim gazebo_sim_world.launch.py\nros2 launch demo_gazebo_sim gazebo_sim_robot_world.launch.py\n",[24,2085,2086,2098],{"__ignoreMap":113},[117,2087,2088,2090,2092,2095],{"class":119,"line":120},[117,2089,1938],{"class":123},[117,2091,1941],{"class":134},[117,2093,2094],{"class":134}," demo_gazebo_sim",[117,2096,2097],{"class":134}," gazebo_sim_world.launch.py\n",[117,2099,2100,2102,2104,2106],{"class":119,"line":196},[117,2101,1938],{"class":123},[117,2103,1941],{"class":134},[117,2105,2094],{"class":134},[117,2107,2108],{"class":134}," gazebo_sim_robot_world.launch.py\n",[14,2110,2111],{},"也可以只跑 Gazebo server 做快速檢查：",[108,2113,2115],{"className":110,"code":2114,"language":112,"meta":113,"style":113},"gz sim -s -r -v 2 src/demo_gazebo_sim/world/house.sdf --iterations 1\n",[24,2116,2117],{"__ignoreMap":113},[117,2118,2119,2121,2124,2127,2130,2133,2136,2139,2142],{"class":119,"line":120},[117,2120,253],{"class":123},[117,2122,2123],{"class":134}," sim",[117,2125,2126],{"class":127}," -s",[117,2128,2129],{"class":127}," -r",[117,2131,2132],{"class":127}," -v",[117,2134,2135],{"class":127}," 2",[117,2137,2138],{"class":134}," src/demo_gazebo_sim/world/house.sdf",[117,2140,2141],{"class":127}," --iterations",[117,2143,2144],{"class":127}," 1\n",[101,2146,2147],{"id":2147},"常見錯誤排查",[440,2149,2150],{"id":2150},"插件找不到",[14,2152,2153],{},"檢查是否還寫着：",[108,2155,2158],{"className":2156,"code":2157,"language":799,"meta":113},[797],"ignition-gazebo-*\nlibignition-gazebo-*.so\nignition::gazebo::systems::*\n",[24,2159,2157],{"__ignoreMap":113},[14,2161,2162],{},"Jazzy 應該改成：",[108,2164,2167],{"className":2165,"code":2166,"language":799,"meta":113},[797],"gz-sim-*-system\ngz::sim::systems::*\n",[24,2168,2166],{"__ignoreMap":113},[440,2170,2172],{"id":2171},"gui-標籤-warning","GUI 標籤 warning",[14,2174,2175],{},"檢查是否還有：",[108,2177,2179],{"className":183,"code":2178,"language":185,"meta":113,"style":113},"\u003Cignition-gui>\n",[24,2180,2181],{"__ignoreMap":113},[117,2182,2183,2185,2187],{"class":119,"line":120},[117,2184,200],{"class":199},[117,2186,626],{"class":203},[117,2188,629],{"class":199},[14,2190,2162],{},[108,2192,2194],{"className":183,"code":2193,"language":185,"meta":113,"style":113},"\u003Cgz-gui>\n",[24,2195,2196],{"__ignoreMap":113},[117,2197,2198,2200,2202],{"class":119,"line":120},[117,2199,200],{"class":199},[117,2201,684],{"class":203},[117,2203,629],{"class":199},[440,2205,2207],{"id":2206},"傳感器-warning","傳感器 warning",[14,2209,2175],{},[108,2211,2213],{"className":183,"code":2212,"language":185,"meta":113,"style":113},"\u003CalwaysOn>\n\u003Cignition_frame_id>\n",[24,2214,2215,2223],{"__ignoreMap":113},[117,2216,2217,2219,2221],{"class":119,"line":120},[117,2218,200],{"class":199},[117,2220,762],{"class":203},[117,2222,629],{"class":199},[117,2224,2225,2227,2229],{"class":119,"line":196},[117,2226,200],{"class":199},[117,2228,820],{"class":203},[117,2230,629],{"class":199},[14,2232,2233],{},"建議改成：",[108,2235,2237],{"className":183,"code":2236,"language":185,"meta":113,"style":113},"\u003Calways_on>true\u003C/always_on>\n\u003Cpose relative_to=\"laser\">0 0 0 0 0 0\u003C/pose>\n\u003Cgz_frame_id>laser\u003C/gz_frame_id>\n",[24,2238,2239,2251,2269],{"__ignoreMap":113},[117,2240,2241,2243,2245,2247,2249],{"class":119,"line":120},[117,2242,200],{"class":199},[117,2244,784],{"class":203},[117,2246,765],{"class":199},[117,2248,784],{"class":203},[117,2250,629],{"class":199},[117,2252,2253,2255,2257,2259,2261,2263,2265,2267],{"class":119,"line":196},[117,2254,200],{"class":199},[117,2256,883],{"class":203},[117,2258,886],{"class":123},[117,2260,210],{"class":199},[117,2262,891],{"class":134},[117,2264,894],{"class":199},[117,2266,883],{"class":203},[117,2268,629],{"class":199},[117,2270,2271,2273,2275,2277,2279],{"class":119,"line":227},[117,2272,200],{"class":199},[117,2274,842],{"class":203},[117,2276,823],{"class":199},[117,2278,842],{"class":203},[117,2280,629],{"class":199},[14,2282,2283],{},"或：",[108,2285,2287],{"className":183,"code":2286,"language":185,"meta":113,"style":113},"\u003Cpose relative_to=\"camera\">0 0 0 0 0 0\u003C/pose>\n\u003Cgz_frame_id>camera\u003C/gz_frame_id>\n",[24,2288,2289,2307],{"__ignoreMap":113},[117,2290,2291,2293,2295,2297,2299,2301,2303,2305],{"class":119,"line":120},[117,2292,200],{"class":199},[117,2294,883],{"class":203},[117,2296,886],{"class":123},[117,2298,210],{"class":199},[117,2300,927],{"class":134},[117,2302,894],{"class":199},[117,2304,883],{"class":203},[117,2306,629],{"class":199},[117,2308,2309,2311,2313,2315,2317],{"class":119,"line":196},[117,2310,200],{"class":199},[117,2312,842],{"class":203},[117,2314,984],{"class":199},[117,2316,842],{"class":203},[117,2318,629],{"class":199},[440,2320,2322],{"id":2321},"robot_state_publisher-的-kdl-根-link-慣性警告","robot_state_publisher 的 KDL 根 link 慣性警告",[14,2324,2325],{},"如果日誌出現：",[108,2327,2330],{"className":2328,"code":2329,"language":799,"meta":113},[797],"The root link base_footprint has an inertia specified in the URDF, but KDL does not support a root link with an inertia.\n",[24,2331,2329],{"__ignoreMap":113},[14,2333,2334,2335,2338],{},"說明 URDF 根 link 帶了 ",[24,2336,2337],{},"\u003Cinertial>","，KDL 不支持。",[440,2340,2342],{"id":2341},"改了-xacro-但日誌仍顯示舊內容","改了 xacro 但日誌仍顯示舊內容",[14,2344,2345],{},"先確認舊 launch 已經停止：",[108,2347,2349],{"className":110,"code":2348,"language":112,"meta":113,"style":113},"pgrep -af \"gazebo|gz sim|robot_state_publisher|parameter_bridge\"\n",[24,2350,2351],{"__ignoreMap":113},[117,2352,2353,2356,2359],{"class":119,"line":120},[117,2354,2355],{"class":123},"pgrep",[117,2357,2358],{"class":127}," -af",[117,2360,2361],{"class":134}," \"gazebo|gz sim|robot_state_publisher|parameter_bridge\"\n",[14,2363,2364,2365,2368,2369,2372,2373,2376],{},"如果舊的 ",[24,2366,2367],{},"robot_state_publisher"," 還在，同一個 ROS graph 裏 ",[24,2370,2371],{},"ros_gz_sim create"," 可能會從舊的 ",[24,2374,2375],{},"/robot_description"," 拿模型。",[14,2378,2379],{},"停止舊進程後重新構建、source、啓動：",[108,2381,2383],{"className":110,"code":2382,"language":112,"meta":113,"style":113},"colcon build --symlink-install\nsource install/setup.bash\nros2 launch demo_gazebo_sim gazebo_sim_robot_world.launch.py\n",[24,2384,2385,2393,2399],{"__ignoreMap":113},[117,2386,2387,2389,2391],{"class":119,"line":120},[117,2388,2063],{"class":123},[117,2390,2066],{"class":134},[117,2392,2069],{"class":127},[117,2394,2395,2397],{"class":119,"line":196},[117,2396,2002],{"class":127},[117,2398,2076],{"class":134},[117,2400,2401,2403,2405,2407],{"class":119,"line":227},[117,2402,1938],{"class":123},[117,2404,1941],{"class":134},[117,2406,2094],{"class":134},[117,2408,2108],{"class":134},[440,2410,2412],{"id":2411},"qstandardpaths-libegl-warning","QStandardPaths / libEGL warning",[14,2414,2415],{},"如果日誌裏只剩：",[108,2417,2420],{"className":2418,"code":2419,"language":799,"meta":113},[797],"QStandardPaths: runtime directory '/run/user/1000' is not owned by UID 0\nlibEGL warning: egl: failed to create dri2 screen\n",[24,2421,2419],{"__ignoreMap":113},[14,2423,2424],{},"這通常不是 Gazebo 遷移錯誤，而是用 root 啓動 GUI 或顯卡渲染環境導致的 warning。建議用普通用戶運行 ROS/Gazebo，或者檢查顯卡驅動、Mesa、EGL 環境。",[101,2426,2427],{"id":2427},"最後再掃一遍舊引用",[14,2429,2430],{},"功能性舊引用檢查：",[108,2432,2434],{"className":110,"code":2433,"language":112,"meta":113,"style":113},"rg -n \"filename=['\\\"](lib)?ignition|name=['\\\"]ignition::gazebo|\u003Cignition-gui>|\u003C/ignition-gui>|\u003Cignition_frame_id>|\u003C/ignition_frame_id>|\u003Cgz_frame_id>|\u003C/gz_frame_id>|fuel\\\\.ignitionrobotics\\\\.org|ros_ign|ign_args|ign_version|alwaysOn\" src\n",[24,2435,2436],{"__ignoreMap":113},[117,2437,2438,2440,2442,2445,2448,2451,2453,2456,2459,2462,2464,2467],{"class":119,"line":120},[117,2439,124],{"class":123},[117,2441,128],{"class":127},[117,2443,2444],{"class":134}," \"filename=['",[117,2446,2447],{"class":127},"\\\"",[117,2449,2450],{"class":134},"](lib)?ignition|name=['",[117,2452,2447],{"class":127},[117,2454,2455],{"class":134},"]ignition::gazebo|\u003Cignition-gui>|\u003C/ignition-gui>|\u003Cignition_frame_id>|\u003C/ignition_frame_id>|\u003Cgz_frame_id>|\u003C/gz_frame_id>|fuel",[117,2457,2458],{"class":127},"\\\\",[117,2460,2461],{"class":134},".ignitionrobotics",[117,2463,2458],{"class":127},[117,2465,2466],{"class":134},".org|ros_ign|ign_args|ign_version|alwaysOn\"",[117,2468,138],{"class":134},[14,2470,2471],{},"官方文檔提醒的誤替換檢查：",[108,2473,2475],{"className":110,"code":2474,"language":112,"meta":113,"style":113},"rg -n -i \"gz-gazebo|gzition|an gz\" src\n",[24,2476,2477],{"__ignoreMap":113},[117,2478,2479,2481,2483,2485,2488],{"class":119,"line":120},[117,2480,124],{"class":123},[117,2482,128],{"class":127},[117,2484,131],{"class":127},[117,2486,2487],{"class":134}," \"gz-gazebo|gzition|an gz\"",[117,2489,138],{"class":134},[14,2491,2492],{},"如果只在中文註釋或教程裏搜到舊寫法，而功能代碼裏沒有，一般就遷移乾淨了。",[2494,2495,2496],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}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 .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 .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":113,"searchDepth":196,"depth":196,"links":2498},[2499],{"id":12,"depth":227,"text":5},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","11.4",11040000,"2023-12-30","wiki/2023-12-30-ros2-tutorial","zh-hant:2023-12-30-ros2-tutorial","/zh-hant/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim",false,true,null,"zh-Hant","zh-hant",{},{"title":5,"description":113},"/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","t9q4NfhS9gFy7Mytrq31jppaz0gDacdJnnHJgUBimhw",[2521,2527,2533,2539,2545,2551,2552,2558,2564,2570,2576,2582,2588,2594,2600,2606,2612,2618,2623,2629,2634,2640,2646,2652,2658,2664,2670,2676,2682,2688,2694,2700,2706,2712,2718,2724,2730,2736,2742,2748,2754,2760,2766,2772,2778,2784,2790,2796,2802,2808,2814,2820,2826,2832,2838,2844,2850,2856,2862,2868],{"path":2522,"stem":2523,"title":2524,"date":2503,"chapter":2525,"chapterSort":2526,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","ROS2介紹","1",1000000,{"path":2528,"stem":2529,"title":2530,"date":2503,"chapter":2531,"chapterSort":2532,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2仿真平臺","10",10000000,{"path":2534,"stem":2535,"title":2536,"date":2503,"chapter":2537,"chapterSort":2538,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":2540,"stem":2541,"title":2542,"date":2503,"chapter":2543,"chapterSort":2544,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":2546,"stem":2547,"title":2548,"date":2503,"chapter":2549,"chapterSort":2550,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":2500,"stem":2518,"title":5,"date":2503,"chapter":2501,"chapterSort":2502,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},{"path":2553,"stem":2554,"title":2555,"date":2503,"chapter":2556,"chapterSort":2557,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gezebo仿真平臺","11",11000000,{"path":2559,"stem":2560,"title":2561,"date":2503,"chapter":2562,"chapterSort":2563,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-1-humble-ban-ben","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-1-Humble版本","Humble導航仿真","12.1",12010000,{"path":2565,"stem":2566,"title":2567,"date":2503,"chapter":2568,"chapterSort":2569,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-2-jazzy-ban-ben","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-2-Jazzy版本","Jazzy導航仿真","12.2",12020000,{"path":2571,"stem":2572,"title":2573,"date":2503,"chapter":2574,"chapterSort":2575,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-3-humble2jazzy","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-3-Humble2Jazzy","Humble與Jazzy導航的差異","12.3",12030000,{"path":2577,"stem":2578,"title":2579,"date":2503,"chapter":2580,"chapterSort":2581,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","機器人導航Navigation2(仿真篇)","12",12000000,{"path":2583,"stem":2584,"title":2585,"date":2503,"chapter":2586,"chapterSort":2587,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-1-1-boost-aiso","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-1-1-Boost.Aiso","Boost.Asio庫","13.1.1",13010100,{"path":2589,"stem":2590,"title":2591,"date":2503,"chapter":2592,"chapterSort":2593,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2-serial-driver","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-1-2-ros2_serial_driver","ROS2 Serial Driver庫","13.1.2",13010200,{"path":2595,"stem":2596,"title":2597,"date":2503,"chapter":2598,"chapterSort":2599,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-1-chuan-kou-tong-xin","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-1-串口通信","UART串口通信","13.1",13010000,{"path":2601,"stem":2602,"title":2603,"date":2503,"chapter":2604,"chapterSort":2605,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-2-1-socketcan","SocketCAN","13.2.1",13020100,{"path":2607,"stem":2608,"title":2609,"date":2503,"chapter":2610,"chapterSort":2611,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2-socketcan","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-2-2-ros2_socketcan","ROS2_SocketCAN","13.2.2",13020200,{"path":2613,"stem":2614,"title":2615,"date":2503,"chapter":2616,"chapterSort":2617,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-2-can-tong-xin","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-2-CAN通信","CAN通信","13.2",13020000,{"path":2619,"stem":2620,"title":2585,"date":2503,"chapter":2621,"chapterSort":2622,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-3-1-boost-aiso","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-3-1-Boost.Aiso","13.3.1",13030100,{"path":2624,"stem":2625,"title":2626,"date":2503,"chapter":2627,"chapterSort":2628,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-3-tcp-tong-xin","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-3-TCP通信","TCP通信","13.3",13030000,{"path":2630,"stem":2631,"title":2585,"date":2503,"chapter":2632,"chapterSort":2633,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-4-1-boost-aiso","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-4-1-Boost.Aiso","13.4.1",13040100,{"path":2635,"stem":2636,"title":2637,"date":2503,"chapter":2638,"chapterSort":2639,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-4-udp-tong-xin","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-4-UDP通信","UDP通信","13.4",13040000,{"path":2641,"stem":2642,"title":2643,"date":2503,"chapter":2644,"chapterSort":2645,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-linux-ying-jian-tong-xin","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch13-Linux硬件通信","Linux硬件通信","13",13000000,{"path":2647,"stem":2648,"title":2649,"date":2503,"chapter":2650,"chapterSort":2651,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-1-ji-qi-ren-zu-cheng","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-1-机器人组成","機器人組成","14.1",14010000,{"path":2653,"stem":2654,"title":2655,"date":2503,"chapter":2656,"chapterSort":2657,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-2-1-yuan-cheng-kai-fa-ssh","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-2-1-远程开发SSH","遠程開發SSH","14.2.1",14020100,{"path":2659,"stem":2660,"title":2661,"date":2503,"chapter":2662,"chapterSort":2663,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-2-2-yuan-cheng-fang-wen-zhuo-mian","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-2-2-远程访问桌面","遠程訪問桌面","14.2.2",14020200,{"path":2665,"stem":2666,"title":2667,"date":2503,"chapter":2668,"chapterSort":2669,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-2-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-2-工控机之远程开发环境","工控機之遠程開發環境","14.2",14020000,{"path":2671,"stem":2672,"title":2673,"date":2503,"chapter":2674,"chapterSort":2675,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-3-gong-kong-ji-zhi-wai-jie-usb-she-bei","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-3-工控机之外接USB设备","工控機之外接USB設備","14.3",14030000,{"path":2677,"stem":2678,"title":2679,"date":2503,"chapter":2680,"chapterSort":2681,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-4-fen-bu-shi-da-jian","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-4-分布式搭建","分佈式搭建","14.4",14040000,{"path":2683,"stem":2684,"title":2685,"date":2503,"chapter":2686,"chapterSort":2687,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-5-you-hua-ri-zhi","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-5-优化日志","優化日誌","14.5",14050000,{"path":2689,"stem":2690,"title":2691,"date":2503,"chapter":2692,"chapterSort":2693,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-1-li-cheng-ji-odom","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-1-里程计Odom","里程計Odom","14.6.1",14060100,{"path":2695,"stem":2696,"title":2697,"date":2503,"chapter":2698,"chapterSort":2699,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-2-guan-xing-ji-imu","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-2-惯性计IMU","慣性計IMU","14.6.2",14060200,{"path":2701,"stem":2702,"title":2703,"date":2503,"chapter":2704,"chapterSort":2705,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-3-ji-guang-lei-da-lidar","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-3-激光雷达LiDAR","激光雷達LiDAR","14.6.3",14060300,{"path":2707,"stem":2708,"title":2709,"date":2503,"chapter":2710,"chapterSort":2711,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-4-xiang-ji-camera","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-4-相机Camera","相機Camera","14.6.4",14060400,{"path":2713,"stem":2714,"title":2715,"date":2503,"chapter":2716,"chapterSort":2717,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-5-quan-qiu-ding-wei-gnss","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-5-全球定位GNSS","全球定位GNSS","14.6.5",14060500,{"path":2719,"stem":2720,"title":2721,"date":2503,"chapter":2722,"chapterSort":2723,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-6-shou-bing-joy","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-6-手柄joy","手柄JOY","14.6.6",14060600,{"path":2725,"stem":2726,"title":2727,"date":2503,"chapter":2728,"chapterSort":2729,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-7-jian-pan-kong-zhi-jie-dian","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-7-键盘控制节点","鍵盤控制節點","14.6.7",14060700,{"path":2731,"stem":2732,"title":2733,"date":2503,"chapter":2734,"chapterSort":2735,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-ying-jian-ping-tai","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-6-硬件平台","硬件平臺","14.6",14060000,{"path":2737,"stem":2738,"title":2739,"date":2503,"chapter":2740,"chapterSort":2741,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-7-zuo-biao-xi-yu-hua-ti-guan-xi","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-7-坐标系与话题关系","座標系與話題關係","14.7",14070000,{"path":2743,"stem":2744,"title":2745,"date":2503,"chapter":2746,"chapterSort":2747,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-lun-shi-li-cheng-ji-biao-ding","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-1-轮式里程计标定","輪式里程計標定","14.8.1.1",14080101,{"path":2749,"stem":2750,"title":2751,"date":2503,"chapter":2752,"chapterSort":2753,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-lun-shi-li-cheng-ji-yu-imu-rong-he","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-2-轮式里程计与IMU融合","輪式里程計與IMU融合","14.8.1.2",14080102,{"path":2755,"stem":2756,"title":2757,"date":2503,"chapter":2758,"chapterSort":2759,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-1-轮式里程计标定与融合","輪式里程計標定與融合","14.8.1",14080100,{"path":2761,"stem":2762,"title":2763,"date":2503,"chapter":2764,"chapterSort":2765,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-2-ji-guang-lei-da-gong-ju","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-2-激光雷达工具","激光雷達工具","14.8.2",14080200,{"path":2767,"stem":2768,"title":2769,"date":2503,"chapter":2770,"chapterSort":2771,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-3-xiang-ji-shi-yong-jin-jie","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-3-相机使用进阶","相機使用進階","14.8.3",14080300,{"path":2773,"stem":2774,"title":2775,"date":2503,"chapter":2776,"chapterSort":2777,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-ying-jian-ping-tai-jin-jie","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-8-硬件平台进阶","硬件平臺進階","14.8",14080000,{"path":2779,"stem":2780,"title":2781,"date":2503,"chapter":2782,"chapterSort":2783,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","機器人硬件","14",14000000,{"path":2785,"stem":2786,"title":2787,"date":2503,"chapter":2788,"chapterSort":2789,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":2791,"stem":2792,"title":2793,"date":2503,"chapter":2794,"chapterSort":2795,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","Moveit2工業機器人機械臂","16",16000000,{"path":2797,"stem":2798,"title":2799,"date":2503,"chapter":2800,"chapterSort":2801,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","機器人導航Navigation2(實體篇)","17",17000000,{"path":2803,"stem":2804,"title":2805,"date":2503,"chapter":2806,"chapterSort":2807,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch18-microros","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":2809,"stem":2810,"title":2811,"date":2503,"chapter":2812,"chapterSort":2813,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots仿真平臺","19",19000000,{"path":2815,"stem":2816,"title":2817,"date":2503,"chapter":2818,"chapterSort":2819,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch2-入门操作","入門操作","2",2000000,{"path":2821,"stem":2822,"title":2823,"date":2503,"chapter":2824,"chapterSort":2825,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch20-opencv","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":2827,"stem":2828,"title":2829,"date":2503,"chapter":2830,"chapterSort":2831,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","工作空間與功能包","3",3000000,{"path":2833,"stem":2834,"title":2835,"date":2503,"chapter":2836,"chapterSort":2837,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch4-四大通信","四大通信","4",4000000,{"path":2839,"stem":2840,"title":2841,"date":2503,"chapter":2842,"chapterSort":2843,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2其他通信機制","5",5000000,{"path":2845,"stem":2846,"title":2847,"date":2503,"chapter":2848,"chapterSort":2849,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch6-launch","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch","6",6000000,{"path":2851,"stem":2852,"title":2853,"date":2503,"chapter":2854,"chapterSort":2855,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","回溯rosbag2","7",7000000,{"path":2857,"stem":2858,"title":2859,"date":2503,"chapter":2860,"chapterSort":2861,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","座標變換TF","8",8000000,{"path":2863,"stem":2864,"title":2865,"date":2503,"chapter":2866,"chapterSort":2867,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2510},"/zh-hant/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","可視化平臺RVIZ2與URDF建模語言","9",9000000,{"path":2506,"stem":2869,"title":2870,"date":2503,"chapter":2512,"chapterSort":2871,"docKey":2505,"docRoot":2506,"docTitle":2507,"isWikiDoc":2511,"isWikiIndex":2511},"_i18n/zh-hant/wiki/2023-12-30-ros2-tutorial/index","ROS2機器人操作系統教程",0,{"variants":2873},[2874,2877,2878,2881,2884],{"path":2875,"localeSlug":2876,"i18nKey":2509},"/en-us/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","en-us",{"path":2500,"localeSlug":2514,"i18nKey":2509},{"path":2879,"localeSlug":2880,"i18nKey":2509},"/zh-hk/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","zh-hk",{"path":2882,"localeSlug":2883,"i18nKey":2509},"/zh-tw/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","zh-tw",{"path":2885,"localeSlug":2886,"i18nKey":2509},"/zh-cn/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","zh-cn",[2875,2517,2500,2517,2879,2517,2882,2517,2885,2517],1780671831373]