[{"data":1,"prerenderedAt":14428},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic":3,"wiki-doc-items-2023-12-30-ros2-tutorial":14010,"wiki:author-members":14416},{"id":4,"title":5,"authors":6,"body":8,"chapterDepth":106,"chapterOrder":13998,"date":13999,"description":59,"docKey":14000,"docRoot":14001,"docTitle":14002,"extension":14003,"isWikiDoc":308,"isWikiIndex":14004,"meta":14005,"navigation":308,"path":14006,"seo":14007,"stem":14008,"wikiDepth":106,"__hash__":14009},"wiki\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic.md","Gezebo Classic",[7],"董佳辉",{"type":9,"value":10,"toc":13994},"minimark",[11,24,28,31,37,40,45,48,54,61,64,67,73,76,79,85,90,93,124,127,152,155,1022,1027,1030,1033,1036,1052,1057,1060,1074,1079,1082,1095,1098,1101,1118,1123,1141,1146,1149,1166,1169,1176,5685,5688,5691,5696,5699,5704,5707,5712,5715,5718,5723,5726,5729,5732,5735,5740,5743,5748,5751,5754,5757,5762,5765,5768,5773,5776,5781,5784,5791,5823,5826,5857,5860,5931,5936,5939,5982,5987,5990,5995,6006,6009,6015,6082,6091,6094,6165,6168,6173,6176,6179,6182,6622,6625,6662,6667,6670,6673,6710,6715,6870,6875,6878,6883,6886,6889,6897,6900,6903,6906,6909,6914,6917,6920,6923,6926,7038,7048,7054,7057,7060,7070,7075,7089,7092,7245,7248,7506,7509,7529,7790,7793,7815,7818,7838,7843,7846,7849,7878,7881,7890,7893,7918,7921,7924,7933,7936,7941,7952,7957,7962,7965,7974,7977,7982,7985,7998,8545,8548,8561,8564,8569,8572,8577,8582,8585,8678,8681,9228,9231,9235,9238,9241,9244,9255,9258,9261,9264,9267,9272,9275,9278,9283,9286,9291,9294,9300,9303,9306,9313,9316,9327,9330,9346,9353,10088,10091,10099,10110,10115,10139,10144,10149,10494,10497,10502,10506,10509,10516,10519,10524,10527,10532,10535,10543,10546,10551,10554,10557,10562,10565,10570,10573,10578,10581,10586,10589,10592,10597,10603,10609,10612,10615,10618,11006,11009,11038,11041,11046,11056,11061,11083,11088,11091,11094,11099,11102,11107,11110,11115,11120,11125,11129,11135,11138,11141,11144,11165,11168,11173,11176,11179,11184,11210,11213,11222,11225,11327,11330,11832,11835,11863,11866,11871,11874,11921,11924,12003,12006,12012,12057,12064,12361,12364,12367,12370,12375,12380,12383,12386,12389,12392,12395,12420,12423,12426,12429,12432,12437,12440,12456,12462,12467,12470,12473,12476,12481,12484,12487,12490,12493,12498,12501,12506,12509,12512,12517,12522,12525,12530,12533,12538,12541,12546,12549,12552,12557,12560,12563,12568,12571,12574,12579,12582,12585,12615,12621,12699,12702,13252,13255,13260,13281,13286,13291,13294,13301,13304,13307,13312,13315,13957,13977,13982,13987,13990],[12,13,15,16,23],"h3",{"id":14},"gazebogazebo-classic","Gazebo(",[17,18,22],"a",{"href":19,"rel":20},"https:\u002F\u002Fclassic.gazebosim.org\u002F",[21],"nofollow","Gazebo Classic",")",[25,26,27],"p",{},"这个是老版Gazebo，仅在ROS1和ROS2 Humble上可用。（但是ROS2并不推荐使用老版Gazebo，更加建议使用新版Gazebo）",[25,29,30],{},"ROS2老版Gazebo仅在Humble版本上可用，在Jazzy及以后的版本已移除。",[25,32,33],{},[34,35,36],"strong",{},"（不想学老版Gazebo的，直接跳到下一节的Ignition Gazebo即可）",[25,38,39],{},"这俩对咱们的区别不算太大，也就是一个教程多，一个教程少的区别，你直接学老版Gazebo也是一样用的。",[25,41,42],{},[34,43,44],{},"（初学者也可以只学教程多的Gazebo Classic,可以少走一些弯路）",[25,46,47],{},"Gezebo官网：",[25,49,50],{},[17,51,52],{"href":52,"rel":53},"https:\u002F\u002Fgazebosim.org\u002Fhome",[21],[25,55,56],{},[57,58],"img",{"alt":59,"src":60},"","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1627.webp",[25,62,63],{},"如果你想从老版的Gazebo迁移到新版的Gazebo，那么请看下方官方教程：",[25,65,66],{},"从Gazebo Classic迁移到ROS2 Humble的Ign Gazebo(Gazebo Fortress)：",[25,68,69],{},[17,70,71],{"href":71,"rel":72},"https:\u002F\u002Fgazebosim.org\u002Fdocs\u002Ffortress\u002Fgazebo_classic_migration\u002F",[21],[25,74,75],{},"从Gazebo Classic迁移到ROS2 Jazzy的Gazebo Sim(Gazebo Harmonic)：",[25,77,78],{},"Jazzy之后的版本应该变化不会太大，也可以暂时参照下面这个教程（或者去官网找对应版本的教程）：",[25,80,81],{},[17,82,83],{"href":83,"rel":84},"https:\u002F\u002Fgazebosim.org\u002Fdocs\u002Fharmonic\u002Fgazebo_classic_migration\u002F",[21],[86,87,89],"h4",{"id":88},"gazebo-classic安装与运行","Gazebo Classic安装与运行",[25,91,92],{},"ROS2只有humble有老版Gazebo",[94,95,99],"pre",{"className":96,"code":97,"language":98,"meta":59,"style":59},"language-bash shiki shiki-themes github-light github-dark","sudo apt install ros-humble-gazebo-ros ros-humble-gazebo-ros-pkgs\n","bash",[100,101,102],"code",{"__ignoreMap":59},[103,104,107,111,115,118,121],"span",{"class":105,"line":106},"line",1,[103,108,110],{"class":109},"sScJk","sudo",[103,112,114],{"class":113},"sZZnC"," apt",[103,116,117],{"class":113}," install",[103,119,120],{"class":113}," ros-humble-gazebo-ros",[103,122,123],{"class":113}," ros-humble-gazebo-ros-pkgs\n",[25,125,126],{},"安装完成后，我们就可以通过下面的命令行来启动gazebo并加载ros2插件。",[94,128,130],{"className":96,"code":129,"language":98,"meta":59,"style":59},"gazebo --verbose -s libgazebo_ros_init.so -s libgazebo_ros_factory.so \n",[100,131,132],{"__ignoreMap":59},[103,133,134,137,141,144,147,149],{"class":105,"line":106},[103,135,136],{"class":109},"gazebo",[103,138,140],{"class":139},"sj4cs"," --verbose",[103,142,143],{"class":139}," -s",[103,145,146],{"class":113}," libgazebo_ros_init.so",[103,148,143],{"class":139},[103,150,151],{"class":113}," libgazebo_ros_factory.so\n",[25,153,154],{},"看到下面这个日志和gazebo界面，没啥大问题就说明成功了。（一些警告是说Gazebo Classic已经弃用，鼓励使用新版Ingition Gazebo，忽略这些警告即可）",[94,156,160],{"className":157,"code":158,"language":159,"meta":59,"style":59},"language-sql shiki shiki-themes github-light github-dark","root@Dell-G15-5511:\u002Fhome\u002Ftungchiahui\u002FUserFolder\u002FMySource\u002FROS_WS\u002FROS2_WS\u002F6.ws_simulations$ gazebo --verbose -s libgazebo_ros_init.so -s libgazebo_ros_factory.so \nGazebo multi-robot simulator, version 11.10.2\nCopyright (C) 2012 Open Source Robotics Foundation.\nReleased under the Apache 2 License.\nhttp:\u002F\u002Fgazebosim.org\n\n[Msg] Waiting for master.\nGazebo multi-robot simulator, version 11.10.2\nCopyright (C) 2012 Open Source Robotics Foundation.\nReleased under the Apache 2 License.\nhttp:\u002F\u002Fgazebosim.org\n\n[Wrn] [gazebo_ros_init.cpp:178] \n\n#     # ####### ####### ###  #####  #######\n\n##    # #     #    #     #  #     # #\n\n# #   # #     #    #     #  #       #\n\n#  #  # #     #    #     #  #       #####\n\n#   # # #     #    #     #  #       #\n\n#    ## #     #    #     #  #     # #\n\n#     # #######    #    ###  #####  #######\n\nThis version of Gazebo, now called Gazebo classic, reaches end-of-life\nin January 2025. Users are highly encouraged to migrate to the new Gazebo\nusing our migration guides (https:\u002F\u002Fgazebosim.org\u002Fdocs\u002Flatest\u002Fgazebo_classic_migration?utm_source=gazebo_ros_pkgs&utm_medium=cli)\n\n[Msg] Waiting for master.\n[Msg] Connected to gazebo master @ http:\u002F\u002F127.0.0.1:11345\n[Msg] Publicized address: 192.168.31.60\n[Msg] Loading world file [\u002Fusr\u002Fshare\u002Fgazebo-11\u002Fworlds\u002Fempty.world]\nXDG_RUNTIME_DIR (\u002Frun\u002Fuser\u002F1000) is not owned by us (uid 0), but by uid 1000! (This could e.g. happen if you try to connect to a non-root PulseAudio as a root user, over the native protocol. Don't do that.)\nALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave\nAL lib: (EE) ALCplaybackAlsa_open: Could not open playback device 'default': No such file or directory\n[Err] [OpenAL.cc:84] Unable to open audio device[default]\n Audio will be disabled.\n[Msg] Connected to gazebo master @ http:\u002F\u002F127.0.0.1:11345\n[Msg] Publicized address: 192.168.31.60\n[Wrn] [GuiIface.cc:298] Couldn't locate specified .ini. Creating file at \"\u002Froot\u002F.gazebo\u002Fgui.ini\"\n[Wrn] [GuiIface.cc:120] QStandardPaths: runtime directory '\u002Frun\u002Fuser\u002F1000' is not owned by UID 0, but a directory permissions 0700 owned by UID 1000 GID 1000\n[Wrn] [Event.cc:61] Warning: Deleting a connection right after creation. Make sure to save the ConnectionPtr from a Connect call\n\nlibcurl: (35) error:0A000126:SSL routines::unexpected eof while reading\n[Wrn] [ModelDatabase.cc:212] Unable to connect to model database using [http:\u002F\u002Fmodels.gazebosim.org\u002F\u002Fdatabase.config]. Only locally installed models will be available.\n[Wrn] [Event.cc:61] Warning: Deleting a connection right after creation. Make sure to save the ConnectionPtr from a Connect call\n","sql",[100,161,162,229,257,272,284,303,310,325,346,357,366,381,386,392,397,403,408,414,419,425,430,436,441,447,452,458,463,469,474,502,528,572,577,588,633,663,675,797,803,815,821,827,833,839,862,905,942,947,971,995],{"__ignoreMap":59},[103,163,164,168,172,175,178,180,183,186,189,192,194,197,199,202,204,207,209,212,214,217,219,222,225],{"class":105,"line":106},[103,165,167],{"class":166},"szBVR","root",[103,169,171],{"class":170},"sVt8B","@Dell",[103,173,174],{"class":166},"-",[103,176,177],{"class":170},"G15",[103,179,174],{"class":166},[103,181,182],{"class":139},"5511",[103,184,185],{"class":170},":",[103,187,188],{"class":166},"\u002F",[103,190,191],{"class":170},"home",[103,193,188],{"class":166},[103,195,196],{"class":170},"tungchiahui",[103,198,188],{"class":166},[103,200,201],{"class":170},"UserFolder",[103,203,188],{"class":166},[103,205,206],{"class":170},"MySource",[103,208,188],{"class":166},[103,210,211],{"class":170},"ROS_WS",[103,213,188],{"class":166},[103,215,216],{"class":170},"ROS2_WS",[103,218,188],{"class":166},[103,220,221],{"class":139},"6",[103,223,224],{"class":170},".ws_simulations$ gazebo ",[103,226,228],{"class":227},"sJ8bj","--verbose -s libgazebo_ros_init.so -s libgazebo_ros_factory.so \n",[103,230,232,235,237,240,243,246,249,252,254],{"class":105,"line":231},2,[103,233,234],{"class":170},"Gazebo multi",[103,236,174],{"class":166},[103,238,239],{"class":170},"robot simulator, ",[103,241,242],{"class":166},"version",[103,244,245],{"class":139}," 11",[103,247,248],{"class":170},".",[103,250,251],{"class":139},"10",[103,253,248],{"class":170},[103,255,256],{"class":139},"2\n",[103,258,260,263,266,269],{"class":105,"line":259},3,[103,261,262],{"class":170},"Copyright (C) ",[103,264,265],{"class":139},"2012",[103,267,268],{"class":166}," Open",[103,270,271],{"class":170}," Source Robotics Foundation.\n",[103,273,275,278,281],{"class":105,"line":274},4,[103,276,277],{"class":170},"Released under the Apache ",[103,279,280],{"class":139},"2",[103,282,283],{"class":170}," License.\n",[103,285,287,290,292,295,298,300],{"class":105,"line":286},5,[103,288,289],{"class":166},"http",[103,291,185],{"class":170},[103,293,294],{"class":166},"\u002F\u002F",[103,296,297],{"class":139},"gazebosim",[103,299,248],{"class":170},[103,301,302],{"class":139},"org\n",[103,304,306],{"class":105,"line":305},6,[103,307,309],{"emptyLinePlaceholder":308},true,"\n",[103,311,313,316,319,322],{"class":105,"line":312},7,[103,314,315],{"class":170},"[Msg] Waiting ",[103,317,318],{"class":166},"for",[103,320,321],{"class":166}," master",[103,323,324],{"class":170},".\n",[103,326,328,330,332,334,336,338,340,342,344],{"class":105,"line":327},8,[103,329,234],{"class":170},[103,331,174],{"class":166},[103,333,239],{"class":170},[103,335,242],{"class":166},[103,337,245],{"class":139},[103,339,248],{"class":170},[103,341,251],{"class":139},[103,343,248],{"class":170},[103,345,256],{"class":139},[103,347,349,351,353,355],{"class":105,"line":348},9,[103,350,262],{"class":170},[103,352,265],{"class":139},[103,354,268],{"class":166},[103,356,271],{"class":170},[103,358,360,362,364],{"class":105,"line":359},10,[103,361,277],{"class":170},[103,363,280],{"class":139},[103,365,283],{"class":170},[103,367,369,371,373,375,377,379],{"class":105,"line":368},11,[103,370,289],{"class":166},[103,372,185],{"class":170},[103,374,294],{"class":166},[103,376,297],{"class":139},[103,378,248],{"class":170},[103,380,302],{"class":139},[103,382,384],{"class":105,"line":383},12,[103,385,309],{"emptyLinePlaceholder":308},[103,387,389],{"class":105,"line":388},13,[103,390,391],{"class":170},"[Wrn] [gazebo_ros_init.cpp:178] \n",[103,393,395],{"class":105,"line":394},14,[103,396,309],{"emptyLinePlaceholder":308},[103,398,400],{"class":105,"line":399},15,[103,401,402],{"class":170},"#     # ####### ####### ###  #####  #######\n",[103,404,406],{"class":105,"line":405},16,[103,407,309],{"emptyLinePlaceholder":308},[103,409,411],{"class":105,"line":410},17,[103,412,413],{"class":170},"##    # #     #    #     #  #     # #\n",[103,415,417],{"class":105,"line":416},18,[103,418,309],{"emptyLinePlaceholder":308},[103,420,422],{"class":105,"line":421},19,[103,423,424],{"class":170},"# #   # #     #    #     #  #       #\n",[103,426,428],{"class":105,"line":427},20,[103,429,309],{"emptyLinePlaceholder":308},[103,431,433],{"class":105,"line":432},21,[103,434,435],{"class":170},"#  #  # #     #    #     #  #       #####\n",[103,437,439],{"class":105,"line":438},22,[103,440,309],{"emptyLinePlaceholder":308},[103,442,444],{"class":105,"line":443},23,[103,445,446],{"class":170},"#   # # #     #    #     #  #       #\n",[103,448,450],{"class":105,"line":449},24,[103,451,309],{"emptyLinePlaceholder":308},[103,453,455],{"class":105,"line":454},25,[103,456,457],{"class":170},"#    ## #     #    #     #  #     # #\n",[103,459,461],{"class":105,"line":460},26,[103,462,309],{"emptyLinePlaceholder":308},[103,464,466],{"class":105,"line":465},27,[103,467,468],{"class":170},"#     # #######    #    ###  #####  #######\n",[103,470,472],{"class":105,"line":471},28,[103,473,309],{"emptyLinePlaceholder":308},[103,475,477,480,482,485,488,491,494,497,499],{"class":105,"line":476},29,[103,478,479],{"class":170},"This ",[103,481,242],{"class":166},[103,483,484],{"class":170}," of Gazebo, ",[103,486,487],{"class":166},"now",[103,489,490],{"class":170}," called Gazebo classic, reaches ",[103,492,493],{"class":166},"end-",[103,495,496],{"class":170},"of",[103,498,174],{"class":166},[103,500,501],{"class":170},"life\n",[103,503,505,508,511,514,517,520,523,525],{"class":105,"line":504},30,[103,506,507],{"class":166},"in",[103,509,510],{"class":170}," January ",[103,512,513],{"class":139},"2025",[103,515,516],{"class":170},". Users are highly encouraged ",[103,518,519],{"class":166},"to",[103,521,522],{"class":170}," migrate ",[103,524,519],{"class":166},[103,526,527],{"class":170}," the new Gazebo\n",[103,529,531,534,537,539,541,543,546,548,551,553,556,558,561,564,567,569],{"class":105,"line":530},31,[103,532,533],{"class":166},"using",[103,535,536],{"class":170}," our migration guides (https:",[103,538,294],{"class":166},[103,540,297],{"class":139},[103,542,248],{"class":170},[103,544,545],{"class":139},"org",[103,547,188],{"class":166},[103,549,550],{"class":170},"docs",[103,552,188],{"class":166},[103,554,555],{"class":170},"latest",[103,557,188],{"class":166},[103,559,560],{"class":170},"gazebo_classic_migration?utm_source",[103,562,563],{"class":166},"=",[103,565,566],{"class":170},"gazebo_ros_pkgs&utm_medium",[103,568,563],{"class":166},[103,570,571],{"class":170},"cli)\n",[103,573,575],{"class":105,"line":574},32,[103,576,309],{"emptyLinePlaceholder":308},[103,578,580,582,584,586],{"class":105,"line":579},33,[103,581,315],{"class":170},[103,583,318],{"class":166},[103,585,321],{"class":166},[103,587,324],{"class":170},[103,589,591,594,596,599,602,605,607,609,611,614,616,619,621,623,625,628,630],{"class":105,"line":590},34,[103,592,593],{"class":170},"[Msg] Connected ",[103,595,519],{"class":166},[103,597,598],{"class":170}," gazebo ",[103,600,601],{"class":166},"master",[103,603,604],{"class":170}," @ ",[103,606,289],{"class":166},[103,608,185],{"class":170},[103,610,294],{"class":166},[103,612,613],{"class":139},"127",[103,615,248],{"class":170},[103,617,618],{"class":139},"0",[103,620,248],{"class":170},[103,622,618],{"class":139},[103,624,248],{"class":170},[103,626,627],{"class":139},"1",[103,629,185],{"class":170},[103,631,632],{"class":139},"11345\n",[103,634,636,639,642,645,648,650,653,655,658,660],{"class":105,"line":635},35,[103,637,638],{"class":170},"[Msg] Publicized ",[103,640,641],{"class":166},"address",[103,643,644],{"class":170},": ",[103,646,647],{"class":139},"192",[103,649,248],{"class":170},[103,651,652],{"class":139},"168",[103,654,248],{"class":170},[103,656,657],{"class":139},"31",[103,659,248],{"class":170},[103,661,662],{"class":139},"60\n",[103,664,666,669,672],{"class":105,"line":665},36,[103,667,668],{"class":170},"[Msg] Loading world ",[103,670,671],{"class":166},"file",[103,673,674],{"class":170}," [\u002Fusr\u002Fshare\u002Fgazebo-11\u002Fworlds\u002Fempty.world]\n",[103,676,678,681,683,686,688,691,693,696,699,702,705,708,711,714,717,720,723,725,728,731,734,737,739,742,745,748,751,754,757,760,762,765,768,771,774,777,779,782,785,788,791,794],{"class":105,"line":677},37,[103,679,680],{"class":170},"XDG_RUNTIME_DIR (",[103,682,188],{"class":166},[103,684,685],{"class":170},"run",[103,687,188],{"class":166},[103,689,690],{"class":170},"user",[103,692,188],{"class":166},[103,694,695],{"class":139},"1000",[103,697,698],{"class":170},") ",[103,700,701],{"class":166},"is",[103,703,704],{"class":166}," not",[103,706,707],{"class":170}," owned ",[103,709,710],{"class":166},"by",[103,712,713],{"class":170}," us (",[103,715,716],{"class":166},"uid",[103,718,719],{"class":139}," 0",[103,721,722],{"class":170},"), but ",[103,724,710],{"class":166},[103,726,727],{"class":166}," uid",[103,729,730],{"class":139}," 1000",[103,732,733],{"class":170},"! (This could ",[103,735,736],{"class":139},"e",[103,738,248],{"class":170},[103,740,741],{"class":139},"g",[103,743,744],{"class":170},". happen ",[103,746,747],{"class":166},"if",[103,749,750],{"class":170}," you ",[103,752,753],{"class":166},"try",[103,755,756],{"class":166}," to",[103,758,759],{"class":166}," connect",[103,761,756],{"class":166},[103,763,764],{"class":170}," a non",[103,766,767],{"class":166},"-root",[103,769,770],{"class":170}," PulseAudio ",[103,772,773],{"class":166},"as",[103,775,776],{"class":170}," a ",[103,778,167],{"class":166},[103,780,781],{"class":170}," user, ",[103,783,784],{"class":166},"over",[103,786,787],{"class":170}," the ",[103,789,790],{"class":166},"native",[103,792,793],{"class":170}," protocol. Don",[103,795,796],{"class":113},"'t do that.)\n",[103,798,800],{"class":105,"line":799},38,[103,801,802],{"class":113},"ALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave\n",[103,804,806,809,812],{"class":105,"line":805},39,[103,807,808],{"class":113},"AL lib: (EE) ALCplaybackAlsa_open: Could not open playback device '",[103,810,811],{"class":166},"default",[103,813,814],{"class":113},"': No such file or directory\n",[103,816,818],{"class":105,"line":817},40,[103,819,820],{"class":113},"[Err] [OpenAL.cc:84] Unable to open audio device[default]\n",[103,822,824],{"class":105,"line":823},41,[103,825,826],{"class":113}," Audio will be disabled.\n",[103,828,830],{"class":105,"line":829},42,[103,831,832],{"class":113},"[Msg] Connected to gazebo master @ http:\u002F\u002F127.0.0.1:11345\n",[103,834,836],{"class":105,"line":835},43,[103,837,838],{"class":113},"[Msg] Publicized address: 192.168.31.60\n",[103,840,842,845,848,851,854,856,859],{"class":105,"line":841},44,[103,843,844],{"class":113},"[Wrn] [GuiIface.cc:298] Couldn'",[103,846,847],{"class":170},"t ",[103,849,850],{"class":166},"locate",[103,852,853],{"class":170}," specified .ini. Creating ",[103,855,671],{"class":166},[103,857,858],{"class":166}," at",[103,860,861],{"class":113}," \"\u002Froot\u002F.gazebo\u002Fgui.ini\"\n",[103,863,865,868,871,874,876,878,880,883,885,888,891,893,895,897,899,902],{"class":105,"line":864},45,[103,866,867],{"class":170},"[Wrn] [GuiIface.cc:120] QStandardPaths: runtime directory ",[103,869,870],{"class":113},"'\u002Frun\u002Fuser\u002F1000'",[103,872,873],{"class":166}," is",[103,875,704],{"class":166},[103,877,707],{"class":170},[103,879,710],{"class":166},[103,881,882],{"class":166}," UID",[103,884,719],{"class":139},[103,886,887],{"class":170},", but a directory permissions ",[103,889,890],{"class":139},"0700",[103,892,707],{"class":170},[103,894,710],{"class":166},[103,896,882],{"class":166},[103,898,730],{"class":139},[103,900,901],{"class":170}," GID ",[103,903,904],{"class":139},"1000\n",[103,906,908,911,914,917,920,923,925,928,931,934,936,939],{"class":105,"line":907},46,[103,909,910],{"class":170},"[Wrn] [Event.cc:61] Warning: Deleting a ",[103,912,913],{"class":166},"connection",[103,915,916],{"class":170}," right ",[103,918,919],{"class":166},"after",[103,921,922],{"class":170}," creation. Make sure ",[103,924,519],{"class":166},[103,926,927],{"class":166}," save",[103,929,930],{"class":170}," the ConnectionPtr ",[103,932,933],{"class":166},"from",[103,935,776],{"class":170},[103,937,938],{"class":166},"Connect",[103,940,941],{"class":166}," call\n",[103,943,945],{"class":105,"line":944},47,[103,946,309],{"emptyLinePlaceholder":308},[103,948,950,953,956,959,962,965,968],{"class":105,"line":949},48,[103,951,952],{"class":170},"libcurl: (",[103,954,955],{"class":139},"35",[103,957,958],{"class":170},") error:0A000126:",[103,960,961],{"class":166},"SSL",[103,963,964],{"class":170}," routines::unexpected eof ",[103,966,967],{"class":166},"while",[103,969,970],{"class":170}," reading\n",[103,972,974,977,979,981,983,986,989,992],{"class":105,"line":973},49,[103,975,976],{"class":170},"[Wrn] [ModelDatabase.cc:212] Unable ",[103,978,519],{"class":166},[103,980,759],{"class":166},[103,982,756],{"class":166},[103,984,985],{"class":170}," model ",[103,987,988],{"class":166},"database",[103,990,991],{"class":166}," using",[103,993,994],{"class":170}," [http:\u002F\u002Fmodels.gazebosim.org\u002F\u002Fdatabase.config]. Only locally installed models will be available.\n",[103,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020],{"class":105,"line":997},50,[103,999,910],{"class":170},[103,1001,913],{"class":166},[103,1003,916],{"class":170},[103,1005,919],{"class":166},[103,1007,922],{"class":170},[103,1009,519],{"class":166},[103,1011,927],{"class":166},[103,1013,930],{"class":170},[103,1015,933],{"class":166},[103,1017,776],{"class":170},[103,1019,938],{"class":166},[103,1021,941],{"class":166},[25,1023,1024],{},[57,1025],{"alt":59,"src":1026},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1628.webp",[86,1028,1029],{"id":1029},"插件及节点服务介绍",[25,1031,1032],{},"使用之前的命令启动Gazebo并加载gazebo_ros插件，我们使用下面的指令来看插件的节点，以及改节点为我们提供的服务有哪些？",[25,1034,1035],{},"节点列表",[94,1037,1039],{"className":96,"code":1038,"language":98,"meta":59,"style":59},"ros2 node list\n",[100,1040,1041],{"__ignoreMap":59},[103,1042,1043,1046,1049],{"class":105,"line":106},[103,1044,1045],{"class":109},"ros2",[103,1047,1048],{"class":113}," node",[103,1050,1051],{"class":113}," list\n",[25,1053,1054],{},[57,1055],{"alt":59,"src":1056},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1629.webp",[25,1058,1059],{},"然后我们看看这个节点对外提供的服务有哪些？",[94,1061,1063],{"className":96,"code":1062,"language":98,"meta":59,"style":59},"ros2 service list\n",[100,1064,1065],{"__ignoreMap":59},[103,1066,1067,1069,1072],{"class":105,"line":106},[103,1068,1045],{"class":109},[103,1070,1071],{"class":113}," service",[103,1073,1051],{"class":113},[25,1075,1076],{},[57,1077],{"alt":59,"src":1078},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1630.webp",[25,1080,1081],{},"除去和参数相关的几个服务，我们可以看到另外三个特殊服务：",[1083,1084,1085,1089,1092],"ul",{},[1086,1087,1088],"li",{},"\u002Fspawn_entity，用于加载模型到gazebo中",[1086,1090,1091],{},"\u002Fget_model_list，用于获取模型列表",[1086,1093,1094],{},"\u002Fdelete_entity，用于删除gazbeo中已经加载的模型",[25,1096,1097],{},"我们想要让gazebo显示出我们配置好的机器人模型使用\u002Fspawn_entity来加载即可。",[25,1099,1100],{},"接着我们可以来请求服务来加载模型，先带你看一下服务的接口类型。",[94,1102,1104],{"className":96,"code":1103,"language":98,"meta":59,"style":59},"ros2 service type \u002Fspawn_entity\n",[100,1105,1106],{"__ignoreMap":59},[103,1107,1108,1110,1112,1115],{"class":105,"line":106},[103,1109,1045],{"class":109},[103,1111,1071],{"class":113},[103,1113,1114],{"class":113}," type",[103,1116,1117],{"class":113}," \u002Fspawn_entity\n",[25,1119,1120],{},[57,1121],{"alt":59,"src":1122},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1631.webp",[94,1124,1126],{"className":96,"code":1125,"language":98,"meta":59,"style":59},"ros2 interface show gazebo_msgs\u002Fsrv\u002FSpawnEntity\n",[100,1127,1128],{"__ignoreMap":59},[103,1129,1130,1132,1135,1138],{"class":105,"line":106},[103,1131,1045],{"class":109},[103,1133,1134],{"class":113}," interface",[103,1136,1137],{"class":113}," show",[103,1139,1140],{"class":113}," gazebo_msgs\u002Fsrv\u002FSpawnEntity\n",[25,1142,1143],{},[57,1144],{"alt":59,"src":1145},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1632.webp",[25,1147,1148],{},"可以看到服务的请求内容包括：",[1083,1150,1151,1154,1157,1160,1163],{},[1086,1152,1153],{},"string name ，需要加载的实体的名称 (可选的)。",[1086,1155,1156],{},"string xml ，实体的XML描述字符串, URDF或者SDF。",[1086,1158,1159],{},"string robot_namespace ，产生的机器人和所有的ROS接口的命名空间，多机器人仿真的时候很有用。",[1086,1161,1162],{},"geometry_msgs\u002FPose initial_pose ，机器人的初始化位置",[1086,1164,1165],{},"string reference_frame ，初始姿态是相对于该实体的frame定义的。如果保持\"empty\"或\"world\"或“map”，则使用 gazebo的world作为frame。如果指定了不存在的实体，则会返回错误",[86,1167,1168],{"id":1168},"调用服务加载模型",[25,1170,1171,1172],{},"我们这里教程使用鱼香ROS的fishbot模型：",[17,1173,1174],{"href":1174,"rel":1175},"https:\u002F\u002Fgithub.com\u002Ffishros\u002Ffishbot\u002Fblob\u002Fnavgation2\u002Fsrc\u002Ffishbot_description\u002Furdf\u002Ffishbot_gazebo.urdf",[21],[94,1177,1181],{"className":1178,"code":1179,"language":1180,"meta":59,"style":59},"language-xml shiki shiki-themes github-light github-dark","\u003C?xml version=\"1.0\"?>\n\u003Crobot name=\"fishbot\">\n\n  \u003Clink name=\"base_footprint\"\u002F>\n\n  \u003Cjoint name=\"base_joint\" type=\"fixed\">\n    \u003Cparent link=\"base_footprint\"\u002F>\n    \u003Cchild link=\"base_link\"\u002F>\n    \u003Corigin xyz=\"0.0 0.0 0.076\" rpy=\"0 0 0\"\u002F>\n  \u003C\u002Fjoint>\n\n  \u003Clink name=\"base_link\">\n          \u003Cvisual>\n      \u003Corigin xyz=\"0 0 0.0\" rpy=\"0 0 0\"\u002F>\n      \u003Cgeometry>\n                \u003Ccylinder length=\"0.12\" radius=\"0.10\"\u002F>\n      \u003C\u002Fgeometry>\n      \u003Cmaterial name=\"blue\">\n              \u003Ccolor rgba=\"0.1 0.1 1.0 0.5\" \u002F> \n      \u003C\u002Fmaterial>\n    \u003C\u002Fvisual>\n    \u003Ccollision>\n      \u003Corigin xyz=\"0 0 0.0\" rpy=\"0 0 0\"\u002F>\n      \u003Cgeometry>\n                \u003Ccylinder length=\"0.12\" radius=\"0.10\"\u002F>\n      \u003C\u002Fgeometry>\n      \u003Cmaterial name=\"blue\">\n              \u003Ccolor rgba=\"0.1 0.1 1.0 0.5\" \u002F> \n      \u003C\u002Fmaterial>\n    \u003C\u002Fcollision>\n    \u003Cinertial>\n      \u003Cmass value=\"0.2\"\u002F>\n      \u003Cinertia ixx=\"0.0122666\" ixy=\"0\" ixz=\"0\" iyy=\"0.0122666\" iyz=\"0\" izz=\"0.02\"\u002F>\n    \u003C\u002Finertial>\n  \u003C\u002Flink>\n\n  \u003Clink name=\"laser_link\">\n    \u003Cvisual>\n      \u003Corigin xyz=\"0 0 0\" rpy=\"0 0 0\"\u002F>\n      \u003Cgeometry>\n        \u003Ccylinder length=\"0.02\" radius=\"0.02\"\u002F>\n      \u003C\u002Fgeometry>\n      \u003Cmaterial name=\"black\">\n        \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" \u002F> \n      \u003C\u002Fmaterial>\n    \u003C\u002Fvisual>\n    \u003Ccollision>\n      \u003Corigin xyz=\"0 0 0\" rpy=\"0 0 0\"\u002F>\n      \u003Cgeometry>\n        \u003Ccylinder length=\"0.02\" radius=\"0.02\"\u002F>\n      \u003C\u002Fgeometry>\n      \u003Cmaterial name=\"black\">\n        \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" \u002F> \n      \u003C\u002Fmaterial>\n    \u003C\u002Fcollision>\n    \u003Cinertial>\n    \u003Cmass value=\"0.1\"\u002F>\n      \u003Cinertia ixx=\"0.000190416666667\" ixy=\"0\" ixz=\"0\" iyy=\"0.0001904\" iyz=\"0\" izz=\"0.00036\"\u002F>\n    \u003C\u002Finertial>\n  \u003C\u002Flink>\n\n  \u003Cjoint name=\"laser_joint\" type=\"fixed\">\n      \u003Cparent link=\"base_link\" \u002F>\n      \u003Cchild link=\"laser_link\" \u002F>\n      \u003Corigin xyz=\"0 0 0.075\" \u002F>\n  \u003C\u002Fjoint>\n\n  \u003Clink name=\"imu_link\">\n          \u003Cvisual>\n      \u003Corigin xyz=\"0 0 0.0\" rpy=\"0 0 0\"\u002F>\n      \u003Cgeometry>\n                    \u003Cbox size=\"0.02 0.02 0.02\"\u002F>\n      \u003C\u002Fgeometry>\n    \u003C\u002Fvisual>\n    \u003Ccollision>\n      \u003Corigin xyz=\"0 0 0.0\" rpy=\"0 0 0\"\u002F>\n      \u003Cgeometry>\n                    \u003Cbox size=\"0.02 0.02 0.02\"\u002F>\n      \u003C\u002Fgeometry>\n    \u003C\u002Fcollision>\n    \u003Cinertial>\n      \u003Cmass value=\"0.1\"\u002F>\n        \u003Cinertia ixx=\"0.000190416666667\" ixy=\"0\" ixz=\"0\" iyy=\"0.0001904\" iyz=\"0\" izz=\"0.00036\"\u002F>\n      \u003C\u002Finertial>\n  \u003C\u002Flink>\n\n  \u003Cjoint name=\"imu_joint\" type=\"fixed\">\n      \u003Cparent link=\"base_link\" \u002F>\n      \u003Cchild link=\"imu_link\" \u002F>\n      \u003Corigin xyz=\"0 0 0.02\" \u002F>\n  \u003C\u002Fjoint>\n\n  \u003Clink name=\"left_wheel_link\">\n      \u003Cvisual>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57079 0 0\"\u002F>\n        \u003Cgeometry>\n          \u003Ccylinder length=\"0.04\" radius=\"0.032\"\u002F>\n        \u003C\u002Fgeometry>\n          \u003Cmaterial name=\"black\">\n            \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" \u002F> \n          \u003C\u002Fmaterial>\n      \u003C\u002Fvisual>\n      \u003Ccollision>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57079 0 0\"\u002F>\n        \u003Cgeometry>\n          \u003Ccylinder length=\"0.04\" radius=\"0.032\"\u002F>\n        \u003C\u002Fgeometry>\n          \u003Cmaterial name=\"black\">\n            \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" \u002F> \n          \u003C\u002Fmaterial>\n      \u003C\u002Fcollision>\n      \u003Cinertial>\n        \u003Cmass value=\"0.2\"\u002F>\n          \u003Cinertia ixx=\"0.000190416666667\" ixy=\"0\" ixz=\"0\" iyy=\"0.0001904\" iyz=\"0\" izz=\"0.00036\"\u002F>\n        \u003C\u002Finertial>\n  \u003C\u002Flink>\n\n  \u003Clink name=\"right_wheel_link\">\n      \u003Cvisual>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57079 0 0\"\u002F>\n        \u003Cgeometry>\n          \u003Ccylinder length=\"0.04\" radius=\"0.032\"\u002F>\n        \u003C\u002Fgeometry>\n          \u003Cmaterial name=\"black\">\n            \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" \u002F> \n          \u003C\u002Fmaterial>\n      \u003C\u002Fvisual>\n      \u003Ccollision>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57079 0 0\"\u002F>\n        \u003Cgeometry>\n          \u003Ccylinder length=\"0.04\" radius=\"0.032\"\u002F>\n        \u003C\u002Fgeometry>\n          \u003Cmaterial name=\"black\">\n            \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" \u002F> \n          \u003C\u002Fmaterial>\n      \u003C\u002Fcollision>\n      \u003Cinertial>\n      \u003Cmass value=\"0.2\"\u002F>\n      \u003Cinertia ixx=\"0.000190416666667\" ixy=\"0\" ixz=\"0\" iyy=\"0.0001904\" iyz=\"0\" izz=\"0.00036\"\u002F>\n    \u003C\u002Finertial>\n  \u003C\u002Flink>\n\n  \u003Cjoint name=\"left_wheel_joint\" type=\"continuous\">\n      \u003Cparent link=\"base_link\" \u002F>\n      \u003Cchild link=\"left_wheel_link\" \u002F>\n      \u003Corigin xyz=\"-0.02 0.10 -0.06\" \u002F>\n      \u003Caxis xyz=\"0 1 0\" \u002F>\n  \u003C\u002Fjoint>\n\n  \u003Cjoint name=\"right_wheel_joint\" type=\"continuous\">\n      \u003Cparent link=\"base_link\" \u002F>\n      \u003Cchild link=\"right_wheel_link\" \u002F>\n      \u003Corigin xyz=\"-0.02 -0.10 -0.06\" \u002F>\n      \u003Caxis xyz=\"0 1 0\" \u002F>\n  \u003C\u002Fjoint>\n\n  \u003Clink name=\"caster_link\">\n      \u003Cvisual>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57079 0 0\"\u002F>\n        \u003Cgeometry>\n            \u003Csphere radius=\"0.016\"\u002F>\n        \u003C\u002Fgeometry>\n          \u003Cmaterial name=\"black\">\n            \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" \u002F> \n          \u003C\u002Fmaterial>\n      \u003C\u002Fvisual>\n      \u003Ccollision>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57079 0 0\"\u002F>\n        \u003Cgeometry>\n            \u003Csphere radius=\"0.016\"\u002F>\n        \u003C\u002Fgeometry>\n          \u003Cmaterial name=\"black\">\n            \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" \u002F> \n          \u003C\u002Fmaterial>\n      \u003C\u002Fcollision>\n      \u003Cinertial>\n      \u003Cmass value=\"0.02\"\u002F>\n      \u003Cinertia ixx=\"0.000190416666667\" ixy=\"0\" ixz=\"0\" iyy=\"0.0001904\" iyz=\"0\" izz=\"0.00036\"\u002F>\n    \u003C\u002Finertial>\n  \u003C\u002Flink>\n\n  \u003Cjoint name=\"caster_joint\" type=\"fixed\">\n      \u003Cparent link=\"base_link\" \u002F>\n      \u003Cchild link=\"caster_link\" \u002F>\n      \u003Corigin xyz=\"0.06 0.0 -0.076\" \u002F>\n      \u003Caxis xyz=\"0 1 0\" \u002F>\n  \u003C\u002Fjoint>\n\n  \u003Cgazebo reference=\"caster_link\">\n    \u003Cmaterial>Gazebo\u002FBlack\u003C\u002Fmaterial>\n  \u003C\u002Fgazebo>\n\n  \u003Cgazebo reference=\"caster_link\">\n    \u003Cmu1 value=\"0.0\"\u002F>\n    \u003Cmu2 value=\"0.0\"\u002F>\n    \u003Ckp value=\"1000000.0\" \u002F>\n    \u003Ckd value=\"10.0\" \u002F>\n\n  \u003C\u002Fgazebo>\n\n  \u003Cgazebo>\n    \u003Cplugin name='diff_drive' filename='libgazebo_ros_diff_drive.so'>\n          \u003Cros>\n            \u003Cnamespace>\u002F\u003C\u002Fnamespace>\n            \u003Cremapping>cmd_vel:=cmd_vel\u003C\u002Fremapping>\n            \u003Cremapping>odom:=odom\u003C\u002Fremapping>\n          \u003C\u002Fros>\n          \u003Cupdate_rate>30\u003C\u002Fupdate_rate>\n\n          \u003Cleft_joint>left_wheel_joint\u003C\u002Fleft_joint>\n          \u003Cright_joint>right_wheel_joint\u003C\u002Fright_joint>\n\n          \u003Cwheel_separation>0.2\u003C\u002Fwheel_separation>\n          \u003Cwheel_diameter>0.065\u003C\u002Fwheel_diameter>\n\n          \u003Cmax_wheel_torque>20\u003C\u002Fmax_wheel_torque>\n          \u003Cmax_wheel_acceleration>1.0\u003C\u002Fmax_wheel_acceleration>\n\n          \u003Cpublish_odom>true\u003C\u002Fpublish_odom>\n          \u003Cpublish_odom_tf>true\u003C\u002Fpublish_odom_tf>\n          \u003Cpublish_wheel_tf>false\u003C\u002Fpublish_wheel_tf>\n          \u003Codometry_frame>odom\u003C\u002Fodometry_frame>\n          \u003Crobot_base_frame>base_footprint\u003C\u002Frobot_base_frame>\n      \u003C\u002Fplugin>\n\n      \u003Cplugin name=\"fishbot_joint_state\" filename=\"libgazebo_ros_joint_state_publisher.so\">\n        \u003Cros>\n          \u003Cremapping>~\u002Fout:=joint_states\u003C\u002Fremapping>\n        \u003C\u002Fros>\n        \u003Cupdate_rate>30\u003C\u002Fupdate_rate>\n        \u003Cjoint_name>right_wheel_joint\u003C\u002Fjoint_name>\n        \u003Cjoint_name>left_wheel_joint\u003C\u002Fjoint_name>\n      \u003C\u002Fplugin>    \n      \u003C\u002Fgazebo> \n\n      \u003Cgazebo reference=\"laser_link\">\n        \u003Cmaterial>Gazebo\u002FBlack\u003C\u002Fmaterial>\n      \u003C\u002Fgazebo>\n\n    \u003Cgazebo reference=\"imu_link\">\n      \u003Csensor name=\"imu_sensor\" type=\"imu\">\n      \u003Cplugin filename=\"libgazebo_ros_imu_sensor.so\" name=\"imu_plugin\">\n          \u003Cros>\n            \u003Cnamespace>\u002F\u003C\u002Fnamespace>\n            \u003Cremapping>~\u002Fout:=imu\u003C\u002Fremapping>\n          \u003C\u002Fros>\n          \u003Cinitial_orientation_as_reference>false\u003C\u002Finitial_orientation_as_reference>\n        \u003C\u002Fplugin>\n        \u003Calways_on>true\u003C\u002Falways_on>\n        \u003Cupdate_rate>100\u003C\u002Fupdate_rate>\n        \u003Cvisualize>true\u003C\u002Fvisualize>\n        \u003Cimu>\n          \u003Cangular_velocity>\n            \u003Cx>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C\u002Fmean>\n                \u003Cstddev>2e-4\u003C\u002Fstddev>\n                \u003Cbias_mean>0.0000075\u003C\u002Fbias_mean>\n                \u003Cbias_stddev>0.0000008\u003C\u002Fbias_stddev>\n              \u003C\u002Fnoise>\n            \u003C\u002Fx>\n            \u003Cy>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C\u002Fmean>\n                \u003Cstddev>2e-4\u003C\u002Fstddev>\n                \u003Cbias_mean>0.0000075\u003C\u002Fbias_mean>\n                \u003Cbias_stddev>0.0000008\u003C\u002Fbias_stddev>\n              \u003C\u002Fnoise>\n            \u003C\u002Fy>\n            \u003Cz>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C\u002Fmean>\n                \u003Cstddev>2e-4\u003C\u002Fstddev>\n                \u003Cbias_mean>0.0000075\u003C\u002Fbias_mean>\n                \u003Cbias_stddev>0.0000008\u003C\u002Fbias_stddev>\n              \u003C\u002Fnoise>\n            \u003C\u002Fz>\n          \u003C\u002Fangular_velocity>\n          \u003Clinear_acceleration>\n            \u003Cx>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C\u002Fmean>\n                \u003Cstddev>1.7e-2\u003C\u002Fstddev>\n                \u003Cbias_mean>0.1\u003C\u002Fbias_mean>\n                \u003Cbias_stddev>0.001\u003C\u002Fbias_stddev>\n              \u003C\u002Fnoise>\n            \u003C\u002Fx>\n            \u003Cy>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C\u002Fmean>\n                \u003Cstddev>1.7e-2\u003C\u002Fstddev>\n                \u003Cbias_mean>0.1\u003C\u002Fbias_mean>\n                \u003Cbias_stddev>0.001\u003C\u002Fbias_stddev>\n              \u003C\u002Fnoise>\n            \u003C\u002Fy>\n            \u003Cz>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C\u002Fmean>\n                \u003Cstddev>1.7e-2\u003C\u002Fstddev>\n                \u003Cbias_mean>0.1\u003C\u002Fbias_mean>\n                \u003Cbias_stddev>0.001\u003C\u002Fbias_stddev>\n              \u003C\u002Fnoise>\n            \u003C\u002Fz>\n          \u003C\u002Flinear_acceleration>\n        \u003C\u002Fimu>\n      \u003C\u002Fsensor>\n    \u003C\u002Fgazebo>\n\n    \u003Cgazebo reference=\"laser_link\">\n      \u003Csensor name=\"laser_sensor\" type=\"ray\">\n      \u003Calways_on>true\u003C\u002Falways_on>\n      \u003Cvisualize>true\u003C\u002Fvisualize>\n      \u003Cupdate_rate>5\u003C\u002Fupdate_rate>\n      \u003Cpose>0 0 0.075 0 0 0\u003C\u002Fpose>\n      \u003Cray>\n          \u003Cscan>\n            \u003Chorizontal>\n              \u003Csamples>360\u003C\u002Fsamples>\n              \u003Cresolution>1.000000\u003C\u002Fresolution>\n              \u003Cmin_angle>0.000000\u003C\u002Fmin_angle>\n              \u003Cmax_angle>6.280000\u003C\u002Fmax_angle>\n            \u003C\u002Fhorizontal>\n          \u003C\u002Fscan>\n          \u003Crange>\n            \u003Cmin>0.120000\u003C\u002Fmin>\n            \u003Cmax>3.5\u003C\u002Fmax>\n            \u003Cresolution>0.015000\u003C\u002Fresolution>\n          \u003C\u002Frange>\n          \u003Cnoise>\n            \u003Ctype>gaussian\u003C\u002Ftype>\n            \u003Cmean>0.0\u003C\u002Fmean>\n            \u003Cstddev>0.01\u003C\u002Fstddev>\n          \u003C\u002Fnoise>\n      \u003C\u002Fray>\n\n      \u003Cplugin name=\"laserscan\" filename=\"libgazebo_ros_ray_sensor.so\">\n        \u003Cros>\n\n          \u003Cremapping>~\u002Fout:=scan\u003C\u002Fremapping>\n        \u003C\u002Fros>\n        \u003Coutput_type>sensor_msgs\u002FLaserScan\u003C\u002Foutput_type>\n        \u003Cframe_name>laser_link\u003C\u002Fframe_name>\n      \u003C\u002Fplugin>\n      \u003C\u002Fsensor>\n    \u003C\u002Fgazebo>\n\n\u003C\u002Frobot>\n","xml",[100,1182,1183,1202,1221,1225,1243,1247,1270,1287,1303,1328,1337,1341,1355,1365,1387,1396,1422,1431,1447,1466,1474,1483,1492,1512,1520,1540,1548,1562,1576,1584,1592,1601,1618,1672,1680,1688,1692,1707,1715,1735,1743,1764,1772,1787,1802,1810,1818,1826,1846,1854,1874,1883,1898,1913,1922,1931,1940,1956,2004,2013,2022,2027,2049,2065,2080,2096,2105,2110,2126,2135,2156,2165,2184,2193,2202,2211,2232,2241,2256,2265,2274,2283,2298,2343,2352,2361,2366,2388,2403,2418,2434,2443,2448,2464,2473,2495,2504,2527,2537,2552,2568,2578,2587,2596,2617,2626,2647,2656,2671,2686,2695,2704,2713,2728,2773,2782,2791,2796,2812,2821,2842,2851,2872,2881,2896,2911,2920,2929,2938,2959,2968,2989,2998,3013,3028,3037,3046,3055,3070,3115,3124,3133,3138,3161,3176,3191,3207,3224,3233,3238,3260,3275,3290,3306,3321,3330,3335,3351,3360,3381,3390,3407,3416,3431,3446,3455,3464,3473,3494,3503,3518,3527,3542,3557,3566,3575,3584,3599,3644,3653,3662,3667,3689,3704,3719,3735,3750,3759,3764,3780,3794,3803,3808,3823,3840,3856,3873,3890,3895,3904,3909,3918,3943,3953,3968,3983,3997,4006,4021,4026,4041,4056,4061,4076,4091,4096,4111,4126,4131,4146,4160,4175,4190,4205,4214,4219,4242,4251,4265,4274,4287,4301,4314,4324,4334,4339,4354,4367,4376,4381,4396,4420,4443,4452,4465,4479,4488,4502,4511,4525,4539,4553,4563,4573,4583,4600,4615,4630,4645,4660,4670,4680,4690,4705,4718,4731,4744,4757,4766,4775,4785,4800,4813,4826,4839,4852,4861,4870,4879,4889,4898,4913,4926,4940,4954,4968,4977,4986,4995,5010,5023,5036,5049,5062,5071,5080,5089,5104,5117,5130,5143,5156,5165,5174,5183,5192,5201,5210,5215,5230,5253,5266,5279,5293,5308,5318,5328,5338,5353,5368,5383,5398,5407,5416,5426,5441,5456,5470,5479,5488,5503,5516,5530,5539,5548,5553,5576,5585,5590,5604,5613,5628,5643,5652,5661,5670,5675],{"__ignoreMap":59},[103,1184,1185,1188,1191,1194,1196,1199],{"class":105,"line":106},[103,1186,1187],{"class":170},"\u003C?",[103,1189,1180],{"class":1190},"s9eBZ",[103,1192,1193],{"class":109}," version",[103,1195,563],{"class":170},[103,1197,1198],{"class":113},"\"1.0\"",[103,1200,1201],{"class":170},"?>\n",[103,1203,1204,1207,1210,1213,1215,1218],{"class":105,"line":231},[103,1205,1206],{"class":170},"\u003C",[103,1208,1209],{"class":1190},"robot",[103,1211,1212],{"class":109}," name",[103,1214,563],{"class":170},[103,1216,1217],{"class":113},"\"fishbot\"",[103,1219,1220],{"class":170},">\n",[103,1222,1223],{"class":105,"line":259},[103,1224,309],{"emptyLinePlaceholder":308},[103,1226,1227,1230,1233,1235,1237,1240],{"class":105,"line":274},[103,1228,1229],{"class":170},"  \u003C",[103,1231,1232],{"class":1190},"link",[103,1234,1212],{"class":109},[103,1236,563],{"class":170},[103,1238,1239],{"class":113},"\"base_footprint\"",[103,1241,1242],{"class":170},"\u002F>\n",[103,1244,1245],{"class":105,"line":286},[103,1246,309],{"emptyLinePlaceholder":308},[103,1248,1249,1251,1254,1256,1258,1261,1263,1265,1268],{"class":105,"line":305},[103,1250,1229],{"class":170},[103,1252,1253],{"class":1190},"joint",[103,1255,1212],{"class":109},[103,1257,563],{"class":170},[103,1259,1260],{"class":113},"\"base_joint\"",[103,1262,1114],{"class":109},[103,1264,563],{"class":170},[103,1266,1267],{"class":113},"\"fixed\"",[103,1269,1220],{"class":170},[103,1271,1272,1275,1278,1281,1283,1285],{"class":105,"line":312},[103,1273,1274],{"class":170},"    \u003C",[103,1276,1277],{"class":1190},"parent",[103,1279,1280],{"class":109}," link",[103,1282,563],{"class":170},[103,1284,1239],{"class":113},[103,1286,1242],{"class":170},[103,1288,1289,1291,1294,1296,1298,1301],{"class":105,"line":327},[103,1290,1274],{"class":170},[103,1292,1293],{"class":1190},"child",[103,1295,1280],{"class":109},[103,1297,563],{"class":170},[103,1299,1300],{"class":113},"\"base_link\"",[103,1302,1242],{"class":170},[103,1304,1305,1307,1310,1313,1315,1318,1321,1323,1326],{"class":105,"line":348},[103,1306,1274],{"class":170},[103,1308,1309],{"class":1190},"origin",[103,1311,1312],{"class":109}," xyz",[103,1314,563],{"class":170},[103,1316,1317],{"class":113},"\"0.0 0.0 0.076\"",[103,1319,1320],{"class":109}," rpy",[103,1322,563],{"class":170},[103,1324,1325],{"class":113},"\"0 0 0\"",[103,1327,1242],{"class":170},[103,1329,1330,1333,1335],{"class":105,"line":359},[103,1331,1332],{"class":170},"  \u003C\u002F",[103,1334,1253],{"class":1190},[103,1336,1220],{"class":170},[103,1338,1339],{"class":105,"line":368},[103,1340,309],{"emptyLinePlaceholder":308},[103,1342,1343,1345,1347,1349,1351,1353],{"class":105,"line":383},[103,1344,1229],{"class":170},[103,1346,1232],{"class":1190},[103,1348,1212],{"class":109},[103,1350,563],{"class":170},[103,1352,1300],{"class":113},[103,1354,1220],{"class":170},[103,1356,1357,1360,1363],{"class":105,"line":388},[103,1358,1359],{"class":170},"          \u003C",[103,1361,1362],{"class":1190},"visual",[103,1364,1220],{"class":170},[103,1366,1367,1370,1372,1374,1376,1379,1381,1383,1385],{"class":105,"line":394},[103,1368,1369],{"class":170},"      \u003C",[103,1371,1309],{"class":1190},[103,1373,1312],{"class":109},[103,1375,563],{"class":170},[103,1377,1378],{"class":113},"\"0 0 0.0\"",[103,1380,1320],{"class":109},[103,1382,563],{"class":170},[103,1384,1325],{"class":113},[103,1386,1242],{"class":170},[103,1388,1389,1391,1394],{"class":105,"line":399},[103,1390,1369],{"class":170},[103,1392,1393],{"class":1190},"geometry",[103,1395,1220],{"class":170},[103,1397,1398,1401,1404,1407,1409,1412,1415,1417,1420],{"class":105,"line":405},[103,1399,1400],{"class":170},"                \u003C",[103,1402,1403],{"class":1190},"cylinder",[103,1405,1406],{"class":109}," length",[103,1408,563],{"class":170},[103,1410,1411],{"class":113},"\"0.12\"",[103,1413,1414],{"class":109}," radius",[103,1416,563],{"class":170},[103,1418,1419],{"class":113},"\"0.10\"",[103,1421,1242],{"class":170},[103,1423,1424,1427,1429],{"class":105,"line":410},[103,1425,1426],{"class":170},"      \u003C\u002F",[103,1428,1393],{"class":1190},[103,1430,1220],{"class":170},[103,1432,1433,1435,1438,1440,1442,1445],{"class":105,"line":416},[103,1434,1369],{"class":170},[103,1436,1437],{"class":1190},"material",[103,1439,1212],{"class":109},[103,1441,563],{"class":170},[103,1443,1444],{"class":113},"\"blue\"",[103,1446,1220],{"class":170},[103,1448,1449,1452,1455,1458,1460,1463],{"class":105,"line":421},[103,1450,1451],{"class":170},"              \u003C",[103,1453,1454],{"class":1190},"color",[103,1456,1457],{"class":109}," rgba",[103,1459,563],{"class":170},[103,1461,1462],{"class":113},"\"0.1 0.1 1.0 0.5\"",[103,1464,1465],{"class":170}," \u002F> \n",[103,1467,1468,1470,1472],{"class":105,"line":427},[103,1469,1426],{"class":170},[103,1471,1437],{"class":1190},[103,1473,1220],{"class":170},[103,1475,1476,1479,1481],{"class":105,"line":432},[103,1477,1478],{"class":170},"    \u003C\u002F",[103,1480,1362],{"class":1190},[103,1482,1220],{"class":170},[103,1484,1485,1487,1490],{"class":105,"line":438},[103,1486,1274],{"class":170},[103,1488,1489],{"class":1190},"collision",[103,1491,1220],{"class":170},[103,1493,1494,1496,1498,1500,1502,1504,1506,1508,1510],{"class":105,"line":443},[103,1495,1369],{"class":170},[103,1497,1309],{"class":1190},[103,1499,1312],{"class":109},[103,1501,563],{"class":170},[103,1503,1378],{"class":113},[103,1505,1320],{"class":109},[103,1507,563],{"class":170},[103,1509,1325],{"class":113},[103,1511,1242],{"class":170},[103,1513,1514,1516,1518],{"class":105,"line":449},[103,1515,1369],{"class":170},[103,1517,1393],{"class":1190},[103,1519,1220],{"class":170},[103,1521,1522,1524,1526,1528,1530,1532,1534,1536,1538],{"class":105,"line":454},[103,1523,1400],{"class":170},[103,1525,1403],{"class":1190},[103,1527,1406],{"class":109},[103,1529,563],{"class":170},[103,1531,1411],{"class":113},[103,1533,1414],{"class":109},[103,1535,563],{"class":170},[103,1537,1419],{"class":113},[103,1539,1242],{"class":170},[103,1541,1542,1544,1546],{"class":105,"line":460},[103,1543,1426],{"class":170},[103,1545,1393],{"class":1190},[103,1547,1220],{"class":170},[103,1549,1550,1552,1554,1556,1558,1560],{"class":105,"line":465},[103,1551,1369],{"class":170},[103,1553,1437],{"class":1190},[103,1555,1212],{"class":109},[103,1557,563],{"class":170},[103,1559,1444],{"class":113},[103,1561,1220],{"class":170},[103,1563,1564,1566,1568,1570,1572,1574],{"class":105,"line":471},[103,1565,1451],{"class":170},[103,1567,1454],{"class":1190},[103,1569,1457],{"class":109},[103,1571,563],{"class":170},[103,1573,1462],{"class":113},[103,1575,1465],{"class":170},[103,1577,1578,1580,1582],{"class":105,"line":476},[103,1579,1426],{"class":170},[103,1581,1437],{"class":1190},[103,1583,1220],{"class":170},[103,1585,1586,1588,1590],{"class":105,"line":504},[103,1587,1478],{"class":170},[103,1589,1489],{"class":1190},[103,1591,1220],{"class":170},[103,1593,1594,1596,1599],{"class":105,"line":530},[103,1595,1274],{"class":170},[103,1597,1598],{"class":1190},"inertial",[103,1600,1220],{"class":170},[103,1602,1603,1605,1608,1611,1613,1616],{"class":105,"line":574},[103,1604,1369],{"class":170},[103,1606,1607],{"class":1190},"mass",[103,1609,1610],{"class":109}," value",[103,1612,563],{"class":170},[103,1614,1615],{"class":113},"\"0.2\"",[103,1617,1242],{"class":170},[103,1619,1620,1622,1625,1628,1630,1633,1636,1638,1641,1644,1646,1648,1651,1653,1655,1658,1660,1662,1665,1667,1670],{"class":105,"line":579},[103,1621,1369],{"class":170},[103,1623,1624],{"class":1190},"inertia",[103,1626,1627],{"class":109}," ixx",[103,1629,563],{"class":170},[103,1631,1632],{"class":113},"\"0.0122666\"",[103,1634,1635],{"class":109}," ixy",[103,1637,563],{"class":170},[103,1639,1640],{"class":113},"\"0\"",[103,1642,1643],{"class":109}," ixz",[103,1645,563],{"class":170},[103,1647,1640],{"class":113},[103,1649,1650],{"class":109}," iyy",[103,1652,563],{"class":170},[103,1654,1632],{"class":113},[103,1656,1657],{"class":109}," iyz",[103,1659,563],{"class":170},[103,1661,1640],{"class":113},[103,1663,1664],{"class":109}," izz",[103,1666,563],{"class":170},[103,1668,1669],{"class":113},"\"0.02\"",[103,1671,1242],{"class":170},[103,1673,1674,1676,1678],{"class":105,"line":590},[103,1675,1478],{"class":170},[103,1677,1598],{"class":1190},[103,1679,1220],{"class":170},[103,1681,1682,1684,1686],{"class":105,"line":635},[103,1683,1332],{"class":170},[103,1685,1232],{"class":1190},[103,1687,1220],{"class":170},[103,1689,1690],{"class":105,"line":665},[103,1691,309],{"emptyLinePlaceholder":308},[103,1693,1694,1696,1698,1700,1702,1705],{"class":105,"line":677},[103,1695,1229],{"class":170},[103,1697,1232],{"class":1190},[103,1699,1212],{"class":109},[103,1701,563],{"class":170},[103,1703,1704],{"class":113},"\"laser_link\"",[103,1706,1220],{"class":170},[103,1708,1709,1711,1713],{"class":105,"line":799},[103,1710,1274],{"class":170},[103,1712,1362],{"class":1190},[103,1714,1220],{"class":170},[103,1716,1717,1719,1721,1723,1725,1727,1729,1731,1733],{"class":105,"line":805},[103,1718,1369],{"class":170},[103,1720,1309],{"class":1190},[103,1722,1312],{"class":109},[103,1724,563],{"class":170},[103,1726,1325],{"class":113},[103,1728,1320],{"class":109},[103,1730,563],{"class":170},[103,1732,1325],{"class":113},[103,1734,1242],{"class":170},[103,1736,1737,1739,1741],{"class":105,"line":817},[103,1738,1369],{"class":170},[103,1740,1393],{"class":1190},[103,1742,1220],{"class":170},[103,1744,1745,1748,1750,1752,1754,1756,1758,1760,1762],{"class":105,"line":823},[103,1746,1747],{"class":170},"        \u003C",[103,1749,1403],{"class":1190},[103,1751,1406],{"class":109},[103,1753,563],{"class":170},[103,1755,1669],{"class":113},[103,1757,1414],{"class":109},[103,1759,563],{"class":170},[103,1761,1669],{"class":113},[103,1763,1242],{"class":170},[103,1765,1766,1768,1770],{"class":105,"line":829},[103,1767,1426],{"class":170},[103,1769,1393],{"class":1190},[103,1771,1220],{"class":170},[103,1773,1774,1776,1778,1780,1782,1785],{"class":105,"line":835},[103,1775,1369],{"class":170},[103,1777,1437],{"class":1190},[103,1779,1212],{"class":109},[103,1781,563],{"class":170},[103,1783,1784],{"class":113},"\"black\"",[103,1786,1220],{"class":170},[103,1788,1789,1791,1793,1795,1797,1800],{"class":105,"line":841},[103,1790,1747],{"class":170},[103,1792,1454],{"class":1190},[103,1794,1457],{"class":109},[103,1796,563],{"class":170},[103,1798,1799],{"class":113},"\"0.0 0.0 0.0 0.5\"",[103,1801,1465],{"class":170},[103,1803,1804,1806,1808],{"class":105,"line":864},[103,1805,1426],{"class":170},[103,1807,1437],{"class":1190},[103,1809,1220],{"class":170},[103,1811,1812,1814,1816],{"class":105,"line":907},[103,1813,1478],{"class":170},[103,1815,1362],{"class":1190},[103,1817,1220],{"class":170},[103,1819,1820,1822,1824],{"class":105,"line":944},[103,1821,1274],{"class":170},[103,1823,1489],{"class":1190},[103,1825,1220],{"class":170},[103,1827,1828,1830,1832,1834,1836,1838,1840,1842,1844],{"class":105,"line":949},[103,1829,1369],{"class":170},[103,1831,1309],{"class":1190},[103,1833,1312],{"class":109},[103,1835,563],{"class":170},[103,1837,1325],{"class":113},[103,1839,1320],{"class":109},[103,1841,563],{"class":170},[103,1843,1325],{"class":113},[103,1845,1242],{"class":170},[103,1847,1848,1850,1852],{"class":105,"line":973},[103,1849,1369],{"class":170},[103,1851,1393],{"class":1190},[103,1853,1220],{"class":170},[103,1855,1856,1858,1860,1862,1864,1866,1868,1870,1872],{"class":105,"line":997},[103,1857,1747],{"class":170},[103,1859,1403],{"class":1190},[103,1861,1406],{"class":109},[103,1863,563],{"class":170},[103,1865,1669],{"class":113},[103,1867,1414],{"class":109},[103,1869,563],{"class":170},[103,1871,1669],{"class":113},[103,1873,1242],{"class":170},[103,1875,1877,1879,1881],{"class":105,"line":1876},51,[103,1878,1426],{"class":170},[103,1880,1393],{"class":1190},[103,1882,1220],{"class":170},[103,1884,1886,1888,1890,1892,1894,1896],{"class":105,"line":1885},52,[103,1887,1369],{"class":170},[103,1889,1437],{"class":1190},[103,1891,1212],{"class":109},[103,1893,563],{"class":170},[103,1895,1784],{"class":113},[103,1897,1220],{"class":170},[103,1899,1901,1903,1905,1907,1909,1911],{"class":105,"line":1900},53,[103,1902,1747],{"class":170},[103,1904,1454],{"class":1190},[103,1906,1457],{"class":109},[103,1908,563],{"class":170},[103,1910,1799],{"class":113},[103,1912,1465],{"class":170},[103,1914,1916,1918,1920],{"class":105,"line":1915},54,[103,1917,1426],{"class":170},[103,1919,1437],{"class":1190},[103,1921,1220],{"class":170},[103,1923,1925,1927,1929],{"class":105,"line":1924},55,[103,1926,1478],{"class":170},[103,1928,1489],{"class":1190},[103,1930,1220],{"class":170},[103,1932,1934,1936,1938],{"class":105,"line":1933},56,[103,1935,1274],{"class":170},[103,1937,1598],{"class":1190},[103,1939,1220],{"class":170},[103,1941,1943,1945,1947,1949,1951,1954],{"class":105,"line":1942},57,[103,1944,1274],{"class":170},[103,1946,1607],{"class":1190},[103,1948,1610],{"class":109},[103,1950,563],{"class":170},[103,1952,1953],{"class":113},"\"0.1\"",[103,1955,1242],{"class":170},[103,1957,1959,1961,1963,1965,1967,1970,1972,1974,1976,1978,1980,1982,1984,1986,1989,1991,1993,1995,1997,1999,2002],{"class":105,"line":1958},58,[103,1960,1369],{"class":170},[103,1962,1624],{"class":1190},[103,1964,1627],{"class":109},[103,1966,563],{"class":170},[103,1968,1969],{"class":113},"\"0.000190416666667\"",[103,1971,1635],{"class":109},[103,1973,563],{"class":170},[103,1975,1640],{"class":113},[103,1977,1643],{"class":109},[103,1979,563],{"class":170},[103,1981,1640],{"class":113},[103,1983,1650],{"class":109},[103,1985,563],{"class":170},[103,1987,1988],{"class":113},"\"0.0001904\"",[103,1990,1657],{"class":109},[103,1992,563],{"class":170},[103,1994,1640],{"class":113},[103,1996,1664],{"class":109},[103,1998,563],{"class":170},[103,2000,2001],{"class":113},"\"0.00036\"",[103,2003,1242],{"class":170},[103,2005,2007,2009,2011],{"class":105,"line":2006},59,[103,2008,1478],{"class":170},[103,2010,1598],{"class":1190},[103,2012,1220],{"class":170},[103,2014,2016,2018,2020],{"class":105,"line":2015},60,[103,2017,1332],{"class":170},[103,2019,1232],{"class":1190},[103,2021,1220],{"class":170},[103,2023,2025],{"class":105,"line":2024},61,[103,2026,309],{"emptyLinePlaceholder":308},[103,2028,2030,2032,2034,2036,2038,2041,2043,2045,2047],{"class":105,"line":2029},62,[103,2031,1229],{"class":170},[103,2033,1253],{"class":1190},[103,2035,1212],{"class":109},[103,2037,563],{"class":170},[103,2039,2040],{"class":113},"\"laser_joint\"",[103,2042,1114],{"class":109},[103,2044,563],{"class":170},[103,2046,1267],{"class":113},[103,2048,1220],{"class":170},[103,2050,2052,2054,2056,2058,2060,2062],{"class":105,"line":2051},63,[103,2053,1369],{"class":170},[103,2055,1277],{"class":1190},[103,2057,1280],{"class":109},[103,2059,563],{"class":170},[103,2061,1300],{"class":113},[103,2063,2064],{"class":170}," \u002F>\n",[103,2066,2068,2070,2072,2074,2076,2078],{"class":105,"line":2067},64,[103,2069,1369],{"class":170},[103,2071,1293],{"class":1190},[103,2073,1280],{"class":109},[103,2075,563],{"class":170},[103,2077,1704],{"class":113},[103,2079,2064],{"class":170},[103,2081,2083,2085,2087,2089,2091,2094],{"class":105,"line":2082},65,[103,2084,1369],{"class":170},[103,2086,1309],{"class":1190},[103,2088,1312],{"class":109},[103,2090,563],{"class":170},[103,2092,2093],{"class":113},"\"0 0 0.075\"",[103,2095,2064],{"class":170},[103,2097,2099,2101,2103],{"class":105,"line":2098},66,[103,2100,1332],{"class":170},[103,2102,1253],{"class":1190},[103,2104,1220],{"class":170},[103,2106,2108],{"class":105,"line":2107},67,[103,2109,309],{"emptyLinePlaceholder":308},[103,2111,2113,2115,2117,2119,2121,2124],{"class":105,"line":2112},68,[103,2114,1229],{"class":170},[103,2116,1232],{"class":1190},[103,2118,1212],{"class":109},[103,2120,563],{"class":170},[103,2122,2123],{"class":113},"\"imu_link\"",[103,2125,1220],{"class":170},[103,2127,2129,2131,2133],{"class":105,"line":2128},69,[103,2130,1359],{"class":170},[103,2132,1362],{"class":1190},[103,2134,1220],{"class":170},[103,2136,2138,2140,2142,2144,2146,2148,2150,2152,2154],{"class":105,"line":2137},70,[103,2139,1369],{"class":170},[103,2141,1309],{"class":1190},[103,2143,1312],{"class":109},[103,2145,563],{"class":170},[103,2147,1378],{"class":113},[103,2149,1320],{"class":109},[103,2151,563],{"class":170},[103,2153,1325],{"class":113},[103,2155,1242],{"class":170},[103,2157,2159,2161,2163],{"class":105,"line":2158},71,[103,2160,1369],{"class":170},[103,2162,1393],{"class":1190},[103,2164,1220],{"class":170},[103,2166,2168,2171,2174,2177,2179,2182],{"class":105,"line":2167},72,[103,2169,2170],{"class":170},"                    \u003C",[103,2172,2173],{"class":1190},"box",[103,2175,2176],{"class":109}," size",[103,2178,563],{"class":170},[103,2180,2181],{"class":113},"\"0.02 0.02 0.02\"",[103,2183,1242],{"class":170},[103,2185,2187,2189,2191],{"class":105,"line":2186},73,[103,2188,1426],{"class":170},[103,2190,1393],{"class":1190},[103,2192,1220],{"class":170},[103,2194,2196,2198,2200],{"class":105,"line":2195},74,[103,2197,1478],{"class":170},[103,2199,1362],{"class":1190},[103,2201,1220],{"class":170},[103,2203,2205,2207,2209],{"class":105,"line":2204},75,[103,2206,1274],{"class":170},[103,2208,1489],{"class":1190},[103,2210,1220],{"class":170},[103,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230],{"class":105,"line":2213},76,[103,2215,1369],{"class":170},[103,2217,1309],{"class":1190},[103,2219,1312],{"class":109},[103,2221,563],{"class":170},[103,2223,1378],{"class":113},[103,2225,1320],{"class":109},[103,2227,563],{"class":170},[103,2229,1325],{"class":113},[103,2231,1242],{"class":170},[103,2233,2235,2237,2239],{"class":105,"line":2234},77,[103,2236,1369],{"class":170},[103,2238,1393],{"class":1190},[103,2240,1220],{"class":170},[103,2242,2244,2246,2248,2250,2252,2254],{"class":105,"line":2243},78,[103,2245,2170],{"class":170},[103,2247,2173],{"class":1190},[103,2249,2176],{"class":109},[103,2251,563],{"class":170},[103,2253,2181],{"class":113},[103,2255,1242],{"class":170},[103,2257,2259,2261,2263],{"class":105,"line":2258},79,[103,2260,1426],{"class":170},[103,2262,1393],{"class":1190},[103,2264,1220],{"class":170},[103,2266,2268,2270,2272],{"class":105,"line":2267},80,[103,2269,1478],{"class":170},[103,2271,1489],{"class":1190},[103,2273,1220],{"class":170},[103,2275,2277,2279,2281],{"class":105,"line":2276},81,[103,2278,1274],{"class":170},[103,2280,1598],{"class":1190},[103,2282,1220],{"class":170},[103,2284,2286,2288,2290,2292,2294,2296],{"class":105,"line":2285},82,[103,2287,1369],{"class":170},[103,2289,1607],{"class":1190},[103,2291,1610],{"class":109},[103,2293,563],{"class":170},[103,2295,1953],{"class":113},[103,2297,1242],{"class":170},[103,2299,2301,2303,2305,2307,2309,2311,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341],{"class":105,"line":2300},83,[103,2302,1747],{"class":170},[103,2304,1624],{"class":1190},[103,2306,1627],{"class":109},[103,2308,563],{"class":170},[103,2310,1969],{"class":113},[103,2312,1635],{"class":109},[103,2314,563],{"class":170},[103,2316,1640],{"class":113},[103,2318,1643],{"class":109},[103,2320,563],{"class":170},[103,2322,1640],{"class":113},[103,2324,1650],{"class":109},[103,2326,563],{"class":170},[103,2328,1988],{"class":113},[103,2330,1657],{"class":109},[103,2332,563],{"class":170},[103,2334,1640],{"class":113},[103,2336,1664],{"class":109},[103,2338,563],{"class":170},[103,2340,2001],{"class":113},[103,2342,1242],{"class":170},[103,2344,2346,2348,2350],{"class":105,"line":2345},84,[103,2347,1426],{"class":170},[103,2349,1598],{"class":1190},[103,2351,1220],{"class":170},[103,2353,2355,2357,2359],{"class":105,"line":2354},85,[103,2356,1332],{"class":170},[103,2358,1232],{"class":1190},[103,2360,1220],{"class":170},[103,2362,2364],{"class":105,"line":2363},86,[103,2365,309],{"emptyLinePlaceholder":308},[103,2367,2369,2371,2373,2375,2377,2380,2382,2384,2386],{"class":105,"line":2368},87,[103,2370,1229],{"class":170},[103,2372,1253],{"class":1190},[103,2374,1212],{"class":109},[103,2376,563],{"class":170},[103,2378,2379],{"class":113},"\"imu_joint\"",[103,2381,1114],{"class":109},[103,2383,563],{"class":170},[103,2385,1267],{"class":113},[103,2387,1220],{"class":170},[103,2389,2391,2393,2395,2397,2399,2401],{"class":105,"line":2390},88,[103,2392,1369],{"class":170},[103,2394,1277],{"class":1190},[103,2396,1280],{"class":109},[103,2398,563],{"class":170},[103,2400,1300],{"class":113},[103,2402,2064],{"class":170},[103,2404,2406,2408,2410,2412,2414,2416],{"class":105,"line":2405},89,[103,2407,1369],{"class":170},[103,2409,1293],{"class":1190},[103,2411,1280],{"class":109},[103,2413,563],{"class":170},[103,2415,2123],{"class":113},[103,2417,2064],{"class":170},[103,2419,2421,2423,2425,2427,2429,2432],{"class":105,"line":2420},90,[103,2422,1369],{"class":170},[103,2424,1309],{"class":1190},[103,2426,1312],{"class":109},[103,2428,563],{"class":170},[103,2430,2431],{"class":113},"\"0 0 0.02\"",[103,2433,2064],{"class":170},[103,2435,2437,2439,2441],{"class":105,"line":2436},91,[103,2438,1332],{"class":170},[103,2440,1253],{"class":1190},[103,2442,1220],{"class":170},[103,2444,2446],{"class":105,"line":2445},92,[103,2447,309],{"emptyLinePlaceholder":308},[103,2449,2451,2453,2455,2457,2459,2462],{"class":105,"line":2450},93,[103,2452,1229],{"class":170},[103,2454,1232],{"class":1190},[103,2456,1212],{"class":109},[103,2458,563],{"class":170},[103,2460,2461],{"class":113},"\"left_wheel_link\"",[103,2463,1220],{"class":170},[103,2465,2467,2469,2471],{"class":105,"line":2466},94,[103,2468,1369],{"class":170},[103,2470,1362],{"class":1190},[103,2472,1220],{"class":170},[103,2474,2476,2478,2480,2482,2484,2486,2488,2490,2493],{"class":105,"line":2475},95,[103,2477,1747],{"class":170},[103,2479,1309],{"class":1190},[103,2481,1312],{"class":109},[103,2483,563],{"class":170},[103,2485,1325],{"class":113},[103,2487,1320],{"class":109},[103,2489,563],{"class":170},[103,2491,2492],{"class":113},"\"1.57079 0 0\"",[103,2494,1242],{"class":170},[103,2496,2498,2500,2502],{"class":105,"line":2497},96,[103,2499,1747],{"class":170},[103,2501,1393],{"class":1190},[103,2503,1220],{"class":170},[103,2505,2507,2509,2511,2513,2515,2518,2520,2522,2525],{"class":105,"line":2506},97,[103,2508,1359],{"class":170},[103,2510,1403],{"class":1190},[103,2512,1406],{"class":109},[103,2514,563],{"class":170},[103,2516,2517],{"class":113},"\"0.04\"",[103,2519,1414],{"class":109},[103,2521,563],{"class":170},[103,2523,2524],{"class":113},"\"0.032\"",[103,2526,1242],{"class":170},[103,2528,2530,2533,2535],{"class":105,"line":2529},98,[103,2531,2532],{"class":170},"        \u003C\u002F",[103,2534,1393],{"class":1190},[103,2536,1220],{"class":170},[103,2538,2540,2542,2544,2546,2548,2550],{"class":105,"line":2539},99,[103,2541,1359],{"class":170},[103,2543,1437],{"class":1190},[103,2545,1212],{"class":109},[103,2547,563],{"class":170},[103,2549,1784],{"class":113},[103,2551,1220],{"class":170},[103,2553,2555,2558,2560,2562,2564,2566],{"class":105,"line":2554},100,[103,2556,2557],{"class":170},"            \u003C",[103,2559,1454],{"class":1190},[103,2561,1457],{"class":109},[103,2563,563],{"class":170},[103,2565,1799],{"class":113},[103,2567,1465],{"class":170},[103,2569,2571,2574,2576],{"class":105,"line":2570},101,[103,2572,2573],{"class":170},"          \u003C\u002F",[103,2575,1437],{"class":1190},[103,2577,1220],{"class":170},[103,2579,2581,2583,2585],{"class":105,"line":2580},102,[103,2582,1426],{"class":170},[103,2584,1362],{"class":1190},[103,2586,1220],{"class":170},[103,2588,2590,2592,2594],{"class":105,"line":2589},103,[103,2591,1369],{"class":170},[103,2593,1489],{"class":1190},[103,2595,1220],{"class":170},[103,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615],{"class":105,"line":2598},104,[103,2600,1747],{"class":170},[103,2602,1309],{"class":1190},[103,2604,1312],{"class":109},[103,2606,563],{"class":170},[103,2608,1325],{"class":113},[103,2610,1320],{"class":109},[103,2612,563],{"class":170},[103,2614,2492],{"class":113},[103,2616,1242],{"class":170},[103,2618,2620,2622,2624],{"class":105,"line":2619},105,[103,2621,1747],{"class":170},[103,2623,1393],{"class":1190},[103,2625,1220],{"class":170},[103,2627,2629,2631,2633,2635,2637,2639,2641,2643,2645],{"class":105,"line":2628},106,[103,2630,1359],{"class":170},[103,2632,1403],{"class":1190},[103,2634,1406],{"class":109},[103,2636,563],{"class":170},[103,2638,2517],{"class":113},[103,2640,1414],{"class":109},[103,2642,563],{"class":170},[103,2644,2524],{"class":113},[103,2646,1242],{"class":170},[103,2648,2650,2652,2654],{"class":105,"line":2649},107,[103,2651,2532],{"class":170},[103,2653,1393],{"class":1190},[103,2655,1220],{"class":170},[103,2657,2659,2661,2663,2665,2667,2669],{"class":105,"line":2658},108,[103,2660,1359],{"class":170},[103,2662,1437],{"class":1190},[103,2664,1212],{"class":109},[103,2666,563],{"class":170},[103,2668,1784],{"class":113},[103,2670,1220],{"class":170},[103,2672,2674,2676,2678,2680,2682,2684],{"class":105,"line":2673},109,[103,2675,2557],{"class":170},[103,2677,1454],{"class":1190},[103,2679,1457],{"class":109},[103,2681,563],{"class":170},[103,2683,1799],{"class":113},[103,2685,1465],{"class":170},[103,2687,2689,2691,2693],{"class":105,"line":2688},110,[103,2690,2573],{"class":170},[103,2692,1437],{"class":1190},[103,2694,1220],{"class":170},[103,2696,2698,2700,2702],{"class":105,"line":2697},111,[103,2699,1426],{"class":170},[103,2701,1489],{"class":1190},[103,2703,1220],{"class":170},[103,2705,2707,2709,2711],{"class":105,"line":2706},112,[103,2708,1369],{"class":170},[103,2710,1598],{"class":1190},[103,2712,1220],{"class":170},[103,2714,2716,2718,2720,2722,2724,2726],{"class":105,"line":2715},113,[103,2717,1747],{"class":170},[103,2719,1607],{"class":1190},[103,2721,1610],{"class":109},[103,2723,563],{"class":170},[103,2725,1615],{"class":113},[103,2727,1242],{"class":170},[103,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769,2771],{"class":105,"line":2730},114,[103,2732,1359],{"class":170},[103,2734,1624],{"class":1190},[103,2736,1627],{"class":109},[103,2738,563],{"class":170},[103,2740,1969],{"class":113},[103,2742,1635],{"class":109},[103,2744,563],{"class":170},[103,2746,1640],{"class":113},[103,2748,1643],{"class":109},[103,2750,563],{"class":170},[103,2752,1640],{"class":113},[103,2754,1650],{"class":109},[103,2756,563],{"class":170},[103,2758,1988],{"class":113},[103,2760,1657],{"class":109},[103,2762,563],{"class":170},[103,2764,1640],{"class":113},[103,2766,1664],{"class":109},[103,2768,563],{"class":170},[103,2770,2001],{"class":113},[103,2772,1242],{"class":170},[103,2774,2776,2778,2780],{"class":105,"line":2775},115,[103,2777,2532],{"class":170},[103,2779,1598],{"class":1190},[103,2781,1220],{"class":170},[103,2783,2785,2787,2789],{"class":105,"line":2784},116,[103,2786,1332],{"class":170},[103,2788,1232],{"class":1190},[103,2790,1220],{"class":170},[103,2792,2794],{"class":105,"line":2793},117,[103,2795,309],{"emptyLinePlaceholder":308},[103,2797,2799,2801,2803,2805,2807,2810],{"class":105,"line":2798},118,[103,2800,1229],{"class":170},[103,2802,1232],{"class":1190},[103,2804,1212],{"class":109},[103,2806,563],{"class":170},[103,2808,2809],{"class":113},"\"right_wheel_link\"",[103,2811,1220],{"class":170},[103,2813,2815,2817,2819],{"class":105,"line":2814},119,[103,2816,1369],{"class":170},[103,2818,1362],{"class":1190},[103,2820,1220],{"class":170},[103,2822,2824,2826,2828,2830,2832,2834,2836,2838,2840],{"class":105,"line":2823},120,[103,2825,1747],{"class":170},[103,2827,1309],{"class":1190},[103,2829,1312],{"class":109},[103,2831,563],{"class":170},[103,2833,1325],{"class":113},[103,2835,1320],{"class":109},[103,2837,563],{"class":170},[103,2839,2492],{"class":113},[103,2841,1242],{"class":170},[103,2843,2845,2847,2849],{"class":105,"line":2844},121,[103,2846,1747],{"class":170},[103,2848,1393],{"class":1190},[103,2850,1220],{"class":170},[103,2852,2854,2856,2858,2860,2862,2864,2866,2868,2870],{"class":105,"line":2853},122,[103,2855,1359],{"class":170},[103,2857,1403],{"class":1190},[103,2859,1406],{"class":109},[103,2861,563],{"class":170},[103,2863,2517],{"class":113},[103,2865,1414],{"class":109},[103,2867,563],{"class":170},[103,2869,2524],{"class":113},[103,2871,1242],{"class":170},[103,2873,2875,2877,2879],{"class":105,"line":2874},123,[103,2876,2532],{"class":170},[103,2878,1393],{"class":1190},[103,2880,1220],{"class":170},[103,2882,2884,2886,2888,2890,2892,2894],{"class":105,"line":2883},124,[103,2885,1359],{"class":170},[103,2887,1437],{"class":1190},[103,2889,1212],{"class":109},[103,2891,563],{"class":170},[103,2893,1784],{"class":113},[103,2895,1220],{"class":170},[103,2897,2899,2901,2903,2905,2907,2909],{"class":105,"line":2898},125,[103,2900,2557],{"class":170},[103,2902,1454],{"class":1190},[103,2904,1457],{"class":109},[103,2906,563],{"class":170},[103,2908,1799],{"class":113},[103,2910,1465],{"class":170},[103,2912,2914,2916,2918],{"class":105,"line":2913},126,[103,2915,2573],{"class":170},[103,2917,1437],{"class":1190},[103,2919,1220],{"class":170},[103,2921,2923,2925,2927],{"class":105,"line":2922},127,[103,2924,1426],{"class":170},[103,2926,1362],{"class":1190},[103,2928,1220],{"class":170},[103,2930,2932,2934,2936],{"class":105,"line":2931},128,[103,2933,1369],{"class":170},[103,2935,1489],{"class":1190},[103,2937,1220],{"class":170},[103,2939,2941,2943,2945,2947,2949,2951,2953,2955,2957],{"class":105,"line":2940},129,[103,2942,1747],{"class":170},[103,2944,1309],{"class":1190},[103,2946,1312],{"class":109},[103,2948,563],{"class":170},[103,2950,1325],{"class":113},[103,2952,1320],{"class":109},[103,2954,563],{"class":170},[103,2956,2492],{"class":113},[103,2958,1242],{"class":170},[103,2960,2962,2964,2966],{"class":105,"line":2961},130,[103,2963,1747],{"class":170},[103,2965,1393],{"class":1190},[103,2967,1220],{"class":170},[103,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987],{"class":105,"line":2970},131,[103,2972,1359],{"class":170},[103,2974,1403],{"class":1190},[103,2976,1406],{"class":109},[103,2978,563],{"class":170},[103,2980,2517],{"class":113},[103,2982,1414],{"class":109},[103,2984,563],{"class":170},[103,2986,2524],{"class":113},[103,2988,1242],{"class":170},[103,2990,2992,2994,2996],{"class":105,"line":2991},132,[103,2993,2532],{"class":170},[103,2995,1393],{"class":1190},[103,2997,1220],{"class":170},[103,2999,3001,3003,3005,3007,3009,3011],{"class":105,"line":3000},133,[103,3002,1359],{"class":170},[103,3004,1437],{"class":1190},[103,3006,1212],{"class":109},[103,3008,563],{"class":170},[103,3010,1784],{"class":113},[103,3012,1220],{"class":170},[103,3014,3016,3018,3020,3022,3024,3026],{"class":105,"line":3015},134,[103,3017,2557],{"class":170},[103,3019,1454],{"class":1190},[103,3021,1457],{"class":109},[103,3023,563],{"class":170},[103,3025,1799],{"class":113},[103,3027,1465],{"class":170},[103,3029,3031,3033,3035],{"class":105,"line":3030},135,[103,3032,2573],{"class":170},[103,3034,1437],{"class":1190},[103,3036,1220],{"class":170},[103,3038,3040,3042,3044],{"class":105,"line":3039},136,[103,3041,1426],{"class":170},[103,3043,1489],{"class":1190},[103,3045,1220],{"class":170},[103,3047,3049,3051,3053],{"class":105,"line":3048},137,[103,3050,1369],{"class":170},[103,3052,1598],{"class":1190},[103,3054,1220],{"class":170},[103,3056,3058,3060,3062,3064,3066,3068],{"class":105,"line":3057},138,[103,3059,1369],{"class":170},[103,3061,1607],{"class":1190},[103,3063,1610],{"class":109},[103,3065,563],{"class":170},[103,3067,1615],{"class":113},[103,3069,1242],{"class":170},[103,3071,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109,3111,3113],{"class":105,"line":3072},139,[103,3074,1369],{"class":170},[103,3076,1624],{"class":1190},[103,3078,1627],{"class":109},[103,3080,563],{"class":170},[103,3082,1969],{"class":113},[103,3084,1635],{"class":109},[103,3086,563],{"class":170},[103,3088,1640],{"class":113},[103,3090,1643],{"class":109},[103,3092,563],{"class":170},[103,3094,1640],{"class":113},[103,3096,1650],{"class":109},[103,3098,563],{"class":170},[103,3100,1988],{"class":113},[103,3102,1657],{"class":109},[103,3104,563],{"class":170},[103,3106,1640],{"class":113},[103,3108,1664],{"class":109},[103,3110,563],{"class":170},[103,3112,2001],{"class":113},[103,3114,1242],{"class":170},[103,3116,3118,3120,3122],{"class":105,"line":3117},140,[103,3119,1478],{"class":170},[103,3121,1598],{"class":1190},[103,3123,1220],{"class":170},[103,3125,3127,3129,3131],{"class":105,"line":3126},141,[103,3128,1332],{"class":170},[103,3130,1232],{"class":1190},[103,3132,1220],{"class":170},[103,3134,3136],{"class":105,"line":3135},142,[103,3137,309],{"emptyLinePlaceholder":308},[103,3139,3141,3143,3145,3147,3149,3152,3154,3156,3159],{"class":105,"line":3140},143,[103,3142,1229],{"class":170},[103,3144,1253],{"class":1190},[103,3146,1212],{"class":109},[103,3148,563],{"class":170},[103,3150,3151],{"class":113},"\"left_wheel_joint\"",[103,3153,1114],{"class":109},[103,3155,563],{"class":170},[103,3157,3158],{"class":113},"\"continuous\"",[103,3160,1220],{"class":170},[103,3162,3164,3166,3168,3170,3172,3174],{"class":105,"line":3163},144,[103,3165,1369],{"class":170},[103,3167,1277],{"class":1190},[103,3169,1280],{"class":109},[103,3171,563],{"class":170},[103,3173,1300],{"class":113},[103,3175,2064],{"class":170},[103,3177,3179,3181,3183,3185,3187,3189],{"class":105,"line":3178},145,[103,3180,1369],{"class":170},[103,3182,1293],{"class":1190},[103,3184,1280],{"class":109},[103,3186,563],{"class":170},[103,3188,2461],{"class":113},[103,3190,2064],{"class":170},[103,3192,3194,3196,3198,3200,3202,3205],{"class":105,"line":3193},146,[103,3195,1369],{"class":170},[103,3197,1309],{"class":1190},[103,3199,1312],{"class":109},[103,3201,563],{"class":170},[103,3203,3204],{"class":113},"\"-0.02 0.10 -0.06\"",[103,3206,2064],{"class":170},[103,3208,3210,3212,3215,3217,3219,3222],{"class":105,"line":3209},147,[103,3211,1369],{"class":170},[103,3213,3214],{"class":1190},"axis",[103,3216,1312],{"class":109},[103,3218,563],{"class":170},[103,3220,3221],{"class":113},"\"0 1 0\"",[103,3223,2064],{"class":170},[103,3225,3227,3229,3231],{"class":105,"line":3226},148,[103,3228,1332],{"class":170},[103,3230,1253],{"class":1190},[103,3232,1220],{"class":170},[103,3234,3236],{"class":105,"line":3235},149,[103,3237,309],{"emptyLinePlaceholder":308},[103,3239,3241,3243,3245,3247,3249,3252,3254,3256,3258],{"class":105,"line":3240},150,[103,3242,1229],{"class":170},[103,3244,1253],{"class":1190},[103,3246,1212],{"class":109},[103,3248,563],{"class":170},[103,3250,3251],{"class":113},"\"right_wheel_joint\"",[103,3253,1114],{"class":109},[103,3255,563],{"class":170},[103,3257,3158],{"class":113},[103,3259,1220],{"class":170},[103,3261,3263,3265,3267,3269,3271,3273],{"class":105,"line":3262},151,[103,3264,1369],{"class":170},[103,3266,1277],{"class":1190},[103,3268,1280],{"class":109},[103,3270,563],{"class":170},[103,3272,1300],{"class":113},[103,3274,2064],{"class":170},[103,3276,3278,3280,3282,3284,3286,3288],{"class":105,"line":3277},152,[103,3279,1369],{"class":170},[103,3281,1293],{"class":1190},[103,3283,1280],{"class":109},[103,3285,563],{"class":170},[103,3287,2809],{"class":113},[103,3289,2064],{"class":170},[103,3291,3293,3295,3297,3299,3301,3304],{"class":105,"line":3292},153,[103,3294,1369],{"class":170},[103,3296,1309],{"class":1190},[103,3298,1312],{"class":109},[103,3300,563],{"class":170},[103,3302,3303],{"class":113},"\"-0.02 -0.10 -0.06\"",[103,3305,2064],{"class":170},[103,3307,3309,3311,3313,3315,3317,3319],{"class":105,"line":3308},154,[103,3310,1369],{"class":170},[103,3312,3214],{"class":1190},[103,3314,1312],{"class":109},[103,3316,563],{"class":170},[103,3318,3221],{"class":113},[103,3320,2064],{"class":170},[103,3322,3324,3326,3328],{"class":105,"line":3323},155,[103,3325,1332],{"class":170},[103,3327,1253],{"class":1190},[103,3329,1220],{"class":170},[103,3331,3333],{"class":105,"line":3332},156,[103,3334,309],{"emptyLinePlaceholder":308},[103,3336,3338,3340,3342,3344,3346,3349],{"class":105,"line":3337},157,[103,3339,1229],{"class":170},[103,3341,1232],{"class":1190},[103,3343,1212],{"class":109},[103,3345,563],{"class":170},[103,3347,3348],{"class":113},"\"caster_link\"",[103,3350,1220],{"class":170},[103,3352,3354,3356,3358],{"class":105,"line":3353},158,[103,3355,1369],{"class":170},[103,3357,1362],{"class":1190},[103,3359,1220],{"class":170},[103,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379],{"class":105,"line":3362},159,[103,3364,1747],{"class":170},[103,3366,1309],{"class":1190},[103,3368,1312],{"class":109},[103,3370,563],{"class":170},[103,3372,1325],{"class":113},[103,3374,1320],{"class":109},[103,3376,563],{"class":170},[103,3378,2492],{"class":113},[103,3380,1242],{"class":170},[103,3382,3384,3386,3388],{"class":105,"line":3383},160,[103,3385,1747],{"class":170},[103,3387,1393],{"class":1190},[103,3389,1220],{"class":170},[103,3391,3393,3395,3398,3400,3402,3405],{"class":105,"line":3392},161,[103,3394,2557],{"class":170},[103,3396,3397],{"class":1190},"sphere",[103,3399,1414],{"class":109},[103,3401,563],{"class":170},[103,3403,3404],{"class":113},"\"0.016\"",[103,3406,1242],{"class":170},[103,3408,3410,3412,3414],{"class":105,"line":3409},162,[103,3411,2532],{"class":170},[103,3413,1393],{"class":1190},[103,3415,1220],{"class":170},[103,3417,3419,3421,3423,3425,3427,3429],{"class":105,"line":3418},163,[103,3420,1359],{"class":170},[103,3422,1437],{"class":1190},[103,3424,1212],{"class":109},[103,3426,563],{"class":170},[103,3428,1784],{"class":113},[103,3430,1220],{"class":170},[103,3432,3434,3436,3438,3440,3442,3444],{"class":105,"line":3433},164,[103,3435,2557],{"class":170},[103,3437,1454],{"class":1190},[103,3439,1457],{"class":109},[103,3441,563],{"class":170},[103,3443,1799],{"class":113},[103,3445,1465],{"class":170},[103,3447,3449,3451,3453],{"class":105,"line":3448},165,[103,3450,2573],{"class":170},[103,3452,1437],{"class":1190},[103,3454,1220],{"class":170},[103,3456,3458,3460,3462],{"class":105,"line":3457},166,[103,3459,1426],{"class":170},[103,3461,1362],{"class":1190},[103,3463,1220],{"class":170},[103,3465,3467,3469,3471],{"class":105,"line":3466},167,[103,3468,1369],{"class":170},[103,3470,1489],{"class":1190},[103,3472,1220],{"class":170},[103,3474,3476,3478,3480,3482,3484,3486,3488,3490,3492],{"class":105,"line":3475},168,[103,3477,1747],{"class":170},[103,3479,1309],{"class":1190},[103,3481,1312],{"class":109},[103,3483,563],{"class":170},[103,3485,1325],{"class":113},[103,3487,1320],{"class":109},[103,3489,563],{"class":170},[103,3491,2492],{"class":113},[103,3493,1242],{"class":170},[103,3495,3497,3499,3501],{"class":105,"line":3496},169,[103,3498,1747],{"class":170},[103,3500,1393],{"class":1190},[103,3502,1220],{"class":170},[103,3504,3506,3508,3510,3512,3514,3516],{"class":105,"line":3505},170,[103,3507,2557],{"class":170},[103,3509,3397],{"class":1190},[103,3511,1414],{"class":109},[103,3513,563],{"class":170},[103,3515,3404],{"class":113},[103,3517,1242],{"class":170},[103,3519,3521,3523,3525],{"class":105,"line":3520},171,[103,3522,2532],{"class":170},[103,3524,1393],{"class":1190},[103,3526,1220],{"class":170},[103,3528,3530,3532,3534,3536,3538,3540],{"class":105,"line":3529},172,[103,3531,1359],{"class":170},[103,3533,1437],{"class":1190},[103,3535,1212],{"class":109},[103,3537,563],{"class":170},[103,3539,1784],{"class":113},[103,3541,1220],{"class":170},[103,3543,3545,3547,3549,3551,3553,3555],{"class":105,"line":3544},173,[103,3546,2557],{"class":170},[103,3548,1454],{"class":1190},[103,3550,1457],{"class":109},[103,3552,563],{"class":170},[103,3554,1799],{"class":113},[103,3556,1465],{"class":170},[103,3558,3560,3562,3564],{"class":105,"line":3559},174,[103,3561,2573],{"class":170},[103,3563,1437],{"class":1190},[103,3565,1220],{"class":170},[103,3567,3569,3571,3573],{"class":105,"line":3568},175,[103,3570,1426],{"class":170},[103,3572,1489],{"class":1190},[103,3574,1220],{"class":170},[103,3576,3578,3580,3582],{"class":105,"line":3577},176,[103,3579,1369],{"class":170},[103,3581,1598],{"class":1190},[103,3583,1220],{"class":170},[103,3585,3587,3589,3591,3593,3595,3597],{"class":105,"line":3586},177,[103,3588,1369],{"class":170},[103,3590,1607],{"class":1190},[103,3592,1610],{"class":109},[103,3594,563],{"class":170},[103,3596,1669],{"class":113},[103,3598,1242],{"class":170},[103,3600,3602,3604,3606,3608,3610,3612,3614,3616,3618,3620,3622,3624,3626,3628,3630,3632,3634,3636,3638,3640,3642],{"class":105,"line":3601},178,[103,3603,1369],{"class":170},[103,3605,1624],{"class":1190},[103,3607,1627],{"class":109},[103,3609,563],{"class":170},[103,3611,1969],{"class":113},[103,3613,1635],{"class":109},[103,3615,563],{"class":170},[103,3617,1640],{"class":113},[103,3619,1643],{"class":109},[103,3621,563],{"class":170},[103,3623,1640],{"class":113},[103,3625,1650],{"class":109},[103,3627,563],{"class":170},[103,3629,1988],{"class":113},[103,3631,1657],{"class":109},[103,3633,563],{"class":170},[103,3635,1640],{"class":113},[103,3637,1664],{"class":109},[103,3639,563],{"class":170},[103,3641,2001],{"class":113},[103,3643,1242],{"class":170},[103,3645,3647,3649,3651],{"class":105,"line":3646},179,[103,3648,1478],{"class":170},[103,3650,1598],{"class":1190},[103,3652,1220],{"class":170},[103,3654,3656,3658,3660],{"class":105,"line":3655},180,[103,3657,1332],{"class":170},[103,3659,1232],{"class":1190},[103,3661,1220],{"class":170},[103,3663,3665],{"class":105,"line":3664},181,[103,3666,309],{"emptyLinePlaceholder":308},[103,3668,3670,3672,3674,3676,3678,3681,3683,3685,3687],{"class":105,"line":3669},182,[103,3671,1229],{"class":170},[103,3673,1253],{"class":1190},[103,3675,1212],{"class":109},[103,3677,563],{"class":170},[103,3679,3680],{"class":113},"\"caster_joint\"",[103,3682,1114],{"class":109},[103,3684,563],{"class":170},[103,3686,1267],{"class":113},[103,3688,1220],{"class":170},[103,3690,3692,3694,3696,3698,3700,3702],{"class":105,"line":3691},183,[103,3693,1369],{"class":170},[103,3695,1277],{"class":1190},[103,3697,1280],{"class":109},[103,3699,563],{"class":170},[103,3701,1300],{"class":113},[103,3703,2064],{"class":170},[103,3705,3707,3709,3711,3713,3715,3717],{"class":105,"line":3706},184,[103,3708,1369],{"class":170},[103,3710,1293],{"class":1190},[103,3712,1280],{"class":109},[103,3714,563],{"class":170},[103,3716,3348],{"class":113},[103,3718,2064],{"class":170},[103,3720,3722,3724,3726,3728,3730,3733],{"class":105,"line":3721},185,[103,3723,1369],{"class":170},[103,3725,1309],{"class":1190},[103,3727,1312],{"class":109},[103,3729,563],{"class":170},[103,3731,3732],{"class":113},"\"0.06 0.0 -0.076\"",[103,3734,2064],{"class":170},[103,3736,3738,3740,3742,3744,3746,3748],{"class":105,"line":3737},186,[103,3739,1369],{"class":170},[103,3741,3214],{"class":1190},[103,3743,1312],{"class":109},[103,3745,563],{"class":170},[103,3747,3221],{"class":113},[103,3749,2064],{"class":170},[103,3751,3753,3755,3757],{"class":105,"line":3752},187,[103,3754,1332],{"class":170},[103,3756,1253],{"class":1190},[103,3758,1220],{"class":170},[103,3760,3762],{"class":105,"line":3761},188,[103,3763,309],{"emptyLinePlaceholder":308},[103,3765,3767,3769,3771,3774,3776,3778],{"class":105,"line":3766},189,[103,3768,1229],{"class":170},[103,3770,136],{"class":1190},[103,3772,3773],{"class":109}," reference",[103,3775,563],{"class":170},[103,3777,3348],{"class":113},[103,3779,1220],{"class":170},[103,3781,3783,3785,3787,3790,3792],{"class":105,"line":3782},190,[103,3784,1274],{"class":170},[103,3786,1437],{"class":1190},[103,3788,3789],{"class":170},">Gazebo\u002FBlack\u003C\u002F",[103,3791,1437],{"class":1190},[103,3793,1220],{"class":170},[103,3795,3797,3799,3801],{"class":105,"line":3796},191,[103,3798,1332],{"class":170},[103,3800,136],{"class":1190},[103,3802,1220],{"class":170},[103,3804,3806],{"class":105,"line":3805},192,[103,3807,309],{"emptyLinePlaceholder":308},[103,3809,3811,3813,3815,3817,3819,3821],{"class":105,"line":3810},193,[103,3812,1229],{"class":170},[103,3814,136],{"class":1190},[103,3816,3773],{"class":109},[103,3818,563],{"class":170},[103,3820,3348],{"class":113},[103,3822,1220],{"class":170},[103,3824,3826,3828,3831,3833,3835,3838],{"class":105,"line":3825},194,[103,3827,1274],{"class":170},[103,3829,3830],{"class":1190},"mu1",[103,3832,1610],{"class":109},[103,3834,563],{"class":170},[103,3836,3837],{"class":113},"\"0.0\"",[103,3839,1242],{"class":170},[103,3841,3843,3845,3848,3850,3852,3854],{"class":105,"line":3842},195,[103,3844,1274],{"class":170},[103,3846,3847],{"class":1190},"mu2",[103,3849,1610],{"class":109},[103,3851,563],{"class":170},[103,3853,3837],{"class":113},[103,3855,1242],{"class":170},[103,3857,3859,3861,3864,3866,3868,3871],{"class":105,"line":3858},196,[103,3860,1274],{"class":170},[103,3862,3863],{"class":1190},"kp",[103,3865,1610],{"class":109},[103,3867,563],{"class":170},[103,3869,3870],{"class":113},"\"1000000.0\"",[103,3872,2064],{"class":170},[103,3874,3876,3878,3881,3883,3885,3888],{"class":105,"line":3875},197,[103,3877,1274],{"class":170},[103,3879,3880],{"class":1190},"kd",[103,3882,1610],{"class":109},[103,3884,563],{"class":170},[103,3886,3887],{"class":113},"\"10.0\"",[103,3889,2064],{"class":170},[103,3891,3893],{"class":105,"line":3892},198,[103,3894,309],{"emptyLinePlaceholder":308},[103,3896,3898,3900,3902],{"class":105,"line":3897},199,[103,3899,1332],{"class":170},[103,3901,136],{"class":1190},[103,3903,1220],{"class":170},[103,3905,3907],{"class":105,"line":3906},200,[103,3908,309],{"emptyLinePlaceholder":308},[103,3910,3912,3914,3916],{"class":105,"line":3911},201,[103,3913,1229],{"class":170},[103,3915,136],{"class":1190},[103,3917,1220],{"class":170},[103,3919,3921,3923,3926,3928,3930,3933,3936,3938,3941],{"class":105,"line":3920},202,[103,3922,1274],{"class":170},[103,3924,3925],{"class":1190},"plugin",[103,3927,1212],{"class":109},[103,3929,563],{"class":170},[103,3931,3932],{"class":113},"'diff_drive'",[103,3934,3935],{"class":109}," filename",[103,3937,563],{"class":170},[103,3939,3940],{"class":113},"'libgazebo_ros_diff_drive.so'",[103,3942,1220],{"class":170},[103,3944,3946,3948,3951],{"class":105,"line":3945},203,[103,3947,1359],{"class":170},[103,3949,3950],{"class":1190},"ros",[103,3952,1220],{"class":170},[103,3954,3956,3958,3961,3964,3966],{"class":105,"line":3955},204,[103,3957,2557],{"class":170},[103,3959,3960],{"class":1190},"namespace",[103,3962,3963],{"class":170},">\u002F\u003C\u002F",[103,3965,3960],{"class":1190},[103,3967,1220],{"class":170},[103,3969,3971,3973,3976,3979,3981],{"class":105,"line":3970},205,[103,3972,2557],{"class":170},[103,3974,3975],{"class":1190},"remapping",[103,3977,3978],{"class":170},">cmd_vel:=cmd_vel\u003C\u002F",[103,3980,3975],{"class":1190},[103,3982,1220],{"class":170},[103,3984,3986,3988,3990,3993,3995],{"class":105,"line":3985},206,[103,3987,2557],{"class":170},[103,3989,3975],{"class":1190},[103,3991,3992],{"class":170},">odom:=odom\u003C\u002F",[103,3994,3975],{"class":1190},[103,3996,1220],{"class":170},[103,3998,4000,4002,4004],{"class":105,"line":3999},207,[103,4001,2573],{"class":170},[103,4003,3950],{"class":1190},[103,4005,1220],{"class":170},[103,4007,4009,4011,4014,4017,4019],{"class":105,"line":4008},208,[103,4010,1359],{"class":170},[103,4012,4013],{"class":1190},"update_rate",[103,4015,4016],{"class":170},">30\u003C\u002F",[103,4018,4013],{"class":1190},[103,4020,1220],{"class":170},[103,4022,4024],{"class":105,"line":4023},209,[103,4025,309],{"emptyLinePlaceholder":308},[103,4027,4029,4031,4034,4037,4039],{"class":105,"line":4028},210,[103,4030,1359],{"class":170},[103,4032,4033],{"class":1190},"left_joint",[103,4035,4036],{"class":170},">left_wheel_joint\u003C\u002F",[103,4038,4033],{"class":1190},[103,4040,1220],{"class":170},[103,4042,4044,4046,4049,4052,4054],{"class":105,"line":4043},211,[103,4045,1359],{"class":170},[103,4047,4048],{"class":1190},"right_joint",[103,4050,4051],{"class":170},">right_wheel_joint\u003C\u002F",[103,4053,4048],{"class":1190},[103,4055,1220],{"class":170},[103,4057,4059],{"class":105,"line":4058},212,[103,4060,309],{"emptyLinePlaceholder":308},[103,4062,4064,4066,4069,4072,4074],{"class":105,"line":4063},213,[103,4065,1359],{"class":170},[103,4067,4068],{"class":1190},"wheel_separation",[103,4070,4071],{"class":170},">0.2\u003C\u002F",[103,4073,4068],{"class":1190},[103,4075,1220],{"class":170},[103,4077,4079,4081,4084,4087,4089],{"class":105,"line":4078},214,[103,4080,1359],{"class":170},[103,4082,4083],{"class":1190},"wheel_diameter",[103,4085,4086],{"class":170},">0.065\u003C\u002F",[103,4088,4083],{"class":1190},[103,4090,1220],{"class":170},[103,4092,4094],{"class":105,"line":4093},215,[103,4095,309],{"emptyLinePlaceholder":308},[103,4097,4099,4101,4104,4107,4109],{"class":105,"line":4098},216,[103,4100,1359],{"class":170},[103,4102,4103],{"class":1190},"max_wheel_torque",[103,4105,4106],{"class":170},">20\u003C\u002F",[103,4108,4103],{"class":1190},[103,4110,1220],{"class":170},[103,4112,4114,4116,4119,4122,4124],{"class":105,"line":4113},217,[103,4115,1359],{"class":170},[103,4117,4118],{"class":1190},"max_wheel_acceleration",[103,4120,4121],{"class":170},">1.0\u003C\u002F",[103,4123,4118],{"class":1190},[103,4125,1220],{"class":170},[103,4127,4129],{"class":105,"line":4128},218,[103,4130,309],{"emptyLinePlaceholder":308},[103,4132,4134,4136,4139,4142,4144],{"class":105,"line":4133},219,[103,4135,1359],{"class":170},[103,4137,4138],{"class":1190},"publish_odom",[103,4140,4141],{"class":170},">true\u003C\u002F",[103,4143,4138],{"class":1190},[103,4145,1220],{"class":170},[103,4147,4149,4151,4154,4156,4158],{"class":105,"line":4148},220,[103,4150,1359],{"class":170},[103,4152,4153],{"class":1190},"publish_odom_tf",[103,4155,4141],{"class":170},[103,4157,4153],{"class":1190},[103,4159,1220],{"class":170},[103,4161,4163,4165,4168,4171,4173],{"class":105,"line":4162},221,[103,4164,1359],{"class":170},[103,4166,4167],{"class":1190},"publish_wheel_tf",[103,4169,4170],{"class":170},">false\u003C\u002F",[103,4172,4167],{"class":1190},[103,4174,1220],{"class":170},[103,4176,4178,4180,4183,4186,4188],{"class":105,"line":4177},222,[103,4179,1359],{"class":170},[103,4181,4182],{"class":1190},"odometry_frame",[103,4184,4185],{"class":170},">odom\u003C\u002F",[103,4187,4182],{"class":1190},[103,4189,1220],{"class":170},[103,4191,4193,4195,4198,4201,4203],{"class":105,"line":4192},223,[103,4194,1359],{"class":170},[103,4196,4197],{"class":1190},"robot_base_frame",[103,4199,4200],{"class":170},">base_footprint\u003C\u002F",[103,4202,4197],{"class":1190},[103,4204,1220],{"class":170},[103,4206,4208,4210,4212],{"class":105,"line":4207},224,[103,4209,1426],{"class":170},[103,4211,3925],{"class":1190},[103,4213,1220],{"class":170},[103,4215,4217],{"class":105,"line":4216},225,[103,4218,309],{"emptyLinePlaceholder":308},[103,4220,4222,4224,4226,4228,4230,4233,4235,4237,4240],{"class":105,"line":4221},226,[103,4223,1369],{"class":170},[103,4225,3925],{"class":1190},[103,4227,1212],{"class":109},[103,4229,563],{"class":170},[103,4231,4232],{"class":113},"\"fishbot_joint_state\"",[103,4234,3935],{"class":109},[103,4236,563],{"class":170},[103,4238,4239],{"class":113},"\"libgazebo_ros_joint_state_publisher.so\"",[103,4241,1220],{"class":170},[103,4243,4245,4247,4249],{"class":105,"line":4244},227,[103,4246,1747],{"class":170},[103,4248,3950],{"class":1190},[103,4250,1220],{"class":170},[103,4252,4254,4256,4258,4261,4263],{"class":105,"line":4253},228,[103,4255,1359],{"class":170},[103,4257,3975],{"class":1190},[103,4259,4260],{"class":170},">~\u002Fout:=joint_states\u003C\u002F",[103,4262,3975],{"class":1190},[103,4264,1220],{"class":170},[103,4266,4268,4270,4272],{"class":105,"line":4267},229,[103,4269,2532],{"class":170},[103,4271,3950],{"class":1190},[103,4273,1220],{"class":170},[103,4275,4277,4279,4281,4283,4285],{"class":105,"line":4276},230,[103,4278,1747],{"class":170},[103,4280,4013],{"class":1190},[103,4282,4016],{"class":170},[103,4284,4013],{"class":1190},[103,4286,1220],{"class":170},[103,4288,4290,4292,4295,4297,4299],{"class":105,"line":4289},231,[103,4291,1747],{"class":170},[103,4293,4294],{"class":1190},"joint_name",[103,4296,4051],{"class":170},[103,4298,4294],{"class":1190},[103,4300,1220],{"class":170},[103,4302,4304,4306,4308,4310,4312],{"class":105,"line":4303},232,[103,4305,1747],{"class":170},[103,4307,4294],{"class":1190},[103,4309,4036],{"class":170},[103,4311,4294],{"class":1190},[103,4313,1220],{"class":170},[103,4315,4317,4319,4321],{"class":105,"line":4316},233,[103,4318,1426],{"class":170},[103,4320,3925],{"class":1190},[103,4322,4323],{"class":170},">    \n",[103,4325,4327,4329,4331],{"class":105,"line":4326},234,[103,4328,1426],{"class":170},[103,4330,136],{"class":1190},[103,4332,4333],{"class":170},"> \n",[103,4335,4337],{"class":105,"line":4336},235,[103,4338,309],{"emptyLinePlaceholder":308},[103,4340,4342,4344,4346,4348,4350,4352],{"class":105,"line":4341},236,[103,4343,1369],{"class":170},[103,4345,136],{"class":1190},[103,4347,3773],{"class":109},[103,4349,563],{"class":170},[103,4351,1704],{"class":113},[103,4353,1220],{"class":170},[103,4355,4357,4359,4361,4363,4365],{"class":105,"line":4356},237,[103,4358,1747],{"class":170},[103,4360,1437],{"class":1190},[103,4362,3789],{"class":170},[103,4364,1437],{"class":1190},[103,4366,1220],{"class":170},[103,4368,4370,4372,4374],{"class":105,"line":4369},238,[103,4371,1426],{"class":170},[103,4373,136],{"class":1190},[103,4375,1220],{"class":170},[103,4377,4379],{"class":105,"line":4378},239,[103,4380,309],{"emptyLinePlaceholder":308},[103,4382,4384,4386,4388,4390,4392,4394],{"class":105,"line":4383},240,[103,4385,1274],{"class":170},[103,4387,136],{"class":1190},[103,4389,3773],{"class":109},[103,4391,563],{"class":170},[103,4393,2123],{"class":113},[103,4395,1220],{"class":170},[103,4397,4399,4401,4404,4406,4408,4411,4413,4415,4418],{"class":105,"line":4398},241,[103,4400,1369],{"class":170},[103,4402,4403],{"class":1190},"sensor",[103,4405,1212],{"class":109},[103,4407,563],{"class":170},[103,4409,4410],{"class":113},"\"imu_sensor\"",[103,4412,1114],{"class":109},[103,4414,563],{"class":170},[103,4416,4417],{"class":113},"\"imu\"",[103,4419,1220],{"class":170},[103,4421,4423,4425,4427,4429,4431,4434,4436,4438,4441],{"class":105,"line":4422},242,[103,4424,1369],{"class":170},[103,4426,3925],{"class":1190},[103,4428,3935],{"class":109},[103,4430,563],{"class":170},[103,4432,4433],{"class":113},"\"libgazebo_ros_imu_sensor.so\"",[103,4435,1212],{"class":109},[103,4437,563],{"class":170},[103,4439,4440],{"class":113},"\"imu_plugin\"",[103,4442,1220],{"class":170},[103,4444,4446,4448,4450],{"class":105,"line":4445},243,[103,4447,1359],{"class":170},[103,4449,3950],{"class":1190},[103,4451,1220],{"class":170},[103,4453,4455,4457,4459,4461,4463],{"class":105,"line":4454},244,[103,4456,2557],{"class":170},[103,4458,3960],{"class":1190},[103,4460,3963],{"class":170},[103,4462,3960],{"class":1190},[103,4464,1220],{"class":170},[103,4466,4468,4470,4472,4475,4477],{"class":105,"line":4467},245,[103,4469,2557],{"class":170},[103,4471,3975],{"class":1190},[103,4473,4474],{"class":170},">~\u002Fout:=imu\u003C\u002F",[103,4476,3975],{"class":1190},[103,4478,1220],{"class":170},[103,4480,4482,4484,4486],{"class":105,"line":4481},246,[103,4483,2573],{"class":170},[103,4485,3950],{"class":1190},[103,4487,1220],{"class":170},[103,4489,4491,4493,4496,4498,4500],{"class":105,"line":4490},247,[103,4492,1359],{"class":170},[103,4494,4495],{"class":1190},"initial_orientation_as_reference",[103,4497,4170],{"class":170},[103,4499,4495],{"class":1190},[103,4501,1220],{"class":170},[103,4503,4505,4507,4509],{"class":105,"line":4504},248,[103,4506,2532],{"class":170},[103,4508,3925],{"class":1190},[103,4510,1220],{"class":170},[103,4512,4514,4516,4519,4521,4523],{"class":105,"line":4513},249,[103,4515,1747],{"class":170},[103,4517,4518],{"class":1190},"always_on",[103,4520,4141],{"class":170},[103,4522,4518],{"class":1190},[103,4524,1220],{"class":170},[103,4526,4528,4530,4532,4535,4537],{"class":105,"line":4527},250,[103,4529,1747],{"class":170},[103,4531,4013],{"class":1190},[103,4533,4534],{"class":170},">100\u003C\u002F",[103,4536,4013],{"class":1190},[103,4538,1220],{"class":170},[103,4540,4542,4544,4547,4549,4551],{"class":105,"line":4541},251,[103,4543,1747],{"class":170},[103,4545,4546],{"class":1190},"visualize",[103,4548,4141],{"class":170},[103,4550,4546],{"class":1190},[103,4552,1220],{"class":170},[103,4554,4556,4558,4561],{"class":105,"line":4555},252,[103,4557,1747],{"class":170},[103,4559,4560],{"class":1190},"imu",[103,4562,1220],{"class":170},[103,4564,4566,4568,4571],{"class":105,"line":4565},253,[103,4567,1359],{"class":170},[103,4569,4570],{"class":1190},"angular_velocity",[103,4572,1220],{"class":170},[103,4574,4576,4578,4581],{"class":105,"line":4575},254,[103,4577,2557],{"class":170},[103,4579,4580],{"class":1190},"x",[103,4582,1220],{"class":170},[103,4584,4586,4588,4591,4593,4595,4598],{"class":105,"line":4585},255,[103,4587,1451],{"class":170},[103,4589,4590],{"class":1190},"noise",[103,4592,1114],{"class":109},[103,4594,563],{"class":170},[103,4596,4597],{"class":113},"\"gaussian\"",[103,4599,1220],{"class":170},[103,4601,4603,4605,4608,4611,4613],{"class":105,"line":4602},256,[103,4604,1400],{"class":170},[103,4606,4607],{"class":1190},"mean",[103,4609,4610],{"class":170},">0.0\u003C\u002F",[103,4612,4607],{"class":1190},[103,4614,1220],{"class":170},[103,4616,4618,4620,4623,4626,4628],{"class":105,"line":4617},257,[103,4619,1400],{"class":170},[103,4621,4622],{"class":1190},"stddev",[103,4624,4625],{"class":170},">2e-4\u003C\u002F",[103,4627,4622],{"class":1190},[103,4629,1220],{"class":170},[103,4631,4633,4635,4638,4641,4643],{"class":105,"line":4632},258,[103,4634,1400],{"class":170},[103,4636,4637],{"class":1190},"bias_mean",[103,4639,4640],{"class":170},">0.0000075\u003C\u002F",[103,4642,4637],{"class":1190},[103,4644,1220],{"class":170},[103,4646,4648,4650,4653,4656,4658],{"class":105,"line":4647},259,[103,4649,1400],{"class":170},[103,4651,4652],{"class":1190},"bias_stddev",[103,4654,4655],{"class":170},">0.0000008\u003C\u002F",[103,4657,4652],{"class":1190},[103,4659,1220],{"class":170},[103,4661,4663,4666,4668],{"class":105,"line":4662},260,[103,4664,4665],{"class":170},"              \u003C\u002F",[103,4667,4590],{"class":1190},[103,4669,1220],{"class":170},[103,4671,4673,4676,4678],{"class":105,"line":4672},261,[103,4674,4675],{"class":170},"            \u003C\u002F",[103,4677,4580],{"class":1190},[103,4679,1220],{"class":170},[103,4681,4683,4685,4688],{"class":105,"line":4682},262,[103,4684,2557],{"class":170},[103,4686,4687],{"class":1190},"y",[103,4689,1220],{"class":170},[103,4691,4693,4695,4697,4699,4701,4703],{"class":105,"line":4692},263,[103,4694,1451],{"class":170},[103,4696,4590],{"class":1190},[103,4698,1114],{"class":109},[103,4700,563],{"class":170},[103,4702,4597],{"class":113},[103,4704,1220],{"class":170},[103,4706,4708,4710,4712,4714,4716],{"class":105,"line":4707},264,[103,4709,1400],{"class":170},[103,4711,4607],{"class":1190},[103,4713,4610],{"class":170},[103,4715,4607],{"class":1190},[103,4717,1220],{"class":170},[103,4719,4721,4723,4725,4727,4729],{"class":105,"line":4720},265,[103,4722,1400],{"class":170},[103,4724,4622],{"class":1190},[103,4726,4625],{"class":170},[103,4728,4622],{"class":1190},[103,4730,1220],{"class":170},[103,4732,4734,4736,4738,4740,4742],{"class":105,"line":4733},266,[103,4735,1400],{"class":170},[103,4737,4637],{"class":1190},[103,4739,4640],{"class":170},[103,4741,4637],{"class":1190},[103,4743,1220],{"class":170},[103,4745,4747,4749,4751,4753,4755],{"class":105,"line":4746},267,[103,4748,1400],{"class":170},[103,4750,4652],{"class":1190},[103,4752,4655],{"class":170},[103,4754,4652],{"class":1190},[103,4756,1220],{"class":170},[103,4758,4760,4762,4764],{"class":105,"line":4759},268,[103,4761,4665],{"class":170},[103,4763,4590],{"class":1190},[103,4765,1220],{"class":170},[103,4767,4769,4771,4773],{"class":105,"line":4768},269,[103,4770,4675],{"class":170},[103,4772,4687],{"class":1190},[103,4774,1220],{"class":170},[103,4776,4778,4780,4783],{"class":105,"line":4777},270,[103,4779,2557],{"class":170},[103,4781,4782],{"class":1190},"z",[103,4784,1220],{"class":170},[103,4786,4788,4790,4792,4794,4796,4798],{"class":105,"line":4787},271,[103,4789,1451],{"class":170},[103,4791,4590],{"class":1190},[103,4793,1114],{"class":109},[103,4795,563],{"class":170},[103,4797,4597],{"class":113},[103,4799,1220],{"class":170},[103,4801,4803,4805,4807,4809,4811],{"class":105,"line":4802},272,[103,4804,1400],{"class":170},[103,4806,4607],{"class":1190},[103,4808,4610],{"class":170},[103,4810,4607],{"class":1190},[103,4812,1220],{"class":170},[103,4814,4816,4818,4820,4822,4824],{"class":105,"line":4815},273,[103,4817,1400],{"class":170},[103,4819,4622],{"class":1190},[103,4821,4625],{"class":170},[103,4823,4622],{"class":1190},[103,4825,1220],{"class":170},[103,4827,4829,4831,4833,4835,4837],{"class":105,"line":4828},274,[103,4830,1400],{"class":170},[103,4832,4637],{"class":1190},[103,4834,4640],{"class":170},[103,4836,4637],{"class":1190},[103,4838,1220],{"class":170},[103,4840,4842,4844,4846,4848,4850],{"class":105,"line":4841},275,[103,4843,1400],{"class":170},[103,4845,4652],{"class":1190},[103,4847,4655],{"class":170},[103,4849,4652],{"class":1190},[103,4851,1220],{"class":170},[103,4853,4855,4857,4859],{"class":105,"line":4854},276,[103,4856,4665],{"class":170},[103,4858,4590],{"class":1190},[103,4860,1220],{"class":170},[103,4862,4864,4866,4868],{"class":105,"line":4863},277,[103,4865,4675],{"class":170},[103,4867,4782],{"class":1190},[103,4869,1220],{"class":170},[103,4871,4873,4875,4877],{"class":105,"line":4872},278,[103,4874,2573],{"class":170},[103,4876,4570],{"class":1190},[103,4878,1220],{"class":170},[103,4880,4882,4884,4887],{"class":105,"line":4881},279,[103,4883,1359],{"class":170},[103,4885,4886],{"class":1190},"linear_acceleration",[103,4888,1220],{"class":170},[103,4890,4892,4894,4896],{"class":105,"line":4891},280,[103,4893,2557],{"class":170},[103,4895,4580],{"class":1190},[103,4897,1220],{"class":170},[103,4899,4901,4903,4905,4907,4909,4911],{"class":105,"line":4900},281,[103,4902,1451],{"class":170},[103,4904,4590],{"class":1190},[103,4906,1114],{"class":109},[103,4908,563],{"class":170},[103,4910,4597],{"class":113},[103,4912,1220],{"class":170},[103,4914,4916,4918,4920,4922,4924],{"class":105,"line":4915},282,[103,4917,1400],{"class":170},[103,4919,4607],{"class":1190},[103,4921,4610],{"class":170},[103,4923,4607],{"class":1190},[103,4925,1220],{"class":170},[103,4927,4929,4931,4933,4936,4938],{"class":105,"line":4928},283,[103,4930,1400],{"class":170},[103,4932,4622],{"class":1190},[103,4934,4935],{"class":170},">1.7e-2\u003C\u002F",[103,4937,4622],{"class":1190},[103,4939,1220],{"class":170},[103,4941,4943,4945,4947,4950,4952],{"class":105,"line":4942},284,[103,4944,1400],{"class":170},[103,4946,4637],{"class":1190},[103,4948,4949],{"class":170},">0.1\u003C\u002F",[103,4951,4637],{"class":1190},[103,4953,1220],{"class":170},[103,4955,4957,4959,4961,4964,4966],{"class":105,"line":4956},285,[103,4958,1400],{"class":170},[103,4960,4652],{"class":1190},[103,4962,4963],{"class":170},">0.001\u003C\u002F",[103,4965,4652],{"class":1190},[103,4967,1220],{"class":170},[103,4969,4971,4973,4975],{"class":105,"line":4970},286,[103,4972,4665],{"class":170},[103,4974,4590],{"class":1190},[103,4976,1220],{"class":170},[103,4978,4980,4982,4984],{"class":105,"line":4979},287,[103,4981,4675],{"class":170},[103,4983,4580],{"class":1190},[103,4985,1220],{"class":170},[103,4987,4989,4991,4993],{"class":105,"line":4988},288,[103,4990,2557],{"class":170},[103,4992,4687],{"class":1190},[103,4994,1220],{"class":170},[103,4996,4998,5000,5002,5004,5006,5008],{"class":105,"line":4997},289,[103,4999,1451],{"class":170},[103,5001,4590],{"class":1190},[103,5003,1114],{"class":109},[103,5005,563],{"class":170},[103,5007,4597],{"class":113},[103,5009,1220],{"class":170},[103,5011,5013,5015,5017,5019,5021],{"class":105,"line":5012},290,[103,5014,1400],{"class":170},[103,5016,4607],{"class":1190},[103,5018,4610],{"class":170},[103,5020,4607],{"class":1190},[103,5022,1220],{"class":170},[103,5024,5026,5028,5030,5032,5034],{"class":105,"line":5025},291,[103,5027,1400],{"class":170},[103,5029,4622],{"class":1190},[103,5031,4935],{"class":170},[103,5033,4622],{"class":1190},[103,5035,1220],{"class":170},[103,5037,5039,5041,5043,5045,5047],{"class":105,"line":5038},292,[103,5040,1400],{"class":170},[103,5042,4637],{"class":1190},[103,5044,4949],{"class":170},[103,5046,4637],{"class":1190},[103,5048,1220],{"class":170},[103,5050,5052,5054,5056,5058,5060],{"class":105,"line":5051},293,[103,5053,1400],{"class":170},[103,5055,4652],{"class":1190},[103,5057,4963],{"class":170},[103,5059,4652],{"class":1190},[103,5061,1220],{"class":170},[103,5063,5065,5067,5069],{"class":105,"line":5064},294,[103,5066,4665],{"class":170},[103,5068,4590],{"class":1190},[103,5070,1220],{"class":170},[103,5072,5074,5076,5078],{"class":105,"line":5073},295,[103,5075,4675],{"class":170},[103,5077,4687],{"class":1190},[103,5079,1220],{"class":170},[103,5081,5083,5085,5087],{"class":105,"line":5082},296,[103,5084,2557],{"class":170},[103,5086,4782],{"class":1190},[103,5088,1220],{"class":170},[103,5090,5092,5094,5096,5098,5100,5102],{"class":105,"line":5091},297,[103,5093,1451],{"class":170},[103,5095,4590],{"class":1190},[103,5097,1114],{"class":109},[103,5099,563],{"class":170},[103,5101,4597],{"class":113},[103,5103,1220],{"class":170},[103,5105,5107,5109,5111,5113,5115],{"class":105,"line":5106},298,[103,5108,1400],{"class":170},[103,5110,4607],{"class":1190},[103,5112,4610],{"class":170},[103,5114,4607],{"class":1190},[103,5116,1220],{"class":170},[103,5118,5120,5122,5124,5126,5128],{"class":105,"line":5119},299,[103,5121,1400],{"class":170},[103,5123,4622],{"class":1190},[103,5125,4935],{"class":170},[103,5127,4622],{"class":1190},[103,5129,1220],{"class":170},[103,5131,5133,5135,5137,5139,5141],{"class":105,"line":5132},300,[103,5134,1400],{"class":170},[103,5136,4637],{"class":1190},[103,5138,4949],{"class":170},[103,5140,4637],{"class":1190},[103,5142,1220],{"class":170},[103,5144,5146,5148,5150,5152,5154],{"class":105,"line":5145},301,[103,5147,1400],{"class":170},[103,5149,4652],{"class":1190},[103,5151,4963],{"class":170},[103,5153,4652],{"class":1190},[103,5155,1220],{"class":170},[103,5157,5159,5161,5163],{"class":105,"line":5158},302,[103,5160,4665],{"class":170},[103,5162,4590],{"class":1190},[103,5164,1220],{"class":170},[103,5166,5168,5170,5172],{"class":105,"line":5167},303,[103,5169,4675],{"class":170},[103,5171,4782],{"class":1190},[103,5173,1220],{"class":170},[103,5175,5177,5179,5181],{"class":105,"line":5176},304,[103,5178,2573],{"class":170},[103,5180,4886],{"class":1190},[103,5182,1220],{"class":170},[103,5184,5186,5188,5190],{"class":105,"line":5185},305,[103,5187,2532],{"class":170},[103,5189,4560],{"class":1190},[103,5191,1220],{"class":170},[103,5193,5195,5197,5199],{"class":105,"line":5194},306,[103,5196,1426],{"class":170},[103,5198,4403],{"class":1190},[103,5200,1220],{"class":170},[103,5202,5204,5206,5208],{"class":105,"line":5203},307,[103,5205,1478],{"class":170},[103,5207,136],{"class":1190},[103,5209,1220],{"class":170},[103,5211,5213],{"class":105,"line":5212},308,[103,5214,309],{"emptyLinePlaceholder":308},[103,5216,5218,5220,5222,5224,5226,5228],{"class":105,"line":5217},309,[103,5219,1274],{"class":170},[103,5221,136],{"class":1190},[103,5223,3773],{"class":109},[103,5225,563],{"class":170},[103,5227,1704],{"class":113},[103,5229,1220],{"class":170},[103,5231,5233,5235,5237,5239,5241,5244,5246,5248,5251],{"class":105,"line":5232},310,[103,5234,1369],{"class":170},[103,5236,4403],{"class":1190},[103,5238,1212],{"class":109},[103,5240,563],{"class":170},[103,5242,5243],{"class":113},"\"laser_sensor\"",[103,5245,1114],{"class":109},[103,5247,563],{"class":170},[103,5249,5250],{"class":113},"\"ray\"",[103,5252,1220],{"class":170},[103,5254,5256,5258,5260,5262,5264],{"class":105,"line":5255},311,[103,5257,1369],{"class":170},[103,5259,4518],{"class":1190},[103,5261,4141],{"class":170},[103,5263,4518],{"class":1190},[103,5265,1220],{"class":170},[103,5267,5269,5271,5273,5275,5277],{"class":105,"line":5268},312,[103,5270,1369],{"class":170},[103,5272,4546],{"class":1190},[103,5274,4141],{"class":170},[103,5276,4546],{"class":1190},[103,5278,1220],{"class":170},[103,5280,5282,5284,5286,5289,5291],{"class":105,"line":5281},313,[103,5283,1369],{"class":170},[103,5285,4013],{"class":1190},[103,5287,5288],{"class":170},">5\u003C\u002F",[103,5290,4013],{"class":1190},[103,5292,1220],{"class":170},[103,5294,5296,5298,5301,5304,5306],{"class":105,"line":5295},314,[103,5297,1369],{"class":170},[103,5299,5300],{"class":1190},"pose",[103,5302,5303],{"class":170},">0 0 0.075 0 0 0\u003C\u002F",[103,5305,5300],{"class":1190},[103,5307,1220],{"class":170},[103,5309,5311,5313,5316],{"class":105,"line":5310},315,[103,5312,1369],{"class":170},[103,5314,5315],{"class":1190},"ray",[103,5317,1220],{"class":170},[103,5319,5321,5323,5326],{"class":105,"line":5320},316,[103,5322,1359],{"class":170},[103,5324,5325],{"class":1190},"scan",[103,5327,1220],{"class":170},[103,5329,5331,5333,5336],{"class":105,"line":5330},317,[103,5332,2557],{"class":170},[103,5334,5335],{"class":1190},"horizontal",[103,5337,1220],{"class":170},[103,5339,5341,5343,5346,5349,5351],{"class":105,"line":5340},318,[103,5342,1451],{"class":170},[103,5344,5345],{"class":1190},"samples",[103,5347,5348],{"class":170},">360\u003C\u002F",[103,5350,5345],{"class":1190},[103,5352,1220],{"class":170},[103,5354,5356,5358,5361,5364,5366],{"class":105,"line":5355},319,[103,5357,1451],{"class":170},[103,5359,5360],{"class":1190},"resolution",[103,5362,5363],{"class":170},">1.000000\u003C\u002F",[103,5365,5360],{"class":1190},[103,5367,1220],{"class":170},[103,5369,5371,5373,5376,5379,5381],{"class":105,"line":5370},320,[103,5372,1451],{"class":170},[103,5374,5375],{"class":1190},"min_angle",[103,5377,5378],{"class":170},">0.000000\u003C\u002F",[103,5380,5375],{"class":1190},[103,5382,1220],{"class":170},[103,5384,5386,5388,5391,5394,5396],{"class":105,"line":5385},321,[103,5387,1451],{"class":170},[103,5389,5390],{"class":1190},"max_angle",[103,5392,5393],{"class":170},">6.280000\u003C\u002F",[103,5395,5390],{"class":1190},[103,5397,1220],{"class":170},[103,5399,5401,5403,5405],{"class":105,"line":5400},322,[103,5402,4675],{"class":170},[103,5404,5335],{"class":1190},[103,5406,1220],{"class":170},[103,5408,5410,5412,5414],{"class":105,"line":5409},323,[103,5411,2573],{"class":170},[103,5413,5325],{"class":1190},[103,5415,1220],{"class":170},[103,5417,5419,5421,5424],{"class":105,"line":5418},324,[103,5420,1359],{"class":170},[103,5422,5423],{"class":1190},"range",[103,5425,1220],{"class":170},[103,5427,5429,5431,5434,5437,5439],{"class":105,"line":5428},325,[103,5430,2557],{"class":170},[103,5432,5433],{"class":1190},"min",[103,5435,5436],{"class":170},">0.120000\u003C\u002F",[103,5438,5433],{"class":1190},[103,5440,1220],{"class":170},[103,5442,5444,5446,5449,5452,5454],{"class":105,"line":5443},326,[103,5445,2557],{"class":170},[103,5447,5448],{"class":1190},"max",[103,5450,5451],{"class":170},">3.5\u003C\u002F",[103,5453,5448],{"class":1190},[103,5455,1220],{"class":170},[103,5457,5459,5461,5463,5466,5468],{"class":105,"line":5458},327,[103,5460,2557],{"class":170},[103,5462,5360],{"class":1190},[103,5464,5465],{"class":170},">0.015000\u003C\u002F",[103,5467,5360],{"class":1190},[103,5469,1220],{"class":170},[103,5471,5473,5475,5477],{"class":105,"line":5472},328,[103,5474,2573],{"class":170},[103,5476,5423],{"class":1190},[103,5478,1220],{"class":170},[103,5480,5482,5484,5486],{"class":105,"line":5481},329,[103,5483,1359],{"class":170},[103,5485,4590],{"class":1190},[103,5487,1220],{"class":170},[103,5489,5491,5493,5496,5499,5501],{"class":105,"line":5490},330,[103,5492,2557],{"class":170},[103,5494,5495],{"class":1190},"type",[103,5497,5498],{"class":170},">gaussian\u003C\u002F",[103,5500,5495],{"class":1190},[103,5502,1220],{"class":170},[103,5504,5506,5508,5510,5512,5514],{"class":105,"line":5505},331,[103,5507,2557],{"class":170},[103,5509,4607],{"class":1190},[103,5511,4610],{"class":170},[103,5513,4607],{"class":1190},[103,5515,1220],{"class":170},[103,5517,5519,5521,5523,5526,5528],{"class":105,"line":5518},332,[103,5520,2557],{"class":170},[103,5522,4622],{"class":1190},[103,5524,5525],{"class":170},">0.01\u003C\u002F",[103,5527,4622],{"class":1190},[103,5529,1220],{"class":170},[103,5531,5533,5535,5537],{"class":105,"line":5532},333,[103,5534,2573],{"class":170},[103,5536,4590],{"class":1190},[103,5538,1220],{"class":170},[103,5540,5542,5544,5546],{"class":105,"line":5541},334,[103,5543,1426],{"class":170},[103,5545,5315],{"class":1190},[103,5547,1220],{"class":170},[103,5549,5551],{"class":105,"line":5550},335,[103,5552,309],{"emptyLinePlaceholder":308},[103,5554,5556,5558,5560,5562,5564,5567,5569,5571,5574],{"class":105,"line":5555},336,[103,5557,1369],{"class":170},[103,5559,3925],{"class":1190},[103,5561,1212],{"class":109},[103,5563,563],{"class":170},[103,5565,5566],{"class":113},"\"laserscan\"",[103,5568,3935],{"class":109},[103,5570,563],{"class":170},[103,5572,5573],{"class":113},"\"libgazebo_ros_ray_sensor.so\"",[103,5575,1220],{"class":170},[103,5577,5579,5581,5583],{"class":105,"line":5578},337,[103,5580,1747],{"class":170},[103,5582,3950],{"class":1190},[103,5584,1220],{"class":170},[103,5586,5588],{"class":105,"line":5587},338,[103,5589,309],{"emptyLinePlaceholder":308},[103,5591,5593,5595,5597,5600,5602],{"class":105,"line":5592},339,[103,5594,1359],{"class":170},[103,5596,3975],{"class":1190},[103,5598,5599],{"class":170},">~\u002Fout:=scan\u003C\u002F",[103,5601,3975],{"class":1190},[103,5603,1220],{"class":170},[103,5605,5607,5609,5611],{"class":105,"line":5606},340,[103,5608,2532],{"class":170},[103,5610,3950],{"class":1190},[103,5612,1220],{"class":170},[103,5614,5616,5618,5621,5624,5626],{"class":105,"line":5615},341,[103,5617,1747],{"class":170},[103,5619,5620],{"class":1190},"output_type",[103,5622,5623],{"class":170},">sensor_msgs\u002FLaserScan\u003C\u002F",[103,5625,5620],{"class":1190},[103,5627,1220],{"class":170},[103,5629,5631,5633,5636,5639,5641],{"class":105,"line":5630},342,[103,5632,1747],{"class":170},[103,5634,5635],{"class":1190},"frame_name",[103,5637,5638],{"class":170},">laser_link\u003C\u002F",[103,5640,5635],{"class":1190},[103,5642,1220],{"class":170},[103,5644,5646,5648,5650],{"class":105,"line":5645},343,[103,5647,1426],{"class":170},[103,5649,3925],{"class":1190},[103,5651,1220],{"class":170},[103,5653,5655,5657,5659],{"class":105,"line":5654},344,[103,5656,1426],{"class":170},[103,5658,4403],{"class":1190},[103,5660,1220],{"class":170},[103,5662,5664,5666,5668],{"class":105,"line":5663},345,[103,5665,1478],{"class":170},[103,5667,136],{"class":1190},[103,5669,1220],{"class":170},[103,5671,5673],{"class":105,"line":5672},346,[103,5674,309],{"emptyLinePlaceholder":308},[103,5676,5678,5681,5683],{"class":105,"line":5677},347,[103,5679,5680],{"class":170},"\u003C\u002F",[103,5682,1209],{"class":1190},[103,5684,1220],{"class":170},[25,5686,5687],{},"看到这里你是不是迫不及待敲起来命令行来加载我们的机器人到gazebo了，别着急，小鱼再推荐一个可视化服务请求工具，其实在第六章中小鱼介绍过，在rqt工具集里有一个叫服务请求工具。",[25,5689,5690],{},"命令行输入rqt，在插件选项中选择Services->Service Caller,然后再下拉框选择\u002Fspawn_entity服务，即可看到下面的界面。",[25,5692,5693],{},[57,5694],{"alt":59,"src":5695},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1633.webp",[25,5697,5698],{},"接着我们把我们的FishBot的URDF模型复制粘贴，放到xml中（注意要把原来的''删掉哦！）",[25,5700,5701],{},[57,5702],{"alt":59,"src":5703},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1634.webp",[25,5705,5706],{},"然后点右上角的call，可以显示下图成功了。",[25,5708,5709],{},[57,5710],{"alt":59,"src":5711},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1635.webp",[25,5713,5714],{},"接着就可以看到工厂返回说成功把机器人制作出来送入gazebo了。",[25,5716,5717],{},"此时再看我们的Gazebo,一个小小的，白白的机器人出现了。",[25,5719,5720],{},[57,5721],{"alt":59,"src":5722},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1636.webp",[25,5724,5725],{},"shift+鼠标左键，或者直接点滚轮中键，都可以拖动视角。很多玩过第三人称游戏的学弟学妹肯定都不陌生这种操控吧。",[86,5727,5728],{"id":5728},"在不同位置加载多个机器人",[25,5730,5731],{},"可以再生产一个fishbot（为了后面需要多机器人仿真的小伙伴）。",[25,5733,5734],{},"修改rqt中的参数，增加一个命名空间，然后修改一个位置，让第二个机器人和第一个相距1m的地方生产，然后点击Call。",[25,5736,5737],{},[57,5738],{"alt":59,"src":5739},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1637.webp",[25,5741,5742],{},"返回成功，此时拖送Gazebo观察一下，发现多出了一个机器人，距离刚好是在X轴（红色）1米（一个小格子一米）处。",[25,5744,5745],{},[57,5746],{"alt":59,"src":5747},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1638.webp",[86,5749,5750],{"id":5750},"查询和删除机器人",[25,5752,5753],{},"利用rqt工具，我们再对另外两个服务接口进行请求。",[25,5755,5756],{},"首先先查询有几个模型在仿真环境中",[25,5758,5759],{},[57,5760],{"alt":59,"src":5761},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1639.webp",[25,5763,5764],{},"查到了三个模型，一个大地，一个fishbot，一个fishbot_0。",[25,5766,5767],{},"我们接着尝试把fishbot_0删掉，选择删除实体，输入fishbot_0的名字，拿起小电话通知工厂回收我们的0号fishbot。",[25,5769,5770],{},[57,5771],{"alt":59,"src":5772},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1640.webp",[25,5774,5775],{},"调用成功，观察gazebo发现机器人，人没了",[25,5777,5778],{},[57,5779],{"alt":59,"src":5780},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1641.webp",[86,5782,5783],{"id":5783},"创建工作空间",[25,5785,5786,5787],{},"本节代码参考鱼香ROS：",[17,5788,5789],{"href":5789,"rel":5790},"https:\u002F\u002Fgithub.com\u002Ffishros\u002Ffishbot\u002Ftree\u002Fnavgation2",[21],[94,5792,5794],{"className":96,"code":5793,"language":98,"meta":59,"style":59},"\n# 创建工作空间\nmkdir -p ws_simulations\u002Fsrc\ncd ws_simulations\u002Fsrc\n",[100,5795,5796,5800,5805,5816],{"__ignoreMap":59},[103,5797,5798],{"class":105,"line":106},[103,5799,309],{"emptyLinePlaceholder":308},[103,5801,5802],{"class":105,"line":231},[103,5803,5804],{"class":227},"# 创建工作空间\n",[103,5806,5807,5810,5813],{"class":105,"line":259},[103,5808,5809],{"class":109},"mkdir",[103,5811,5812],{"class":139}," -p",[103,5814,5815],{"class":113}," ws_simulations\u002Fsrc\n",[103,5817,5818,5821],{"class":105,"line":274},[103,5819,5820],{"class":139},"cd",[103,5822,5815],{"class":113},[25,5824,5825],{},"创建功能包",[94,5827,5829],{"className":96,"code":5828,"language":98,"meta":59,"style":59},"ros2 pkg create fishbot_description --build-type ament_cmake\ncd fishbot_description\n",[100,5830,5831,5850],{"__ignoreMap":59},[103,5832,5833,5835,5838,5841,5844,5847],{"class":105,"line":106},[103,5834,1045],{"class":109},[103,5836,5837],{"class":113}," pkg",[103,5839,5840],{"class":113}," create",[103,5842,5843],{"class":113}," fishbot_description",[103,5845,5846],{"class":139}," --build-type",[103,5848,5849],{"class":113}," ament_cmake\n",[103,5851,5852,5854],{"class":105,"line":231},[103,5853,5820],{"class":139},[103,5855,5856],{"class":113}," fishbot_description\n",[25,5858,5859],{},"然后配置package.xml",[94,5861,5863],{"className":1178,"code":5862,"language":1180,"meta":59,"style":59},"  \u003Cexec_depend>rviz2\u003C\u002Fexec_depend>\n  \u003Cexec_depend>xacro\u003C\u002Fexec_depend>\n  \u003Cexec_depend>robot_state_publisher\u003C\u002Fexec_depend>\n  \u003Cexec_depend>joint_state_publisher\u003C\u002Fexec_depend>\n  \u003Cexec_depend>ros2launch\u003C\u002Fexec_depend>\n",[100,5864,5865,5879,5892,5905,5918],{"__ignoreMap":59},[103,5866,5867,5869,5872,5875,5877],{"class":105,"line":106},[103,5868,1229],{"class":170},[103,5870,5871],{"class":1190},"exec_depend",[103,5873,5874],{"class":170},">rviz2\u003C\u002F",[103,5876,5871],{"class":1190},[103,5878,1220],{"class":170},[103,5880,5881,5883,5885,5888,5890],{"class":105,"line":231},[103,5882,1229],{"class":170},[103,5884,5871],{"class":1190},[103,5886,5887],{"class":170},">xacro\u003C\u002F",[103,5889,5871],{"class":1190},[103,5891,1220],{"class":170},[103,5893,5894,5896,5898,5901,5903],{"class":105,"line":259},[103,5895,1229],{"class":170},[103,5897,5871],{"class":1190},[103,5899,5900],{"class":170},">robot_state_publisher\u003C\u002F",[103,5902,5871],{"class":1190},[103,5904,1220],{"class":170},[103,5906,5907,5909,5911,5914,5916],{"class":105,"line":274},[103,5908,1229],{"class":170},[103,5910,5871],{"class":1190},[103,5912,5913],{"class":170},">joint_state_publisher\u003C\u002F",[103,5915,5871],{"class":1190},[103,5917,1220],{"class":170},[103,5919,5920,5922,5924,5927,5929],{"class":105,"line":286},[103,5921,1229],{"class":170},[103,5923,5871],{"class":1190},[103,5925,5926],{"class":170},">ros2launch\u003C\u002F",[103,5928,5871],{"class":1190},[103,5930,1220],{"class":170},[25,5932,5933],{},[57,5934],{"alt":59,"src":5935},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1642.webp",[25,5937,5938],{},"然后修改cmakelists.txt",[94,5940,5942],{"className":96,"code":5941,"language":98,"meta":59,"style":59},"install(\n  DIRECTORY launch urdf rviz meshes\n  DESTINATION share\u002F${PROJECT_NAME}  \n)\n",[100,5943,5944,5949,5966,5977],{"__ignoreMap":59},[103,5945,5946],{"class":105,"line":106},[103,5947,5948],{"class":109},"install(\n",[103,5950,5951,5954,5957,5960,5963],{"class":105,"line":231},[103,5952,5953],{"class":109},"  DIRECTORY",[103,5955,5956],{"class":113}," launch",[103,5958,5959],{"class":113}," urdf",[103,5961,5962],{"class":113}," rviz",[103,5964,5965],{"class":113}," meshes\n",[103,5967,5968,5971,5974],{"class":105,"line":259},[103,5969,5970],{"class":109},"  DESTINATION",[103,5972,5973],{"class":113}," share\u002F",[103,5975,5976],{"class":170},"${PROJECT_NAME}  \n",[103,5978,5979],{"class":105,"line":274},[103,5980,5981],{"class":170},")\n",[25,5983,5984],{},[57,5985],{"alt":59,"src":5986},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1643.webp",[25,5988,5989],{},"克隆下鱼香ROS的仓库，并复制下里面的文件到咱们的目录下。这都是上一节的东西，与本节学习无关，直接复制就行。",[25,5991,5992],{},[57,5993],{"alt":59,"src":5994},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1644.webp",[25,5996,5997,5998,6001,6002,6005],{},"打开工作空间，在",[100,5999,6000],{},"src\u002Ffishbot_description\u002Flaunch","中添加一个",[100,6003,6004],{},"gazebo.launch.py","文件，我们开始编写launch文件来在gazebo中加载机器人模型。",[25,6007,6008],{},"我们主要需要做两件事：",[6010,6011,6012],"ol",{},[1086,6013,6014],{},"启动gazebo，我们可以将命令行写成一个launch节点",[94,6016,6020],{"className":6017,"code":6018,"language":6019,"meta":59,"style":59},"language-python shiki shiki-themes github-light github-dark","ExecuteProcess(\n        cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so', gazebo_world_path],\n        output='screen')\n\n","python",[100,6021,6022,6027,6070],{"__ignoreMap":59},[103,6023,6024],{"class":105,"line":106},[103,6025,6026],{"class":170},"ExecuteProcess(\n",[103,6028,6029,6033,6035,6038,6041,6044,6047,6050,6053,6055,6058,6060,6062,6064,6067],{"class":105,"line":231},[103,6030,6032],{"class":6031},"s4XuR","        cmd",[103,6034,563],{"class":166},[103,6036,6037],{"class":170},"[",[103,6039,6040],{"class":113},"'gazebo'",[103,6042,6043],{"class":170},", ",[103,6045,6046],{"class":113},"'--verbose'",[103,6048,6049],{"class":170},",",[103,6051,6052],{"class":113},"'-s'",[103,6054,6043],{"class":170},[103,6056,6057],{"class":113},"'libgazebo_ros_init.so'",[103,6059,6043],{"class":170},[103,6061,6052],{"class":113},[103,6063,6043],{"class":170},[103,6065,6066],{"class":113},"'libgazebo_ros_factory.so'",[103,6068,6069],{"class":170},", gazebo_world_path],\n",[103,6071,6072,6075,6077,6080],{"class":105,"line":259},[103,6073,6074],{"class":6031},"        output",[103,6076,563],{"class":166},[103,6078,6079],{"class":113},"'screen'",[103,6081,5981],{"class":170},[6010,6083,6084],{"start":231},[1086,6085,6086,6087,6090],{},"上面我们加载机器人是直接将XML格式的URDF复制过去进行加载的，这样很不方便，我们可以使用gazebo_ros为我们提供好的一个叫做",[100,6088,6089],{},"spawn_entity.py","节点，该节点支持从文件地址直接生产机器人到Gazebo。",[25,6092,6093],{},"该节点需要两个参数，一个机器人的模型名字和urdf的文件地址，这个简单，前面我们曾经使用package_share来拼接过urdf路径。",[94,6095,6097],{"className":6017,"code":6096,"language":6019,"meta":59,"style":59},"spawn_entity_cmd = Node(\n    package='gazebo_ros', \n    executable='spawn_entity.py',\n    arguments=['-entity', robot_name_in_model,  '-file', urdf_model_path ], output='screen')\n",[100,6098,6099,6109,6122,6135],{"__ignoreMap":59},[103,6100,6101,6104,6106],{"class":105,"line":106},[103,6102,6103],{"class":170},"spawn_entity_cmd ",[103,6105,563],{"class":166},[103,6107,6108],{"class":170}," Node(\n",[103,6110,6111,6114,6116,6119],{"class":105,"line":231},[103,6112,6113],{"class":6031},"    package",[103,6115,563],{"class":166},[103,6117,6118],{"class":113},"'gazebo_ros'",[103,6120,6121],{"class":170},", \n",[103,6123,6124,6127,6129,6132],{"class":105,"line":259},[103,6125,6126],{"class":6031},"    executable",[103,6128,563],{"class":166},[103,6130,6131],{"class":113},"'spawn_entity.py'",[103,6133,6134],{"class":170},",\n",[103,6136,6137,6140,6142,6144,6147,6150,6153,6156,6159,6161,6163],{"class":105,"line":274},[103,6138,6139],{"class":6031},"    arguments",[103,6141,563],{"class":166},[103,6143,6037],{"class":170},[103,6145,6146],{"class":113},"'-entity'",[103,6148,6149],{"class":170},", robot_name_in_model,  ",[103,6151,6152],{"class":113},"'-file'",[103,6154,6155],{"class":170},", urdf_model_path ], ",[103,6157,6158],{"class":6031},"output",[103,6160,563],{"class":166},[103,6162,6079],{"class":113},[103,6164,5981],{"class":170},[25,6166,6167],{},"先加载赵虚左老师的模板",[25,6169,6170],{},[57,6171],{"alt":59,"src":6172},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1645.webp",[25,6174,6175],{},"我们首先需要ExecuteProcess来输入终端命令，所以要先把from launch.actions import ExecuteProcess的注释先打开。",[25,6177,6178],{},"为了方便修改加载的机器人模型和urdf,我们还需要使用share目录，所以也要把from ament_index_python.packages import get_package_share_directory的注释打开，并import os。",[25,6180,6181],{},"写完后的launch文件如下：",[94,6183,6185],{"className":6017,"code":6184,"language":6019,"meta":59,"style":59},"from launch import LaunchDescription\nfrom launch_ros.actions import Node\n\n# 封装终端指令相关类\nfrom launch.actions import ExecuteProcess\n\n# from launch.substitutions import FindExecutable\n\n# 参数声明与获取\n\n# from launch.actions import DeclareLaunchArgument\n\n# from launch.substitutions import LaunchConfiguration\n\n# 文件包含相关\n\n# from launch.actions import IncludeLaunchDescription\n\n# from launch.launch_description_sources import PythonLaunchDescriptionSource\n\n# 分组相关\n\n# from launch_ros.actions import PushRosNamespace\n\n# from launch.actions import GroupAction\n\n# 事件相关\n\n# from launch.event_handlers import OnProcessStart,OnProcessExit\n\n# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n\n# 获取功能包下share目录或路径\nfrom ament_index_python.packages import get_package_share_directory\nimport os\n\ndef generate_launch_description():\n    robot_name_in_model = 'fishbot'\n    package_name = 'fishbot_description'\n    urdf_name = \"fishbot_gazebo.urdf\"\n\n    pkg_share = get_package_share_directory(f\"{package_name}\")\n    urdf_model_path = os.path.join(pkg_share, f'urdf\u002Furdf\u002F{urdf_name}')\n\n    # Start Gazebo server\n    start_gazebo_cmd = ExecuteProcess(\n        cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so'],\n        output='screen')\n\n    # Launch the robot\n    spawn_entity_cmd = Node(\n        package='gazebo_ros', \n        executable='spawn_entity.py',\n        arguments=['-entity', robot_name_in_model,  '-file', urdf_model_path ], output='screen')\n\n    return LaunchDescription([start_gazebo_cmd,spawn_entity_cmd])\n",[100,6186,6187,6200,6212,6216,6221,6233,6237,6242,6246,6251,6255,6260,6264,6269,6273,6278,6282,6287,6291,6296,6300,6305,6309,6314,6318,6323,6327,6332,6336,6341,6345,6350,6354,6359,6371,6378,6382,6393,6403,6413,6423,6427,6456,6483,6487,6492,6502,6535,6545,6549,6554,6563,6574,6585,6610,6614],{"__ignoreMap":59},[103,6188,6189,6191,6194,6197],{"class":105,"line":106},[103,6190,933],{"class":166},[103,6192,6193],{"class":170}," launch ",[103,6195,6196],{"class":166},"import",[103,6198,6199],{"class":170}," LaunchDescription\n",[103,6201,6202,6204,6207,6209],{"class":105,"line":231},[103,6203,933],{"class":166},[103,6205,6206],{"class":170}," launch_ros.actions ",[103,6208,6196],{"class":166},[103,6210,6211],{"class":170}," Node\n",[103,6213,6214],{"class":105,"line":259},[103,6215,309],{"emptyLinePlaceholder":308},[103,6217,6218],{"class":105,"line":274},[103,6219,6220],{"class":227},"# 封装终端指令相关类\n",[103,6222,6223,6225,6228,6230],{"class":105,"line":286},[103,6224,933],{"class":166},[103,6226,6227],{"class":170}," launch.actions ",[103,6229,6196],{"class":166},[103,6231,6232],{"class":170}," ExecuteProcess\n",[103,6234,6235],{"class":105,"line":305},[103,6236,309],{"emptyLinePlaceholder":308},[103,6238,6239],{"class":105,"line":312},[103,6240,6241],{"class":227},"# from launch.substitutions import FindExecutable\n",[103,6243,6244],{"class":105,"line":327},[103,6245,309],{"emptyLinePlaceholder":308},[103,6247,6248],{"class":105,"line":348},[103,6249,6250],{"class":227},"# 参数声明与获取\n",[103,6252,6253],{"class":105,"line":359},[103,6254,309],{"emptyLinePlaceholder":308},[103,6256,6257],{"class":105,"line":368},[103,6258,6259],{"class":227},"# from launch.actions import DeclareLaunchArgument\n",[103,6261,6262],{"class":105,"line":383},[103,6263,309],{"emptyLinePlaceholder":308},[103,6265,6266],{"class":105,"line":388},[103,6267,6268],{"class":227},"# from launch.substitutions import LaunchConfiguration\n",[103,6270,6271],{"class":105,"line":394},[103,6272,309],{"emptyLinePlaceholder":308},[103,6274,6275],{"class":105,"line":399},[103,6276,6277],{"class":227},"# 文件包含相关\n",[103,6279,6280],{"class":105,"line":405},[103,6281,309],{"emptyLinePlaceholder":308},[103,6283,6284],{"class":105,"line":410},[103,6285,6286],{"class":227},"# from launch.actions import IncludeLaunchDescription\n",[103,6288,6289],{"class":105,"line":416},[103,6290,309],{"emptyLinePlaceholder":308},[103,6292,6293],{"class":105,"line":421},[103,6294,6295],{"class":227},"# from launch.launch_description_sources import PythonLaunchDescriptionSource\n",[103,6297,6298],{"class":105,"line":427},[103,6299,309],{"emptyLinePlaceholder":308},[103,6301,6302],{"class":105,"line":432},[103,6303,6304],{"class":227},"# 分组相关\n",[103,6306,6307],{"class":105,"line":438},[103,6308,309],{"emptyLinePlaceholder":308},[103,6310,6311],{"class":105,"line":443},[103,6312,6313],{"class":227},"# from launch_ros.actions import PushRosNamespace\n",[103,6315,6316],{"class":105,"line":449},[103,6317,309],{"emptyLinePlaceholder":308},[103,6319,6320],{"class":105,"line":454},[103,6321,6322],{"class":227},"# from launch.actions import GroupAction\n",[103,6324,6325],{"class":105,"line":460},[103,6326,309],{"emptyLinePlaceholder":308},[103,6328,6329],{"class":105,"line":465},[103,6330,6331],{"class":227},"# 事件相关\n",[103,6333,6334],{"class":105,"line":471},[103,6335,309],{"emptyLinePlaceholder":308},[103,6337,6338],{"class":105,"line":476},[103,6339,6340],{"class":227},"# from launch.event_handlers import OnProcessStart,OnProcessExit\n",[103,6342,6343],{"class":105,"line":504},[103,6344,309],{"emptyLinePlaceholder":308},[103,6346,6347],{"class":105,"line":530},[103,6348,6349],{"class":227},"# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n",[103,6351,6352],{"class":105,"line":574},[103,6353,309],{"emptyLinePlaceholder":308},[103,6355,6356],{"class":105,"line":579},[103,6357,6358],{"class":227},"# 获取功能包下share目录或路径\n",[103,6360,6361,6363,6366,6368],{"class":105,"line":590},[103,6362,933],{"class":166},[103,6364,6365],{"class":170}," ament_index_python.packages ",[103,6367,6196],{"class":166},[103,6369,6370],{"class":170}," get_package_share_directory\n",[103,6372,6373,6375],{"class":105,"line":635},[103,6374,6196],{"class":166},[103,6376,6377],{"class":170}," os\n",[103,6379,6380],{"class":105,"line":665},[103,6381,309],{"emptyLinePlaceholder":308},[103,6383,6384,6387,6390],{"class":105,"line":677},[103,6385,6386],{"class":166},"def",[103,6388,6389],{"class":109}," generate_launch_description",[103,6391,6392],{"class":170},"():\n",[103,6394,6395,6398,6400],{"class":105,"line":799},[103,6396,6397],{"class":170},"    robot_name_in_model ",[103,6399,563],{"class":166},[103,6401,6402],{"class":113}," 'fishbot'\n",[103,6404,6405,6408,6410],{"class":105,"line":805},[103,6406,6407],{"class":170},"    package_name ",[103,6409,563],{"class":166},[103,6411,6412],{"class":113}," 'fishbot_description'\n",[103,6414,6415,6418,6420],{"class":105,"line":817},[103,6416,6417],{"class":170},"    urdf_name ",[103,6419,563],{"class":166},[103,6421,6422],{"class":113}," \"fishbot_gazebo.urdf\"\n",[103,6424,6425],{"class":105,"line":823},[103,6426,309],{"emptyLinePlaceholder":308},[103,6428,6429,6432,6434,6437,6440,6443,6446,6449,6452,6454],{"class":105,"line":829},[103,6430,6431],{"class":170},"    pkg_share ",[103,6433,563],{"class":166},[103,6435,6436],{"class":170}," get_package_share_directory(",[103,6438,6439],{"class":166},"f",[103,6441,6442],{"class":113},"\"",[103,6444,6445],{"class":139},"{",[103,6447,6448],{"class":170},"package_name",[103,6450,6451],{"class":139},"}",[103,6453,6442],{"class":113},[103,6455,5981],{"class":170},[103,6457,6458,6461,6463,6466,6468,6471,6473,6476,6478,6481],{"class":105,"line":835},[103,6459,6460],{"class":170},"    urdf_model_path ",[103,6462,563],{"class":166},[103,6464,6465],{"class":170}," os.path.join(pkg_share, ",[103,6467,6439],{"class":166},[103,6469,6470],{"class":113},"'urdf\u002Furdf\u002F",[103,6472,6445],{"class":139},[103,6474,6475],{"class":170},"urdf_name",[103,6477,6451],{"class":139},[103,6479,6480],{"class":113},"'",[103,6482,5981],{"class":170},[103,6484,6485],{"class":105,"line":841},[103,6486,309],{"emptyLinePlaceholder":308},[103,6488,6489],{"class":105,"line":864},[103,6490,6491],{"class":227},"    # Start Gazebo server\n",[103,6493,6494,6497,6499],{"class":105,"line":907},[103,6495,6496],{"class":170},"    start_gazebo_cmd ",[103,6498,563],{"class":166},[103,6500,6501],{"class":170}," ExecuteProcess(\n",[103,6503,6504,6506,6508,6510,6512,6514,6516,6518,6520,6522,6524,6526,6528,6530,6532],{"class":105,"line":944},[103,6505,6032],{"class":6031},[103,6507,563],{"class":166},[103,6509,6037],{"class":170},[103,6511,6040],{"class":113},[103,6513,6043],{"class":170},[103,6515,6046],{"class":113},[103,6517,6049],{"class":170},[103,6519,6052],{"class":113},[103,6521,6043],{"class":170},[103,6523,6057],{"class":113},[103,6525,6043],{"class":170},[103,6527,6052],{"class":113},[103,6529,6043],{"class":170},[103,6531,6066],{"class":113},[103,6533,6534],{"class":170},"],\n",[103,6536,6537,6539,6541,6543],{"class":105,"line":949},[103,6538,6074],{"class":6031},[103,6540,563],{"class":166},[103,6542,6079],{"class":113},[103,6544,5981],{"class":170},[103,6546,6547],{"class":105,"line":973},[103,6548,309],{"emptyLinePlaceholder":308},[103,6550,6551],{"class":105,"line":997},[103,6552,6553],{"class":227},"    # Launch the robot\n",[103,6555,6556,6559,6561],{"class":105,"line":1876},[103,6557,6558],{"class":170},"    spawn_entity_cmd ",[103,6560,563],{"class":166},[103,6562,6108],{"class":170},[103,6564,6565,6568,6570,6572],{"class":105,"line":1885},[103,6566,6567],{"class":6031},"        package",[103,6569,563],{"class":166},[103,6571,6118],{"class":113},[103,6573,6121],{"class":170},[103,6575,6576,6579,6581,6583],{"class":105,"line":1900},[103,6577,6578],{"class":6031},"        executable",[103,6580,563],{"class":166},[103,6582,6131],{"class":113},[103,6584,6134],{"class":170},[103,6586,6587,6590,6592,6594,6596,6598,6600,6602,6604,6606,6608],{"class":105,"line":1915},[103,6588,6589],{"class":6031},"        arguments",[103,6591,563],{"class":166},[103,6593,6037],{"class":170},[103,6595,6146],{"class":113},[103,6597,6149],{"class":170},[103,6599,6152],{"class":113},[103,6601,6155],{"class":170},[103,6603,6158],{"class":6031},[103,6605,563],{"class":166},[103,6607,6079],{"class":113},[103,6609,5981],{"class":170},[103,6611,6612],{"class":105,"line":1924},[103,6613,309],{"emptyLinePlaceholder":308},[103,6615,6616,6619],{"class":105,"line":1933},[103,6617,6618],{"class":166},"    return",[103,6620,6621],{"class":170}," LaunchDescription([start_gazebo_cmd,spawn_entity_cmd])\n",[25,6623,6624],{},"编译运行",[94,6626,6628],{"className":6017,"code":6627,"language":6019,"meta":59,"style":59},"colcon build --packages-select fishbot_description\nsource install\u002Fsetup.bash\nros2 launch fishbot_description gazebo.launch.py\n",[100,6629,6630,6647,6657],{"__ignoreMap":59},[103,6631,6632,6635,6639,6642,6644],{"class":105,"line":106},[103,6633,6634],{"class":170},"colcon build ",[103,6636,6638],{"class":6637},"s7hpK","--",[103,6640,6641],{"class":170},"packages",[103,6643,174],{"class":166},[103,6645,6646],{"class":170},"select fishbot_description\n",[103,6648,6649,6652,6654],{"class":105,"line":231},[103,6650,6651],{"class":170},"source install",[103,6653,188],{"class":166},[103,6655,6656],{"class":170},"setup.bash\n",[103,6658,6659],{"class":105,"line":259},[103,6660,6661],{"class":170},"ros2 launch fishbot_description gazebo.launch.py\n",[25,6663,6664],{},[57,6665],{"alt":59,"src":6666},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1646.webp",[86,6668,6669],{"id":6669},"插件",[25,6671,6672],{},"使用下面的指令可以查看所有的动态链接库：",[94,6674,6676],{"className":6017,"code":6675,"language":6019,"meta":59,"style":59},"ls \u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros*\n",[100,6677,6678],{"__ignoreMap":59},[103,6679,6680,6683,6685,6688,6690,6692,6694,6697,6699,6702,6704,6707],{"class":105,"line":106},[103,6681,6682],{"class":170},"ls ",[103,6684,188],{"class":166},[103,6686,6687],{"class":170},"opt",[103,6689,188],{"class":166},[103,6691,3950],{"class":170},[103,6693,188],{"class":166},[103,6695,6696],{"class":170},"humble",[103,6698,188],{"class":166},[103,6700,6701],{"class":170},"lib",[103,6703,188],{"class":166},[103,6705,6706],{"class":170},"libgazebo_ros",[103,6708,6709],{"class":166},"*\n",[25,6711,6712],{},[57,6713],{"alt":59,"src":6714},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1647.webp",[94,6716,6718],{"className":96,"code":6717,"language":98,"meta":59,"style":59},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros2_control.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_ackermann_drive.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_bumper.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_camera.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_diff_drive.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_elevator.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_factory.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_force.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_force_system.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_ft_sensor.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_gps_sensor.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_hand_of_god.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_harness.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_imu_sensor.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_init.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_joint_pose_trajectory.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_joint_state_publisher.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_node.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_p3d.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_planar_move.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_projector.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_properties.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_ray_sensor.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_state.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_template.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_tricycle_drive.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_utils.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_vacuum_gripper.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_video.so\n\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_wheel_slip.so\n",[100,6719,6720,6725,6730,6735,6740,6745,6750,6755,6760,6765,6770,6775,6780,6785,6790,6795,6800,6805,6810,6815,6820,6825,6830,6835,6840,6845,6850,6855,6860,6865],{"__ignoreMap":59},[103,6721,6722],{"class":105,"line":106},[103,6723,6724],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros2_control.so\n",[103,6726,6727],{"class":105,"line":231},[103,6728,6729],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_ackermann_drive.so\n",[103,6731,6732],{"class":105,"line":259},[103,6733,6734],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_bumper.so\n",[103,6736,6737],{"class":105,"line":274},[103,6738,6739],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_camera.so\n",[103,6741,6742],{"class":105,"line":286},[103,6743,6744],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_diff_drive.so\n",[103,6746,6747],{"class":105,"line":305},[103,6748,6749],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_elevator.so\n",[103,6751,6752],{"class":105,"line":312},[103,6753,6754],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_factory.so\n",[103,6756,6757],{"class":105,"line":327},[103,6758,6759],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_force.so\n",[103,6761,6762],{"class":105,"line":348},[103,6763,6764],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_force_system.so\n",[103,6766,6767],{"class":105,"line":359},[103,6768,6769],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_ft_sensor.so\n",[103,6771,6772],{"class":105,"line":368},[103,6773,6774],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_gps_sensor.so\n",[103,6776,6777],{"class":105,"line":383},[103,6778,6779],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_hand_of_god.so\n",[103,6781,6782],{"class":105,"line":388},[103,6783,6784],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_harness.so\n",[103,6786,6787],{"class":105,"line":394},[103,6788,6789],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_imu_sensor.so\n",[103,6791,6792],{"class":105,"line":399},[103,6793,6794],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_init.so\n",[103,6796,6797],{"class":105,"line":405},[103,6798,6799],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_joint_pose_trajectory.so\n",[103,6801,6802],{"class":105,"line":410},[103,6803,6804],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_joint_state_publisher.so\n",[103,6806,6807],{"class":105,"line":416},[103,6808,6809],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_node.so\n",[103,6811,6812],{"class":105,"line":421},[103,6813,6814],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_p3d.so\n",[103,6816,6817],{"class":105,"line":427},[103,6818,6819],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_planar_move.so\n",[103,6821,6822],{"class":105,"line":432},[103,6823,6824],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_projector.so\n",[103,6826,6827],{"class":105,"line":438},[103,6828,6829],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_properties.so\n",[103,6831,6832],{"class":105,"line":443},[103,6833,6834],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_ray_sensor.so\n",[103,6836,6837],{"class":105,"line":449},[103,6838,6839],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_state.so\n",[103,6841,6842],{"class":105,"line":454},[103,6843,6844],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_template.so\n",[103,6846,6847],{"class":105,"line":460},[103,6848,6849],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_tricycle_drive.so\n",[103,6851,6852],{"class":105,"line":465},[103,6853,6854],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_utils.so\n",[103,6856,6857],{"class":105,"line":471},[103,6858,6859],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_vacuum_gripper.so\n",[103,6861,6862],{"class":105,"line":476},[103,6863,6864],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_video.so\n",[103,6866,6867],{"class":105,"line":504},[103,6868,6869],{"class":109},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_wheel_slip.so\n",[6871,6872,6874],"h5",{"id":6873},"运动控制插件里程计odom","运动控制插件+里程计odom",[25,6876,6877],{},"本节课通过配置两轮差速控制插件，让我们的机器人动起来",[25,6879,6880],{},[57,6881],{"alt":59,"src":6882},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1648.webp",[25,6884,6885],{},"插件介绍：",[25,6887,6888],{},"Gazebo是一个独立于ROS的软件，对外提供了丰富的API可以使用，gazebo的插件按照用途大致可以分为两种：",[6010,6890,6891,6894],{},[1086,6892,6893],{},"用于控制的插件，通过插件可以控制机器人关节运动，可以进行位置、速度、力的控制，比如我们这节课的两轮差速控制器。",[1086,6895,6896],{},"用于数据采集的插件，比如IMU传感器用于采集机器人的惯性，激光雷达用于采集机器人周围的点云信息。",[25,6898,6899],{},"当然上面两类插件功能也可以写到一个插件里，两轮差速插件（gazebo_ros_diff_drive）就是一个二合一加强版。（差速控制+odom）",[25,6901,6902],{},"两轮差速插件用于控制机器人轮子关节的位置变化，同时该插件还会获取轮子的位置以及速度的信息的反馈，根据反馈的位置信息结合运动学模型即可计算出当前机器人的位姿（里程计）。",[25,6904,6905],{},"两轮差速控制器可以将轮子的目标转速发送给Gazebo，并从Gazebo获取到实际的速度和位置。（注意：发送给Gazebo是目标速度，反馈回来的是实际速度。目标!=实际，比如轮子卡住了，无论你发什么目标速度，实际速度都是0。）",[25,6907,6908],{},"要想快速了解一个系统的功能，最直接的就是看系统的对外的输入和输出是什么？什么都不要说，看下图：",[25,6910,6911],{},[57,6912],{"alt":59,"src":6913},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1649.webp",[25,6915,6916],{},"上图就是对gazebo_ros_diff_drive的输入和输出信息的总结，可以很直观的看到该插件主要输入控制指令，主要输出里程计信息。接着小鱼带你分别认识一下输入和输出两个部分。",[25,6918,6919],{},"这个插件需要配置一系列参数如下图：",[25,6921,6922],{},"不知道你是否还记得在第七章中，小鱼对两轮差速底盘的运动学正的介绍。如果要完成底盘的正逆解和里程计的推算就必须要知道轮子的直径和间距。",[25,6924,6925],{},"同时该插件还提供了一些可以控制输出的选项，因为是仿真，所以还要告诉插件轮子对应的joint名称等信息，这样就有了下面这个参数表格：",[6927,6928,6929,6943],"table",{},[6930,6931,6932],"thead",{},[6933,6934,6935,6940],"tr",{},[6936,6937,6939],"th",{"align":6938},"left","配置项",[6936,6941,6942],{"align":6938},"含义",[6944,6945,6946,6954,6961,6968,6975,6982,6989,6996,7003,7010,7017,7024,7031],"tbody",{},[6933,6947,6948,6951],{},[6949,6950,3950],"td",{"align":6938},[6949,6952,6953],{"align":6938},"ros相关配置，包含命名空间和话题重映射等",[6933,6955,6956,6958],{},[6949,6957,4013],{"align":6938},[6949,6959,6960],{"align":6938},"数据更新速率",[6933,6962,6963,6965],{},[6949,6964,4033],{"align":6938},[6949,6966,6967],{"align":6938},"左轮关节名称",[6933,6969,6970,6972],{},[6949,6971,4048],{"align":6938},[6949,6973,6974],{"align":6938},"右轮关节名称",[6933,6976,6977,6979],{},[6949,6978,4068],{"align":6938},[6949,6980,6981],{"align":6938},"左右轮子的间距",[6933,6983,6984,6986],{},[6949,6985,4083],{"align":6938},[6949,6987,6988],{"align":6938},"轮子的直径",[6933,6990,6991,6993],{},[6949,6992,4103],{"align":6938},[6949,6994,6995],{"align":6938},"轮子最大的力矩",[6933,6997,6998,7000],{},[6949,6999,4118],{"align":6938},[6949,7001,7002],{"align":6938},"轮子最大的加速度",[6933,7004,7005,7007],{},[6949,7006,4138],{"align":6938},[6949,7008,7009],{"align":6938},"是否发布里程计",[6933,7011,7012,7014],{},[6949,7013,4153],{"align":6938},[6949,7015,7016],{"align":6938},"是否发布里程计的tf开关",[6933,7018,7019,7021],{},[6949,7020,4167],{"align":6938},[6949,7022,7023],{"align":6938},"是否发布轮子的tf数据开关",[6933,7025,7026,7028],{},[6949,7027,4182],{"align":6938},[6949,7029,7030],{"align":6938},"里程计的framed ID，最终体现在话题和TF上",[6933,7032,7033,7035],{},[6949,7034,4197],{"align":6938},[6949,7036,7037],{"align":6938},"机器人的基础frame的ID",[25,7039,7040,7041,7044,7045],{},"控制指令：两轮差速控制器默认通过订阅话题",[100,7042,7043],{},"cmd_vel","来获取目标线速度和角速度。该话题的类型为：",[100,7046,7047],{},"geometry_msgs\u002Fmsg\u002FTwist",[25,7049,7050,7051],{},"该接口里主要是一些线速度和角速度都包含在x、y、z，代表坐标系的三个方向上的对应速度。 ",[34,7052,7053],{},"（详细的接口内容请看硬件平台章节）",[25,7055,7056],{},"两轮差速控制器收到这个话题数据后将其中的角速度和线速度转换上两个轮子的转动速度发送给Gazebo。",[25,7058,7059],{},"输出的信息：",[25,7061,7062,7063,7066,7067],{},"里程计信息默认的输出话题为",[100,7064,7065],{},"odom","，其消息类型为：",[100,7068,7069],{},"nav_msgs\u002Fmsg\u002FOdometry",[25,7071,7072,7073],{},"其数据主要包含三个部分： ",[34,7074,7053],{},[1083,7076,7077,7080,7083,7086],{},[1086,7078,7079],{},"header，表示该消息发布的时间",[1086,7081,7082],{},"pose，表示当前机器人位置和朝向",[1086,7084,7085],{},"twist，表示当前机器人的线速度和角速度",[1086,7087,7088],{},"数据中还包含一个covariance，其代表协方差矩阵，后面小鱼写篇文章来介绍下，这里只需了解其含义即可。",[25,7090,7091],{},"里程计TF信息也可以输出：设为true，订阅tf话题里你就可以看到像下面的msg，建议后面配置好后，手动修改下，对比区别",[94,7093,7097],{"className":7094,"code":7095,"language":7096,"meta":59,"style":59},"language-yaml shiki shiki-themes github-light github-dark","- header:\n    stamp:\n      sec: 6157\n      nanosec: 907000000\n    frame_id: odom\n  child_frame_id: base_footprint\n  transform:\n    translation:\n      x: 0.0005557960241049835\n      y: -0.0007350446303238693\n      z: 0.01599968753145574\n    rotation:\n      x: 4.691143395208505e-07\n      y: 7.115496626557812e-06\n      z: -0.018531475772549166\n      w: 0.9998282774331005\n","yaml",[100,7098,7099,7110,7117,7127,7137,7147,7157,7164,7171,7181,7191,7201,7208,7217,7226,7235],{"__ignoreMap":59},[103,7100,7101,7104,7107],{"class":105,"line":106},[103,7102,7103],{"class":170},"- ",[103,7105,7106],{"class":1190},"header",[103,7108,7109],{"class":170},":\n",[103,7111,7112,7115],{"class":105,"line":231},[103,7113,7114],{"class":1190},"    stamp",[103,7116,7109],{"class":170},[103,7118,7119,7122,7124],{"class":105,"line":259},[103,7120,7121],{"class":1190},"      sec",[103,7123,644],{"class":170},[103,7125,7126],{"class":139},"6157\n",[103,7128,7129,7132,7134],{"class":105,"line":274},[103,7130,7131],{"class":1190},"      nanosec",[103,7133,644],{"class":170},[103,7135,7136],{"class":139},"907000000\n",[103,7138,7139,7142,7144],{"class":105,"line":286},[103,7140,7141],{"class":1190},"    frame_id",[103,7143,644],{"class":170},[103,7145,7146],{"class":113},"odom\n",[103,7148,7149,7152,7154],{"class":105,"line":305},[103,7150,7151],{"class":1190},"  child_frame_id",[103,7153,644],{"class":170},[103,7155,7156],{"class":113},"base_footprint\n",[103,7158,7159,7162],{"class":105,"line":312},[103,7160,7161],{"class":1190},"  transform",[103,7163,7109],{"class":170},[103,7165,7166,7169],{"class":105,"line":327},[103,7167,7168],{"class":1190},"    translation",[103,7170,7109],{"class":170},[103,7172,7173,7176,7178],{"class":105,"line":348},[103,7174,7175],{"class":1190},"      x",[103,7177,644],{"class":170},[103,7179,7180],{"class":139},"0.0005557960241049835\n",[103,7182,7183,7186,7188],{"class":105,"line":359},[103,7184,7185],{"class":139},"      y",[103,7187,644],{"class":170},[103,7189,7190],{"class":139},"-0.0007350446303238693\n",[103,7192,7193,7196,7198],{"class":105,"line":368},[103,7194,7195],{"class":1190},"      z",[103,7197,644],{"class":170},[103,7199,7200],{"class":139},"0.01599968753145574\n",[103,7202,7203,7206],{"class":105,"line":383},[103,7204,7205],{"class":1190},"    rotation",[103,7207,7109],{"class":170},[103,7209,7210,7212,7214],{"class":105,"line":388},[103,7211,7175],{"class":1190},[103,7213,644],{"class":170},[103,7215,7216],{"class":139},"4.691143395208505e-07\n",[103,7218,7219,7221,7223],{"class":105,"line":394},[103,7220,7185],{"class":139},[103,7222,644],{"class":170},[103,7224,7225],{"class":139},"7.115496626557812e-06\n",[103,7227,7228,7230,7232],{"class":105,"line":399},[103,7229,7195],{"class":1190},[103,7231,644],{"class":170},[103,7233,7234],{"class":139},"-0.018531475772549166\n",[103,7236,7237,7240,7242],{"class":105,"line":405},[103,7238,7239],{"class":1190},"      w",[103,7241,644],{"class":170},[103,7243,7244],{"class":139},"0.9998282774331005\n",[25,7246,7247],{},"轮子TF信息也可以输出：设为true，订阅tf话题里你就可以看到像下面的msg，建议后面配置好后，手动修改下，对比区别",[94,7249,7251],{"className":7094,"code":7250,"language":7096,"meta":59,"style":59},"- header:\n    stamp:\n      sec: 6157\n      nanosec: 941000000\n    frame_id: base_link\n  child_frame_id: left_wheel_link\n  transform:\n    translation:\n      x: -0.02\n      y: 0.1\n      z: -0.06\n    rotation:\n      x: 0.0\n      y: 0.049519025127821005\n      z: 0.0\n      w: 0.9987731805321918\n- header:\n    stamp:\n      sec: 6157\n      nanosec: 941000000\n    frame_id: base_link\n  child_frame_id: right_wheel_link\n  transform:\n    translation:\n      x: -0.02\n      y: -0.1\n      z: -0.06\n    rotation:\n      x: 0.0\n      y: -0.0663387077034509\n      z: 0.0\n      w: 0.9977971616817898\n\n",[100,7252,7253,7261,7267,7275,7284,7293,7302,7308,7314,7323,7332,7341,7347,7356,7365,7373,7382,7390,7396,7404,7412,7420,7429,7435,7441,7449,7458,7466,7472,7480,7489,7497],{"__ignoreMap":59},[103,7254,7255,7257,7259],{"class":105,"line":106},[103,7256,7103],{"class":170},[103,7258,7106],{"class":1190},[103,7260,7109],{"class":170},[103,7262,7263,7265],{"class":105,"line":231},[103,7264,7114],{"class":1190},[103,7266,7109],{"class":170},[103,7268,7269,7271,7273],{"class":105,"line":259},[103,7270,7121],{"class":1190},[103,7272,644],{"class":170},[103,7274,7126],{"class":139},[103,7276,7277,7279,7281],{"class":105,"line":274},[103,7278,7131],{"class":1190},[103,7280,644],{"class":170},[103,7282,7283],{"class":139},"941000000\n",[103,7285,7286,7288,7290],{"class":105,"line":286},[103,7287,7141],{"class":1190},[103,7289,644],{"class":170},[103,7291,7292],{"class":113},"base_link\n",[103,7294,7295,7297,7299],{"class":105,"line":305},[103,7296,7151],{"class":1190},[103,7298,644],{"class":170},[103,7300,7301],{"class":113},"left_wheel_link\n",[103,7303,7304,7306],{"class":105,"line":312},[103,7305,7161],{"class":1190},[103,7307,7109],{"class":170},[103,7309,7310,7312],{"class":105,"line":327},[103,7311,7168],{"class":1190},[103,7313,7109],{"class":170},[103,7315,7316,7318,7320],{"class":105,"line":348},[103,7317,7175],{"class":1190},[103,7319,644],{"class":170},[103,7321,7322],{"class":139},"-0.02\n",[103,7324,7325,7327,7329],{"class":105,"line":359},[103,7326,7185],{"class":139},[103,7328,644],{"class":170},[103,7330,7331],{"class":139},"0.1\n",[103,7333,7334,7336,7338],{"class":105,"line":368},[103,7335,7195],{"class":1190},[103,7337,644],{"class":170},[103,7339,7340],{"class":139},"-0.06\n",[103,7342,7343,7345],{"class":105,"line":383},[103,7344,7205],{"class":1190},[103,7346,7109],{"class":170},[103,7348,7349,7351,7353],{"class":105,"line":388},[103,7350,7175],{"class":1190},[103,7352,644],{"class":170},[103,7354,7355],{"class":139},"0.0\n",[103,7357,7358,7360,7362],{"class":105,"line":394},[103,7359,7185],{"class":139},[103,7361,644],{"class":170},[103,7363,7364],{"class":139},"0.049519025127821005\n",[103,7366,7367,7369,7371],{"class":105,"line":399},[103,7368,7195],{"class":1190},[103,7370,644],{"class":170},[103,7372,7355],{"class":139},[103,7374,7375,7377,7379],{"class":105,"line":405},[103,7376,7239],{"class":1190},[103,7378,644],{"class":170},[103,7380,7381],{"class":139},"0.9987731805321918\n",[103,7383,7384,7386,7388],{"class":105,"line":410},[103,7385,7103],{"class":170},[103,7387,7106],{"class":1190},[103,7389,7109],{"class":170},[103,7391,7392,7394],{"class":105,"line":416},[103,7393,7114],{"class":1190},[103,7395,7109],{"class":170},[103,7397,7398,7400,7402],{"class":105,"line":421},[103,7399,7121],{"class":1190},[103,7401,644],{"class":170},[103,7403,7126],{"class":139},[103,7405,7406,7408,7410],{"class":105,"line":427},[103,7407,7131],{"class":1190},[103,7409,644],{"class":170},[103,7411,7283],{"class":139},[103,7413,7414,7416,7418],{"class":105,"line":432},[103,7415,7141],{"class":1190},[103,7417,644],{"class":170},[103,7419,7292],{"class":113},[103,7421,7422,7424,7426],{"class":105,"line":438},[103,7423,7151],{"class":1190},[103,7425,644],{"class":170},[103,7427,7428],{"class":113},"right_wheel_link\n",[103,7430,7431,7433],{"class":105,"line":443},[103,7432,7161],{"class":1190},[103,7434,7109],{"class":170},[103,7436,7437,7439],{"class":105,"line":449},[103,7438,7168],{"class":1190},[103,7440,7109],{"class":170},[103,7442,7443,7445,7447],{"class":105,"line":454},[103,7444,7175],{"class":1190},[103,7446,644],{"class":170},[103,7448,7322],{"class":139},[103,7450,7451,7453,7455],{"class":105,"line":460},[103,7452,7185],{"class":139},[103,7454,644],{"class":170},[103,7456,7457],{"class":139},"-0.1\n",[103,7459,7460,7462,7464],{"class":105,"line":465},[103,7461,7195],{"class":1190},[103,7463,644],{"class":170},[103,7465,7340],{"class":139},[103,7467,7468,7470],{"class":105,"line":471},[103,7469,7205],{"class":1190},[103,7471,7109],{"class":170},[103,7473,7474,7476,7478],{"class":105,"line":476},[103,7475,7175],{"class":1190},[103,7477,644],{"class":170},[103,7479,7355],{"class":139},[103,7481,7482,7484,7486],{"class":105,"line":504},[103,7483,7185],{"class":139},[103,7485,644],{"class":170},[103,7487,7488],{"class":139},"-0.0663387077034509\n",[103,7490,7491,7493,7495],{"class":105,"line":530},[103,7492,7195],{"class":1190},[103,7494,644],{"class":170},[103,7496,7355],{"class":139},[103,7498,7499,7501,7503],{"class":105,"line":574},[103,7500,7239],{"class":1190},[103,7502,644],{"class":170},[103,7504,7505],{"class":139},"0.9977971616817898\n",[25,7507,7508],{},"咱们之前下载的那个鱼香ROS的fishbot的urdf已经包含了差速插件的内容，如下：",[25,7510,7511,7512,7515,7516,7519,7520,7522,7523,7525,7526,7528],{},"因为是给Gazebo的插件，所以在",[100,7513,7514],{},"URDF","中，我们需要使用",[100,7517,7518],{},"\u003Cgazebo>","进行配置，因为是要给",[100,7521,136],{},"配置插件，所有要在",[100,7524,136],{},"标签下添加",[100,7527,3925],{},"子插件。",[94,7530,7532],{"className":1178,"code":7531,"language":1180,"meta":59,"style":59},"  \u003Cgazebo>\n    \u003Cplugin name='diff_drive' filename='libgazebo_ros_diff_drive.so'>\n          \u003Cros>\n            \u003Cnamespace>\u002F\u003C\u002Fnamespace>\n            \u003Cremapping>cmd_vel:=cmd_vel\u003C\u002Fremapping>\n            \u003Cremapping>odom:=odom\u003C\u002Fremapping>\n          \u003C\u002Fros>\n          \u003Cupdate_rate>30\u003C\u002Fupdate_rate>\n\n          \u003Cleft_joint>left_wheel_joint\u003C\u002Fleft_joint>\n          \u003Cright_joint>right_wheel_joint\u003C\u002Fright_joint>\n\n          \u003Cwheel_separation>0.2\u003C\u002Fwheel_separation>\n          \u003Cwheel_diameter>0.065\u003C\u002Fwheel_diameter>\n\n          \u003Cmax_wheel_torque>20\u003C\u002Fmax_wheel_torque>\n          \u003Cmax_wheel_acceleration>1.0\u003C\u002Fmax_wheel_acceleration>\n\n          \u003Cpublish_odom>true\u003C\u002Fpublish_odom>\n          \u003Cpublish_odom_tf>true\u003C\u002Fpublish_odom_tf>\n          \u003Cpublish_wheel_tf>true\u003C\u002Fpublish_wheel_tf>\n          \u003Codometry_frame>odom\u003C\u002Fodometry_frame>\n          \u003Crobot_base_frame>base_footprint\u003C\u002Frobot_base_frame>\n      \u003C\u002Fplugin>\n    \u003C\u002Fgazebo> \n",[100,7533,7534,7542,7562,7570,7582,7594,7606,7614,7626,7630,7642,7654,7658,7670,7682,7686,7698,7710,7714,7726,7738,7750,7762,7774,7782],{"__ignoreMap":59},[103,7535,7536,7538,7540],{"class":105,"line":106},[103,7537,1229],{"class":170},[103,7539,136],{"class":1190},[103,7541,1220],{"class":170},[103,7543,7544,7546,7548,7550,7552,7554,7556,7558,7560],{"class":105,"line":231},[103,7545,1274],{"class":170},[103,7547,3925],{"class":1190},[103,7549,1212],{"class":109},[103,7551,563],{"class":170},[103,7553,3932],{"class":113},[103,7555,3935],{"class":109},[103,7557,563],{"class":170},[103,7559,3940],{"class":113},[103,7561,1220],{"class":170},[103,7563,7564,7566,7568],{"class":105,"line":259},[103,7565,1359],{"class":170},[103,7567,3950],{"class":1190},[103,7569,1220],{"class":170},[103,7571,7572,7574,7576,7578,7580],{"class":105,"line":274},[103,7573,2557],{"class":170},[103,7575,3960],{"class":1190},[103,7577,3963],{"class":170},[103,7579,3960],{"class":1190},[103,7581,1220],{"class":170},[103,7583,7584,7586,7588,7590,7592],{"class":105,"line":286},[103,7585,2557],{"class":170},[103,7587,3975],{"class":1190},[103,7589,3978],{"class":170},[103,7591,3975],{"class":1190},[103,7593,1220],{"class":170},[103,7595,7596,7598,7600,7602,7604],{"class":105,"line":305},[103,7597,2557],{"class":170},[103,7599,3975],{"class":1190},[103,7601,3992],{"class":170},[103,7603,3975],{"class":1190},[103,7605,1220],{"class":170},[103,7607,7608,7610,7612],{"class":105,"line":312},[103,7609,2573],{"class":170},[103,7611,3950],{"class":1190},[103,7613,1220],{"class":170},[103,7615,7616,7618,7620,7622,7624],{"class":105,"line":327},[103,7617,1359],{"class":170},[103,7619,4013],{"class":1190},[103,7621,4016],{"class":170},[103,7623,4013],{"class":1190},[103,7625,1220],{"class":170},[103,7627,7628],{"class":105,"line":348},[103,7629,309],{"emptyLinePlaceholder":308},[103,7631,7632,7634,7636,7638,7640],{"class":105,"line":359},[103,7633,1359],{"class":170},[103,7635,4033],{"class":1190},[103,7637,4036],{"class":170},[103,7639,4033],{"class":1190},[103,7641,1220],{"class":170},[103,7643,7644,7646,7648,7650,7652],{"class":105,"line":368},[103,7645,1359],{"class":170},[103,7647,4048],{"class":1190},[103,7649,4051],{"class":170},[103,7651,4048],{"class":1190},[103,7653,1220],{"class":170},[103,7655,7656],{"class":105,"line":383},[103,7657,309],{"emptyLinePlaceholder":308},[103,7659,7660,7662,7664,7666,7668],{"class":105,"line":388},[103,7661,1359],{"class":170},[103,7663,4068],{"class":1190},[103,7665,4071],{"class":170},[103,7667,4068],{"class":1190},[103,7669,1220],{"class":170},[103,7671,7672,7674,7676,7678,7680],{"class":105,"line":394},[103,7673,1359],{"class":170},[103,7675,4083],{"class":1190},[103,7677,4086],{"class":170},[103,7679,4083],{"class":1190},[103,7681,1220],{"class":170},[103,7683,7684],{"class":105,"line":399},[103,7685,309],{"emptyLinePlaceholder":308},[103,7687,7688,7690,7692,7694,7696],{"class":105,"line":405},[103,7689,1359],{"class":170},[103,7691,4103],{"class":1190},[103,7693,4106],{"class":170},[103,7695,4103],{"class":1190},[103,7697,1220],{"class":170},[103,7699,7700,7702,7704,7706,7708],{"class":105,"line":410},[103,7701,1359],{"class":170},[103,7703,4118],{"class":1190},[103,7705,4121],{"class":170},[103,7707,4118],{"class":1190},[103,7709,1220],{"class":170},[103,7711,7712],{"class":105,"line":416},[103,7713,309],{"emptyLinePlaceholder":308},[103,7715,7716,7718,7720,7722,7724],{"class":105,"line":421},[103,7717,1359],{"class":170},[103,7719,4138],{"class":1190},[103,7721,4141],{"class":170},[103,7723,4138],{"class":1190},[103,7725,1220],{"class":170},[103,7727,7728,7730,7732,7734,7736],{"class":105,"line":427},[103,7729,1359],{"class":170},[103,7731,4153],{"class":1190},[103,7733,4141],{"class":170},[103,7735,4153],{"class":1190},[103,7737,1220],{"class":170},[103,7739,7740,7742,7744,7746,7748],{"class":105,"line":432},[103,7741,1359],{"class":170},[103,7743,4167],{"class":1190},[103,7745,4141],{"class":170},[103,7747,4167],{"class":1190},[103,7749,1220],{"class":170},[103,7751,7752,7754,7756,7758,7760],{"class":105,"line":438},[103,7753,1359],{"class":170},[103,7755,4182],{"class":1190},[103,7757,4185],{"class":170},[103,7759,4182],{"class":1190},[103,7761,1220],{"class":170},[103,7763,7764,7766,7768,7770,7772],{"class":105,"line":443},[103,7765,1359],{"class":170},[103,7767,4197],{"class":1190},[103,7769,4200],{"class":170},[103,7771,4197],{"class":1190},[103,7773,1220],{"class":170},[103,7775,7776,7778,7780],{"class":105,"line":449},[103,7777,1426],{"class":170},[103,7779,3925],{"class":1190},[103,7781,1220],{"class":170},[103,7783,7784,7786,7788],{"class":105,"line":454},[103,7785,1478],{"class":170},[103,7787,136],{"class":1190},[103,7789,1220],{"class":170},[25,7791,7792],{},"编译一下：",[94,7794,7796],{"className":6017,"code":7795,"language":6019,"meta":59,"style":59},"colcon build\nsource install\u002Fsetup.bash\nros2 launch fishbot_description gazebo.launch.py\n",[100,7797,7798,7803,7811],{"__ignoreMap":59},[103,7799,7800],{"class":105,"line":106},[103,7801,7802],{"class":170},"colcon build\n",[103,7804,7805,7807,7809],{"class":105,"line":231},[103,7806,6651],{"class":170},[103,7808,188],{"class":166},[103,7810,6656],{"class":170},[103,7812,7813],{"class":105,"line":259},[103,7814,6661],{"class":170},[25,7816,7817],{},"然后可以看看下面这俩命令：",[94,7819,7821],{"className":6017,"code":7820,"language":6019,"meta":59,"style":59},"ros2 node list\nros2 topic list\n",[100,7822,7823,7831],{"__ignoreMap":59},[103,7824,7825,7828],{"class":105,"line":106},[103,7826,7827],{"class":170},"ros2 node ",[103,7829,7830],{"class":139},"list\n",[103,7832,7833,7836],{"class":105,"line":231},[103,7834,7835],{"class":170},"ros2 topic ",[103,7837,7830],{"class":139},[25,7839,7840],{},[57,7841],{"alt":59,"src":7842},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1650.webp",[25,7844,7845],{},"可以看到了我们插件订阅的的\u002Fcmd_vel和发布的\u002Fodom了。",[25,7847,7848],{},"然后我们可以通过teleop-twist-keyboard节点发布cmd_vel来控制fishbot。",[94,7850,7852],{"className":6017,"code":7851,"language":6019,"meta":59,"style":59},"sudo apt install ros-humble-teleop-twist-keyboard\n",[100,7853,7854],{"__ignoreMap":59},[103,7855,7856,7859,7861,7863,7865,7868,7870,7873,7875],{"class":105,"line":106},[103,7857,7858],{"class":170},"sudo apt install ros",[103,7860,174],{"class":166},[103,7862,6696],{"class":170},[103,7864,174],{"class":166},[103,7866,7867],{"class":170},"teleop",[103,7869,174],{"class":166},[103,7871,7872],{"class":170},"twist",[103,7874,174],{"class":166},[103,7876,7877],{"class":170},"keyboard\n",[25,7879,7880],{},"使用下方节点来控制",[94,7882,7884],{"className":6017,"code":7883,"language":6019,"meta":59,"style":59},"ros2 run teleop_twist_keyboard teleop_twist_keyboard\n",[100,7885,7886],{"__ignoreMap":59},[103,7887,7888],{"class":105,"line":106},[103,7889,7883],{"class":170},[25,7891,7892],{},"接着尝试使用来控制机器人运动",[94,7894,7896],{"className":6017,"code":7895,"language":6019,"meta":59,"style":59},"   U    I    O\n   J    K    L\n   M    \u003C    >\n",[100,7897,7898,7903,7908],{"__ignoreMap":59},[103,7899,7900],{"class":105,"line":106},[103,7901,7902],{"class":170},"   U    I    O\n",[103,7904,7905],{"class":105,"line":231},[103,7906,7907],{"class":170},"   J    K    L\n",[103,7909,7910,7913,7915],{"class":105,"line":259},[103,7911,7912],{"class":170},"   M    ",[103,7914,1206],{"class":166},[103,7916,7917],{"class":166},"    >\n",[25,7919,7920],{},"点一下，你就能看到fishbot在Gazebo中飞速的移动。接着打开终端，打印一下odom话题和tf话题，移动机器人观察数据变化。",[25,7922,7923],{},"也可以使用rqt显示速度数据",[94,7925,7927],{"className":6017,"code":7926,"language":6019,"meta":59,"style":59},"rqt\n",[100,7928,7929],{"__ignoreMap":59},[103,7930,7931],{"class":105,"line":106},[103,7932,7926],{"class":170},[25,7934,7935],{},"选择Plugin->Visualization->Plot",[25,7937,7938],{},[57,7939],{"alt":59,"src":7940},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1651.webp",[25,7942,7943,7944,7947,7948,7951],{},"在上方Topic输入",[100,7945,7946],{},"\u002Fcmd_vel\u002Flinear\u002Fx","，再输入",[100,7949,7950],{},"\u002Fcmd_vel\u002Fangular\u002Fz","，然后用键盘控制机器人移动。",[25,7953,7954],{},[57,7955],{"alt":59,"src":7956},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1652.webp",[25,7958,7959],{},[57,7960],{"alt":59,"src":7961},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1653.webp",[25,7963,7964],{},"也可以在rviz2里看odom",[94,7966,7968],{"className":6017,"code":7967,"language":6019,"meta":59,"style":59},"rviz2\n",[100,7969,7970],{"__ignoreMap":59},[103,7971,7972],{"class":105,"line":106},[103,7973,7967],{"class":170},[25,7975,7976],{},"点键盘控制节点按U，让机器人转圈。",[25,7978,7979],{},[57,7980],{"alt":59,"src":7981},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1654.webp",[25,7983,7984],{},"虽然机器人的轨迹已经在RVIZ中显示出来了，但是并没有机器人的模型，也看不到轮子的转动，咱们来带你一起解决这个问题。",[25,7986,7987,7988,7991,7992,7994,7995,7997],{},"前面咱们介绍过，要发布机器人模型我们所使用的节点是",[100,7989,7990],{},"robot_state_publisher",",所以我们在",[100,7993,6004],{},"中加入这个节点，同时再加上rviz2的启动节点，最终的",[100,7996,6004],{},"内容如下：",[94,7999,8001],{"className":6017,"code":8000,"language":6019,"meta":59,"style":59},"from launch import LaunchDescription\nfrom launch_ros.actions import Node\n\n# 封装终端指令相关类\nfrom launch.actions import ExecuteProcess\n\n# from launch.substitutions import FindExecutable\n\n# 参数声明与获取\n\n# from launch.actions import DeclareLaunchArgument\n\n# from launch.substitutions import LaunchConfiguration\n\n# 文件包含相关\n\n# from launch.actions import IncludeLaunchDescription\n\n# from launch.launch_description_sources import PythonLaunchDescriptionSource\n\n# 分组相关\n\n# from launch_ros.actions import PushRosNamespace\n\n# from launch.actions import GroupAction\n\n# 事件相关\n\n# from launch.event_handlers import OnProcessStart,OnProcessExit\n\n# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n\n# 获取功能包下share目录或路径\nfrom ament_index_python.packages import get_package_share_directory\nimport os\n\ndef generate_launch_description():\n    robot_name_in_model = 'fishbot'\n    package_name = 'fishbot_description'\n    urdf_name = \"fishbot_gazebo.urdf\"\n\n    pkg_share = get_package_share_directory(f\"{package_name}\")\n    urdf_model_path = os.path.join(pkg_share, f'urdf\u002Furdf\u002F{urdf_name}')\n\n    # gazebo_world_path = os.path.join(pkg_share, 'world\u002Ffishbot.world')\n\n    # Start Gazebo server\n\n    # start_gazebo_cmd = ExecuteProcess(\n\n    #     cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so',gazebo_world_path],\n\n    #     output='screen')\n    start_gazebo_cmd = ExecuteProcess(\n        cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so'],\n        output='screen')\n\n    # Launch the robot\n    spawn_entity_cmd = Node(\n        package='gazebo_ros', \n        executable='spawn_entity.py',\n        arguments=['-entity', robot_name_in_model,  '-file', urdf_model_path ], output='screen')\n\n    # Start Robot State publisher\n    start_robot_state_publisher_cmd = Node(\n        package='robot_state_publisher',\n        executable='robot_state_publisher',\n        arguments=[urdf_model_path]\n    )\n\n    # Launch RViz\n    start_rviz_cmd = Node(\n        package='rviz2',\n        executable='rviz2',\n        name='rviz2',\n        output='screen',\n\n        # arguments=['-d', default_rviz_config_path]\n        )\n\n    return LaunchDescription([start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[100,8002,8003,8013,8023,8027,8031,8041,8045,8049,8053,8057,8061,8065,8069,8073,8077,8081,8085,8089,8093,8097,8101,8105,8109,8113,8117,8121,8125,8129,8133,8137,8141,8145,8149,8153,8163,8169,8173,8181,8189,8197,8205,8209,8231,8253,8257,8262,8266,8270,8274,8279,8283,8288,8292,8297,8305,8337,8347,8351,8355,8363,8373,8383,8407,8411,8416,8425,8436,8446,8455,8460,8464,8469,8478,8489,8499,8510,8520,8524,8529,8534,8538],{"__ignoreMap":59},[103,8004,8005,8007,8009,8011],{"class":105,"line":106},[103,8006,933],{"class":166},[103,8008,6193],{"class":170},[103,8010,6196],{"class":166},[103,8012,6199],{"class":170},[103,8014,8015,8017,8019,8021],{"class":105,"line":231},[103,8016,933],{"class":166},[103,8018,6206],{"class":170},[103,8020,6196],{"class":166},[103,8022,6211],{"class":170},[103,8024,8025],{"class":105,"line":259},[103,8026,309],{"emptyLinePlaceholder":308},[103,8028,8029],{"class":105,"line":274},[103,8030,6220],{"class":227},[103,8032,8033,8035,8037,8039],{"class":105,"line":286},[103,8034,933],{"class":166},[103,8036,6227],{"class":170},[103,8038,6196],{"class":166},[103,8040,6232],{"class":170},[103,8042,8043],{"class":105,"line":305},[103,8044,309],{"emptyLinePlaceholder":308},[103,8046,8047],{"class":105,"line":312},[103,8048,6241],{"class":227},[103,8050,8051],{"class":105,"line":327},[103,8052,309],{"emptyLinePlaceholder":308},[103,8054,8055],{"class":105,"line":348},[103,8056,6250],{"class":227},[103,8058,8059],{"class":105,"line":359},[103,8060,309],{"emptyLinePlaceholder":308},[103,8062,8063],{"class":105,"line":368},[103,8064,6259],{"class":227},[103,8066,8067],{"class":105,"line":383},[103,8068,309],{"emptyLinePlaceholder":308},[103,8070,8071],{"class":105,"line":388},[103,8072,6268],{"class":227},[103,8074,8075],{"class":105,"line":394},[103,8076,309],{"emptyLinePlaceholder":308},[103,8078,8079],{"class":105,"line":399},[103,8080,6277],{"class":227},[103,8082,8083],{"class":105,"line":405},[103,8084,309],{"emptyLinePlaceholder":308},[103,8086,8087],{"class":105,"line":410},[103,8088,6286],{"class":227},[103,8090,8091],{"class":105,"line":416},[103,8092,309],{"emptyLinePlaceholder":308},[103,8094,8095],{"class":105,"line":421},[103,8096,6295],{"class":227},[103,8098,8099],{"class":105,"line":427},[103,8100,309],{"emptyLinePlaceholder":308},[103,8102,8103],{"class":105,"line":432},[103,8104,6304],{"class":227},[103,8106,8107],{"class":105,"line":438},[103,8108,309],{"emptyLinePlaceholder":308},[103,8110,8111],{"class":105,"line":443},[103,8112,6313],{"class":227},[103,8114,8115],{"class":105,"line":449},[103,8116,309],{"emptyLinePlaceholder":308},[103,8118,8119],{"class":105,"line":454},[103,8120,6322],{"class":227},[103,8122,8123],{"class":105,"line":460},[103,8124,309],{"emptyLinePlaceholder":308},[103,8126,8127],{"class":105,"line":465},[103,8128,6331],{"class":227},[103,8130,8131],{"class":105,"line":471},[103,8132,309],{"emptyLinePlaceholder":308},[103,8134,8135],{"class":105,"line":476},[103,8136,6340],{"class":227},[103,8138,8139],{"class":105,"line":504},[103,8140,309],{"emptyLinePlaceholder":308},[103,8142,8143],{"class":105,"line":530},[103,8144,6349],{"class":227},[103,8146,8147],{"class":105,"line":574},[103,8148,309],{"emptyLinePlaceholder":308},[103,8150,8151],{"class":105,"line":579},[103,8152,6358],{"class":227},[103,8154,8155,8157,8159,8161],{"class":105,"line":590},[103,8156,933],{"class":166},[103,8158,6365],{"class":170},[103,8160,6196],{"class":166},[103,8162,6370],{"class":170},[103,8164,8165,8167],{"class":105,"line":635},[103,8166,6196],{"class":166},[103,8168,6377],{"class":170},[103,8170,8171],{"class":105,"line":665},[103,8172,309],{"emptyLinePlaceholder":308},[103,8174,8175,8177,8179],{"class":105,"line":677},[103,8176,6386],{"class":166},[103,8178,6389],{"class":109},[103,8180,6392],{"class":170},[103,8182,8183,8185,8187],{"class":105,"line":799},[103,8184,6397],{"class":170},[103,8186,563],{"class":166},[103,8188,6402],{"class":113},[103,8190,8191,8193,8195],{"class":105,"line":805},[103,8192,6407],{"class":170},[103,8194,563],{"class":166},[103,8196,6412],{"class":113},[103,8198,8199,8201,8203],{"class":105,"line":817},[103,8200,6417],{"class":170},[103,8202,563],{"class":166},[103,8204,6422],{"class":113},[103,8206,8207],{"class":105,"line":823},[103,8208,309],{"emptyLinePlaceholder":308},[103,8210,8211,8213,8215,8217,8219,8221,8223,8225,8227,8229],{"class":105,"line":829},[103,8212,6431],{"class":170},[103,8214,563],{"class":166},[103,8216,6436],{"class":170},[103,8218,6439],{"class":166},[103,8220,6442],{"class":113},[103,8222,6445],{"class":139},[103,8224,6448],{"class":170},[103,8226,6451],{"class":139},[103,8228,6442],{"class":113},[103,8230,5981],{"class":170},[103,8232,8233,8235,8237,8239,8241,8243,8245,8247,8249,8251],{"class":105,"line":835},[103,8234,6460],{"class":170},[103,8236,563],{"class":166},[103,8238,6465],{"class":170},[103,8240,6439],{"class":166},[103,8242,6470],{"class":113},[103,8244,6445],{"class":139},[103,8246,6475],{"class":170},[103,8248,6451],{"class":139},[103,8250,6480],{"class":113},[103,8252,5981],{"class":170},[103,8254,8255],{"class":105,"line":841},[103,8256,309],{"emptyLinePlaceholder":308},[103,8258,8259],{"class":105,"line":864},[103,8260,8261],{"class":227},"    # gazebo_world_path = os.path.join(pkg_share, 'world\u002Ffishbot.world')\n",[103,8263,8264],{"class":105,"line":907},[103,8265,309],{"emptyLinePlaceholder":308},[103,8267,8268],{"class":105,"line":944},[103,8269,6491],{"class":227},[103,8271,8272],{"class":105,"line":949},[103,8273,309],{"emptyLinePlaceholder":308},[103,8275,8276],{"class":105,"line":973},[103,8277,8278],{"class":227},"    # start_gazebo_cmd = ExecuteProcess(\n",[103,8280,8281],{"class":105,"line":997},[103,8282,309],{"emptyLinePlaceholder":308},[103,8284,8285],{"class":105,"line":1876},[103,8286,8287],{"class":227},"    #     cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so',gazebo_world_path],\n",[103,8289,8290],{"class":105,"line":1885},[103,8291,309],{"emptyLinePlaceholder":308},[103,8293,8294],{"class":105,"line":1900},[103,8295,8296],{"class":227},"    #     output='screen')\n",[103,8298,8299,8301,8303],{"class":105,"line":1915},[103,8300,6496],{"class":170},[103,8302,563],{"class":166},[103,8304,6501],{"class":170},[103,8306,8307,8309,8311,8313,8315,8317,8319,8321,8323,8325,8327,8329,8331,8333,8335],{"class":105,"line":1924},[103,8308,6032],{"class":6031},[103,8310,563],{"class":166},[103,8312,6037],{"class":170},[103,8314,6040],{"class":113},[103,8316,6043],{"class":170},[103,8318,6046],{"class":113},[103,8320,6049],{"class":170},[103,8322,6052],{"class":113},[103,8324,6043],{"class":170},[103,8326,6057],{"class":113},[103,8328,6043],{"class":170},[103,8330,6052],{"class":113},[103,8332,6043],{"class":170},[103,8334,6066],{"class":113},[103,8336,6534],{"class":170},[103,8338,8339,8341,8343,8345],{"class":105,"line":1933},[103,8340,6074],{"class":6031},[103,8342,563],{"class":166},[103,8344,6079],{"class":113},[103,8346,5981],{"class":170},[103,8348,8349],{"class":105,"line":1942},[103,8350,309],{"emptyLinePlaceholder":308},[103,8352,8353],{"class":105,"line":1958},[103,8354,6553],{"class":227},[103,8356,8357,8359,8361],{"class":105,"line":2006},[103,8358,6558],{"class":170},[103,8360,563],{"class":166},[103,8362,6108],{"class":170},[103,8364,8365,8367,8369,8371],{"class":105,"line":2015},[103,8366,6567],{"class":6031},[103,8368,563],{"class":166},[103,8370,6118],{"class":113},[103,8372,6121],{"class":170},[103,8374,8375,8377,8379,8381],{"class":105,"line":2024},[103,8376,6578],{"class":6031},[103,8378,563],{"class":166},[103,8380,6131],{"class":113},[103,8382,6134],{"class":170},[103,8384,8385,8387,8389,8391,8393,8395,8397,8399,8401,8403,8405],{"class":105,"line":2029},[103,8386,6589],{"class":6031},[103,8388,563],{"class":166},[103,8390,6037],{"class":170},[103,8392,6146],{"class":113},[103,8394,6149],{"class":170},[103,8396,6152],{"class":113},[103,8398,6155],{"class":170},[103,8400,6158],{"class":6031},[103,8402,563],{"class":166},[103,8404,6079],{"class":113},[103,8406,5981],{"class":170},[103,8408,8409],{"class":105,"line":2051},[103,8410,309],{"emptyLinePlaceholder":308},[103,8412,8413],{"class":105,"line":2067},[103,8414,8415],{"class":227},"    # Start Robot State publisher\n",[103,8417,8418,8421,8423],{"class":105,"line":2082},[103,8419,8420],{"class":170},"    start_robot_state_publisher_cmd ",[103,8422,563],{"class":166},[103,8424,6108],{"class":170},[103,8426,8427,8429,8431,8434],{"class":105,"line":2098},[103,8428,6567],{"class":6031},[103,8430,563],{"class":166},[103,8432,8433],{"class":113},"'robot_state_publisher'",[103,8435,6134],{"class":170},[103,8437,8438,8440,8442,8444],{"class":105,"line":2107},[103,8439,6578],{"class":6031},[103,8441,563],{"class":166},[103,8443,8433],{"class":113},[103,8445,6134],{"class":170},[103,8447,8448,8450,8452],{"class":105,"line":2112},[103,8449,6589],{"class":6031},[103,8451,563],{"class":166},[103,8453,8454],{"class":170},"[urdf_model_path]\n",[103,8456,8457],{"class":105,"line":2128},[103,8458,8459],{"class":170},"    )\n",[103,8461,8462],{"class":105,"line":2137},[103,8463,309],{"emptyLinePlaceholder":308},[103,8465,8466],{"class":105,"line":2158},[103,8467,8468],{"class":227},"    # Launch RViz\n",[103,8470,8471,8474,8476],{"class":105,"line":2167},[103,8472,8473],{"class":170},"    start_rviz_cmd ",[103,8475,563],{"class":166},[103,8477,6108],{"class":170},[103,8479,8480,8482,8484,8487],{"class":105,"line":2186},[103,8481,6567],{"class":6031},[103,8483,563],{"class":166},[103,8485,8486],{"class":113},"'rviz2'",[103,8488,6134],{"class":170},[103,8490,8491,8493,8495,8497],{"class":105,"line":2195},[103,8492,6578],{"class":6031},[103,8494,563],{"class":166},[103,8496,8486],{"class":113},[103,8498,6134],{"class":170},[103,8500,8501,8504,8506,8508],{"class":105,"line":2204},[103,8502,8503],{"class":6031},"        name",[103,8505,563],{"class":166},[103,8507,8486],{"class":113},[103,8509,6134],{"class":170},[103,8511,8512,8514,8516,8518],{"class":105,"line":2213},[103,8513,6074],{"class":6031},[103,8515,563],{"class":166},[103,8517,6079],{"class":113},[103,8519,6134],{"class":170},[103,8521,8522],{"class":105,"line":2234},[103,8523,309],{"emptyLinePlaceholder":308},[103,8525,8526],{"class":105,"line":2243},[103,8527,8528],{"class":227},"        # arguments=['-d', default_rviz_config_path]\n",[103,8530,8531],{"class":105,"line":2258},[103,8532,8533],{"class":170},"        )\n",[103,8535,8536],{"class":105,"line":2267},[103,8537,309],{"emptyLinePlaceholder":308},[103,8539,8540,8542],{"class":105,"line":2276},[103,8541,6618],{"class":166},[103,8543,8544],{"class":170}," LaunchDescription([start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[25,8546,8547],{},"保存编译启动",[94,8549,8551],{"className":6017,"code":8550,"language":6019,"meta":59,"style":59},"colcon build\nros2 launch fishbot_description gazebo.launch.py\n",[100,8552,8553,8557],{"__ignoreMap":59},[103,8554,8555],{"class":105,"line":106},[103,8556,7802],{"class":170},[103,8558,8559],{"class":105,"line":231},[103,8560,6661],{"class":170},[25,8562,8563],{},"这样rviz2里就有模型了。",[25,8565,8566],{},[57,8567],{"alt":59,"src":8568},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1655.webp",[25,8570,8571],{},"可以保存下rviz2的配置",[25,8573,8574],{},[57,8575],{"alt":59,"src":8576},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1656.webp",[25,8578,8579],{},[57,8580],{"alt":59,"src":8581},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1657.webp",[25,8583,8584],{},"然后在launch里添加上rviz2的路径配置：",[94,8586,8588],{"className":6017,"code":8587,"language":6019,"meta":59,"style":59},"    default_rviz_config_path = os.path.join(pkg_share, 'rviz\u002Frviz2.rviz')\n\n    # Launch RViz\n    start_rviz_cmd = Node(\n        package='rviz2',\n        executable='rviz2',\n        name='rviz2',\n        output='screen',\n        arguments=['-d', default_rviz_config_path]\n        )\n",[100,8589,8590,8604,8608,8612,8620,8630,8640,8650,8660,8674],{"__ignoreMap":59},[103,8591,8592,8595,8597,8599,8602],{"class":105,"line":106},[103,8593,8594],{"class":170},"    default_rviz_config_path ",[103,8596,563],{"class":166},[103,8598,6465],{"class":170},[103,8600,8601],{"class":113},"'rviz\u002Frviz2.rviz'",[103,8603,5981],{"class":170},[103,8605,8606],{"class":105,"line":231},[103,8607,309],{"emptyLinePlaceholder":308},[103,8609,8610],{"class":105,"line":259},[103,8611,8468],{"class":227},[103,8613,8614,8616,8618],{"class":105,"line":274},[103,8615,8473],{"class":170},[103,8617,563],{"class":166},[103,8619,6108],{"class":170},[103,8621,8622,8624,8626,8628],{"class":105,"line":286},[103,8623,6567],{"class":6031},[103,8625,563],{"class":166},[103,8627,8486],{"class":113},[103,8629,6134],{"class":170},[103,8631,8632,8634,8636,8638],{"class":105,"line":305},[103,8633,6578],{"class":6031},[103,8635,563],{"class":166},[103,8637,8486],{"class":113},[103,8639,6134],{"class":170},[103,8641,8642,8644,8646,8648],{"class":105,"line":312},[103,8643,8503],{"class":6031},[103,8645,563],{"class":166},[103,8647,8486],{"class":113},[103,8649,6134],{"class":170},[103,8651,8652,8654,8656,8658],{"class":105,"line":327},[103,8653,6074],{"class":6031},[103,8655,563],{"class":166},[103,8657,6079],{"class":113},[103,8659,6134],{"class":170},[103,8661,8662,8664,8666,8668,8671],{"class":105,"line":348},[103,8663,6589],{"class":6031},[103,8665,563],{"class":166},[103,8667,6037],{"class":170},[103,8669,8670],{"class":113},"'-d'",[103,8672,8673],{"class":170},", default_rviz_config_path]\n",[103,8675,8676],{"class":105,"line":359},[103,8677,8533],{"class":170},[25,8679,8680],{},"如下为全部的launch：",[94,8682,8684],{"className":6017,"code":8683,"language":6019,"meta":59,"style":59},"from launch import LaunchDescription\nfrom launch_ros.actions import Node\n\n# 封装终端指令相关类\nfrom launch.actions import ExecuteProcess\n\n# from launch.substitutions import FindExecutable\n\n# 参数声明与获取\n\n# from launch.actions import DeclareLaunchArgument\n\n# from launch.substitutions import LaunchConfiguration\n\n# 文件包含相关\n\n# from launch.actions import IncludeLaunchDescription\n\n# from launch.launch_description_sources import PythonLaunchDescriptionSource\n\n# 分组相关\n\n# from launch_ros.actions import PushRosNamespace\n\n# from launch.actions import GroupAction\n\n# 事件相关\n\n# from launch.event_handlers import OnProcessStart,OnProcessExit\n\n# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n\n# 获取功能包下share目录或路径\nfrom ament_index_python.packages import get_package_share_directory\nimport os\n\ndef generate_launch_description():\n    robot_name_in_model = 'fishbot'\n    package_name = 'fishbot_description'\n    urdf_name = \"fishbot_gazebo.urdf\"\n\n    pkg_share = get_package_share_directory(f\"{package_name}\")\n    urdf_model_path = os.path.join(pkg_share, f'urdf\u002Furdf\u002F{urdf_name}')\n\n    # gazebo_world_path = os.path.join(pkg_share, 'world\u002Ffishbot.world')\n    default_rviz_config_path = os.path.join(pkg_share, 'rviz\u002Frviz2.rviz')\n\n    # Start Gazebo server\n\n    # start_gazebo_cmd = ExecuteProcess(\n\n    #     cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so',gazebo_world_path],\n\n    #     output='screen')\n    start_gazebo_cmd = ExecuteProcess(\n        cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so'],\n        output='screen')\n\n    # Launch the robot\n    spawn_entity_cmd = Node(\n        package='gazebo_ros', \n        executable='spawn_entity.py',\n        arguments=['-entity', robot_name_in_model,  '-file', urdf_model_path ], output='screen')\n\n    # Start Robot State publisher\n    start_robot_state_publisher_cmd = Node(\n        package='robot_state_publisher',\n        executable='robot_state_publisher',\n        arguments=[urdf_model_path]\n    )\n\n    # Launch RViz\n    start_rviz_cmd = Node(\n        package='rviz2',\n        executable='rviz2',\n        name='rviz2',\n        output='screen',\n        arguments=['-d', default_rviz_config_path]\n        )\n\n    return LaunchDescription([start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[100,8685,8686,8696,8706,8710,8714,8724,8728,8732,8736,8740,8744,8748,8752,8756,8760,8764,8768,8772,8776,8780,8784,8788,8792,8796,8800,8804,8808,8812,8816,8820,8824,8828,8832,8836,8846,8852,8856,8864,8872,8880,8888,8892,8914,8936,8940,8944,8956,8960,8964,8968,8972,8976,8980,8984,8988,8996,9028,9038,9042,9046,9054,9064,9074,9098,9102,9106,9114,9124,9134,9142,9146,9150,9154,9162,9172,9182,9192,9202,9214,9218,9222],{"__ignoreMap":59},[103,8687,8688,8690,8692,8694],{"class":105,"line":106},[103,8689,933],{"class":166},[103,8691,6193],{"class":170},[103,8693,6196],{"class":166},[103,8695,6199],{"class":170},[103,8697,8698,8700,8702,8704],{"class":105,"line":231},[103,8699,933],{"class":166},[103,8701,6206],{"class":170},[103,8703,6196],{"class":166},[103,8705,6211],{"class":170},[103,8707,8708],{"class":105,"line":259},[103,8709,309],{"emptyLinePlaceholder":308},[103,8711,8712],{"class":105,"line":274},[103,8713,6220],{"class":227},[103,8715,8716,8718,8720,8722],{"class":105,"line":286},[103,8717,933],{"class":166},[103,8719,6227],{"class":170},[103,8721,6196],{"class":166},[103,8723,6232],{"class":170},[103,8725,8726],{"class":105,"line":305},[103,8727,309],{"emptyLinePlaceholder":308},[103,8729,8730],{"class":105,"line":312},[103,8731,6241],{"class":227},[103,8733,8734],{"class":105,"line":327},[103,8735,309],{"emptyLinePlaceholder":308},[103,8737,8738],{"class":105,"line":348},[103,8739,6250],{"class":227},[103,8741,8742],{"class":105,"line":359},[103,8743,309],{"emptyLinePlaceholder":308},[103,8745,8746],{"class":105,"line":368},[103,8747,6259],{"class":227},[103,8749,8750],{"class":105,"line":383},[103,8751,309],{"emptyLinePlaceholder":308},[103,8753,8754],{"class":105,"line":388},[103,8755,6268],{"class":227},[103,8757,8758],{"class":105,"line":394},[103,8759,309],{"emptyLinePlaceholder":308},[103,8761,8762],{"class":105,"line":399},[103,8763,6277],{"class":227},[103,8765,8766],{"class":105,"line":405},[103,8767,309],{"emptyLinePlaceholder":308},[103,8769,8770],{"class":105,"line":410},[103,8771,6286],{"class":227},[103,8773,8774],{"class":105,"line":416},[103,8775,309],{"emptyLinePlaceholder":308},[103,8777,8778],{"class":105,"line":421},[103,8779,6295],{"class":227},[103,8781,8782],{"class":105,"line":427},[103,8783,309],{"emptyLinePlaceholder":308},[103,8785,8786],{"class":105,"line":432},[103,8787,6304],{"class":227},[103,8789,8790],{"class":105,"line":438},[103,8791,309],{"emptyLinePlaceholder":308},[103,8793,8794],{"class":105,"line":443},[103,8795,6313],{"class":227},[103,8797,8798],{"class":105,"line":449},[103,8799,309],{"emptyLinePlaceholder":308},[103,8801,8802],{"class":105,"line":454},[103,8803,6322],{"class":227},[103,8805,8806],{"class":105,"line":460},[103,8807,309],{"emptyLinePlaceholder":308},[103,8809,8810],{"class":105,"line":465},[103,8811,6331],{"class":227},[103,8813,8814],{"class":105,"line":471},[103,8815,309],{"emptyLinePlaceholder":308},[103,8817,8818],{"class":105,"line":476},[103,8819,6340],{"class":227},[103,8821,8822],{"class":105,"line":504},[103,8823,309],{"emptyLinePlaceholder":308},[103,8825,8826],{"class":105,"line":530},[103,8827,6349],{"class":227},[103,8829,8830],{"class":105,"line":574},[103,8831,309],{"emptyLinePlaceholder":308},[103,8833,8834],{"class":105,"line":579},[103,8835,6358],{"class":227},[103,8837,8838,8840,8842,8844],{"class":105,"line":590},[103,8839,933],{"class":166},[103,8841,6365],{"class":170},[103,8843,6196],{"class":166},[103,8845,6370],{"class":170},[103,8847,8848,8850],{"class":105,"line":635},[103,8849,6196],{"class":166},[103,8851,6377],{"class":170},[103,8853,8854],{"class":105,"line":665},[103,8855,309],{"emptyLinePlaceholder":308},[103,8857,8858,8860,8862],{"class":105,"line":677},[103,8859,6386],{"class":166},[103,8861,6389],{"class":109},[103,8863,6392],{"class":170},[103,8865,8866,8868,8870],{"class":105,"line":799},[103,8867,6397],{"class":170},[103,8869,563],{"class":166},[103,8871,6402],{"class":113},[103,8873,8874,8876,8878],{"class":105,"line":805},[103,8875,6407],{"class":170},[103,8877,563],{"class":166},[103,8879,6412],{"class":113},[103,8881,8882,8884,8886],{"class":105,"line":817},[103,8883,6417],{"class":170},[103,8885,563],{"class":166},[103,8887,6422],{"class":113},[103,8889,8890],{"class":105,"line":823},[103,8891,309],{"emptyLinePlaceholder":308},[103,8893,8894,8896,8898,8900,8902,8904,8906,8908,8910,8912],{"class":105,"line":829},[103,8895,6431],{"class":170},[103,8897,563],{"class":166},[103,8899,6436],{"class":170},[103,8901,6439],{"class":166},[103,8903,6442],{"class":113},[103,8905,6445],{"class":139},[103,8907,6448],{"class":170},[103,8909,6451],{"class":139},[103,8911,6442],{"class":113},[103,8913,5981],{"class":170},[103,8915,8916,8918,8920,8922,8924,8926,8928,8930,8932,8934],{"class":105,"line":835},[103,8917,6460],{"class":170},[103,8919,563],{"class":166},[103,8921,6465],{"class":170},[103,8923,6439],{"class":166},[103,8925,6470],{"class":113},[103,8927,6445],{"class":139},[103,8929,6475],{"class":170},[103,8931,6451],{"class":139},[103,8933,6480],{"class":113},[103,8935,5981],{"class":170},[103,8937,8938],{"class":105,"line":841},[103,8939,309],{"emptyLinePlaceholder":308},[103,8941,8942],{"class":105,"line":864},[103,8943,8261],{"class":227},[103,8945,8946,8948,8950,8952,8954],{"class":105,"line":907},[103,8947,8594],{"class":170},[103,8949,563],{"class":166},[103,8951,6465],{"class":170},[103,8953,8601],{"class":113},[103,8955,5981],{"class":170},[103,8957,8958],{"class":105,"line":944},[103,8959,309],{"emptyLinePlaceholder":308},[103,8961,8962],{"class":105,"line":949},[103,8963,6491],{"class":227},[103,8965,8966],{"class":105,"line":973},[103,8967,309],{"emptyLinePlaceholder":308},[103,8969,8970],{"class":105,"line":997},[103,8971,8278],{"class":227},[103,8973,8974],{"class":105,"line":1876},[103,8975,309],{"emptyLinePlaceholder":308},[103,8977,8978],{"class":105,"line":1885},[103,8979,8287],{"class":227},[103,8981,8982],{"class":105,"line":1900},[103,8983,309],{"emptyLinePlaceholder":308},[103,8985,8986],{"class":105,"line":1915},[103,8987,8296],{"class":227},[103,8989,8990,8992,8994],{"class":105,"line":1924},[103,8991,6496],{"class":170},[103,8993,563],{"class":166},[103,8995,6501],{"class":170},[103,8997,8998,9000,9002,9004,9006,9008,9010,9012,9014,9016,9018,9020,9022,9024,9026],{"class":105,"line":1933},[103,8999,6032],{"class":6031},[103,9001,563],{"class":166},[103,9003,6037],{"class":170},[103,9005,6040],{"class":113},[103,9007,6043],{"class":170},[103,9009,6046],{"class":113},[103,9011,6049],{"class":170},[103,9013,6052],{"class":113},[103,9015,6043],{"class":170},[103,9017,6057],{"class":113},[103,9019,6043],{"class":170},[103,9021,6052],{"class":113},[103,9023,6043],{"class":170},[103,9025,6066],{"class":113},[103,9027,6534],{"class":170},[103,9029,9030,9032,9034,9036],{"class":105,"line":1942},[103,9031,6074],{"class":6031},[103,9033,563],{"class":166},[103,9035,6079],{"class":113},[103,9037,5981],{"class":170},[103,9039,9040],{"class":105,"line":1958},[103,9041,309],{"emptyLinePlaceholder":308},[103,9043,9044],{"class":105,"line":2006},[103,9045,6553],{"class":227},[103,9047,9048,9050,9052],{"class":105,"line":2015},[103,9049,6558],{"class":170},[103,9051,563],{"class":166},[103,9053,6108],{"class":170},[103,9055,9056,9058,9060,9062],{"class":105,"line":2024},[103,9057,6567],{"class":6031},[103,9059,563],{"class":166},[103,9061,6118],{"class":113},[103,9063,6121],{"class":170},[103,9065,9066,9068,9070,9072],{"class":105,"line":2029},[103,9067,6578],{"class":6031},[103,9069,563],{"class":166},[103,9071,6131],{"class":113},[103,9073,6134],{"class":170},[103,9075,9076,9078,9080,9082,9084,9086,9088,9090,9092,9094,9096],{"class":105,"line":2051},[103,9077,6589],{"class":6031},[103,9079,563],{"class":166},[103,9081,6037],{"class":170},[103,9083,6146],{"class":113},[103,9085,6149],{"class":170},[103,9087,6152],{"class":113},[103,9089,6155],{"class":170},[103,9091,6158],{"class":6031},[103,9093,563],{"class":166},[103,9095,6079],{"class":113},[103,9097,5981],{"class":170},[103,9099,9100],{"class":105,"line":2067},[103,9101,309],{"emptyLinePlaceholder":308},[103,9103,9104],{"class":105,"line":2082},[103,9105,8415],{"class":227},[103,9107,9108,9110,9112],{"class":105,"line":2098},[103,9109,8420],{"class":170},[103,9111,563],{"class":166},[103,9113,6108],{"class":170},[103,9115,9116,9118,9120,9122],{"class":105,"line":2107},[103,9117,6567],{"class":6031},[103,9119,563],{"class":166},[103,9121,8433],{"class":113},[103,9123,6134],{"class":170},[103,9125,9126,9128,9130,9132],{"class":105,"line":2112},[103,9127,6578],{"class":6031},[103,9129,563],{"class":166},[103,9131,8433],{"class":113},[103,9133,6134],{"class":170},[103,9135,9136,9138,9140],{"class":105,"line":2128},[103,9137,6589],{"class":6031},[103,9139,563],{"class":166},[103,9141,8454],{"class":170},[103,9143,9144],{"class":105,"line":2137},[103,9145,8459],{"class":170},[103,9147,9148],{"class":105,"line":2158},[103,9149,309],{"emptyLinePlaceholder":308},[103,9151,9152],{"class":105,"line":2167},[103,9153,8468],{"class":227},[103,9155,9156,9158,9160],{"class":105,"line":2186},[103,9157,8473],{"class":170},[103,9159,563],{"class":166},[103,9161,6108],{"class":170},[103,9163,9164,9166,9168,9170],{"class":105,"line":2195},[103,9165,6567],{"class":6031},[103,9167,563],{"class":166},[103,9169,8486],{"class":113},[103,9171,6134],{"class":170},[103,9173,9174,9176,9178,9180],{"class":105,"line":2204},[103,9175,6578],{"class":6031},[103,9177,563],{"class":166},[103,9179,8486],{"class":113},[103,9181,6134],{"class":170},[103,9183,9184,9186,9188,9190],{"class":105,"line":2213},[103,9185,8503],{"class":6031},[103,9187,563],{"class":166},[103,9189,8486],{"class":113},[103,9191,6134],{"class":170},[103,9193,9194,9196,9198,9200],{"class":105,"line":2234},[103,9195,6074],{"class":6031},[103,9197,563],{"class":166},[103,9199,6079],{"class":113},[103,9201,6134],{"class":170},[103,9203,9204,9206,9208,9210,9212],{"class":105,"line":2243},[103,9205,6589],{"class":6031},[103,9207,563],{"class":166},[103,9209,6037],{"class":170},[103,9211,8670],{"class":113},[103,9213,8673],{"class":170},[103,9215,9216],{"class":105,"line":2258},[103,9217,8533],{"class":170},[103,9219,9220],{"class":105,"line":2267},[103,9221,309],{"emptyLinePlaceholder":308},[103,9223,9224,9226],{"class":105,"line":2276},[103,9225,6618],{"class":166},[103,9227,8544],{"class":170},[25,9229,9230],{},"可以自行编译测试。",[6871,9232,9234],{"id":9233},"惯性计imu","惯性计IMU",[25,9236,9237],{},"上节课通过配置两轮差速控制器我们已经成功的让fishbot在gazebo中动了起来，本节课我们通过给fishbot的URDF配置IMU传感器插件，让IMU模块工作起来。",[25,9239,9240],{},"惯性测量单元是测量物体三轴姿态角(或角速率)以及加速度的装置。一般的，一个IMU包含了三个单轴的加速度计和三个单轴的陀螺，加速度计检测物体在载体坐标系统独立三轴的加速度信号，而陀螺检测载体相对于导航坐标系的角速度信号，测量物体在三维空间中的角速度和加速度，并以此解算出物体的姿态。在导航中有着很重要的应用价值。",[25,9242,9243],{},"上面这段话是小鱼从百科中摘抄出来的，你需要知道的一个关键点是IMU可以测量以下三组数据：",[1083,9245,9246,9249,9252],{},[1086,9247,9248],{},"三维加速度计加速度",[1086,9250,9251],{},"三维陀螺仪角速度",[1086,9253,9254],{},"三维磁力计（有的也没有磁力计）",[25,9256,9257],{},"用六轴、九轴算法或其他算法等可以输出三轴欧拉角（Yaw,Pitch,Roll），欧拉角可以转化为四元数。",[25,9259,9260],{},"IMU长啥样？直接线下找控制组要就行，他们经常会玩这个。",[25,9262,9263],{},"便宜的长这样（MPU6050,MPU9050等）：",[25,9265,9266],{},"MPU6050是六轴的，MPU9050是九轴的。",[25,9268,9269],{},[57,9270],{"alt":59,"src":9271},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1658.webp",[25,9273,9274],{},"贵的长这样（HWT101CT，HWT605等）：",[25,9276,9277],{},"其中HWT101CT是三轴的，HWT605是六轴的。（各有优缺点）",[25,9279,9280],{},[57,9281],{"alt":59,"src":9282},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1659.webp",[25,9284,9285],{},"不要钱的长什么样？",[25,9287,9288],{},[57,9289],{"alt":59,"src":9290},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1660.webp",[25,9292,9293],{},"仿真的不要钱哈哈，接着我们来配置一下仿真的IMU。",[25,9295,9296,9297],{},"IMU对应的消息类型为",[100,9298,9299],{},"sensor_msgs\u002Fmsg\u002FImu",[25,9301,9302],{},"ROS的imu信息只有三轴加速度，角速度和四元数。（并没有磁力计和欧拉角，磁力计并非必须要填的，而欧拉角和四元数可以互相转换，四元数更好被算法运算，所以选择用四元数）",[25,9304,9305],{},"具体imu接口请看硬件平台章节。",[25,9307,9308,9309,9312],{},"可以看到除了每个数据对应的三个协方差之外，每一个还都对应一个",[100,9310,9311],{},"3*3","的协方差矩阵。",[25,9314,9315],{},"有了上节课的经验，我们可以很轻松的添加IMU传感器，但是还有一个需要注意的地方，为了更真实的模拟IMU传感器，我们需要给我们的仿真IMU传感器加点料。",[25,9317,9318,9319,9322,9323,9326],{},"加什么？加点高斯噪声，高斯噪声只需要指定平均值和标准差两个参数即可，不过因为IMU传感器的特殊性，我们还需要给模型添加两个偏差参数，分别是 ",[100,9320,9321],{},"平均值偏差","和",[100,9324,9325],{},"标准差偏差","。",[25,9328,9329],{},"有关Gazebo仿真和噪声模型更深入的介绍可以参考鱼香ROS发的两篇推文：",[1083,9331,9332,9339],{},[1086,9333,9334],{},[17,9335,9338],{"href":9336,"rel":9337},"https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002F0-OEATkyfMf6wEyrP5csGw",[21],"Gazebo仿真进阶教程之传感器高斯噪声（一）",[1086,9340,9341],{},[17,9342,9345],{"href":9343,"rel":9344},"https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002F5k1SEGdASjUMbwWdSpf1PQ",[21],"Gazebo仿真进阶教程之传感器高斯噪声（二）",[25,9347,9348,9349,9352],{},"下面是IMU传感器的URDF配置代码，大家结合文章对应可以理解一下，IMU对应的插件库",[100,9350,9351],{},"libgazebo_ros_imu_sensor.so","：",[94,9354,9356],{"className":1178,"code":9355,"language":1180,"meta":59,"style":59},"    \u003Cgazebo reference=\"imu_link\">\n      \u003Csensor name=\"imu_sensor\" type=\"imu\">\n      \u003Cplugin filename=\"libgazebo_ros_imu_sensor.so\" name=\"imu_plugin\">\n          \u003Cros>\n            \u003Cnamespace>\u002F\u003C\u002Fnamespace>\n            \u003Cremapping>~\u002Fout:=imu\u003C\u002Fremapping>\n          \u003C\u002Fros>\n          \u003Cinitial_orientation_as_reference>false\u003C\u002Finitial_orientation_as_reference>\n        \u003C\u002Fplugin>\n        \u003Calways_on>true\u003C\u002Falways_on>\n        \u003Cupdate_rate>100\u003C\u002Fupdate_rate>\n        \u003Cvisualize>true\u003C\u002Fvisualize>\n        \u003Cimu>\n          \u003Cangular_velocity>\n            \u003Cx>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C\u002Fmean>\n                \u003Cstddev>2e-4\u003C\u002Fstddev>\n                \u003Cbias_mean>0.0000075\u003C\u002Fbias_mean>\n                \u003Cbias_stddev>0.0000008\u003C\u002Fbias_stddev>\n              \u003C\u002Fnoise>\n            \u003C\u002Fx>\n            \u003Cy>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C\u002Fmean>\n                \u003Cstddev>2e-4\u003C\u002Fstddev>\n                \u003Cbias_mean>0.0000075\u003C\u002Fbias_mean>\n                \u003Cbias_stddev>0.0000008\u003C\u002Fbias_stddev>\n              \u003C\u002Fnoise>\n            \u003C\u002Fy>\n            \u003Cz>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C\u002Fmean>\n                \u003Cstddev>2e-4\u003C\u002Fstddev>\n                \u003Cbias_mean>0.0000075\u003C\u002Fbias_mean>\n                \u003Cbias_stddev>0.0000008\u003C\u002Fbias_stddev>\n              \u003C\u002Fnoise>\n            \u003C\u002Fz>\n          \u003C\u002Fangular_velocity>\n          \u003Clinear_acceleration>\n            \u003Cx>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C\u002Fmean>\n                \u003Cstddev>1.7e-2\u003C\u002Fstddev>\n                \u003Cbias_mean>0.1\u003C\u002Fbias_mean>\n                \u003Cbias_stddev>0.001\u003C\u002Fbias_stddev>\n              \u003C\u002Fnoise>\n            \u003C\u002Fx>\n            \u003Cy>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C\u002Fmean>\n                \u003Cstddev>1.7e-2\u003C\u002Fstddev>\n                \u003Cbias_mean>0.1\u003C\u002Fbias_mean>\n                \u003Cbias_stddev>0.001\u003C\u002Fbias_stddev>\n              \u003C\u002Fnoise>\n            \u003C\u002Fy>\n            \u003Cz>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C\u002Fmean>\n                \u003Cstddev>1.7e-2\u003C\u002Fstddev>\n                \u003Cbias_mean>0.1\u003C\u002Fbias_mean>\n                \u003Cbias_stddev>0.001\u003C\u002Fbias_stddev>\n              \u003C\u002Fnoise>\n            \u003C\u002Fz>\n          \u003C\u002Flinear_acceleration>\n        \u003C\u002Fimu>\n      \u003C\u002Fsensor>\n    \u003C\u002Fgazebo>\n",[100,9357,9358,9372,9392,9412,9420,9432,9444,9452,9464,9472,9484,9496,9508,9516,9524,9532,9546,9558,9570,9582,9594,9602,9610,9618,9632,9644,9656,9668,9680,9688,9696,9704,9718,9730,9742,9754,9766,9774,9782,9790,9798,9806,9820,9832,9844,9856,9868,9876,9884,9892,9906,9918,9930,9942,9954,9962,9970,9978,9992,10004,10016,10028,10040,10048,10056,10064,10072,10080],{"__ignoreMap":59},[103,9359,9360,9362,9364,9366,9368,9370],{"class":105,"line":106},[103,9361,1274],{"class":170},[103,9363,136],{"class":1190},[103,9365,3773],{"class":109},[103,9367,563],{"class":170},[103,9369,2123],{"class":113},[103,9371,1220],{"class":170},[103,9373,9374,9376,9378,9380,9382,9384,9386,9388,9390],{"class":105,"line":231},[103,9375,1369],{"class":170},[103,9377,4403],{"class":1190},[103,9379,1212],{"class":109},[103,9381,563],{"class":170},[103,9383,4410],{"class":113},[103,9385,1114],{"class":109},[103,9387,563],{"class":170},[103,9389,4417],{"class":113},[103,9391,1220],{"class":170},[103,9393,9394,9396,9398,9400,9402,9404,9406,9408,9410],{"class":105,"line":259},[103,9395,1369],{"class":170},[103,9397,3925],{"class":1190},[103,9399,3935],{"class":109},[103,9401,563],{"class":170},[103,9403,4433],{"class":113},[103,9405,1212],{"class":109},[103,9407,563],{"class":170},[103,9409,4440],{"class":113},[103,9411,1220],{"class":170},[103,9413,9414,9416,9418],{"class":105,"line":274},[103,9415,1359],{"class":170},[103,9417,3950],{"class":1190},[103,9419,1220],{"class":170},[103,9421,9422,9424,9426,9428,9430],{"class":105,"line":286},[103,9423,2557],{"class":170},[103,9425,3960],{"class":1190},[103,9427,3963],{"class":170},[103,9429,3960],{"class":1190},[103,9431,1220],{"class":170},[103,9433,9434,9436,9438,9440,9442],{"class":105,"line":305},[103,9435,2557],{"class":170},[103,9437,3975],{"class":1190},[103,9439,4474],{"class":170},[103,9441,3975],{"class":1190},[103,9443,1220],{"class":170},[103,9445,9446,9448,9450],{"class":105,"line":312},[103,9447,2573],{"class":170},[103,9449,3950],{"class":1190},[103,9451,1220],{"class":170},[103,9453,9454,9456,9458,9460,9462],{"class":105,"line":327},[103,9455,1359],{"class":170},[103,9457,4495],{"class":1190},[103,9459,4170],{"class":170},[103,9461,4495],{"class":1190},[103,9463,1220],{"class":170},[103,9465,9466,9468,9470],{"class":105,"line":348},[103,9467,2532],{"class":170},[103,9469,3925],{"class":1190},[103,9471,1220],{"class":170},[103,9473,9474,9476,9478,9480,9482],{"class":105,"line":359},[103,9475,1747],{"class":170},[103,9477,4518],{"class":1190},[103,9479,4141],{"class":170},[103,9481,4518],{"class":1190},[103,9483,1220],{"class":170},[103,9485,9486,9488,9490,9492,9494],{"class":105,"line":368},[103,9487,1747],{"class":170},[103,9489,4013],{"class":1190},[103,9491,4534],{"class":170},[103,9493,4013],{"class":1190},[103,9495,1220],{"class":170},[103,9497,9498,9500,9502,9504,9506],{"class":105,"line":383},[103,9499,1747],{"class":170},[103,9501,4546],{"class":1190},[103,9503,4141],{"class":170},[103,9505,4546],{"class":1190},[103,9507,1220],{"class":170},[103,9509,9510,9512,9514],{"class":105,"line":388},[103,9511,1747],{"class":170},[103,9513,4560],{"class":1190},[103,9515,1220],{"class":170},[103,9517,9518,9520,9522],{"class":105,"line":394},[103,9519,1359],{"class":170},[103,9521,4570],{"class":1190},[103,9523,1220],{"class":170},[103,9525,9526,9528,9530],{"class":105,"line":399},[103,9527,2557],{"class":170},[103,9529,4580],{"class":1190},[103,9531,1220],{"class":170},[103,9533,9534,9536,9538,9540,9542,9544],{"class":105,"line":405},[103,9535,1451],{"class":170},[103,9537,4590],{"class":1190},[103,9539,1114],{"class":109},[103,9541,563],{"class":170},[103,9543,4597],{"class":113},[103,9545,1220],{"class":170},[103,9547,9548,9550,9552,9554,9556],{"class":105,"line":410},[103,9549,1400],{"class":170},[103,9551,4607],{"class":1190},[103,9553,4610],{"class":170},[103,9555,4607],{"class":1190},[103,9557,1220],{"class":170},[103,9559,9560,9562,9564,9566,9568],{"class":105,"line":416},[103,9561,1400],{"class":170},[103,9563,4622],{"class":1190},[103,9565,4625],{"class":170},[103,9567,4622],{"class":1190},[103,9569,1220],{"class":170},[103,9571,9572,9574,9576,9578,9580],{"class":105,"line":421},[103,9573,1400],{"class":170},[103,9575,4637],{"class":1190},[103,9577,4640],{"class":170},[103,9579,4637],{"class":1190},[103,9581,1220],{"class":170},[103,9583,9584,9586,9588,9590,9592],{"class":105,"line":427},[103,9585,1400],{"class":170},[103,9587,4652],{"class":1190},[103,9589,4655],{"class":170},[103,9591,4652],{"class":1190},[103,9593,1220],{"class":170},[103,9595,9596,9598,9600],{"class":105,"line":432},[103,9597,4665],{"class":170},[103,9599,4590],{"class":1190},[103,9601,1220],{"class":170},[103,9603,9604,9606,9608],{"class":105,"line":438},[103,9605,4675],{"class":170},[103,9607,4580],{"class":1190},[103,9609,1220],{"class":170},[103,9611,9612,9614,9616],{"class":105,"line":443},[103,9613,2557],{"class":170},[103,9615,4687],{"class":1190},[103,9617,1220],{"class":170},[103,9619,9620,9622,9624,9626,9628,9630],{"class":105,"line":449},[103,9621,1451],{"class":170},[103,9623,4590],{"class":1190},[103,9625,1114],{"class":109},[103,9627,563],{"class":170},[103,9629,4597],{"class":113},[103,9631,1220],{"class":170},[103,9633,9634,9636,9638,9640,9642],{"class":105,"line":454},[103,9635,1400],{"class":170},[103,9637,4607],{"class":1190},[103,9639,4610],{"class":170},[103,9641,4607],{"class":1190},[103,9643,1220],{"class":170},[103,9645,9646,9648,9650,9652,9654],{"class":105,"line":460},[103,9647,1400],{"class":170},[103,9649,4622],{"class":1190},[103,9651,4625],{"class":170},[103,9653,4622],{"class":1190},[103,9655,1220],{"class":170},[103,9657,9658,9660,9662,9664,9666],{"class":105,"line":465},[103,9659,1400],{"class":170},[103,9661,4637],{"class":1190},[103,9663,4640],{"class":170},[103,9665,4637],{"class":1190},[103,9667,1220],{"class":170},[103,9669,9670,9672,9674,9676,9678],{"class":105,"line":471},[103,9671,1400],{"class":170},[103,9673,4652],{"class":1190},[103,9675,4655],{"class":170},[103,9677,4652],{"class":1190},[103,9679,1220],{"class":170},[103,9681,9682,9684,9686],{"class":105,"line":476},[103,9683,4665],{"class":170},[103,9685,4590],{"class":1190},[103,9687,1220],{"class":170},[103,9689,9690,9692,9694],{"class":105,"line":504},[103,9691,4675],{"class":170},[103,9693,4687],{"class":1190},[103,9695,1220],{"class":170},[103,9697,9698,9700,9702],{"class":105,"line":530},[103,9699,2557],{"class":170},[103,9701,4782],{"class":1190},[103,9703,1220],{"class":170},[103,9705,9706,9708,9710,9712,9714,9716],{"class":105,"line":574},[103,9707,1451],{"class":170},[103,9709,4590],{"class":1190},[103,9711,1114],{"class":109},[103,9713,563],{"class":170},[103,9715,4597],{"class":113},[103,9717,1220],{"class":170},[103,9719,9720,9722,9724,9726,9728],{"class":105,"line":579},[103,9721,1400],{"class":170},[103,9723,4607],{"class":1190},[103,9725,4610],{"class":170},[103,9727,4607],{"class":1190},[103,9729,1220],{"class":170},[103,9731,9732,9734,9736,9738,9740],{"class":105,"line":590},[103,9733,1400],{"class":170},[103,9735,4622],{"class":1190},[103,9737,4625],{"class":170},[103,9739,4622],{"class":1190},[103,9741,1220],{"class":170},[103,9743,9744,9746,9748,9750,9752],{"class":105,"line":635},[103,9745,1400],{"class":170},[103,9747,4637],{"class":1190},[103,9749,4640],{"class":170},[103,9751,4637],{"class":1190},[103,9753,1220],{"class":170},[103,9755,9756,9758,9760,9762,9764],{"class":105,"line":665},[103,9757,1400],{"class":170},[103,9759,4652],{"class":1190},[103,9761,4655],{"class":170},[103,9763,4652],{"class":1190},[103,9765,1220],{"class":170},[103,9767,9768,9770,9772],{"class":105,"line":677},[103,9769,4665],{"class":170},[103,9771,4590],{"class":1190},[103,9773,1220],{"class":170},[103,9775,9776,9778,9780],{"class":105,"line":799},[103,9777,4675],{"class":170},[103,9779,4782],{"class":1190},[103,9781,1220],{"class":170},[103,9783,9784,9786,9788],{"class":105,"line":805},[103,9785,2573],{"class":170},[103,9787,4570],{"class":1190},[103,9789,1220],{"class":170},[103,9791,9792,9794,9796],{"class":105,"line":817},[103,9793,1359],{"class":170},[103,9795,4886],{"class":1190},[103,9797,1220],{"class":170},[103,9799,9800,9802,9804],{"class":105,"line":823},[103,9801,2557],{"class":170},[103,9803,4580],{"class":1190},[103,9805,1220],{"class":170},[103,9807,9808,9810,9812,9814,9816,9818],{"class":105,"line":829},[103,9809,1451],{"class":170},[103,9811,4590],{"class":1190},[103,9813,1114],{"class":109},[103,9815,563],{"class":170},[103,9817,4597],{"class":113},[103,9819,1220],{"class":170},[103,9821,9822,9824,9826,9828,9830],{"class":105,"line":835},[103,9823,1400],{"class":170},[103,9825,4607],{"class":1190},[103,9827,4610],{"class":170},[103,9829,4607],{"class":1190},[103,9831,1220],{"class":170},[103,9833,9834,9836,9838,9840,9842],{"class":105,"line":841},[103,9835,1400],{"class":170},[103,9837,4622],{"class":1190},[103,9839,4935],{"class":170},[103,9841,4622],{"class":1190},[103,9843,1220],{"class":170},[103,9845,9846,9848,9850,9852,9854],{"class":105,"line":864},[103,9847,1400],{"class":170},[103,9849,4637],{"class":1190},[103,9851,4949],{"class":170},[103,9853,4637],{"class":1190},[103,9855,1220],{"class":170},[103,9857,9858,9860,9862,9864,9866],{"class":105,"line":907},[103,9859,1400],{"class":170},[103,9861,4652],{"class":1190},[103,9863,4963],{"class":170},[103,9865,4652],{"class":1190},[103,9867,1220],{"class":170},[103,9869,9870,9872,9874],{"class":105,"line":944},[103,9871,4665],{"class":170},[103,9873,4590],{"class":1190},[103,9875,1220],{"class":170},[103,9877,9878,9880,9882],{"class":105,"line":949},[103,9879,4675],{"class":170},[103,9881,4580],{"class":1190},[103,9883,1220],{"class":170},[103,9885,9886,9888,9890],{"class":105,"line":973},[103,9887,2557],{"class":170},[103,9889,4687],{"class":1190},[103,9891,1220],{"class":170},[103,9893,9894,9896,9898,9900,9902,9904],{"class":105,"line":997},[103,9895,1451],{"class":170},[103,9897,4590],{"class":1190},[103,9899,1114],{"class":109},[103,9901,563],{"class":170},[103,9903,4597],{"class":113},[103,9905,1220],{"class":170},[103,9907,9908,9910,9912,9914,9916],{"class":105,"line":1876},[103,9909,1400],{"class":170},[103,9911,4607],{"class":1190},[103,9913,4610],{"class":170},[103,9915,4607],{"class":1190},[103,9917,1220],{"class":170},[103,9919,9920,9922,9924,9926,9928],{"class":105,"line":1885},[103,9921,1400],{"class":170},[103,9923,4622],{"class":1190},[103,9925,4935],{"class":170},[103,9927,4622],{"class":1190},[103,9929,1220],{"class":170},[103,9931,9932,9934,9936,9938,9940],{"class":105,"line":1900},[103,9933,1400],{"class":170},[103,9935,4637],{"class":1190},[103,9937,4949],{"class":170},[103,9939,4637],{"class":1190},[103,9941,1220],{"class":170},[103,9943,9944,9946,9948,9950,9952],{"class":105,"line":1915},[103,9945,1400],{"class":170},[103,9947,4652],{"class":1190},[103,9949,4963],{"class":170},[103,9951,4652],{"class":1190},[103,9953,1220],{"class":170},[103,9955,9956,9958,9960],{"class":105,"line":1924},[103,9957,4665],{"class":170},[103,9959,4590],{"class":1190},[103,9961,1220],{"class":170},[103,9963,9964,9966,9968],{"class":105,"line":1933},[103,9965,4675],{"class":170},[103,9967,4687],{"class":1190},[103,9969,1220],{"class":170},[103,9971,9972,9974,9976],{"class":105,"line":1942},[103,9973,2557],{"class":170},[103,9975,4782],{"class":1190},[103,9977,1220],{"class":170},[103,9979,9980,9982,9984,9986,9988,9990],{"class":105,"line":1958},[103,9981,1451],{"class":170},[103,9983,4590],{"class":1190},[103,9985,1114],{"class":109},[103,9987,563],{"class":170},[103,9989,4597],{"class":113},[103,9991,1220],{"class":170},[103,9993,9994,9996,9998,10000,10002],{"class":105,"line":2006},[103,9995,1400],{"class":170},[103,9997,4607],{"class":1190},[103,9999,4610],{"class":170},[103,10001,4607],{"class":1190},[103,10003,1220],{"class":170},[103,10005,10006,10008,10010,10012,10014],{"class":105,"line":2015},[103,10007,1400],{"class":170},[103,10009,4622],{"class":1190},[103,10011,4935],{"class":170},[103,10013,4622],{"class":1190},[103,10015,1220],{"class":170},[103,10017,10018,10020,10022,10024,10026],{"class":105,"line":2024},[103,10019,1400],{"class":170},[103,10021,4637],{"class":1190},[103,10023,4949],{"class":170},[103,10025,4637],{"class":1190},[103,10027,1220],{"class":170},[103,10029,10030,10032,10034,10036,10038],{"class":105,"line":2029},[103,10031,1400],{"class":170},[103,10033,4652],{"class":1190},[103,10035,4963],{"class":170},[103,10037,4652],{"class":1190},[103,10039,1220],{"class":170},[103,10041,10042,10044,10046],{"class":105,"line":2051},[103,10043,4665],{"class":170},[103,10045,4590],{"class":1190},[103,10047,1220],{"class":170},[103,10049,10050,10052,10054],{"class":105,"line":2067},[103,10051,4675],{"class":170},[103,10053,4782],{"class":1190},[103,10055,1220],{"class":170},[103,10057,10058,10060,10062],{"class":105,"line":2082},[103,10059,2573],{"class":170},[103,10061,4886],{"class":1190},[103,10063,1220],{"class":170},[103,10065,10066,10068,10070],{"class":105,"line":2098},[103,10067,2532],{"class":170},[103,10069,4560],{"class":1190},[103,10071,1220],{"class":170},[103,10073,10074,10076,10078],{"class":105,"line":2107},[103,10075,1426],{"class":170},[103,10077,4403],{"class":1190},[103,10079,1220],{"class":170},[103,10081,10082,10084,10086],{"class":105,"line":2112},[103,10083,1478],{"class":170},[103,10085,136],{"class":1190},[103,10087,1220],{"class":170},[25,10089,10090],{},"我们之前下载的fishbot已经包含该内容了，所以不用再添加了，直接运行即可。",[94,10092,10093],{"className":6017,"code":6661,"language":6019,"meta":59,"style":59},[100,10094,10095],{"__ignoreMap":59},[103,10096,10097],{"class":105,"line":106},[103,10098,6661],{"class":170},[94,10100,10102],{"className":6017,"code":10101,"language":6019,"meta":59,"style":59},"ros2 topic list\n",[100,10103,10104],{"__ignoreMap":59},[103,10105,10106,10108],{"class":105,"line":106},[103,10107,7835],{"class":170},[103,10109,7830],{"class":139},[25,10111,10112],{},[57,10113],{"alt":59,"src":10114},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1661.webp",[94,10116,10118],{"className":6017,"code":10117,"language":6019,"meta":59,"style":59},"ros2 topic info \u002Fimu\nros2 topic echo \u002Fimu\n",[100,10119,10120,10130],{"__ignoreMap":59},[103,10121,10122,10125,10127],{"class":105,"line":106},[103,10123,10124],{"class":170},"ros2 topic info ",[103,10126,188],{"class":166},[103,10128,10129],{"class":170},"imu\n",[103,10131,10132,10135,10137],{"class":105,"line":231},[103,10133,10134],{"class":170},"ros2 topic echo ",[103,10136,188],{"class":166},[103,10138,10129],{"class":170},[25,10140,10141],{},[57,10142],{"alt":59,"src":10143},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1662.webp",[25,10145,10146],{},[57,10147],{"alt":59,"src":10148},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1663.webp",[94,10150,10152],{"className":7094,"code":10151,"language":7096,"meta":59,"style":59},"header:\n  stamp:\n    sec: 150\n    nanosec: 599000000\n  frame_id: base_footprint\norientation:\n  x: 3.434713830866392e-07\n  y: 7.119913105768616e-06\n  z: -0.00028312437320413914\n  w: 0.9999999598948884\norientation_covariance:\n- 0.0\n- 0.0\n- 0.0\n- 0.0\n- 0.0\n- 0.0\n- 0.0\n- 0.0\n- 0.0\nangular_velocity:\n  x: -0.00013597855247901325\n  y: 0.0006306135617081868\n  z: -0.00015794894627685146\nangular_velocity_covariance:\n- 4.0e-08\n- 0.0\n- 0.0\n- 0.0\n- 4.0e-08\n- 0.0\n- 0.0\n- 0.0\n- 4.0e-08\nlinear_acceleration:\n  x: 0.08679200038530369\n  y: 0.07753419258567491\n  z: 9.687910969061628\nlinear_acceleration_covariance:\n- 0.00028900000000000003\n- 0.0\n- 0.0\n- 0.0\n- 0.00028900000000000003\n- 0.0\n- 0.0\n- 0.0\n- 0.00028900000000000003\n\n",[100,10153,10154,10160,10167,10177,10187,10196,10203,10213,10223,10233,10243,10250,10256,10262,10268,10274,10280,10286,10292,10298,10304,10310,10319,10328,10337,10344,10351,10357,10363,10369,10375,10381,10387,10393,10399,10405,10414,10423,10432,10439,10446,10452,10458,10464,10470,10476,10482,10488],{"__ignoreMap":59},[103,10155,10156,10158],{"class":105,"line":106},[103,10157,7106],{"class":1190},[103,10159,7109],{"class":170},[103,10161,10162,10165],{"class":105,"line":231},[103,10163,10164],{"class":1190},"  stamp",[103,10166,7109],{"class":170},[103,10168,10169,10172,10174],{"class":105,"line":259},[103,10170,10171],{"class":1190},"    sec",[103,10173,644],{"class":170},[103,10175,10176],{"class":139},"150\n",[103,10178,10179,10182,10184],{"class":105,"line":274},[103,10180,10181],{"class":1190},"    nanosec",[103,10183,644],{"class":170},[103,10185,10186],{"class":139},"599000000\n",[103,10188,10189,10192,10194],{"class":105,"line":286},[103,10190,10191],{"class":1190},"  frame_id",[103,10193,644],{"class":170},[103,10195,7156],{"class":113},[103,10197,10198,10201],{"class":105,"line":305},[103,10199,10200],{"class":1190},"orientation",[103,10202,7109],{"class":170},[103,10204,10205,10208,10210],{"class":105,"line":312},[103,10206,10207],{"class":1190},"  x",[103,10209,644],{"class":170},[103,10211,10212],{"class":139},"3.434713830866392e-07\n",[103,10214,10215,10218,10220],{"class":105,"line":327},[103,10216,10217],{"class":139},"  y",[103,10219,644],{"class":170},[103,10221,10222],{"class":139},"7.119913105768616e-06\n",[103,10224,10225,10228,10230],{"class":105,"line":348},[103,10226,10227],{"class":1190},"  z",[103,10229,644],{"class":170},[103,10231,10232],{"class":139},"-0.00028312437320413914\n",[103,10234,10235,10238,10240],{"class":105,"line":359},[103,10236,10237],{"class":1190},"  w",[103,10239,644],{"class":170},[103,10241,10242],{"class":139},"0.9999999598948884\n",[103,10244,10245,10248],{"class":105,"line":368},[103,10246,10247],{"class":1190},"orientation_covariance",[103,10249,7109],{"class":170},[103,10251,10252,10254],{"class":105,"line":383},[103,10253,7103],{"class":170},[103,10255,7355],{"class":139},[103,10257,10258,10260],{"class":105,"line":388},[103,10259,7103],{"class":170},[103,10261,7355],{"class":139},[103,10263,10264,10266],{"class":105,"line":394},[103,10265,7103],{"class":170},[103,10267,7355],{"class":139},[103,10269,10270,10272],{"class":105,"line":399},[103,10271,7103],{"class":170},[103,10273,7355],{"class":139},[103,10275,10276,10278],{"class":105,"line":405},[103,10277,7103],{"class":170},[103,10279,7355],{"class":139},[103,10281,10282,10284],{"class":105,"line":410},[103,10283,7103],{"class":170},[103,10285,7355],{"class":139},[103,10287,10288,10290],{"class":105,"line":416},[103,10289,7103],{"class":170},[103,10291,7355],{"class":139},[103,10293,10294,10296],{"class":105,"line":421},[103,10295,7103],{"class":170},[103,10297,7355],{"class":139},[103,10299,10300,10302],{"class":105,"line":427},[103,10301,7103],{"class":170},[103,10303,7355],{"class":139},[103,10305,10306,10308],{"class":105,"line":432},[103,10307,4570],{"class":1190},[103,10309,7109],{"class":170},[103,10311,10312,10314,10316],{"class":105,"line":438},[103,10313,10207],{"class":1190},[103,10315,644],{"class":170},[103,10317,10318],{"class":139},"-0.00013597855247901325\n",[103,10320,10321,10323,10325],{"class":105,"line":443},[103,10322,10217],{"class":139},[103,10324,644],{"class":170},[103,10326,10327],{"class":139},"0.0006306135617081868\n",[103,10329,10330,10332,10334],{"class":105,"line":449},[103,10331,10227],{"class":1190},[103,10333,644],{"class":170},[103,10335,10336],{"class":139},"-0.00015794894627685146\n",[103,10338,10339,10342],{"class":105,"line":454},[103,10340,10341],{"class":1190},"angular_velocity_covariance",[103,10343,7109],{"class":170},[103,10345,10346,10348],{"class":105,"line":460},[103,10347,7103],{"class":170},[103,10349,10350],{"class":139},"4.0e-08\n",[103,10352,10353,10355],{"class":105,"line":465},[103,10354,7103],{"class":170},[103,10356,7355],{"class":139},[103,10358,10359,10361],{"class":105,"line":471},[103,10360,7103],{"class":170},[103,10362,7355],{"class":139},[103,10364,10365,10367],{"class":105,"line":476},[103,10366,7103],{"class":170},[103,10368,7355],{"class":139},[103,10370,10371,10373],{"class":105,"line":504},[103,10372,7103],{"class":170},[103,10374,10350],{"class":139},[103,10376,10377,10379],{"class":105,"line":530},[103,10378,7103],{"class":170},[103,10380,7355],{"class":139},[103,10382,10383,10385],{"class":105,"line":574},[103,10384,7103],{"class":170},[103,10386,7355],{"class":139},[103,10388,10389,10391],{"class":105,"line":579},[103,10390,7103],{"class":170},[103,10392,7355],{"class":139},[103,10394,10395,10397],{"class":105,"line":590},[103,10396,7103],{"class":170},[103,10398,10350],{"class":139},[103,10400,10401,10403],{"class":105,"line":635},[103,10402,4886],{"class":1190},[103,10404,7109],{"class":170},[103,10406,10407,10409,10411],{"class":105,"line":665},[103,10408,10207],{"class":1190},[103,10410,644],{"class":170},[103,10412,10413],{"class":139},"0.08679200038530369\n",[103,10415,10416,10418,10420],{"class":105,"line":677},[103,10417,10217],{"class":139},[103,10419,644],{"class":170},[103,10421,10422],{"class":139},"0.07753419258567491\n",[103,10424,10425,10427,10429],{"class":105,"line":799},[103,10426,10227],{"class":1190},[103,10428,644],{"class":170},[103,10430,10431],{"class":139},"9.687910969061628\n",[103,10433,10434,10437],{"class":105,"line":805},[103,10435,10436],{"class":1190},"linear_acceleration_covariance",[103,10438,7109],{"class":170},[103,10440,10441,10443],{"class":105,"line":817},[103,10442,7103],{"class":170},[103,10444,10445],{"class":139},"0.00028900000000000003\n",[103,10447,10448,10450],{"class":105,"line":823},[103,10449,7103],{"class":170},[103,10451,7355],{"class":139},[103,10453,10454,10456],{"class":105,"line":829},[103,10455,7103],{"class":170},[103,10457,7355],{"class":139},[103,10459,10460,10462],{"class":105,"line":835},[103,10461,7103],{"class":170},[103,10463,7355],{"class":139},[103,10465,10466,10468],{"class":105,"line":841},[103,10467,7103],{"class":170},[103,10469,10445],{"class":139},[103,10471,10472,10474],{"class":105,"line":864},[103,10473,7103],{"class":170},[103,10475,7355],{"class":139},[103,10477,10478,10480],{"class":105,"line":907},[103,10479,7103],{"class":170},[103,10481,7355],{"class":139},[103,10483,10484,10486],{"class":105,"line":944},[103,10485,7103],{"class":170},[103,10487,7355],{"class":139},[103,10489,10490,10492],{"class":105,"line":949},[103,10491,7103],{"class":170},[103,10493,10445],{"class":139},[25,10495,10496],{},"用rqt可视化：",[25,10498,10499],{},[57,10500],{"alt":59,"src":10501},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1664.webp",[6871,10503,10505],{"id":10504},"雷达laser","雷达Laser",[25,10507,10508],{},"本节我们来认识一个新的传感器，该传感器在自动驾驶、室内导航等应用非常多，比如扫地机器人上就是用的它作为感知环境的重要工具，该传感器是激光雷达。",[25,10510,10511,10512,10515],{},"激光雷达（Light Detection And Ranging）,缩写",[100,10513,10514],{},"LiDAR","，英文也叫laser,翻译一下叫——激光探测与测距。",[25,10517,10518],{},"激光雷达的原理也很简单，就像蝙蝠的定位方法一样，蝙蝠定位大家都知道吧，像下面这样子的回声定位。",[25,10520,10521],{},[57,10522],{"alt":59,"src":10523},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1665.webp",[25,10525,10526],{},"普通的单线激光雷达一般有一个发射器，一个接收器，发射器发出激光射线到前方的目标上，物品会将激光反射回来，然后激光雷达的接受器可以检测到反射的激光。",[25,10528,10529],{},[57,10530],{"alt":59,"src":10531},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1666.webp",[25,10533,10534],{},"通过计算发送和反馈之间的时间间隔，乘上激光的速度，就可以计算出激光飞行的距离，该计算方法成为TOF（飞行时间法Time of flight，也称时差法）。",[25,10536,10537,10538],{},"除了TOF之外还有其他方法进行测距，比如三角法，这里就不拓展了放一篇文章，大家自行阅读。",[17,10539,10542],{"href":10540,"rel":10541},"https:\u002F\u002Fwww.slamtec.com\u002Fcn\u002FNews\u002FDetail\u002F190",[21],"激光三角测距原理详述",[25,10544,10545],{},"目前市面上的激光雷达，几乎都是采用三角测距，比如思岚的：",[25,10547,10548],{},[57,10549],{"alt":59,"src":10550},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1667.webp",[25,10552,10553],{},"需要注意的是虽然只有一个发射器和一个接受器，激光雷达通过电机可以进行旋转，这样就可以达到对周围环境360度测距的目的。",[25,10555,10556],{},"五位数的长这样：",[25,10558,10559],{},[57,10560],{"alt":59,"src":10561},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1668.webp",[25,10563,10564],{},"四位数的长这样（咱们有一台）",[25,10566,10567],{},[57,10568],{"alt":59,"src":10569},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1669.webp",[25,10571,10572],{},"三位数的长这样（咱们也有）",[25,10574,10575],{},[57,10576],{"alt":59,"src":10577},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1670.webp",[25,10579,10580],{},"两位数的长这样",[25,10582,10583],{},[57,10584],{"alt":59,"src":10585},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1671.webp",[25,10587,10588],{},"不要钱的长这样",[25,10590,10591],{},"仿真的，不要钱",[25,10593,10594],{},[57,10595],{"alt":59,"src":10596},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1672.webp",[25,10598,10599,10600,9326],{},"因为激光雷达是属于射线类传感器，该类传感在在Gazebo插件中都被封装成了一个动态库",[100,10601,10602],{},"libgazebo_ros_ray_sensor.so",[25,10604,10605,10606,9326],{},"接着我们来看看LiDAR的话题消息接口",[100,10607,10608],{},"sensor_msgs\u002Fmsg\u002FLaserScan",[25,10610,10611],{},"雷达的数据结构有些复杂，但通过注释和名字相信你可以看的七七八八，看不懂也没关系，一般情况下我们不会直接的对雷达的数据做操作。",[25,10613,10614],{},"雷达的模型不需要collision，请删掉，否则会挡激光射出。",[25,10616,10617],{},"有了前面的经验，我们需要在URDF添加以下内容即可，但我们下载的是鱼香ROS添加好的，所以不用改了：",[94,10619,10621],{"className":1178,"code":10620,"language":1180,"meta":59,"style":59},"  \u003Cgazebo reference=\"laser_link\">\n      \u003Csensor name=\"laser_sensor\" type=\"ray\">\n      \u003Calways_on>true\u003C\u002Falways_on>\n      \u003Cvisualize>true\u003C\u002Fvisualize>\n      \u003Cupdate_rate>10\u003C\u002Fupdate_rate>\n      \u003Cpose>0 0 0.075 0 0 0\u003C\u002Fpose>\n      \u003Cray>\n          \u003Cscan>\n            \u003Chorizontal>\n              \u003Csamples>360\u003C\u002Fsamples>\n              \u003Cresolution>1.000000\u003C\u002Fresolution>\n              \u003Cmin_angle>0.000000\u003C\u002Fmin_angle>\n              \u003Cmax_angle>6.280000\u003C\u002Fmax_angle>\n            \u003C\u002Fhorizontal>\n          \u003C\u002Fscan>\n          \u003Crange>\n            \u003Cmin>0.120000\u003C\u002Fmin>\n            \u003Cmax>3.5\u003C\u002Fmax>\n            \u003Cresolution>0.015000\u003C\u002Fresolution>\n          \u003C\u002Frange>\n          \u003Cnoise>\n            \u003Ctype>gaussian\u003C\u002Ftype>\n            \u003Cmean>0.0\u003C\u002Fmean>\n            \u003Cstddev>0.01\u003C\u002Fstddev>\n          \u003C\u002Fnoise>\n      \u003C\u002Fray>\n\n      \u003Cplugin name=\"laserscan\" filename=\"libgazebo_ros_ray_sensor.so\">\n        \u003Cros>\n          \u003Cremapping>~\u002Fout:=scan\u003C\u002Fremapping>\n        \u003C\u002Fros>\n        \u003Coutput_type>sensor_msgs\u002FLaserScan\u003C\u002Foutput_type>\n        \u003Cframe_name>laser_link\u003C\u002Fframe_name>\n      \u003C\u002Fplugin>\n      \u003C\u002Fsensor>\n    \u003C\u002Fgazebo>\n",[100,10622,10623,10637,10657,10669,10681,10694,10706,10714,10722,10730,10742,10754,10766,10778,10786,10794,10802,10814,10826,10838,10846,10854,10866,10878,10890,10898,10906,10910,10930,10938,10950,10958,10970,10982,10990,10998],{"__ignoreMap":59},[103,10624,10625,10627,10629,10631,10633,10635],{"class":105,"line":106},[103,10626,1229],{"class":170},[103,10628,136],{"class":1190},[103,10630,3773],{"class":109},[103,10632,563],{"class":170},[103,10634,1704],{"class":113},[103,10636,1220],{"class":170},[103,10638,10639,10641,10643,10645,10647,10649,10651,10653,10655],{"class":105,"line":231},[103,10640,1369],{"class":170},[103,10642,4403],{"class":1190},[103,10644,1212],{"class":109},[103,10646,563],{"class":170},[103,10648,5243],{"class":113},[103,10650,1114],{"class":109},[103,10652,563],{"class":170},[103,10654,5250],{"class":113},[103,10656,1220],{"class":170},[103,10658,10659,10661,10663,10665,10667],{"class":105,"line":259},[103,10660,1369],{"class":170},[103,10662,4518],{"class":1190},[103,10664,4141],{"class":170},[103,10666,4518],{"class":1190},[103,10668,1220],{"class":170},[103,10670,10671,10673,10675,10677,10679],{"class":105,"line":274},[103,10672,1369],{"class":170},[103,10674,4546],{"class":1190},[103,10676,4141],{"class":170},[103,10678,4546],{"class":1190},[103,10680,1220],{"class":170},[103,10682,10683,10685,10687,10690,10692],{"class":105,"line":286},[103,10684,1369],{"class":170},[103,10686,4013],{"class":1190},[103,10688,10689],{"class":170},">10\u003C\u002F",[103,10691,4013],{"class":1190},[103,10693,1220],{"class":170},[103,10695,10696,10698,10700,10702,10704],{"class":105,"line":305},[103,10697,1369],{"class":170},[103,10699,5300],{"class":1190},[103,10701,5303],{"class":170},[103,10703,5300],{"class":1190},[103,10705,1220],{"class":170},[103,10707,10708,10710,10712],{"class":105,"line":312},[103,10709,1369],{"class":170},[103,10711,5315],{"class":1190},[103,10713,1220],{"class":170},[103,10715,10716,10718,10720],{"class":105,"line":327},[103,10717,1359],{"class":170},[103,10719,5325],{"class":1190},[103,10721,1220],{"class":170},[103,10723,10724,10726,10728],{"class":105,"line":348},[103,10725,2557],{"class":170},[103,10727,5335],{"class":1190},[103,10729,1220],{"class":170},[103,10731,10732,10734,10736,10738,10740],{"class":105,"line":359},[103,10733,1451],{"class":170},[103,10735,5345],{"class":1190},[103,10737,5348],{"class":170},[103,10739,5345],{"class":1190},[103,10741,1220],{"class":170},[103,10743,10744,10746,10748,10750,10752],{"class":105,"line":368},[103,10745,1451],{"class":170},[103,10747,5360],{"class":1190},[103,10749,5363],{"class":170},[103,10751,5360],{"class":1190},[103,10753,1220],{"class":170},[103,10755,10756,10758,10760,10762,10764],{"class":105,"line":383},[103,10757,1451],{"class":170},[103,10759,5375],{"class":1190},[103,10761,5378],{"class":170},[103,10763,5375],{"class":1190},[103,10765,1220],{"class":170},[103,10767,10768,10770,10772,10774,10776],{"class":105,"line":388},[103,10769,1451],{"class":170},[103,10771,5390],{"class":1190},[103,10773,5393],{"class":170},[103,10775,5390],{"class":1190},[103,10777,1220],{"class":170},[103,10779,10780,10782,10784],{"class":105,"line":394},[103,10781,4675],{"class":170},[103,10783,5335],{"class":1190},[103,10785,1220],{"class":170},[103,10787,10788,10790,10792],{"class":105,"line":399},[103,10789,2573],{"class":170},[103,10791,5325],{"class":1190},[103,10793,1220],{"class":170},[103,10795,10796,10798,10800],{"class":105,"line":405},[103,10797,1359],{"class":170},[103,10799,5423],{"class":1190},[103,10801,1220],{"class":170},[103,10803,10804,10806,10808,10810,10812],{"class":105,"line":410},[103,10805,2557],{"class":170},[103,10807,5433],{"class":1190},[103,10809,5436],{"class":170},[103,10811,5433],{"class":1190},[103,10813,1220],{"class":170},[103,10815,10816,10818,10820,10822,10824],{"class":105,"line":416},[103,10817,2557],{"class":170},[103,10819,5448],{"class":1190},[103,10821,5451],{"class":170},[103,10823,5448],{"class":1190},[103,10825,1220],{"class":170},[103,10827,10828,10830,10832,10834,10836],{"class":105,"line":421},[103,10829,2557],{"class":170},[103,10831,5360],{"class":1190},[103,10833,5465],{"class":170},[103,10835,5360],{"class":1190},[103,10837,1220],{"class":170},[103,10839,10840,10842,10844],{"class":105,"line":427},[103,10841,2573],{"class":170},[103,10843,5423],{"class":1190},[103,10845,1220],{"class":170},[103,10847,10848,10850,10852],{"class":105,"line":432},[103,10849,1359],{"class":170},[103,10851,4590],{"class":1190},[103,10853,1220],{"class":170},[103,10855,10856,10858,10860,10862,10864],{"class":105,"line":438},[103,10857,2557],{"class":170},[103,10859,5495],{"class":1190},[103,10861,5498],{"class":170},[103,10863,5495],{"class":1190},[103,10865,1220],{"class":170},[103,10867,10868,10870,10872,10874,10876],{"class":105,"line":443},[103,10869,2557],{"class":170},[103,10871,4607],{"class":1190},[103,10873,4610],{"class":170},[103,10875,4607],{"class":1190},[103,10877,1220],{"class":170},[103,10879,10880,10882,10884,10886,10888],{"class":105,"line":449},[103,10881,2557],{"class":170},[103,10883,4622],{"class":1190},[103,10885,5525],{"class":170},[103,10887,4622],{"class":1190},[103,10889,1220],{"class":170},[103,10891,10892,10894,10896],{"class":105,"line":454},[103,10893,2573],{"class":170},[103,10895,4590],{"class":1190},[103,10897,1220],{"class":170},[103,10899,10900,10902,10904],{"class":105,"line":460},[103,10901,1426],{"class":170},[103,10903,5315],{"class":1190},[103,10905,1220],{"class":170},[103,10907,10908],{"class":105,"line":465},[103,10909,309],{"emptyLinePlaceholder":308},[103,10911,10912,10914,10916,10918,10920,10922,10924,10926,10928],{"class":105,"line":471},[103,10913,1369],{"class":170},[103,10915,3925],{"class":1190},[103,10917,1212],{"class":109},[103,10919,563],{"class":170},[103,10921,5566],{"class":113},[103,10923,3935],{"class":109},[103,10925,563],{"class":170},[103,10927,5573],{"class":113},[103,10929,1220],{"class":170},[103,10931,10932,10934,10936],{"class":105,"line":476},[103,10933,1747],{"class":170},[103,10935,3950],{"class":1190},[103,10937,1220],{"class":170},[103,10939,10940,10942,10944,10946,10948],{"class":105,"line":504},[103,10941,1359],{"class":170},[103,10943,3975],{"class":1190},[103,10945,5599],{"class":170},[103,10947,3975],{"class":1190},[103,10949,1220],{"class":170},[103,10951,10952,10954,10956],{"class":105,"line":530},[103,10953,2532],{"class":170},[103,10955,3950],{"class":1190},[103,10957,1220],{"class":170},[103,10959,10960,10962,10964,10966,10968],{"class":105,"line":574},[103,10961,1747],{"class":170},[103,10963,5620],{"class":1190},[103,10965,5623],{"class":170},[103,10967,5620],{"class":1190},[103,10969,1220],{"class":170},[103,10971,10972,10974,10976,10978,10980],{"class":105,"line":579},[103,10973,1747],{"class":170},[103,10975,5635],{"class":1190},[103,10977,5638],{"class":170},[103,10979,5635],{"class":1190},[103,10981,1220],{"class":170},[103,10983,10984,10986,10988],{"class":105,"line":590},[103,10985,1426],{"class":170},[103,10987,3925],{"class":1190},[103,10989,1220],{"class":170},[103,10991,10992,10994,10996],{"class":105,"line":635},[103,10993,1426],{"class":170},[103,10995,4403],{"class":1190},[103,10997,1220],{"class":170},[103,10999,11000,11002,11004],{"class":105,"line":665},[103,11001,1478],{"class":170},[103,11003,136],{"class":1190},[103,11005,1220],{"class":170},[25,11007,11008],{},"可以看到:",[6010,11010,11011,11017,11020,11026,11032],{},[1086,11012,11013,11014,11016],{},"雷达也可以设置更新频率",[100,11015,4013],{},"，这里设置为5",[1086,11018,11019],{},"雷达可以设置分辨率，设置为1，采样数量360个，最终生成的点云数量就是360",[1086,11021,11022,11023],{},"雷达也有噪声，模型为",[100,11024,11025],{},"gaussian",[1086,11027,11028,11029,11031],{},"雷达有扫描范围",[100,11030,5423],{},"，这里配置成0.12-3.5，0.015分辨率",[1086,11033,11034,11035,11037],{},"雷达的",[100,11036,5300],{},"就是雷达的joint中位置的设置值",[25,11039,11040],{},"下面这个蓝色的就是激光雷达的光线覆盖范围：",[25,11042,11043],{},[57,11044],{"alt":59,"src":11045},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1673.webp",[94,11047,11048],{"className":6017,"code":10101,"language":6019,"meta":59,"style":59},[100,11049,11050],{"__ignoreMap":59},[103,11051,11052,11054],{"class":105,"line":106},[103,11053,7835],{"class":170},[103,11055,7830],{"class":139},[25,11057,11058],{},[57,11059],{"alt":59,"src":11060},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1674.webp",[94,11062,11064],{"className":6017,"code":11063,"language":6019,"meta":59,"style":59},"ros2 topic info \u002Fscan\nros2 topic echo \u002Fscan\n",[100,11065,11066,11075],{"__ignoreMap":59},[103,11067,11068,11070,11072],{"class":105,"line":106},[103,11069,10124],{"class":170},[103,11071,188],{"class":166},[103,11073,11074],{"class":170},"scan\n",[103,11076,11077,11079,11081],{"class":105,"line":231},[103,11078,10134],{"class":170},[103,11080,188],{"class":166},[103,11082,11074],{"class":170},[25,11084,11085],{},[57,11086],{"alt":59,"src":11087},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1675.webp",[25,11089,11090],{},"接着我们尝试使用rviz2进行可视化激光雷达数据",[25,11092,11093],{},"添加和修改RVIZ2的如下：（通过LaserScan插件可以看到激光数据）",[25,11095,11096],{},[57,11097],{"alt":59,"src":11098},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1676.webp",[25,11100,11101],{},"相信你改完之后依然是看不到任何激光雷达的数据的，反看topic的echo出来的数据，不是0就是inf(无限大)，再看看gazebo你会发现，激光雷达并没有达到任何一个物体上。",[25,11103,11104],{},[57,11105],{"alt":59,"src":11106},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1677.webp",[25,11108,11109],{},"所以我们可以手动的给激光雷达周围添加一下东西，点击Gazebo工具栏的正方体，圆球或者圆柱，随意放置几个到我们激光雷达的最大扫描半径内。",[25,11111,11112],{},[57,11113],{"alt":59,"src":11114},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1678.webp",[25,11116,11117],{},[57,11118],{"alt":59,"src":11119},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1679.webp",[25,11121,11122],{},[57,11123],{"alt":59,"src":11124},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1680.webp",[6871,11126,11128],{"id":11127},"超声波ultrasonic","超声波Ultrasonic",[25,11130,11131,11132],{},"这玩意对于ROS2算法意义不是很大，控制组直接在MCU上实现即可，有需求可以学本节。 ",[34,11133,11134],{},"（可以跳过本节）",[25,11136,11137],{},"在实际的机器人开发过程中，我们可能会利用超声波传感器实现实时避障的功能，毕竟超声波的价格相较于激光雷达要便宜很多（便宜的几块钱）。",[25,11139,11140],{},"所以本节我们来说一下如何使用ROS2+Gazebo来仿真超声波传感器。",[25,11142,11143],{},"百科来一段：",[25,11145,11146,11147,11152,11153,11158,11159,11164],{},"超声波传感器是将超声波信号转换成其它能量信号（通常是电信号）的传感器。超声波是",[17,11148,11151],{"href":11149,"rel":11150},"https:\u002F\u002Fbaike.baidu.com\u002Fitem\u002F%E6%8C%AF%E5%8A%A8%E9%A2%91%E7%8E%87\u002F8068137",[21],"振动频率","高于20kHz的机械波。它具有频率高、波长短、绕射现象小，特别是方向性好、能够成为",[17,11154,11157],{"href":11155,"rel":11156},"https:\u002F\u002Fbaike.baidu.com\u002Fitem\u002F%E5%B0%84%E7%BA%BF\u002F327964",[21],"射线","而定向传播等特点。超声波对液体、固体的穿透本领很大，尤其是在阳光不透明的固体中。超声波碰到杂质或分界面会产生显著反射形成反射回波，碰到活动物体能产生",[17,11160,11163],{"href":11161,"rel":11162},"https:\u002F\u002Fbaike.baidu.com\u002Fitem\u002F%E5%A4%9A%E6%99%AE%E5%8B%92%E6%95%88%E5%BA%94\u002F115710",[21],"多普勒效应","。超声波传感器广泛应用在工业、国防、生物医学等方面。",[25,11166,11167],{},"接着看看长什么样子：",[25,11169,11170],{},[57,11171],{"alt":59,"src":11172},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1681.webp",[25,11174,11175],{},"便宜的就长这样子，一共两个头，一个头用于发送波，一个头接收波。这个还稍微高级一点，带一个光敏电阻，可以为超声波数据做一些补偿。",[25,11177,11178],{},"超声波传感器原理是什么呢？",[25,11180,11181],{},[57,11182],{"alt":59,"src":11183},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1682.webp",[94,11185,11187],{"className":96,"code":11186,"language":98,"meta":59,"style":59},"距离=(发送时间-接收时间)*速度\u002F2Copy to clipboardErrorCopied\n",[100,11188,11189],{"__ignoreMap":59},[103,11190,11191,11194,11196,11199,11202,11204,11207],{"class":105,"line":106},[103,11192,11193],{"class":109},"距离",[103,11195,563],{"class":113},[103,11197,11198],{"class":170},"(",[103,11200,11201],{"class":113},"发送时间-接收时间",[103,11203,23],{"class":170},[103,11205,11206],{"class":166},"*",[103,11208,11209],{"class":170},"速度\u002F2Copy to clipboardErrorCopied\n",[25,11211,11212],{},"看了超声波的原理，你有没有发现和前面的激光雷达传感器是一样的，是的，所以超声波传感器插件和激光雷达传感器插件在Gazebo插件中是同一个：",[94,11214,11216],{"className":96,"code":11215,"language":98,"meta":59,"style":59},"libgazebo_ros_ray_sensor.so\n",[100,11217,11218],{"__ignoreMap":59},[103,11219,11220],{"class":105,"line":106},[103,11221,11215],{"class":109},[25,11223,11224],{},"超声波总要装在机器人身上某个位置，所以我们先添加一个关节和Joint，为了省事，link我们就只写个名字，你如果有需要可以按照前面的章节那样添加一下。",[94,11226,11228],{"className":1178,"code":11227,"language":1180,"meta":59,"style":59},"  \u003Clink name=\"ultrasonic_sensor_link\" \u002F>\n\n  \u003Cjoint name=\"ultrasonic_sensor_joint\" type=\"fixed\">\n    \u003Cparent link=\"base_link\"\u002F>\n    \u003Cchild link=\"ultrasonic_sensor_link\"\u002F>\n    \u003Corigin xyz=\"0.07 0.0 0.076\" rpy=\"0 0 0\"\u002F>\n  \u003C\u002Fjoint>\n",[100,11229,11230,11245,11249,11270,11284,11298,11319],{"__ignoreMap":59},[103,11231,11232,11234,11236,11238,11240,11243],{"class":105,"line":106},[103,11233,1229],{"class":170},[103,11235,1232],{"class":1190},[103,11237,1212],{"class":109},[103,11239,563],{"class":170},[103,11241,11242],{"class":113},"\"ultrasonic_sensor_link\"",[103,11244,2064],{"class":170},[103,11246,11247],{"class":105,"line":231},[103,11248,309],{"emptyLinePlaceholder":308},[103,11250,11251,11253,11255,11257,11259,11262,11264,11266,11268],{"class":105,"line":259},[103,11252,1229],{"class":170},[103,11254,1253],{"class":1190},[103,11256,1212],{"class":109},[103,11258,563],{"class":170},[103,11260,11261],{"class":113},"\"ultrasonic_sensor_joint\"",[103,11263,1114],{"class":109},[103,11265,563],{"class":170},[103,11267,1267],{"class":113},[103,11269,1220],{"class":170},[103,11271,11272,11274,11276,11278,11280,11282],{"class":105,"line":274},[103,11273,1274],{"class":170},[103,11275,1277],{"class":1190},[103,11277,1280],{"class":109},[103,11279,563],{"class":170},[103,11281,1300],{"class":113},[103,11283,1242],{"class":170},[103,11285,11286,11288,11290,11292,11294,11296],{"class":105,"line":286},[103,11287,1274],{"class":170},[103,11289,1293],{"class":1190},[103,11291,1280],{"class":109},[103,11293,563],{"class":170},[103,11295,11242],{"class":113},[103,11297,1242],{"class":170},[103,11299,11300,11302,11304,11306,11308,11311,11313,11315,11317],{"class":105,"line":305},[103,11301,1274],{"class":170},[103,11303,1309],{"class":1190},[103,11305,1312],{"class":109},[103,11307,563],{"class":170},[103,11309,11310],{"class":113},"\"0.07 0.0 0.076\"",[103,11312,1320],{"class":109},[103,11314,563],{"class":170},[103,11316,1325],{"class":113},[103,11318,1242],{"class":170},[103,11320,11321,11323,11325],{"class":105,"line":312},[103,11322,1332],{"class":170},[103,11324,1253],{"class":1190},[103,11326,1220],{"class":170},[25,11328,11329],{},"添加完了关节，我们就可以配置gazebo的插件了，gazebo插件配置如下",[94,11331,11333],{"className":1178,"code":11332,"language":1180,"meta":59,"style":59},"  \u003Cgazebo reference=\"ultrasonic_sensor_link\">\n    \u003Csensor type=\"ray\" name=\"ultrasonic_sensor\">\n      \u003Cpose>0 0 0 0 0 0\u003C\u002Fpose>\n\n      \u003Cvisualize>true\u003C\u002Fvisualize>\n\n      \u003Cupdate_rate>5\u003C\u002Fupdate_rate>\n      \u003Cray>\n        \u003Cscan>\n\n          \u003Chorizontal>\n            \u003Csamples>5\u003C\u002Fsamples>\n            \u003Cresolution>1\u003C\u002Fresolution>\n            \u003Cmin_angle>-0.12\u003C\u002Fmin_angle>\n            \u003Cmax_angle>0.12\u003C\u002Fmax_angle>\n          \u003C\u002Fhorizontal>\n\n          \u003Cvertical>\n            \u003Csamples>5\u003C\u002Fsamples>\n            \u003Cresolution>1\u003C\u002Fresolution>\n            \u003Cmin_angle>-0.01\u003C\u002Fmin_angle>\n            \u003Cmax_angle>0.01\u003C\u002Fmax_angle>\n          \u003C\u002Fvertical>\n        \u003C\u002Fscan>\n\n        \u003Crange>\n          \u003Cmin>0.02\u003C\u002Fmin>\n          \u003Cmax>4\u003C\u002Fmax>\n          \u003Cresolution>0.01\u003C\u002Fresolution>\n        \u003C\u002Frange>\n\n        \u003Cnoise>\n          \u003Ctype>gaussian\u003C\u002Ftype>\n          \u003Cmean>0.0\u003C\u002Fmean>\n          \u003Cstddev>0.01\u003C\u002Fstddev>\n        \u003C\u002Fnoise>\n      \u003C\u002Fray>\n      \u003Cplugin name=\"ultrasonic_sensor_controller\" filename=\"libgazebo_ros_ray_sensor.so\">\n        \u003Cros>\n\n          \u003Cremapping>~\u002Fout:=ultrasonic_sensor_1\u003C\u002Fremapping>\n        \u003C\u002Fros>\n\n        \u003Coutput_type>sensor_msgs\u002FRange\u003C\u002Foutput_type>\n\n        \u003Cradiation_type>ultrasound\u003C\u002Fradiation_type>\n\n        \u003Cframe_name>ultrasonic_sensor_link\u003C\u002Fframe_name>\n      \u003C\u002Fplugin>\n    \u003C\u002Fsensor>\n  \u003C\u002Fgazebo>\n\n",[100,11334,11335,11349,11370,11383,11387,11399,11403,11415,11423,11431,11435,11443,11455,11468,11481,11494,11502,11506,11515,11527,11539,11552,11564,11572,11580,11584,11592,11605,11618,11630,11638,11642,11650,11662,11674,11686,11694,11702,11723,11731,11735,11748,11756,11760,11773,11777,11791,11795,11808,11816,11824],{"__ignoreMap":59},[103,11336,11337,11339,11341,11343,11345,11347],{"class":105,"line":106},[103,11338,1229],{"class":170},[103,11340,136],{"class":1190},[103,11342,3773],{"class":109},[103,11344,563],{"class":170},[103,11346,11242],{"class":113},[103,11348,1220],{"class":170},[103,11350,11351,11353,11355,11357,11359,11361,11363,11365,11368],{"class":105,"line":231},[103,11352,1274],{"class":170},[103,11354,4403],{"class":1190},[103,11356,1114],{"class":109},[103,11358,563],{"class":170},[103,11360,5250],{"class":113},[103,11362,1212],{"class":109},[103,11364,563],{"class":170},[103,11366,11367],{"class":113},"\"ultrasonic_sensor\"",[103,11369,1220],{"class":170},[103,11371,11372,11374,11376,11379,11381],{"class":105,"line":259},[103,11373,1369],{"class":170},[103,11375,5300],{"class":1190},[103,11377,11378],{"class":170},">0 0 0 0 0 0\u003C\u002F",[103,11380,5300],{"class":1190},[103,11382,1220],{"class":170},[103,11384,11385],{"class":105,"line":274},[103,11386,309],{"emptyLinePlaceholder":308},[103,11388,11389,11391,11393,11395,11397],{"class":105,"line":286},[103,11390,1369],{"class":170},[103,11392,4546],{"class":1190},[103,11394,4141],{"class":170},[103,11396,4546],{"class":1190},[103,11398,1220],{"class":170},[103,11400,11401],{"class":105,"line":305},[103,11402,309],{"emptyLinePlaceholder":308},[103,11404,11405,11407,11409,11411,11413],{"class":105,"line":312},[103,11406,1369],{"class":170},[103,11408,4013],{"class":1190},[103,11410,5288],{"class":170},[103,11412,4013],{"class":1190},[103,11414,1220],{"class":170},[103,11416,11417,11419,11421],{"class":105,"line":327},[103,11418,1369],{"class":170},[103,11420,5315],{"class":1190},[103,11422,1220],{"class":170},[103,11424,11425,11427,11429],{"class":105,"line":348},[103,11426,1747],{"class":170},[103,11428,5325],{"class":1190},[103,11430,1220],{"class":170},[103,11432,11433],{"class":105,"line":359},[103,11434,309],{"emptyLinePlaceholder":308},[103,11436,11437,11439,11441],{"class":105,"line":368},[103,11438,1359],{"class":170},[103,11440,5335],{"class":1190},[103,11442,1220],{"class":170},[103,11444,11445,11447,11449,11451,11453],{"class":105,"line":383},[103,11446,2557],{"class":170},[103,11448,5345],{"class":1190},[103,11450,5288],{"class":170},[103,11452,5345],{"class":1190},[103,11454,1220],{"class":170},[103,11456,11457,11459,11461,11464,11466],{"class":105,"line":388},[103,11458,2557],{"class":170},[103,11460,5360],{"class":1190},[103,11462,11463],{"class":170},">1\u003C\u002F",[103,11465,5360],{"class":1190},[103,11467,1220],{"class":170},[103,11469,11470,11472,11474,11477,11479],{"class":105,"line":394},[103,11471,2557],{"class":170},[103,11473,5375],{"class":1190},[103,11475,11476],{"class":170},">-0.12\u003C\u002F",[103,11478,5375],{"class":1190},[103,11480,1220],{"class":170},[103,11482,11483,11485,11487,11490,11492],{"class":105,"line":399},[103,11484,2557],{"class":170},[103,11486,5390],{"class":1190},[103,11488,11489],{"class":170},">0.12\u003C\u002F",[103,11491,5390],{"class":1190},[103,11493,1220],{"class":170},[103,11495,11496,11498,11500],{"class":105,"line":405},[103,11497,2573],{"class":170},[103,11499,5335],{"class":1190},[103,11501,1220],{"class":170},[103,11503,11504],{"class":105,"line":410},[103,11505,309],{"emptyLinePlaceholder":308},[103,11507,11508,11510,11513],{"class":105,"line":416},[103,11509,1359],{"class":170},[103,11511,11512],{"class":1190},"vertical",[103,11514,1220],{"class":170},[103,11516,11517,11519,11521,11523,11525],{"class":105,"line":421},[103,11518,2557],{"class":170},[103,11520,5345],{"class":1190},[103,11522,5288],{"class":170},[103,11524,5345],{"class":1190},[103,11526,1220],{"class":170},[103,11528,11529,11531,11533,11535,11537],{"class":105,"line":427},[103,11530,2557],{"class":170},[103,11532,5360],{"class":1190},[103,11534,11463],{"class":170},[103,11536,5360],{"class":1190},[103,11538,1220],{"class":170},[103,11540,11541,11543,11545,11548,11550],{"class":105,"line":432},[103,11542,2557],{"class":170},[103,11544,5375],{"class":1190},[103,11546,11547],{"class":170},">-0.01\u003C\u002F",[103,11549,5375],{"class":1190},[103,11551,1220],{"class":170},[103,11553,11554,11556,11558,11560,11562],{"class":105,"line":438},[103,11555,2557],{"class":170},[103,11557,5390],{"class":1190},[103,11559,5525],{"class":170},[103,11561,5390],{"class":1190},[103,11563,1220],{"class":170},[103,11565,11566,11568,11570],{"class":105,"line":443},[103,11567,2573],{"class":170},[103,11569,11512],{"class":1190},[103,11571,1220],{"class":170},[103,11573,11574,11576,11578],{"class":105,"line":449},[103,11575,2532],{"class":170},[103,11577,5325],{"class":1190},[103,11579,1220],{"class":170},[103,11581,11582],{"class":105,"line":454},[103,11583,309],{"emptyLinePlaceholder":308},[103,11585,11586,11588,11590],{"class":105,"line":460},[103,11587,1747],{"class":170},[103,11589,5423],{"class":1190},[103,11591,1220],{"class":170},[103,11593,11594,11596,11598,11601,11603],{"class":105,"line":465},[103,11595,1359],{"class":170},[103,11597,5433],{"class":1190},[103,11599,11600],{"class":170},">0.02\u003C\u002F",[103,11602,5433],{"class":1190},[103,11604,1220],{"class":170},[103,11606,11607,11609,11611,11614,11616],{"class":105,"line":471},[103,11608,1359],{"class":170},[103,11610,5448],{"class":1190},[103,11612,11613],{"class":170},">4\u003C\u002F",[103,11615,5448],{"class":1190},[103,11617,1220],{"class":170},[103,11619,11620,11622,11624,11626,11628],{"class":105,"line":476},[103,11621,1359],{"class":170},[103,11623,5360],{"class":1190},[103,11625,5525],{"class":170},[103,11627,5360],{"class":1190},[103,11629,1220],{"class":170},[103,11631,11632,11634,11636],{"class":105,"line":504},[103,11633,2532],{"class":170},[103,11635,5423],{"class":1190},[103,11637,1220],{"class":170},[103,11639,11640],{"class":105,"line":530},[103,11641,309],{"emptyLinePlaceholder":308},[103,11643,11644,11646,11648],{"class":105,"line":574},[103,11645,1747],{"class":170},[103,11647,4590],{"class":1190},[103,11649,1220],{"class":170},[103,11651,11652,11654,11656,11658,11660],{"class":105,"line":579},[103,11653,1359],{"class":170},[103,11655,5495],{"class":1190},[103,11657,5498],{"class":170},[103,11659,5495],{"class":1190},[103,11661,1220],{"class":170},[103,11663,11664,11666,11668,11670,11672],{"class":105,"line":590},[103,11665,1359],{"class":170},[103,11667,4607],{"class":1190},[103,11669,4610],{"class":170},[103,11671,4607],{"class":1190},[103,11673,1220],{"class":170},[103,11675,11676,11678,11680,11682,11684],{"class":105,"line":635},[103,11677,1359],{"class":170},[103,11679,4622],{"class":1190},[103,11681,5525],{"class":170},[103,11683,4622],{"class":1190},[103,11685,1220],{"class":170},[103,11687,11688,11690,11692],{"class":105,"line":665},[103,11689,2532],{"class":170},[103,11691,4590],{"class":1190},[103,11693,1220],{"class":170},[103,11695,11696,11698,11700],{"class":105,"line":677},[103,11697,1426],{"class":170},[103,11699,5315],{"class":1190},[103,11701,1220],{"class":170},[103,11703,11704,11706,11708,11710,11712,11715,11717,11719,11721],{"class":105,"line":799},[103,11705,1369],{"class":170},[103,11707,3925],{"class":1190},[103,11709,1212],{"class":109},[103,11711,563],{"class":170},[103,11713,11714],{"class":113},"\"ultrasonic_sensor_controller\"",[103,11716,3935],{"class":109},[103,11718,563],{"class":170},[103,11720,5573],{"class":113},[103,11722,1220],{"class":170},[103,11724,11725,11727,11729],{"class":105,"line":805},[103,11726,1747],{"class":170},[103,11728,3950],{"class":1190},[103,11730,1220],{"class":170},[103,11732,11733],{"class":105,"line":817},[103,11734,309],{"emptyLinePlaceholder":308},[103,11736,11737,11739,11741,11744,11746],{"class":105,"line":823},[103,11738,1359],{"class":170},[103,11740,3975],{"class":1190},[103,11742,11743],{"class":170},">~\u002Fout:=ultrasonic_sensor_1\u003C\u002F",[103,11745,3975],{"class":1190},[103,11747,1220],{"class":170},[103,11749,11750,11752,11754],{"class":105,"line":829},[103,11751,2532],{"class":170},[103,11753,3950],{"class":1190},[103,11755,1220],{"class":170},[103,11757,11758],{"class":105,"line":835},[103,11759,309],{"emptyLinePlaceholder":308},[103,11761,11762,11764,11766,11769,11771],{"class":105,"line":841},[103,11763,1747],{"class":170},[103,11765,5620],{"class":1190},[103,11767,11768],{"class":170},">sensor_msgs\u002FRange\u003C\u002F",[103,11770,5620],{"class":1190},[103,11772,1220],{"class":170},[103,11774,11775],{"class":105,"line":864},[103,11776,309],{"emptyLinePlaceholder":308},[103,11778,11779,11781,11784,11787,11789],{"class":105,"line":907},[103,11780,1747],{"class":170},[103,11782,11783],{"class":1190},"radiation_type",[103,11785,11786],{"class":170},">ultrasound\u003C\u002F",[103,11788,11783],{"class":1190},[103,11790,1220],{"class":170},[103,11792,11793],{"class":105,"line":944},[103,11794,309],{"emptyLinePlaceholder":308},[103,11796,11797,11799,11801,11804,11806],{"class":105,"line":949},[103,11798,1747],{"class":170},[103,11800,5635],{"class":1190},[103,11802,11803],{"class":170},">ultrasonic_sensor_link\u003C\u002F",[103,11805,5635],{"class":1190},[103,11807,1220],{"class":170},[103,11809,11810,11812,11814],{"class":105,"line":973},[103,11811,1426],{"class":170},[103,11813,3925],{"class":1190},[103,11815,1220],{"class":170},[103,11817,11818,11820,11822],{"class":105,"line":997},[103,11819,1478],{"class":170},[103,11821,4403],{"class":1190},[103,11823,1220],{"class":170},[103,11825,11826,11828,11830],{"class":105,"line":1876},[103,11827,1332],{"class":170},[103,11829,136],{"class":1190},[103,11831,1220],{"class":170},[25,11833,11834],{},"添加完成后就可以编译测试下代码",[94,11836,11837],{"className":6017,"code":6627,"language":6019,"meta":59,"style":59},[100,11838,11839,11851,11859],{"__ignoreMap":59},[103,11840,11841,11843,11845,11847,11849],{"class":105,"line":106},[103,11842,6634],{"class":170},[103,11844,6638],{"class":6637},[103,11846,6641],{"class":170},[103,11848,174],{"class":166},[103,11850,6646],{"class":170},[103,11852,11853,11855,11857],{"class":105,"line":231},[103,11854,6651],{"class":170},[103,11856,188],{"class":166},[103,11858,6656],{"class":170},[103,11860,11861],{"class":105,"line":259},[103,11862,6661],{"class":170},[25,11864,11865],{},"没有物体的前面可以放个东西",[25,11867,11868],{},[57,11869],{"alt":59,"src":11870},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1683.webp",[25,11872,11873],{},"打开终端，输入下面指令",[94,11875,11877],{"className":96,"code":11876,"language":98,"meta":59,"style":59},"ros2 topic list \nros2 topic info \u002Fultrasonic_sensor_1\nros2 topic echo \u002Fultrasonic_sensor_1Copy to clipboardErrorCopied\n",[100,11878,11879,11892,11904],{"__ignoreMap":59},[103,11880,11881,11883,11886,11889],{"class":105,"line":106},[103,11882,1045],{"class":109},[103,11884,11885],{"class":113}," topic",[103,11887,11888],{"class":113}," list",[103,11890,11891],{"class":170}," \n",[103,11893,11894,11896,11898,11901],{"class":105,"line":231},[103,11895,1045],{"class":109},[103,11897,11885],{"class":113},[103,11899,11900],{"class":113}," info",[103,11902,11903],{"class":113}," \u002Fultrasonic_sensor_1\n",[103,11905,11906,11908,11910,11913,11916,11918],{"class":105,"line":259},[103,11907,1045],{"class":109},[103,11909,11885],{"class":113},[103,11911,11912],{"class":113}," echo",[103,11914,11915],{"class":113}," \u002Fultrasonic_sensor_1Copy",[103,11917,756],{"class":113},[103,11919,11920],{"class":113}," clipboardErrorCopied\n",[25,11922,11923],{},"不出意外可以看到下面的数据",[94,11925,11927],{"className":96,"code":11926,"language":98,"meta":59,"style":59},"header:\n  stamp:\n    sec: 4458\n    nanosec: 1000000\n  frame_id: ultrasonic_sensor_link\nradiation_type: 0\nfield_of_view: 0.23999999463558197\nmin_range: 0.019999999552965164\nmax_range: 4.0\nrange: 2.6798219680786133\n",[100,11928,11929,11934,11939,11947,11955,11963,11971,11979,11987,11995],{"__ignoreMap":59},[103,11930,11931],{"class":105,"line":106},[103,11932,11933],{"class":109},"header:\n",[103,11935,11936],{"class":105,"line":231},[103,11937,11938],{"class":109},"  stamp:\n",[103,11940,11941,11944],{"class":105,"line":259},[103,11942,11943],{"class":109},"    sec:",[103,11945,11946],{"class":139}," 4458\n",[103,11948,11949,11952],{"class":105,"line":274},[103,11950,11951],{"class":109},"    nanosec:",[103,11953,11954],{"class":139}," 1000000\n",[103,11956,11957,11960],{"class":105,"line":286},[103,11958,11959],{"class":109},"  frame_id:",[103,11961,11962],{"class":113}," ultrasonic_sensor_link\n",[103,11964,11965,11968],{"class":105,"line":305},[103,11966,11967],{"class":109},"radiation_type:",[103,11969,11970],{"class":139}," 0\n",[103,11972,11973,11976],{"class":105,"line":312},[103,11974,11975],{"class":109},"field_of_view:",[103,11977,11978],{"class":139}," 0.23999999463558197\n",[103,11980,11981,11984],{"class":105,"line":327},[103,11982,11983],{"class":109},"min_range:",[103,11985,11986],{"class":139}," 0.019999999552965164\n",[103,11988,11989,11992],{"class":105,"line":348},[103,11990,11991],{"class":109},"max_range:",[103,11993,11994],{"class":139}," 4.0\n",[103,11996,11997,12000],{"class":105,"line":359},[103,11998,11999],{"class":109},"range:",[103,12001,12002],{"class":139}," 2.6798219680786133\n",[25,12004,12005],{},"这里的range就是fishbot到墙之间的距离：2.67982",[25,12007,12008,12009],{},"我们来讲一讲超声波传感器的数据类型",[100,12010,12011],{},"sensor_msgs\u002Fmsg\u002FRange",[94,12013,12015],{"className":6017,"code":12014,"language":6019,"meta":59,"style":59},"\n# ros2 topic info \u002Fultrasonic_sensor_1\nType: sensor_msgs\u002Fmsg\u002FRange\nPublisher count: 1\nSubscription count: 0\n\n",[100,12016,12017,12021,12026,12041,12049],{"__ignoreMap":59},[103,12018,12019],{"class":105,"line":106},[103,12020,309],{"emptyLinePlaceholder":308},[103,12022,12023],{"class":105,"line":231},[103,12024,12025],{"class":227},"# ros2 topic info \u002Fultrasonic_sensor_1\n",[103,12027,12028,12031,12033,12036,12038],{"class":105,"line":259},[103,12029,12030],{"class":170},"Type: sensor_msgs",[103,12032,188],{"class":166},[103,12034,12035],{"class":170},"msg",[103,12037,188],{"class":166},[103,12039,12040],{"class":170},"Range\n",[103,12042,12043,12046],{"class":105,"line":274},[103,12044,12045],{"class":170},"Publisher count: ",[103,12047,12048],{"class":139},"1\n",[103,12050,12051,12054],{"class":105,"line":286},[103,12052,12053],{"class":170},"Subscription count: ",[103,12055,12056],{"class":139},"0\n",[25,12058,12059,12060,12063],{},"你可以使用",[100,12061,12062],{},"ros2 interface show sensor_msgs\u002Fmsg\u002FRange","看到详细的解释，我们翻译一下",[94,12065,12067],{"className":6017,"code":12066,"language":6019,"meta":59,"style":59},"\n# Single range reading from an active ranger that emits energy and reports\n\n# one range reading that is valid along an arc at the distance measured.\n\n# This message is  not appropriate for laser scanners. See the LaserScan\n\n# message if you are working with a laser scanner.\n#\n\n# This message also can represent a fixed-distance (binary) ranger.  This\n\n# sensor will have min_range===max_range===distance of detection.\n\n# These sensors follow REP 117 and will output -Inf if the object is detected\n\n# and +Inf if the object is outside of the detection range.\n\nstd_msgs\u002FHeader header # timestamp in the header is the time the ranger\n\n                             # returned the distance reading\n\n# Radiation type enums\n\n# If you want a value added to this list, send an email to the ros-users list\nuint8 ULTRASOUND=0\nuint8 INFRARED=1\n\nuint8 radiation_type    # 传感器射线类型\n\n                        # (sound, IR, etc) [enum]\n\nfloat32 field_of_view   # 距离数据对应的弧[rad]的大小，测量物体的范围介于         \n\n                        # -field_of_view\u002F2 到 field_of_view\u002F2 之间。\n\n                        # 0 角度对应于传感器的 x 轴。\n\nfloat32 min_range       # 最小范围值 [m]\nfloat32 max_range       # 最大范围值 [m]\n\n                        #  固定距离需要 min_range==max_range\n\nfloat32 range           # 范围数据 [m]\n\n                        # (Note: values \u003C range_min or > range_max should be discarded)\n\n                        # Fixed distance rangers only output -Inf or +Inf.\n\n                        # -Inf represents a detection within fixed distance.\n\n                        # (Detection too close to the sensor to quantify)\n\n                        # +Inf represents no detection within the fixed distance.\n\n                        # (Object out of range)\n\n",[100,12068,12069,12073,12078,12082,12087,12091,12096,12100,12105,12110,12114,12119,12123,12128,12132,12137,12141,12146,12150,12163,12167,12172,12176,12181,12185,12190,12202,12213,12217,12225,12229,12234,12238,12246,12250,12255,12259,12264,12268,12276,12284,12288,12293,12297,12307,12311,12316,12320,12325,12329,12334,12338,12343,12347,12352,12356],{"__ignoreMap":59},[103,12070,12071],{"class":105,"line":106},[103,12072,309],{"emptyLinePlaceholder":308},[103,12074,12075],{"class":105,"line":231},[103,12076,12077],{"class":227},"# Single range reading from an active ranger that emits energy and reports\n",[103,12079,12080],{"class":105,"line":259},[103,12081,309],{"emptyLinePlaceholder":308},[103,12083,12084],{"class":105,"line":274},[103,12085,12086],{"class":227},"# one range reading that is valid along an arc at the distance measured.\n",[103,12088,12089],{"class":105,"line":286},[103,12090,309],{"emptyLinePlaceholder":308},[103,12092,12093],{"class":105,"line":305},[103,12094,12095],{"class":227},"# This message is  not appropriate for laser scanners. See the LaserScan\n",[103,12097,12098],{"class":105,"line":312},[103,12099,309],{"emptyLinePlaceholder":308},[103,12101,12102],{"class":105,"line":327},[103,12103,12104],{"class":227},"# message if you are working with a laser scanner.\n",[103,12106,12107],{"class":105,"line":348},[103,12108,12109],{"class":227},"#\n",[103,12111,12112],{"class":105,"line":359},[103,12113,309],{"emptyLinePlaceholder":308},[103,12115,12116],{"class":105,"line":368},[103,12117,12118],{"class":227},"# This message also can represent a fixed-distance (binary) ranger.  This\n",[103,12120,12121],{"class":105,"line":383},[103,12122,309],{"emptyLinePlaceholder":308},[103,12124,12125],{"class":105,"line":388},[103,12126,12127],{"class":227},"# sensor will have min_range===max_range===distance of detection.\n",[103,12129,12130],{"class":105,"line":394},[103,12131,309],{"emptyLinePlaceholder":308},[103,12133,12134],{"class":105,"line":399},[103,12135,12136],{"class":227},"# These sensors follow REP 117 and will output -Inf if the object is detected\n",[103,12138,12139],{"class":105,"line":405},[103,12140,309],{"emptyLinePlaceholder":308},[103,12142,12143],{"class":105,"line":410},[103,12144,12145],{"class":227},"# and +Inf if the object is outside of the detection range.\n",[103,12147,12148],{"class":105,"line":416},[103,12149,309],{"emptyLinePlaceholder":308},[103,12151,12152,12155,12157,12160],{"class":105,"line":421},[103,12153,12154],{"class":170},"std_msgs",[103,12156,188],{"class":166},[103,12158,12159],{"class":170},"Header header ",[103,12161,12162],{"class":227},"# timestamp in the header is the time the ranger\n",[103,12164,12165],{"class":105,"line":427},[103,12166,309],{"emptyLinePlaceholder":308},[103,12168,12169],{"class":105,"line":432},[103,12170,12171],{"class":227},"                             # returned the distance reading\n",[103,12173,12174],{"class":105,"line":438},[103,12175,309],{"emptyLinePlaceholder":308},[103,12177,12178],{"class":105,"line":443},[103,12179,12180],{"class":227},"# Radiation type enums\n",[103,12182,12183],{"class":105,"line":449},[103,12184,309],{"emptyLinePlaceholder":308},[103,12186,12187],{"class":105,"line":454},[103,12188,12189],{"class":227},"# If you want a value added to this list, send an email to the ros-users list\n",[103,12191,12192,12195,12198,12200],{"class":105,"line":460},[103,12193,12194],{"class":170},"uint8 ",[103,12196,12197],{"class":139},"ULTRASOUND",[103,12199,563],{"class":166},[103,12201,12056],{"class":139},[103,12203,12204,12206,12209,12211],{"class":105,"line":465},[103,12205,12194],{"class":170},[103,12207,12208],{"class":139},"INFRARED",[103,12210,563],{"class":166},[103,12212,12048],{"class":139},[103,12214,12215],{"class":105,"line":471},[103,12216,309],{"emptyLinePlaceholder":308},[103,12218,12219,12222],{"class":105,"line":476},[103,12220,12221],{"class":170},"uint8 radiation_type    ",[103,12223,12224],{"class":227},"# 传感器射线类型\n",[103,12226,12227],{"class":105,"line":504},[103,12228,309],{"emptyLinePlaceholder":308},[103,12230,12231],{"class":105,"line":530},[103,12232,12233],{"class":227},"                        # (sound, IR, etc) [enum]\n",[103,12235,12236],{"class":105,"line":574},[103,12237,309],{"emptyLinePlaceholder":308},[103,12239,12240,12243],{"class":105,"line":579},[103,12241,12242],{"class":170},"float32 field_of_view   ",[103,12244,12245],{"class":227},"# 距离数据对应的弧[rad]的大小，测量物体的范围介于         \n",[103,12247,12248],{"class":105,"line":590},[103,12249,309],{"emptyLinePlaceholder":308},[103,12251,12252],{"class":105,"line":635},[103,12253,12254],{"class":227},"                        # -field_of_view\u002F2 到 field_of_view\u002F2 之间。\n",[103,12256,12257],{"class":105,"line":665},[103,12258,309],{"emptyLinePlaceholder":308},[103,12260,12261],{"class":105,"line":677},[103,12262,12263],{"class":227},"                        # 0 角度对应于传感器的 x 轴。\n",[103,12265,12266],{"class":105,"line":799},[103,12267,309],{"emptyLinePlaceholder":308},[103,12269,12270,12273],{"class":105,"line":805},[103,12271,12272],{"class":170},"float32 min_range       ",[103,12274,12275],{"class":227},"# 最小范围值 [m]\n",[103,12277,12278,12281],{"class":105,"line":817},[103,12279,12280],{"class":170},"float32 max_range       ",[103,12282,12283],{"class":227},"# 最大范围值 [m]\n",[103,12285,12286],{"class":105,"line":823},[103,12287,309],{"emptyLinePlaceholder":308},[103,12289,12290],{"class":105,"line":829},[103,12291,12292],{"class":227},"                        #  固定距离需要 min_range==max_range\n",[103,12294,12295],{"class":105,"line":835},[103,12296,309],{"emptyLinePlaceholder":308},[103,12298,12299,12302,12304],{"class":105,"line":841},[103,12300,12301],{"class":170},"float32 ",[103,12303,5423],{"class":139},[103,12305,12306],{"class":227},"           # 范围数据 [m]\n",[103,12308,12309],{"class":105,"line":864},[103,12310,309],{"emptyLinePlaceholder":308},[103,12312,12313],{"class":105,"line":907},[103,12314,12315],{"class":227},"                        # (Note: values \u003C range_min or > range_max should be discarded)\n",[103,12317,12318],{"class":105,"line":944},[103,12319,309],{"emptyLinePlaceholder":308},[103,12321,12322],{"class":105,"line":949},[103,12323,12324],{"class":227},"                        # Fixed distance rangers only output -Inf or +Inf.\n",[103,12326,12327],{"class":105,"line":973},[103,12328,309],{"emptyLinePlaceholder":308},[103,12330,12331],{"class":105,"line":997},[103,12332,12333],{"class":227},"                        # -Inf represents a detection within fixed distance.\n",[103,12335,12336],{"class":105,"line":1876},[103,12337,309],{"emptyLinePlaceholder":308},[103,12339,12340],{"class":105,"line":1885},[103,12341,12342],{"class":227},"                        # (Detection too close to the sensor to quantify)\n",[103,12344,12345],{"class":105,"line":1900},[103,12346,309],{"emptyLinePlaceholder":308},[103,12348,12349],{"class":105,"line":1915},[103,12350,12351],{"class":227},"                        # +Inf represents no detection within the fixed distance.\n",[103,12353,12354],{"class":105,"line":1924},[103,12355,309],{"emptyLinePlaceholder":308},[103,12357,12358],{"class":105,"line":1933},[103,12359,12360],{"class":227},"                        # (Object out of range)\n",[25,12362,12363],{},"结论，主要关注range就可以了。",[25,12365,12366],{},"在rviz2里添加超声波数据",[25,12368,12369],{},"Add ->By topic->Range",[25,12371,12372],{},[57,12373],{"alt":59,"src":12374},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1684.webp",[25,12376,12377],{},[57,12378],{"alt":59,"src":12379},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1685.webp",[86,12381,12382],{"id":12382},"搭建世界地图",[25,12384,12385],{},"本节我们要在Gazebo中建立一个测试的环境，其实也很简单，利用Gazebo的画墙工具即可完成。",[25,12387,12388],{},"world即世界，gazebo的world文件就是用于描述世界模型的，也就是环境模型。",[25,12390,12391],{},"Gazebo已经为我们准备了很多常用的物体模型，除了基础的圆球，圆柱，立方体外的，其实还有飞机、汽车、房子等你现实中无法拥有的。",[25,12393,12394],{},"但是一开始安装Gazebo的时候并不会帮你下载好这些模型，需要我们手动下载，找一个你要存模型的文件夹，打开终端，复制粘贴下面这句",[94,12396,12398],{"className":6017,"code":12397,"language":6019,"meta":59,"style":59},"git clone https:\u002F\u002Fgithub.com\u002Fosrf\u002Fgazebo_models\n",[100,12399,12400],{"__ignoreMap":59},[103,12401,12402,12405,12407,12410,12412,12415,12417],{"class":105,"line":106},[103,12403,12404],{"class":170},"git clone https:",[103,12406,294],{"class":166},[103,12408,12409],{"class":170},"github.com",[103,12411,188],{"class":166},[103,12413,12414],{"class":170},"osrf",[103,12416,188],{"class":166},[103,12418,12419],{"class":170},"gazebo_models\n",[25,12421,12422],{},"并把存放模型的路径加到~\u002F.bashrc里（第二个冒号后面的可以不写，第二个冒号后面的是多个路径。）",[25,12424,12425],{},"GAZEBO_MODEL_PATH是老版Gazebo Classic的宏。",[25,12427,12428],{},"IGN_GAZEBO_RESOURCE_PATH是新版Igntion Gazebo的宏。",[25,12430,12431],{},"模型都通用，可以一起配置上。",[25,12433,12434],{},[57,12435],{"alt":59,"src":12436},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1686.webp",[25,12438,12439],{},"刷新环境变量",[94,12441,12443],{"className":6017,"code":12442,"language":6019,"meta":59,"style":59},"source ~\u002F.bashrc\n",[100,12444,12445],{"__ignoreMap":59},[103,12446,12447,12450,12453],{"class":105,"line":106},[103,12448,12449],{"class":170},"source ",[103,12451,12452],{"class":166},"~\u002F",[103,12454,12455],{"class":170},".bashrc\n",[25,12457,12458,12459,12461],{},"此时再次打开终端，输入",[100,12460,136],{},"，把选项卡切换到Insert",[25,12463,12464],{},[57,12465],{"alt":59,"src":12466},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1687.webp",[25,12468,12469],{},"在Insert选项卡下可以看到一个目录，以及目录下的模型名称，随着下载脚本的不断下载，这里的模型会越来越多。",[25,12471,12472],{},"随手拖几个，搭建一个漂亮的环境出来~",[25,12474,12475],{},"每个成功的男人都有一辆车，咱们也不例外",[25,12477,12478],{},[57,12479],{"alt":59,"src":12480},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1688.webp",[25,12482,12483],{},"上面是Gazebo为我们准备好的开源模型，我们也可以通过Gazebo的工具来自己画一个环境。",[25,12485,12486],{},"然后也可以用墙壁工具建墙",[25,12488,12489],{},"Gazebo左上角->Edit->Building Editor",[25,12491,12492],{},"接着可以看到这样一个编辑界面",[25,12494,12495],{},[57,12496],{"alt":59,"src":12497},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1689.webp",[25,12499,12500],{},"点击左边的Wall,你就可以在上方的白色区域进行建墙了，这个和模拟人生游戏不一样，这个是画二维的墙生成三维的墙，模拟人生是直接在三维里画。",[25,12502,12503],{},[57,12504],{"alt":59,"src":12505},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1690.webp",[25,12507,12508],{},"建完后还可以用选Add Color或者Add Texture，然后点击下方墙，给墙添加颜色或者纹理。",[25,12510,12511],{},"首先你要有一个地图，小鱼为你准备了两个，两个图片都是800*600像素的。",[25,12513,12514],{},[57,12515],{"alt":59,"src":12516},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1691.webp",[25,12518,12519],{},[57,12520],{"alt":59,"src":12521},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1692.webp",[25,12523,12524],{},"打开Gazebo->Gazebo左上角->Edit->Building Editor->左下方选Import",[25,12526,12527],{},[57,12528],{"alt":59,"src":12529},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1693.webp",[25,12531,12532],{},"将上面两个图片存到本地，在这个界面选图片，记着选Next",[25,12534,12535],{},[57,12536],{"alt":59,"src":12537},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1694.webp",[25,12539,12540],{},"左边选尺寸对应关系",[25,12542,12543],{},[57,12544],{"alt":59,"src":12545},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1695.webp",[25,12547,12548],{},"我们选择默认的，100像素\u002F米。点击OK（需要手动将100改变一下才能点击OK哦），之后就可以用图片画墙了。",[25,12550,12551],{},"注意：导入完图片不会直接出来墙，图片只是提供了墙的大概位置，需要你手动用墙再将边描一遍。",[25,12553,12554],{},[57,12555],{"alt":59,"src":12556},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1696.webp",[25,12558,12559],{},"建完后点击File->Exit,在退出的弹框中选Exit。",[25,12561,12562],{},"接着在Gazebo界面中就可以看到墙了，我们再手动添加几个物体，就可以用于下面的导航使用了。",[25,12564,12565],{},[57,12566],{"alt":59,"src":12567},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1697.webp",[25,12569,12570],{},"添加完，接着点击File->SaveWorld，将文件保存到我们的fishbot_descrption的world下。",[25,12572,12573],{},"没有world目录的小伙伴可以先手动创建下",[25,12575,12576],{},[57,12577],{"alt":59,"src":12578},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1698.webp",[25,12580,12581],{},"加载world其实也很简单，可以先启动Gazebo，再手动的加载文件，也可以在Gazebo启动时加载：",[25,12583,12584],{},"比如在前面加载ROS2插件基础上再加载fishbot.world。",[94,12586,12588],{"className":6017,"code":12587,"language":6019,"meta":59,"style":59},"gazebo --verbose  -s libgazebo_ros_init.so -s  libgazebo_ros_factory.so 你的world文件目录\u002Ffishbot.world\n",[100,12589,12590],{"__ignoreMap":59},[103,12591,12592,12595,12597,12600,12602,12605,12607,12610,12612],{"class":105,"line":106},[103,12593,12594],{"class":170},"gazebo ",[103,12596,6638],{"class":6637},[103,12598,12599],{"class":170},"verbose  ",[103,12601,174],{"class":166},[103,12603,12604],{"class":170},"s libgazebo_ros_init.so ",[103,12606,174],{"class":166},[103,12608,12609],{"class":170},"s  libgazebo_ros_factory.so 你的world文件目录",[103,12611,188],{"class":166},[103,12613,12614],{"class":170},"fishbot.world\n",[25,12616,12617,12618,12620],{},"修改launch文件，将上面的命令行写到",[100,12619,6004],{},"中即可。",[94,12622,12624],{"className":6017,"code":12623,"language":6019,"meta":59,"style":59},"    gazebo_world_path = os.path.join(pkg_share, 'world\u002Ffishbot.world')\n\n    # Start Gazebo server\n    start_gazebo_cmd =  ExecuteProcess(\n        cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so', gazebo_world_path],\n        output='screen')\n\n",[100,12625,12626,12640,12644,12648,12657,12689],{"__ignoreMap":59},[103,12627,12628,12631,12633,12635,12638],{"class":105,"line":106},[103,12629,12630],{"class":170},"    gazebo_world_path ",[103,12632,563],{"class":166},[103,12634,6465],{"class":170},[103,12636,12637],{"class":113},"'world\u002Ffishbot.world'",[103,12639,5981],{"class":170},[103,12641,12642],{"class":105,"line":231},[103,12643,309],{"emptyLinePlaceholder":308},[103,12645,12646],{"class":105,"line":259},[103,12647,6491],{"class":227},[103,12649,12650,12652,12654],{"class":105,"line":274},[103,12651,6496],{"class":170},[103,12653,563],{"class":166},[103,12655,12656],{"class":170},"  ExecuteProcess(\n",[103,12658,12659,12661,12663,12665,12667,12669,12671,12673,12675,12677,12679,12681,12683,12685,12687],{"class":105,"line":286},[103,12660,6032],{"class":6031},[103,12662,563],{"class":166},[103,12664,6037],{"class":170},[103,12666,6040],{"class":113},[103,12668,6043],{"class":170},[103,12670,6046],{"class":113},[103,12672,6049],{"class":170},[103,12674,6052],{"class":113},[103,12676,6043],{"class":170},[103,12678,6057],{"class":113},[103,12680,6043],{"class":170},[103,12682,6052],{"class":113},[103,12684,6043],{"class":170},[103,12686,6066],{"class":113},[103,12688,6069],{"class":170},[103,12690,12691,12693,12695,12697],{"class":105,"line":305},[103,12692,6074],{"class":6031},[103,12694,563],{"class":166},[103,12696,6079],{"class":113},[103,12698,5981],{"class":170},[25,12700,12701],{},"下面是整个launch文件：",[94,12703,12705],{"className":6017,"code":12704,"language":6019,"meta":59,"style":59},"from launch import LaunchDescription\nfrom launch_ros.actions import Node\n\n# 封装终端指令相关类\nfrom launch.actions import ExecuteProcess\n\n# from launch.substitutions import FindExecutable\n\n# 参数声明与获取\n\n# from launch.actions import DeclareLaunchArgument\n\n# from launch.substitutions import LaunchConfiguration\n\n# 文件包含相关\n\n# from launch.actions import IncludeLaunchDescription\n\n# from launch.launch_description_sources import PythonLaunchDescriptionSource\n\n# 分组相关\n\n# from launch_ros.actions import PushRosNamespace\n\n# from launch.actions import GroupAction\n\n# 事件相关\n\n# from launch.event_handlers import OnProcessStart,OnProcessExit\n\n# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n\n# 获取功能包下share目录或路径\nfrom ament_index_python.packages import get_package_share_directory\nimport os\n\ndef generate_launch_description():\n    robot_name_in_model = 'fishbot'\n    package_name = 'fishbot_description'\n    urdf_name = \"fishbot_gazebo.urdf\"\n    world_name = \"fishbot.world\"\n\n    pkg_share = get_package_share_directory(f\"{package_name}\")\n    urdf_model_path = os.path.join(pkg_share, f'urdf\u002Furdf\u002F{urdf_name}')\n    gazebo_world_path = os.path.join(pkg_share, f'world\u002F{world_name}')\n    default_rviz_config_path = os.path.join(pkg_share, 'rviz\u002Frviz2.rviz')\n\n    # Start Gazebo server\n    start_gazebo_cmd = ExecuteProcess(\n        cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so',gazebo_world_path],\n        output='screen')\n\n    # Launch the robot\n    spawn_entity_cmd = Node(\n        package='gazebo_ros', \n        executable='spawn_entity.py',\n        arguments=['-entity', robot_name_in_model,  '-file', urdf_model_path ], output='screen')\n\n    # Start Robot State publisher\n    start_robot_state_publisher_cmd = Node(\n        package='robot_state_publisher',\n        executable='robot_state_publisher',\n        arguments=[urdf_model_path]\n    )\n\n    # Launch RViz\n    start_rviz_cmd = Node(\n        package='rviz2',\n        executable='rviz2',\n        name='rviz2',\n        output='screen',\n        arguments=['-d', default_rviz_config_path]\n        )\n\n    return LaunchDescription([start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[100,12706,12707,12717,12727,12731,12735,12745,12749,12753,12757,12761,12765,12769,12773,12777,12781,12785,12789,12793,12797,12801,12805,12809,12813,12817,12821,12825,12829,12833,12837,12841,12845,12849,12853,12857,12867,12873,12877,12885,12893,12901,12909,12919,12923,12945,12967,12991,13003,13007,13011,13019,13052,13062,13066,13070,13078,13088,13098,13122,13126,13130,13138,13148,13158,13166,13170,13174,13178,13186,13196,13206,13216,13226,13238,13242,13246],{"__ignoreMap":59},[103,12708,12709,12711,12713,12715],{"class":105,"line":106},[103,12710,933],{"class":166},[103,12712,6193],{"class":170},[103,12714,6196],{"class":166},[103,12716,6199],{"class":170},[103,12718,12719,12721,12723,12725],{"class":105,"line":231},[103,12720,933],{"class":166},[103,12722,6206],{"class":170},[103,12724,6196],{"class":166},[103,12726,6211],{"class":170},[103,12728,12729],{"class":105,"line":259},[103,12730,309],{"emptyLinePlaceholder":308},[103,12732,12733],{"class":105,"line":274},[103,12734,6220],{"class":227},[103,12736,12737,12739,12741,12743],{"class":105,"line":286},[103,12738,933],{"class":166},[103,12740,6227],{"class":170},[103,12742,6196],{"class":166},[103,12744,6232],{"class":170},[103,12746,12747],{"class":105,"line":305},[103,12748,309],{"emptyLinePlaceholder":308},[103,12750,12751],{"class":105,"line":312},[103,12752,6241],{"class":227},[103,12754,12755],{"class":105,"line":327},[103,12756,309],{"emptyLinePlaceholder":308},[103,12758,12759],{"class":105,"line":348},[103,12760,6250],{"class":227},[103,12762,12763],{"class":105,"line":359},[103,12764,309],{"emptyLinePlaceholder":308},[103,12766,12767],{"class":105,"line":368},[103,12768,6259],{"class":227},[103,12770,12771],{"class":105,"line":383},[103,12772,309],{"emptyLinePlaceholder":308},[103,12774,12775],{"class":105,"line":388},[103,12776,6268],{"class":227},[103,12778,12779],{"class":105,"line":394},[103,12780,309],{"emptyLinePlaceholder":308},[103,12782,12783],{"class":105,"line":399},[103,12784,6277],{"class":227},[103,12786,12787],{"class":105,"line":405},[103,12788,309],{"emptyLinePlaceholder":308},[103,12790,12791],{"class":105,"line":410},[103,12792,6286],{"class":227},[103,12794,12795],{"class":105,"line":416},[103,12796,309],{"emptyLinePlaceholder":308},[103,12798,12799],{"class":105,"line":421},[103,12800,6295],{"class":227},[103,12802,12803],{"class":105,"line":427},[103,12804,309],{"emptyLinePlaceholder":308},[103,12806,12807],{"class":105,"line":432},[103,12808,6304],{"class":227},[103,12810,12811],{"class":105,"line":438},[103,12812,309],{"emptyLinePlaceholder":308},[103,12814,12815],{"class":105,"line":443},[103,12816,6313],{"class":227},[103,12818,12819],{"class":105,"line":449},[103,12820,309],{"emptyLinePlaceholder":308},[103,12822,12823],{"class":105,"line":454},[103,12824,6322],{"class":227},[103,12826,12827],{"class":105,"line":460},[103,12828,309],{"emptyLinePlaceholder":308},[103,12830,12831],{"class":105,"line":465},[103,12832,6331],{"class":227},[103,12834,12835],{"class":105,"line":471},[103,12836,309],{"emptyLinePlaceholder":308},[103,12838,12839],{"class":105,"line":476},[103,12840,6340],{"class":227},[103,12842,12843],{"class":105,"line":504},[103,12844,309],{"emptyLinePlaceholder":308},[103,12846,12847],{"class":105,"line":530},[103,12848,6349],{"class":227},[103,12850,12851],{"class":105,"line":574},[103,12852,309],{"emptyLinePlaceholder":308},[103,12854,12855],{"class":105,"line":579},[103,12856,6358],{"class":227},[103,12858,12859,12861,12863,12865],{"class":105,"line":590},[103,12860,933],{"class":166},[103,12862,6365],{"class":170},[103,12864,6196],{"class":166},[103,12866,6370],{"class":170},[103,12868,12869,12871],{"class":105,"line":635},[103,12870,6196],{"class":166},[103,12872,6377],{"class":170},[103,12874,12875],{"class":105,"line":665},[103,12876,309],{"emptyLinePlaceholder":308},[103,12878,12879,12881,12883],{"class":105,"line":677},[103,12880,6386],{"class":166},[103,12882,6389],{"class":109},[103,12884,6392],{"class":170},[103,12886,12887,12889,12891],{"class":105,"line":799},[103,12888,6397],{"class":170},[103,12890,563],{"class":166},[103,12892,6402],{"class":113},[103,12894,12895,12897,12899],{"class":105,"line":805},[103,12896,6407],{"class":170},[103,12898,563],{"class":166},[103,12900,6412],{"class":113},[103,12902,12903,12905,12907],{"class":105,"line":817},[103,12904,6417],{"class":170},[103,12906,563],{"class":166},[103,12908,6422],{"class":113},[103,12910,12911,12914,12916],{"class":105,"line":823},[103,12912,12913],{"class":170},"    world_name ",[103,12915,563],{"class":166},[103,12917,12918],{"class":113}," \"fishbot.world\"\n",[103,12920,12921],{"class":105,"line":829},[103,12922,309],{"emptyLinePlaceholder":308},[103,12924,12925,12927,12929,12931,12933,12935,12937,12939,12941,12943],{"class":105,"line":835},[103,12926,6431],{"class":170},[103,12928,563],{"class":166},[103,12930,6436],{"class":170},[103,12932,6439],{"class":166},[103,12934,6442],{"class":113},[103,12936,6445],{"class":139},[103,12938,6448],{"class":170},[103,12940,6451],{"class":139},[103,12942,6442],{"class":113},[103,12944,5981],{"class":170},[103,12946,12947,12949,12951,12953,12955,12957,12959,12961,12963,12965],{"class":105,"line":841},[103,12948,6460],{"class":170},[103,12950,563],{"class":166},[103,12952,6465],{"class":170},[103,12954,6439],{"class":166},[103,12956,6470],{"class":113},[103,12958,6445],{"class":139},[103,12960,6475],{"class":170},[103,12962,6451],{"class":139},[103,12964,6480],{"class":113},[103,12966,5981],{"class":170},[103,12968,12969,12971,12973,12975,12977,12980,12982,12985,12987,12989],{"class":105,"line":864},[103,12970,12630],{"class":170},[103,12972,563],{"class":166},[103,12974,6465],{"class":170},[103,12976,6439],{"class":166},[103,12978,12979],{"class":113},"'world\u002F",[103,12981,6445],{"class":139},[103,12983,12984],{"class":170},"world_name",[103,12986,6451],{"class":139},[103,12988,6480],{"class":113},[103,12990,5981],{"class":170},[103,12992,12993,12995,12997,12999,13001],{"class":105,"line":907},[103,12994,8594],{"class":170},[103,12996,563],{"class":166},[103,12998,6465],{"class":170},[103,13000,8601],{"class":113},[103,13002,5981],{"class":170},[103,13004,13005],{"class":105,"line":944},[103,13006,309],{"emptyLinePlaceholder":308},[103,13008,13009],{"class":105,"line":949},[103,13010,6491],{"class":227},[103,13012,13013,13015,13017],{"class":105,"line":973},[103,13014,6496],{"class":170},[103,13016,563],{"class":166},[103,13018,6501],{"class":170},[103,13020,13021,13023,13025,13027,13029,13031,13033,13035,13037,13039,13041,13043,13045,13047,13049],{"class":105,"line":997},[103,13022,6032],{"class":6031},[103,13024,563],{"class":166},[103,13026,6037],{"class":170},[103,13028,6040],{"class":113},[103,13030,6043],{"class":170},[103,13032,6046],{"class":113},[103,13034,6049],{"class":170},[103,13036,6052],{"class":113},[103,13038,6043],{"class":170},[103,13040,6057],{"class":113},[103,13042,6043],{"class":170},[103,13044,6052],{"class":113},[103,13046,6043],{"class":170},[103,13048,6066],{"class":113},[103,13050,13051],{"class":170},",gazebo_world_path],\n",[103,13053,13054,13056,13058,13060],{"class":105,"line":1876},[103,13055,6074],{"class":6031},[103,13057,563],{"class":166},[103,13059,6079],{"class":113},[103,13061,5981],{"class":170},[103,13063,13064],{"class":105,"line":1885},[103,13065,309],{"emptyLinePlaceholder":308},[103,13067,13068],{"class":105,"line":1900},[103,13069,6553],{"class":227},[103,13071,13072,13074,13076],{"class":105,"line":1915},[103,13073,6558],{"class":170},[103,13075,563],{"class":166},[103,13077,6108],{"class":170},[103,13079,13080,13082,13084,13086],{"class":105,"line":1924},[103,13081,6567],{"class":6031},[103,13083,563],{"class":166},[103,13085,6118],{"class":113},[103,13087,6121],{"class":170},[103,13089,13090,13092,13094,13096],{"class":105,"line":1933},[103,13091,6578],{"class":6031},[103,13093,563],{"class":166},[103,13095,6131],{"class":113},[103,13097,6134],{"class":170},[103,13099,13100,13102,13104,13106,13108,13110,13112,13114,13116,13118,13120],{"class":105,"line":1942},[103,13101,6589],{"class":6031},[103,13103,563],{"class":166},[103,13105,6037],{"class":170},[103,13107,6146],{"class":113},[103,13109,6149],{"class":170},[103,13111,6152],{"class":113},[103,13113,6155],{"class":170},[103,13115,6158],{"class":6031},[103,13117,563],{"class":166},[103,13119,6079],{"class":113},[103,13121,5981],{"class":170},[103,13123,13124],{"class":105,"line":1958},[103,13125,309],{"emptyLinePlaceholder":308},[103,13127,13128],{"class":105,"line":2006},[103,13129,8415],{"class":227},[103,13131,13132,13134,13136],{"class":105,"line":2015},[103,13133,8420],{"class":170},[103,13135,563],{"class":166},[103,13137,6108],{"class":170},[103,13139,13140,13142,13144,13146],{"class":105,"line":2024},[103,13141,6567],{"class":6031},[103,13143,563],{"class":166},[103,13145,8433],{"class":113},[103,13147,6134],{"class":170},[103,13149,13150,13152,13154,13156],{"class":105,"line":2029},[103,13151,6578],{"class":6031},[103,13153,563],{"class":166},[103,13155,8433],{"class":113},[103,13157,6134],{"class":170},[103,13159,13160,13162,13164],{"class":105,"line":2051},[103,13161,6589],{"class":6031},[103,13163,563],{"class":166},[103,13165,8454],{"class":170},[103,13167,13168],{"class":105,"line":2067},[103,13169,8459],{"class":170},[103,13171,13172],{"class":105,"line":2082},[103,13173,309],{"emptyLinePlaceholder":308},[103,13175,13176],{"class":105,"line":2098},[103,13177,8468],{"class":227},[103,13179,13180,13182,13184],{"class":105,"line":2107},[103,13181,8473],{"class":170},[103,13183,563],{"class":166},[103,13185,6108],{"class":170},[103,13187,13188,13190,13192,13194],{"class":105,"line":2112},[103,13189,6567],{"class":6031},[103,13191,563],{"class":166},[103,13193,8486],{"class":113},[103,13195,6134],{"class":170},[103,13197,13198,13200,13202,13204],{"class":105,"line":2128},[103,13199,6578],{"class":6031},[103,13201,563],{"class":166},[103,13203,8486],{"class":113},[103,13205,6134],{"class":170},[103,13207,13208,13210,13212,13214],{"class":105,"line":2137},[103,13209,8503],{"class":6031},[103,13211,563],{"class":166},[103,13213,8486],{"class":113},[103,13215,6134],{"class":170},[103,13217,13218,13220,13222,13224],{"class":105,"line":2158},[103,13219,6074],{"class":6031},[103,13221,563],{"class":166},[103,13223,6079],{"class":113},[103,13225,6134],{"class":170},[103,13227,13228,13230,13232,13234,13236],{"class":105,"line":2167},[103,13229,6589],{"class":6031},[103,13231,563],{"class":166},[103,13233,6037],{"class":170},[103,13235,8670],{"class":113},[103,13237,8673],{"class":170},[103,13239,13240],{"class":105,"line":2186},[103,13241,8533],{"class":170},[103,13243,13244],{"class":105,"line":2195},[103,13245,309],{"emptyLinePlaceholder":308},[103,13247,13248,13250],{"class":105,"line":2204},[103,13249,6618],{"class":166},[103,13251,8544],{"class":170},[25,13253,13254],{},"最后记得修改cmakelists.txt文件，让编译后将world文件拷贝到install目录下",[25,13256,13257],{},[57,13258],{"alt":59,"src":13259},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1699.webp",[94,13261,13263],{"className":6017,"code":13262,"language":6019,"meta":59,"style":59},"colcon build\nsource install\u002Fsetup.bash\nros2 launch fishbot_description gazebo.launch.py \n",[100,13264,13265,13269,13277],{"__ignoreMap":59},[103,13266,13267],{"class":105,"line":106},[103,13268,7802],{"class":170},[103,13270,13271,13273,13275],{"class":105,"line":231},[103,13272,6651],{"class":170},[103,13274,188],{"class":166},[103,13276,6656],{"class":170},[103,13278,13279],{"class":105,"line":259},[103,13280,6661],{"class":170},[25,13282,13283],{},[57,13284],{"alt":59,"src":13285},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1700.webp",[25,13287,13288],{},[57,13289],{"alt":59,"src":13290},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1701.webp",[86,13292,13293],{"id":13293},"框架优化",[25,13295,13296,13297],{},"本节代码学长也发到仓库了，有需要的学弟学妹请看:",[17,13298,13299],{"href":13299,"rel":13300},"https:\u002F\u002Fgithub.com\u002Ftungchiahui\u002FROS_WS\u002Ftree\u002Fmain\u002FROS2_WS%2F6.ws_simulations%2Fsrc%2Ffishbot_description",[21],[25,13302,13303],{},"比如说支持xacro等优化。",[25,13305,13306],{},"首先先把原来的fishbot_gazebo.urdf里的内容分成好几个urdf和xacro再用一个总的fishbot.urdf.xacro去引用。（学过xacro的肯定都会）",[25,13308,13309],{},[57,13310],{"alt":59,"src":13311},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1702.webp",[25,13313,13314],{},"优化后的launch如下：",[94,13316,13318],{"className":6017,"code":13317,"language":6019,"meta":59,"style":59},"from launch import LaunchDescription\nfrom launch_ros.actions import Node\n\n# 封装终端指令相关类\nfrom launch.actions import ExecuteProcess\n\n# from launch.substitutions import FindExecutable\n\n# 参数声明与获取\nfrom launch.actions import DeclareLaunchArgument\nfrom launch.substitutions import LaunchConfiguration\n\n# 文件包含相关\n\n# from launch.actions import IncludeLaunchDescription\n\n# from launch.launch_description_sources import PythonLaunchDescriptionSource\n\n# 分组相关\n\n# from launch_ros.actions import PushRosNamespace\n\n# from launch.actions import GroupAction\n\n# 事件相关\n\n# from launch.event_handlers import OnProcessStart,OnProcessExit\n\n# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n\n# 获取功能包下share目录或路径\nfrom ament_index_python.packages import get_package_share_directory\nfrom launch_ros.parameter_descriptions import ParameterValue\nfrom launch.substitutions import Command,LaunchConfiguration\nimport os\n\ndef generate_launch_description():\n    robot_name_in_model = 'fishbot'\n    package_name = 'fishbot_description'\n\n    # urdf_xacro_name = \"fishbot_gazebo.urdf\"\n    world_name = \"fishbot.world\"\n\n    pkg_share = get_package_share_directory(f\"{package_name}\")\n    urdf_xacro_model_path = os.path.join(pkg_share, \"urdf\u002Fxacro\",\"fishbot.urdf.xacro\")\n    gazebo_world_path = os.path.join(pkg_share, f'world\u002F{world_name}')\n    default_rviz_config_path = os.path.join(pkg_share, 'rviz\u002Frviz2.rviz')\n\n    model = DeclareLaunchArgument(name=\"model\", default_value=urdf_xacro_model_path)\n    robot_description = ParameterValue(Command([\"xacro \",LaunchConfiguration(\"model\")]))\n\n    # Start Gazebo server\n    start_gazebo_cmd = ExecuteProcess(\n        cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so',gazebo_world_path],\n        output='screen')\n\n    # Launch the robot\n    spawn_entity_cmd = Node(\n        package='gazebo_ros', \n        executable='spawn_entity.py',\n        arguments=['-entity', robot_name_in_model,  '-topic', '\u002Frobot_description' ], output='screen')\n\n    # Start Robot State publisher\n    start_robot_state_publisher_cmd = Node(\n        package='robot_state_publisher',\n        executable='robot_state_publisher',\n        parameters=[{\"robot_description\": robot_description}]\n    )\n\n    # Launch RViz\n    start_rviz_cmd = Node(\n        package='rviz2',\n        executable='rviz2',\n        name='rviz2',\n        output='screen',\n        arguments=['-d', default_rviz_config_path]\n        )\n\n    return LaunchDescription([model,start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[100,13319,13320,13330,13340,13344,13348,13358,13362,13366,13370,13374,13385,13397,13401,13405,13409,13413,13417,13421,13425,13429,13433,13437,13441,13445,13449,13453,13457,13461,13465,13469,13473,13477,13487,13499,13510,13516,13520,13528,13536,13544,13548,13553,13561,13565,13587,13606,13628,13640,13644,13672,13693,13697,13701,13709,13741,13751,13755,13759,13767,13777,13787,13818,13822,13826,13834,13844,13854,13870,13874,13878,13882,13890,13900,13910,13920,13930,13942,13946,13950],{"__ignoreMap":59},[103,13321,13322,13324,13326,13328],{"class":105,"line":106},[103,13323,933],{"class":166},[103,13325,6193],{"class":170},[103,13327,6196],{"class":166},[103,13329,6199],{"class":170},[103,13331,13332,13334,13336,13338],{"class":105,"line":231},[103,13333,933],{"class":166},[103,13335,6206],{"class":170},[103,13337,6196],{"class":166},[103,13339,6211],{"class":170},[103,13341,13342],{"class":105,"line":259},[103,13343,309],{"emptyLinePlaceholder":308},[103,13345,13346],{"class":105,"line":274},[103,13347,6220],{"class":227},[103,13349,13350,13352,13354,13356],{"class":105,"line":286},[103,13351,933],{"class":166},[103,13353,6227],{"class":170},[103,13355,6196],{"class":166},[103,13357,6232],{"class":170},[103,13359,13360],{"class":105,"line":305},[103,13361,309],{"emptyLinePlaceholder":308},[103,13363,13364],{"class":105,"line":312},[103,13365,6241],{"class":227},[103,13367,13368],{"class":105,"line":327},[103,13369,309],{"emptyLinePlaceholder":308},[103,13371,13372],{"class":105,"line":348},[103,13373,6250],{"class":227},[103,13375,13376,13378,13380,13382],{"class":105,"line":359},[103,13377,933],{"class":166},[103,13379,6227],{"class":170},[103,13381,6196],{"class":166},[103,13383,13384],{"class":170}," DeclareLaunchArgument\n",[103,13386,13387,13389,13392,13394],{"class":105,"line":368},[103,13388,933],{"class":166},[103,13390,13391],{"class":170}," launch.substitutions ",[103,13393,6196],{"class":166},[103,13395,13396],{"class":170}," LaunchConfiguration\n",[103,13398,13399],{"class":105,"line":383},[103,13400,309],{"emptyLinePlaceholder":308},[103,13402,13403],{"class":105,"line":388},[103,13404,6277],{"class":227},[103,13406,13407],{"class":105,"line":394},[103,13408,309],{"emptyLinePlaceholder":308},[103,13410,13411],{"class":105,"line":399},[103,13412,6286],{"class":227},[103,13414,13415],{"class":105,"line":405},[103,13416,309],{"emptyLinePlaceholder":308},[103,13418,13419],{"class":105,"line":410},[103,13420,6295],{"class":227},[103,13422,13423],{"class":105,"line":416},[103,13424,309],{"emptyLinePlaceholder":308},[103,13426,13427],{"class":105,"line":421},[103,13428,6304],{"class":227},[103,13430,13431],{"class":105,"line":427},[103,13432,309],{"emptyLinePlaceholder":308},[103,13434,13435],{"class":105,"line":432},[103,13436,6313],{"class":227},[103,13438,13439],{"class":105,"line":438},[103,13440,309],{"emptyLinePlaceholder":308},[103,13442,13443],{"class":105,"line":443},[103,13444,6322],{"class":227},[103,13446,13447],{"class":105,"line":449},[103,13448,309],{"emptyLinePlaceholder":308},[103,13450,13451],{"class":105,"line":454},[103,13452,6331],{"class":227},[103,13454,13455],{"class":105,"line":460},[103,13456,309],{"emptyLinePlaceholder":308},[103,13458,13459],{"class":105,"line":465},[103,13460,6340],{"class":227},[103,13462,13463],{"class":105,"line":471},[103,13464,309],{"emptyLinePlaceholder":308},[103,13466,13467],{"class":105,"line":476},[103,13468,6349],{"class":227},[103,13470,13471],{"class":105,"line":504},[103,13472,309],{"emptyLinePlaceholder":308},[103,13474,13475],{"class":105,"line":530},[103,13476,6358],{"class":227},[103,13478,13479,13481,13483,13485],{"class":105,"line":574},[103,13480,933],{"class":166},[103,13482,6365],{"class":170},[103,13484,6196],{"class":166},[103,13486,6370],{"class":170},[103,13488,13489,13491,13494,13496],{"class":105,"line":579},[103,13490,933],{"class":166},[103,13492,13493],{"class":170}," launch_ros.parameter_descriptions ",[103,13495,6196],{"class":166},[103,13497,13498],{"class":170}," ParameterValue\n",[103,13500,13501,13503,13505,13507],{"class":105,"line":590},[103,13502,933],{"class":166},[103,13504,13391],{"class":170},[103,13506,6196],{"class":166},[103,13508,13509],{"class":170}," Command,LaunchConfiguration\n",[103,13511,13512,13514],{"class":105,"line":635},[103,13513,6196],{"class":166},[103,13515,6377],{"class":170},[103,13517,13518],{"class":105,"line":665},[103,13519,309],{"emptyLinePlaceholder":308},[103,13521,13522,13524,13526],{"class":105,"line":677},[103,13523,6386],{"class":166},[103,13525,6389],{"class":109},[103,13527,6392],{"class":170},[103,13529,13530,13532,13534],{"class":105,"line":799},[103,13531,6397],{"class":170},[103,13533,563],{"class":166},[103,13535,6402],{"class":113},[103,13537,13538,13540,13542],{"class":105,"line":805},[103,13539,6407],{"class":170},[103,13541,563],{"class":166},[103,13543,6412],{"class":113},[103,13545,13546],{"class":105,"line":817},[103,13547,309],{"emptyLinePlaceholder":308},[103,13549,13550],{"class":105,"line":823},[103,13551,13552],{"class":227},"    # urdf_xacro_name = \"fishbot_gazebo.urdf\"\n",[103,13554,13555,13557,13559],{"class":105,"line":829},[103,13556,12913],{"class":170},[103,13558,563],{"class":166},[103,13560,12918],{"class":113},[103,13562,13563],{"class":105,"line":835},[103,13564,309],{"emptyLinePlaceholder":308},[103,13566,13567,13569,13571,13573,13575,13577,13579,13581,13583,13585],{"class":105,"line":841},[103,13568,6431],{"class":170},[103,13570,563],{"class":166},[103,13572,6436],{"class":170},[103,13574,6439],{"class":166},[103,13576,6442],{"class":113},[103,13578,6445],{"class":139},[103,13580,6448],{"class":170},[103,13582,6451],{"class":139},[103,13584,6442],{"class":113},[103,13586,5981],{"class":170},[103,13588,13589,13592,13594,13596,13599,13601,13604],{"class":105,"line":864},[103,13590,13591],{"class":170},"    urdf_xacro_model_path ",[103,13593,563],{"class":166},[103,13595,6465],{"class":170},[103,13597,13598],{"class":113},"\"urdf\u002Fxacro\"",[103,13600,6049],{"class":170},[103,13602,13603],{"class":113},"\"fishbot.urdf.xacro\"",[103,13605,5981],{"class":170},[103,13607,13608,13610,13612,13614,13616,13618,13620,13622,13624,13626],{"class":105,"line":907},[103,13609,12630],{"class":170},[103,13611,563],{"class":166},[103,13613,6465],{"class":170},[103,13615,6439],{"class":166},[103,13617,12979],{"class":113},[103,13619,6445],{"class":139},[103,13621,12984],{"class":170},[103,13623,6451],{"class":139},[103,13625,6480],{"class":113},[103,13627,5981],{"class":170},[103,13629,13630,13632,13634,13636,13638],{"class":105,"line":944},[103,13631,8594],{"class":170},[103,13633,563],{"class":166},[103,13635,6465],{"class":170},[103,13637,8601],{"class":113},[103,13639,5981],{"class":170},[103,13641,13642],{"class":105,"line":949},[103,13643,309],{"emptyLinePlaceholder":308},[103,13645,13646,13649,13651,13654,13657,13659,13662,13664,13667,13669],{"class":105,"line":973},[103,13647,13648],{"class":170},"    model ",[103,13650,563],{"class":166},[103,13652,13653],{"class":170}," DeclareLaunchArgument(",[103,13655,13656],{"class":6031},"name",[103,13658,563],{"class":166},[103,13660,13661],{"class":113},"\"model\"",[103,13663,6043],{"class":170},[103,13665,13666],{"class":6031},"default_value",[103,13668,563],{"class":166},[103,13670,13671],{"class":170},"urdf_xacro_model_path)\n",[103,13673,13674,13677,13679,13682,13685,13688,13690],{"class":105,"line":997},[103,13675,13676],{"class":170},"    robot_description ",[103,13678,563],{"class":166},[103,13680,13681],{"class":170}," ParameterValue(Command([",[103,13683,13684],{"class":113},"\"xacro \"",[103,13686,13687],{"class":170},",LaunchConfiguration(",[103,13689,13661],{"class":113},[103,13691,13692],{"class":170},")]))\n",[103,13694,13695],{"class":105,"line":1876},[103,13696,309],{"emptyLinePlaceholder":308},[103,13698,13699],{"class":105,"line":1885},[103,13700,6491],{"class":227},[103,13702,13703,13705,13707],{"class":105,"line":1900},[103,13704,6496],{"class":170},[103,13706,563],{"class":166},[103,13708,6501],{"class":170},[103,13710,13711,13713,13715,13717,13719,13721,13723,13725,13727,13729,13731,13733,13735,13737,13739],{"class":105,"line":1915},[103,13712,6032],{"class":6031},[103,13714,563],{"class":166},[103,13716,6037],{"class":170},[103,13718,6040],{"class":113},[103,13720,6043],{"class":170},[103,13722,6046],{"class":113},[103,13724,6049],{"class":170},[103,13726,6052],{"class":113},[103,13728,6043],{"class":170},[103,13730,6057],{"class":113},[103,13732,6043],{"class":170},[103,13734,6052],{"class":113},[103,13736,6043],{"class":170},[103,13738,6066],{"class":113},[103,13740,13051],{"class":170},[103,13742,13743,13745,13747,13749],{"class":105,"line":1924},[103,13744,6074],{"class":6031},[103,13746,563],{"class":166},[103,13748,6079],{"class":113},[103,13750,5981],{"class":170},[103,13752,13753],{"class":105,"line":1933},[103,13754,309],{"emptyLinePlaceholder":308},[103,13756,13757],{"class":105,"line":1942},[103,13758,6553],{"class":227},[103,13760,13761,13763,13765],{"class":105,"line":1958},[103,13762,6558],{"class":170},[103,13764,563],{"class":166},[103,13766,6108],{"class":170},[103,13768,13769,13771,13773,13775],{"class":105,"line":2006},[103,13770,6567],{"class":6031},[103,13772,563],{"class":166},[103,13774,6118],{"class":113},[103,13776,6121],{"class":170},[103,13778,13779,13781,13783,13785],{"class":105,"line":2015},[103,13780,6578],{"class":6031},[103,13782,563],{"class":166},[103,13784,6131],{"class":113},[103,13786,6134],{"class":170},[103,13788,13789,13791,13793,13795,13797,13799,13802,13804,13807,13810,13812,13814,13816],{"class":105,"line":2024},[103,13790,6589],{"class":6031},[103,13792,563],{"class":166},[103,13794,6037],{"class":170},[103,13796,6146],{"class":113},[103,13798,6149],{"class":170},[103,13800,13801],{"class":113},"'-topic'",[103,13803,6043],{"class":170},[103,13805,13806],{"class":113},"'\u002Frobot_description'",[103,13808,13809],{"class":170}," ], ",[103,13811,6158],{"class":6031},[103,13813,563],{"class":166},[103,13815,6079],{"class":113},[103,13817,5981],{"class":170},[103,13819,13820],{"class":105,"line":2029},[103,13821,309],{"emptyLinePlaceholder":308},[103,13823,13824],{"class":105,"line":2051},[103,13825,8415],{"class":227},[103,13827,13828,13830,13832],{"class":105,"line":2067},[103,13829,8420],{"class":170},[103,13831,563],{"class":166},[103,13833,6108],{"class":170},[103,13835,13836,13838,13840,13842],{"class":105,"line":2082},[103,13837,6567],{"class":6031},[103,13839,563],{"class":166},[103,13841,8433],{"class":113},[103,13843,6134],{"class":170},[103,13845,13846,13848,13850,13852],{"class":105,"line":2098},[103,13847,6578],{"class":6031},[103,13849,563],{"class":166},[103,13851,8433],{"class":113},[103,13853,6134],{"class":170},[103,13855,13856,13859,13861,13864,13867],{"class":105,"line":2107},[103,13857,13858],{"class":6031},"        parameters",[103,13860,563],{"class":166},[103,13862,13863],{"class":170},"[{",[103,13865,13866],{"class":113},"\"robot_description\"",[103,13868,13869],{"class":170},": robot_description}]\n",[103,13871,13872],{"class":105,"line":2112},[103,13873,8459],{"class":170},[103,13875,13876],{"class":105,"line":2128},[103,13877,309],{"emptyLinePlaceholder":308},[103,13879,13880],{"class":105,"line":2137},[103,13881,8468],{"class":227},[103,13883,13884,13886,13888],{"class":105,"line":2158},[103,13885,8473],{"class":170},[103,13887,563],{"class":166},[103,13889,6108],{"class":170},[103,13891,13892,13894,13896,13898],{"class":105,"line":2167},[103,13893,6567],{"class":6031},[103,13895,563],{"class":166},[103,13897,8486],{"class":113},[103,13899,6134],{"class":170},[103,13901,13902,13904,13906,13908],{"class":105,"line":2186},[103,13903,6578],{"class":6031},[103,13905,563],{"class":166},[103,13907,8486],{"class":113},[103,13909,6134],{"class":170},[103,13911,13912,13914,13916,13918],{"class":105,"line":2195},[103,13913,8503],{"class":6031},[103,13915,563],{"class":166},[103,13917,8486],{"class":113},[103,13919,6134],{"class":170},[103,13921,13922,13924,13926,13928],{"class":105,"line":2204},[103,13923,6074],{"class":6031},[103,13925,563],{"class":166},[103,13927,6079],{"class":113},[103,13929,6134],{"class":170},[103,13931,13932,13934,13936,13938,13940],{"class":105,"line":2213},[103,13933,6589],{"class":6031},[103,13935,563],{"class":166},[103,13937,6037],{"class":170},[103,13939,8670],{"class":113},[103,13941,8673],{"class":170},[103,13943,13944],{"class":105,"line":2234},[103,13945,8533],{"class":170},[103,13947,13948],{"class":105,"line":2243},[103,13949,309],{"emptyLinePlaceholder":308},[103,13951,13952,13954],{"class":105,"line":2258},[103,13953,6618],{"class":166},[103,13955,13956],{"class":170}," LaunchDescription([model,start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[94,13958,13959],{"className":6017,"code":7795,"language":6019,"meta":59,"style":59},[100,13960,13961,13965,13973],{"__ignoreMap":59},[103,13962,13963],{"class":105,"line":106},[103,13964,7802],{"class":170},[103,13966,13967,13969,13971],{"class":105,"line":231},[103,13968,6651],{"class":170},[103,13970,188],{"class":166},[103,13972,6656],{"class":170},[103,13974,13975],{"class":105,"line":259},[103,13976,6661],{"class":170},[25,13978,13979],{},[57,13980],{"alt":59,"src":13981},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1703.webp",[25,13983,13984],{},[57,13985],{"alt":59,"src":13986},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1704.webp",[25,13988,13989],{},"然后就可以去搞导航啦！也可以接着学新版Ignition Gazebo，但这东西教程巨少，截止2024年只有赵虚左老师讲了。\n** 建议学习新的\tGazebo Harmonic （ROS2 Jazzy默认的版本） **",[13991,13992,13993],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .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 .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":59,"searchDepth":231,"depth":231,"links":13995},[13996],{"id":14,"depth":259,"text":13997},"Gazebo(Gazebo Classic)","1100-0100","2023-12-30","2023-12-30-ros2-tutorial","\u002Fwiki\u002F2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,{},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic",{"title":5,"description":59},"wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic","IvSskBFNH_2nnVcoK7-sQPcnytDEwZ0nmR0XyM_Uw24",[14011,14018,14024,14030,14036,14042,14048,14053,14059,14065,14070,14072,14078,14084,14090,14096,14102,14108,14114,14120,14126,14132,14138,14144,14150,14156,14162,14168,14174,14180,14186,14192,14198,14204,14210,14215,14221,14226,14232,14238,14244,14250,14256,14262,14268,14274,14280,14286,14291,14297,14303,14309,14315,14321,14327,14333,14339,14345,14351,14357,14363,14369,14375,14381,14387,14393,14399,14405,14411],{"path":14012,"stem":14013,"title":14014,"authors":14015,"date":13999,"chapterOrder":14016,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao","wiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍","ROS2介绍",[7],"0100",0,{"path":14019,"stem":14020,"title":14021,"authors":14022,"date":13999,"chapterOrder":14023,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","wiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作","入门操作",[7],"0200",{"path":14025,"stem":14026,"title":14027,"authors":14028,"date":13999,"chapterOrder":14029,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0300-gong-zuo-kong-jian-yu-gong-neng-bao","wiki\u002F2023-12-30-ros2-tutorial\u002F0300-工作空间与功能包","工作空间与功能包",[7],"0300",{"path":14031,"stem":14032,"title":14033,"authors":14034,"date":13999,"chapterOrder":14035,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信","四大通信",[7],"0400",{"path":14037,"stem":14038,"title":14039,"authors":14040,"date":13999,"chapterOrder":14041,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0500-ros2-qi-ta-tong-xin-ji-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F0500-ROS2其他通信机制","ROS2其他通信机制",[7],"0500",{"path":14043,"stem":14044,"title":14045,"authors":14046,"date":13999,"chapterOrder":14047,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-launch","wiki\u002F2023-12-30-ros2-tutorial\u002F0600-Launch","Launch",[7],"0600",{"path":14049,"stem":14050,"title":14051,"authors":14052,"date":13999,"chapterOrder":890,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2","wiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2","回溯rosbag2",[7],{"path":14054,"stem":14055,"title":14056,"authors":14057,"date":13999,"chapterOrder":14058,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-zuo-biao-bian-huan-tf","wiki\u002F2023-12-30-ros2-tutorial\u002F0800-坐标变换TF","坐标变换TF",[7],"0800",{"path":14060,"stem":14061,"title":14062,"authors":14063,"date":13999,"chapterOrder":14064,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0900-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki\u002F2023-12-30-ros2-tutorial\u002F0900-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言",[7],"0900",{"path":14066,"stem":14067,"title":14068,"authors":14069,"date":13999,"chapterOrder":695,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1000-stage-ros2-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1000-Stage_Ros2仿真平台","Stage_Ros2仿真平台",[7],{"path":14006,"stem":14008,"title":5,"authors":14071,"date":13999,"chapterOrder":13998,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},[7],{"path":14073,"stem":14074,"title":14075,"authors":14076,"date":13999,"chapterOrder":14077,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-ignitiongazebo","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）",[7],"1100-0200",{"path":14079,"stem":14080,"title":14081,"authors":14082,"date":13999,"chapterOrder":14083,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-gazebosim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-GazeboSim","Gz Sim（Gazebo Harmonic）",[7],"1100-0300",{"path":14085,"stem":14086,"title":14087,"authors":14088,"date":13999,"chapterOrder":14089,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim",[7],"1100-0400",{"path":14091,"stem":14092,"title":14093,"authors":14094,"date":13999,"chapterOrder":14095,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-gezebo-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-Gezebo仿真平台","Gezebo仿真平台",[7],"1100",{"path":14097,"stem":14098,"title":14099,"authors":14100,"date":13999,"chapterOrder":14101,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-humble-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-Humble版本","Humble导航仿真",[7],"1200-0100",{"path":14103,"stem":14104,"title":14105,"authors":14106,"date":13999,"chapterOrder":14107,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-jazzy-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-Jazzy版本","Jazzy导航仿真",[7],"1200-0200",{"path":14109,"stem":14110,"title":14111,"authors":14112,"date":13999,"chapterOrder":14113,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-humble2jazzy","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-Humble2Jazzy","Humble与Jazzy导航的差异",[7],"1200-0300",{"path":14115,"stem":14116,"title":14117,"authors":14118,"date":13999,"chapterOrder":14119,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0100-you-xian-zhuang-tai-ji-fsm","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0100-有限状态机FSM","有限状态机（Finite State Machine）",[7],"1200-0400-0100",{"path":14121,"stem":14122,"title":14123,"authors":14124,"date":13999,"chapterOrder":14125,"chapterDepth":259,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0100-ji-ben-gai-nian","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0100-基本概念","基本概念",[7],"1200-0400-0200-0100",{"path":14127,"stem":14128,"title":14129,"authors":14130,"date":13999,"chapterOrder":14131,"chapterDepth":259,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0200-kong-zhi-yu-zhuang-shi-gui-ze","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0200-控制与装饰规则","控制与装饰规则",[7],"1200-0400-0200-0200",{"path":14133,"stem":14134,"title":14135,"authors":14136,"date":13999,"chapterOrder":14137,"chapterDepth":259,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0300-di-yi-ge-wan-zheng-cheng-xu","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0300-第一个完整程序","第一个完整程序",[7],"1200-0400-0200-0300",{"path":14139,"stem":14140,"title":14141,"authors":14142,"date":13999,"chapterOrder":14143,"chapterDepth":259,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0400-jie-dian-zhi-jian-chuan-shu-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0400-节点之间传数据","节点之间传数据",[7],"1200-0400-0200-0400",{"path":14145,"stem":14146,"title":14147,"authors":14148,"date":13999,"chapterOrder":14149,"chapterDepth":259,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0500-chi-xu-ren-wu-yu-zhong-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0500-持续任务与中止","持续任务与中止",[7],"1200-0400-0200-0500",{"path":14151,"stem":14152,"title":14153,"authors":14154,"date":13999,"chapterOrder":14155,"chapterDepth":259,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0600-zu-he-shi-ji-ren-wu","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-0600-组合实际任务","组合实际任务",[7],"1200-0400-0200-0600",{"path":14157,"stem":14158,"title":14159,"authors":14160,"date":13999,"chapterOrder":14161,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-xing-wei-shu-bt","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-0200-行为树BT","行为树（BehaviorTree.CPP）",[7],"1200-0400-0200",{"path":14163,"stem":14164,"title":14165,"authors":14166,"date":13999,"chapterOrder":14167,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-fsm-yu-bt","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0400-FSM与BT","有限状态机FSM与行为树BT",[7],"1200-0400",{"path":14169,"stem":14170,"title":14171,"authors":14172,"date":13999,"chapterOrder":14173,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)",[7],"1200",{"path":14175,"stem":14176,"title":14177,"authors":14178,"date":13999,"chapterOrder":14179,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-Boost.Aiso","Boost.Asio库",[7],"1300-0100-0100",{"path":14181,"stem":14182,"title":14183,"authors":14184,"date":13999,"chapterOrder":14185,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2-serial-driver","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0200-ros2_serial_driver","ROS2 Serial Driver库",[7],"1300-0100-0200",{"path":14187,"stem":14188,"title":14189,"authors":14190,"date":13999,"chapterOrder":14191,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-chuan-kou-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-串口通信","UART串口通信",[7],"1300-0100",{"path":14193,"stem":14194,"title":14195,"authors":14196,"date":13999,"chapterOrder":14197,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","SocketCAN",[7],"1300-0200-0100",{"path":14199,"stem":14200,"title":14201,"authors":14202,"date":13999,"chapterOrder":14203,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2_socketcan","ROS2_SocketCAN",[7],"1300-0200-0200",{"path":14205,"stem":14206,"title":14207,"authors":14208,"date":13999,"chapterOrder":14209,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-can-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-CAN通信","CAN通信",[7],"1300-0200",{"path":14211,"stem":14212,"title":14177,"authors":14213,"date":13999,"chapterOrder":14214,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-Boost.Aiso",[7],"1300-0300-0100",{"path":14216,"stem":14217,"title":14218,"authors":14219,"date":13999,"chapterOrder":14220,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-tcp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-TCP通信","TCP通信",[7],"1300-0300",{"path":14222,"stem":14223,"title":14177,"authors":14224,"date":13999,"chapterOrder":14225,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-Boost.Aiso",[7],"1300-0400-0100",{"path":14227,"stem":14228,"title":14229,"authors":14230,"date":13999,"chapterOrder":14231,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-udp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-UDP通信","UDP通信",[7],"1300-0400",{"path":14233,"stem":14234,"title":14235,"authors":14236,"date":13999,"chapterOrder":14237,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-linux-ying-jian-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-Linux硬件通信","Linux硬件通信",[7],"1300",{"path":14239,"stem":14240,"title":14241,"authors":14242,"date":13999,"chapterOrder":14243,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-ji-qi-ren-zu-cheng","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-机器人组成","机器人组成",[7],"1400-0100",{"path":14245,"stem":14246,"title":14247,"authors":14248,"date":13999,"chapterOrder":14249,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-yuan-cheng-kai-fa-ssh","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0100-远程开发SSH","远程开发SSH",[7],"1400-0200-0100",{"path":14251,"stem":14252,"title":14253,"authors":14254,"date":13999,"chapterOrder":14255,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-yuan-cheng-fang-wen-zhuo-mian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-远程访问桌面","远程访问桌面",[7],"1400-0200-0200",{"path":14257,"stem":14258,"title":14259,"authors":14260,"date":13999,"chapterOrder":14261,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-gong-kong-ji-zhi-yuan-cheng-kai-fa-huan-jing","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-工控机之远程开发环境","工控机之远程开发环境",[7],"1400-0200",{"path":14263,"stem":14264,"title":14265,"authors":14266,"date":13999,"chapterOrder":14267,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-gong-kong-ji-zhi-wai-jie-usb-she-bei","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0300-工控机之外接USB设备","工控机之外接USB设备",[7],"1400-0300",{"path":14269,"stem":14270,"title":14271,"authors":14272,"date":13999,"chapterOrder":14273,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-fen-bu-shi-da-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-分布式搭建","分布式搭建",[7],"1400-0400",{"path":14275,"stem":14276,"title":14277,"authors":14278,"date":13999,"chapterOrder":14279,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-you-hua-ri-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-优化日志","优化日志",[7],"1400-0500",{"path":14281,"stem":14282,"title":14283,"authors":14284,"date":13999,"chapterOrder":14285,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-li-cheng-ji-odom","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-里程计Odom","里程计Odom",[7],"1400-0600-0100",{"path":14287,"stem":14288,"title":9234,"authors":14289,"date":13999,"chapterOrder":14290,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-guan-xing-ji-imu","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-惯性计IMU",[7],"1400-0600-0200",{"path":14292,"stem":14293,"title":14294,"authors":14295,"date":13999,"chapterOrder":14296,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-ji-guang-lei-da-lidar","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0300-激光雷达LiDAR","激光雷达LiDAR",[7],"1400-0600-0300",{"path":14298,"stem":14299,"title":14300,"authors":14301,"date":13999,"chapterOrder":14302,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-xiang-ji-camera","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-相机Camera","相机Camera",[7],"1400-0600-0400",{"path":14304,"stem":14305,"title":14306,"authors":14307,"date":13999,"chapterOrder":14308,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-quan-qiu-ding-wei-gnss","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0500-全球定位GNSS","全球定位GNSS",[7],"1400-0600-0500",{"path":14310,"stem":14311,"title":14312,"authors":14313,"date":13999,"chapterOrder":14314,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-shou-bing-joy","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-手柄joy","手柄JOY",[7],"1400-0600-0600",{"path":14316,"stem":14317,"title":14318,"authors":14319,"date":13999,"chapterOrder":14320,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-jian-pan-kong-zhi-jie-dian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-键盘控制节点","键盘控制节点",[7],"1400-0600-0700",{"path":14322,"stem":14323,"title":14324,"authors":14325,"date":13999,"chapterOrder":14326,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-ying-jian-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-硬件平台","硬件平台",[7],"1400-0600",{"path":14328,"stem":14329,"title":14330,"authors":14331,"date":13999,"chapterOrder":14332,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-zuo-biao-xi-yu-hua-ti-guan-xi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-坐标系与话题关系","坐标系与话题关系",[7],"1400-0700",{"path":14334,"stem":14335,"title":14336,"authors":14337,"date":13999,"chapterOrder":14338,"chapterDepth":259,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-lun-shi-li-cheng-ji-biao-ding","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0100-轮式里程计标定","轮式里程计标定",[7],"1400-0800-0100-0100",{"path":14340,"stem":14341,"title":14342,"authors":14343,"date":13999,"chapterOrder":14344,"chapterDepth":259,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-lun-shi-li-cheng-ji-yu-imu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-0200-轮式里程计与IMU融合","轮式里程计与IMU融合",[7],"1400-0800-0100-0200",{"path":14346,"stem":14347,"title":14348,"authors":14349,"date":13999,"chapterOrder":14350,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-lun-shi-li-cheng-ji-biao-ding-yu-rong-he","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0100-轮式里程计标定与融合","轮式里程计标定与融合",[7],"1400-0800-0100",{"path":14352,"stem":14353,"title":14354,"authors":14355,"date":13999,"chapterOrder":14356,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-ji-guang-lei-da-gong-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-激光雷达工具","激光雷达工具",[7],"1400-0800-0200",{"path":14358,"stem":14359,"title":14360,"authors":14361,"date":13999,"chapterOrder":14362,"chapterDepth":231,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-xiang-ji-shi-yong-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-相机使用进阶","相机使用进阶",[7],"1400-0800-0300",{"path":14364,"stem":14365,"title":14366,"authors":14367,"date":13999,"chapterOrder":14368,"chapterDepth":106,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-ying-jian-ping-tai-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-硬件平台进阶","硬件平台进阶",[7],"1400-0800",{"path":14370,"stem":14371,"title":14372,"authors":14373,"date":13999,"chapterOrder":14374,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-ji-qi-ren-ying-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-机器人硬件","机器人硬件",[7],"1400",{"path":14376,"stem":14377,"title":14378,"authors":14379,"date":13999,"chapterOrder":14380,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ros2-control","wiki\u002F2023-12-30-ros2-tutorial\u002F1500-ROS2_Control","ROS2_Control",[7],"1500",{"path":14382,"stem":14383,"title":14384,"authors":14385,"date":13999,"chapterOrder":14386,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1600-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki\u002F2023-12-30-ros2-tutorial\u002F1600-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂",[7],"1600",{"path":14388,"stem":14389,"title":14390,"authors":14391,"date":13999,"chapterOrder":14392,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1700-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki\u002F2023-12-30-ros2-tutorial\u002F1700-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)",[7],"1700",{"path":14394,"stem":14395,"title":14396,"authors":14397,"date":13999,"chapterOrder":14398,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-microros","wiki\u002F2023-12-30-ros2-tutorial\u002F1800-MicroROS","MicroROS",[7],"1800",{"path":14400,"stem":14401,"title":14402,"authors":14403,"date":13999,"chapterOrder":14404,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-webots-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1900-Webots仿真平台","Webots仿真平台",[7],"1900",{"path":14406,"stem":14407,"title":14408,"authors":14409,"date":13999,"chapterOrder":14410,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":14004},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-opencv","wiki\u002F2023-12-30-ros2-tutorial\u002F2000-OpenCV","OpenCV",[7],"2000",{"path":14001,"stem":14412,"title":14413,"authors":14414,"date":13999,"chapterOrder":14415,"chapterDepth":14017,"docKey":14000,"docRoot":14001,"docTitle":14002,"isWikiDoc":308,"isWikiIndex":308},"wiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2机器人操作系统教程",[7],null,[14417,14419,14422,14425],{"name":7,"image":14418},"\u002Fimages\u002Fmember_photo\u002F董佳辉.jpg",{"name":14420,"image":14421},"宫金良","\u002Fimages\u002Fmember_photo\u002F宫金良.jpg",{"name":14423,"image":14424},"巩丽","\u002Fimages\u002Fmember_photo\u002F巩丽.png",{"name":14426,"image":14427},"张彦斐","\u002Fimages\u002Fmember_photo\u002F张彦斐.jpg",1792431901787]