[{"data":1,"prerenderedAt":2829},["ShallowReactive",2],{"wiki-page-\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim":3,"wiki-doc-items-\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim":2519,"language-switcher-data-\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim":2813,"wiki-i18n-paths-\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim":2828},{"id":4,"title":5,"body":6,"canonicalPath":2500,"chapterDepth":120,"chapterOrder":2501,"date":2502,"description":113,"docI18nKey":2503,"docKey":2504,"docRoot":2505,"docTitle":2506,"extension":2507,"i18nKey":2508,"isBlogPost":2509,"isWikiDoc":2510,"isWikiIndex":2509,"layout":2511,"legacyPath":2511,"locale":2512,"localeSlug":2513,"meta":2514,"navigation":2510,"path":2500,"seo":2515,"sourcePath":2516,"sourceStem":2508,"stem":2517,"wikiDepth":120,"__hash__":2518},"content\u002F_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-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 \u002F 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 \u002F 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 \u002F 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:\u002F\u002Fgazebosim.org\u002Fdocs\u002Fharmonic\u002Fmigration_from_ignition\u002F",[71],"nofollow",[63,73,74,75],{},"Gazebo Fuel 模型引用示例：",[67,76,77],{"href":77,"rel":78},"https:\u002F\u002Fgazebosim.org\u002Fdocs\u002Fharmonic\u002Ffuel_insert\u002F",[71],[63,80,81,82],{},"Gazebo Sensors 示例：",[67,83,84],{"href":84,"rel":85},"https:\u002F\u002Fgazebosim.org\u002Fdocs\u002Fharmonic\u002Fsensors\u002F",[71],[63,87,88,89],{},"ROS2 Gazebo Classic 遷移到新 Gazebo 的說明：",[67,90,91],{"href":91,"rel":92},"https:\u002F\u002Fgazebosim.org\u002Fdocs\u002Fharmonic\u002Fmigrating_gazebo_classic_ros2_packages\u002F",[71],[63,94,95,96],{},"SDFormat Sensor 規範：",[67,97,98],{"href":98,"rel":99},"https:\u002F\u002Fsdformat.org\u002Fspec",[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"," \u002F ",[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\"\u002F>\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},"\u002F>\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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1741.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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1742.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 \u002F Ignition 寫法",[310,315,316],{"align":312},"Jazzy \u002F 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},"模型\u002F資源路徑",[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\"\u002F>\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 \u002F 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\"\u002F>\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\u002Fproperty>\n\u003C\u002Fignition-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\u002F",[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\u002F",[117,667,626],{"class":203},[117,669,629],{"class":199},[14,671,672],{},"Jazzy \u002F 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\u002Fproperty>\n\u003C\u002Fgz-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\u002Fignition-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\u002Fignition-gui>\"",[117,737,138],{"class":134},[101,739,741],{"id":740},"urdf-xacro-裡的-gazebo-傳感器","URDF \u002F 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\u002FalwaysOn>\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\u002F",[117,767,762],{"class":203},[117,769,629],{"class":199},[14,771,772],{},"Jazzy \u002F SDF 標準寫法：",[108,774,776],{"className":183,"code":775,"language":185,"meta":113,"style":113},"\u003Calways_on>true\u003C\u002Falways_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 \u002F 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\u002Fignition_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\u002F",[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\u002Fgz_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 \u002F 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\u002Fpose>\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\u002F",[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\u002Fupdate_rate>\n  \u003Calways_on>true\u003C\u002Falways_on>\n  \u003Cpose relative_to=\"camera\">0 0 0 0 0 0\u003C\u002Fpose>\n  \u003Cgz_frame_id>camera\u003C\u002Fgz_frame_id>\n  \u003Ctopic>\u002Fimage_raw\u003C\u002Ftopic>\n  \u003Ccamera name=\"my_camera\">\n    ...\n  \u003C\u002Fcamera>\n\u003C\u002Fsensor>\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\u002F",[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\u002F",[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},">\u002Fimage_raw\u003C\u002F",[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\u002F",[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\u002Ftopic>\n  \u003Cupdate_rate>30\u003C\u002Fupdate_rate>\n  \u003Calways_on>true\u003C\u002Falways_on>\n  \u003Cvisualize>true\u003C\u002Fvisualize>\n  \u003Cpose relative_to=\"laser\">0 0 0 0 0 0\u003C\u002Fpose>\n  \u003Cgz_frame_id>laser\u003C\u002Fgz_frame_id>\n  \u003Clidar>\n    ...\n  \u003C\u002Flidar>\n\u003C\u002Fsensor>\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\u002F",[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\u002F",[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\u002Fframe，解決“傳感器放在哪裡”的問題。",[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:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1743.webp",[14,1220,1221],{},[238,1222],{"alt":113,"src":1223},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1744.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 \u002F Ignition",[310,1380,1381],{"align":312},"Jazzy \u002F 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 \u002F 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\", \"\u002Frobot_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},"\"\u002Frobot_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        \"\u002Fcmd_vel@geometry_msgs\u002Fmsg\u002FTwist@gz.msgs.Twist\",\n        \"\u002Fscan@sensor_msgs\u002Fmsg\u002FLaserScan@gz.msgs.LaserScan\",\n        \"\u002Fimage_raw@sensor_msgs\u002Fmsg\u002FImage@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},"        \"\u002Fcmd_vel@geometry_msgs\u002Fmsg\u002FTwist@gz.msgs.Twist\"",[117,1561,1433],{"class":199},[117,1563,1564,1567],{"class":119,"line":991},[117,1565,1566],{"class":134},"        \"\u002Fscan@sensor_msgs\u002Fmsg\u002FLaserScan@gz.msgs.LaserScan\"",[117,1568,1433],{"class":199},[117,1570,1571,1574],{"class":119,"line":1006},[117,1572,1573],{"class":134},"        \"\u002Fimage_raw@sensor_msgs\u002Fmsg\u002FImage@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\u002Fexec_depend>\n\u003Cexec_depend>ros_gz_bridge\u003C\u002Fexec_depend>\n\u003Cexec_depend>geometry_msgs\u003C\u002Fexec_depend>\n\u003Cexec_depend>nav_msgs\u003C\u002Fexec_depend>\n\u003Cexec_depend>tf2_msgs\u003C\u002Fexec_depend>\n\u003Cexec_depend>sensor_msgs\u003C\u002Fexec_depend>\n\u003Cexec_depend>rosgraph_msgs\u003C\u002Fexec_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\u002F",[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\u002F",[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\u002F",[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\u002F",[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\u002F",[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\u002F",[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\u002F",[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\u002Fexec_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\u002F",[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:\u002F\u002Ffuel.ignitionrobotics.org\u002F1.0\u002Fopenrobotics\u002Fmodels\u002FPlayground\u003C\u002Furi>\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:\u002F\u002Ffuel.ignitionrobotics.org\u002F1.0\u002Fopenrobotics\u002Fmodels\u002FPlayground\u003C\u002F",[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:\u002F\u002Ffuel.gazebosim.org\u002F1.0\u002Fopenrobotics\u002Fmodels\u002FPlayground\u003C\u002Furi>\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:\u002F\u002Ffuel.gazebosim.org\u002F1.0\u002Fopenrobotics\u002Fmodels\u002FPlayground\u003C\u002F",[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:\u002F\u002F\u002Fhome\u002Fxxx\u002FROS_WS\u002Fign_models\u002Fbed\u003C\u002Furi>\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:\u002F\u002F\u002Fhome\u002Fxxx\u002FROS_WS\u002Fign_models\u002Fbed\u003C\u002F",[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=\u002Fpath\u002Fto\u002Fmodel_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},"\u002Fpath\u002Fto\u002Fmodel_parent\n",[14,1842,1843],{},"然後 SDF 中寫：",[108,1845,1847],{"className":183,"code":1846,"language":185,"meta":113,"style":113},"\u003Curi>model:\u002F\u002Fbed\u003C\u002Furi>\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:\u002F\u002Fbed\u003C\u002F",[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 \u002F Ignition 命令",[310,1875,1876],{"align":312},"Jazzy \u002F 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 \u002Fscan",[326,1922,1923],{"align":312},[24,1924,1925],{},"gz topic -e -t \u002Fscan",[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 \u002F SDF 是否合法",[108,1956,1958],{"className":110,"code":1957,"language":112,"meta":113,"style":113},"xmllint --noout src\u002Fdemo_gazebo_sim\u002Fworld\u002Fhouse.sdf\nxmllint --noout src\u002Fdemo_gazebo_sim\u002Fworld\u002Fvisualize_lidar.sdf\nxmllint --noout src\u002Fmycar_description\u002Furdf\u002Fxacro\u002Fgazebo_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\u002Fdemo_gazebo_sim\u002Fworld\u002Fhouse.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\u002Fdemo_gazebo_sim\u002Fworld\u002Fvisualize_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\u002Fmycar_description\u002Furdf\u002Fxacro\u002Fgazebo_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 \u002Fopt\u002Fros\u002Fjazzy\u002Fsetup.bash\nxacro src\u002Fmycar_description\u002Furdf\u002Fxacro\u002Fcar.urdf.xacro -o \u002Ftmp\u002Fcar_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}," \u002Fopt\u002Fros\u002Fjazzy\u002Fsetup.bash\n",[117,2007,2008,2011,2014,2017],{"class":119,"line":196},[117,2009,2010],{"class":123},"xacro",[117,2012,2013],{"class":134}," src\u002Fmycar_description\u002Furdf\u002Fxacro\u002Fcar.urdf.xacro",[117,2015,2016],{"class":127}," -o",[117,2018,2019],{"class":134}," \u002Ftmp\u002Fcar_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 \u002Ftmp\u002Fcar_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\u002Fsetup.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\u002Fsetup.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\u002Fdemo_gazebo_sim\u002Fworld\u002Fhouse.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\u002Fdemo_gazebo_sim\u002Fworld\u002Fhouse.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\u002Falways_on>\n\u003Cpose relative_to=\"laser\">0 0 0 0 0 0\u003C\u002Fpose>\n\u003Cgz_frame_id>laser\u003C\u002Fgz_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\u002Fpose>\n\u003Cgz_frame_id>camera\u003C\u002Fgz_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],{},"\u002Frobot_description"," 拿模型。",[14,2378,2379],{},"停止舊進程後重新構建、source、啟動：",[108,2381,2383],{"className":110,"code":2382,"language":112,"meta":113,"style":113},"colcon build --symlink-install\nsource install\u002Fsetup.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 \u002F libEGL warning",[14,2414,2415],{},"如果日誌裡只剩：",[108,2417,2420],{"className":2418,"code":2419,"language":799,"meta":113},[797],"QStandardPaths: runtime directory '\u002Frun\u002Fuser\u002F1000' 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\u002FGazebo，或者檢查顯卡驅動、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\u002Fignition-gui>|\u003Cignition_frame_id>|\u003C\u002Fignition_frame_id>|\u003Cgz_frame_id>|\u003C\u002Fgz_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\u002Fignition-gui>|\u003Cignition_frame_id>|\u003C\u002Fignition_frame_id>|\u003Cgz_frame_id>|\u003C\u002Fgz_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},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","1100-0400","2023-12-30","wiki\u002F2023-12-30-ros2-tutorial","zh-tw:2023-12-30-ros2-tutorial","\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial","Ros2 Tutorial","md","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-Igngz2gzsim",false,true,null,"zh-TW","zh-tw",{},{"title":5,"description":113},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-Igngz2gzsim","NJHzwmTkSKqc4-ObEOEr6qzCc8NOHZv8fXWraUVv57o",[2520,2526,2531,2536,2541,2546,2551,2556,2561,2566,2571,2576,2581,2586,2587,2592,2597,2602,2607,2612,2617,2622,2627,2632,2637,2642,2646,2651,2655,2660,2665,2670,2675,2680,2685,2690,2695,2700,2705,2710,2715,2720,2725,2730,2735,2740,2745,2750,2755,2760,2765,2770,2775,2780,2785,2790,2795,2800,2805,2810],{"path":2521,"stem":2522,"title":2523,"date":2502,"chapterOrder":2524,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍","ROS2介紹","0100",0,{"path":2527,"stem":2528,"title":2529,"date":2502,"chapterOrder":2530,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作","入門操作","0200",{"path":2532,"stem":2533,"title":2534,"date":2502,"chapterOrder":2535,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0300-gong-zuo-kong-jian-yu-gong-neng-bao","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0300-工作空间与功能包","工作空間與功能包","0300",{"path":2537,"stem":2538,"title":2539,"date":2502,"chapterOrder":2540,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信","四大通信","0400",{"path":2542,"stem":2543,"title":2544,"date":2502,"chapterOrder":2545,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0500-ros2-qi-ta-tong-xin-ji-zhi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0500-ROS2其他通信机制","ROS2其他通信機制","0500",{"path":2547,"stem":2548,"title":2549,"date":2502,"chapterOrder":2550,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-launch","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-Launch","Launch","0600",{"path":2552,"stem":2553,"title":2554,"date":2502,"chapterOrder":2555,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2","回溯rosbag2","0700",{"path":2557,"stem":2558,"title":2559,"date":2502,"chapterOrder":2560,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-zuo-biao-bian-huan-tf","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-坐标变换TF","座標變換TF","0800",{"path":2562,"stem":2563,"title":2564,"date":2502,"chapterOrder":2565,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0900-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0900-可视化平台RVIZ2与URDF建模语言","可視化平臺RVIZ2與URDF建模語言","0900",{"path":2567,"stem":2568,"title":2569,"date":2502,"chapterOrder":2570,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1000-stage-ros2-fang-zhen-ping-tai","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1000-Stage_Ros2仿真平台","Stage_Ros2仿真平臺","1000",{"path":2572,"stem":2573,"title":2574,"date":2502,"chapterOrder":2575,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic","Gezebo Classic","1100-0100",{"path":2577,"stem":2578,"title":2579,"date":2502,"chapterOrder":2580,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-ignitiongazebo","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","1100-0200",{"path":2582,"stem":2583,"title":2584,"date":2502,"chapterOrder":2585,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-gazebosim","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-GazeboSim","Gz Sim（Gazebo Harmonic）","1100-0300",{"path":2500,"stem":2517,"title":5,"date":2502,"chapterOrder":2501,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},{"path":2588,"stem":2589,"title":2590,"date":2502,"chapterOrder":2591,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-gezebo-fang-zhen-ping-tai","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-Gezebo仿真平台","Gezebo仿真平臺","1100",{"path":2593,"stem":2594,"title":2595,"date":2502,"chapterOrder":2596,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-humble-ban-ben","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-Humble版本","Humble導航仿真","1200-0100",{"path":2598,"stem":2599,"title":2600,"date":2502,"chapterOrder":2601,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-jazzy-ban-ben","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-Jazzy版本","Jazzy導航仿真","1200-0200",{"path":2603,"stem":2604,"title":2605,"date":2502,"chapterOrder":2606,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-humble2jazzy","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-Humble2Jazzy","Humble與Jazzy導航的差異","1200-0300",{"path":2608,"stem":2609,"title":2610,"date":2502,"chapterOrder":2611,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-机器人导航Navigation2(仿真篇)","機器人導航Navigation2(仿真篇)","1200",{"path":2613,"stem":2614,"title":2615,"date":2502,"chapterOrder":2616,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-boost-aiso","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-Boost.Aiso","Boost.Asio庫","1300-0100-0100",{"path":2618,"stem":2619,"title":2620,"date":2502,"chapterOrder":2621,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2-serial-driver","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2_serial_driver","ROS2 Serial Driver庫","1300-0100-0200",{"path":2623,"stem":2624,"title":2625,"date":2502,"chapterOrder":2626,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-chuan-kou-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-串口通信","UART串口通信","1300-0100",{"path":2628,"stem":2629,"title":2630,"date":2502,"chapterOrder":2631,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","SocketCAN","1300-0200-0100",{"path":2633,"stem":2634,"title":2635,"date":2502,"chapterOrder":2636,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2-socketcan","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2_socketcan","ROS2_SocketCAN","1300-0200-0200",{"path":2638,"stem":2639,"title":2640,"date":2502,"chapterOrder":2641,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-can-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-CAN通信","CAN通信","1300-0200",{"path":2643,"stem":2644,"title":2615,"date":2502,"chapterOrder":2645,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-boost-aiso","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-Boost.Aiso","1300-0300-0100",{"path":2647,"stem":2648,"title":2649,"date":2502,"chapterOrder":2650,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-tcp-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-TCP通信","TCP通信","1300-0300",{"path":2652,"stem":2653,"title":2615,"date":2502,"chapterOrder":2654,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-boost-aiso","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-Boost.Aiso","1300-0400-0100",{"path":2656,"stem":2657,"title":2658,"date":2502,"chapterOrder":2659,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-udp-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-UDP通信","UDP通信","1300-0400",{"path":2661,"stem":2662,"title":2663,"date":2502,"chapterOrder":2664,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-linux-ying-jian-tong-xin","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-Linux硬件通信","Linux硬件通信","1300",{"path":2666,"stem":2667,"title":2668,"date":2502,"chapterOrder":2669,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-ji-qi-ren-zu-cheng","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-机器人组成","機器人組成","1400-0100",{"path":2671,"stem":2672,"title":2673,"date":2502,"chapterOrder":2674,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-yuan-cheng-kai-fa-ssh","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-远程开发SSH","遠程開發SSH","1400-0200-0100",{"path":2676,"stem":2677,"title":2678,"date":2502,"chapterOrder":2679,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-yuan-cheng-fang-wen-zhuo-mian","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-远程访问桌面","遠程訪問桌面","1400-0200-0200",{"path":2681,"stem":2682,"title":2683,"date":2502,"chapterOrder":2684,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-工控机之远程开发环境","工控機之遠程開發環境","1400-0200",{"path":2686,"stem":2687,"title":2688,"date":2502,"chapterOrder":2689,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-gong-kong-ji-zhi-wai-jie-usb-she-bei","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-工控机之外接USB设备","工控機之外接USB設備","1400-0300",{"path":2691,"stem":2692,"title":2693,"date":2502,"chapterOrder":2694,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-fen-bu-shi-da-jian","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-分布式搭建","分佈式搭建","1400-0400",{"path":2696,"stem":2697,"title":2698,"date":2502,"chapterOrder":2699,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-you-hua-ri-zhi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-优化日志","優化日誌","1400-0500",{"path":2701,"stem":2702,"title":2703,"date":2502,"chapterOrder":2704,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-li-cheng-ji-odom","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-里程计Odom","里程計Odom","1400-0600-0100",{"path":2706,"stem":2707,"title":2708,"date":2502,"chapterOrder":2709,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-guan-xing-ji-imu","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-惯性计IMU","慣性計IMU","1400-0600-0200",{"path":2711,"stem":2712,"title":2713,"date":2502,"chapterOrder":2714,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-ji-guang-lei-da-lidar","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-激光雷达LiDAR","激光雷達LiDAR","1400-0600-0300",{"path":2716,"stem":2717,"title":2718,"date":2502,"chapterOrder":2719,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-xiang-ji-camera","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-相机Camera","相機Camera","1400-0600-0400",{"path":2721,"stem":2722,"title":2723,"date":2502,"chapterOrder":2724,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-quan-qiu-ding-wei-gnss","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-全球定位GNSS","全球定位GNSS","1400-0600-0500",{"path":2726,"stem":2727,"title":2728,"date":2502,"chapterOrder":2729,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-shou-bing-joy","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-手柄joy","手柄JOY","1400-0600-0600",{"path":2731,"stem":2732,"title":2733,"date":2502,"chapterOrder":2734,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-jian-pan-kong-zhi-jie-dian","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-键盘控制节点","鍵盤控制節點","1400-0600-0700",{"path":2736,"stem":2737,"title":2738,"date":2502,"chapterOrder":2739,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-ying-jian-ping-tai","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-硬件平台","硬件平臺","1400-0600",{"path":2741,"stem":2742,"title":2743,"date":2502,"chapterOrder":2744,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-zuo-biao-xi-yu-hua-ti-guan-xi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-坐标系与话题关系","座標系與話題關係","1400-0700",{"path":2746,"stem":2747,"title":2748,"date":2502,"chapterOrder":2749,"chapterDepth":227,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-lun-shi-li-cheng-ji-biao-ding","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-轮式里程计标定","輪式里程計標定","1400-0800-0100-0100",{"path":2751,"stem":2752,"title":2753,"date":2502,"chapterOrder":2754,"chapterDepth":227,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-lun-shi-li-cheng-ji-yu-imu-rong-he","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-轮式里程计与IMU融合","輪式里程計與IMU融合","1400-0800-0100-0200",{"path":2756,"stem":2757,"title":2758,"date":2502,"chapterOrder":2759,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-轮式里程计标定与融合","輪式里程計標定與融合","1400-0800-0100",{"path":2761,"stem":2762,"title":2763,"date":2502,"chapterOrder":2764,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-ji-guang-lei-da-gong-ju","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-激光雷达工具","激光雷達工具","1400-0800-0200",{"path":2766,"stem":2767,"title":2768,"date":2502,"chapterOrder":2769,"chapterDepth":196,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-xiang-ji-shi-yong-jin-jie","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-相机使用进阶","相機使用進階","1400-0800-0300",{"path":2771,"stem":2772,"title":2773,"date":2502,"chapterOrder":2774,"chapterDepth":120,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-ying-jian-ping-tai-jin-jie","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-硬件平台进阶","硬件平臺進階","1400-0800",{"path":2776,"stem":2777,"title":2778,"date":2502,"chapterOrder":2779,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-ji-qi-ren-ying-jian","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-机器人硬件","機器人硬件","1400",{"path":2781,"stem":2782,"title":2783,"date":2502,"chapterOrder":2784,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ros2-control","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ROS2_Control","ROS2_Control","1500",{"path":2786,"stem":2787,"title":2788,"date":2502,"chapterOrder":2789,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1600-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1600-Moveit2工业机器人机械臂","Moveit2工業機器人機械臂","1600",{"path":2791,"stem":2792,"title":2793,"date":2502,"chapterOrder":2794,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1700-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1700-机器人导航Navigation2(实体篇)","機器人導航Navigation2(實體篇)","1700",{"path":2796,"stem":2797,"title":2798,"date":2502,"chapterOrder":2799,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-microros","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-MicroROS","MicroROS","1800",{"path":2801,"stem":2802,"title":2803,"date":2502,"chapterOrder":2804,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-webots-fang-zhen-ping-tai","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-Webots仿真平台","Webots仿真平臺","1900",{"path":2806,"stem":2807,"title":2808,"date":2502,"chapterOrder":2809,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2509},"\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-opencv","_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-OpenCV","OpenCV","2000",{"path":2505,"stem":2811,"title":2812,"date":2502,"chapterOrder":2511,"chapterDepth":2525,"docKey":2504,"docRoot":2505,"docTitle":2506,"isWikiDoc":2510,"isWikiIndex":2510},"_i18n\u002Fzh-tw\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2機器人操作系統教程",{"variants":2814},[2815,2818,2821,2824,2825],{"path":2816,"localeSlug":2817,"i18nKey":2508},"\u002Fen-us\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","en-us",{"path":2819,"localeSlug":2820,"i18nKey":2508},"\u002Fzh-hant\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","zh-hant",{"path":2822,"localeSlug":2823,"i18nKey":2508},"\u002Fzh-hk\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","zh-hk",{"path":2500,"localeSlug":2513,"i18nKey":2508},{"path":2826,"localeSlug":2827,"i18nKey":2508},"\u002Fzh-cn\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","zh-cn",[2816,2516,2819,2516,2822,2516,2500,2516,2826,2516],1784646879492]