[{"data":1,"prerenderedAt":14300},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-gazeboclassic":3,"wiki-doc-items-2023-12-30-ros2-tutorial":14008},{"id":4,"title":5,"body":6,"chapterDepth":104,"chapterOrder":13996,"date":13997,"description":57,"docKey":13998,"docRoot":13999,"docTitle":14000,"extension":14001,"isWikiDoc":306,"isWikiIndex":14002,"meta":14003,"navigation":306,"path":14004,"seo":14005,"stem":14006,"wikiDepth":104,"__hash__":14007},"wiki\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic.md","Gezebo Classic",{"type":7,"value":8,"toc":13992},"minimark",[9,22,26,29,35,38,43,46,52,59,62,65,71,74,77,83,88,91,122,125,150,153,1020,1025,1028,1031,1034,1050,1055,1058,1072,1077,1080,1093,1096,1099,1116,1121,1139,1144,1147,1164,1167,1174,5683,5686,5689,5694,5697,5702,5705,5710,5713,5716,5721,5724,5727,5730,5733,5738,5741,5746,5749,5752,5755,5760,5763,5766,5771,5774,5779,5782,5789,5821,5824,5855,5858,5929,5934,5937,5980,5985,5988,5993,6004,6007,6013,6080,6089,6092,6163,6166,6171,6174,6177,6180,6620,6623,6660,6665,6668,6671,6708,6713,6868,6873,6876,6881,6884,6887,6895,6898,6901,6904,6907,6912,6915,6918,6921,6924,7036,7046,7052,7055,7058,7068,7073,7087,7090,7243,7246,7504,7507,7527,7788,7791,7813,7816,7836,7841,7844,7847,7876,7879,7888,7891,7916,7919,7922,7931,7934,7939,7950,7955,7960,7963,7972,7975,7980,7983,7996,8543,8546,8559,8562,8567,8570,8575,8580,8583,8676,8679,9226,9229,9233,9236,9239,9242,9253,9256,9259,9262,9265,9270,9273,9276,9281,9284,9289,9292,9298,9301,9304,9311,9314,9325,9328,9344,9351,10086,10089,10097,10108,10113,10137,10142,10147,10492,10495,10500,10504,10507,10514,10517,10522,10525,10530,10533,10541,10544,10549,10552,10555,10560,10563,10568,10571,10576,10579,10584,10587,10590,10595,10601,10607,10610,10613,10616,11004,11007,11036,11039,11044,11054,11059,11081,11086,11089,11092,11097,11100,11105,11108,11113,11118,11123,11127,11133,11136,11139,11142,11163,11166,11171,11174,11177,11182,11208,11211,11220,11223,11325,11328,11830,11833,11861,11864,11869,11872,11919,11922,12001,12004,12010,12055,12062,12359,12362,12365,12368,12373,12378,12381,12384,12387,12390,12393,12418,12421,12424,12427,12430,12435,12438,12454,12460,12465,12468,12471,12474,12479,12482,12485,12488,12491,12496,12499,12504,12507,12510,12515,12520,12523,12528,12531,12536,12539,12544,12547,12550,12555,12558,12561,12566,12569,12572,12577,12580,12583,12613,12619,12697,12700,13250,13253,13258,13279,13284,13289,13292,13299,13302,13305,13310,13313,13955,13975,13980,13985,13988],[10,11,13,14,21],"h3",{"id":12},"gazebogazebo-classic","Gazebo(",[15,16,20],"a",{"href":17,"rel":18},"https:\u002F\u002Fclassic.gazebosim.org\u002F",[19],"nofollow","Gazebo Classic",")",[23,24,25],"p",{},"这个是老版Gazebo，仅在ROS1和ROS2 Humble上可用。（但是ROS2并不推荐使用老版Gazebo，更加建议使用新版Gazebo）",[23,27,28],{},"ROS2老版Gazebo仅在Humble版本上可用，在Jazzy及以后的版本已移除。",[23,30,31],{},[32,33,34],"strong",{},"（不想学老版Gazebo的，直接跳到下一节的Ignition Gazebo即可）",[23,36,37],{},"这俩对咱们的区别不算太大，也就是一个教程多，一个教程少的区别，你直接学老版Gazebo也是一样用的。",[23,39,40],{},[32,41,42],{},"（初学者也可以只学教程多的Gazebo Classic,可以少走一些弯路）",[23,44,45],{},"Gezebo官网：",[23,47,48],{},[15,49,50],{"href":50,"rel":51},"https:\u002F\u002Fgazebosim.org\u002Fhome",[19],[23,53,54],{},[55,56],"img",{"alt":57,"src":58},"","https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1627.webp",[23,60,61],{},"如果你想从老版的Gazebo迁移到新版的Gazebo，那么请看下方官方教程：",[23,63,64],{},"从Gazebo Classic迁移到ROS2 Humble的Ign Gazebo(Gazebo Fortress)：",[23,66,67],{},[15,68,69],{"href":69,"rel":70},"https:\u002F\u002Fgazebosim.org\u002Fdocs\u002Ffortress\u002Fgazebo_classic_migration\u002F",[19],[23,72,73],{},"从Gazebo Classic迁移到ROS2 Jazzy的Gazebo Sim(Gazebo Harmonic)：",[23,75,76],{},"Jazzy之后的版本应该变化不会太大，也可以暂时参照下面这个教程（或者去官网找对应版本的教程）：",[23,78,79],{},[15,80,81],{"href":81,"rel":82},"https:\u002F\u002Fgazebosim.org\u002Fdocs\u002Fharmonic\u002Fgazebo_classic_migration\u002F",[19],[84,85,87],"h4",{"id":86},"gazebo-classic安装与运行","Gazebo Classic安装与运行",[23,89,90],{},"ROS2只有humble有老版Gazebo",[92,93,97],"pre",{"className":94,"code":95,"language":96,"meta":57,"style":57},"language-bash shiki shiki-themes github-light github-dark","sudo apt install ros-humble-gazebo-ros ros-humble-gazebo-ros-pkgs\n","bash",[98,99,100],"code",{"__ignoreMap":57},[101,102,105,109,113,116,119],"span",{"class":103,"line":104},"line",1,[101,106,108],{"class":107},"sScJk","sudo",[101,110,112],{"class":111},"sZZnC"," apt",[101,114,115],{"class":111}," install",[101,117,118],{"class":111}," ros-humble-gazebo-ros",[101,120,121],{"class":111}," ros-humble-gazebo-ros-pkgs\n",[23,123,124],{},"安装完成后，我们就可以通过下面的命令行来启动gazebo并加载ros2插件。",[92,126,128],{"className":94,"code":127,"language":96,"meta":57,"style":57},"gazebo --verbose -s libgazebo_ros_init.so -s libgazebo_ros_factory.so \n",[98,129,130],{"__ignoreMap":57},[101,131,132,135,139,142,145,147],{"class":103,"line":104},[101,133,134],{"class":107},"gazebo",[101,136,138],{"class":137},"sj4cs"," --verbose",[101,140,141],{"class":137}," -s",[101,143,144],{"class":111}," libgazebo_ros_init.so",[101,146,141],{"class":137},[101,148,149],{"class":111}," libgazebo_ros_factory.so\n",[23,151,152],{},"看到下面这个日志和gazebo界面，没啥大问题就说明成功了。（一些警告是说Gazebo Classic已经弃用，鼓励使用新版Ingition Gazebo，忽略这些警告即可）",[92,154,158],{"className":155,"code":156,"language":157,"meta":57,"style":57},"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",[98,159,160,227,255,270,282,301,308,323,344,355,364,379,384,390,395,401,406,412,417,423,428,434,439,445,450,456,461,467,472,500,526,570,575,586,631,661,673,795,801,813,819,825,831,837,860,903,940,945,969,993],{"__ignoreMap":57},[101,161,162,166,170,173,176,178,181,184,187,190,192,195,197,200,202,205,207,210,212,215,217,220,223],{"class":103,"line":104},[101,163,165],{"class":164},"szBVR","root",[101,167,169],{"class":168},"sVt8B","@Dell",[101,171,172],{"class":164},"-",[101,174,175],{"class":168},"G15",[101,177,172],{"class":164},[101,179,180],{"class":137},"5511",[101,182,183],{"class":168},":",[101,185,186],{"class":164},"\u002F",[101,188,189],{"class":168},"home",[101,191,186],{"class":164},[101,193,194],{"class":168},"tungchiahui",[101,196,186],{"class":164},[101,198,199],{"class":168},"UserFolder",[101,201,186],{"class":164},[101,203,204],{"class":168},"MySource",[101,206,186],{"class":164},[101,208,209],{"class":168},"ROS_WS",[101,211,186],{"class":164},[101,213,214],{"class":168},"ROS2_WS",[101,216,186],{"class":164},[101,218,219],{"class":137},"6",[101,221,222],{"class":168},".ws_simulations$ gazebo ",[101,224,226],{"class":225},"sJ8bj","--verbose -s libgazebo_ros_init.so -s libgazebo_ros_factory.so \n",[101,228,230,233,235,238,241,244,247,250,252],{"class":103,"line":229},2,[101,231,232],{"class":168},"Gazebo multi",[101,234,172],{"class":164},[101,236,237],{"class":168},"robot simulator, ",[101,239,240],{"class":164},"version",[101,242,243],{"class":137}," 11",[101,245,246],{"class":168},".",[101,248,249],{"class":137},"10",[101,251,246],{"class":168},[101,253,254],{"class":137},"2\n",[101,256,258,261,264,267],{"class":103,"line":257},3,[101,259,260],{"class":168},"Copyright (C) ",[101,262,263],{"class":137},"2012",[101,265,266],{"class":164}," Open",[101,268,269],{"class":168}," Source Robotics Foundation.\n",[101,271,273,276,279],{"class":103,"line":272},4,[101,274,275],{"class":168},"Released under the Apache ",[101,277,278],{"class":137},"2",[101,280,281],{"class":168}," License.\n",[101,283,285,288,290,293,296,298],{"class":103,"line":284},5,[101,286,287],{"class":164},"http",[101,289,183],{"class":168},[101,291,292],{"class":164},"\u002F\u002F",[101,294,295],{"class":137},"gazebosim",[101,297,246],{"class":168},[101,299,300],{"class":137},"org\n",[101,302,304],{"class":103,"line":303},6,[101,305,307],{"emptyLinePlaceholder":306},true,"\n",[101,309,311,314,317,320],{"class":103,"line":310},7,[101,312,313],{"class":168},"[Msg] Waiting ",[101,315,316],{"class":164},"for",[101,318,319],{"class":164}," master",[101,321,322],{"class":168},".\n",[101,324,326,328,330,332,334,336,338,340,342],{"class":103,"line":325},8,[101,327,232],{"class":168},[101,329,172],{"class":164},[101,331,237],{"class":168},[101,333,240],{"class":164},[101,335,243],{"class":137},[101,337,246],{"class":168},[101,339,249],{"class":137},[101,341,246],{"class":168},[101,343,254],{"class":137},[101,345,347,349,351,353],{"class":103,"line":346},9,[101,348,260],{"class":168},[101,350,263],{"class":137},[101,352,266],{"class":164},[101,354,269],{"class":168},[101,356,358,360,362],{"class":103,"line":357},10,[101,359,275],{"class":168},[101,361,278],{"class":137},[101,363,281],{"class":168},[101,365,367,369,371,373,375,377],{"class":103,"line":366},11,[101,368,287],{"class":164},[101,370,183],{"class":168},[101,372,292],{"class":164},[101,374,295],{"class":137},[101,376,246],{"class":168},[101,378,300],{"class":137},[101,380,382],{"class":103,"line":381},12,[101,383,307],{"emptyLinePlaceholder":306},[101,385,387],{"class":103,"line":386},13,[101,388,389],{"class":168},"[Wrn] [gazebo_ros_init.cpp:178] \n",[101,391,393],{"class":103,"line":392},14,[101,394,307],{"emptyLinePlaceholder":306},[101,396,398],{"class":103,"line":397},15,[101,399,400],{"class":168},"#     # ####### ####### ###  #####  #######\n",[101,402,404],{"class":103,"line":403},16,[101,405,307],{"emptyLinePlaceholder":306},[101,407,409],{"class":103,"line":408},17,[101,410,411],{"class":168},"##    # #     #    #     #  #     # #\n",[101,413,415],{"class":103,"line":414},18,[101,416,307],{"emptyLinePlaceholder":306},[101,418,420],{"class":103,"line":419},19,[101,421,422],{"class":168},"# #   # #     #    #     #  #       #\n",[101,424,426],{"class":103,"line":425},20,[101,427,307],{"emptyLinePlaceholder":306},[101,429,431],{"class":103,"line":430},21,[101,432,433],{"class":168},"#  #  # #     #    #     #  #       #####\n",[101,435,437],{"class":103,"line":436},22,[101,438,307],{"emptyLinePlaceholder":306},[101,440,442],{"class":103,"line":441},23,[101,443,444],{"class":168},"#   # # #     #    #     #  #       #\n",[101,446,448],{"class":103,"line":447},24,[101,449,307],{"emptyLinePlaceholder":306},[101,451,453],{"class":103,"line":452},25,[101,454,455],{"class":168},"#    ## #     #    #     #  #     # #\n",[101,457,459],{"class":103,"line":458},26,[101,460,307],{"emptyLinePlaceholder":306},[101,462,464],{"class":103,"line":463},27,[101,465,466],{"class":168},"#     # #######    #    ###  #####  #######\n",[101,468,470],{"class":103,"line":469},28,[101,471,307],{"emptyLinePlaceholder":306},[101,473,475,478,480,483,486,489,492,495,497],{"class":103,"line":474},29,[101,476,477],{"class":168},"This ",[101,479,240],{"class":164},[101,481,482],{"class":168}," of Gazebo, ",[101,484,485],{"class":164},"now",[101,487,488],{"class":168}," called Gazebo classic, reaches ",[101,490,491],{"class":164},"end-",[101,493,494],{"class":168},"of",[101,496,172],{"class":164},[101,498,499],{"class":168},"life\n",[101,501,503,506,509,512,515,518,521,523],{"class":103,"line":502},30,[101,504,505],{"class":164},"in",[101,507,508],{"class":168}," January ",[101,510,511],{"class":137},"2025",[101,513,514],{"class":168},". Users are highly encouraged ",[101,516,517],{"class":164},"to",[101,519,520],{"class":168}," migrate ",[101,522,517],{"class":164},[101,524,525],{"class":168}," the new Gazebo\n",[101,527,529,532,535,537,539,541,544,546,549,551,554,556,559,562,565,567],{"class":103,"line":528},31,[101,530,531],{"class":164},"using",[101,533,534],{"class":168}," our migration guides (https:",[101,536,292],{"class":164},[101,538,295],{"class":137},[101,540,246],{"class":168},[101,542,543],{"class":137},"org",[101,545,186],{"class":164},[101,547,548],{"class":168},"docs",[101,550,186],{"class":164},[101,552,553],{"class":168},"latest",[101,555,186],{"class":164},[101,557,558],{"class":168},"gazebo_classic_migration?utm_source",[101,560,561],{"class":164},"=",[101,563,564],{"class":168},"gazebo_ros_pkgs&utm_medium",[101,566,561],{"class":164},[101,568,569],{"class":168},"cli)\n",[101,571,573],{"class":103,"line":572},32,[101,574,307],{"emptyLinePlaceholder":306},[101,576,578,580,582,584],{"class":103,"line":577},33,[101,579,313],{"class":168},[101,581,316],{"class":164},[101,583,319],{"class":164},[101,585,322],{"class":168},[101,587,589,592,594,597,600,603,605,607,609,612,614,617,619,621,623,626,628],{"class":103,"line":588},34,[101,590,591],{"class":168},"[Msg] Connected ",[101,593,517],{"class":164},[101,595,596],{"class":168}," gazebo ",[101,598,599],{"class":164},"master",[101,601,602],{"class":168}," @ ",[101,604,287],{"class":164},[101,606,183],{"class":168},[101,608,292],{"class":164},[101,610,611],{"class":137},"127",[101,613,246],{"class":168},[101,615,616],{"class":137},"0",[101,618,246],{"class":168},[101,620,616],{"class":137},[101,622,246],{"class":168},[101,624,625],{"class":137},"1",[101,627,183],{"class":168},[101,629,630],{"class":137},"11345\n",[101,632,634,637,640,643,646,648,651,653,656,658],{"class":103,"line":633},35,[101,635,636],{"class":168},"[Msg] Publicized ",[101,638,639],{"class":164},"address",[101,641,642],{"class":168},": ",[101,644,645],{"class":137},"192",[101,647,246],{"class":168},[101,649,650],{"class":137},"168",[101,652,246],{"class":168},[101,654,655],{"class":137},"31",[101,657,246],{"class":168},[101,659,660],{"class":137},"60\n",[101,662,664,667,670],{"class":103,"line":663},36,[101,665,666],{"class":168},"[Msg] Loading world ",[101,668,669],{"class":164},"file",[101,671,672],{"class":168}," [\u002Fusr\u002Fshare\u002Fgazebo-11\u002Fworlds\u002Fempty.world]\n",[101,674,676,679,681,684,686,689,691,694,697,700,703,706,709,712,715,718,721,723,726,729,732,735,737,740,743,746,749,752,755,758,760,763,766,769,772,775,777,780,783,786,789,792],{"class":103,"line":675},37,[101,677,678],{"class":168},"XDG_RUNTIME_DIR (",[101,680,186],{"class":164},[101,682,683],{"class":168},"run",[101,685,186],{"class":164},[101,687,688],{"class":168},"user",[101,690,186],{"class":164},[101,692,693],{"class":137},"1000",[101,695,696],{"class":168},") ",[101,698,699],{"class":164},"is",[101,701,702],{"class":164}," not",[101,704,705],{"class":168}," owned ",[101,707,708],{"class":164},"by",[101,710,711],{"class":168}," us (",[101,713,714],{"class":164},"uid",[101,716,717],{"class":137}," 0",[101,719,720],{"class":168},"), but ",[101,722,708],{"class":164},[101,724,725],{"class":164}," uid",[101,727,728],{"class":137}," 1000",[101,730,731],{"class":168},"! (This could ",[101,733,734],{"class":137},"e",[101,736,246],{"class":168},[101,738,739],{"class":137},"g",[101,741,742],{"class":168},". happen ",[101,744,745],{"class":164},"if",[101,747,748],{"class":168}," you ",[101,750,751],{"class":164},"try",[101,753,754],{"class":164}," to",[101,756,757],{"class":164}," connect",[101,759,754],{"class":164},[101,761,762],{"class":168}," a non",[101,764,765],{"class":164},"-root",[101,767,768],{"class":168}," PulseAudio ",[101,770,771],{"class":164},"as",[101,773,774],{"class":168}," a ",[101,776,165],{"class":164},[101,778,779],{"class":168}," user, ",[101,781,782],{"class":164},"over",[101,784,785],{"class":168}," the ",[101,787,788],{"class":164},"native",[101,790,791],{"class":168}," protocol. Don",[101,793,794],{"class":111},"'t do that.)\n",[101,796,798],{"class":103,"line":797},38,[101,799,800],{"class":111},"ALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave\n",[101,802,804,807,810],{"class":103,"line":803},39,[101,805,806],{"class":111},"AL lib: (EE) ALCplaybackAlsa_open: Could not open playback device '",[101,808,809],{"class":164},"default",[101,811,812],{"class":111},"': No such file or directory\n",[101,814,816],{"class":103,"line":815},40,[101,817,818],{"class":111},"[Err] [OpenAL.cc:84] Unable to open audio device[default]\n",[101,820,822],{"class":103,"line":821},41,[101,823,824],{"class":111}," Audio will be disabled.\n",[101,826,828],{"class":103,"line":827},42,[101,829,830],{"class":111},"[Msg] Connected to gazebo master @ http:\u002F\u002F127.0.0.1:11345\n",[101,832,834],{"class":103,"line":833},43,[101,835,836],{"class":111},"[Msg] Publicized address: 192.168.31.60\n",[101,838,840,843,846,849,852,854,857],{"class":103,"line":839},44,[101,841,842],{"class":111},"[Wrn] [GuiIface.cc:298] Couldn'",[101,844,845],{"class":168},"t ",[101,847,848],{"class":164},"locate",[101,850,851],{"class":168}," specified .ini. Creating ",[101,853,669],{"class":164},[101,855,856],{"class":164}," at",[101,858,859],{"class":111}," \"\u002Froot\u002F.gazebo\u002Fgui.ini\"\n",[101,861,863,866,869,872,874,876,878,881,883,886,889,891,893,895,897,900],{"class":103,"line":862},45,[101,864,865],{"class":168},"[Wrn] [GuiIface.cc:120] QStandardPaths: runtime directory ",[101,867,868],{"class":111},"'\u002Frun\u002Fuser\u002F1000'",[101,870,871],{"class":164}," is",[101,873,702],{"class":164},[101,875,705],{"class":168},[101,877,708],{"class":164},[101,879,880],{"class":164}," UID",[101,882,717],{"class":137},[101,884,885],{"class":168},", but a directory permissions ",[101,887,888],{"class":137},"0700",[101,890,705],{"class":168},[101,892,708],{"class":164},[101,894,880],{"class":164},[101,896,728],{"class":137},[101,898,899],{"class":168}," GID ",[101,901,902],{"class":137},"1000\n",[101,904,906,909,912,915,918,921,923,926,929,932,934,937],{"class":103,"line":905},46,[101,907,908],{"class":168},"[Wrn] [Event.cc:61] Warning: Deleting a ",[101,910,911],{"class":164},"connection",[101,913,914],{"class":168}," right ",[101,916,917],{"class":164},"after",[101,919,920],{"class":168}," creation. Make sure ",[101,922,517],{"class":164},[101,924,925],{"class":164}," save",[101,927,928],{"class":168}," the ConnectionPtr ",[101,930,931],{"class":164},"from",[101,933,774],{"class":168},[101,935,936],{"class":164},"Connect",[101,938,939],{"class":164}," call\n",[101,941,943],{"class":103,"line":942},47,[101,944,307],{"emptyLinePlaceholder":306},[101,946,948,951,954,957,960,963,966],{"class":103,"line":947},48,[101,949,950],{"class":168},"libcurl: (",[101,952,953],{"class":137},"35",[101,955,956],{"class":168},") error:0A000126:",[101,958,959],{"class":164},"SSL",[101,961,962],{"class":168}," routines::unexpected eof ",[101,964,965],{"class":164},"while",[101,967,968],{"class":168}," reading\n",[101,970,972,975,977,979,981,984,987,990],{"class":103,"line":971},49,[101,973,974],{"class":168},"[Wrn] [ModelDatabase.cc:212] Unable ",[101,976,517],{"class":164},[101,978,757],{"class":164},[101,980,754],{"class":164},[101,982,983],{"class":168}," model ",[101,985,986],{"class":164},"database",[101,988,989],{"class":164}," using",[101,991,992],{"class":168}," [http:\u002F\u002Fmodels.gazebosim.org\u002F\u002Fdatabase.config]. Only locally installed models will be available.\n",[101,994,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018],{"class":103,"line":995},50,[101,997,908],{"class":168},[101,999,911],{"class":164},[101,1001,914],{"class":168},[101,1003,917],{"class":164},[101,1005,920],{"class":168},[101,1007,517],{"class":164},[101,1009,925],{"class":164},[101,1011,928],{"class":168},[101,1013,931],{"class":164},[101,1015,774],{"class":168},[101,1017,936],{"class":164},[101,1019,939],{"class":164},[23,1021,1022],{},[55,1023],{"alt":57,"src":1024},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1628.webp",[84,1026,1027],{"id":1027},"插件及节点服务介绍",[23,1029,1030],{},"使用之前的命令启动Gazebo并加载gazebo_ros插件，我们使用下面的指令来看插件的节点，以及改节点为我们提供的服务有哪些？",[23,1032,1033],{},"节点列表",[92,1035,1037],{"className":94,"code":1036,"language":96,"meta":57,"style":57},"ros2 node list\n",[98,1038,1039],{"__ignoreMap":57},[101,1040,1041,1044,1047],{"class":103,"line":104},[101,1042,1043],{"class":107},"ros2",[101,1045,1046],{"class":111}," node",[101,1048,1049],{"class":111}," list\n",[23,1051,1052],{},[55,1053],{"alt":57,"src":1054},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1629.webp",[23,1056,1057],{},"然后我们看看这个节点对外提供的服务有哪些？",[92,1059,1061],{"className":94,"code":1060,"language":96,"meta":57,"style":57},"ros2 service list\n",[98,1062,1063],{"__ignoreMap":57},[101,1064,1065,1067,1070],{"class":103,"line":104},[101,1066,1043],{"class":107},[101,1068,1069],{"class":111}," service",[101,1071,1049],{"class":111},[23,1073,1074],{},[55,1075],{"alt":57,"src":1076},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1630.webp",[23,1078,1079],{},"除去和参数相关的几个服务，我们可以看到另外三个特殊服务：",[1081,1082,1083,1087,1090],"ul",{},[1084,1085,1086],"li",{},"\u002Fspawn_entity，用于加载模型到gazebo中",[1084,1088,1089],{},"\u002Fget_model_list，用于获取模型列表",[1084,1091,1092],{},"\u002Fdelete_entity，用于删除gazbeo中已经加载的模型",[23,1094,1095],{},"我们想要让gazebo显示出我们配置好的机器人模型使用\u002Fspawn_entity来加载即可。",[23,1097,1098],{},"接着我们可以来请求服务来加载模型，先带你看一下服务的接口类型。",[92,1100,1102],{"className":94,"code":1101,"language":96,"meta":57,"style":57},"ros2 service type \u002Fspawn_entity\n",[98,1103,1104],{"__ignoreMap":57},[101,1105,1106,1108,1110,1113],{"class":103,"line":104},[101,1107,1043],{"class":107},[101,1109,1069],{"class":111},[101,1111,1112],{"class":111}," type",[101,1114,1115],{"class":111}," \u002Fspawn_entity\n",[23,1117,1118],{},[55,1119],{"alt":57,"src":1120},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1631.webp",[92,1122,1124],{"className":94,"code":1123,"language":96,"meta":57,"style":57},"ros2 interface show gazebo_msgs\u002Fsrv\u002FSpawnEntity\n",[98,1125,1126],{"__ignoreMap":57},[101,1127,1128,1130,1133,1136],{"class":103,"line":104},[101,1129,1043],{"class":107},[101,1131,1132],{"class":111}," interface",[101,1134,1135],{"class":111}," show",[101,1137,1138],{"class":111}," gazebo_msgs\u002Fsrv\u002FSpawnEntity\n",[23,1140,1141],{},[55,1142],{"alt":57,"src":1143},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1632.webp",[23,1145,1146],{},"可以看到服务的请求内容包括：",[1081,1148,1149,1152,1155,1158,1161],{},[1084,1150,1151],{},"string name ，需要加载的实体的名称 (可选的)。",[1084,1153,1154],{},"string xml ，实体的XML描述字符串, URDF或者SDF。",[1084,1156,1157],{},"string robot_namespace ，产生的机器人和所有的ROS接口的命名空间，多机器人仿真的时候很有用。",[1084,1159,1160],{},"geometry_msgs\u002FPose initial_pose ，机器人的初始化位置",[1084,1162,1163],{},"string reference_frame ，初始姿态是相对于该实体的frame定义的。如果保持\"empty\"或\"world\"或“map”，则使用 gazebo的world作为frame。如果指定了不存在的实体，则会返回错误",[84,1165,1166],{"id":1166},"调用服务加载模型",[23,1168,1169,1170],{},"我们这里教程使用鱼香ROS的fishbot模型：",[15,1171,1172],{"href":1172,"rel":1173},"https:\u002F\u002Fgithub.com\u002Ffishros\u002Ffishbot\u002Fblob\u002Fnavgation2\u002Fsrc\u002Ffishbot_description\u002Furdf\u002Ffishbot_gazebo.urdf",[19],[92,1175,1179],{"className":1176,"code":1177,"language":1178,"meta":57,"style":57},"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",[98,1180,1181,1200,1219,1223,1241,1245,1268,1285,1301,1326,1335,1339,1353,1363,1385,1394,1420,1429,1445,1464,1472,1481,1490,1510,1518,1538,1546,1560,1574,1582,1590,1599,1616,1670,1678,1686,1690,1705,1713,1733,1741,1762,1770,1785,1800,1808,1816,1824,1844,1852,1872,1881,1896,1911,1920,1929,1938,1954,2002,2011,2020,2025,2047,2063,2078,2094,2103,2108,2124,2133,2154,2163,2182,2191,2200,2209,2230,2239,2254,2263,2272,2281,2296,2341,2350,2359,2364,2386,2401,2416,2432,2441,2446,2462,2471,2493,2502,2525,2535,2550,2566,2576,2585,2594,2615,2624,2645,2654,2669,2684,2693,2702,2711,2726,2771,2780,2789,2794,2810,2819,2840,2849,2870,2879,2894,2909,2918,2927,2936,2957,2966,2987,2996,3011,3026,3035,3044,3053,3068,3113,3122,3131,3136,3159,3174,3189,3205,3222,3231,3236,3258,3273,3288,3304,3319,3328,3333,3349,3358,3379,3388,3405,3414,3429,3444,3453,3462,3471,3492,3501,3516,3525,3540,3555,3564,3573,3582,3597,3642,3651,3660,3665,3687,3702,3717,3733,3748,3757,3762,3778,3792,3801,3806,3821,3838,3854,3871,3888,3893,3902,3907,3916,3941,3951,3966,3981,3995,4004,4019,4024,4039,4054,4059,4074,4089,4094,4109,4124,4129,4144,4158,4173,4188,4203,4212,4217,4240,4249,4263,4272,4285,4299,4312,4322,4332,4337,4352,4365,4374,4379,4394,4418,4441,4450,4463,4477,4486,4500,4509,4523,4537,4551,4561,4571,4581,4598,4613,4628,4643,4658,4668,4678,4688,4703,4716,4729,4742,4755,4764,4773,4783,4798,4811,4824,4837,4850,4859,4868,4877,4887,4896,4911,4924,4938,4952,4966,4975,4984,4993,5008,5021,5034,5047,5060,5069,5078,5087,5102,5115,5128,5141,5154,5163,5172,5181,5190,5199,5208,5213,5228,5251,5264,5277,5291,5306,5316,5326,5336,5351,5366,5381,5396,5405,5414,5424,5439,5454,5468,5477,5486,5501,5514,5528,5537,5546,5551,5574,5583,5588,5602,5611,5626,5641,5650,5659,5668,5673],{"__ignoreMap":57},[101,1182,1183,1186,1189,1192,1194,1197],{"class":103,"line":104},[101,1184,1185],{"class":168},"\u003C?",[101,1187,1178],{"class":1188},"s9eBZ",[101,1190,1191],{"class":107}," version",[101,1193,561],{"class":168},[101,1195,1196],{"class":111},"\"1.0\"",[101,1198,1199],{"class":168},"?>\n",[101,1201,1202,1205,1208,1211,1213,1216],{"class":103,"line":229},[101,1203,1204],{"class":168},"\u003C",[101,1206,1207],{"class":1188},"robot",[101,1209,1210],{"class":107}," name",[101,1212,561],{"class":168},[101,1214,1215],{"class":111},"\"fishbot\"",[101,1217,1218],{"class":168},">\n",[101,1220,1221],{"class":103,"line":257},[101,1222,307],{"emptyLinePlaceholder":306},[101,1224,1225,1228,1231,1233,1235,1238],{"class":103,"line":272},[101,1226,1227],{"class":168},"  \u003C",[101,1229,1230],{"class":1188},"link",[101,1232,1210],{"class":107},[101,1234,561],{"class":168},[101,1236,1237],{"class":111},"\"base_footprint\"",[101,1239,1240],{"class":168},"\u002F>\n",[101,1242,1243],{"class":103,"line":284},[101,1244,307],{"emptyLinePlaceholder":306},[101,1246,1247,1249,1252,1254,1256,1259,1261,1263,1266],{"class":103,"line":303},[101,1248,1227],{"class":168},[101,1250,1251],{"class":1188},"joint",[101,1253,1210],{"class":107},[101,1255,561],{"class":168},[101,1257,1258],{"class":111},"\"base_joint\"",[101,1260,1112],{"class":107},[101,1262,561],{"class":168},[101,1264,1265],{"class":111},"\"fixed\"",[101,1267,1218],{"class":168},[101,1269,1270,1273,1276,1279,1281,1283],{"class":103,"line":310},[101,1271,1272],{"class":168},"    \u003C",[101,1274,1275],{"class":1188},"parent",[101,1277,1278],{"class":107}," link",[101,1280,561],{"class":168},[101,1282,1237],{"class":111},[101,1284,1240],{"class":168},[101,1286,1287,1289,1292,1294,1296,1299],{"class":103,"line":325},[101,1288,1272],{"class":168},[101,1290,1291],{"class":1188},"child",[101,1293,1278],{"class":107},[101,1295,561],{"class":168},[101,1297,1298],{"class":111},"\"base_link\"",[101,1300,1240],{"class":168},[101,1302,1303,1305,1308,1311,1313,1316,1319,1321,1324],{"class":103,"line":346},[101,1304,1272],{"class":168},[101,1306,1307],{"class":1188},"origin",[101,1309,1310],{"class":107}," xyz",[101,1312,561],{"class":168},[101,1314,1315],{"class":111},"\"0.0 0.0 0.076\"",[101,1317,1318],{"class":107}," rpy",[101,1320,561],{"class":168},[101,1322,1323],{"class":111},"\"0 0 0\"",[101,1325,1240],{"class":168},[101,1327,1328,1331,1333],{"class":103,"line":357},[101,1329,1330],{"class":168},"  \u003C\u002F",[101,1332,1251],{"class":1188},[101,1334,1218],{"class":168},[101,1336,1337],{"class":103,"line":366},[101,1338,307],{"emptyLinePlaceholder":306},[101,1340,1341,1343,1345,1347,1349,1351],{"class":103,"line":381},[101,1342,1227],{"class":168},[101,1344,1230],{"class":1188},[101,1346,1210],{"class":107},[101,1348,561],{"class":168},[101,1350,1298],{"class":111},[101,1352,1218],{"class":168},[101,1354,1355,1358,1361],{"class":103,"line":386},[101,1356,1357],{"class":168},"          \u003C",[101,1359,1360],{"class":1188},"visual",[101,1362,1218],{"class":168},[101,1364,1365,1368,1370,1372,1374,1377,1379,1381,1383],{"class":103,"line":392},[101,1366,1367],{"class":168},"      \u003C",[101,1369,1307],{"class":1188},[101,1371,1310],{"class":107},[101,1373,561],{"class":168},[101,1375,1376],{"class":111},"\"0 0 0.0\"",[101,1378,1318],{"class":107},[101,1380,561],{"class":168},[101,1382,1323],{"class":111},[101,1384,1240],{"class":168},[101,1386,1387,1389,1392],{"class":103,"line":397},[101,1388,1367],{"class":168},[101,1390,1391],{"class":1188},"geometry",[101,1393,1218],{"class":168},[101,1395,1396,1399,1402,1405,1407,1410,1413,1415,1418],{"class":103,"line":403},[101,1397,1398],{"class":168},"                \u003C",[101,1400,1401],{"class":1188},"cylinder",[101,1403,1404],{"class":107}," length",[101,1406,561],{"class":168},[101,1408,1409],{"class":111},"\"0.12\"",[101,1411,1412],{"class":107}," radius",[101,1414,561],{"class":168},[101,1416,1417],{"class":111},"\"0.10\"",[101,1419,1240],{"class":168},[101,1421,1422,1425,1427],{"class":103,"line":408},[101,1423,1424],{"class":168},"      \u003C\u002F",[101,1426,1391],{"class":1188},[101,1428,1218],{"class":168},[101,1430,1431,1433,1436,1438,1440,1443],{"class":103,"line":414},[101,1432,1367],{"class":168},[101,1434,1435],{"class":1188},"material",[101,1437,1210],{"class":107},[101,1439,561],{"class":168},[101,1441,1442],{"class":111},"\"blue\"",[101,1444,1218],{"class":168},[101,1446,1447,1450,1453,1456,1458,1461],{"class":103,"line":419},[101,1448,1449],{"class":168},"              \u003C",[101,1451,1452],{"class":1188},"color",[101,1454,1455],{"class":107}," rgba",[101,1457,561],{"class":168},[101,1459,1460],{"class":111},"\"0.1 0.1 1.0 0.5\"",[101,1462,1463],{"class":168}," \u002F> \n",[101,1465,1466,1468,1470],{"class":103,"line":425},[101,1467,1424],{"class":168},[101,1469,1435],{"class":1188},[101,1471,1218],{"class":168},[101,1473,1474,1477,1479],{"class":103,"line":430},[101,1475,1476],{"class":168},"    \u003C\u002F",[101,1478,1360],{"class":1188},[101,1480,1218],{"class":168},[101,1482,1483,1485,1488],{"class":103,"line":436},[101,1484,1272],{"class":168},[101,1486,1487],{"class":1188},"collision",[101,1489,1218],{"class":168},[101,1491,1492,1494,1496,1498,1500,1502,1504,1506,1508],{"class":103,"line":441},[101,1493,1367],{"class":168},[101,1495,1307],{"class":1188},[101,1497,1310],{"class":107},[101,1499,561],{"class":168},[101,1501,1376],{"class":111},[101,1503,1318],{"class":107},[101,1505,561],{"class":168},[101,1507,1323],{"class":111},[101,1509,1240],{"class":168},[101,1511,1512,1514,1516],{"class":103,"line":447},[101,1513,1367],{"class":168},[101,1515,1391],{"class":1188},[101,1517,1218],{"class":168},[101,1519,1520,1522,1524,1526,1528,1530,1532,1534,1536],{"class":103,"line":452},[101,1521,1398],{"class":168},[101,1523,1401],{"class":1188},[101,1525,1404],{"class":107},[101,1527,561],{"class":168},[101,1529,1409],{"class":111},[101,1531,1412],{"class":107},[101,1533,561],{"class":168},[101,1535,1417],{"class":111},[101,1537,1240],{"class":168},[101,1539,1540,1542,1544],{"class":103,"line":458},[101,1541,1424],{"class":168},[101,1543,1391],{"class":1188},[101,1545,1218],{"class":168},[101,1547,1548,1550,1552,1554,1556,1558],{"class":103,"line":463},[101,1549,1367],{"class":168},[101,1551,1435],{"class":1188},[101,1553,1210],{"class":107},[101,1555,561],{"class":168},[101,1557,1442],{"class":111},[101,1559,1218],{"class":168},[101,1561,1562,1564,1566,1568,1570,1572],{"class":103,"line":469},[101,1563,1449],{"class":168},[101,1565,1452],{"class":1188},[101,1567,1455],{"class":107},[101,1569,561],{"class":168},[101,1571,1460],{"class":111},[101,1573,1463],{"class":168},[101,1575,1576,1578,1580],{"class":103,"line":474},[101,1577,1424],{"class":168},[101,1579,1435],{"class":1188},[101,1581,1218],{"class":168},[101,1583,1584,1586,1588],{"class":103,"line":502},[101,1585,1476],{"class":168},[101,1587,1487],{"class":1188},[101,1589,1218],{"class":168},[101,1591,1592,1594,1597],{"class":103,"line":528},[101,1593,1272],{"class":168},[101,1595,1596],{"class":1188},"inertial",[101,1598,1218],{"class":168},[101,1600,1601,1603,1606,1609,1611,1614],{"class":103,"line":572},[101,1602,1367],{"class":168},[101,1604,1605],{"class":1188},"mass",[101,1607,1608],{"class":107}," value",[101,1610,561],{"class":168},[101,1612,1613],{"class":111},"\"0.2\"",[101,1615,1240],{"class":168},[101,1617,1618,1620,1623,1626,1628,1631,1634,1636,1639,1642,1644,1646,1649,1651,1653,1656,1658,1660,1663,1665,1668],{"class":103,"line":577},[101,1619,1367],{"class":168},[101,1621,1622],{"class":1188},"inertia",[101,1624,1625],{"class":107}," ixx",[101,1627,561],{"class":168},[101,1629,1630],{"class":111},"\"0.0122666\"",[101,1632,1633],{"class":107}," ixy",[101,1635,561],{"class":168},[101,1637,1638],{"class":111},"\"0\"",[101,1640,1641],{"class":107}," ixz",[101,1643,561],{"class":168},[101,1645,1638],{"class":111},[101,1647,1648],{"class":107}," iyy",[101,1650,561],{"class":168},[101,1652,1630],{"class":111},[101,1654,1655],{"class":107}," iyz",[101,1657,561],{"class":168},[101,1659,1638],{"class":111},[101,1661,1662],{"class":107}," izz",[101,1664,561],{"class":168},[101,1666,1667],{"class":111},"\"0.02\"",[101,1669,1240],{"class":168},[101,1671,1672,1674,1676],{"class":103,"line":588},[101,1673,1476],{"class":168},[101,1675,1596],{"class":1188},[101,1677,1218],{"class":168},[101,1679,1680,1682,1684],{"class":103,"line":633},[101,1681,1330],{"class":168},[101,1683,1230],{"class":1188},[101,1685,1218],{"class":168},[101,1687,1688],{"class":103,"line":663},[101,1689,307],{"emptyLinePlaceholder":306},[101,1691,1692,1694,1696,1698,1700,1703],{"class":103,"line":675},[101,1693,1227],{"class":168},[101,1695,1230],{"class":1188},[101,1697,1210],{"class":107},[101,1699,561],{"class":168},[101,1701,1702],{"class":111},"\"laser_link\"",[101,1704,1218],{"class":168},[101,1706,1707,1709,1711],{"class":103,"line":797},[101,1708,1272],{"class":168},[101,1710,1360],{"class":1188},[101,1712,1218],{"class":168},[101,1714,1715,1717,1719,1721,1723,1725,1727,1729,1731],{"class":103,"line":803},[101,1716,1367],{"class":168},[101,1718,1307],{"class":1188},[101,1720,1310],{"class":107},[101,1722,561],{"class":168},[101,1724,1323],{"class":111},[101,1726,1318],{"class":107},[101,1728,561],{"class":168},[101,1730,1323],{"class":111},[101,1732,1240],{"class":168},[101,1734,1735,1737,1739],{"class":103,"line":815},[101,1736,1367],{"class":168},[101,1738,1391],{"class":1188},[101,1740,1218],{"class":168},[101,1742,1743,1746,1748,1750,1752,1754,1756,1758,1760],{"class":103,"line":821},[101,1744,1745],{"class":168},"        \u003C",[101,1747,1401],{"class":1188},[101,1749,1404],{"class":107},[101,1751,561],{"class":168},[101,1753,1667],{"class":111},[101,1755,1412],{"class":107},[101,1757,561],{"class":168},[101,1759,1667],{"class":111},[101,1761,1240],{"class":168},[101,1763,1764,1766,1768],{"class":103,"line":827},[101,1765,1424],{"class":168},[101,1767,1391],{"class":1188},[101,1769,1218],{"class":168},[101,1771,1772,1774,1776,1778,1780,1783],{"class":103,"line":833},[101,1773,1367],{"class":168},[101,1775,1435],{"class":1188},[101,1777,1210],{"class":107},[101,1779,561],{"class":168},[101,1781,1782],{"class":111},"\"black\"",[101,1784,1218],{"class":168},[101,1786,1787,1789,1791,1793,1795,1798],{"class":103,"line":839},[101,1788,1745],{"class":168},[101,1790,1452],{"class":1188},[101,1792,1455],{"class":107},[101,1794,561],{"class":168},[101,1796,1797],{"class":111},"\"0.0 0.0 0.0 0.5\"",[101,1799,1463],{"class":168},[101,1801,1802,1804,1806],{"class":103,"line":862},[101,1803,1424],{"class":168},[101,1805,1435],{"class":1188},[101,1807,1218],{"class":168},[101,1809,1810,1812,1814],{"class":103,"line":905},[101,1811,1476],{"class":168},[101,1813,1360],{"class":1188},[101,1815,1218],{"class":168},[101,1817,1818,1820,1822],{"class":103,"line":942},[101,1819,1272],{"class":168},[101,1821,1487],{"class":1188},[101,1823,1218],{"class":168},[101,1825,1826,1828,1830,1832,1834,1836,1838,1840,1842],{"class":103,"line":947},[101,1827,1367],{"class":168},[101,1829,1307],{"class":1188},[101,1831,1310],{"class":107},[101,1833,561],{"class":168},[101,1835,1323],{"class":111},[101,1837,1318],{"class":107},[101,1839,561],{"class":168},[101,1841,1323],{"class":111},[101,1843,1240],{"class":168},[101,1845,1846,1848,1850],{"class":103,"line":971},[101,1847,1367],{"class":168},[101,1849,1391],{"class":1188},[101,1851,1218],{"class":168},[101,1853,1854,1856,1858,1860,1862,1864,1866,1868,1870],{"class":103,"line":995},[101,1855,1745],{"class":168},[101,1857,1401],{"class":1188},[101,1859,1404],{"class":107},[101,1861,561],{"class":168},[101,1863,1667],{"class":111},[101,1865,1412],{"class":107},[101,1867,561],{"class":168},[101,1869,1667],{"class":111},[101,1871,1240],{"class":168},[101,1873,1875,1877,1879],{"class":103,"line":1874},51,[101,1876,1424],{"class":168},[101,1878,1391],{"class":1188},[101,1880,1218],{"class":168},[101,1882,1884,1886,1888,1890,1892,1894],{"class":103,"line":1883},52,[101,1885,1367],{"class":168},[101,1887,1435],{"class":1188},[101,1889,1210],{"class":107},[101,1891,561],{"class":168},[101,1893,1782],{"class":111},[101,1895,1218],{"class":168},[101,1897,1899,1901,1903,1905,1907,1909],{"class":103,"line":1898},53,[101,1900,1745],{"class":168},[101,1902,1452],{"class":1188},[101,1904,1455],{"class":107},[101,1906,561],{"class":168},[101,1908,1797],{"class":111},[101,1910,1463],{"class":168},[101,1912,1914,1916,1918],{"class":103,"line":1913},54,[101,1915,1424],{"class":168},[101,1917,1435],{"class":1188},[101,1919,1218],{"class":168},[101,1921,1923,1925,1927],{"class":103,"line":1922},55,[101,1924,1476],{"class":168},[101,1926,1487],{"class":1188},[101,1928,1218],{"class":168},[101,1930,1932,1934,1936],{"class":103,"line":1931},56,[101,1933,1272],{"class":168},[101,1935,1596],{"class":1188},[101,1937,1218],{"class":168},[101,1939,1941,1943,1945,1947,1949,1952],{"class":103,"line":1940},57,[101,1942,1272],{"class":168},[101,1944,1605],{"class":1188},[101,1946,1608],{"class":107},[101,1948,561],{"class":168},[101,1950,1951],{"class":111},"\"0.1\"",[101,1953,1240],{"class":168},[101,1955,1957,1959,1961,1963,1965,1968,1970,1972,1974,1976,1978,1980,1982,1984,1987,1989,1991,1993,1995,1997,2000],{"class":103,"line":1956},58,[101,1958,1367],{"class":168},[101,1960,1622],{"class":1188},[101,1962,1625],{"class":107},[101,1964,561],{"class":168},[101,1966,1967],{"class":111},"\"0.000190416666667\"",[101,1969,1633],{"class":107},[101,1971,561],{"class":168},[101,1973,1638],{"class":111},[101,1975,1641],{"class":107},[101,1977,561],{"class":168},[101,1979,1638],{"class":111},[101,1981,1648],{"class":107},[101,1983,561],{"class":168},[101,1985,1986],{"class":111},"\"0.0001904\"",[101,1988,1655],{"class":107},[101,1990,561],{"class":168},[101,1992,1638],{"class":111},[101,1994,1662],{"class":107},[101,1996,561],{"class":168},[101,1998,1999],{"class":111},"\"0.00036\"",[101,2001,1240],{"class":168},[101,2003,2005,2007,2009],{"class":103,"line":2004},59,[101,2006,1476],{"class":168},[101,2008,1596],{"class":1188},[101,2010,1218],{"class":168},[101,2012,2014,2016,2018],{"class":103,"line":2013},60,[101,2015,1330],{"class":168},[101,2017,1230],{"class":1188},[101,2019,1218],{"class":168},[101,2021,2023],{"class":103,"line":2022},61,[101,2024,307],{"emptyLinePlaceholder":306},[101,2026,2028,2030,2032,2034,2036,2039,2041,2043,2045],{"class":103,"line":2027},62,[101,2029,1227],{"class":168},[101,2031,1251],{"class":1188},[101,2033,1210],{"class":107},[101,2035,561],{"class":168},[101,2037,2038],{"class":111},"\"laser_joint\"",[101,2040,1112],{"class":107},[101,2042,561],{"class":168},[101,2044,1265],{"class":111},[101,2046,1218],{"class":168},[101,2048,2050,2052,2054,2056,2058,2060],{"class":103,"line":2049},63,[101,2051,1367],{"class":168},[101,2053,1275],{"class":1188},[101,2055,1278],{"class":107},[101,2057,561],{"class":168},[101,2059,1298],{"class":111},[101,2061,2062],{"class":168}," \u002F>\n",[101,2064,2066,2068,2070,2072,2074,2076],{"class":103,"line":2065},64,[101,2067,1367],{"class":168},[101,2069,1291],{"class":1188},[101,2071,1278],{"class":107},[101,2073,561],{"class":168},[101,2075,1702],{"class":111},[101,2077,2062],{"class":168},[101,2079,2081,2083,2085,2087,2089,2092],{"class":103,"line":2080},65,[101,2082,1367],{"class":168},[101,2084,1307],{"class":1188},[101,2086,1310],{"class":107},[101,2088,561],{"class":168},[101,2090,2091],{"class":111},"\"0 0 0.075\"",[101,2093,2062],{"class":168},[101,2095,2097,2099,2101],{"class":103,"line":2096},66,[101,2098,1330],{"class":168},[101,2100,1251],{"class":1188},[101,2102,1218],{"class":168},[101,2104,2106],{"class":103,"line":2105},67,[101,2107,307],{"emptyLinePlaceholder":306},[101,2109,2111,2113,2115,2117,2119,2122],{"class":103,"line":2110},68,[101,2112,1227],{"class":168},[101,2114,1230],{"class":1188},[101,2116,1210],{"class":107},[101,2118,561],{"class":168},[101,2120,2121],{"class":111},"\"imu_link\"",[101,2123,1218],{"class":168},[101,2125,2127,2129,2131],{"class":103,"line":2126},69,[101,2128,1357],{"class":168},[101,2130,1360],{"class":1188},[101,2132,1218],{"class":168},[101,2134,2136,2138,2140,2142,2144,2146,2148,2150,2152],{"class":103,"line":2135},70,[101,2137,1367],{"class":168},[101,2139,1307],{"class":1188},[101,2141,1310],{"class":107},[101,2143,561],{"class":168},[101,2145,1376],{"class":111},[101,2147,1318],{"class":107},[101,2149,561],{"class":168},[101,2151,1323],{"class":111},[101,2153,1240],{"class":168},[101,2155,2157,2159,2161],{"class":103,"line":2156},71,[101,2158,1367],{"class":168},[101,2160,1391],{"class":1188},[101,2162,1218],{"class":168},[101,2164,2166,2169,2172,2175,2177,2180],{"class":103,"line":2165},72,[101,2167,2168],{"class":168},"                    \u003C",[101,2170,2171],{"class":1188},"box",[101,2173,2174],{"class":107}," size",[101,2176,561],{"class":168},[101,2178,2179],{"class":111},"\"0.02 0.02 0.02\"",[101,2181,1240],{"class":168},[101,2183,2185,2187,2189],{"class":103,"line":2184},73,[101,2186,1424],{"class":168},[101,2188,1391],{"class":1188},[101,2190,1218],{"class":168},[101,2192,2194,2196,2198],{"class":103,"line":2193},74,[101,2195,1476],{"class":168},[101,2197,1360],{"class":1188},[101,2199,1218],{"class":168},[101,2201,2203,2205,2207],{"class":103,"line":2202},75,[101,2204,1272],{"class":168},[101,2206,1487],{"class":1188},[101,2208,1218],{"class":168},[101,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228],{"class":103,"line":2211},76,[101,2213,1367],{"class":168},[101,2215,1307],{"class":1188},[101,2217,1310],{"class":107},[101,2219,561],{"class":168},[101,2221,1376],{"class":111},[101,2223,1318],{"class":107},[101,2225,561],{"class":168},[101,2227,1323],{"class":111},[101,2229,1240],{"class":168},[101,2231,2233,2235,2237],{"class":103,"line":2232},77,[101,2234,1367],{"class":168},[101,2236,1391],{"class":1188},[101,2238,1218],{"class":168},[101,2240,2242,2244,2246,2248,2250,2252],{"class":103,"line":2241},78,[101,2243,2168],{"class":168},[101,2245,2171],{"class":1188},[101,2247,2174],{"class":107},[101,2249,561],{"class":168},[101,2251,2179],{"class":111},[101,2253,1240],{"class":168},[101,2255,2257,2259,2261],{"class":103,"line":2256},79,[101,2258,1424],{"class":168},[101,2260,1391],{"class":1188},[101,2262,1218],{"class":168},[101,2264,2266,2268,2270],{"class":103,"line":2265},80,[101,2267,1476],{"class":168},[101,2269,1487],{"class":1188},[101,2271,1218],{"class":168},[101,2273,2275,2277,2279],{"class":103,"line":2274},81,[101,2276,1272],{"class":168},[101,2278,1596],{"class":1188},[101,2280,1218],{"class":168},[101,2282,2284,2286,2288,2290,2292,2294],{"class":103,"line":2283},82,[101,2285,1367],{"class":168},[101,2287,1605],{"class":1188},[101,2289,1608],{"class":107},[101,2291,561],{"class":168},[101,2293,1951],{"class":111},[101,2295,1240],{"class":168},[101,2297,2299,2301,2303,2305,2307,2309,2311,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339],{"class":103,"line":2298},83,[101,2300,1745],{"class":168},[101,2302,1622],{"class":1188},[101,2304,1625],{"class":107},[101,2306,561],{"class":168},[101,2308,1967],{"class":111},[101,2310,1633],{"class":107},[101,2312,561],{"class":168},[101,2314,1638],{"class":111},[101,2316,1641],{"class":107},[101,2318,561],{"class":168},[101,2320,1638],{"class":111},[101,2322,1648],{"class":107},[101,2324,561],{"class":168},[101,2326,1986],{"class":111},[101,2328,1655],{"class":107},[101,2330,561],{"class":168},[101,2332,1638],{"class":111},[101,2334,1662],{"class":107},[101,2336,561],{"class":168},[101,2338,1999],{"class":111},[101,2340,1240],{"class":168},[101,2342,2344,2346,2348],{"class":103,"line":2343},84,[101,2345,1424],{"class":168},[101,2347,1596],{"class":1188},[101,2349,1218],{"class":168},[101,2351,2353,2355,2357],{"class":103,"line":2352},85,[101,2354,1330],{"class":168},[101,2356,1230],{"class":1188},[101,2358,1218],{"class":168},[101,2360,2362],{"class":103,"line":2361},86,[101,2363,307],{"emptyLinePlaceholder":306},[101,2365,2367,2369,2371,2373,2375,2378,2380,2382,2384],{"class":103,"line":2366},87,[101,2368,1227],{"class":168},[101,2370,1251],{"class":1188},[101,2372,1210],{"class":107},[101,2374,561],{"class":168},[101,2376,2377],{"class":111},"\"imu_joint\"",[101,2379,1112],{"class":107},[101,2381,561],{"class":168},[101,2383,1265],{"class":111},[101,2385,1218],{"class":168},[101,2387,2389,2391,2393,2395,2397,2399],{"class":103,"line":2388},88,[101,2390,1367],{"class":168},[101,2392,1275],{"class":1188},[101,2394,1278],{"class":107},[101,2396,561],{"class":168},[101,2398,1298],{"class":111},[101,2400,2062],{"class":168},[101,2402,2404,2406,2408,2410,2412,2414],{"class":103,"line":2403},89,[101,2405,1367],{"class":168},[101,2407,1291],{"class":1188},[101,2409,1278],{"class":107},[101,2411,561],{"class":168},[101,2413,2121],{"class":111},[101,2415,2062],{"class":168},[101,2417,2419,2421,2423,2425,2427,2430],{"class":103,"line":2418},90,[101,2420,1367],{"class":168},[101,2422,1307],{"class":1188},[101,2424,1310],{"class":107},[101,2426,561],{"class":168},[101,2428,2429],{"class":111},"\"0 0 0.02\"",[101,2431,2062],{"class":168},[101,2433,2435,2437,2439],{"class":103,"line":2434},91,[101,2436,1330],{"class":168},[101,2438,1251],{"class":1188},[101,2440,1218],{"class":168},[101,2442,2444],{"class":103,"line":2443},92,[101,2445,307],{"emptyLinePlaceholder":306},[101,2447,2449,2451,2453,2455,2457,2460],{"class":103,"line":2448},93,[101,2450,1227],{"class":168},[101,2452,1230],{"class":1188},[101,2454,1210],{"class":107},[101,2456,561],{"class":168},[101,2458,2459],{"class":111},"\"left_wheel_link\"",[101,2461,1218],{"class":168},[101,2463,2465,2467,2469],{"class":103,"line":2464},94,[101,2466,1367],{"class":168},[101,2468,1360],{"class":1188},[101,2470,1218],{"class":168},[101,2472,2474,2476,2478,2480,2482,2484,2486,2488,2491],{"class":103,"line":2473},95,[101,2475,1745],{"class":168},[101,2477,1307],{"class":1188},[101,2479,1310],{"class":107},[101,2481,561],{"class":168},[101,2483,1323],{"class":111},[101,2485,1318],{"class":107},[101,2487,561],{"class":168},[101,2489,2490],{"class":111},"\"1.57079 0 0\"",[101,2492,1240],{"class":168},[101,2494,2496,2498,2500],{"class":103,"line":2495},96,[101,2497,1745],{"class":168},[101,2499,1391],{"class":1188},[101,2501,1218],{"class":168},[101,2503,2505,2507,2509,2511,2513,2516,2518,2520,2523],{"class":103,"line":2504},97,[101,2506,1357],{"class":168},[101,2508,1401],{"class":1188},[101,2510,1404],{"class":107},[101,2512,561],{"class":168},[101,2514,2515],{"class":111},"\"0.04\"",[101,2517,1412],{"class":107},[101,2519,561],{"class":168},[101,2521,2522],{"class":111},"\"0.032\"",[101,2524,1240],{"class":168},[101,2526,2528,2531,2533],{"class":103,"line":2527},98,[101,2529,2530],{"class":168},"        \u003C\u002F",[101,2532,1391],{"class":1188},[101,2534,1218],{"class":168},[101,2536,2538,2540,2542,2544,2546,2548],{"class":103,"line":2537},99,[101,2539,1357],{"class":168},[101,2541,1435],{"class":1188},[101,2543,1210],{"class":107},[101,2545,561],{"class":168},[101,2547,1782],{"class":111},[101,2549,1218],{"class":168},[101,2551,2553,2556,2558,2560,2562,2564],{"class":103,"line":2552},100,[101,2554,2555],{"class":168},"            \u003C",[101,2557,1452],{"class":1188},[101,2559,1455],{"class":107},[101,2561,561],{"class":168},[101,2563,1797],{"class":111},[101,2565,1463],{"class":168},[101,2567,2569,2572,2574],{"class":103,"line":2568},101,[101,2570,2571],{"class":168},"          \u003C\u002F",[101,2573,1435],{"class":1188},[101,2575,1218],{"class":168},[101,2577,2579,2581,2583],{"class":103,"line":2578},102,[101,2580,1424],{"class":168},[101,2582,1360],{"class":1188},[101,2584,1218],{"class":168},[101,2586,2588,2590,2592],{"class":103,"line":2587},103,[101,2589,1367],{"class":168},[101,2591,1487],{"class":1188},[101,2593,1218],{"class":168},[101,2595,2597,2599,2601,2603,2605,2607,2609,2611,2613],{"class":103,"line":2596},104,[101,2598,1745],{"class":168},[101,2600,1307],{"class":1188},[101,2602,1310],{"class":107},[101,2604,561],{"class":168},[101,2606,1323],{"class":111},[101,2608,1318],{"class":107},[101,2610,561],{"class":168},[101,2612,2490],{"class":111},[101,2614,1240],{"class":168},[101,2616,2618,2620,2622],{"class":103,"line":2617},105,[101,2619,1745],{"class":168},[101,2621,1391],{"class":1188},[101,2623,1218],{"class":168},[101,2625,2627,2629,2631,2633,2635,2637,2639,2641,2643],{"class":103,"line":2626},106,[101,2628,1357],{"class":168},[101,2630,1401],{"class":1188},[101,2632,1404],{"class":107},[101,2634,561],{"class":168},[101,2636,2515],{"class":111},[101,2638,1412],{"class":107},[101,2640,561],{"class":168},[101,2642,2522],{"class":111},[101,2644,1240],{"class":168},[101,2646,2648,2650,2652],{"class":103,"line":2647},107,[101,2649,2530],{"class":168},[101,2651,1391],{"class":1188},[101,2653,1218],{"class":168},[101,2655,2657,2659,2661,2663,2665,2667],{"class":103,"line":2656},108,[101,2658,1357],{"class":168},[101,2660,1435],{"class":1188},[101,2662,1210],{"class":107},[101,2664,561],{"class":168},[101,2666,1782],{"class":111},[101,2668,1218],{"class":168},[101,2670,2672,2674,2676,2678,2680,2682],{"class":103,"line":2671},109,[101,2673,2555],{"class":168},[101,2675,1452],{"class":1188},[101,2677,1455],{"class":107},[101,2679,561],{"class":168},[101,2681,1797],{"class":111},[101,2683,1463],{"class":168},[101,2685,2687,2689,2691],{"class":103,"line":2686},110,[101,2688,2571],{"class":168},[101,2690,1435],{"class":1188},[101,2692,1218],{"class":168},[101,2694,2696,2698,2700],{"class":103,"line":2695},111,[101,2697,1424],{"class":168},[101,2699,1487],{"class":1188},[101,2701,1218],{"class":168},[101,2703,2705,2707,2709],{"class":103,"line":2704},112,[101,2706,1367],{"class":168},[101,2708,1596],{"class":1188},[101,2710,1218],{"class":168},[101,2712,2714,2716,2718,2720,2722,2724],{"class":103,"line":2713},113,[101,2715,1745],{"class":168},[101,2717,1605],{"class":1188},[101,2719,1608],{"class":107},[101,2721,561],{"class":168},[101,2723,1613],{"class":111},[101,2725,1240],{"class":168},[101,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769],{"class":103,"line":2728},114,[101,2730,1357],{"class":168},[101,2732,1622],{"class":1188},[101,2734,1625],{"class":107},[101,2736,561],{"class":168},[101,2738,1967],{"class":111},[101,2740,1633],{"class":107},[101,2742,561],{"class":168},[101,2744,1638],{"class":111},[101,2746,1641],{"class":107},[101,2748,561],{"class":168},[101,2750,1638],{"class":111},[101,2752,1648],{"class":107},[101,2754,561],{"class":168},[101,2756,1986],{"class":111},[101,2758,1655],{"class":107},[101,2760,561],{"class":168},[101,2762,1638],{"class":111},[101,2764,1662],{"class":107},[101,2766,561],{"class":168},[101,2768,1999],{"class":111},[101,2770,1240],{"class":168},[101,2772,2774,2776,2778],{"class":103,"line":2773},115,[101,2775,2530],{"class":168},[101,2777,1596],{"class":1188},[101,2779,1218],{"class":168},[101,2781,2783,2785,2787],{"class":103,"line":2782},116,[101,2784,1330],{"class":168},[101,2786,1230],{"class":1188},[101,2788,1218],{"class":168},[101,2790,2792],{"class":103,"line":2791},117,[101,2793,307],{"emptyLinePlaceholder":306},[101,2795,2797,2799,2801,2803,2805,2808],{"class":103,"line":2796},118,[101,2798,1227],{"class":168},[101,2800,1230],{"class":1188},[101,2802,1210],{"class":107},[101,2804,561],{"class":168},[101,2806,2807],{"class":111},"\"right_wheel_link\"",[101,2809,1218],{"class":168},[101,2811,2813,2815,2817],{"class":103,"line":2812},119,[101,2814,1367],{"class":168},[101,2816,1360],{"class":1188},[101,2818,1218],{"class":168},[101,2820,2822,2824,2826,2828,2830,2832,2834,2836,2838],{"class":103,"line":2821},120,[101,2823,1745],{"class":168},[101,2825,1307],{"class":1188},[101,2827,1310],{"class":107},[101,2829,561],{"class":168},[101,2831,1323],{"class":111},[101,2833,1318],{"class":107},[101,2835,561],{"class":168},[101,2837,2490],{"class":111},[101,2839,1240],{"class":168},[101,2841,2843,2845,2847],{"class":103,"line":2842},121,[101,2844,1745],{"class":168},[101,2846,1391],{"class":1188},[101,2848,1218],{"class":168},[101,2850,2852,2854,2856,2858,2860,2862,2864,2866,2868],{"class":103,"line":2851},122,[101,2853,1357],{"class":168},[101,2855,1401],{"class":1188},[101,2857,1404],{"class":107},[101,2859,561],{"class":168},[101,2861,2515],{"class":111},[101,2863,1412],{"class":107},[101,2865,561],{"class":168},[101,2867,2522],{"class":111},[101,2869,1240],{"class":168},[101,2871,2873,2875,2877],{"class":103,"line":2872},123,[101,2874,2530],{"class":168},[101,2876,1391],{"class":1188},[101,2878,1218],{"class":168},[101,2880,2882,2884,2886,2888,2890,2892],{"class":103,"line":2881},124,[101,2883,1357],{"class":168},[101,2885,1435],{"class":1188},[101,2887,1210],{"class":107},[101,2889,561],{"class":168},[101,2891,1782],{"class":111},[101,2893,1218],{"class":168},[101,2895,2897,2899,2901,2903,2905,2907],{"class":103,"line":2896},125,[101,2898,2555],{"class":168},[101,2900,1452],{"class":1188},[101,2902,1455],{"class":107},[101,2904,561],{"class":168},[101,2906,1797],{"class":111},[101,2908,1463],{"class":168},[101,2910,2912,2914,2916],{"class":103,"line":2911},126,[101,2913,2571],{"class":168},[101,2915,1435],{"class":1188},[101,2917,1218],{"class":168},[101,2919,2921,2923,2925],{"class":103,"line":2920},127,[101,2922,1424],{"class":168},[101,2924,1360],{"class":1188},[101,2926,1218],{"class":168},[101,2928,2930,2932,2934],{"class":103,"line":2929},128,[101,2931,1367],{"class":168},[101,2933,1487],{"class":1188},[101,2935,1218],{"class":168},[101,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955],{"class":103,"line":2938},129,[101,2940,1745],{"class":168},[101,2942,1307],{"class":1188},[101,2944,1310],{"class":107},[101,2946,561],{"class":168},[101,2948,1323],{"class":111},[101,2950,1318],{"class":107},[101,2952,561],{"class":168},[101,2954,2490],{"class":111},[101,2956,1240],{"class":168},[101,2958,2960,2962,2964],{"class":103,"line":2959},130,[101,2961,1745],{"class":168},[101,2963,1391],{"class":1188},[101,2965,1218],{"class":168},[101,2967,2969,2971,2973,2975,2977,2979,2981,2983,2985],{"class":103,"line":2968},131,[101,2970,1357],{"class":168},[101,2972,1401],{"class":1188},[101,2974,1404],{"class":107},[101,2976,561],{"class":168},[101,2978,2515],{"class":111},[101,2980,1412],{"class":107},[101,2982,561],{"class":168},[101,2984,2522],{"class":111},[101,2986,1240],{"class":168},[101,2988,2990,2992,2994],{"class":103,"line":2989},132,[101,2991,2530],{"class":168},[101,2993,1391],{"class":1188},[101,2995,1218],{"class":168},[101,2997,2999,3001,3003,3005,3007,3009],{"class":103,"line":2998},133,[101,3000,1357],{"class":168},[101,3002,1435],{"class":1188},[101,3004,1210],{"class":107},[101,3006,561],{"class":168},[101,3008,1782],{"class":111},[101,3010,1218],{"class":168},[101,3012,3014,3016,3018,3020,3022,3024],{"class":103,"line":3013},134,[101,3015,2555],{"class":168},[101,3017,1452],{"class":1188},[101,3019,1455],{"class":107},[101,3021,561],{"class":168},[101,3023,1797],{"class":111},[101,3025,1463],{"class":168},[101,3027,3029,3031,3033],{"class":103,"line":3028},135,[101,3030,2571],{"class":168},[101,3032,1435],{"class":1188},[101,3034,1218],{"class":168},[101,3036,3038,3040,3042],{"class":103,"line":3037},136,[101,3039,1424],{"class":168},[101,3041,1487],{"class":1188},[101,3043,1218],{"class":168},[101,3045,3047,3049,3051],{"class":103,"line":3046},137,[101,3048,1367],{"class":168},[101,3050,1596],{"class":1188},[101,3052,1218],{"class":168},[101,3054,3056,3058,3060,3062,3064,3066],{"class":103,"line":3055},138,[101,3057,1367],{"class":168},[101,3059,1605],{"class":1188},[101,3061,1608],{"class":107},[101,3063,561],{"class":168},[101,3065,1613],{"class":111},[101,3067,1240],{"class":168},[101,3069,3071,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109,3111],{"class":103,"line":3070},139,[101,3072,1367],{"class":168},[101,3074,1622],{"class":1188},[101,3076,1625],{"class":107},[101,3078,561],{"class":168},[101,3080,1967],{"class":111},[101,3082,1633],{"class":107},[101,3084,561],{"class":168},[101,3086,1638],{"class":111},[101,3088,1641],{"class":107},[101,3090,561],{"class":168},[101,3092,1638],{"class":111},[101,3094,1648],{"class":107},[101,3096,561],{"class":168},[101,3098,1986],{"class":111},[101,3100,1655],{"class":107},[101,3102,561],{"class":168},[101,3104,1638],{"class":111},[101,3106,1662],{"class":107},[101,3108,561],{"class":168},[101,3110,1999],{"class":111},[101,3112,1240],{"class":168},[101,3114,3116,3118,3120],{"class":103,"line":3115},140,[101,3117,1476],{"class":168},[101,3119,1596],{"class":1188},[101,3121,1218],{"class":168},[101,3123,3125,3127,3129],{"class":103,"line":3124},141,[101,3126,1330],{"class":168},[101,3128,1230],{"class":1188},[101,3130,1218],{"class":168},[101,3132,3134],{"class":103,"line":3133},142,[101,3135,307],{"emptyLinePlaceholder":306},[101,3137,3139,3141,3143,3145,3147,3150,3152,3154,3157],{"class":103,"line":3138},143,[101,3140,1227],{"class":168},[101,3142,1251],{"class":1188},[101,3144,1210],{"class":107},[101,3146,561],{"class":168},[101,3148,3149],{"class":111},"\"left_wheel_joint\"",[101,3151,1112],{"class":107},[101,3153,561],{"class":168},[101,3155,3156],{"class":111},"\"continuous\"",[101,3158,1218],{"class":168},[101,3160,3162,3164,3166,3168,3170,3172],{"class":103,"line":3161},144,[101,3163,1367],{"class":168},[101,3165,1275],{"class":1188},[101,3167,1278],{"class":107},[101,3169,561],{"class":168},[101,3171,1298],{"class":111},[101,3173,2062],{"class":168},[101,3175,3177,3179,3181,3183,3185,3187],{"class":103,"line":3176},145,[101,3178,1367],{"class":168},[101,3180,1291],{"class":1188},[101,3182,1278],{"class":107},[101,3184,561],{"class":168},[101,3186,2459],{"class":111},[101,3188,2062],{"class":168},[101,3190,3192,3194,3196,3198,3200,3203],{"class":103,"line":3191},146,[101,3193,1367],{"class":168},[101,3195,1307],{"class":1188},[101,3197,1310],{"class":107},[101,3199,561],{"class":168},[101,3201,3202],{"class":111},"\"-0.02 0.10 -0.06\"",[101,3204,2062],{"class":168},[101,3206,3208,3210,3213,3215,3217,3220],{"class":103,"line":3207},147,[101,3209,1367],{"class":168},[101,3211,3212],{"class":1188},"axis",[101,3214,1310],{"class":107},[101,3216,561],{"class":168},[101,3218,3219],{"class":111},"\"0 1 0\"",[101,3221,2062],{"class":168},[101,3223,3225,3227,3229],{"class":103,"line":3224},148,[101,3226,1330],{"class":168},[101,3228,1251],{"class":1188},[101,3230,1218],{"class":168},[101,3232,3234],{"class":103,"line":3233},149,[101,3235,307],{"emptyLinePlaceholder":306},[101,3237,3239,3241,3243,3245,3247,3250,3252,3254,3256],{"class":103,"line":3238},150,[101,3240,1227],{"class":168},[101,3242,1251],{"class":1188},[101,3244,1210],{"class":107},[101,3246,561],{"class":168},[101,3248,3249],{"class":111},"\"right_wheel_joint\"",[101,3251,1112],{"class":107},[101,3253,561],{"class":168},[101,3255,3156],{"class":111},[101,3257,1218],{"class":168},[101,3259,3261,3263,3265,3267,3269,3271],{"class":103,"line":3260},151,[101,3262,1367],{"class":168},[101,3264,1275],{"class":1188},[101,3266,1278],{"class":107},[101,3268,561],{"class":168},[101,3270,1298],{"class":111},[101,3272,2062],{"class":168},[101,3274,3276,3278,3280,3282,3284,3286],{"class":103,"line":3275},152,[101,3277,1367],{"class":168},[101,3279,1291],{"class":1188},[101,3281,1278],{"class":107},[101,3283,561],{"class":168},[101,3285,2807],{"class":111},[101,3287,2062],{"class":168},[101,3289,3291,3293,3295,3297,3299,3302],{"class":103,"line":3290},153,[101,3292,1367],{"class":168},[101,3294,1307],{"class":1188},[101,3296,1310],{"class":107},[101,3298,561],{"class":168},[101,3300,3301],{"class":111},"\"-0.02 -0.10 -0.06\"",[101,3303,2062],{"class":168},[101,3305,3307,3309,3311,3313,3315,3317],{"class":103,"line":3306},154,[101,3308,1367],{"class":168},[101,3310,3212],{"class":1188},[101,3312,1310],{"class":107},[101,3314,561],{"class":168},[101,3316,3219],{"class":111},[101,3318,2062],{"class":168},[101,3320,3322,3324,3326],{"class":103,"line":3321},155,[101,3323,1330],{"class":168},[101,3325,1251],{"class":1188},[101,3327,1218],{"class":168},[101,3329,3331],{"class":103,"line":3330},156,[101,3332,307],{"emptyLinePlaceholder":306},[101,3334,3336,3338,3340,3342,3344,3347],{"class":103,"line":3335},157,[101,3337,1227],{"class":168},[101,3339,1230],{"class":1188},[101,3341,1210],{"class":107},[101,3343,561],{"class":168},[101,3345,3346],{"class":111},"\"caster_link\"",[101,3348,1218],{"class":168},[101,3350,3352,3354,3356],{"class":103,"line":3351},158,[101,3353,1367],{"class":168},[101,3355,1360],{"class":1188},[101,3357,1218],{"class":168},[101,3359,3361,3363,3365,3367,3369,3371,3373,3375,3377],{"class":103,"line":3360},159,[101,3362,1745],{"class":168},[101,3364,1307],{"class":1188},[101,3366,1310],{"class":107},[101,3368,561],{"class":168},[101,3370,1323],{"class":111},[101,3372,1318],{"class":107},[101,3374,561],{"class":168},[101,3376,2490],{"class":111},[101,3378,1240],{"class":168},[101,3380,3382,3384,3386],{"class":103,"line":3381},160,[101,3383,1745],{"class":168},[101,3385,1391],{"class":1188},[101,3387,1218],{"class":168},[101,3389,3391,3393,3396,3398,3400,3403],{"class":103,"line":3390},161,[101,3392,2555],{"class":168},[101,3394,3395],{"class":1188},"sphere",[101,3397,1412],{"class":107},[101,3399,561],{"class":168},[101,3401,3402],{"class":111},"\"0.016\"",[101,3404,1240],{"class":168},[101,3406,3408,3410,3412],{"class":103,"line":3407},162,[101,3409,2530],{"class":168},[101,3411,1391],{"class":1188},[101,3413,1218],{"class":168},[101,3415,3417,3419,3421,3423,3425,3427],{"class":103,"line":3416},163,[101,3418,1357],{"class":168},[101,3420,1435],{"class":1188},[101,3422,1210],{"class":107},[101,3424,561],{"class":168},[101,3426,1782],{"class":111},[101,3428,1218],{"class":168},[101,3430,3432,3434,3436,3438,3440,3442],{"class":103,"line":3431},164,[101,3433,2555],{"class":168},[101,3435,1452],{"class":1188},[101,3437,1455],{"class":107},[101,3439,561],{"class":168},[101,3441,1797],{"class":111},[101,3443,1463],{"class":168},[101,3445,3447,3449,3451],{"class":103,"line":3446},165,[101,3448,2571],{"class":168},[101,3450,1435],{"class":1188},[101,3452,1218],{"class":168},[101,3454,3456,3458,3460],{"class":103,"line":3455},166,[101,3457,1424],{"class":168},[101,3459,1360],{"class":1188},[101,3461,1218],{"class":168},[101,3463,3465,3467,3469],{"class":103,"line":3464},167,[101,3466,1367],{"class":168},[101,3468,1487],{"class":1188},[101,3470,1218],{"class":168},[101,3472,3474,3476,3478,3480,3482,3484,3486,3488,3490],{"class":103,"line":3473},168,[101,3475,1745],{"class":168},[101,3477,1307],{"class":1188},[101,3479,1310],{"class":107},[101,3481,561],{"class":168},[101,3483,1323],{"class":111},[101,3485,1318],{"class":107},[101,3487,561],{"class":168},[101,3489,2490],{"class":111},[101,3491,1240],{"class":168},[101,3493,3495,3497,3499],{"class":103,"line":3494},169,[101,3496,1745],{"class":168},[101,3498,1391],{"class":1188},[101,3500,1218],{"class":168},[101,3502,3504,3506,3508,3510,3512,3514],{"class":103,"line":3503},170,[101,3505,2555],{"class":168},[101,3507,3395],{"class":1188},[101,3509,1412],{"class":107},[101,3511,561],{"class":168},[101,3513,3402],{"class":111},[101,3515,1240],{"class":168},[101,3517,3519,3521,3523],{"class":103,"line":3518},171,[101,3520,2530],{"class":168},[101,3522,1391],{"class":1188},[101,3524,1218],{"class":168},[101,3526,3528,3530,3532,3534,3536,3538],{"class":103,"line":3527},172,[101,3529,1357],{"class":168},[101,3531,1435],{"class":1188},[101,3533,1210],{"class":107},[101,3535,561],{"class":168},[101,3537,1782],{"class":111},[101,3539,1218],{"class":168},[101,3541,3543,3545,3547,3549,3551,3553],{"class":103,"line":3542},173,[101,3544,2555],{"class":168},[101,3546,1452],{"class":1188},[101,3548,1455],{"class":107},[101,3550,561],{"class":168},[101,3552,1797],{"class":111},[101,3554,1463],{"class":168},[101,3556,3558,3560,3562],{"class":103,"line":3557},174,[101,3559,2571],{"class":168},[101,3561,1435],{"class":1188},[101,3563,1218],{"class":168},[101,3565,3567,3569,3571],{"class":103,"line":3566},175,[101,3568,1424],{"class":168},[101,3570,1487],{"class":1188},[101,3572,1218],{"class":168},[101,3574,3576,3578,3580],{"class":103,"line":3575},176,[101,3577,1367],{"class":168},[101,3579,1596],{"class":1188},[101,3581,1218],{"class":168},[101,3583,3585,3587,3589,3591,3593,3595],{"class":103,"line":3584},177,[101,3586,1367],{"class":168},[101,3588,1605],{"class":1188},[101,3590,1608],{"class":107},[101,3592,561],{"class":168},[101,3594,1667],{"class":111},[101,3596,1240],{"class":168},[101,3598,3600,3602,3604,3606,3608,3610,3612,3614,3616,3618,3620,3622,3624,3626,3628,3630,3632,3634,3636,3638,3640],{"class":103,"line":3599},178,[101,3601,1367],{"class":168},[101,3603,1622],{"class":1188},[101,3605,1625],{"class":107},[101,3607,561],{"class":168},[101,3609,1967],{"class":111},[101,3611,1633],{"class":107},[101,3613,561],{"class":168},[101,3615,1638],{"class":111},[101,3617,1641],{"class":107},[101,3619,561],{"class":168},[101,3621,1638],{"class":111},[101,3623,1648],{"class":107},[101,3625,561],{"class":168},[101,3627,1986],{"class":111},[101,3629,1655],{"class":107},[101,3631,561],{"class":168},[101,3633,1638],{"class":111},[101,3635,1662],{"class":107},[101,3637,561],{"class":168},[101,3639,1999],{"class":111},[101,3641,1240],{"class":168},[101,3643,3645,3647,3649],{"class":103,"line":3644},179,[101,3646,1476],{"class":168},[101,3648,1596],{"class":1188},[101,3650,1218],{"class":168},[101,3652,3654,3656,3658],{"class":103,"line":3653},180,[101,3655,1330],{"class":168},[101,3657,1230],{"class":1188},[101,3659,1218],{"class":168},[101,3661,3663],{"class":103,"line":3662},181,[101,3664,307],{"emptyLinePlaceholder":306},[101,3666,3668,3670,3672,3674,3676,3679,3681,3683,3685],{"class":103,"line":3667},182,[101,3669,1227],{"class":168},[101,3671,1251],{"class":1188},[101,3673,1210],{"class":107},[101,3675,561],{"class":168},[101,3677,3678],{"class":111},"\"caster_joint\"",[101,3680,1112],{"class":107},[101,3682,561],{"class":168},[101,3684,1265],{"class":111},[101,3686,1218],{"class":168},[101,3688,3690,3692,3694,3696,3698,3700],{"class":103,"line":3689},183,[101,3691,1367],{"class":168},[101,3693,1275],{"class":1188},[101,3695,1278],{"class":107},[101,3697,561],{"class":168},[101,3699,1298],{"class":111},[101,3701,2062],{"class":168},[101,3703,3705,3707,3709,3711,3713,3715],{"class":103,"line":3704},184,[101,3706,1367],{"class":168},[101,3708,1291],{"class":1188},[101,3710,1278],{"class":107},[101,3712,561],{"class":168},[101,3714,3346],{"class":111},[101,3716,2062],{"class":168},[101,3718,3720,3722,3724,3726,3728,3731],{"class":103,"line":3719},185,[101,3721,1367],{"class":168},[101,3723,1307],{"class":1188},[101,3725,1310],{"class":107},[101,3727,561],{"class":168},[101,3729,3730],{"class":111},"\"0.06 0.0 -0.076\"",[101,3732,2062],{"class":168},[101,3734,3736,3738,3740,3742,3744,3746],{"class":103,"line":3735},186,[101,3737,1367],{"class":168},[101,3739,3212],{"class":1188},[101,3741,1310],{"class":107},[101,3743,561],{"class":168},[101,3745,3219],{"class":111},[101,3747,2062],{"class":168},[101,3749,3751,3753,3755],{"class":103,"line":3750},187,[101,3752,1330],{"class":168},[101,3754,1251],{"class":1188},[101,3756,1218],{"class":168},[101,3758,3760],{"class":103,"line":3759},188,[101,3761,307],{"emptyLinePlaceholder":306},[101,3763,3765,3767,3769,3772,3774,3776],{"class":103,"line":3764},189,[101,3766,1227],{"class":168},[101,3768,134],{"class":1188},[101,3770,3771],{"class":107}," reference",[101,3773,561],{"class":168},[101,3775,3346],{"class":111},[101,3777,1218],{"class":168},[101,3779,3781,3783,3785,3788,3790],{"class":103,"line":3780},190,[101,3782,1272],{"class":168},[101,3784,1435],{"class":1188},[101,3786,3787],{"class":168},">Gazebo\u002FBlack\u003C\u002F",[101,3789,1435],{"class":1188},[101,3791,1218],{"class":168},[101,3793,3795,3797,3799],{"class":103,"line":3794},191,[101,3796,1330],{"class":168},[101,3798,134],{"class":1188},[101,3800,1218],{"class":168},[101,3802,3804],{"class":103,"line":3803},192,[101,3805,307],{"emptyLinePlaceholder":306},[101,3807,3809,3811,3813,3815,3817,3819],{"class":103,"line":3808},193,[101,3810,1227],{"class":168},[101,3812,134],{"class":1188},[101,3814,3771],{"class":107},[101,3816,561],{"class":168},[101,3818,3346],{"class":111},[101,3820,1218],{"class":168},[101,3822,3824,3826,3829,3831,3833,3836],{"class":103,"line":3823},194,[101,3825,1272],{"class":168},[101,3827,3828],{"class":1188},"mu1",[101,3830,1608],{"class":107},[101,3832,561],{"class":168},[101,3834,3835],{"class":111},"\"0.0\"",[101,3837,1240],{"class":168},[101,3839,3841,3843,3846,3848,3850,3852],{"class":103,"line":3840},195,[101,3842,1272],{"class":168},[101,3844,3845],{"class":1188},"mu2",[101,3847,1608],{"class":107},[101,3849,561],{"class":168},[101,3851,3835],{"class":111},[101,3853,1240],{"class":168},[101,3855,3857,3859,3862,3864,3866,3869],{"class":103,"line":3856},196,[101,3858,1272],{"class":168},[101,3860,3861],{"class":1188},"kp",[101,3863,1608],{"class":107},[101,3865,561],{"class":168},[101,3867,3868],{"class":111},"\"1000000.0\"",[101,3870,2062],{"class":168},[101,3872,3874,3876,3879,3881,3883,3886],{"class":103,"line":3873},197,[101,3875,1272],{"class":168},[101,3877,3878],{"class":1188},"kd",[101,3880,1608],{"class":107},[101,3882,561],{"class":168},[101,3884,3885],{"class":111},"\"10.0\"",[101,3887,2062],{"class":168},[101,3889,3891],{"class":103,"line":3890},198,[101,3892,307],{"emptyLinePlaceholder":306},[101,3894,3896,3898,3900],{"class":103,"line":3895},199,[101,3897,1330],{"class":168},[101,3899,134],{"class":1188},[101,3901,1218],{"class":168},[101,3903,3905],{"class":103,"line":3904},200,[101,3906,307],{"emptyLinePlaceholder":306},[101,3908,3910,3912,3914],{"class":103,"line":3909},201,[101,3911,1227],{"class":168},[101,3913,134],{"class":1188},[101,3915,1218],{"class":168},[101,3917,3919,3921,3924,3926,3928,3931,3934,3936,3939],{"class":103,"line":3918},202,[101,3920,1272],{"class":168},[101,3922,3923],{"class":1188},"plugin",[101,3925,1210],{"class":107},[101,3927,561],{"class":168},[101,3929,3930],{"class":111},"'diff_drive'",[101,3932,3933],{"class":107}," filename",[101,3935,561],{"class":168},[101,3937,3938],{"class":111},"'libgazebo_ros_diff_drive.so'",[101,3940,1218],{"class":168},[101,3942,3944,3946,3949],{"class":103,"line":3943},203,[101,3945,1357],{"class":168},[101,3947,3948],{"class":1188},"ros",[101,3950,1218],{"class":168},[101,3952,3954,3956,3959,3962,3964],{"class":103,"line":3953},204,[101,3955,2555],{"class":168},[101,3957,3958],{"class":1188},"namespace",[101,3960,3961],{"class":168},">\u002F\u003C\u002F",[101,3963,3958],{"class":1188},[101,3965,1218],{"class":168},[101,3967,3969,3971,3974,3977,3979],{"class":103,"line":3968},205,[101,3970,2555],{"class":168},[101,3972,3973],{"class":1188},"remapping",[101,3975,3976],{"class":168},">cmd_vel:=cmd_vel\u003C\u002F",[101,3978,3973],{"class":1188},[101,3980,1218],{"class":168},[101,3982,3984,3986,3988,3991,3993],{"class":103,"line":3983},206,[101,3985,2555],{"class":168},[101,3987,3973],{"class":1188},[101,3989,3990],{"class":168},">odom:=odom\u003C\u002F",[101,3992,3973],{"class":1188},[101,3994,1218],{"class":168},[101,3996,3998,4000,4002],{"class":103,"line":3997},207,[101,3999,2571],{"class":168},[101,4001,3948],{"class":1188},[101,4003,1218],{"class":168},[101,4005,4007,4009,4012,4015,4017],{"class":103,"line":4006},208,[101,4008,1357],{"class":168},[101,4010,4011],{"class":1188},"update_rate",[101,4013,4014],{"class":168},">30\u003C\u002F",[101,4016,4011],{"class":1188},[101,4018,1218],{"class":168},[101,4020,4022],{"class":103,"line":4021},209,[101,4023,307],{"emptyLinePlaceholder":306},[101,4025,4027,4029,4032,4035,4037],{"class":103,"line":4026},210,[101,4028,1357],{"class":168},[101,4030,4031],{"class":1188},"left_joint",[101,4033,4034],{"class":168},">left_wheel_joint\u003C\u002F",[101,4036,4031],{"class":1188},[101,4038,1218],{"class":168},[101,4040,4042,4044,4047,4050,4052],{"class":103,"line":4041},211,[101,4043,1357],{"class":168},[101,4045,4046],{"class":1188},"right_joint",[101,4048,4049],{"class":168},">right_wheel_joint\u003C\u002F",[101,4051,4046],{"class":1188},[101,4053,1218],{"class":168},[101,4055,4057],{"class":103,"line":4056},212,[101,4058,307],{"emptyLinePlaceholder":306},[101,4060,4062,4064,4067,4070,4072],{"class":103,"line":4061},213,[101,4063,1357],{"class":168},[101,4065,4066],{"class":1188},"wheel_separation",[101,4068,4069],{"class":168},">0.2\u003C\u002F",[101,4071,4066],{"class":1188},[101,4073,1218],{"class":168},[101,4075,4077,4079,4082,4085,4087],{"class":103,"line":4076},214,[101,4078,1357],{"class":168},[101,4080,4081],{"class":1188},"wheel_diameter",[101,4083,4084],{"class":168},">0.065\u003C\u002F",[101,4086,4081],{"class":1188},[101,4088,1218],{"class":168},[101,4090,4092],{"class":103,"line":4091},215,[101,4093,307],{"emptyLinePlaceholder":306},[101,4095,4097,4099,4102,4105,4107],{"class":103,"line":4096},216,[101,4098,1357],{"class":168},[101,4100,4101],{"class":1188},"max_wheel_torque",[101,4103,4104],{"class":168},">20\u003C\u002F",[101,4106,4101],{"class":1188},[101,4108,1218],{"class":168},[101,4110,4112,4114,4117,4120,4122],{"class":103,"line":4111},217,[101,4113,1357],{"class":168},[101,4115,4116],{"class":1188},"max_wheel_acceleration",[101,4118,4119],{"class":168},">1.0\u003C\u002F",[101,4121,4116],{"class":1188},[101,4123,1218],{"class":168},[101,4125,4127],{"class":103,"line":4126},218,[101,4128,307],{"emptyLinePlaceholder":306},[101,4130,4132,4134,4137,4140,4142],{"class":103,"line":4131},219,[101,4133,1357],{"class":168},[101,4135,4136],{"class":1188},"publish_odom",[101,4138,4139],{"class":168},">true\u003C\u002F",[101,4141,4136],{"class":1188},[101,4143,1218],{"class":168},[101,4145,4147,4149,4152,4154,4156],{"class":103,"line":4146},220,[101,4148,1357],{"class":168},[101,4150,4151],{"class":1188},"publish_odom_tf",[101,4153,4139],{"class":168},[101,4155,4151],{"class":1188},[101,4157,1218],{"class":168},[101,4159,4161,4163,4166,4169,4171],{"class":103,"line":4160},221,[101,4162,1357],{"class":168},[101,4164,4165],{"class":1188},"publish_wheel_tf",[101,4167,4168],{"class":168},">false\u003C\u002F",[101,4170,4165],{"class":1188},[101,4172,1218],{"class":168},[101,4174,4176,4178,4181,4184,4186],{"class":103,"line":4175},222,[101,4177,1357],{"class":168},[101,4179,4180],{"class":1188},"odometry_frame",[101,4182,4183],{"class":168},">odom\u003C\u002F",[101,4185,4180],{"class":1188},[101,4187,1218],{"class":168},[101,4189,4191,4193,4196,4199,4201],{"class":103,"line":4190},223,[101,4192,1357],{"class":168},[101,4194,4195],{"class":1188},"robot_base_frame",[101,4197,4198],{"class":168},">base_footprint\u003C\u002F",[101,4200,4195],{"class":1188},[101,4202,1218],{"class":168},[101,4204,4206,4208,4210],{"class":103,"line":4205},224,[101,4207,1424],{"class":168},[101,4209,3923],{"class":1188},[101,4211,1218],{"class":168},[101,4213,4215],{"class":103,"line":4214},225,[101,4216,307],{"emptyLinePlaceholder":306},[101,4218,4220,4222,4224,4226,4228,4231,4233,4235,4238],{"class":103,"line":4219},226,[101,4221,1367],{"class":168},[101,4223,3923],{"class":1188},[101,4225,1210],{"class":107},[101,4227,561],{"class":168},[101,4229,4230],{"class":111},"\"fishbot_joint_state\"",[101,4232,3933],{"class":107},[101,4234,561],{"class":168},[101,4236,4237],{"class":111},"\"libgazebo_ros_joint_state_publisher.so\"",[101,4239,1218],{"class":168},[101,4241,4243,4245,4247],{"class":103,"line":4242},227,[101,4244,1745],{"class":168},[101,4246,3948],{"class":1188},[101,4248,1218],{"class":168},[101,4250,4252,4254,4256,4259,4261],{"class":103,"line":4251},228,[101,4253,1357],{"class":168},[101,4255,3973],{"class":1188},[101,4257,4258],{"class":168},">~\u002Fout:=joint_states\u003C\u002F",[101,4260,3973],{"class":1188},[101,4262,1218],{"class":168},[101,4264,4266,4268,4270],{"class":103,"line":4265},229,[101,4267,2530],{"class":168},[101,4269,3948],{"class":1188},[101,4271,1218],{"class":168},[101,4273,4275,4277,4279,4281,4283],{"class":103,"line":4274},230,[101,4276,1745],{"class":168},[101,4278,4011],{"class":1188},[101,4280,4014],{"class":168},[101,4282,4011],{"class":1188},[101,4284,1218],{"class":168},[101,4286,4288,4290,4293,4295,4297],{"class":103,"line":4287},231,[101,4289,1745],{"class":168},[101,4291,4292],{"class":1188},"joint_name",[101,4294,4049],{"class":168},[101,4296,4292],{"class":1188},[101,4298,1218],{"class":168},[101,4300,4302,4304,4306,4308,4310],{"class":103,"line":4301},232,[101,4303,1745],{"class":168},[101,4305,4292],{"class":1188},[101,4307,4034],{"class":168},[101,4309,4292],{"class":1188},[101,4311,1218],{"class":168},[101,4313,4315,4317,4319],{"class":103,"line":4314},233,[101,4316,1424],{"class":168},[101,4318,3923],{"class":1188},[101,4320,4321],{"class":168},">    \n",[101,4323,4325,4327,4329],{"class":103,"line":4324},234,[101,4326,1424],{"class":168},[101,4328,134],{"class":1188},[101,4330,4331],{"class":168},"> \n",[101,4333,4335],{"class":103,"line":4334},235,[101,4336,307],{"emptyLinePlaceholder":306},[101,4338,4340,4342,4344,4346,4348,4350],{"class":103,"line":4339},236,[101,4341,1367],{"class":168},[101,4343,134],{"class":1188},[101,4345,3771],{"class":107},[101,4347,561],{"class":168},[101,4349,1702],{"class":111},[101,4351,1218],{"class":168},[101,4353,4355,4357,4359,4361,4363],{"class":103,"line":4354},237,[101,4356,1745],{"class":168},[101,4358,1435],{"class":1188},[101,4360,3787],{"class":168},[101,4362,1435],{"class":1188},[101,4364,1218],{"class":168},[101,4366,4368,4370,4372],{"class":103,"line":4367},238,[101,4369,1424],{"class":168},[101,4371,134],{"class":1188},[101,4373,1218],{"class":168},[101,4375,4377],{"class":103,"line":4376},239,[101,4378,307],{"emptyLinePlaceholder":306},[101,4380,4382,4384,4386,4388,4390,4392],{"class":103,"line":4381},240,[101,4383,1272],{"class":168},[101,4385,134],{"class":1188},[101,4387,3771],{"class":107},[101,4389,561],{"class":168},[101,4391,2121],{"class":111},[101,4393,1218],{"class":168},[101,4395,4397,4399,4402,4404,4406,4409,4411,4413,4416],{"class":103,"line":4396},241,[101,4398,1367],{"class":168},[101,4400,4401],{"class":1188},"sensor",[101,4403,1210],{"class":107},[101,4405,561],{"class":168},[101,4407,4408],{"class":111},"\"imu_sensor\"",[101,4410,1112],{"class":107},[101,4412,561],{"class":168},[101,4414,4415],{"class":111},"\"imu\"",[101,4417,1218],{"class":168},[101,4419,4421,4423,4425,4427,4429,4432,4434,4436,4439],{"class":103,"line":4420},242,[101,4422,1367],{"class":168},[101,4424,3923],{"class":1188},[101,4426,3933],{"class":107},[101,4428,561],{"class":168},[101,4430,4431],{"class":111},"\"libgazebo_ros_imu_sensor.so\"",[101,4433,1210],{"class":107},[101,4435,561],{"class":168},[101,4437,4438],{"class":111},"\"imu_plugin\"",[101,4440,1218],{"class":168},[101,4442,4444,4446,4448],{"class":103,"line":4443},243,[101,4445,1357],{"class":168},[101,4447,3948],{"class":1188},[101,4449,1218],{"class":168},[101,4451,4453,4455,4457,4459,4461],{"class":103,"line":4452},244,[101,4454,2555],{"class":168},[101,4456,3958],{"class":1188},[101,4458,3961],{"class":168},[101,4460,3958],{"class":1188},[101,4462,1218],{"class":168},[101,4464,4466,4468,4470,4473,4475],{"class":103,"line":4465},245,[101,4467,2555],{"class":168},[101,4469,3973],{"class":1188},[101,4471,4472],{"class":168},">~\u002Fout:=imu\u003C\u002F",[101,4474,3973],{"class":1188},[101,4476,1218],{"class":168},[101,4478,4480,4482,4484],{"class":103,"line":4479},246,[101,4481,2571],{"class":168},[101,4483,3948],{"class":1188},[101,4485,1218],{"class":168},[101,4487,4489,4491,4494,4496,4498],{"class":103,"line":4488},247,[101,4490,1357],{"class":168},[101,4492,4493],{"class":1188},"initial_orientation_as_reference",[101,4495,4168],{"class":168},[101,4497,4493],{"class":1188},[101,4499,1218],{"class":168},[101,4501,4503,4505,4507],{"class":103,"line":4502},248,[101,4504,2530],{"class":168},[101,4506,3923],{"class":1188},[101,4508,1218],{"class":168},[101,4510,4512,4514,4517,4519,4521],{"class":103,"line":4511},249,[101,4513,1745],{"class":168},[101,4515,4516],{"class":1188},"always_on",[101,4518,4139],{"class":168},[101,4520,4516],{"class":1188},[101,4522,1218],{"class":168},[101,4524,4526,4528,4530,4533,4535],{"class":103,"line":4525},250,[101,4527,1745],{"class":168},[101,4529,4011],{"class":1188},[101,4531,4532],{"class":168},">100\u003C\u002F",[101,4534,4011],{"class":1188},[101,4536,1218],{"class":168},[101,4538,4540,4542,4545,4547,4549],{"class":103,"line":4539},251,[101,4541,1745],{"class":168},[101,4543,4544],{"class":1188},"visualize",[101,4546,4139],{"class":168},[101,4548,4544],{"class":1188},[101,4550,1218],{"class":168},[101,4552,4554,4556,4559],{"class":103,"line":4553},252,[101,4555,1745],{"class":168},[101,4557,4558],{"class":1188},"imu",[101,4560,1218],{"class":168},[101,4562,4564,4566,4569],{"class":103,"line":4563},253,[101,4565,1357],{"class":168},[101,4567,4568],{"class":1188},"angular_velocity",[101,4570,1218],{"class":168},[101,4572,4574,4576,4579],{"class":103,"line":4573},254,[101,4575,2555],{"class":168},[101,4577,4578],{"class":1188},"x",[101,4580,1218],{"class":168},[101,4582,4584,4586,4589,4591,4593,4596],{"class":103,"line":4583},255,[101,4585,1449],{"class":168},[101,4587,4588],{"class":1188},"noise",[101,4590,1112],{"class":107},[101,4592,561],{"class":168},[101,4594,4595],{"class":111},"\"gaussian\"",[101,4597,1218],{"class":168},[101,4599,4601,4603,4606,4609,4611],{"class":103,"line":4600},256,[101,4602,1398],{"class":168},[101,4604,4605],{"class":1188},"mean",[101,4607,4608],{"class":168},">0.0\u003C\u002F",[101,4610,4605],{"class":1188},[101,4612,1218],{"class":168},[101,4614,4616,4618,4621,4624,4626],{"class":103,"line":4615},257,[101,4617,1398],{"class":168},[101,4619,4620],{"class":1188},"stddev",[101,4622,4623],{"class":168},">2e-4\u003C\u002F",[101,4625,4620],{"class":1188},[101,4627,1218],{"class":168},[101,4629,4631,4633,4636,4639,4641],{"class":103,"line":4630},258,[101,4632,1398],{"class":168},[101,4634,4635],{"class":1188},"bias_mean",[101,4637,4638],{"class":168},">0.0000075\u003C\u002F",[101,4640,4635],{"class":1188},[101,4642,1218],{"class":168},[101,4644,4646,4648,4651,4654,4656],{"class":103,"line":4645},259,[101,4647,1398],{"class":168},[101,4649,4650],{"class":1188},"bias_stddev",[101,4652,4653],{"class":168},">0.0000008\u003C\u002F",[101,4655,4650],{"class":1188},[101,4657,1218],{"class":168},[101,4659,4661,4664,4666],{"class":103,"line":4660},260,[101,4662,4663],{"class":168},"              \u003C\u002F",[101,4665,4588],{"class":1188},[101,4667,1218],{"class":168},[101,4669,4671,4674,4676],{"class":103,"line":4670},261,[101,4672,4673],{"class":168},"            \u003C\u002F",[101,4675,4578],{"class":1188},[101,4677,1218],{"class":168},[101,4679,4681,4683,4686],{"class":103,"line":4680},262,[101,4682,2555],{"class":168},[101,4684,4685],{"class":1188},"y",[101,4687,1218],{"class":168},[101,4689,4691,4693,4695,4697,4699,4701],{"class":103,"line":4690},263,[101,4692,1449],{"class":168},[101,4694,4588],{"class":1188},[101,4696,1112],{"class":107},[101,4698,561],{"class":168},[101,4700,4595],{"class":111},[101,4702,1218],{"class":168},[101,4704,4706,4708,4710,4712,4714],{"class":103,"line":4705},264,[101,4707,1398],{"class":168},[101,4709,4605],{"class":1188},[101,4711,4608],{"class":168},[101,4713,4605],{"class":1188},[101,4715,1218],{"class":168},[101,4717,4719,4721,4723,4725,4727],{"class":103,"line":4718},265,[101,4720,1398],{"class":168},[101,4722,4620],{"class":1188},[101,4724,4623],{"class":168},[101,4726,4620],{"class":1188},[101,4728,1218],{"class":168},[101,4730,4732,4734,4736,4738,4740],{"class":103,"line":4731},266,[101,4733,1398],{"class":168},[101,4735,4635],{"class":1188},[101,4737,4638],{"class":168},[101,4739,4635],{"class":1188},[101,4741,1218],{"class":168},[101,4743,4745,4747,4749,4751,4753],{"class":103,"line":4744},267,[101,4746,1398],{"class":168},[101,4748,4650],{"class":1188},[101,4750,4653],{"class":168},[101,4752,4650],{"class":1188},[101,4754,1218],{"class":168},[101,4756,4758,4760,4762],{"class":103,"line":4757},268,[101,4759,4663],{"class":168},[101,4761,4588],{"class":1188},[101,4763,1218],{"class":168},[101,4765,4767,4769,4771],{"class":103,"line":4766},269,[101,4768,4673],{"class":168},[101,4770,4685],{"class":1188},[101,4772,1218],{"class":168},[101,4774,4776,4778,4781],{"class":103,"line":4775},270,[101,4777,2555],{"class":168},[101,4779,4780],{"class":1188},"z",[101,4782,1218],{"class":168},[101,4784,4786,4788,4790,4792,4794,4796],{"class":103,"line":4785},271,[101,4787,1449],{"class":168},[101,4789,4588],{"class":1188},[101,4791,1112],{"class":107},[101,4793,561],{"class":168},[101,4795,4595],{"class":111},[101,4797,1218],{"class":168},[101,4799,4801,4803,4805,4807,4809],{"class":103,"line":4800},272,[101,4802,1398],{"class":168},[101,4804,4605],{"class":1188},[101,4806,4608],{"class":168},[101,4808,4605],{"class":1188},[101,4810,1218],{"class":168},[101,4812,4814,4816,4818,4820,4822],{"class":103,"line":4813},273,[101,4815,1398],{"class":168},[101,4817,4620],{"class":1188},[101,4819,4623],{"class":168},[101,4821,4620],{"class":1188},[101,4823,1218],{"class":168},[101,4825,4827,4829,4831,4833,4835],{"class":103,"line":4826},274,[101,4828,1398],{"class":168},[101,4830,4635],{"class":1188},[101,4832,4638],{"class":168},[101,4834,4635],{"class":1188},[101,4836,1218],{"class":168},[101,4838,4840,4842,4844,4846,4848],{"class":103,"line":4839},275,[101,4841,1398],{"class":168},[101,4843,4650],{"class":1188},[101,4845,4653],{"class":168},[101,4847,4650],{"class":1188},[101,4849,1218],{"class":168},[101,4851,4853,4855,4857],{"class":103,"line":4852},276,[101,4854,4663],{"class":168},[101,4856,4588],{"class":1188},[101,4858,1218],{"class":168},[101,4860,4862,4864,4866],{"class":103,"line":4861},277,[101,4863,4673],{"class":168},[101,4865,4780],{"class":1188},[101,4867,1218],{"class":168},[101,4869,4871,4873,4875],{"class":103,"line":4870},278,[101,4872,2571],{"class":168},[101,4874,4568],{"class":1188},[101,4876,1218],{"class":168},[101,4878,4880,4882,4885],{"class":103,"line":4879},279,[101,4881,1357],{"class":168},[101,4883,4884],{"class":1188},"linear_acceleration",[101,4886,1218],{"class":168},[101,4888,4890,4892,4894],{"class":103,"line":4889},280,[101,4891,2555],{"class":168},[101,4893,4578],{"class":1188},[101,4895,1218],{"class":168},[101,4897,4899,4901,4903,4905,4907,4909],{"class":103,"line":4898},281,[101,4900,1449],{"class":168},[101,4902,4588],{"class":1188},[101,4904,1112],{"class":107},[101,4906,561],{"class":168},[101,4908,4595],{"class":111},[101,4910,1218],{"class":168},[101,4912,4914,4916,4918,4920,4922],{"class":103,"line":4913},282,[101,4915,1398],{"class":168},[101,4917,4605],{"class":1188},[101,4919,4608],{"class":168},[101,4921,4605],{"class":1188},[101,4923,1218],{"class":168},[101,4925,4927,4929,4931,4934,4936],{"class":103,"line":4926},283,[101,4928,1398],{"class":168},[101,4930,4620],{"class":1188},[101,4932,4933],{"class":168},">1.7e-2\u003C\u002F",[101,4935,4620],{"class":1188},[101,4937,1218],{"class":168},[101,4939,4941,4943,4945,4948,4950],{"class":103,"line":4940},284,[101,4942,1398],{"class":168},[101,4944,4635],{"class":1188},[101,4946,4947],{"class":168},">0.1\u003C\u002F",[101,4949,4635],{"class":1188},[101,4951,1218],{"class":168},[101,4953,4955,4957,4959,4962,4964],{"class":103,"line":4954},285,[101,4956,1398],{"class":168},[101,4958,4650],{"class":1188},[101,4960,4961],{"class":168},">0.001\u003C\u002F",[101,4963,4650],{"class":1188},[101,4965,1218],{"class":168},[101,4967,4969,4971,4973],{"class":103,"line":4968},286,[101,4970,4663],{"class":168},[101,4972,4588],{"class":1188},[101,4974,1218],{"class":168},[101,4976,4978,4980,4982],{"class":103,"line":4977},287,[101,4979,4673],{"class":168},[101,4981,4578],{"class":1188},[101,4983,1218],{"class":168},[101,4985,4987,4989,4991],{"class":103,"line":4986},288,[101,4988,2555],{"class":168},[101,4990,4685],{"class":1188},[101,4992,1218],{"class":168},[101,4994,4996,4998,5000,5002,5004,5006],{"class":103,"line":4995},289,[101,4997,1449],{"class":168},[101,4999,4588],{"class":1188},[101,5001,1112],{"class":107},[101,5003,561],{"class":168},[101,5005,4595],{"class":111},[101,5007,1218],{"class":168},[101,5009,5011,5013,5015,5017,5019],{"class":103,"line":5010},290,[101,5012,1398],{"class":168},[101,5014,4605],{"class":1188},[101,5016,4608],{"class":168},[101,5018,4605],{"class":1188},[101,5020,1218],{"class":168},[101,5022,5024,5026,5028,5030,5032],{"class":103,"line":5023},291,[101,5025,1398],{"class":168},[101,5027,4620],{"class":1188},[101,5029,4933],{"class":168},[101,5031,4620],{"class":1188},[101,5033,1218],{"class":168},[101,5035,5037,5039,5041,5043,5045],{"class":103,"line":5036},292,[101,5038,1398],{"class":168},[101,5040,4635],{"class":1188},[101,5042,4947],{"class":168},[101,5044,4635],{"class":1188},[101,5046,1218],{"class":168},[101,5048,5050,5052,5054,5056,5058],{"class":103,"line":5049},293,[101,5051,1398],{"class":168},[101,5053,4650],{"class":1188},[101,5055,4961],{"class":168},[101,5057,4650],{"class":1188},[101,5059,1218],{"class":168},[101,5061,5063,5065,5067],{"class":103,"line":5062},294,[101,5064,4663],{"class":168},[101,5066,4588],{"class":1188},[101,5068,1218],{"class":168},[101,5070,5072,5074,5076],{"class":103,"line":5071},295,[101,5073,4673],{"class":168},[101,5075,4685],{"class":1188},[101,5077,1218],{"class":168},[101,5079,5081,5083,5085],{"class":103,"line":5080},296,[101,5082,2555],{"class":168},[101,5084,4780],{"class":1188},[101,5086,1218],{"class":168},[101,5088,5090,5092,5094,5096,5098,5100],{"class":103,"line":5089},297,[101,5091,1449],{"class":168},[101,5093,4588],{"class":1188},[101,5095,1112],{"class":107},[101,5097,561],{"class":168},[101,5099,4595],{"class":111},[101,5101,1218],{"class":168},[101,5103,5105,5107,5109,5111,5113],{"class":103,"line":5104},298,[101,5106,1398],{"class":168},[101,5108,4605],{"class":1188},[101,5110,4608],{"class":168},[101,5112,4605],{"class":1188},[101,5114,1218],{"class":168},[101,5116,5118,5120,5122,5124,5126],{"class":103,"line":5117},299,[101,5119,1398],{"class":168},[101,5121,4620],{"class":1188},[101,5123,4933],{"class":168},[101,5125,4620],{"class":1188},[101,5127,1218],{"class":168},[101,5129,5131,5133,5135,5137,5139],{"class":103,"line":5130},300,[101,5132,1398],{"class":168},[101,5134,4635],{"class":1188},[101,5136,4947],{"class":168},[101,5138,4635],{"class":1188},[101,5140,1218],{"class":168},[101,5142,5144,5146,5148,5150,5152],{"class":103,"line":5143},301,[101,5145,1398],{"class":168},[101,5147,4650],{"class":1188},[101,5149,4961],{"class":168},[101,5151,4650],{"class":1188},[101,5153,1218],{"class":168},[101,5155,5157,5159,5161],{"class":103,"line":5156},302,[101,5158,4663],{"class":168},[101,5160,4588],{"class":1188},[101,5162,1218],{"class":168},[101,5164,5166,5168,5170],{"class":103,"line":5165},303,[101,5167,4673],{"class":168},[101,5169,4780],{"class":1188},[101,5171,1218],{"class":168},[101,5173,5175,5177,5179],{"class":103,"line":5174},304,[101,5176,2571],{"class":168},[101,5178,4884],{"class":1188},[101,5180,1218],{"class":168},[101,5182,5184,5186,5188],{"class":103,"line":5183},305,[101,5185,2530],{"class":168},[101,5187,4558],{"class":1188},[101,5189,1218],{"class":168},[101,5191,5193,5195,5197],{"class":103,"line":5192},306,[101,5194,1424],{"class":168},[101,5196,4401],{"class":1188},[101,5198,1218],{"class":168},[101,5200,5202,5204,5206],{"class":103,"line":5201},307,[101,5203,1476],{"class":168},[101,5205,134],{"class":1188},[101,5207,1218],{"class":168},[101,5209,5211],{"class":103,"line":5210},308,[101,5212,307],{"emptyLinePlaceholder":306},[101,5214,5216,5218,5220,5222,5224,5226],{"class":103,"line":5215},309,[101,5217,1272],{"class":168},[101,5219,134],{"class":1188},[101,5221,3771],{"class":107},[101,5223,561],{"class":168},[101,5225,1702],{"class":111},[101,5227,1218],{"class":168},[101,5229,5231,5233,5235,5237,5239,5242,5244,5246,5249],{"class":103,"line":5230},310,[101,5232,1367],{"class":168},[101,5234,4401],{"class":1188},[101,5236,1210],{"class":107},[101,5238,561],{"class":168},[101,5240,5241],{"class":111},"\"laser_sensor\"",[101,5243,1112],{"class":107},[101,5245,561],{"class":168},[101,5247,5248],{"class":111},"\"ray\"",[101,5250,1218],{"class":168},[101,5252,5254,5256,5258,5260,5262],{"class":103,"line":5253},311,[101,5255,1367],{"class":168},[101,5257,4516],{"class":1188},[101,5259,4139],{"class":168},[101,5261,4516],{"class":1188},[101,5263,1218],{"class":168},[101,5265,5267,5269,5271,5273,5275],{"class":103,"line":5266},312,[101,5268,1367],{"class":168},[101,5270,4544],{"class":1188},[101,5272,4139],{"class":168},[101,5274,4544],{"class":1188},[101,5276,1218],{"class":168},[101,5278,5280,5282,5284,5287,5289],{"class":103,"line":5279},313,[101,5281,1367],{"class":168},[101,5283,4011],{"class":1188},[101,5285,5286],{"class":168},">5\u003C\u002F",[101,5288,4011],{"class":1188},[101,5290,1218],{"class":168},[101,5292,5294,5296,5299,5302,5304],{"class":103,"line":5293},314,[101,5295,1367],{"class":168},[101,5297,5298],{"class":1188},"pose",[101,5300,5301],{"class":168},">0 0 0.075 0 0 0\u003C\u002F",[101,5303,5298],{"class":1188},[101,5305,1218],{"class":168},[101,5307,5309,5311,5314],{"class":103,"line":5308},315,[101,5310,1367],{"class":168},[101,5312,5313],{"class":1188},"ray",[101,5315,1218],{"class":168},[101,5317,5319,5321,5324],{"class":103,"line":5318},316,[101,5320,1357],{"class":168},[101,5322,5323],{"class":1188},"scan",[101,5325,1218],{"class":168},[101,5327,5329,5331,5334],{"class":103,"line":5328},317,[101,5330,2555],{"class":168},[101,5332,5333],{"class":1188},"horizontal",[101,5335,1218],{"class":168},[101,5337,5339,5341,5344,5347,5349],{"class":103,"line":5338},318,[101,5340,1449],{"class":168},[101,5342,5343],{"class":1188},"samples",[101,5345,5346],{"class":168},">360\u003C\u002F",[101,5348,5343],{"class":1188},[101,5350,1218],{"class":168},[101,5352,5354,5356,5359,5362,5364],{"class":103,"line":5353},319,[101,5355,1449],{"class":168},[101,5357,5358],{"class":1188},"resolution",[101,5360,5361],{"class":168},">1.000000\u003C\u002F",[101,5363,5358],{"class":1188},[101,5365,1218],{"class":168},[101,5367,5369,5371,5374,5377,5379],{"class":103,"line":5368},320,[101,5370,1449],{"class":168},[101,5372,5373],{"class":1188},"min_angle",[101,5375,5376],{"class":168},">0.000000\u003C\u002F",[101,5378,5373],{"class":1188},[101,5380,1218],{"class":168},[101,5382,5384,5386,5389,5392,5394],{"class":103,"line":5383},321,[101,5385,1449],{"class":168},[101,5387,5388],{"class":1188},"max_angle",[101,5390,5391],{"class":168},">6.280000\u003C\u002F",[101,5393,5388],{"class":1188},[101,5395,1218],{"class":168},[101,5397,5399,5401,5403],{"class":103,"line":5398},322,[101,5400,4673],{"class":168},[101,5402,5333],{"class":1188},[101,5404,1218],{"class":168},[101,5406,5408,5410,5412],{"class":103,"line":5407},323,[101,5409,2571],{"class":168},[101,5411,5323],{"class":1188},[101,5413,1218],{"class":168},[101,5415,5417,5419,5422],{"class":103,"line":5416},324,[101,5418,1357],{"class":168},[101,5420,5421],{"class":1188},"range",[101,5423,1218],{"class":168},[101,5425,5427,5429,5432,5435,5437],{"class":103,"line":5426},325,[101,5428,2555],{"class":168},[101,5430,5431],{"class":1188},"min",[101,5433,5434],{"class":168},">0.120000\u003C\u002F",[101,5436,5431],{"class":1188},[101,5438,1218],{"class":168},[101,5440,5442,5444,5447,5450,5452],{"class":103,"line":5441},326,[101,5443,2555],{"class":168},[101,5445,5446],{"class":1188},"max",[101,5448,5449],{"class":168},">3.5\u003C\u002F",[101,5451,5446],{"class":1188},[101,5453,1218],{"class":168},[101,5455,5457,5459,5461,5464,5466],{"class":103,"line":5456},327,[101,5458,2555],{"class":168},[101,5460,5358],{"class":1188},[101,5462,5463],{"class":168},">0.015000\u003C\u002F",[101,5465,5358],{"class":1188},[101,5467,1218],{"class":168},[101,5469,5471,5473,5475],{"class":103,"line":5470},328,[101,5472,2571],{"class":168},[101,5474,5421],{"class":1188},[101,5476,1218],{"class":168},[101,5478,5480,5482,5484],{"class":103,"line":5479},329,[101,5481,1357],{"class":168},[101,5483,4588],{"class":1188},[101,5485,1218],{"class":168},[101,5487,5489,5491,5494,5497,5499],{"class":103,"line":5488},330,[101,5490,2555],{"class":168},[101,5492,5493],{"class":1188},"type",[101,5495,5496],{"class":168},">gaussian\u003C\u002F",[101,5498,5493],{"class":1188},[101,5500,1218],{"class":168},[101,5502,5504,5506,5508,5510,5512],{"class":103,"line":5503},331,[101,5505,2555],{"class":168},[101,5507,4605],{"class":1188},[101,5509,4608],{"class":168},[101,5511,4605],{"class":1188},[101,5513,1218],{"class":168},[101,5515,5517,5519,5521,5524,5526],{"class":103,"line":5516},332,[101,5518,2555],{"class":168},[101,5520,4620],{"class":1188},[101,5522,5523],{"class":168},">0.01\u003C\u002F",[101,5525,4620],{"class":1188},[101,5527,1218],{"class":168},[101,5529,5531,5533,5535],{"class":103,"line":5530},333,[101,5532,2571],{"class":168},[101,5534,4588],{"class":1188},[101,5536,1218],{"class":168},[101,5538,5540,5542,5544],{"class":103,"line":5539},334,[101,5541,1424],{"class":168},[101,5543,5313],{"class":1188},[101,5545,1218],{"class":168},[101,5547,5549],{"class":103,"line":5548},335,[101,5550,307],{"emptyLinePlaceholder":306},[101,5552,5554,5556,5558,5560,5562,5565,5567,5569,5572],{"class":103,"line":5553},336,[101,5555,1367],{"class":168},[101,5557,3923],{"class":1188},[101,5559,1210],{"class":107},[101,5561,561],{"class":168},[101,5563,5564],{"class":111},"\"laserscan\"",[101,5566,3933],{"class":107},[101,5568,561],{"class":168},[101,5570,5571],{"class":111},"\"libgazebo_ros_ray_sensor.so\"",[101,5573,1218],{"class":168},[101,5575,5577,5579,5581],{"class":103,"line":5576},337,[101,5578,1745],{"class":168},[101,5580,3948],{"class":1188},[101,5582,1218],{"class":168},[101,5584,5586],{"class":103,"line":5585},338,[101,5587,307],{"emptyLinePlaceholder":306},[101,5589,5591,5593,5595,5598,5600],{"class":103,"line":5590},339,[101,5592,1357],{"class":168},[101,5594,3973],{"class":1188},[101,5596,5597],{"class":168},">~\u002Fout:=scan\u003C\u002F",[101,5599,3973],{"class":1188},[101,5601,1218],{"class":168},[101,5603,5605,5607,5609],{"class":103,"line":5604},340,[101,5606,2530],{"class":168},[101,5608,3948],{"class":1188},[101,5610,1218],{"class":168},[101,5612,5614,5616,5619,5622,5624],{"class":103,"line":5613},341,[101,5615,1745],{"class":168},[101,5617,5618],{"class":1188},"output_type",[101,5620,5621],{"class":168},">sensor_msgs\u002FLaserScan\u003C\u002F",[101,5623,5618],{"class":1188},[101,5625,1218],{"class":168},[101,5627,5629,5631,5634,5637,5639],{"class":103,"line":5628},342,[101,5630,1745],{"class":168},[101,5632,5633],{"class":1188},"frame_name",[101,5635,5636],{"class":168},">laser_link\u003C\u002F",[101,5638,5633],{"class":1188},[101,5640,1218],{"class":168},[101,5642,5644,5646,5648],{"class":103,"line":5643},343,[101,5645,1424],{"class":168},[101,5647,3923],{"class":1188},[101,5649,1218],{"class":168},[101,5651,5653,5655,5657],{"class":103,"line":5652},344,[101,5654,1424],{"class":168},[101,5656,4401],{"class":1188},[101,5658,1218],{"class":168},[101,5660,5662,5664,5666],{"class":103,"line":5661},345,[101,5663,1476],{"class":168},[101,5665,134],{"class":1188},[101,5667,1218],{"class":168},[101,5669,5671],{"class":103,"line":5670},346,[101,5672,307],{"emptyLinePlaceholder":306},[101,5674,5676,5679,5681],{"class":103,"line":5675},347,[101,5677,5678],{"class":168},"\u003C\u002F",[101,5680,1207],{"class":1188},[101,5682,1218],{"class":168},[23,5684,5685],{},"看到这里你是不是迫不及待敲起来命令行来加载我们的机器人到gazebo了，别着急，小鱼再推荐一个可视化服务请求工具，其实在第六章中小鱼介绍过，在rqt工具集里有一个叫服务请求工具。",[23,5687,5688],{},"命令行输入rqt，在插件选项中选择Services->Service Caller,然后再下拉框选择\u002Fspawn_entity服务，即可看到下面的界面。",[23,5690,5691],{},[55,5692],{"alt":57,"src":5693},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1633.webp",[23,5695,5696],{},"接着我们把我们的FishBot的URDF模型复制粘贴，放到xml中（注意要把原来的''删掉哦！）",[23,5698,5699],{},[55,5700],{"alt":57,"src":5701},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1634.webp",[23,5703,5704],{},"然后点右上角的call，可以显示下图成功了。",[23,5706,5707],{},[55,5708],{"alt":57,"src":5709},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1635.webp",[23,5711,5712],{},"接着就可以看到工厂返回说成功把机器人制作出来送入gazebo了。",[23,5714,5715],{},"此时再看我们的Gazebo,一个小小的，白白的机器人出现了。",[23,5717,5718],{},[55,5719],{"alt":57,"src":5720},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1636.webp",[23,5722,5723],{},"shift+鼠标左键，或者直接点滚轮中键，都可以拖动视角。很多玩过第三人称游戏的学弟学妹肯定都不陌生这种操控吧。",[84,5725,5726],{"id":5726},"在不同位置加载多个机器人",[23,5728,5729],{},"可以再生产一个fishbot（为了后面需要多机器人仿真的小伙伴）。",[23,5731,5732],{},"修改rqt中的参数，增加一个命名空间，然后修改一个位置，让第二个机器人和第一个相距1m的地方生产，然后点击Call。",[23,5734,5735],{},[55,5736],{"alt":57,"src":5737},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1637.webp",[23,5739,5740],{},"返回成功，此时拖送Gazebo观察一下，发现多出了一个机器人，距离刚好是在X轴（红色）1米（一个小格子一米）处。",[23,5742,5743],{},[55,5744],{"alt":57,"src":5745},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1638.webp",[84,5747,5748],{"id":5748},"查询和删除机器人",[23,5750,5751],{},"利用rqt工具，我们再对另外两个服务接口进行请求。",[23,5753,5754],{},"首先先查询有几个模型在仿真环境中",[23,5756,5757],{},[55,5758],{"alt":57,"src":5759},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1639.webp",[23,5761,5762],{},"查到了三个模型，一个大地，一个fishbot，一个fishbot_0。",[23,5764,5765],{},"我们接着尝试把fishbot_0删掉，选择删除实体，输入fishbot_0的名字，拿起小电话通知工厂回收我们的0号fishbot。",[23,5767,5768],{},[55,5769],{"alt":57,"src":5770},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1640.webp",[23,5772,5773],{},"调用成功，观察gazebo发现机器人，人没了",[23,5775,5776],{},[55,5777],{"alt":57,"src":5778},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1641.webp",[84,5780,5781],{"id":5781},"创建工作空间",[23,5783,5784,5785],{},"本节代码参考鱼香ROS：",[15,5786,5787],{"href":5787,"rel":5788},"https:\u002F\u002Fgithub.com\u002Ffishros\u002Ffishbot\u002Ftree\u002Fnavgation2",[19],[92,5790,5792],{"className":94,"code":5791,"language":96,"meta":57,"style":57},"\n# 创建工作空间\nmkdir -p ws_simulations\u002Fsrc\ncd ws_simulations\u002Fsrc\n",[98,5793,5794,5798,5803,5814],{"__ignoreMap":57},[101,5795,5796],{"class":103,"line":104},[101,5797,307],{"emptyLinePlaceholder":306},[101,5799,5800],{"class":103,"line":229},[101,5801,5802],{"class":225},"# 创建工作空间\n",[101,5804,5805,5808,5811],{"class":103,"line":257},[101,5806,5807],{"class":107},"mkdir",[101,5809,5810],{"class":137}," -p",[101,5812,5813],{"class":111}," ws_simulations\u002Fsrc\n",[101,5815,5816,5819],{"class":103,"line":272},[101,5817,5818],{"class":137},"cd",[101,5820,5813],{"class":111},[23,5822,5823],{},"创建功能包",[92,5825,5827],{"className":94,"code":5826,"language":96,"meta":57,"style":57},"ros2 pkg create fishbot_description --build-type ament_cmake\ncd fishbot_description\n",[98,5828,5829,5848],{"__ignoreMap":57},[101,5830,5831,5833,5836,5839,5842,5845],{"class":103,"line":104},[101,5832,1043],{"class":107},[101,5834,5835],{"class":111}," pkg",[101,5837,5838],{"class":111}," create",[101,5840,5841],{"class":111}," fishbot_description",[101,5843,5844],{"class":137}," --build-type",[101,5846,5847],{"class":111}," ament_cmake\n",[101,5849,5850,5852],{"class":103,"line":229},[101,5851,5818],{"class":137},[101,5853,5854],{"class":111}," fishbot_description\n",[23,5856,5857],{},"然后配置package.xml",[92,5859,5861],{"className":1176,"code":5860,"language":1178,"meta":57,"style":57},"  \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",[98,5862,5863,5877,5890,5903,5916],{"__ignoreMap":57},[101,5864,5865,5867,5870,5873,5875],{"class":103,"line":104},[101,5866,1227],{"class":168},[101,5868,5869],{"class":1188},"exec_depend",[101,5871,5872],{"class":168},">rviz2\u003C\u002F",[101,5874,5869],{"class":1188},[101,5876,1218],{"class":168},[101,5878,5879,5881,5883,5886,5888],{"class":103,"line":229},[101,5880,1227],{"class":168},[101,5882,5869],{"class":1188},[101,5884,5885],{"class":168},">xacro\u003C\u002F",[101,5887,5869],{"class":1188},[101,5889,1218],{"class":168},[101,5891,5892,5894,5896,5899,5901],{"class":103,"line":257},[101,5893,1227],{"class":168},[101,5895,5869],{"class":1188},[101,5897,5898],{"class":168},">robot_state_publisher\u003C\u002F",[101,5900,5869],{"class":1188},[101,5902,1218],{"class":168},[101,5904,5905,5907,5909,5912,5914],{"class":103,"line":272},[101,5906,1227],{"class":168},[101,5908,5869],{"class":1188},[101,5910,5911],{"class":168},">joint_state_publisher\u003C\u002F",[101,5913,5869],{"class":1188},[101,5915,1218],{"class":168},[101,5917,5918,5920,5922,5925,5927],{"class":103,"line":284},[101,5919,1227],{"class":168},[101,5921,5869],{"class":1188},[101,5923,5924],{"class":168},">ros2launch\u003C\u002F",[101,5926,5869],{"class":1188},[101,5928,1218],{"class":168},[23,5930,5931],{},[55,5932],{"alt":57,"src":5933},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1642.webp",[23,5935,5936],{},"然后修改cmakelists.txt",[92,5938,5940],{"className":94,"code":5939,"language":96,"meta":57,"style":57},"install(\n  DIRECTORY launch urdf rviz meshes\n  DESTINATION share\u002F${PROJECT_NAME}  \n)\n",[98,5941,5942,5947,5964,5975],{"__ignoreMap":57},[101,5943,5944],{"class":103,"line":104},[101,5945,5946],{"class":107},"install(\n",[101,5948,5949,5952,5955,5958,5961],{"class":103,"line":229},[101,5950,5951],{"class":107},"  DIRECTORY",[101,5953,5954],{"class":111}," launch",[101,5956,5957],{"class":111}," urdf",[101,5959,5960],{"class":111}," rviz",[101,5962,5963],{"class":111}," meshes\n",[101,5965,5966,5969,5972],{"class":103,"line":257},[101,5967,5968],{"class":107},"  DESTINATION",[101,5970,5971],{"class":111}," share\u002F",[101,5973,5974],{"class":168},"${PROJECT_NAME}  \n",[101,5976,5977],{"class":103,"line":272},[101,5978,5979],{"class":168},")\n",[23,5981,5982],{},[55,5983],{"alt":57,"src":5984},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1643.webp",[23,5986,5987],{},"克隆下鱼香ROS的仓库，并复制下里面的文件到咱们的目录下。这都是上一节的东西，与本节学习无关，直接复制就行。",[23,5989,5990],{},[55,5991],{"alt":57,"src":5992},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1644.webp",[23,5994,5995,5996,5999,6000,6003],{},"打开工作空间，在",[98,5997,5998],{},"src\u002Ffishbot_description\u002Flaunch","中添加一个",[98,6001,6002],{},"gazebo.launch.py","文件，我们开始编写launch文件来在gazebo中加载机器人模型。",[23,6005,6006],{},"我们主要需要做两件事：",[6008,6009,6010],"ol",{},[1084,6011,6012],{},"启动gazebo，我们可以将命令行写成一个launch节点",[92,6014,6018],{"className":6015,"code":6016,"language":6017,"meta":57,"style":57},"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",[98,6019,6020,6025,6068],{"__ignoreMap":57},[101,6021,6022],{"class":103,"line":104},[101,6023,6024],{"class":168},"ExecuteProcess(\n",[101,6026,6027,6031,6033,6036,6039,6042,6045,6048,6051,6053,6056,6058,6060,6062,6065],{"class":103,"line":229},[101,6028,6030],{"class":6029},"s4XuR","        cmd",[101,6032,561],{"class":164},[101,6034,6035],{"class":168},"[",[101,6037,6038],{"class":111},"'gazebo'",[101,6040,6041],{"class":168},", ",[101,6043,6044],{"class":111},"'--verbose'",[101,6046,6047],{"class":168},",",[101,6049,6050],{"class":111},"'-s'",[101,6052,6041],{"class":168},[101,6054,6055],{"class":111},"'libgazebo_ros_init.so'",[101,6057,6041],{"class":168},[101,6059,6050],{"class":111},[101,6061,6041],{"class":168},[101,6063,6064],{"class":111},"'libgazebo_ros_factory.so'",[101,6066,6067],{"class":168},", gazebo_world_path],\n",[101,6069,6070,6073,6075,6078],{"class":103,"line":257},[101,6071,6072],{"class":6029},"        output",[101,6074,561],{"class":164},[101,6076,6077],{"class":111},"'screen'",[101,6079,5979],{"class":168},[6008,6081,6082],{"start":229},[1084,6083,6084,6085,6088],{},"上面我们加载机器人是直接将XML格式的URDF复制过去进行加载的，这样很不方便，我们可以使用gazebo_ros为我们提供好的一个叫做",[98,6086,6087],{},"spawn_entity.py","节点，该节点支持从文件地址直接生产机器人到Gazebo。",[23,6090,6091],{},"该节点需要两个参数，一个机器人的模型名字和urdf的文件地址，这个简单，前面我们曾经使用package_share来拼接过urdf路径。",[92,6093,6095],{"className":6015,"code":6094,"language":6017,"meta":57,"style":57},"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",[98,6096,6097,6107,6120,6133],{"__ignoreMap":57},[101,6098,6099,6102,6104],{"class":103,"line":104},[101,6100,6101],{"class":168},"spawn_entity_cmd ",[101,6103,561],{"class":164},[101,6105,6106],{"class":168}," Node(\n",[101,6108,6109,6112,6114,6117],{"class":103,"line":229},[101,6110,6111],{"class":6029},"    package",[101,6113,561],{"class":164},[101,6115,6116],{"class":111},"'gazebo_ros'",[101,6118,6119],{"class":168},", \n",[101,6121,6122,6125,6127,6130],{"class":103,"line":257},[101,6123,6124],{"class":6029},"    executable",[101,6126,561],{"class":164},[101,6128,6129],{"class":111},"'spawn_entity.py'",[101,6131,6132],{"class":168},",\n",[101,6134,6135,6138,6140,6142,6145,6148,6151,6154,6157,6159,6161],{"class":103,"line":272},[101,6136,6137],{"class":6029},"    arguments",[101,6139,561],{"class":164},[101,6141,6035],{"class":168},[101,6143,6144],{"class":111},"'-entity'",[101,6146,6147],{"class":168},", robot_name_in_model,  ",[101,6149,6150],{"class":111},"'-file'",[101,6152,6153],{"class":168},", urdf_model_path ], ",[101,6155,6156],{"class":6029},"output",[101,6158,561],{"class":164},[101,6160,6077],{"class":111},[101,6162,5979],{"class":168},[23,6164,6165],{},"先加载赵虚左老师的模板",[23,6167,6168],{},[55,6169],{"alt":57,"src":6170},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1645.webp",[23,6172,6173],{},"我们首先需要ExecuteProcess来输入终端命令，所以要先把from launch.actions import ExecuteProcess的注释先打开。",[23,6175,6176],{},"为了方便修改加载的机器人模型和urdf,我们还需要使用share目录，所以也要把from ament_index_python.packages import get_package_share_directory的注释打开，并import os。",[23,6178,6179],{},"写完后的launch文件如下：",[92,6181,6183],{"className":6015,"code":6182,"language":6017,"meta":57,"style":57},"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",[98,6184,6185,6198,6210,6214,6219,6231,6235,6240,6244,6249,6253,6258,6262,6267,6271,6276,6280,6285,6289,6294,6298,6303,6307,6312,6316,6321,6325,6330,6334,6339,6343,6348,6352,6357,6369,6376,6380,6391,6401,6411,6421,6425,6454,6481,6485,6490,6500,6533,6543,6547,6552,6561,6572,6583,6608,6612],{"__ignoreMap":57},[101,6186,6187,6189,6192,6195],{"class":103,"line":104},[101,6188,931],{"class":164},[101,6190,6191],{"class":168}," launch ",[101,6193,6194],{"class":164},"import",[101,6196,6197],{"class":168}," LaunchDescription\n",[101,6199,6200,6202,6205,6207],{"class":103,"line":229},[101,6201,931],{"class":164},[101,6203,6204],{"class":168}," launch_ros.actions ",[101,6206,6194],{"class":164},[101,6208,6209],{"class":168}," Node\n",[101,6211,6212],{"class":103,"line":257},[101,6213,307],{"emptyLinePlaceholder":306},[101,6215,6216],{"class":103,"line":272},[101,6217,6218],{"class":225},"# 封装终端指令相关类\n",[101,6220,6221,6223,6226,6228],{"class":103,"line":284},[101,6222,931],{"class":164},[101,6224,6225],{"class":168}," launch.actions ",[101,6227,6194],{"class":164},[101,6229,6230],{"class":168}," ExecuteProcess\n",[101,6232,6233],{"class":103,"line":303},[101,6234,307],{"emptyLinePlaceholder":306},[101,6236,6237],{"class":103,"line":310},[101,6238,6239],{"class":225},"# from launch.substitutions import FindExecutable\n",[101,6241,6242],{"class":103,"line":325},[101,6243,307],{"emptyLinePlaceholder":306},[101,6245,6246],{"class":103,"line":346},[101,6247,6248],{"class":225},"# 参数声明与获取\n",[101,6250,6251],{"class":103,"line":357},[101,6252,307],{"emptyLinePlaceholder":306},[101,6254,6255],{"class":103,"line":366},[101,6256,6257],{"class":225},"# from launch.actions import DeclareLaunchArgument\n",[101,6259,6260],{"class":103,"line":381},[101,6261,307],{"emptyLinePlaceholder":306},[101,6263,6264],{"class":103,"line":386},[101,6265,6266],{"class":225},"# from launch.substitutions import LaunchConfiguration\n",[101,6268,6269],{"class":103,"line":392},[101,6270,307],{"emptyLinePlaceholder":306},[101,6272,6273],{"class":103,"line":397},[101,6274,6275],{"class":225},"# 文件包含相关\n",[101,6277,6278],{"class":103,"line":403},[101,6279,307],{"emptyLinePlaceholder":306},[101,6281,6282],{"class":103,"line":408},[101,6283,6284],{"class":225},"# from launch.actions import IncludeLaunchDescription\n",[101,6286,6287],{"class":103,"line":414},[101,6288,307],{"emptyLinePlaceholder":306},[101,6290,6291],{"class":103,"line":419},[101,6292,6293],{"class":225},"# from launch.launch_description_sources import PythonLaunchDescriptionSource\n",[101,6295,6296],{"class":103,"line":425},[101,6297,307],{"emptyLinePlaceholder":306},[101,6299,6300],{"class":103,"line":430},[101,6301,6302],{"class":225},"# 分组相关\n",[101,6304,6305],{"class":103,"line":436},[101,6306,307],{"emptyLinePlaceholder":306},[101,6308,6309],{"class":103,"line":441},[101,6310,6311],{"class":225},"# from launch_ros.actions import PushRosNamespace\n",[101,6313,6314],{"class":103,"line":447},[101,6315,307],{"emptyLinePlaceholder":306},[101,6317,6318],{"class":103,"line":452},[101,6319,6320],{"class":225},"# from launch.actions import GroupAction\n",[101,6322,6323],{"class":103,"line":458},[101,6324,307],{"emptyLinePlaceholder":306},[101,6326,6327],{"class":103,"line":463},[101,6328,6329],{"class":225},"# 事件相关\n",[101,6331,6332],{"class":103,"line":469},[101,6333,307],{"emptyLinePlaceholder":306},[101,6335,6336],{"class":103,"line":474},[101,6337,6338],{"class":225},"# from launch.event_handlers import OnProcessStart,OnProcessExit\n",[101,6340,6341],{"class":103,"line":502},[101,6342,307],{"emptyLinePlaceholder":306},[101,6344,6345],{"class":103,"line":528},[101,6346,6347],{"class":225},"# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n",[101,6349,6350],{"class":103,"line":572},[101,6351,307],{"emptyLinePlaceholder":306},[101,6353,6354],{"class":103,"line":577},[101,6355,6356],{"class":225},"# 获取功能包下share目录或路径\n",[101,6358,6359,6361,6364,6366],{"class":103,"line":588},[101,6360,931],{"class":164},[101,6362,6363],{"class":168}," ament_index_python.packages ",[101,6365,6194],{"class":164},[101,6367,6368],{"class":168}," get_package_share_directory\n",[101,6370,6371,6373],{"class":103,"line":633},[101,6372,6194],{"class":164},[101,6374,6375],{"class":168}," os\n",[101,6377,6378],{"class":103,"line":663},[101,6379,307],{"emptyLinePlaceholder":306},[101,6381,6382,6385,6388],{"class":103,"line":675},[101,6383,6384],{"class":164},"def",[101,6386,6387],{"class":107}," generate_launch_description",[101,6389,6390],{"class":168},"():\n",[101,6392,6393,6396,6398],{"class":103,"line":797},[101,6394,6395],{"class":168},"    robot_name_in_model ",[101,6397,561],{"class":164},[101,6399,6400],{"class":111}," 'fishbot'\n",[101,6402,6403,6406,6408],{"class":103,"line":803},[101,6404,6405],{"class":168},"    package_name ",[101,6407,561],{"class":164},[101,6409,6410],{"class":111}," 'fishbot_description'\n",[101,6412,6413,6416,6418],{"class":103,"line":815},[101,6414,6415],{"class":168},"    urdf_name ",[101,6417,561],{"class":164},[101,6419,6420],{"class":111}," \"fishbot_gazebo.urdf\"\n",[101,6422,6423],{"class":103,"line":821},[101,6424,307],{"emptyLinePlaceholder":306},[101,6426,6427,6430,6432,6435,6438,6441,6444,6447,6450,6452],{"class":103,"line":827},[101,6428,6429],{"class":168},"    pkg_share ",[101,6431,561],{"class":164},[101,6433,6434],{"class":168}," get_package_share_directory(",[101,6436,6437],{"class":164},"f",[101,6439,6440],{"class":111},"\"",[101,6442,6443],{"class":137},"{",[101,6445,6446],{"class":168},"package_name",[101,6448,6449],{"class":137},"}",[101,6451,6440],{"class":111},[101,6453,5979],{"class":168},[101,6455,6456,6459,6461,6464,6466,6469,6471,6474,6476,6479],{"class":103,"line":833},[101,6457,6458],{"class":168},"    urdf_model_path ",[101,6460,561],{"class":164},[101,6462,6463],{"class":168}," os.path.join(pkg_share, ",[101,6465,6437],{"class":164},[101,6467,6468],{"class":111},"'urdf\u002Furdf\u002F",[101,6470,6443],{"class":137},[101,6472,6473],{"class":168},"urdf_name",[101,6475,6449],{"class":137},[101,6477,6478],{"class":111},"'",[101,6480,5979],{"class":168},[101,6482,6483],{"class":103,"line":839},[101,6484,307],{"emptyLinePlaceholder":306},[101,6486,6487],{"class":103,"line":862},[101,6488,6489],{"class":225},"    # Start Gazebo server\n",[101,6491,6492,6495,6497],{"class":103,"line":905},[101,6493,6494],{"class":168},"    start_gazebo_cmd ",[101,6496,561],{"class":164},[101,6498,6499],{"class":168}," ExecuteProcess(\n",[101,6501,6502,6504,6506,6508,6510,6512,6514,6516,6518,6520,6522,6524,6526,6528,6530],{"class":103,"line":942},[101,6503,6030],{"class":6029},[101,6505,561],{"class":164},[101,6507,6035],{"class":168},[101,6509,6038],{"class":111},[101,6511,6041],{"class":168},[101,6513,6044],{"class":111},[101,6515,6047],{"class":168},[101,6517,6050],{"class":111},[101,6519,6041],{"class":168},[101,6521,6055],{"class":111},[101,6523,6041],{"class":168},[101,6525,6050],{"class":111},[101,6527,6041],{"class":168},[101,6529,6064],{"class":111},[101,6531,6532],{"class":168},"],\n",[101,6534,6535,6537,6539,6541],{"class":103,"line":947},[101,6536,6072],{"class":6029},[101,6538,561],{"class":164},[101,6540,6077],{"class":111},[101,6542,5979],{"class":168},[101,6544,6545],{"class":103,"line":971},[101,6546,307],{"emptyLinePlaceholder":306},[101,6548,6549],{"class":103,"line":995},[101,6550,6551],{"class":225},"    # Launch the robot\n",[101,6553,6554,6557,6559],{"class":103,"line":1874},[101,6555,6556],{"class":168},"    spawn_entity_cmd ",[101,6558,561],{"class":164},[101,6560,6106],{"class":168},[101,6562,6563,6566,6568,6570],{"class":103,"line":1883},[101,6564,6565],{"class":6029},"        package",[101,6567,561],{"class":164},[101,6569,6116],{"class":111},[101,6571,6119],{"class":168},[101,6573,6574,6577,6579,6581],{"class":103,"line":1898},[101,6575,6576],{"class":6029},"        executable",[101,6578,561],{"class":164},[101,6580,6129],{"class":111},[101,6582,6132],{"class":168},[101,6584,6585,6588,6590,6592,6594,6596,6598,6600,6602,6604,6606],{"class":103,"line":1913},[101,6586,6587],{"class":6029},"        arguments",[101,6589,561],{"class":164},[101,6591,6035],{"class":168},[101,6593,6144],{"class":111},[101,6595,6147],{"class":168},[101,6597,6150],{"class":111},[101,6599,6153],{"class":168},[101,6601,6156],{"class":6029},[101,6603,561],{"class":164},[101,6605,6077],{"class":111},[101,6607,5979],{"class":168},[101,6609,6610],{"class":103,"line":1922},[101,6611,307],{"emptyLinePlaceholder":306},[101,6613,6614,6617],{"class":103,"line":1931},[101,6615,6616],{"class":164},"    return",[101,6618,6619],{"class":168}," LaunchDescription([start_gazebo_cmd,spawn_entity_cmd])\n",[23,6621,6622],{},"编译运行",[92,6624,6626],{"className":6015,"code":6625,"language":6017,"meta":57,"style":57},"colcon build --packages-select fishbot_description\nsource install\u002Fsetup.bash\nros2 launch fishbot_description gazebo.launch.py\n",[98,6627,6628,6645,6655],{"__ignoreMap":57},[101,6629,6630,6633,6637,6640,6642],{"class":103,"line":104},[101,6631,6632],{"class":168},"colcon build ",[101,6634,6636],{"class":6635},"s7hpK","--",[101,6638,6639],{"class":168},"packages",[101,6641,172],{"class":164},[101,6643,6644],{"class":168},"select fishbot_description\n",[101,6646,6647,6650,6652],{"class":103,"line":229},[101,6648,6649],{"class":168},"source install",[101,6651,186],{"class":164},[101,6653,6654],{"class":168},"setup.bash\n",[101,6656,6657],{"class":103,"line":257},[101,6658,6659],{"class":168},"ros2 launch fishbot_description gazebo.launch.py\n",[23,6661,6662],{},[55,6663],{"alt":57,"src":6664},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1646.webp",[84,6666,6667],{"id":6667},"插件",[23,6669,6670],{},"使用下面的指令可以查看所有的动态链接库：",[92,6672,6674],{"className":6015,"code":6673,"language":6017,"meta":57,"style":57},"ls \u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros*\n",[98,6675,6676],{"__ignoreMap":57},[101,6677,6678,6681,6683,6686,6688,6690,6692,6695,6697,6700,6702,6705],{"class":103,"line":104},[101,6679,6680],{"class":168},"ls ",[101,6682,186],{"class":164},[101,6684,6685],{"class":168},"opt",[101,6687,186],{"class":164},[101,6689,3948],{"class":168},[101,6691,186],{"class":164},[101,6693,6694],{"class":168},"humble",[101,6696,186],{"class":164},[101,6698,6699],{"class":168},"lib",[101,6701,186],{"class":164},[101,6703,6704],{"class":168},"libgazebo_ros",[101,6706,6707],{"class":164},"*\n",[23,6709,6710],{},[55,6711],{"alt":57,"src":6712},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1647.webp",[92,6714,6716],{"className":94,"code":6715,"language":96,"meta":57,"style":57},"\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",[98,6717,6718,6723,6728,6733,6738,6743,6748,6753,6758,6763,6768,6773,6778,6783,6788,6793,6798,6803,6808,6813,6818,6823,6828,6833,6838,6843,6848,6853,6858,6863],{"__ignoreMap":57},[101,6719,6720],{"class":103,"line":104},[101,6721,6722],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros2_control.so\n",[101,6724,6725],{"class":103,"line":229},[101,6726,6727],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_ackermann_drive.so\n",[101,6729,6730],{"class":103,"line":257},[101,6731,6732],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_bumper.so\n",[101,6734,6735],{"class":103,"line":272},[101,6736,6737],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_camera.so\n",[101,6739,6740],{"class":103,"line":284},[101,6741,6742],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_diff_drive.so\n",[101,6744,6745],{"class":103,"line":303},[101,6746,6747],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_elevator.so\n",[101,6749,6750],{"class":103,"line":310},[101,6751,6752],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_factory.so\n",[101,6754,6755],{"class":103,"line":325},[101,6756,6757],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_force.so\n",[101,6759,6760],{"class":103,"line":346},[101,6761,6762],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_force_system.so\n",[101,6764,6765],{"class":103,"line":357},[101,6766,6767],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_ft_sensor.so\n",[101,6769,6770],{"class":103,"line":366},[101,6771,6772],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_gps_sensor.so\n",[101,6774,6775],{"class":103,"line":381},[101,6776,6777],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_hand_of_god.so\n",[101,6779,6780],{"class":103,"line":386},[101,6781,6782],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_harness.so\n",[101,6784,6785],{"class":103,"line":392},[101,6786,6787],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_imu_sensor.so\n",[101,6789,6790],{"class":103,"line":397},[101,6791,6792],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_init.so\n",[101,6794,6795],{"class":103,"line":403},[101,6796,6797],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_joint_pose_trajectory.so\n",[101,6799,6800],{"class":103,"line":408},[101,6801,6802],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_joint_state_publisher.so\n",[101,6804,6805],{"class":103,"line":414},[101,6806,6807],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_node.so\n",[101,6809,6810],{"class":103,"line":419},[101,6811,6812],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_p3d.so\n",[101,6814,6815],{"class":103,"line":425},[101,6816,6817],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_planar_move.so\n",[101,6819,6820],{"class":103,"line":430},[101,6821,6822],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_projector.so\n",[101,6824,6825],{"class":103,"line":436},[101,6826,6827],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_properties.so\n",[101,6829,6830],{"class":103,"line":441},[101,6831,6832],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_ray_sensor.so\n",[101,6834,6835],{"class":103,"line":447},[101,6836,6837],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_state.so\n",[101,6839,6840],{"class":103,"line":452},[101,6841,6842],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_template.so\n",[101,6844,6845],{"class":103,"line":458},[101,6846,6847],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_tricycle_drive.so\n",[101,6849,6850],{"class":103,"line":463},[101,6851,6852],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_utils.so\n",[101,6854,6855],{"class":103,"line":469},[101,6856,6857],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_vacuum_gripper.so\n",[101,6859,6860],{"class":103,"line":474},[101,6861,6862],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_video.so\n",[101,6864,6865],{"class":103,"line":502},[101,6866,6867],{"class":107},"\u002Fopt\u002Fros\u002Fhumble\u002Flib\u002Flibgazebo_ros_wheel_slip.so\n",[6869,6870,6872],"h5",{"id":6871},"运动控制插件里程计odom","运动控制插件+里程计odom",[23,6874,6875],{},"本节课通过配置两轮差速控制插件，让我们的机器人动起来",[23,6877,6878],{},[55,6879],{"alt":57,"src":6880},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1648.webp",[23,6882,6883],{},"插件介绍：",[23,6885,6886],{},"Gazebo是一个独立于ROS的软件，对外提供了丰富的API可以使用，gazebo的插件按照用途大致可以分为两种：",[6008,6888,6889,6892],{},[1084,6890,6891],{},"用于控制的插件，通过插件可以控制机器人关节运动，可以进行位置、速度、力的控制，比如我们这节课的两轮差速控制器。",[1084,6893,6894],{},"用于数据采集的插件，比如IMU传感器用于采集机器人的惯性，激光雷达用于采集机器人周围的点云信息。",[23,6896,6897],{},"当然上面两类插件功能也可以写到一个插件里，两轮差速插件（gazebo_ros_diff_drive）就是一个二合一加强版。（差速控制+odom）",[23,6899,6900],{},"两轮差速插件用于控制机器人轮子关节的位置变化，同时该插件还会获取轮子的位置以及速度的信息的反馈，根据反馈的位置信息结合运动学模型即可计算出当前机器人的位姿（里程计）。",[23,6902,6903],{},"两轮差速控制器可以将轮子的目标转速发送给Gazebo，并从Gazebo获取到实际的速度和位置。（注意：发送给Gazebo是目标速度，反馈回来的是实际速度。目标!=实际，比如轮子卡住了，无论你发什么目标速度，实际速度都是0。）",[23,6905,6906],{},"要想快速了解一个系统的功能，最直接的就是看系统的对外的输入和输出是什么？什么都不要说，看下图：",[23,6908,6909],{},[55,6910],{"alt":57,"src":6911},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1649.webp",[23,6913,6914],{},"上图就是对gazebo_ros_diff_drive的输入和输出信息的总结，可以很直观的看到该插件主要输入控制指令，主要输出里程计信息。接着小鱼带你分别认识一下输入和输出两个部分。",[23,6916,6917],{},"这个插件需要配置一系列参数如下图：",[23,6919,6920],{},"不知道你是否还记得在第七章中，小鱼对两轮差速底盘的运动学正的介绍。如果要完成底盘的正逆解和里程计的推算就必须要知道轮子的直径和间距。",[23,6922,6923],{},"同时该插件还提供了一些可以控制输出的选项，因为是仿真，所以还要告诉插件轮子对应的joint名称等信息，这样就有了下面这个参数表格：",[6925,6926,6927,6941],"table",{},[6928,6929,6930],"thead",{},[6931,6932,6933,6938],"tr",{},[6934,6935,6937],"th",{"align":6936},"left","配置项",[6934,6939,6940],{"align":6936},"含义",[6942,6943,6944,6952,6959,6966,6973,6980,6987,6994,7001,7008,7015,7022,7029],"tbody",{},[6931,6945,6946,6949],{},[6947,6948,3948],"td",{"align":6936},[6947,6950,6951],{"align":6936},"ros相关配置，包含命名空间和话题重映射等",[6931,6953,6954,6956],{},[6947,6955,4011],{"align":6936},[6947,6957,6958],{"align":6936},"数据更新速率",[6931,6960,6961,6963],{},[6947,6962,4031],{"align":6936},[6947,6964,6965],{"align":6936},"左轮关节名称",[6931,6967,6968,6970],{},[6947,6969,4046],{"align":6936},[6947,6971,6972],{"align":6936},"右轮关节名称",[6931,6974,6975,6977],{},[6947,6976,4066],{"align":6936},[6947,6978,6979],{"align":6936},"左右轮子的间距",[6931,6981,6982,6984],{},[6947,6983,4081],{"align":6936},[6947,6985,6986],{"align":6936},"轮子的直径",[6931,6988,6989,6991],{},[6947,6990,4101],{"align":6936},[6947,6992,6993],{"align":6936},"轮子最大的力矩",[6931,6995,6996,6998],{},[6947,6997,4116],{"align":6936},[6947,6999,7000],{"align":6936},"轮子最大的加速度",[6931,7002,7003,7005],{},[6947,7004,4136],{"align":6936},[6947,7006,7007],{"align":6936},"是否发布里程计",[6931,7009,7010,7012],{},[6947,7011,4151],{"align":6936},[6947,7013,7014],{"align":6936},"是否发布里程计的tf开关",[6931,7016,7017,7019],{},[6947,7018,4165],{"align":6936},[6947,7020,7021],{"align":6936},"是否发布轮子的tf数据开关",[6931,7023,7024,7026],{},[6947,7025,4180],{"align":6936},[6947,7027,7028],{"align":6936},"里程计的framed ID，最终体现在话题和TF上",[6931,7030,7031,7033],{},[6947,7032,4195],{"align":6936},[6947,7034,7035],{"align":6936},"机器人的基础frame的ID",[23,7037,7038,7039,7042,7043],{},"控制指令：两轮差速控制器默认通过订阅话题",[98,7040,7041],{},"cmd_vel","来获取目标线速度和角速度。该话题的类型为：",[98,7044,7045],{},"geometry_msgs\u002Fmsg\u002FTwist",[23,7047,7048,7049],{},"该接口里主要是一些线速度和角速度都包含在x、y、z，代表坐标系的三个方向上的对应速度。 ",[32,7050,7051],{},"（详细的接口内容请看硬件平台章节）",[23,7053,7054],{},"两轮差速控制器收到这个话题数据后将其中的角速度和线速度转换上两个轮子的转动速度发送给Gazebo。",[23,7056,7057],{},"输出的信息：",[23,7059,7060,7061,7064,7065],{},"里程计信息默认的输出话题为",[98,7062,7063],{},"odom","，其消息类型为：",[98,7066,7067],{},"nav_msgs\u002Fmsg\u002FOdometry",[23,7069,7070,7071],{},"其数据主要包含三个部分： ",[32,7072,7051],{},[1081,7074,7075,7078,7081,7084],{},[1084,7076,7077],{},"header，表示该消息发布的时间",[1084,7079,7080],{},"pose，表示当前机器人位置和朝向",[1084,7082,7083],{},"twist，表示当前机器人的线速度和角速度",[1084,7085,7086],{},"数据中还包含一个covariance，其代表协方差矩阵，后面小鱼写篇文章来介绍下，这里只需了解其含义即可。",[23,7088,7089],{},"里程计TF信息也可以输出：设为true，订阅tf话题里你就可以看到像下面的msg，建议后面配置好后，手动修改下，对比区别",[92,7091,7095],{"className":7092,"code":7093,"language":7094,"meta":57,"style":57},"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",[98,7096,7097,7108,7115,7125,7135,7145,7155,7162,7169,7179,7189,7199,7206,7215,7224,7233],{"__ignoreMap":57},[101,7098,7099,7102,7105],{"class":103,"line":104},[101,7100,7101],{"class":168},"- ",[101,7103,7104],{"class":1188},"header",[101,7106,7107],{"class":168},":\n",[101,7109,7110,7113],{"class":103,"line":229},[101,7111,7112],{"class":1188},"    stamp",[101,7114,7107],{"class":168},[101,7116,7117,7120,7122],{"class":103,"line":257},[101,7118,7119],{"class":1188},"      sec",[101,7121,642],{"class":168},[101,7123,7124],{"class":137},"6157\n",[101,7126,7127,7130,7132],{"class":103,"line":272},[101,7128,7129],{"class":1188},"      nanosec",[101,7131,642],{"class":168},[101,7133,7134],{"class":137},"907000000\n",[101,7136,7137,7140,7142],{"class":103,"line":284},[101,7138,7139],{"class":1188},"    frame_id",[101,7141,642],{"class":168},[101,7143,7144],{"class":111},"odom\n",[101,7146,7147,7150,7152],{"class":103,"line":303},[101,7148,7149],{"class":1188},"  child_frame_id",[101,7151,642],{"class":168},[101,7153,7154],{"class":111},"base_footprint\n",[101,7156,7157,7160],{"class":103,"line":310},[101,7158,7159],{"class":1188},"  transform",[101,7161,7107],{"class":168},[101,7163,7164,7167],{"class":103,"line":325},[101,7165,7166],{"class":1188},"    translation",[101,7168,7107],{"class":168},[101,7170,7171,7174,7176],{"class":103,"line":346},[101,7172,7173],{"class":1188},"      x",[101,7175,642],{"class":168},[101,7177,7178],{"class":137},"0.0005557960241049835\n",[101,7180,7181,7184,7186],{"class":103,"line":357},[101,7182,7183],{"class":137},"      y",[101,7185,642],{"class":168},[101,7187,7188],{"class":137},"-0.0007350446303238693\n",[101,7190,7191,7194,7196],{"class":103,"line":366},[101,7192,7193],{"class":1188},"      z",[101,7195,642],{"class":168},[101,7197,7198],{"class":137},"0.01599968753145574\n",[101,7200,7201,7204],{"class":103,"line":381},[101,7202,7203],{"class":1188},"    rotation",[101,7205,7107],{"class":168},[101,7207,7208,7210,7212],{"class":103,"line":386},[101,7209,7173],{"class":1188},[101,7211,642],{"class":168},[101,7213,7214],{"class":137},"4.691143395208505e-07\n",[101,7216,7217,7219,7221],{"class":103,"line":392},[101,7218,7183],{"class":137},[101,7220,642],{"class":168},[101,7222,7223],{"class":137},"7.115496626557812e-06\n",[101,7225,7226,7228,7230],{"class":103,"line":397},[101,7227,7193],{"class":1188},[101,7229,642],{"class":168},[101,7231,7232],{"class":137},"-0.018531475772549166\n",[101,7234,7235,7238,7240],{"class":103,"line":403},[101,7236,7237],{"class":1188},"      w",[101,7239,642],{"class":168},[101,7241,7242],{"class":137},"0.9998282774331005\n",[23,7244,7245],{},"轮子TF信息也可以输出：设为true，订阅tf话题里你就可以看到像下面的msg，建议后面配置好后，手动修改下，对比区别",[92,7247,7249],{"className":7092,"code":7248,"language":7094,"meta":57,"style":57},"- 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",[98,7250,7251,7259,7265,7273,7282,7291,7300,7306,7312,7321,7330,7339,7345,7354,7363,7371,7380,7388,7394,7402,7410,7418,7427,7433,7439,7447,7456,7464,7470,7478,7487,7495],{"__ignoreMap":57},[101,7252,7253,7255,7257],{"class":103,"line":104},[101,7254,7101],{"class":168},[101,7256,7104],{"class":1188},[101,7258,7107],{"class":168},[101,7260,7261,7263],{"class":103,"line":229},[101,7262,7112],{"class":1188},[101,7264,7107],{"class":168},[101,7266,7267,7269,7271],{"class":103,"line":257},[101,7268,7119],{"class":1188},[101,7270,642],{"class":168},[101,7272,7124],{"class":137},[101,7274,7275,7277,7279],{"class":103,"line":272},[101,7276,7129],{"class":1188},[101,7278,642],{"class":168},[101,7280,7281],{"class":137},"941000000\n",[101,7283,7284,7286,7288],{"class":103,"line":284},[101,7285,7139],{"class":1188},[101,7287,642],{"class":168},[101,7289,7290],{"class":111},"base_link\n",[101,7292,7293,7295,7297],{"class":103,"line":303},[101,7294,7149],{"class":1188},[101,7296,642],{"class":168},[101,7298,7299],{"class":111},"left_wheel_link\n",[101,7301,7302,7304],{"class":103,"line":310},[101,7303,7159],{"class":1188},[101,7305,7107],{"class":168},[101,7307,7308,7310],{"class":103,"line":325},[101,7309,7166],{"class":1188},[101,7311,7107],{"class":168},[101,7313,7314,7316,7318],{"class":103,"line":346},[101,7315,7173],{"class":1188},[101,7317,642],{"class":168},[101,7319,7320],{"class":137},"-0.02\n",[101,7322,7323,7325,7327],{"class":103,"line":357},[101,7324,7183],{"class":137},[101,7326,642],{"class":168},[101,7328,7329],{"class":137},"0.1\n",[101,7331,7332,7334,7336],{"class":103,"line":366},[101,7333,7193],{"class":1188},[101,7335,642],{"class":168},[101,7337,7338],{"class":137},"-0.06\n",[101,7340,7341,7343],{"class":103,"line":381},[101,7342,7203],{"class":1188},[101,7344,7107],{"class":168},[101,7346,7347,7349,7351],{"class":103,"line":386},[101,7348,7173],{"class":1188},[101,7350,642],{"class":168},[101,7352,7353],{"class":137},"0.0\n",[101,7355,7356,7358,7360],{"class":103,"line":392},[101,7357,7183],{"class":137},[101,7359,642],{"class":168},[101,7361,7362],{"class":137},"0.049519025127821005\n",[101,7364,7365,7367,7369],{"class":103,"line":397},[101,7366,7193],{"class":1188},[101,7368,642],{"class":168},[101,7370,7353],{"class":137},[101,7372,7373,7375,7377],{"class":103,"line":403},[101,7374,7237],{"class":1188},[101,7376,642],{"class":168},[101,7378,7379],{"class":137},"0.9987731805321918\n",[101,7381,7382,7384,7386],{"class":103,"line":408},[101,7383,7101],{"class":168},[101,7385,7104],{"class":1188},[101,7387,7107],{"class":168},[101,7389,7390,7392],{"class":103,"line":414},[101,7391,7112],{"class":1188},[101,7393,7107],{"class":168},[101,7395,7396,7398,7400],{"class":103,"line":419},[101,7397,7119],{"class":1188},[101,7399,642],{"class":168},[101,7401,7124],{"class":137},[101,7403,7404,7406,7408],{"class":103,"line":425},[101,7405,7129],{"class":1188},[101,7407,642],{"class":168},[101,7409,7281],{"class":137},[101,7411,7412,7414,7416],{"class":103,"line":430},[101,7413,7139],{"class":1188},[101,7415,642],{"class":168},[101,7417,7290],{"class":111},[101,7419,7420,7422,7424],{"class":103,"line":436},[101,7421,7149],{"class":1188},[101,7423,642],{"class":168},[101,7425,7426],{"class":111},"right_wheel_link\n",[101,7428,7429,7431],{"class":103,"line":441},[101,7430,7159],{"class":1188},[101,7432,7107],{"class":168},[101,7434,7435,7437],{"class":103,"line":447},[101,7436,7166],{"class":1188},[101,7438,7107],{"class":168},[101,7440,7441,7443,7445],{"class":103,"line":452},[101,7442,7173],{"class":1188},[101,7444,642],{"class":168},[101,7446,7320],{"class":137},[101,7448,7449,7451,7453],{"class":103,"line":458},[101,7450,7183],{"class":137},[101,7452,642],{"class":168},[101,7454,7455],{"class":137},"-0.1\n",[101,7457,7458,7460,7462],{"class":103,"line":463},[101,7459,7193],{"class":1188},[101,7461,642],{"class":168},[101,7463,7338],{"class":137},[101,7465,7466,7468],{"class":103,"line":469},[101,7467,7203],{"class":1188},[101,7469,7107],{"class":168},[101,7471,7472,7474,7476],{"class":103,"line":474},[101,7473,7173],{"class":1188},[101,7475,642],{"class":168},[101,7477,7353],{"class":137},[101,7479,7480,7482,7484],{"class":103,"line":502},[101,7481,7183],{"class":137},[101,7483,642],{"class":168},[101,7485,7486],{"class":137},"-0.0663387077034509\n",[101,7488,7489,7491,7493],{"class":103,"line":528},[101,7490,7193],{"class":1188},[101,7492,642],{"class":168},[101,7494,7353],{"class":137},[101,7496,7497,7499,7501],{"class":103,"line":572},[101,7498,7237],{"class":1188},[101,7500,642],{"class":168},[101,7502,7503],{"class":137},"0.9977971616817898\n",[23,7505,7506],{},"咱们之前下载的那个鱼香ROS的fishbot的urdf已经包含了差速插件的内容，如下：",[23,7508,7509,7510,7513,7514,7517,7518,7520,7521,7523,7524,7526],{},"因为是给Gazebo的插件，所以在",[98,7511,7512],{},"URDF","中，我们需要使用",[98,7515,7516],{},"\u003Cgazebo>","进行配置，因为是要给",[98,7519,134],{},"配置插件，所有要在",[98,7522,134],{},"标签下添加",[98,7525,3923],{},"子插件。",[92,7528,7530],{"className":1176,"code":7529,"language":1178,"meta":57,"style":57},"  \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",[98,7531,7532,7540,7560,7568,7580,7592,7604,7612,7624,7628,7640,7652,7656,7668,7680,7684,7696,7708,7712,7724,7736,7748,7760,7772,7780],{"__ignoreMap":57},[101,7533,7534,7536,7538],{"class":103,"line":104},[101,7535,1227],{"class":168},[101,7537,134],{"class":1188},[101,7539,1218],{"class":168},[101,7541,7542,7544,7546,7548,7550,7552,7554,7556,7558],{"class":103,"line":229},[101,7543,1272],{"class":168},[101,7545,3923],{"class":1188},[101,7547,1210],{"class":107},[101,7549,561],{"class":168},[101,7551,3930],{"class":111},[101,7553,3933],{"class":107},[101,7555,561],{"class":168},[101,7557,3938],{"class":111},[101,7559,1218],{"class":168},[101,7561,7562,7564,7566],{"class":103,"line":257},[101,7563,1357],{"class":168},[101,7565,3948],{"class":1188},[101,7567,1218],{"class":168},[101,7569,7570,7572,7574,7576,7578],{"class":103,"line":272},[101,7571,2555],{"class":168},[101,7573,3958],{"class":1188},[101,7575,3961],{"class":168},[101,7577,3958],{"class":1188},[101,7579,1218],{"class":168},[101,7581,7582,7584,7586,7588,7590],{"class":103,"line":284},[101,7583,2555],{"class":168},[101,7585,3973],{"class":1188},[101,7587,3976],{"class":168},[101,7589,3973],{"class":1188},[101,7591,1218],{"class":168},[101,7593,7594,7596,7598,7600,7602],{"class":103,"line":303},[101,7595,2555],{"class":168},[101,7597,3973],{"class":1188},[101,7599,3990],{"class":168},[101,7601,3973],{"class":1188},[101,7603,1218],{"class":168},[101,7605,7606,7608,7610],{"class":103,"line":310},[101,7607,2571],{"class":168},[101,7609,3948],{"class":1188},[101,7611,1218],{"class":168},[101,7613,7614,7616,7618,7620,7622],{"class":103,"line":325},[101,7615,1357],{"class":168},[101,7617,4011],{"class":1188},[101,7619,4014],{"class":168},[101,7621,4011],{"class":1188},[101,7623,1218],{"class":168},[101,7625,7626],{"class":103,"line":346},[101,7627,307],{"emptyLinePlaceholder":306},[101,7629,7630,7632,7634,7636,7638],{"class":103,"line":357},[101,7631,1357],{"class":168},[101,7633,4031],{"class":1188},[101,7635,4034],{"class":168},[101,7637,4031],{"class":1188},[101,7639,1218],{"class":168},[101,7641,7642,7644,7646,7648,7650],{"class":103,"line":366},[101,7643,1357],{"class":168},[101,7645,4046],{"class":1188},[101,7647,4049],{"class":168},[101,7649,4046],{"class":1188},[101,7651,1218],{"class":168},[101,7653,7654],{"class":103,"line":381},[101,7655,307],{"emptyLinePlaceholder":306},[101,7657,7658,7660,7662,7664,7666],{"class":103,"line":386},[101,7659,1357],{"class":168},[101,7661,4066],{"class":1188},[101,7663,4069],{"class":168},[101,7665,4066],{"class":1188},[101,7667,1218],{"class":168},[101,7669,7670,7672,7674,7676,7678],{"class":103,"line":392},[101,7671,1357],{"class":168},[101,7673,4081],{"class":1188},[101,7675,4084],{"class":168},[101,7677,4081],{"class":1188},[101,7679,1218],{"class":168},[101,7681,7682],{"class":103,"line":397},[101,7683,307],{"emptyLinePlaceholder":306},[101,7685,7686,7688,7690,7692,7694],{"class":103,"line":403},[101,7687,1357],{"class":168},[101,7689,4101],{"class":1188},[101,7691,4104],{"class":168},[101,7693,4101],{"class":1188},[101,7695,1218],{"class":168},[101,7697,7698,7700,7702,7704,7706],{"class":103,"line":408},[101,7699,1357],{"class":168},[101,7701,4116],{"class":1188},[101,7703,4119],{"class":168},[101,7705,4116],{"class":1188},[101,7707,1218],{"class":168},[101,7709,7710],{"class":103,"line":414},[101,7711,307],{"emptyLinePlaceholder":306},[101,7713,7714,7716,7718,7720,7722],{"class":103,"line":419},[101,7715,1357],{"class":168},[101,7717,4136],{"class":1188},[101,7719,4139],{"class":168},[101,7721,4136],{"class":1188},[101,7723,1218],{"class":168},[101,7725,7726,7728,7730,7732,7734],{"class":103,"line":425},[101,7727,1357],{"class":168},[101,7729,4151],{"class":1188},[101,7731,4139],{"class":168},[101,7733,4151],{"class":1188},[101,7735,1218],{"class":168},[101,7737,7738,7740,7742,7744,7746],{"class":103,"line":430},[101,7739,1357],{"class":168},[101,7741,4165],{"class":1188},[101,7743,4139],{"class":168},[101,7745,4165],{"class":1188},[101,7747,1218],{"class":168},[101,7749,7750,7752,7754,7756,7758],{"class":103,"line":436},[101,7751,1357],{"class":168},[101,7753,4180],{"class":1188},[101,7755,4183],{"class":168},[101,7757,4180],{"class":1188},[101,7759,1218],{"class":168},[101,7761,7762,7764,7766,7768,7770],{"class":103,"line":441},[101,7763,1357],{"class":168},[101,7765,4195],{"class":1188},[101,7767,4198],{"class":168},[101,7769,4195],{"class":1188},[101,7771,1218],{"class":168},[101,7773,7774,7776,7778],{"class":103,"line":447},[101,7775,1424],{"class":168},[101,7777,3923],{"class":1188},[101,7779,1218],{"class":168},[101,7781,7782,7784,7786],{"class":103,"line":452},[101,7783,1476],{"class":168},[101,7785,134],{"class":1188},[101,7787,1218],{"class":168},[23,7789,7790],{},"编译一下：",[92,7792,7794],{"className":6015,"code":7793,"language":6017,"meta":57,"style":57},"colcon build\nsource install\u002Fsetup.bash\nros2 launch fishbot_description gazebo.launch.py\n",[98,7795,7796,7801,7809],{"__ignoreMap":57},[101,7797,7798],{"class":103,"line":104},[101,7799,7800],{"class":168},"colcon build\n",[101,7802,7803,7805,7807],{"class":103,"line":229},[101,7804,6649],{"class":168},[101,7806,186],{"class":164},[101,7808,6654],{"class":168},[101,7810,7811],{"class":103,"line":257},[101,7812,6659],{"class":168},[23,7814,7815],{},"然后可以看看下面这俩命令：",[92,7817,7819],{"className":6015,"code":7818,"language":6017,"meta":57,"style":57},"ros2 node list\nros2 topic list\n",[98,7820,7821,7829],{"__ignoreMap":57},[101,7822,7823,7826],{"class":103,"line":104},[101,7824,7825],{"class":168},"ros2 node ",[101,7827,7828],{"class":137},"list\n",[101,7830,7831,7834],{"class":103,"line":229},[101,7832,7833],{"class":168},"ros2 topic ",[101,7835,7828],{"class":137},[23,7837,7838],{},[55,7839],{"alt":57,"src":7840},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1650.webp",[23,7842,7843],{},"可以看到了我们插件订阅的的\u002Fcmd_vel和发布的\u002Fodom了。",[23,7845,7846],{},"然后我们可以通过teleop-twist-keyboard节点发布cmd_vel来控制fishbot。",[92,7848,7850],{"className":6015,"code":7849,"language":6017,"meta":57,"style":57},"sudo apt install ros-humble-teleop-twist-keyboard\n",[98,7851,7852],{"__ignoreMap":57},[101,7853,7854,7857,7859,7861,7863,7866,7868,7871,7873],{"class":103,"line":104},[101,7855,7856],{"class":168},"sudo apt install ros",[101,7858,172],{"class":164},[101,7860,6694],{"class":168},[101,7862,172],{"class":164},[101,7864,7865],{"class":168},"teleop",[101,7867,172],{"class":164},[101,7869,7870],{"class":168},"twist",[101,7872,172],{"class":164},[101,7874,7875],{"class":168},"keyboard\n",[23,7877,7878],{},"使用下方节点来控制",[92,7880,7882],{"className":6015,"code":7881,"language":6017,"meta":57,"style":57},"ros2 run teleop_twist_keyboard teleop_twist_keyboard\n",[98,7883,7884],{"__ignoreMap":57},[101,7885,7886],{"class":103,"line":104},[101,7887,7881],{"class":168},[23,7889,7890],{},"接着尝试使用来控制机器人运动",[92,7892,7894],{"className":6015,"code":7893,"language":6017,"meta":57,"style":57},"   U    I    O\n   J    K    L\n   M    \u003C    >\n",[98,7895,7896,7901,7906],{"__ignoreMap":57},[101,7897,7898],{"class":103,"line":104},[101,7899,7900],{"class":168},"   U    I    O\n",[101,7902,7903],{"class":103,"line":229},[101,7904,7905],{"class":168},"   J    K    L\n",[101,7907,7908,7911,7913],{"class":103,"line":257},[101,7909,7910],{"class":168},"   M    ",[101,7912,1204],{"class":164},[101,7914,7915],{"class":164},"    >\n",[23,7917,7918],{},"点一下，你就能看到fishbot在Gazebo中飞速的移动。接着打开终端，打印一下odom话题和tf话题，移动机器人观察数据变化。",[23,7920,7921],{},"也可以使用rqt显示速度数据",[92,7923,7925],{"className":6015,"code":7924,"language":6017,"meta":57,"style":57},"rqt\n",[98,7926,7927],{"__ignoreMap":57},[101,7928,7929],{"class":103,"line":104},[101,7930,7924],{"class":168},[23,7932,7933],{},"选择Plugin->Visualization->Plot",[23,7935,7936],{},[55,7937],{"alt":57,"src":7938},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1651.webp",[23,7940,7941,7942,7945,7946,7949],{},"在上方Topic输入",[98,7943,7944],{},"\u002Fcmd_vel\u002Flinear\u002Fx","，再输入",[98,7947,7948],{},"\u002Fcmd_vel\u002Fangular\u002Fz","，然后用键盘控制机器人移动。",[23,7951,7952],{},[55,7953],{"alt":57,"src":7954},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1652.webp",[23,7956,7957],{},[55,7958],{"alt":57,"src":7959},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1653.webp",[23,7961,7962],{},"也可以在rviz2里看odom",[92,7964,7966],{"className":6015,"code":7965,"language":6017,"meta":57,"style":57},"rviz2\n",[98,7967,7968],{"__ignoreMap":57},[101,7969,7970],{"class":103,"line":104},[101,7971,7965],{"class":168},[23,7973,7974],{},"点键盘控制节点按U，让机器人转圈。",[23,7976,7977],{},[55,7978],{"alt":57,"src":7979},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1654.webp",[23,7981,7982],{},"虽然机器人的轨迹已经在RVIZ中显示出来了，但是并没有机器人的模型，也看不到轮子的转动，咱们来带你一起解决这个问题。",[23,7984,7985,7986,7989,7990,7992,7993,7995],{},"前面咱们介绍过，要发布机器人模型我们所使用的节点是",[98,7987,7988],{},"robot_state_publisher",",所以我们在",[98,7991,6002],{},"中加入这个节点，同时再加上rviz2的启动节点，最终的",[98,7994,6002],{},"内容如下：",[92,7997,7999],{"className":6015,"code":7998,"language":6017,"meta":57,"style":57},"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",[98,8000,8001,8011,8021,8025,8029,8039,8043,8047,8051,8055,8059,8063,8067,8071,8075,8079,8083,8087,8091,8095,8099,8103,8107,8111,8115,8119,8123,8127,8131,8135,8139,8143,8147,8151,8161,8167,8171,8179,8187,8195,8203,8207,8229,8251,8255,8260,8264,8268,8272,8277,8281,8286,8290,8295,8303,8335,8345,8349,8353,8361,8371,8381,8405,8409,8414,8423,8434,8444,8453,8458,8462,8467,8476,8487,8497,8508,8518,8522,8527,8532,8536],{"__ignoreMap":57},[101,8002,8003,8005,8007,8009],{"class":103,"line":104},[101,8004,931],{"class":164},[101,8006,6191],{"class":168},[101,8008,6194],{"class":164},[101,8010,6197],{"class":168},[101,8012,8013,8015,8017,8019],{"class":103,"line":229},[101,8014,931],{"class":164},[101,8016,6204],{"class":168},[101,8018,6194],{"class":164},[101,8020,6209],{"class":168},[101,8022,8023],{"class":103,"line":257},[101,8024,307],{"emptyLinePlaceholder":306},[101,8026,8027],{"class":103,"line":272},[101,8028,6218],{"class":225},[101,8030,8031,8033,8035,8037],{"class":103,"line":284},[101,8032,931],{"class":164},[101,8034,6225],{"class":168},[101,8036,6194],{"class":164},[101,8038,6230],{"class":168},[101,8040,8041],{"class":103,"line":303},[101,8042,307],{"emptyLinePlaceholder":306},[101,8044,8045],{"class":103,"line":310},[101,8046,6239],{"class":225},[101,8048,8049],{"class":103,"line":325},[101,8050,307],{"emptyLinePlaceholder":306},[101,8052,8053],{"class":103,"line":346},[101,8054,6248],{"class":225},[101,8056,8057],{"class":103,"line":357},[101,8058,307],{"emptyLinePlaceholder":306},[101,8060,8061],{"class":103,"line":366},[101,8062,6257],{"class":225},[101,8064,8065],{"class":103,"line":381},[101,8066,307],{"emptyLinePlaceholder":306},[101,8068,8069],{"class":103,"line":386},[101,8070,6266],{"class":225},[101,8072,8073],{"class":103,"line":392},[101,8074,307],{"emptyLinePlaceholder":306},[101,8076,8077],{"class":103,"line":397},[101,8078,6275],{"class":225},[101,8080,8081],{"class":103,"line":403},[101,8082,307],{"emptyLinePlaceholder":306},[101,8084,8085],{"class":103,"line":408},[101,8086,6284],{"class":225},[101,8088,8089],{"class":103,"line":414},[101,8090,307],{"emptyLinePlaceholder":306},[101,8092,8093],{"class":103,"line":419},[101,8094,6293],{"class":225},[101,8096,8097],{"class":103,"line":425},[101,8098,307],{"emptyLinePlaceholder":306},[101,8100,8101],{"class":103,"line":430},[101,8102,6302],{"class":225},[101,8104,8105],{"class":103,"line":436},[101,8106,307],{"emptyLinePlaceholder":306},[101,8108,8109],{"class":103,"line":441},[101,8110,6311],{"class":225},[101,8112,8113],{"class":103,"line":447},[101,8114,307],{"emptyLinePlaceholder":306},[101,8116,8117],{"class":103,"line":452},[101,8118,6320],{"class":225},[101,8120,8121],{"class":103,"line":458},[101,8122,307],{"emptyLinePlaceholder":306},[101,8124,8125],{"class":103,"line":463},[101,8126,6329],{"class":225},[101,8128,8129],{"class":103,"line":469},[101,8130,307],{"emptyLinePlaceholder":306},[101,8132,8133],{"class":103,"line":474},[101,8134,6338],{"class":225},[101,8136,8137],{"class":103,"line":502},[101,8138,307],{"emptyLinePlaceholder":306},[101,8140,8141],{"class":103,"line":528},[101,8142,6347],{"class":225},[101,8144,8145],{"class":103,"line":572},[101,8146,307],{"emptyLinePlaceholder":306},[101,8148,8149],{"class":103,"line":577},[101,8150,6356],{"class":225},[101,8152,8153,8155,8157,8159],{"class":103,"line":588},[101,8154,931],{"class":164},[101,8156,6363],{"class":168},[101,8158,6194],{"class":164},[101,8160,6368],{"class":168},[101,8162,8163,8165],{"class":103,"line":633},[101,8164,6194],{"class":164},[101,8166,6375],{"class":168},[101,8168,8169],{"class":103,"line":663},[101,8170,307],{"emptyLinePlaceholder":306},[101,8172,8173,8175,8177],{"class":103,"line":675},[101,8174,6384],{"class":164},[101,8176,6387],{"class":107},[101,8178,6390],{"class":168},[101,8180,8181,8183,8185],{"class":103,"line":797},[101,8182,6395],{"class":168},[101,8184,561],{"class":164},[101,8186,6400],{"class":111},[101,8188,8189,8191,8193],{"class":103,"line":803},[101,8190,6405],{"class":168},[101,8192,561],{"class":164},[101,8194,6410],{"class":111},[101,8196,8197,8199,8201],{"class":103,"line":815},[101,8198,6415],{"class":168},[101,8200,561],{"class":164},[101,8202,6420],{"class":111},[101,8204,8205],{"class":103,"line":821},[101,8206,307],{"emptyLinePlaceholder":306},[101,8208,8209,8211,8213,8215,8217,8219,8221,8223,8225,8227],{"class":103,"line":827},[101,8210,6429],{"class":168},[101,8212,561],{"class":164},[101,8214,6434],{"class":168},[101,8216,6437],{"class":164},[101,8218,6440],{"class":111},[101,8220,6443],{"class":137},[101,8222,6446],{"class":168},[101,8224,6449],{"class":137},[101,8226,6440],{"class":111},[101,8228,5979],{"class":168},[101,8230,8231,8233,8235,8237,8239,8241,8243,8245,8247,8249],{"class":103,"line":833},[101,8232,6458],{"class":168},[101,8234,561],{"class":164},[101,8236,6463],{"class":168},[101,8238,6437],{"class":164},[101,8240,6468],{"class":111},[101,8242,6443],{"class":137},[101,8244,6473],{"class":168},[101,8246,6449],{"class":137},[101,8248,6478],{"class":111},[101,8250,5979],{"class":168},[101,8252,8253],{"class":103,"line":839},[101,8254,307],{"emptyLinePlaceholder":306},[101,8256,8257],{"class":103,"line":862},[101,8258,8259],{"class":225},"    # gazebo_world_path = os.path.join(pkg_share, 'world\u002Ffishbot.world')\n",[101,8261,8262],{"class":103,"line":905},[101,8263,307],{"emptyLinePlaceholder":306},[101,8265,8266],{"class":103,"line":942},[101,8267,6489],{"class":225},[101,8269,8270],{"class":103,"line":947},[101,8271,307],{"emptyLinePlaceholder":306},[101,8273,8274],{"class":103,"line":971},[101,8275,8276],{"class":225},"    # start_gazebo_cmd = ExecuteProcess(\n",[101,8278,8279],{"class":103,"line":995},[101,8280,307],{"emptyLinePlaceholder":306},[101,8282,8283],{"class":103,"line":1874},[101,8284,8285],{"class":225},"    #     cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so',gazebo_world_path],\n",[101,8287,8288],{"class":103,"line":1883},[101,8289,307],{"emptyLinePlaceholder":306},[101,8291,8292],{"class":103,"line":1898},[101,8293,8294],{"class":225},"    #     output='screen')\n",[101,8296,8297,8299,8301],{"class":103,"line":1913},[101,8298,6494],{"class":168},[101,8300,561],{"class":164},[101,8302,6499],{"class":168},[101,8304,8305,8307,8309,8311,8313,8315,8317,8319,8321,8323,8325,8327,8329,8331,8333],{"class":103,"line":1922},[101,8306,6030],{"class":6029},[101,8308,561],{"class":164},[101,8310,6035],{"class":168},[101,8312,6038],{"class":111},[101,8314,6041],{"class":168},[101,8316,6044],{"class":111},[101,8318,6047],{"class":168},[101,8320,6050],{"class":111},[101,8322,6041],{"class":168},[101,8324,6055],{"class":111},[101,8326,6041],{"class":168},[101,8328,6050],{"class":111},[101,8330,6041],{"class":168},[101,8332,6064],{"class":111},[101,8334,6532],{"class":168},[101,8336,8337,8339,8341,8343],{"class":103,"line":1931},[101,8338,6072],{"class":6029},[101,8340,561],{"class":164},[101,8342,6077],{"class":111},[101,8344,5979],{"class":168},[101,8346,8347],{"class":103,"line":1940},[101,8348,307],{"emptyLinePlaceholder":306},[101,8350,8351],{"class":103,"line":1956},[101,8352,6551],{"class":225},[101,8354,8355,8357,8359],{"class":103,"line":2004},[101,8356,6556],{"class":168},[101,8358,561],{"class":164},[101,8360,6106],{"class":168},[101,8362,8363,8365,8367,8369],{"class":103,"line":2013},[101,8364,6565],{"class":6029},[101,8366,561],{"class":164},[101,8368,6116],{"class":111},[101,8370,6119],{"class":168},[101,8372,8373,8375,8377,8379],{"class":103,"line":2022},[101,8374,6576],{"class":6029},[101,8376,561],{"class":164},[101,8378,6129],{"class":111},[101,8380,6132],{"class":168},[101,8382,8383,8385,8387,8389,8391,8393,8395,8397,8399,8401,8403],{"class":103,"line":2027},[101,8384,6587],{"class":6029},[101,8386,561],{"class":164},[101,8388,6035],{"class":168},[101,8390,6144],{"class":111},[101,8392,6147],{"class":168},[101,8394,6150],{"class":111},[101,8396,6153],{"class":168},[101,8398,6156],{"class":6029},[101,8400,561],{"class":164},[101,8402,6077],{"class":111},[101,8404,5979],{"class":168},[101,8406,8407],{"class":103,"line":2049},[101,8408,307],{"emptyLinePlaceholder":306},[101,8410,8411],{"class":103,"line":2065},[101,8412,8413],{"class":225},"    # Start Robot State publisher\n",[101,8415,8416,8419,8421],{"class":103,"line":2080},[101,8417,8418],{"class":168},"    start_robot_state_publisher_cmd ",[101,8420,561],{"class":164},[101,8422,6106],{"class":168},[101,8424,8425,8427,8429,8432],{"class":103,"line":2096},[101,8426,6565],{"class":6029},[101,8428,561],{"class":164},[101,8430,8431],{"class":111},"'robot_state_publisher'",[101,8433,6132],{"class":168},[101,8435,8436,8438,8440,8442],{"class":103,"line":2105},[101,8437,6576],{"class":6029},[101,8439,561],{"class":164},[101,8441,8431],{"class":111},[101,8443,6132],{"class":168},[101,8445,8446,8448,8450],{"class":103,"line":2110},[101,8447,6587],{"class":6029},[101,8449,561],{"class":164},[101,8451,8452],{"class":168},"[urdf_model_path]\n",[101,8454,8455],{"class":103,"line":2126},[101,8456,8457],{"class":168},"    )\n",[101,8459,8460],{"class":103,"line":2135},[101,8461,307],{"emptyLinePlaceholder":306},[101,8463,8464],{"class":103,"line":2156},[101,8465,8466],{"class":225},"    # Launch RViz\n",[101,8468,8469,8472,8474],{"class":103,"line":2165},[101,8470,8471],{"class":168},"    start_rviz_cmd ",[101,8473,561],{"class":164},[101,8475,6106],{"class":168},[101,8477,8478,8480,8482,8485],{"class":103,"line":2184},[101,8479,6565],{"class":6029},[101,8481,561],{"class":164},[101,8483,8484],{"class":111},"'rviz2'",[101,8486,6132],{"class":168},[101,8488,8489,8491,8493,8495],{"class":103,"line":2193},[101,8490,6576],{"class":6029},[101,8492,561],{"class":164},[101,8494,8484],{"class":111},[101,8496,6132],{"class":168},[101,8498,8499,8502,8504,8506],{"class":103,"line":2202},[101,8500,8501],{"class":6029},"        name",[101,8503,561],{"class":164},[101,8505,8484],{"class":111},[101,8507,6132],{"class":168},[101,8509,8510,8512,8514,8516],{"class":103,"line":2211},[101,8511,6072],{"class":6029},[101,8513,561],{"class":164},[101,8515,6077],{"class":111},[101,8517,6132],{"class":168},[101,8519,8520],{"class":103,"line":2232},[101,8521,307],{"emptyLinePlaceholder":306},[101,8523,8524],{"class":103,"line":2241},[101,8525,8526],{"class":225},"        # arguments=['-d', default_rviz_config_path]\n",[101,8528,8529],{"class":103,"line":2256},[101,8530,8531],{"class":168},"        )\n",[101,8533,8534],{"class":103,"line":2265},[101,8535,307],{"emptyLinePlaceholder":306},[101,8537,8538,8540],{"class":103,"line":2274},[101,8539,6616],{"class":164},[101,8541,8542],{"class":168}," LaunchDescription([start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[23,8544,8545],{},"保存编译启动",[92,8547,8549],{"className":6015,"code":8548,"language":6017,"meta":57,"style":57},"colcon build\nros2 launch fishbot_description gazebo.launch.py\n",[98,8550,8551,8555],{"__ignoreMap":57},[101,8552,8553],{"class":103,"line":104},[101,8554,7800],{"class":168},[101,8556,8557],{"class":103,"line":229},[101,8558,6659],{"class":168},[23,8560,8561],{},"这样rviz2里就有模型了。",[23,8563,8564],{},[55,8565],{"alt":57,"src":8566},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1655.webp",[23,8568,8569],{},"可以保存下rviz2的配置",[23,8571,8572],{},[55,8573],{"alt":57,"src":8574},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1656.webp",[23,8576,8577],{},[55,8578],{"alt":57,"src":8579},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1657.webp",[23,8581,8582],{},"然后在launch里添加上rviz2的路径配置：",[92,8584,8586],{"className":6015,"code":8585,"language":6017,"meta":57,"style":57},"    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",[98,8587,8588,8602,8606,8610,8618,8628,8638,8648,8658,8672],{"__ignoreMap":57},[101,8589,8590,8593,8595,8597,8600],{"class":103,"line":104},[101,8591,8592],{"class":168},"    default_rviz_config_path ",[101,8594,561],{"class":164},[101,8596,6463],{"class":168},[101,8598,8599],{"class":111},"'rviz\u002Frviz2.rviz'",[101,8601,5979],{"class":168},[101,8603,8604],{"class":103,"line":229},[101,8605,307],{"emptyLinePlaceholder":306},[101,8607,8608],{"class":103,"line":257},[101,8609,8466],{"class":225},[101,8611,8612,8614,8616],{"class":103,"line":272},[101,8613,8471],{"class":168},[101,8615,561],{"class":164},[101,8617,6106],{"class":168},[101,8619,8620,8622,8624,8626],{"class":103,"line":284},[101,8621,6565],{"class":6029},[101,8623,561],{"class":164},[101,8625,8484],{"class":111},[101,8627,6132],{"class":168},[101,8629,8630,8632,8634,8636],{"class":103,"line":303},[101,8631,6576],{"class":6029},[101,8633,561],{"class":164},[101,8635,8484],{"class":111},[101,8637,6132],{"class":168},[101,8639,8640,8642,8644,8646],{"class":103,"line":310},[101,8641,8501],{"class":6029},[101,8643,561],{"class":164},[101,8645,8484],{"class":111},[101,8647,6132],{"class":168},[101,8649,8650,8652,8654,8656],{"class":103,"line":325},[101,8651,6072],{"class":6029},[101,8653,561],{"class":164},[101,8655,6077],{"class":111},[101,8657,6132],{"class":168},[101,8659,8660,8662,8664,8666,8669],{"class":103,"line":346},[101,8661,6587],{"class":6029},[101,8663,561],{"class":164},[101,8665,6035],{"class":168},[101,8667,8668],{"class":111},"'-d'",[101,8670,8671],{"class":168},", default_rviz_config_path]\n",[101,8673,8674],{"class":103,"line":357},[101,8675,8531],{"class":168},[23,8677,8678],{},"如下为全部的launch：",[92,8680,8682],{"className":6015,"code":8681,"language":6017,"meta":57,"style":57},"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",[98,8683,8684,8694,8704,8708,8712,8722,8726,8730,8734,8738,8742,8746,8750,8754,8758,8762,8766,8770,8774,8778,8782,8786,8790,8794,8798,8802,8806,8810,8814,8818,8822,8826,8830,8834,8844,8850,8854,8862,8870,8878,8886,8890,8912,8934,8938,8942,8954,8958,8962,8966,8970,8974,8978,8982,8986,8994,9026,9036,9040,9044,9052,9062,9072,9096,9100,9104,9112,9122,9132,9140,9144,9148,9152,9160,9170,9180,9190,9200,9212,9216,9220],{"__ignoreMap":57},[101,8685,8686,8688,8690,8692],{"class":103,"line":104},[101,8687,931],{"class":164},[101,8689,6191],{"class":168},[101,8691,6194],{"class":164},[101,8693,6197],{"class":168},[101,8695,8696,8698,8700,8702],{"class":103,"line":229},[101,8697,931],{"class":164},[101,8699,6204],{"class":168},[101,8701,6194],{"class":164},[101,8703,6209],{"class":168},[101,8705,8706],{"class":103,"line":257},[101,8707,307],{"emptyLinePlaceholder":306},[101,8709,8710],{"class":103,"line":272},[101,8711,6218],{"class":225},[101,8713,8714,8716,8718,8720],{"class":103,"line":284},[101,8715,931],{"class":164},[101,8717,6225],{"class":168},[101,8719,6194],{"class":164},[101,8721,6230],{"class":168},[101,8723,8724],{"class":103,"line":303},[101,8725,307],{"emptyLinePlaceholder":306},[101,8727,8728],{"class":103,"line":310},[101,8729,6239],{"class":225},[101,8731,8732],{"class":103,"line":325},[101,8733,307],{"emptyLinePlaceholder":306},[101,8735,8736],{"class":103,"line":346},[101,8737,6248],{"class":225},[101,8739,8740],{"class":103,"line":357},[101,8741,307],{"emptyLinePlaceholder":306},[101,8743,8744],{"class":103,"line":366},[101,8745,6257],{"class":225},[101,8747,8748],{"class":103,"line":381},[101,8749,307],{"emptyLinePlaceholder":306},[101,8751,8752],{"class":103,"line":386},[101,8753,6266],{"class":225},[101,8755,8756],{"class":103,"line":392},[101,8757,307],{"emptyLinePlaceholder":306},[101,8759,8760],{"class":103,"line":397},[101,8761,6275],{"class":225},[101,8763,8764],{"class":103,"line":403},[101,8765,307],{"emptyLinePlaceholder":306},[101,8767,8768],{"class":103,"line":408},[101,8769,6284],{"class":225},[101,8771,8772],{"class":103,"line":414},[101,8773,307],{"emptyLinePlaceholder":306},[101,8775,8776],{"class":103,"line":419},[101,8777,6293],{"class":225},[101,8779,8780],{"class":103,"line":425},[101,8781,307],{"emptyLinePlaceholder":306},[101,8783,8784],{"class":103,"line":430},[101,8785,6302],{"class":225},[101,8787,8788],{"class":103,"line":436},[101,8789,307],{"emptyLinePlaceholder":306},[101,8791,8792],{"class":103,"line":441},[101,8793,6311],{"class":225},[101,8795,8796],{"class":103,"line":447},[101,8797,307],{"emptyLinePlaceholder":306},[101,8799,8800],{"class":103,"line":452},[101,8801,6320],{"class":225},[101,8803,8804],{"class":103,"line":458},[101,8805,307],{"emptyLinePlaceholder":306},[101,8807,8808],{"class":103,"line":463},[101,8809,6329],{"class":225},[101,8811,8812],{"class":103,"line":469},[101,8813,307],{"emptyLinePlaceholder":306},[101,8815,8816],{"class":103,"line":474},[101,8817,6338],{"class":225},[101,8819,8820],{"class":103,"line":502},[101,8821,307],{"emptyLinePlaceholder":306},[101,8823,8824],{"class":103,"line":528},[101,8825,6347],{"class":225},[101,8827,8828],{"class":103,"line":572},[101,8829,307],{"emptyLinePlaceholder":306},[101,8831,8832],{"class":103,"line":577},[101,8833,6356],{"class":225},[101,8835,8836,8838,8840,8842],{"class":103,"line":588},[101,8837,931],{"class":164},[101,8839,6363],{"class":168},[101,8841,6194],{"class":164},[101,8843,6368],{"class":168},[101,8845,8846,8848],{"class":103,"line":633},[101,8847,6194],{"class":164},[101,8849,6375],{"class":168},[101,8851,8852],{"class":103,"line":663},[101,8853,307],{"emptyLinePlaceholder":306},[101,8855,8856,8858,8860],{"class":103,"line":675},[101,8857,6384],{"class":164},[101,8859,6387],{"class":107},[101,8861,6390],{"class":168},[101,8863,8864,8866,8868],{"class":103,"line":797},[101,8865,6395],{"class":168},[101,8867,561],{"class":164},[101,8869,6400],{"class":111},[101,8871,8872,8874,8876],{"class":103,"line":803},[101,8873,6405],{"class":168},[101,8875,561],{"class":164},[101,8877,6410],{"class":111},[101,8879,8880,8882,8884],{"class":103,"line":815},[101,8881,6415],{"class":168},[101,8883,561],{"class":164},[101,8885,6420],{"class":111},[101,8887,8888],{"class":103,"line":821},[101,8889,307],{"emptyLinePlaceholder":306},[101,8891,8892,8894,8896,8898,8900,8902,8904,8906,8908,8910],{"class":103,"line":827},[101,8893,6429],{"class":168},[101,8895,561],{"class":164},[101,8897,6434],{"class":168},[101,8899,6437],{"class":164},[101,8901,6440],{"class":111},[101,8903,6443],{"class":137},[101,8905,6446],{"class":168},[101,8907,6449],{"class":137},[101,8909,6440],{"class":111},[101,8911,5979],{"class":168},[101,8913,8914,8916,8918,8920,8922,8924,8926,8928,8930,8932],{"class":103,"line":833},[101,8915,6458],{"class":168},[101,8917,561],{"class":164},[101,8919,6463],{"class":168},[101,8921,6437],{"class":164},[101,8923,6468],{"class":111},[101,8925,6443],{"class":137},[101,8927,6473],{"class":168},[101,8929,6449],{"class":137},[101,8931,6478],{"class":111},[101,8933,5979],{"class":168},[101,8935,8936],{"class":103,"line":839},[101,8937,307],{"emptyLinePlaceholder":306},[101,8939,8940],{"class":103,"line":862},[101,8941,8259],{"class":225},[101,8943,8944,8946,8948,8950,8952],{"class":103,"line":905},[101,8945,8592],{"class":168},[101,8947,561],{"class":164},[101,8949,6463],{"class":168},[101,8951,8599],{"class":111},[101,8953,5979],{"class":168},[101,8955,8956],{"class":103,"line":942},[101,8957,307],{"emptyLinePlaceholder":306},[101,8959,8960],{"class":103,"line":947},[101,8961,6489],{"class":225},[101,8963,8964],{"class":103,"line":971},[101,8965,307],{"emptyLinePlaceholder":306},[101,8967,8968],{"class":103,"line":995},[101,8969,8276],{"class":225},[101,8971,8972],{"class":103,"line":1874},[101,8973,307],{"emptyLinePlaceholder":306},[101,8975,8976],{"class":103,"line":1883},[101,8977,8285],{"class":225},[101,8979,8980],{"class":103,"line":1898},[101,8981,307],{"emptyLinePlaceholder":306},[101,8983,8984],{"class":103,"line":1913},[101,8985,8294],{"class":225},[101,8987,8988,8990,8992],{"class":103,"line":1922},[101,8989,6494],{"class":168},[101,8991,561],{"class":164},[101,8993,6499],{"class":168},[101,8995,8996,8998,9000,9002,9004,9006,9008,9010,9012,9014,9016,9018,9020,9022,9024],{"class":103,"line":1931},[101,8997,6030],{"class":6029},[101,8999,561],{"class":164},[101,9001,6035],{"class":168},[101,9003,6038],{"class":111},[101,9005,6041],{"class":168},[101,9007,6044],{"class":111},[101,9009,6047],{"class":168},[101,9011,6050],{"class":111},[101,9013,6041],{"class":168},[101,9015,6055],{"class":111},[101,9017,6041],{"class":168},[101,9019,6050],{"class":111},[101,9021,6041],{"class":168},[101,9023,6064],{"class":111},[101,9025,6532],{"class":168},[101,9027,9028,9030,9032,9034],{"class":103,"line":1940},[101,9029,6072],{"class":6029},[101,9031,561],{"class":164},[101,9033,6077],{"class":111},[101,9035,5979],{"class":168},[101,9037,9038],{"class":103,"line":1956},[101,9039,307],{"emptyLinePlaceholder":306},[101,9041,9042],{"class":103,"line":2004},[101,9043,6551],{"class":225},[101,9045,9046,9048,9050],{"class":103,"line":2013},[101,9047,6556],{"class":168},[101,9049,561],{"class":164},[101,9051,6106],{"class":168},[101,9053,9054,9056,9058,9060],{"class":103,"line":2022},[101,9055,6565],{"class":6029},[101,9057,561],{"class":164},[101,9059,6116],{"class":111},[101,9061,6119],{"class":168},[101,9063,9064,9066,9068,9070],{"class":103,"line":2027},[101,9065,6576],{"class":6029},[101,9067,561],{"class":164},[101,9069,6129],{"class":111},[101,9071,6132],{"class":168},[101,9073,9074,9076,9078,9080,9082,9084,9086,9088,9090,9092,9094],{"class":103,"line":2049},[101,9075,6587],{"class":6029},[101,9077,561],{"class":164},[101,9079,6035],{"class":168},[101,9081,6144],{"class":111},[101,9083,6147],{"class":168},[101,9085,6150],{"class":111},[101,9087,6153],{"class":168},[101,9089,6156],{"class":6029},[101,9091,561],{"class":164},[101,9093,6077],{"class":111},[101,9095,5979],{"class":168},[101,9097,9098],{"class":103,"line":2065},[101,9099,307],{"emptyLinePlaceholder":306},[101,9101,9102],{"class":103,"line":2080},[101,9103,8413],{"class":225},[101,9105,9106,9108,9110],{"class":103,"line":2096},[101,9107,8418],{"class":168},[101,9109,561],{"class":164},[101,9111,6106],{"class":168},[101,9113,9114,9116,9118,9120],{"class":103,"line":2105},[101,9115,6565],{"class":6029},[101,9117,561],{"class":164},[101,9119,8431],{"class":111},[101,9121,6132],{"class":168},[101,9123,9124,9126,9128,9130],{"class":103,"line":2110},[101,9125,6576],{"class":6029},[101,9127,561],{"class":164},[101,9129,8431],{"class":111},[101,9131,6132],{"class":168},[101,9133,9134,9136,9138],{"class":103,"line":2126},[101,9135,6587],{"class":6029},[101,9137,561],{"class":164},[101,9139,8452],{"class":168},[101,9141,9142],{"class":103,"line":2135},[101,9143,8457],{"class":168},[101,9145,9146],{"class":103,"line":2156},[101,9147,307],{"emptyLinePlaceholder":306},[101,9149,9150],{"class":103,"line":2165},[101,9151,8466],{"class":225},[101,9153,9154,9156,9158],{"class":103,"line":2184},[101,9155,8471],{"class":168},[101,9157,561],{"class":164},[101,9159,6106],{"class":168},[101,9161,9162,9164,9166,9168],{"class":103,"line":2193},[101,9163,6565],{"class":6029},[101,9165,561],{"class":164},[101,9167,8484],{"class":111},[101,9169,6132],{"class":168},[101,9171,9172,9174,9176,9178],{"class":103,"line":2202},[101,9173,6576],{"class":6029},[101,9175,561],{"class":164},[101,9177,8484],{"class":111},[101,9179,6132],{"class":168},[101,9181,9182,9184,9186,9188],{"class":103,"line":2211},[101,9183,8501],{"class":6029},[101,9185,561],{"class":164},[101,9187,8484],{"class":111},[101,9189,6132],{"class":168},[101,9191,9192,9194,9196,9198],{"class":103,"line":2232},[101,9193,6072],{"class":6029},[101,9195,561],{"class":164},[101,9197,6077],{"class":111},[101,9199,6132],{"class":168},[101,9201,9202,9204,9206,9208,9210],{"class":103,"line":2241},[101,9203,6587],{"class":6029},[101,9205,561],{"class":164},[101,9207,6035],{"class":168},[101,9209,8668],{"class":111},[101,9211,8671],{"class":168},[101,9213,9214],{"class":103,"line":2256},[101,9215,8531],{"class":168},[101,9217,9218],{"class":103,"line":2265},[101,9219,307],{"emptyLinePlaceholder":306},[101,9221,9222,9224],{"class":103,"line":2274},[101,9223,6616],{"class":164},[101,9225,8542],{"class":168},[23,9227,9228],{},"可以自行编译测试。",[6869,9230,9232],{"id":9231},"惯性计imu","惯性计IMU",[23,9234,9235],{},"上节课通过配置两轮差速控制器我们已经成功的让fishbot在gazebo中动了起来，本节课我们通过给fishbot的URDF配置IMU传感器插件，让IMU模块工作起来。",[23,9237,9238],{},"惯性测量单元是测量物体三轴姿态角(或角速率)以及加速度的装置。一般的，一个IMU包含了三个单轴的加速度计和三个单轴的陀螺，加速度计检测物体在载体坐标系统独立三轴的加速度信号，而陀螺检测载体相对于导航坐标系的角速度信号，测量物体在三维空间中的角速度和加速度，并以此解算出物体的姿态。在导航中有着很重要的应用价值。",[23,9240,9241],{},"上面这段话是小鱼从百科中摘抄出来的，你需要知道的一个关键点是IMU可以测量以下三组数据：",[1081,9243,9244,9247,9250],{},[1084,9245,9246],{},"三维加速度计加速度",[1084,9248,9249],{},"三维陀螺仪角速度",[1084,9251,9252],{},"三维磁力计（有的也没有磁力计）",[23,9254,9255],{},"用六轴、九轴算法或其他算法等可以输出三轴欧拉角（Yaw,Pitch,Roll），欧拉角可以转化为四元数。",[23,9257,9258],{},"IMU长啥样？直接线下找控制组要就行，他们经常会玩这个。",[23,9260,9261],{},"便宜的长这样（MPU6050,MPU9050等）：",[23,9263,9264],{},"MPU6050是六轴的，MPU9050是九轴的。",[23,9266,9267],{},[55,9268],{"alt":57,"src":9269},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1658.webp",[23,9271,9272],{},"贵的长这样（HWT101CT，HWT605等）：",[23,9274,9275],{},"其中HWT101CT是三轴的，HWT605是六轴的。（各有优缺点）",[23,9277,9278],{},[55,9279],{"alt":57,"src":9280},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1659.webp",[23,9282,9283],{},"不要钱的长什么样？",[23,9285,9286],{},[55,9287],{"alt":57,"src":9288},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1660.webp",[23,9290,9291],{},"仿真的不要钱哈哈，接着我们来配置一下仿真的IMU。",[23,9293,9294,9295],{},"IMU对应的消息类型为",[98,9296,9297],{},"sensor_msgs\u002Fmsg\u002FImu",[23,9299,9300],{},"ROS的imu信息只有三轴加速度，角速度和四元数。（并没有磁力计和欧拉角，磁力计并非必须要填的，而欧拉角和四元数可以互相转换，四元数更好被算法运算，所以选择用四元数）",[23,9302,9303],{},"具体imu接口请看硬件平台章节。",[23,9305,9306,9307,9310],{},"可以看到除了每个数据对应的三个协方差之外，每一个还都对应一个",[98,9308,9309],{},"3*3","的协方差矩阵。",[23,9312,9313],{},"有了上节课的经验，我们可以很轻松的添加IMU传感器，但是还有一个需要注意的地方，为了更真实的模拟IMU传感器，我们需要给我们的仿真IMU传感器加点料。",[23,9315,9316,9317,9320,9321,9324],{},"加什么？加点高斯噪声，高斯噪声只需要指定平均值和标准差两个参数即可，不过因为IMU传感器的特殊性，我们还需要给模型添加两个偏差参数，分别是 ",[98,9318,9319],{},"平均值偏差","和",[98,9322,9323],{},"标准差偏差","。",[23,9326,9327],{},"有关Gazebo仿真和噪声模型更深入的介绍可以参考鱼香ROS发的两篇推文：",[1081,9329,9330,9337],{},[1084,9331,9332],{},[15,9333,9336],{"href":9334,"rel":9335},"https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002F0-OEATkyfMf6wEyrP5csGw",[19],"Gazebo仿真进阶教程之传感器高斯噪声（一）",[1084,9338,9339],{},[15,9340,9343],{"href":9341,"rel":9342},"https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002F5k1SEGdASjUMbwWdSpf1PQ",[19],"Gazebo仿真进阶教程之传感器高斯噪声（二）",[23,9345,9346,9347,9350],{},"下面是IMU传感器的URDF配置代码，大家结合文章对应可以理解一下，IMU对应的插件库",[98,9348,9349],{},"libgazebo_ros_imu_sensor.so","：",[92,9352,9354],{"className":1176,"code":9353,"language":1178,"meta":57,"style":57},"    \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",[98,9355,9356,9370,9390,9410,9418,9430,9442,9450,9462,9470,9482,9494,9506,9514,9522,9530,9544,9556,9568,9580,9592,9600,9608,9616,9630,9642,9654,9666,9678,9686,9694,9702,9716,9728,9740,9752,9764,9772,9780,9788,9796,9804,9818,9830,9842,9854,9866,9874,9882,9890,9904,9916,9928,9940,9952,9960,9968,9976,9990,10002,10014,10026,10038,10046,10054,10062,10070,10078],{"__ignoreMap":57},[101,9357,9358,9360,9362,9364,9366,9368],{"class":103,"line":104},[101,9359,1272],{"class":168},[101,9361,134],{"class":1188},[101,9363,3771],{"class":107},[101,9365,561],{"class":168},[101,9367,2121],{"class":111},[101,9369,1218],{"class":168},[101,9371,9372,9374,9376,9378,9380,9382,9384,9386,9388],{"class":103,"line":229},[101,9373,1367],{"class":168},[101,9375,4401],{"class":1188},[101,9377,1210],{"class":107},[101,9379,561],{"class":168},[101,9381,4408],{"class":111},[101,9383,1112],{"class":107},[101,9385,561],{"class":168},[101,9387,4415],{"class":111},[101,9389,1218],{"class":168},[101,9391,9392,9394,9396,9398,9400,9402,9404,9406,9408],{"class":103,"line":257},[101,9393,1367],{"class":168},[101,9395,3923],{"class":1188},[101,9397,3933],{"class":107},[101,9399,561],{"class":168},[101,9401,4431],{"class":111},[101,9403,1210],{"class":107},[101,9405,561],{"class":168},[101,9407,4438],{"class":111},[101,9409,1218],{"class":168},[101,9411,9412,9414,9416],{"class":103,"line":272},[101,9413,1357],{"class":168},[101,9415,3948],{"class":1188},[101,9417,1218],{"class":168},[101,9419,9420,9422,9424,9426,9428],{"class":103,"line":284},[101,9421,2555],{"class":168},[101,9423,3958],{"class":1188},[101,9425,3961],{"class":168},[101,9427,3958],{"class":1188},[101,9429,1218],{"class":168},[101,9431,9432,9434,9436,9438,9440],{"class":103,"line":303},[101,9433,2555],{"class":168},[101,9435,3973],{"class":1188},[101,9437,4472],{"class":168},[101,9439,3973],{"class":1188},[101,9441,1218],{"class":168},[101,9443,9444,9446,9448],{"class":103,"line":310},[101,9445,2571],{"class":168},[101,9447,3948],{"class":1188},[101,9449,1218],{"class":168},[101,9451,9452,9454,9456,9458,9460],{"class":103,"line":325},[101,9453,1357],{"class":168},[101,9455,4493],{"class":1188},[101,9457,4168],{"class":168},[101,9459,4493],{"class":1188},[101,9461,1218],{"class":168},[101,9463,9464,9466,9468],{"class":103,"line":346},[101,9465,2530],{"class":168},[101,9467,3923],{"class":1188},[101,9469,1218],{"class":168},[101,9471,9472,9474,9476,9478,9480],{"class":103,"line":357},[101,9473,1745],{"class":168},[101,9475,4516],{"class":1188},[101,9477,4139],{"class":168},[101,9479,4516],{"class":1188},[101,9481,1218],{"class":168},[101,9483,9484,9486,9488,9490,9492],{"class":103,"line":366},[101,9485,1745],{"class":168},[101,9487,4011],{"class":1188},[101,9489,4532],{"class":168},[101,9491,4011],{"class":1188},[101,9493,1218],{"class":168},[101,9495,9496,9498,9500,9502,9504],{"class":103,"line":381},[101,9497,1745],{"class":168},[101,9499,4544],{"class":1188},[101,9501,4139],{"class":168},[101,9503,4544],{"class":1188},[101,9505,1218],{"class":168},[101,9507,9508,9510,9512],{"class":103,"line":386},[101,9509,1745],{"class":168},[101,9511,4558],{"class":1188},[101,9513,1218],{"class":168},[101,9515,9516,9518,9520],{"class":103,"line":392},[101,9517,1357],{"class":168},[101,9519,4568],{"class":1188},[101,9521,1218],{"class":168},[101,9523,9524,9526,9528],{"class":103,"line":397},[101,9525,2555],{"class":168},[101,9527,4578],{"class":1188},[101,9529,1218],{"class":168},[101,9531,9532,9534,9536,9538,9540,9542],{"class":103,"line":403},[101,9533,1449],{"class":168},[101,9535,4588],{"class":1188},[101,9537,1112],{"class":107},[101,9539,561],{"class":168},[101,9541,4595],{"class":111},[101,9543,1218],{"class":168},[101,9545,9546,9548,9550,9552,9554],{"class":103,"line":408},[101,9547,1398],{"class":168},[101,9549,4605],{"class":1188},[101,9551,4608],{"class":168},[101,9553,4605],{"class":1188},[101,9555,1218],{"class":168},[101,9557,9558,9560,9562,9564,9566],{"class":103,"line":414},[101,9559,1398],{"class":168},[101,9561,4620],{"class":1188},[101,9563,4623],{"class":168},[101,9565,4620],{"class":1188},[101,9567,1218],{"class":168},[101,9569,9570,9572,9574,9576,9578],{"class":103,"line":419},[101,9571,1398],{"class":168},[101,9573,4635],{"class":1188},[101,9575,4638],{"class":168},[101,9577,4635],{"class":1188},[101,9579,1218],{"class":168},[101,9581,9582,9584,9586,9588,9590],{"class":103,"line":425},[101,9583,1398],{"class":168},[101,9585,4650],{"class":1188},[101,9587,4653],{"class":168},[101,9589,4650],{"class":1188},[101,9591,1218],{"class":168},[101,9593,9594,9596,9598],{"class":103,"line":430},[101,9595,4663],{"class":168},[101,9597,4588],{"class":1188},[101,9599,1218],{"class":168},[101,9601,9602,9604,9606],{"class":103,"line":436},[101,9603,4673],{"class":168},[101,9605,4578],{"class":1188},[101,9607,1218],{"class":168},[101,9609,9610,9612,9614],{"class":103,"line":441},[101,9611,2555],{"class":168},[101,9613,4685],{"class":1188},[101,9615,1218],{"class":168},[101,9617,9618,9620,9622,9624,9626,9628],{"class":103,"line":447},[101,9619,1449],{"class":168},[101,9621,4588],{"class":1188},[101,9623,1112],{"class":107},[101,9625,561],{"class":168},[101,9627,4595],{"class":111},[101,9629,1218],{"class":168},[101,9631,9632,9634,9636,9638,9640],{"class":103,"line":452},[101,9633,1398],{"class":168},[101,9635,4605],{"class":1188},[101,9637,4608],{"class":168},[101,9639,4605],{"class":1188},[101,9641,1218],{"class":168},[101,9643,9644,9646,9648,9650,9652],{"class":103,"line":458},[101,9645,1398],{"class":168},[101,9647,4620],{"class":1188},[101,9649,4623],{"class":168},[101,9651,4620],{"class":1188},[101,9653,1218],{"class":168},[101,9655,9656,9658,9660,9662,9664],{"class":103,"line":463},[101,9657,1398],{"class":168},[101,9659,4635],{"class":1188},[101,9661,4638],{"class":168},[101,9663,4635],{"class":1188},[101,9665,1218],{"class":168},[101,9667,9668,9670,9672,9674,9676],{"class":103,"line":469},[101,9669,1398],{"class":168},[101,9671,4650],{"class":1188},[101,9673,4653],{"class":168},[101,9675,4650],{"class":1188},[101,9677,1218],{"class":168},[101,9679,9680,9682,9684],{"class":103,"line":474},[101,9681,4663],{"class":168},[101,9683,4588],{"class":1188},[101,9685,1218],{"class":168},[101,9687,9688,9690,9692],{"class":103,"line":502},[101,9689,4673],{"class":168},[101,9691,4685],{"class":1188},[101,9693,1218],{"class":168},[101,9695,9696,9698,9700],{"class":103,"line":528},[101,9697,2555],{"class":168},[101,9699,4780],{"class":1188},[101,9701,1218],{"class":168},[101,9703,9704,9706,9708,9710,9712,9714],{"class":103,"line":572},[101,9705,1449],{"class":168},[101,9707,4588],{"class":1188},[101,9709,1112],{"class":107},[101,9711,561],{"class":168},[101,9713,4595],{"class":111},[101,9715,1218],{"class":168},[101,9717,9718,9720,9722,9724,9726],{"class":103,"line":577},[101,9719,1398],{"class":168},[101,9721,4605],{"class":1188},[101,9723,4608],{"class":168},[101,9725,4605],{"class":1188},[101,9727,1218],{"class":168},[101,9729,9730,9732,9734,9736,9738],{"class":103,"line":588},[101,9731,1398],{"class":168},[101,9733,4620],{"class":1188},[101,9735,4623],{"class":168},[101,9737,4620],{"class":1188},[101,9739,1218],{"class":168},[101,9741,9742,9744,9746,9748,9750],{"class":103,"line":633},[101,9743,1398],{"class":168},[101,9745,4635],{"class":1188},[101,9747,4638],{"class":168},[101,9749,4635],{"class":1188},[101,9751,1218],{"class":168},[101,9753,9754,9756,9758,9760,9762],{"class":103,"line":663},[101,9755,1398],{"class":168},[101,9757,4650],{"class":1188},[101,9759,4653],{"class":168},[101,9761,4650],{"class":1188},[101,9763,1218],{"class":168},[101,9765,9766,9768,9770],{"class":103,"line":675},[101,9767,4663],{"class":168},[101,9769,4588],{"class":1188},[101,9771,1218],{"class":168},[101,9773,9774,9776,9778],{"class":103,"line":797},[101,9775,4673],{"class":168},[101,9777,4780],{"class":1188},[101,9779,1218],{"class":168},[101,9781,9782,9784,9786],{"class":103,"line":803},[101,9783,2571],{"class":168},[101,9785,4568],{"class":1188},[101,9787,1218],{"class":168},[101,9789,9790,9792,9794],{"class":103,"line":815},[101,9791,1357],{"class":168},[101,9793,4884],{"class":1188},[101,9795,1218],{"class":168},[101,9797,9798,9800,9802],{"class":103,"line":821},[101,9799,2555],{"class":168},[101,9801,4578],{"class":1188},[101,9803,1218],{"class":168},[101,9805,9806,9808,9810,9812,9814,9816],{"class":103,"line":827},[101,9807,1449],{"class":168},[101,9809,4588],{"class":1188},[101,9811,1112],{"class":107},[101,9813,561],{"class":168},[101,9815,4595],{"class":111},[101,9817,1218],{"class":168},[101,9819,9820,9822,9824,9826,9828],{"class":103,"line":833},[101,9821,1398],{"class":168},[101,9823,4605],{"class":1188},[101,9825,4608],{"class":168},[101,9827,4605],{"class":1188},[101,9829,1218],{"class":168},[101,9831,9832,9834,9836,9838,9840],{"class":103,"line":839},[101,9833,1398],{"class":168},[101,9835,4620],{"class":1188},[101,9837,4933],{"class":168},[101,9839,4620],{"class":1188},[101,9841,1218],{"class":168},[101,9843,9844,9846,9848,9850,9852],{"class":103,"line":862},[101,9845,1398],{"class":168},[101,9847,4635],{"class":1188},[101,9849,4947],{"class":168},[101,9851,4635],{"class":1188},[101,9853,1218],{"class":168},[101,9855,9856,9858,9860,9862,9864],{"class":103,"line":905},[101,9857,1398],{"class":168},[101,9859,4650],{"class":1188},[101,9861,4961],{"class":168},[101,9863,4650],{"class":1188},[101,9865,1218],{"class":168},[101,9867,9868,9870,9872],{"class":103,"line":942},[101,9869,4663],{"class":168},[101,9871,4588],{"class":1188},[101,9873,1218],{"class":168},[101,9875,9876,9878,9880],{"class":103,"line":947},[101,9877,4673],{"class":168},[101,9879,4578],{"class":1188},[101,9881,1218],{"class":168},[101,9883,9884,9886,9888],{"class":103,"line":971},[101,9885,2555],{"class":168},[101,9887,4685],{"class":1188},[101,9889,1218],{"class":168},[101,9891,9892,9894,9896,9898,9900,9902],{"class":103,"line":995},[101,9893,1449],{"class":168},[101,9895,4588],{"class":1188},[101,9897,1112],{"class":107},[101,9899,561],{"class":168},[101,9901,4595],{"class":111},[101,9903,1218],{"class":168},[101,9905,9906,9908,9910,9912,9914],{"class":103,"line":1874},[101,9907,1398],{"class":168},[101,9909,4605],{"class":1188},[101,9911,4608],{"class":168},[101,9913,4605],{"class":1188},[101,9915,1218],{"class":168},[101,9917,9918,9920,9922,9924,9926],{"class":103,"line":1883},[101,9919,1398],{"class":168},[101,9921,4620],{"class":1188},[101,9923,4933],{"class":168},[101,9925,4620],{"class":1188},[101,9927,1218],{"class":168},[101,9929,9930,9932,9934,9936,9938],{"class":103,"line":1898},[101,9931,1398],{"class":168},[101,9933,4635],{"class":1188},[101,9935,4947],{"class":168},[101,9937,4635],{"class":1188},[101,9939,1218],{"class":168},[101,9941,9942,9944,9946,9948,9950],{"class":103,"line":1913},[101,9943,1398],{"class":168},[101,9945,4650],{"class":1188},[101,9947,4961],{"class":168},[101,9949,4650],{"class":1188},[101,9951,1218],{"class":168},[101,9953,9954,9956,9958],{"class":103,"line":1922},[101,9955,4663],{"class":168},[101,9957,4588],{"class":1188},[101,9959,1218],{"class":168},[101,9961,9962,9964,9966],{"class":103,"line":1931},[101,9963,4673],{"class":168},[101,9965,4685],{"class":1188},[101,9967,1218],{"class":168},[101,9969,9970,9972,9974],{"class":103,"line":1940},[101,9971,2555],{"class":168},[101,9973,4780],{"class":1188},[101,9975,1218],{"class":168},[101,9977,9978,9980,9982,9984,9986,9988],{"class":103,"line":1956},[101,9979,1449],{"class":168},[101,9981,4588],{"class":1188},[101,9983,1112],{"class":107},[101,9985,561],{"class":168},[101,9987,4595],{"class":111},[101,9989,1218],{"class":168},[101,9991,9992,9994,9996,9998,10000],{"class":103,"line":2004},[101,9993,1398],{"class":168},[101,9995,4605],{"class":1188},[101,9997,4608],{"class":168},[101,9999,4605],{"class":1188},[101,10001,1218],{"class":168},[101,10003,10004,10006,10008,10010,10012],{"class":103,"line":2013},[101,10005,1398],{"class":168},[101,10007,4620],{"class":1188},[101,10009,4933],{"class":168},[101,10011,4620],{"class":1188},[101,10013,1218],{"class":168},[101,10015,10016,10018,10020,10022,10024],{"class":103,"line":2022},[101,10017,1398],{"class":168},[101,10019,4635],{"class":1188},[101,10021,4947],{"class":168},[101,10023,4635],{"class":1188},[101,10025,1218],{"class":168},[101,10027,10028,10030,10032,10034,10036],{"class":103,"line":2027},[101,10029,1398],{"class":168},[101,10031,4650],{"class":1188},[101,10033,4961],{"class":168},[101,10035,4650],{"class":1188},[101,10037,1218],{"class":168},[101,10039,10040,10042,10044],{"class":103,"line":2049},[101,10041,4663],{"class":168},[101,10043,4588],{"class":1188},[101,10045,1218],{"class":168},[101,10047,10048,10050,10052],{"class":103,"line":2065},[101,10049,4673],{"class":168},[101,10051,4780],{"class":1188},[101,10053,1218],{"class":168},[101,10055,10056,10058,10060],{"class":103,"line":2080},[101,10057,2571],{"class":168},[101,10059,4884],{"class":1188},[101,10061,1218],{"class":168},[101,10063,10064,10066,10068],{"class":103,"line":2096},[101,10065,2530],{"class":168},[101,10067,4558],{"class":1188},[101,10069,1218],{"class":168},[101,10071,10072,10074,10076],{"class":103,"line":2105},[101,10073,1424],{"class":168},[101,10075,4401],{"class":1188},[101,10077,1218],{"class":168},[101,10079,10080,10082,10084],{"class":103,"line":2110},[101,10081,1476],{"class":168},[101,10083,134],{"class":1188},[101,10085,1218],{"class":168},[23,10087,10088],{},"我们之前下载的fishbot已经包含该内容了，所以不用再添加了，直接运行即可。",[92,10090,10091],{"className":6015,"code":6659,"language":6017,"meta":57,"style":57},[98,10092,10093],{"__ignoreMap":57},[101,10094,10095],{"class":103,"line":104},[101,10096,6659],{"class":168},[92,10098,10100],{"className":6015,"code":10099,"language":6017,"meta":57,"style":57},"ros2 topic list\n",[98,10101,10102],{"__ignoreMap":57},[101,10103,10104,10106],{"class":103,"line":104},[101,10105,7833],{"class":168},[101,10107,7828],{"class":137},[23,10109,10110],{},[55,10111],{"alt":57,"src":10112},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1661.webp",[92,10114,10116],{"className":6015,"code":10115,"language":6017,"meta":57,"style":57},"ros2 topic info \u002Fimu\nros2 topic echo \u002Fimu\n",[98,10117,10118,10128],{"__ignoreMap":57},[101,10119,10120,10123,10125],{"class":103,"line":104},[101,10121,10122],{"class":168},"ros2 topic info ",[101,10124,186],{"class":164},[101,10126,10127],{"class":168},"imu\n",[101,10129,10130,10133,10135],{"class":103,"line":229},[101,10131,10132],{"class":168},"ros2 topic echo ",[101,10134,186],{"class":164},[101,10136,10127],{"class":168},[23,10138,10139],{},[55,10140],{"alt":57,"src":10141},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1662.webp",[23,10143,10144],{},[55,10145],{"alt":57,"src":10146},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1663.webp",[92,10148,10150],{"className":7092,"code":10149,"language":7094,"meta":57,"style":57},"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",[98,10151,10152,10158,10165,10175,10185,10194,10201,10211,10221,10231,10241,10248,10254,10260,10266,10272,10278,10284,10290,10296,10302,10308,10317,10326,10335,10342,10349,10355,10361,10367,10373,10379,10385,10391,10397,10403,10412,10421,10430,10437,10444,10450,10456,10462,10468,10474,10480,10486],{"__ignoreMap":57},[101,10153,10154,10156],{"class":103,"line":104},[101,10155,7104],{"class":1188},[101,10157,7107],{"class":168},[101,10159,10160,10163],{"class":103,"line":229},[101,10161,10162],{"class":1188},"  stamp",[101,10164,7107],{"class":168},[101,10166,10167,10170,10172],{"class":103,"line":257},[101,10168,10169],{"class":1188},"    sec",[101,10171,642],{"class":168},[101,10173,10174],{"class":137},"150\n",[101,10176,10177,10180,10182],{"class":103,"line":272},[101,10178,10179],{"class":1188},"    nanosec",[101,10181,642],{"class":168},[101,10183,10184],{"class":137},"599000000\n",[101,10186,10187,10190,10192],{"class":103,"line":284},[101,10188,10189],{"class":1188},"  frame_id",[101,10191,642],{"class":168},[101,10193,7154],{"class":111},[101,10195,10196,10199],{"class":103,"line":303},[101,10197,10198],{"class":1188},"orientation",[101,10200,7107],{"class":168},[101,10202,10203,10206,10208],{"class":103,"line":310},[101,10204,10205],{"class":1188},"  x",[101,10207,642],{"class":168},[101,10209,10210],{"class":137},"3.434713830866392e-07\n",[101,10212,10213,10216,10218],{"class":103,"line":325},[101,10214,10215],{"class":137},"  y",[101,10217,642],{"class":168},[101,10219,10220],{"class":137},"7.119913105768616e-06\n",[101,10222,10223,10226,10228],{"class":103,"line":346},[101,10224,10225],{"class":1188},"  z",[101,10227,642],{"class":168},[101,10229,10230],{"class":137},"-0.00028312437320413914\n",[101,10232,10233,10236,10238],{"class":103,"line":357},[101,10234,10235],{"class":1188},"  w",[101,10237,642],{"class":168},[101,10239,10240],{"class":137},"0.9999999598948884\n",[101,10242,10243,10246],{"class":103,"line":366},[101,10244,10245],{"class":1188},"orientation_covariance",[101,10247,7107],{"class":168},[101,10249,10250,10252],{"class":103,"line":381},[101,10251,7101],{"class":168},[101,10253,7353],{"class":137},[101,10255,10256,10258],{"class":103,"line":386},[101,10257,7101],{"class":168},[101,10259,7353],{"class":137},[101,10261,10262,10264],{"class":103,"line":392},[101,10263,7101],{"class":168},[101,10265,7353],{"class":137},[101,10267,10268,10270],{"class":103,"line":397},[101,10269,7101],{"class":168},[101,10271,7353],{"class":137},[101,10273,10274,10276],{"class":103,"line":403},[101,10275,7101],{"class":168},[101,10277,7353],{"class":137},[101,10279,10280,10282],{"class":103,"line":408},[101,10281,7101],{"class":168},[101,10283,7353],{"class":137},[101,10285,10286,10288],{"class":103,"line":414},[101,10287,7101],{"class":168},[101,10289,7353],{"class":137},[101,10291,10292,10294],{"class":103,"line":419},[101,10293,7101],{"class":168},[101,10295,7353],{"class":137},[101,10297,10298,10300],{"class":103,"line":425},[101,10299,7101],{"class":168},[101,10301,7353],{"class":137},[101,10303,10304,10306],{"class":103,"line":430},[101,10305,4568],{"class":1188},[101,10307,7107],{"class":168},[101,10309,10310,10312,10314],{"class":103,"line":436},[101,10311,10205],{"class":1188},[101,10313,642],{"class":168},[101,10315,10316],{"class":137},"-0.00013597855247901325\n",[101,10318,10319,10321,10323],{"class":103,"line":441},[101,10320,10215],{"class":137},[101,10322,642],{"class":168},[101,10324,10325],{"class":137},"0.0006306135617081868\n",[101,10327,10328,10330,10332],{"class":103,"line":447},[101,10329,10225],{"class":1188},[101,10331,642],{"class":168},[101,10333,10334],{"class":137},"-0.00015794894627685146\n",[101,10336,10337,10340],{"class":103,"line":452},[101,10338,10339],{"class":1188},"angular_velocity_covariance",[101,10341,7107],{"class":168},[101,10343,10344,10346],{"class":103,"line":458},[101,10345,7101],{"class":168},[101,10347,10348],{"class":137},"4.0e-08\n",[101,10350,10351,10353],{"class":103,"line":463},[101,10352,7101],{"class":168},[101,10354,7353],{"class":137},[101,10356,10357,10359],{"class":103,"line":469},[101,10358,7101],{"class":168},[101,10360,7353],{"class":137},[101,10362,10363,10365],{"class":103,"line":474},[101,10364,7101],{"class":168},[101,10366,7353],{"class":137},[101,10368,10369,10371],{"class":103,"line":502},[101,10370,7101],{"class":168},[101,10372,10348],{"class":137},[101,10374,10375,10377],{"class":103,"line":528},[101,10376,7101],{"class":168},[101,10378,7353],{"class":137},[101,10380,10381,10383],{"class":103,"line":572},[101,10382,7101],{"class":168},[101,10384,7353],{"class":137},[101,10386,10387,10389],{"class":103,"line":577},[101,10388,7101],{"class":168},[101,10390,7353],{"class":137},[101,10392,10393,10395],{"class":103,"line":588},[101,10394,7101],{"class":168},[101,10396,10348],{"class":137},[101,10398,10399,10401],{"class":103,"line":633},[101,10400,4884],{"class":1188},[101,10402,7107],{"class":168},[101,10404,10405,10407,10409],{"class":103,"line":663},[101,10406,10205],{"class":1188},[101,10408,642],{"class":168},[101,10410,10411],{"class":137},"0.08679200038530369\n",[101,10413,10414,10416,10418],{"class":103,"line":675},[101,10415,10215],{"class":137},[101,10417,642],{"class":168},[101,10419,10420],{"class":137},"0.07753419258567491\n",[101,10422,10423,10425,10427],{"class":103,"line":797},[101,10424,10225],{"class":1188},[101,10426,642],{"class":168},[101,10428,10429],{"class":137},"9.687910969061628\n",[101,10431,10432,10435],{"class":103,"line":803},[101,10433,10434],{"class":1188},"linear_acceleration_covariance",[101,10436,7107],{"class":168},[101,10438,10439,10441],{"class":103,"line":815},[101,10440,7101],{"class":168},[101,10442,10443],{"class":137},"0.00028900000000000003\n",[101,10445,10446,10448],{"class":103,"line":821},[101,10447,7101],{"class":168},[101,10449,7353],{"class":137},[101,10451,10452,10454],{"class":103,"line":827},[101,10453,7101],{"class":168},[101,10455,7353],{"class":137},[101,10457,10458,10460],{"class":103,"line":833},[101,10459,7101],{"class":168},[101,10461,7353],{"class":137},[101,10463,10464,10466],{"class":103,"line":839},[101,10465,7101],{"class":168},[101,10467,10443],{"class":137},[101,10469,10470,10472],{"class":103,"line":862},[101,10471,7101],{"class":168},[101,10473,7353],{"class":137},[101,10475,10476,10478],{"class":103,"line":905},[101,10477,7101],{"class":168},[101,10479,7353],{"class":137},[101,10481,10482,10484],{"class":103,"line":942},[101,10483,7101],{"class":168},[101,10485,7353],{"class":137},[101,10487,10488,10490],{"class":103,"line":947},[101,10489,7101],{"class":168},[101,10491,10443],{"class":137},[23,10493,10494],{},"用rqt可视化：",[23,10496,10497],{},[55,10498],{"alt":57,"src":10499},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1664.webp",[6869,10501,10503],{"id":10502},"雷达laser","雷达Laser",[23,10505,10506],{},"本节我们来认识一个新的传感器，该传感器在自动驾驶、室内导航等应用非常多，比如扫地机器人上就是用的它作为感知环境的重要工具，该传感器是激光雷达。",[23,10508,10509,10510,10513],{},"激光雷达（Light Detection And Ranging）,缩写",[98,10511,10512],{},"LiDAR","，英文也叫laser,翻译一下叫——激光探测与测距。",[23,10515,10516],{},"激光雷达的原理也很简单，就像蝙蝠的定位方法一样，蝙蝠定位大家都知道吧，像下面这样子的回声定位。",[23,10518,10519],{},[55,10520],{"alt":57,"src":10521},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1665.webp",[23,10523,10524],{},"普通的单线激光雷达一般有一个发射器，一个接收器，发射器发出激光射线到前方的目标上，物品会将激光反射回来，然后激光雷达的接受器可以检测到反射的激光。",[23,10526,10527],{},[55,10528],{"alt":57,"src":10529},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1666.webp",[23,10531,10532],{},"通过计算发送和反馈之间的时间间隔，乘上激光的速度，就可以计算出激光飞行的距离，该计算方法成为TOF（飞行时间法Time of flight，也称时差法）。",[23,10534,10535,10536],{},"除了TOF之外还有其他方法进行测距，比如三角法，这里就不拓展了放一篇文章，大家自行阅读。",[15,10537,10540],{"href":10538,"rel":10539},"https:\u002F\u002Fwww.slamtec.com\u002Fcn\u002FNews\u002FDetail\u002F190",[19],"激光三角测距原理详述",[23,10542,10543],{},"目前市面上的激光雷达，几乎都是采用三角测距，比如思岚的：",[23,10545,10546],{},[55,10547],{"alt":57,"src":10548},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1667.webp",[23,10550,10551],{},"需要注意的是虽然只有一个发射器和一个接受器，激光雷达通过电机可以进行旋转，这样就可以达到对周围环境360度测距的目的。",[23,10553,10554],{},"五位数的长这样：",[23,10556,10557],{},[55,10558],{"alt":57,"src":10559},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1668.webp",[23,10561,10562],{},"四位数的长这样（咱们有一台）",[23,10564,10565],{},[55,10566],{"alt":57,"src":10567},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1669.webp",[23,10569,10570],{},"三位数的长这样（咱们也有）",[23,10572,10573],{},[55,10574],{"alt":57,"src":10575},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1670.webp",[23,10577,10578],{},"两位数的长这样",[23,10580,10581],{},[55,10582],{"alt":57,"src":10583},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1671.webp",[23,10585,10586],{},"不要钱的长这样",[23,10588,10589],{},"仿真的，不要钱",[23,10591,10592],{},[55,10593],{"alt":57,"src":10594},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1672.webp",[23,10596,10597,10598,9324],{},"因为激光雷达是属于射线类传感器，该类传感在在Gazebo插件中都被封装成了一个动态库",[98,10599,10600],{},"libgazebo_ros_ray_sensor.so",[23,10602,10603,10604,9324],{},"接着我们来看看LiDAR的话题消息接口",[98,10605,10606],{},"sensor_msgs\u002Fmsg\u002FLaserScan",[23,10608,10609],{},"雷达的数据结构有些复杂，但通过注释和名字相信你可以看的七七八八，看不懂也没关系，一般情况下我们不会直接的对雷达的数据做操作。",[23,10611,10612],{},"雷达的模型不需要collision，请删掉，否则会挡激光射出。",[23,10614,10615],{},"有了前面的经验，我们需要在URDF添加以下内容即可，但我们下载的是鱼香ROS添加好的，所以不用改了：",[92,10617,10619],{"className":1176,"code":10618,"language":1178,"meta":57,"style":57},"  \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",[98,10620,10621,10635,10655,10667,10679,10692,10704,10712,10720,10728,10740,10752,10764,10776,10784,10792,10800,10812,10824,10836,10844,10852,10864,10876,10888,10896,10904,10908,10928,10936,10948,10956,10968,10980,10988,10996],{"__ignoreMap":57},[101,10622,10623,10625,10627,10629,10631,10633],{"class":103,"line":104},[101,10624,1227],{"class":168},[101,10626,134],{"class":1188},[101,10628,3771],{"class":107},[101,10630,561],{"class":168},[101,10632,1702],{"class":111},[101,10634,1218],{"class":168},[101,10636,10637,10639,10641,10643,10645,10647,10649,10651,10653],{"class":103,"line":229},[101,10638,1367],{"class":168},[101,10640,4401],{"class":1188},[101,10642,1210],{"class":107},[101,10644,561],{"class":168},[101,10646,5241],{"class":111},[101,10648,1112],{"class":107},[101,10650,561],{"class":168},[101,10652,5248],{"class":111},[101,10654,1218],{"class":168},[101,10656,10657,10659,10661,10663,10665],{"class":103,"line":257},[101,10658,1367],{"class":168},[101,10660,4516],{"class":1188},[101,10662,4139],{"class":168},[101,10664,4516],{"class":1188},[101,10666,1218],{"class":168},[101,10668,10669,10671,10673,10675,10677],{"class":103,"line":272},[101,10670,1367],{"class":168},[101,10672,4544],{"class":1188},[101,10674,4139],{"class":168},[101,10676,4544],{"class":1188},[101,10678,1218],{"class":168},[101,10680,10681,10683,10685,10688,10690],{"class":103,"line":284},[101,10682,1367],{"class":168},[101,10684,4011],{"class":1188},[101,10686,10687],{"class":168},">10\u003C\u002F",[101,10689,4011],{"class":1188},[101,10691,1218],{"class":168},[101,10693,10694,10696,10698,10700,10702],{"class":103,"line":303},[101,10695,1367],{"class":168},[101,10697,5298],{"class":1188},[101,10699,5301],{"class":168},[101,10701,5298],{"class":1188},[101,10703,1218],{"class":168},[101,10705,10706,10708,10710],{"class":103,"line":310},[101,10707,1367],{"class":168},[101,10709,5313],{"class":1188},[101,10711,1218],{"class":168},[101,10713,10714,10716,10718],{"class":103,"line":325},[101,10715,1357],{"class":168},[101,10717,5323],{"class":1188},[101,10719,1218],{"class":168},[101,10721,10722,10724,10726],{"class":103,"line":346},[101,10723,2555],{"class":168},[101,10725,5333],{"class":1188},[101,10727,1218],{"class":168},[101,10729,10730,10732,10734,10736,10738],{"class":103,"line":357},[101,10731,1449],{"class":168},[101,10733,5343],{"class":1188},[101,10735,5346],{"class":168},[101,10737,5343],{"class":1188},[101,10739,1218],{"class":168},[101,10741,10742,10744,10746,10748,10750],{"class":103,"line":366},[101,10743,1449],{"class":168},[101,10745,5358],{"class":1188},[101,10747,5361],{"class":168},[101,10749,5358],{"class":1188},[101,10751,1218],{"class":168},[101,10753,10754,10756,10758,10760,10762],{"class":103,"line":381},[101,10755,1449],{"class":168},[101,10757,5373],{"class":1188},[101,10759,5376],{"class":168},[101,10761,5373],{"class":1188},[101,10763,1218],{"class":168},[101,10765,10766,10768,10770,10772,10774],{"class":103,"line":386},[101,10767,1449],{"class":168},[101,10769,5388],{"class":1188},[101,10771,5391],{"class":168},[101,10773,5388],{"class":1188},[101,10775,1218],{"class":168},[101,10777,10778,10780,10782],{"class":103,"line":392},[101,10779,4673],{"class":168},[101,10781,5333],{"class":1188},[101,10783,1218],{"class":168},[101,10785,10786,10788,10790],{"class":103,"line":397},[101,10787,2571],{"class":168},[101,10789,5323],{"class":1188},[101,10791,1218],{"class":168},[101,10793,10794,10796,10798],{"class":103,"line":403},[101,10795,1357],{"class":168},[101,10797,5421],{"class":1188},[101,10799,1218],{"class":168},[101,10801,10802,10804,10806,10808,10810],{"class":103,"line":408},[101,10803,2555],{"class":168},[101,10805,5431],{"class":1188},[101,10807,5434],{"class":168},[101,10809,5431],{"class":1188},[101,10811,1218],{"class":168},[101,10813,10814,10816,10818,10820,10822],{"class":103,"line":414},[101,10815,2555],{"class":168},[101,10817,5446],{"class":1188},[101,10819,5449],{"class":168},[101,10821,5446],{"class":1188},[101,10823,1218],{"class":168},[101,10825,10826,10828,10830,10832,10834],{"class":103,"line":419},[101,10827,2555],{"class":168},[101,10829,5358],{"class":1188},[101,10831,5463],{"class":168},[101,10833,5358],{"class":1188},[101,10835,1218],{"class":168},[101,10837,10838,10840,10842],{"class":103,"line":425},[101,10839,2571],{"class":168},[101,10841,5421],{"class":1188},[101,10843,1218],{"class":168},[101,10845,10846,10848,10850],{"class":103,"line":430},[101,10847,1357],{"class":168},[101,10849,4588],{"class":1188},[101,10851,1218],{"class":168},[101,10853,10854,10856,10858,10860,10862],{"class":103,"line":436},[101,10855,2555],{"class":168},[101,10857,5493],{"class":1188},[101,10859,5496],{"class":168},[101,10861,5493],{"class":1188},[101,10863,1218],{"class":168},[101,10865,10866,10868,10870,10872,10874],{"class":103,"line":441},[101,10867,2555],{"class":168},[101,10869,4605],{"class":1188},[101,10871,4608],{"class":168},[101,10873,4605],{"class":1188},[101,10875,1218],{"class":168},[101,10877,10878,10880,10882,10884,10886],{"class":103,"line":447},[101,10879,2555],{"class":168},[101,10881,4620],{"class":1188},[101,10883,5523],{"class":168},[101,10885,4620],{"class":1188},[101,10887,1218],{"class":168},[101,10889,10890,10892,10894],{"class":103,"line":452},[101,10891,2571],{"class":168},[101,10893,4588],{"class":1188},[101,10895,1218],{"class":168},[101,10897,10898,10900,10902],{"class":103,"line":458},[101,10899,1424],{"class":168},[101,10901,5313],{"class":1188},[101,10903,1218],{"class":168},[101,10905,10906],{"class":103,"line":463},[101,10907,307],{"emptyLinePlaceholder":306},[101,10909,10910,10912,10914,10916,10918,10920,10922,10924,10926],{"class":103,"line":469},[101,10911,1367],{"class":168},[101,10913,3923],{"class":1188},[101,10915,1210],{"class":107},[101,10917,561],{"class":168},[101,10919,5564],{"class":111},[101,10921,3933],{"class":107},[101,10923,561],{"class":168},[101,10925,5571],{"class":111},[101,10927,1218],{"class":168},[101,10929,10930,10932,10934],{"class":103,"line":474},[101,10931,1745],{"class":168},[101,10933,3948],{"class":1188},[101,10935,1218],{"class":168},[101,10937,10938,10940,10942,10944,10946],{"class":103,"line":502},[101,10939,1357],{"class":168},[101,10941,3973],{"class":1188},[101,10943,5597],{"class":168},[101,10945,3973],{"class":1188},[101,10947,1218],{"class":168},[101,10949,10950,10952,10954],{"class":103,"line":528},[101,10951,2530],{"class":168},[101,10953,3948],{"class":1188},[101,10955,1218],{"class":168},[101,10957,10958,10960,10962,10964,10966],{"class":103,"line":572},[101,10959,1745],{"class":168},[101,10961,5618],{"class":1188},[101,10963,5621],{"class":168},[101,10965,5618],{"class":1188},[101,10967,1218],{"class":168},[101,10969,10970,10972,10974,10976,10978],{"class":103,"line":577},[101,10971,1745],{"class":168},[101,10973,5633],{"class":1188},[101,10975,5636],{"class":168},[101,10977,5633],{"class":1188},[101,10979,1218],{"class":168},[101,10981,10982,10984,10986],{"class":103,"line":588},[101,10983,1424],{"class":168},[101,10985,3923],{"class":1188},[101,10987,1218],{"class":168},[101,10989,10990,10992,10994],{"class":103,"line":633},[101,10991,1424],{"class":168},[101,10993,4401],{"class":1188},[101,10995,1218],{"class":168},[101,10997,10998,11000,11002],{"class":103,"line":663},[101,10999,1476],{"class":168},[101,11001,134],{"class":1188},[101,11003,1218],{"class":168},[23,11005,11006],{},"可以看到:",[6008,11008,11009,11015,11018,11024,11030],{},[1084,11010,11011,11012,11014],{},"雷达也可以设置更新频率",[98,11013,4011],{},"，这里设置为5",[1084,11016,11017],{},"雷达可以设置分辨率，设置为1，采样数量360个，最终生成的点云数量就是360",[1084,11019,11020,11021],{},"雷达也有噪声，模型为",[98,11022,11023],{},"gaussian",[1084,11025,11026,11027,11029],{},"雷达有扫描范围",[98,11028,5421],{},"，这里配置成0.12-3.5，0.015分辨率",[1084,11031,11032,11033,11035],{},"雷达的",[98,11034,5298],{},"就是雷达的joint中位置的设置值",[23,11037,11038],{},"下面这个蓝色的就是激光雷达的光线覆盖范围：",[23,11040,11041],{},[55,11042],{"alt":57,"src":11043},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1673.webp",[92,11045,11046],{"className":6015,"code":10099,"language":6017,"meta":57,"style":57},[98,11047,11048],{"__ignoreMap":57},[101,11049,11050,11052],{"class":103,"line":104},[101,11051,7833],{"class":168},[101,11053,7828],{"class":137},[23,11055,11056],{},[55,11057],{"alt":57,"src":11058},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1674.webp",[92,11060,11062],{"className":6015,"code":11061,"language":6017,"meta":57,"style":57},"ros2 topic info \u002Fscan\nros2 topic echo \u002Fscan\n",[98,11063,11064,11073],{"__ignoreMap":57},[101,11065,11066,11068,11070],{"class":103,"line":104},[101,11067,10122],{"class":168},[101,11069,186],{"class":164},[101,11071,11072],{"class":168},"scan\n",[101,11074,11075,11077,11079],{"class":103,"line":229},[101,11076,10132],{"class":168},[101,11078,186],{"class":164},[101,11080,11072],{"class":168},[23,11082,11083],{},[55,11084],{"alt":57,"src":11085},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1675.webp",[23,11087,11088],{},"接着我们尝试使用rviz2进行可视化激光雷达数据",[23,11090,11091],{},"添加和修改RVIZ2的如下：（通过LaserScan插件可以看到激光数据）",[23,11093,11094],{},[55,11095],{"alt":57,"src":11096},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1676.webp",[23,11098,11099],{},"相信你改完之后依然是看不到任何激光雷达的数据的，反看topic的echo出来的数据，不是0就是inf(无限大)，再看看gazebo你会发现，激光雷达并没有达到任何一个物体上。",[23,11101,11102],{},[55,11103],{"alt":57,"src":11104},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1677.webp",[23,11106,11107],{},"所以我们可以手动的给激光雷达周围添加一下东西，点击Gazebo工具栏的正方体，圆球或者圆柱，随意放置几个到我们激光雷达的最大扫描半径内。",[23,11109,11110],{},[55,11111],{"alt":57,"src":11112},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1678.webp",[23,11114,11115],{},[55,11116],{"alt":57,"src":11117},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1679.webp",[23,11119,11120],{},[55,11121],{"alt":57,"src":11122},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1680.webp",[6869,11124,11126],{"id":11125},"超声波ultrasonic","超声波Ultrasonic",[23,11128,11129,11130],{},"这玩意对于ROS2算法意义不是很大，控制组直接在MCU上实现即可，有需求可以学本节。 ",[32,11131,11132],{},"（可以跳过本节）",[23,11134,11135],{},"在实际的机器人开发过程中，我们可能会利用超声波传感器实现实时避障的功能，毕竟超声波的价格相较于激光雷达要便宜很多（便宜的几块钱）。",[23,11137,11138],{},"所以本节我们来说一下如何使用ROS2+Gazebo来仿真超声波传感器。",[23,11140,11141],{},"百科来一段：",[23,11143,11144,11145,11150,11151,11156,11157,11162],{},"超声波传感器是将超声波信号转换成其它能量信号（通常是电信号）的传感器。超声波是",[15,11146,11149],{"href":11147,"rel":11148},"https:\u002F\u002Fbaike.baidu.com\u002Fitem\u002F%E6%8C%AF%E5%8A%A8%E9%A2%91%E7%8E%87\u002F8068137",[19],"振动频率","高于20kHz的机械波。它具有频率高、波长短、绕射现象小，特别是方向性好、能够成为",[15,11152,11155],{"href":11153,"rel":11154},"https:\u002F\u002Fbaike.baidu.com\u002Fitem\u002F%E5%B0%84%E7%BA%BF\u002F327964",[19],"射线","而定向传播等特点。超声波对液体、固体的穿透本领很大，尤其是在阳光不透明的固体中。超声波碰到杂质或分界面会产生显著反射形成反射回波，碰到活动物体能产生",[15,11158,11161],{"href":11159,"rel":11160},"https:\u002F\u002Fbaike.baidu.com\u002Fitem\u002F%E5%A4%9A%E6%99%AE%E5%8B%92%E6%95%88%E5%BA%94\u002F115710",[19],"多普勒效应","。超声波传感器广泛应用在工业、国防、生物医学等方面。",[23,11164,11165],{},"接着看看长什么样子：",[23,11167,11168],{},[55,11169],{"alt":57,"src":11170},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1681.webp",[23,11172,11173],{},"便宜的就长这样子，一共两个头，一个头用于发送波，一个头接收波。这个还稍微高级一点，带一个光敏电阻，可以为超声波数据做一些补偿。",[23,11175,11176],{},"超声波传感器原理是什么呢？",[23,11178,11179],{},[55,11180],{"alt":57,"src":11181},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1682.webp",[92,11183,11185],{"className":94,"code":11184,"language":96,"meta":57,"style":57},"距离=(发送时间-接收时间)*速度\u002F2Copy to clipboardErrorCopied\n",[98,11186,11187],{"__ignoreMap":57},[101,11188,11189,11192,11194,11197,11200,11202,11205],{"class":103,"line":104},[101,11190,11191],{"class":107},"距离",[101,11193,561],{"class":111},[101,11195,11196],{"class":168},"(",[101,11198,11199],{"class":111},"发送时间-接收时间",[101,11201,21],{"class":168},[101,11203,11204],{"class":164},"*",[101,11206,11207],{"class":168},"速度\u002F2Copy to clipboardErrorCopied\n",[23,11209,11210],{},"看了超声波的原理，你有没有发现和前面的激光雷达传感器是一样的，是的，所以超声波传感器插件和激光雷达传感器插件在Gazebo插件中是同一个：",[92,11212,11214],{"className":94,"code":11213,"language":96,"meta":57,"style":57},"libgazebo_ros_ray_sensor.so\n",[98,11215,11216],{"__ignoreMap":57},[101,11217,11218],{"class":103,"line":104},[101,11219,11213],{"class":107},[23,11221,11222],{},"超声波总要装在机器人身上某个位置，所以我们先添加一个关节和Joint，为了省事，link我们就只写个名字，你如果有需要可以按照前面的章节那样添加一下。",[92,11224,11226],{"className":1176,"code":11225,"language":1178,"meta":57,"style":57},"  \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",[98,11227,11228,11243,11247,11268,11282,11296,11317],{"__ignoreMap":57},[101,11229,11230,11232,11234,11236,11238,11241],{"class":103,"line":104},[101,11231,1227],{"class":168},[101,11233,1230],{"class":1188},[101,11235,1210],{"class":107},[101,11237,561],{"class":168},[101,11239,11240],{"class":111},"\"ultrasonic_sensor_link\"",[101,11242,2062],{"class":168},[101,11244,11245],{"class":103,"line":229},[101,11246,307],{"emptyLinePlaceholder":306},[101,11248,11249,11251,11253,11255,11257,11260,11262,11264,11266],{"class":103,"line":257},[101,11250,1227],{"class":168},[101,11252,1251],{"class":1188},[101,11254,1210],{"class":107},[101,11256,561],{"class":168},[101,11258,11259],{"class":111},"\"ultrasonic_sensor_joint\"",[101,11261,1112],{"class":107},[101,11263,561],{"class":168},[101,11265,1265],{"class":111},[101,11267,1218],{"class":168},[101,11269,11270,11272,11274,11276,11278,11280],{"class":103,"line":272},[101,11271,1272],{"class":168},[101,11273,1275],{"class":1188},[101,11275,1278],{"class":107},[101,11277,561],{"class":168},[101,11279,1298],{"class":111},[101,11281,1240],{"class":168},[101,11283,11284,11286,11288,11290,11292,11294],{"class":103,"line":284},[101,11285,1272],{"class":168},[101,11287,1291],{"class":1188},[101,11289,1278],{"class":107},[101,11291,561],{"class":168},[101,11293,11240],{"class":111},[101,11295,1240],{"class":168},[101,11297,11298,11300,11302,11304,11306,11309,11311,11313,11315],{"class":103,"line":303},[101,11299,1272],{"class":168},[101,11301,1307],{"class":1188},[101,11303,1310],{"class":107},[101,11305,561],{"class":168},[101,11307,11308],{"class":111},"\"0.07 0.0 0.076\"",[101,11310,1318],{"class":107},[101,11312,561],{"class":168},[101,11314,1323],{"class":111},[101,11316,1240],{"class":168},[101,11318,11319,11321,11323],{"class":103,"line":310},[101,11320,1330],{"class":168},[101,11322,1251],{"class":1188},[101,11324,1218],{"class":168},[23,11326,11327],{},"添加完了关节，我们就可以配置gazebo的插件了，gazebo插件配置如下",[92,11329,11331],{"className":1176,"code":11330,"language":1178,"meta":57,"style":57},"  \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",[98,11332,11333,11347,11368,11381,11385,11397,11401,11413,11421,11429,11433,11441,11453,11466,11479,11492,11500,11504,11513,11525,11537,11550,11562,11570,11578,11582,11590,11603,11616,11628,11636,11640,11648,11660,11672,11684,11692,11700,11721,11729,11733,11746,11754,11758,11771,11775,11789,11793,11806,11814,11822],{"__ignoreMap":57},[101,11334,11335,11337,11339,11341,11343,11345],{"class":103,"line":104},[101,11336,1227],{"class":168},[101,11338,134],{"class":1188},[101,11340,3771],{"class":107},[101,11342,561],{"class":168},[101,11344,11240],{"class":111},[101,11346,1218],{"class":168},[101,11348,11349,11351,11353,11355,11357,11359,11361,11363,11366],{"class":103,"line":229},[101,11350,1272],{"class":168},[101,11352,4401],{"class":1188},[101,11354,1112],{"class":107},[101,11356,561],{"class":168},[101,11358,5248],{"class":111},[101,11360,1210],{"class":107},[101,11362,561],{"class":168},[101,11364,11365],{"class":111},"\"ultrasonic_sensor\"",[101,11367,1218],{"class":168},[101,11369,11370,11372,11374,11377,11379],{"class":103,"line":257},[101,11371,1367],{"class":168},[101,11373,5298],{"class":1188},[101,11375,11376],{"class":168},">0 0 0 0 0 0\u003C\u002F",[101,11378,5298],{"class":1188},[101,11380,1218],{"class":168},[101,11382,11383],{"class":103,"line":272},[101,11384,307],{"emptyLinePlaceholder":306},[101,11386,11387,11389,11391,11393,11395],{"class":103,"line":284},[101,11388,1367],{"class":168},[101,11390,4544],{"class":1188},[101,11392,4139],{"class":168},[101,11394,4544],{"class":1188},[101,11396,1218],{"class":168},[101,11398,11399],{"class":103,"line":303},[101,11400,307],{"emptyLinePlaceholder":306},[101,11402,11403,11405,11407,11409,11411],{"class":103,"line":310},[101,11404,1367],{"class":168},[101,11406,4011],{"class":1188},[101,11408,5286],{"class":168},[101,11410,4011],{"class":1188},[101,11412,1218],{"class":168},[101,11414,11415,11417,11419],{"class":103,"line":325},[101,11416,1367],{"class":168},[101,11418,5313],{"class":1188},[101,11420,1218],{"class":168},[101,11422,11423,11425,11427],{"class":103,"line":346},[101,11424,1745],{"class":168},[101,11426,5323],{"class":1188},[101,11428,1218],{"class":168},[101,11430,11431],{"class":103,"line":357},[101,11432,307],{"emptyLinePlaceholder":306},[101,11434,11435,11437,11439],{"class":103,"line":366},[101,11436,1357],{"class":168},[101,11438,5333],{"class":1188},[101,11440,1218],{"class":168},[101,11442,11443,11445,11447,11449,11451],{"class":103,"line":381},[101,11444,2555],{"class":168},[101,11446,5343],{"class":1188},[101,11448,5286],{"class":168},[101,11450,5343],{"class":1188},[101,11452,1218],{"class":168},[101,11454,11455,11457,11459,11462,11464],{"class":103,"line":386},[101,11456,2555],{"class":168},[101,11458,5358],{"class":1188},[101,11460,11461],{"class":168},">1\u003C\u002F",[101,11463,5358],{"class":1188},[101,11465,1218],{"class":168},[101,11467,11468,11470,11472,11475,11477],{"class":103,"line":392},[101,11469,2555],{"class":168},[101,11471,5373],{"class":1188},[101,11473,11474],{"class":168},">-0.12\u003C\u002F",[101,11476,5373],{"class":1188},[101,11478,1218],{"class":168},[101,11480,11481,11483,11485,11488,11490],{"class":103,"line":397},[101,11482,2555],{"class":168},[101,11484,5388],{"class":1188},[101,11486,11487],{"class":168},">0.12\u003C\u002F",[101,11489,5388],{"class":1188},[101,11491,1218],{"class":168},[101,11493,11494,11496,11498],{"class":103,"line":403},[101,11495,2571],{"class":168},[101,11497,5333],{"class":1188},[101,11499,1218],{"class":168},[101,11501,11502],{"class":103,"line":408},[101,11503,307],{"emptyLinePlaceholder":306},[101,11505,11506,11508,11511],{"class":103,"line":414},[101,11507,1357],{"class":168},[101,11509,11510],{"class":1188},"vertical",[101,11512,1218],{"class":168},[101,11514,11515,11517,11519,11521,11523],{"class":103,"line":419},[101,11516,2555],{"class":168},[101,11518,5343],{"class":1188},[101,11520,5286],{"class":168},[101,11522,5343],{"class":1188},[101,11524,1218],{"class":168},[101,11526,11527,11529,11531,11533,11535],{"class":103,"line":425},[101,11528,2555],{"class":168},[101,11530,5358],{"class":1188},[101,11532,11461],{"class":168},[101,11534,5358],{"class":1188},[101,11536,1218],{"class":168},[101,11538,11539,11541,11543,11546,11548],{"class":103,"line":430},[101,11540,2555],{"class":168},[101,11542,5373],{"class":1188},[101,11544,11545],{"class":168},">-0.01\u003C\u002F",[101,11547,5373],{"class":1188},[101,11549,1218],{"class":168},[101,11551,11552,11554,11556,11558,11560],{"class":103,"line":436},[101,11553,2555],{"class":168},[101,11555,5388],{"class":1188},[101,11557,5523],{"class":168},[101,11559,5388],{"class":1188},[101,11561,1218],{"class":168},[101,11563,11564,11566,11568],{"class":103,"line":441},[101,11565,2571],{"class":168},[101,11567,11510],{"class":1188},[101,11569,1218],{"class":168},[101,11571,11572,11574,11576],{"class":103,"line":447},[101,11573,2530],{"class":168},[101,11575,5323],{"class":1188},[101,11577,1218],{"class":168},[101,11579,11580],{"class":103,"line":452},[101,11581,307],{"emptyLinePlaceholder":306},[101,11583,11584,11586,11588],{"class":103,"line":458},[101,11585,1745],{"class":168},[101,11587,5421],{"class":1188},[101,11589,1218],{"class":168},[101,11591,11592,11594,11596,11599,11601],{"class":103,"line":463},[101,11593,1357],{"class":168},[101,11595,5431],{"class":1188},[101,11597,11598],{"class":168},">0.02\u003C\u002F",[101,11600,5431],{"class":1188},[101,11602,1218],{"class":168},[101,11604,11605,11607,11609,11612,11614],{"class":103,"line":469},[101,11606,1357],{"class":168},[101,11608,5446],{"class":1188},[101,11610,11611],{"class":168},">4\u003C\u002F",[101,11613,5446],{"class":1188},[101,11615,1218],{"class":168},[101,11617,11618,11620,11622,11624,11626],{"class":103,"line":474},[101,11619,1357],{"class":168},[101,11621,5358],{"class":1188},[101,11623,5523],{"class":168},[101,11625,5358],{"class":1188},[101,11627,1218],{"class":168},[101,11629,11630,11632,11634],{"class":103,"line":502},[101,11631,2530],{"class":168},[101,11633,5421],{"class":1188},[101,11635,1218],{"class":168},[101,11637,11638],{"class":103,"line":528},[101,11639,307],{"emptyLinePlaceholder":306},[101,11641,11642,11644,11646],{"class":103,"line":572},[101,11643,1745],{"class":168},[101,11645,4588],{"class":1188},[101,11647,1218],{"class":168},[101,11649,11650,11652,11654,11656,11658],{"class":103,"line":577},[101,11651,1357],{"class":168},[101,11653,5493],{"class":1188},[101,11655,5496],{"class":168},[101,11657,5493],{"class":1188},[101,11659,1218],{"class":168},[101,11661,11662,11664,11666,11668,11670],{"class":103,"line":588},[101,11663,1357],{"class":168},[101,11665,4605],{"class":1188},[101,11667,4608],{"class":168},[101,11669,4605],{"class":1188},[101,11671,1218],{"class":168},[101,11673,11674,11676,11678,11680,11682],{"class":103,"line":633},[101,11675,1357],{"class":168},[101,11677,4620],{"class":1188},[101,11679,5523],{"class":168},[101,11681,4620],{"class":1188},[101,11683,1218],{"class":168},[101,11685,11686,11688,11690],{"class":103,"line":663},[101,11687,2530],{"class":168},[101,11689,4588],{"class":1188},[101,11691,1218],{"class":168},[101,11693,11694,11696,11698],{"class":103,"line":675},[101,11695,1424],{"class":168},[101,11697,5313],{"class":1188},[101,11699,1218],{"class":168},[101,11701,11702,11704,11706,11708,11710,11713,11715,11717,11719],{"class":103,"line":797},[101,11703,1367],{"class":168},[101,11705,3923],{"class":1188},[101,11707,1210],{"class":107},[101,11709,561],{"class":168},[101,11711,11712],{"class":111},"\"ultrasonic_sensor_controller\"",[101,11714,3933],{"class":107},[101,11716,561],{"class":168},[101,11718,5571],{"class":111},[101,11720,1218],{"class":168},[101,11722,11723,11725,11727],{"class":103,"line":803},[101,11724,1745],{"class":168},[101,11726,3948],{"class":1188},[101,11728,1218],{"class":168},[101,11730,11731],{"class":103,"line":815},[101,11732,307],{"emptyLinePlaceholder":306},[101,11734,11735,11737,11739,11742,11744],{"class":103,"line":821},[101,11736,1357],{"class":168},[101,11738,3973],{"class":1188},[101,11740,11741],{"class":168},">~\u002Fout:=ultrasonic_sensor_1\u003C\u002F",[101,11743,3973],{"class":1188},[101,11745,1218],{"class":168},[101,11747,11748,11750,11752],{"class":103,"line":827},[101,11749,2530],{"class":168},[101,11751,3948],{"class":1188},[101,11753,1218],{"class":168},[101,11755,11756],{"class":103,"line":833},[101,11757,307],{"emptyLinePlaceholder":306},[101,11759,11760,11762,11764,11767,11769],{"class":103,"line":839},[101,11761,1745],{"class":168},[101,11763,5618],{"class":1188},[101,11765,11766],{"class":168},">sensor_msgs\u002FRange\u003C\u002F",[101,11768,5618],{"class":1188},[101,11770,1218],{"class":168},[101,11772,11773],{"class":103,"line":862},[101,11774,307],{"emptyLinePlaceholder":306},[101,11776,11777,11779,11782,11785,11787],{"class":103,"line":905},[101,11778,1745],{"class":168},[101,11780,11781],{"class":1188},"radiation_type",[101,11783,11784],{"class":168},">ultrasound\u003C\u002F",[101,11786,11781],{"class":1188},[101,11788,1218],{"class":168},[101,11790,11791],{"class":103,"line":942},[101,11792,307],{"emptyLinePlaceholder":306},[101,11794,11795,11797,11799,11802,11804],{"class":103,"line":947},[101,11796,1745],{"class":168},[101,11798,5633],{"class":1188},[101,11800,11801],{"class":168},">ultrasonic_sensor_link\u003C\u002F",[101,11803,5633],{"class":1188},[101,11805,1218],{"class":168},[101,11807,11808,11810,11812],{"class":103,"line":971},[101,11809,1424],{"class":168},[101,11811,3923],{"class":1188},[101,11813,1218],{"class":168},[101,11815,11816,11818,11820],{"class":103,"line":995},[101,11817,1476],{"class":168},[101,11819,4401],{"class":1188},[101,11821,1218],{"class":168},[101,11823,11824,11826,11828],{"class":103,"line":1874},[101,11825,1330],{"class":168},[101,11827,134],{"class":1188},[101,11829,1218],{"class":168},[23,11831,11832],{},"添加完成后就可以编译测试下代码",[92,11834,11835],{"className":6015,"code":6625,"language":6017,"meta":57,"style":57},[98,11836,11837,11849,11857],{"__ignoreMap":57},[101,11838,11839,11841,11843,11845,11847],{"class":103,"line":104},[101,11840,6632],{"class":168},[101,11842,6636],{"class":6635},[101,11844,6639],{"class":168},[101,11846,172],{"class":164},[101,11848,6644],{"class":168},[101,11850,11851,11853,11855],{"class":103,"line":229},[101,11852,6649],{"class":168},[101,11854,186],{"class":164},[101,11856,6654],{"class":168},[101,11858,11859],{"class":103,"line":257},[101,11860,6659],{"class":168},[23,11862,11863],{},"没有物体的前面可以放个东西",[23,11865,11866],{},[55,11867],{"alt":57,"src":11868},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1683.webp",[23,11870,11871],{},"打开终端，输入下面指令",[92,11873,11875],{"className":94,"code":11874,"language":96,"meta":57,"style":57},"ros2 topic list \nros2 topic info \u002Fultrasonic_sensor_1\nros2 topic echo \u002Fultrasonic_sensor_1Copy to clipboardErrorCopied\n",[98,11876,11877,11890,11902],{"__ignoreMap":57},[101,11878,11879,11881,11884,11887],{"class":103,"line":104},[101,11880,1043],{"class":107},[101,11882,11883],{"class":111}," topic",[101,11885,11886],{"class":111}," list",[101,11888,11889],{"class":168}," \n",[101,11891,11892,11894,11896,11899],{"class":103,"line":229},[101,11893,1043],{"class":107},[101,11895,11883],{"class":111},[101,11897,11898],{"class":111}," info",[101,11900,11901],{"class":111}," \u002Fultrasonic_sensor_1\n",[101,11903,11904,11906,11908,11911,11914,11916],{"class":103,"line":257},[101,11905,1043],{"class":107},[101,11907,11883],{"class":111},[101,11909,11910],{"class":111}," echo",[101,11912,11913],{"class":111}," \u002Fultrasonic_sensor_1Copy",[101,11915,754],{"class":111},[101,11917,11918],{"class":111}," clipboardErrorCopied\n",[23,11920,11921],{},"不出意外可以看到下面的数据",[92,11923,11925],{"className":94,"code":11924,"language":96,"meta":57,"style":57},"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",[98,11926,11927,11932,11937,11945,11953,11961,11969,11977,11985,11993],{"__ignoreMap":57},[101,11928,11929],{"class":103,"line":104},[101,11930,11931],{"class":107},"header:\n",[101,11933,11934],{"class":103,"line":229},[101,11935,11936],{"class":107},"  stamp:\n",[101,11938,11939,11942],{"class":103,"line":257},[101,11940,11941],{"class":107},"    sec:",[101,11943,11944],{"class":137}," 4458\n",[101,11946,11947,11950],{"class":103,"line":272},[101,11948,11949],{"class":107},"    nanosec:",[101,11951,11952],{"class":137}," 1000000\n",[101,11954,11955,11958],{"class":103,"line":284},[101,11956,11957],{"class":107},"  frame_id:",[101,11959,11960],{"class":111}," ultrasonic_sensor_link\n",[101,11962,11963,11966],{"class":103,"line":303},[101,11964,11965],{"class":107},"radiation_type:",[101,11967,11968],{"class":137}," 0\n",[101,11970,11971,11974],{"class":103,"line":310},[101,11972,11973],{"class":107},"field_of_view:",[101,11975,11976],{"class":137}," 0.23999999463558197\n",[101,11978,11979,11982],{"class":103,"line":325},[101,11980,11981],{"class":107},"min_range:",[101,11983,11984],{"class":137}," 0.019999999552965164\n",[101,11986,11987,11990],{"class":103,"line":346},[101,11988,11989],{"class":107},"max_range:",[101,11991,11992],{"class":137}," 4.0\n",[101,11994,11995,11998],{"class":103,"line":357},[101,11996,11997],{"class":107},"range:",[101,11999,12000],{"class":137}," 2.6798219680786133\n",[23,12002,12003],{},"这里的range就是fishbot到墙之间的距离：2.67982",[23,12005,12006,12007],{},"我们来讲一讲超声波传感器的数据类型",[98,12008,12009],{},"sensor_msgs\u002Fmsg\u002FRange",[92,12011,12013],{"className":6015,"code":12012,"language":6017,"meta":57,"style":57},"\n# ros2 topic info \u002Fultrasonic_sensor_1\nType: sensor_msgs\u002Fmsg\u002FRange\nPublisher count: 1\nSubscription count: 0\n\n",[98,12014,12015,12019,12024,12039,12047],{"__ignoreMap":57},[101,12016,12017],{"class":103,"line":104},[101,12018,307],{"emptyLinePlaceholder":306},[101,12020,12021],{"class":103,"line":229},[101,12022,12023],{"class":225},"# ros2 topic info \u002Fultrasonic_sensor_1\n",[101,12025,12026,12029,12031,12034,12036],{"class":103,"line":257},[101,12027,12028],{"class":168},"Type: sensor_msgs",[101,12030,186],{"class":164},[101,12032,12033],{"class":168},"msg",[101,12035,186],{"class":164},[101,12037,12038],{"class":168},"Range\n",[101,12040,12041,12044],{"class":103,"line":272},[101,12042,12043],{"class":168},"Publisher count: ",[101,12045,12046],{"class":137},"1\n",[101,12048,12049,12052],{"class":103,"line":284},[101,12050,12051],{"class":168},"Subscription count: ",[101,12053,12054],{"class":137},"0\n",[23,12056,12057,12058,12061],{},"你可以使用",[98,12059,12060],{},"ros2 interface show sensor_msgs\u002Fmsg\u002FRange","看到详细的解释，我们翻译一下",[92,12063,12065],{"className":6015,"code":12064,"language":6017,"meta":57,"style":57},"\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",[98,12066,12067,12071,12076,12080,12085,12089,12094,12098,12103,12108,12112,12117,12121,12126,12130,12135,12139,12144,12148,12161,12165,12170,12174,12179,12183,12188,12200,12211,12215,12223,12227,12232,12236,12244,12248,12253,12257,12262,12266,12274,12282,12286,12291,12295,12305,12309,12314,12318,12323,12327,12332,12336,12341,12345,12350,12354],{"__ignoreMap":57},[101,12068,12069],{"class":103,"line":104},[101,12070,307],{"emptyLinePlaceholder":306},[101,12072,12073],{"class":103,"line":229},[101,12074,12075],{"class":225},"# Single range reading from an active ranger that emits energy and reports\n",[101,12077,12078],{"class":103,"line":257},[101,12079,307],{"emptyLinePlaceholder":306},[101,12081,12082],{"class":103,"line":272},[101,12083,12084],{"class":225},"# one range reading that is valid along an arc at the distance measured.\n",[101,12086,12087],{"class":103,"line":284},[101,12088,307],{"emptyLinePlaceholder":306},[101,12090,12091],{"class":103,"line":303},[101,12092,12093],{"class":225},"# This message is  not appropriate for laser scanners. See the LaserScan\n",[101,12095,12096],{"class":103,"line":310},[101,12097,307],{"emptyLinePlaceholder":306},[101,12099,12100],{"class":103,"line":325},[101,12101,12102],{"class":225},"# message if you are working with a laser scanner.\n",[101,12104,12105],{"class":103,"line":346},[101,12106,12107],{"class":225},"#\n",[101,12109,12110],{"class":103,"line":357},[101,12111,307],{"emptyLinePlaceholder":306},[101,12113,12114],{"class":103,"line":366},[101,12115,12116],{"class":225},"# This message also can represent a fixed-distance (binary) ranger.  This\n",[101,12118,12119],{"class":103,"line":381},[101,12120,307],{"emptyLinePlaceholder":306},[101,12122,12123],{"class":103,"line":386},[101,12124,12125],{"class":225},"# sensor will have min_range===max_range===distance of detection.\n",[101,12127,12128],{"class":103,"line":392},[101,12129,307],{"emptyLinePlaceholder":306},[101,12131,12132],{"class":103,"line":397},[101,12133,12134],{"class":225},"# These sensors follow REP 117 and will output -Inf if the object is detected\n",[101,12136,12137],{"class":103,"line":403},[101,12138,307],{"emptyLinePlaceholder":306},[101,12140,12141],{"class":103,"line":408},[101,12142,12143],{"class":225},"# and +Inf if the object is outside of the detection range.\n",[101,12145,12146],{"class":103,"line":414},[101,12147,307],{"emptyLinePlaceholder":306},[101,12149,12150,12153,12155,12158],{"class":103,"line":419},[101,12151,12152],{"class":168},"std_msgs",[101,12154,186],{"class":164},[101,12156,12157],{"class":168},"Header header ",[101,12159,12160],{"class":225},"# timestamp in the header is the time the ranger\n",[101,12162,12163],{"class":103,"line":425},[101,12164,307],{"emptyLinePlaceholder":306},[101,12166,12167],{"class":103,"line":430},[101,12168,12169],{"class":225},"                             # returned the distance reading\n",[101,12171,12172],{"class":103,"line":436},[101,12173,307],{"emptyLinePlaceholder":306},[101,12175,12176],{"class":103,"line":441},[101,12177,12178],{"class":225},"# Radiation type enums\n",[101,12180,12181],{"class":103,"line":447},[101,12182,307],{"emptyLinePlaceholder":306},[101,12184,12185],{"class":103,"line":452},[101,12186,12187],{"class":225},"# If you want a value added to this list, send an email to the ros-users list\n",[101,12189,12190,12193,12196,12198],{"class":103,"line":458},[101,12191,12192],{"class":168},"uint8 ",[101,12194,12195],{"class":137},"ULTRASOUND",[101,12197,561],{"class":164},[101,12199,12054],{"class":137},[101,12201,12202,12204,12207,12209],{"class":103,"line":463},[101,12203,12192],{"class":168},[101,12205,12206],{"class":137},"INFRARED",[101,12208,561],{"class":164},[101,12210,12046],{"class":137},[101,12212,12213],{"class":103,"line":469},[101,12214,307],{"emptyLinePlaceholder":306},[101,12216,12217,12220],{"class":103,"line":474},[101,12218,12219],{"class":168},"uint8 radiation_type    ",[101,12221,12222],{"class":225},"# 传感器射线类型\n",[101,12224,12225],{"class":103,"line":502},[101,12226,307],{"emptyLinePlaceholder":306},[101,12228,12229],{"class":103,"line":528},[101,12230,12231],{"class":225},"                        # (sound, IR, etc) [enum]\n",[101,12233,12234],{"class":103,"line":572},[101,12235,307],{"emptyLinePlaceholder":306},[101,12237,12238,12241],{"class":103,"line":577},[101,12239,12240],{"class":168},"float32 field_of_view   ",[101,12242,12243],{"class":225},"# 距离数据对应的弧[rad]的大小，测量物体的范围介于         \n",[101,12245,12246],{"class":103,"line":588},[101,12247,307],{"emptyLinePlaceholder":306},[101,12249,12250],{"class":103,"line":633},[101,12251,12252],{"class":225},"                        # -field_of_view\u002F2 到 field_of_view\u002F2 之间。\n",[101,12254,12255],{"class":103,"line":663},[101,12256,307],{"emptyLinePlaceholder":306},[101,12258,12259],{"class":103,"line":675},[101,12260,12261],{"class":225},"                        # 0 角度对应于传感器的 x 轴。\n",[101,12263,12264],{"class":103,"line":797},[101,12265,307],{"emptyLinePlaceholder":306},[101,12267,12268,12271],{"class":103,"line":803},[101,12269,12270],{"class":168},"float32 min_range       ",[101,12272,12273],{"class":225},"# 最小范围值 [m]\n",[101,12275,12276,12279],{"class":103,"line":815},[101,12277,12278],{"class":168},"float32 max_range       ",[101,12280,12281],{"class":225},"# 最大范围值 [m]\n",[101,12283,12284],{"class":103,"line":821},[101,12285,307],{"emptyLinePlaceholder":306},[101,12287,12288],{"class":103,"line":827},[101,12289,12290],{"class":225},"                        #  固定距离需要 min_range==max_range\n",[101,12292,12293],{"class":103,"line":833},[101,12294,307],{"emptyLinePlaceholder":306},[101,12296,12297,12300,12302],{"class":103,"line":839},[101,12298,12299],{"class":168},"float32 ",[101,12301,5421],{"class":137},[101,12303,12304],{"class":225},"           # 范围数据 [m]\n",[101,12306,12307],{"class":103,"line":862},[101,12308,307],{"emptyLinePlaceholder":306},[101,12310,12311],{"class":103,"line":905},[101,12312,12313],{"class":225},"                        # (Note: values \u003C range_min or > range_max should be discarded)\n",[101,12315,12316],{"class":103,"line":942},[101,12317,307],{"emptyLinePlaceholder":306},[101,12319,12320],{"class":103,"line":947},[101,12321,12322],{"class":225},"                        # Fixed distance rangers only output -Inf or +Inf.\n",[101,12324,12325],{"class":103,"line":971},[101,12326,307],{"emptyLinePlaceholder":306},[101,12328,12329],{"class":103,"line":995},[101,12330,12331],{"class":225},"                        # -Inf represents a detection within fixed distance.\n",[101,12333,12334],{"class":103,"line":1874},[101,12335,307],{"emptyLinePlaceholder":306},[101,12337,12338],{"class":103,"line":1883},[101,12339,12340],{"class":225},"                        # (Detection too close to the sensor to quantify)\n",[101,12342,12343],{"class":103,"line":1898},[101,12344,307],{"emptyLinePlaceholder":306},[101,12346,12347],{"class":103,"line":1913},[101,12348,12349],{"class":225},"                        # +Inf represents no detection within the fixed distance.\n",[101,12351,12352],{"class":103,"line":1922},[101,12353,307],{"emptyLinePlaceholder":306},[101,12355,12356],{"class":103,"line":1931},[101,12357,12358],{"class":225},"                        # (Object out of range)\n",[23,12360,12361],{},"结论，主要关注range就可以了。",[23,12363,12364],{},"在rviz2里添加超声波数据",[23,12366,12367],{},"Add ->By topic->Range",[23,12369,12370],{},[55,12371],{"alt":57,"src":12372},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1684.webp",[23,12374,12375],{},[55,12376],{"alt":57,"src":12377},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1685.webp",[84,12379,12380],{"id":12380},"搭建世界地图",[23,12382,12383],{},"本节我们要在Gazebo中建立一个测试的环境，其实也很简单，利用Gazebo的画墙工具即可完成。",[23,12385,12386],{},"world即世界，gazebo的world文件就是用于描述世界模型的，也就是环境模型。",[23,12388,12389],{},"Gazebo已经为我们准备了很多常用的物体模型，除了基础的圆球，圆柱，立方体外的，其实还有飞机、汽车、房子等你现实中无法拥有的。",[23,12391,12392],{},"但是一开始安装Gazebo的时候并不会帮你下载好这些模型，需要我们手动下载，找一个你要存模型的文件夹，打开终端，复制粘贴下面这句",[92,12394,12396],{"className":6015,"code":12395,"language":6017,"meta":57,"style":57},"git clone https:\u002F\u002Fgithub.com\u002Fosrf\u002Fgazebo_models\n",[98,12397,12398],{"__ignoreMap":57},[101,12399,12400,12403,12405,12408,12410,12413,12415],{"class":103,"line":104},[101,12401,12402],{"class":168},"git clone https:",[101,12404,292],{"class":164},[101,12406,12407],{"class":168},"github.com",[101,12409,186],{"class":164},[101,12411,12412],{"class":168},"osrf",[101,12414,186],{"class":164},[101,12416,12417],{"class":168},"gazebo_models\n",[23,12419,12420],{},"并把存放模型的路径加到~\u002F.bashrc里（第二个冒号后面的可以不写，第二个冒号后面的是多个路径。）",[23,12422,12423],{},"GAZEBO_MODEL_PATH是老版Gazebo Classic的宏。",[23,12425,12426],{},"IGN_GAZEBO_RESOURCE_PATH是新版Igntion Gazebo的宏。",[23,12428,12429],{},"模型都通用，可以一起配置上。",[23,12431,12432],{},[55,12433],{"alt":57,"src":12434},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1686.webp",[23,12436,12437],{},"刷新环境变量",[92,12439,12441],{"className":6015,"code":12440,"language":6017,"meta":57,"style":57},"source ~\u002F.bashrc\n",[98,12442,12443],{"__ignoreMap":57},[101,12444,12445,12448,12451],{"class":103,"line":104},[101,12446,12447],{"class":168},"source ",[101,12449,12450],{"class":164},"~\u002F",[101,12452,12453],{"class":168},".bashrc\n",[23,12455,12456,12457,12459],{},"此时再次打开终端，输入",[98,12458,134],{},"，把选项卡切换到Insert",[23,12461,12462],{},[55,12463],{"alt":57,"src":12464},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1687.webp",[23,12466,12467],{},"在Insert选项卡下可以看到一个目录，以及目录下的模型名称，随着下载脚本的不断下载，这里的模型会越来越多。",[23,12469,12470],{},"随手拖几个，搭建一个漂亮的环境出来~",[23,12472,12473],{},"每个成功的男人都有一辆车，咱们也不例外",[23,12475,12476],{},[55,12477],{"alt":57,"src":12478},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1688.webp",[23,12480,12481],{},"上面是Gazebo为我们准备好的开源模型，我们也可以通过Gazebo的工具来自己画一个环境。",[23,12483,12484],{},"然后也可以用墙壁工具建墙",[23,12486,12487],{},"Gazebo左上角->Edit->Building Editor",[23,12489,12490],{},"接着可以看到这样一个编辑界面",[23,12492,12493],{},[55,12494],{"alt":57,"src":12495},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1689.webp",[23,12497,12498],{},"点击左边的Wall,你就可以在上方的白色区域进行建墙了，这个和模拟人生游戏不一样，这个是画二维的墙生成三维的墙，模拟人生是直接在三维里画。",[23,12500,12501],{},[55,12502],{"alt":57,"src":12503},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1690.webp",[23,12505,12506],{},"建完后还可以用选Add Color或者Add Texture，然后点击下方墙，给墙添加颜色或者纹理。",[23,12508,12509],{},"首先你要有一个地图，小鱼为你准备了两个，两个图片都是800*600像素的。",[23,12511,12512],{},[55,12513],{"alt":57,"src":12514},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1691.webp",[23,12516,12517],{},[55,12518],{"alt":57,"src":12519},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1692.webp",[23,12521,12522],{},"打开Gazebo->Gazebo左上角->Edit->Building Editor->左下方选Import",[23,12524,12525],{},[55,12526],{"alt":57,"src":12527},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1693.webp",[23,12529,12530],{},"将上面两个图片存到本地，在这个界面选图片，记着选Next",[23,12532,12533],{},[55,12534],{"alt":57,"src":12535},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1694.webp",[23,12537,12538],{},"左边选尺寸对应关系",[23,12540,12541],{},[55,12542],{"alt":57,"src":12543},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1695.webp",[23,12545,12546],{},"我们选择默认的，100像素\u002F米。点击OK（需要手动将100改变一下才能点击OK哦），之后就可以用图片画墙了。",[23,12548,12549],{},"注意：导入完图片不会直接出来墙，图片只是提供了墙的大概位置，需要你手动用墙再将边描一遍。",[23,12551,12552],{},[55,12553],{"alt":57,"src":12554},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1696.webp",[23,12556,12557],{},"建完后点击File->Exit,在退出的弹框中选Exit。",[23,12559,12560],{},"接着在Gazebo界面中就可以看到墙了，我们再手动添加几个物体，就可以用于下面的导航使用了。",[23,12562,12563],{},[55,12564],{"alt":57,"src":12565},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1697.webp",[23,12567,12568],{},"添加完，接着点击File->SaveWorld，将文件保存到我们的fishbot_descrption的world下。",[23,12570,12571],{},"没有world目录的小伙伴可以先手动创建下",[23,12573,12574],{},[55,12575],{"alt":57,"src":12576},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1698.webp",[23,12578,12579],{},"加载world其实也很简单，可以先启动Gazebo，再手动的加载文件，也可以在Gazebo启动时加载：",[23,12581,12582],{},"比如在前面加载ROS2插件基础上再加载fishbot.world。",[92,12584,12586],{"className":6015,"code":12585,"language":6017,"meta":57,"style":57},"gazebo --verbose  -s libgazebo_ros_init.so -s  libgazebo_ros_factory.so 你的world文件目录\u002Ffishbot.world\n",[98,12587,12588],{"__ignoreMap":57},[101,12589,12590,12593,12595,12598,12600,12603,12605,12608,12610],{"class":103,"line":104},[101,12591,12592],{"class":168},"gazebo ",[101,12594,6636],{"class":6635},[101,12596,12597],{"class":168},"verbose  ",[101,12599,172],{"class":164},[101,12601,12602],{"class":168},"s libgazebo_ros_init.so ",[101,12604,172],{"class":164},[101,12606,12607],{"class":168},"s  libgazebo_ros_factory.so 你的world文件目录",[101,12609,186],{"class":164},[101,12611,12612],{"class":168},"fishbot.world\n",[23,12614,12615,12616,12618],{},"修改launch文件，将上面的命令行写到",[98,12617,6002],{},"中即可。",[92,12620,12622],{"className":6015,"code":12621,"language":6017,"meta":57,"style":57},"    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",[98,12623,12624,12638,12642,12646,12655,12687],{"__ignoreMap":57},[101,12625,12626,12629,12631,12633,12636],{"class":103,"line":104},[101,12627,12628],{"class":168},"    gazebo_world_path ",[101,12630,561],{"class":164},[101,12632,6463],{"class":168},[101,12634,12635],{"class":111},"'world\u002Ffishbot.world'",[101,12637,5979],{"class":168},[101,12639,12640],{"class":103,"line":229},[101,12641,307],{"emptyLinePlaceholder":306},[101,12643,12644],{"class":103,"line":257},[101,12645,6489],{"class":225},[101,12647,12648,12650,12652],{"class":103,"line":272},[101,12649,6494],{"class":168},[101,12651,561],{"class":164},[101,12653,12654],{"class":168},"  ExecuteProcess(\n",[101,12656,12657,12659,12661,12663,12665,12667,12669,12671,12673,12675,12677,12679,12681,12683,12685],{"class":103,"line":284},[101,12658,6030],{"class":6029},[101,12660,561],{"class":164},[101,12662,6035],{"class":168},[101,12664,6038],{"class":111},[101,12666,6041],{"class":168},[101,12668,6044],{"class":111},[101,12670,6047],{"class":168},[101,12672,6050],{"class":111},[101,12674,6041],{"class":168},[101,12676,6055],{"class":111},[101,12678,6041],{"class":168},[101,12680,6050],{"class":111},[101,12682,6041],{"class":168},[101,12684,6064],{"class":111},[101,12686,6067],{"class":168},[101,12688,12689,12691,12693,12695],{"class":103,"line":303},[101,12690,6072],{"class":6029},[101,12692,561],{"class":164},[101,12694,6077],{"class":111},[101,12696,5979],{"class":168},[23,12698,12699],{},"下面是整个launch文件：",[92,12701,12703],{"className":6015,"code":12702,"language":6017,"meta":57,"style":57},"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",[98,12704,12705,12715,12725,12729,12733,12743,12747,12751,12755,12759,12763,12767,12771,12775,12779,12783,12787,12791,12795,12799,12803,12807,12811,12815,12819,12823,12827,12831,12835,12839,12843,12847,12851,12855,12865,12871,12875,12883,12891,12899,12907,12917,12921,12943,12965,12989,13001,13005,13009,13017,13050,13060,13064,13068,13076,13086,13096,13120,13124,13128,13136,13146,13156,13164,13168,13172,13176,13184,13194,13204,13214,13224,13236,13240,13244],{"__ignoreMap":57},[101,12706,12707,12709,12711,12713],{"class":103,"line":104},[101,12708,931],{"class":164},[101,12710,6191],{"class":168},[101,12712,6194],{"class":164},[101,12714,6197],{"class":168},[101,12716,12717,12719,12721,12723],{"class":103,"line":229},[101,12718,931],{"class":164},[101,12720,6204],{"class":168},[101,12722,6194],{"class":164},[101,12724,6209],{"class":168},[101,12726,12727],{"class":103,"line":257},[101,12728,307],{"emptyLinePlaceholder":306},[101,12730,12731],{"class":103,"line":272},[101,12732,6218],{"class":225},[101,12734,12735,12737,12739,12741],{"class":103,"line":284},[101,12736,931],{"class":164},[101,12738,6225],{"class":168},[101,12740,6194],{"class":164},[101,12742,6230],{"class":168},[101,12744,12745],{"class":103,"line":303},[101,12746,307],{"emptyLinePlaceholder":306},[101,12748,12749],{"class":103,"line":310},[101,12750,6239],{"class":225},[101,12752,12753],{"class":103,"line":325},[101,12754,307],{"emptyLinePlaceholder":306},[101,12756,12757],{"class":103,"line":346},[101,12758,6248],{"class":225},[101,12760,12761],{"class":103,"line":357},[101,12762,307],{"emptyLinePlaceholder":306},[101,12764,12765],{"class":103,"line":366},[101,12766,6257],{"class":225},[101,12768,12769],{"class":103,"line":381},[101,12770,307],{"emptyLinePlaceholder":306},[101,12772,12773],{"class":103,"line":386},[101,12774,6266],{"class":225},[101,12776,12777],{"class":103,"line":392},[101,12778,307],{"emptyLinePlaceholder":306},[101,12780,12781],{"class":103,"line":397},[101,12782,6275],{"class":225},[101,12784,12785],{"class":103,"line":403},[101,12786,307],{"emptyLinePlaceholder":306},[101,12788,12789],{"class":103,"line":408},[101,12790,6284],{"class":225},[101,12792,12793],{"class":103,"line":414},[101,12794,307],{"emptyLinePlaceholder":306},[101,12796,12797],{"class":103,"line":419},[101,12798,6293],{"class":225},[101,12800,12801],{"class":103,"line":425},[101,12802,307],{"emptyLinePlaceholder":306},[101,12804,12805],{"class":103,"line":430},[101,12806,6302],{"class":225},[101,12808,12809],{"class":103,"line":436},[101,12810,307],{"emptyLinePlaceholder":306},[101,12812,12813],{"class":103,"line":441},[101,12814,6311],{"class":225},[101,12816,12817],{"class":103,"line":447},[101,12818,307],{"emptyLinePlaceholder":306},[101,12820,12821],{"class":103,"line":452},[101,12822,6320],{"class":225},[101,12824,12825],{"class":103,"line":458},[101,12826,307],{"emptyLinePlaceholder":306},[101,12828,12829],{"class":103,"line":463},[101,12830,6329],{"class":225},[101,12832,12833],{"class":103,"line":469},[101,12834,307],{"emptyLinePlaceholder":306},[101,12836,12837],{"class":103,"line":474},[101,12838,6338],{"class":225},[101,12840,12841],{"class":103,"line":502},[101,12842,307],{"emptyLinePlaceholder":306},[101,12844,12845],{"class":103,"line":528},[101,12846,6347],{"class":225},[101,12848,12849],{"class":103,"line":572},[101,12850,307],{"emptyLinePlaceholder":306},[101,12852,12853],{"class":103,"line":577},[101,12854,6356],{"class":225},[101,12856,12857,12859,12861,12863],{"class":103,"line":588},[101,12858,931],{"class":164},[101,12860,6363],{"class":168},[101,12862,6194],{"class":164},[101,12864,6368],{"class":168},[101,12866,12867,12869],{"class":103,"line":633},[101,12868,6194],{"class":164},[101,12870,6375],{"class":168},[101,12872,12873],{"class":103,"line":663},[101,12874,307],{"emptyLinePlaceholder":306},[101,12876,12877,12879,12881],{"class":103,"line":675},[101,12878,6384],{"class":164},[101,12880,6387],{"class":107},[101,12882,6390],{"class":168},[101,12884,12885,12887,12889],{"class":103,"line":797},[101,12886,6395],{"class":168},[101,12888,561],{"class":164},[101,12890,6400],{"class":111},[101,12892,12893,12895,12897],{"class":103,"line":803},[101,12894,6405],{"class":168},[101,12896,561],{"class":164},[101,12898,6410],{"class":111},[101,12900,12901,12903,12905],{"class":103,"line":815},[101,12902,6415],{"class":168},[101,12904,561],{"class":164},[101,12906,6420],{"class":111},[101,12908,12909,12912,12914],{"class":103,"line":821},[101,12910,12911],{"class":168},"    world_name ",[101,12913,561],{"class":164},[101,12915,12916],{"class":111}," \"fishbot.world\"\n",[101,12918,12919],{"class":103,"line":827},[101,12920,307],{"emptyLinePlaceholder":306},[101,12922,12923,12925,12927,12929,12931,12933,12935,12937,12939,12941],{"class":103,"line":833},[101,12924,6429],{"class":168},[101,12926,561],{"class":164},[101,12928,6434],{"class":168},[101,12930,6437],{"class":164},[101,12932,6440],{"class":111},[101,12934,6443],{"class":137},[101,12936,6446],{"class":168},[101,12938,6449],{"class":137},[101,12940,6440],{"class":111},[101,12942,5979],{"class":168},[101,12944,12945,12947,12949,12951,12953,12955,12957,12959,12961,12963],{"class":103,"line":839},[101,12946,6458],{"class":168},[101,12948,561],{"class":164},[101,12950,6463],{"class":168},[101,12952,6437],{"class":164},[101,12954,6468],{"class":111},[101,12956,6443],{"class":137},[101,12958,6473],{"class":168},[101,12960,6449],{"class":137},[101,12962,6478],{"class":111},[101,12964,5979],{"class":168},[101,12966,12967,12969,12971,12973,12975,12978,12980,12983,12985,12987],{"class":103,"line":862},[101,12968,12628],{"class":168},[101,12970,561],{"class":164},[101,12972,6463],{"class":168},[101,12974,6437],{"class":164},[101,12976,12977],{"class":111},"'world\u002F",[101,12979,6443],{"class":137},[101,12981,12982],{"class":168},"world_name",[101,12984,6449],{"class":137},[101,12986,6478],{"class":111},[101,12988,5979],{"class":168},[101,12990,12991,12993,12995,12997,12999],{"class":103,"line":905},[101,12992,8592],{"class":168},[101,12994,561],{"class":164},[101,12996,6463],{"class":168},[101,12998,8599],{"class":111},[101,13000,5979],{"class":168},[101,13002,13003],{"class":103,"line":942},[101,13004,307],{"emptyLinePlaceholder":306},[101,13006,13007],{"class":103,"line":947},[101,13008,6489],{"class":225},[101,13010,13011,13013,13015],{"class":103,"line":971},[101,13012,6494],{"class":168},[101,13014,561],{"class":164},[101,13016,6499],{"class":168},[101,13018,13019,13021,13023,13025,13027,13029,13031,13033,13035,13037,13039,13041,13043,13045,13047],{"class":103,"line":995},[101,13020,6030],{"class":6029},[101,13022,561],{"class":164},[101,13024,6035],{"class":168},[101,13026,6038],{"class":111},[101,13028,6041],{"class":168},[101,13030,6044],{"class":111},[101,13032,6047],{"class":168},[101,13034,6050],{"class":111},[101,13036,6041],{"class":168},[101,13038,6055],{"class":111},[101,13040,6041],{"class":168},[101,13042,6050],{"class":111},[101,13044,6041],{"class":168},[101,13046,6064],{"class":111},[101,13048,13049],{"class":168},",gazebo_world_path],\n",[101,13051,13052,13054,13056,13058],{"class":103,"line":1874},[101,13053,6072],{"class":6029},[101,13055,561],{"class":164},[101,13057,6077],{"class":111},[101,13059,5979],{"class":168},[101,13061,13062],{"class":103,"line":1883},[101,13063,307],{"emptyLinePlaceholder":306},[101,13065,13066],{"class":103,"line":1898},[101,13067,6551],{"class":225},[101,13069,13070,13072,13074],{"class":103,"line":1913},[101,13071,6556],{"class":168},[101,13073,561],{"class":164},[101,13075,6106],{"class":168},[101,13077,13078,13080,13082,13084],{"class":103,"line":1922},[101,13079,6565],{"class":6029},[101,13081,561],{"class":164},[101,13083,6116],{"class":111},[101,13085,6119],{"class":168},[101,13087,13088,13090,13092,13094],{"class":103,"line":1931},[101,13089,6576],{"class":6029},[101,13091,561],{"class":164},[101,13093,6129],{"class":111},[101,13095,6132],{"class":168},[101,13097,13098,13100,13102,13104,13106,13108,13110,13112,13114,13116,13118],{"class":103,"line":1940},[101,13099,6587],{"class":6029},[101,13101,561],{"class":164},[101,13103,6035],{"class":168},[101,13105,6144],{"class":111},[101,13107,6147],{"class":168},[101,13109,6150],{"class":111},[101,13111,6153],{"class":168},[101,13113,6156],{"class":6029},[101,13115,561],{"class":164},[101,13117,6077],{"class":111},[101,13119,5979],{"class":168},[101,13121,13122],{"class":103,"line":1956},[101,13123,307],{"emptyLinePlaceholder":306},[101,13125,13126],{"class":103,"line":2004},[101,13127,8413],{"class":225},[101,13129,13130,13132,13134],{"class":103,"line":2013},[101,13131,8418],{"class":168},[101,13133,561],{"class":164},[101,13135,6106],{"class":168},[101,13137,13138,13140,13142,13144],{"class":103,"line":2022},[101,13139,6565],{"class":6029},[101,13141,561],{"class":164},[101,13143,8431],{"class":111},[101,13145,6132],{"class":168},[101,13147,13148,13150,13152,13154],{"class":103,"line":2027},[101,13149,6576],{"class":6029},[101,13151,561],{"class":164},[101,13153,8431],{"class":111},[101,13155,6132],{"class":168},[101,13157,13158,13160,13162],{"class":103,"line":2049},[101,13159,6587],{"class":6029},[101,13161,561],{"class":164},[101,13163,8452],{"class":168},[101,13165,13166],{"class":103,"line":2065},[101,13167,8457],{"class":168},[101,13169,13170],{"class":103,"line":2080},[101,13171,307],{"emptyLinePlaceholder":306},[101,13173,13174],{"class":103,"line":2096},[101,13175,8466],{"class":225},[101,13177,13178,13180,13182],{"class":103,"line":2105},[101,13179,8471],{"class":168},[101,13181,561],{"class":164},[101,13183,6106],{"class":168},[101,13185,13186,13188,13190,13192],{"class":103,"line":2110},[101,13187,6565],{"class":6029},[101,13189,561],{"class":164},[101,13191,8484],{"class":111},[101,13193,6132],{"class":168},[101,13195,13196,13198,13200,13202],{"class":103,"line":2126},[101,13197,6576],{"class":6029},[101,13199,561],{"class":164},[101,13201,8484],{"class":111},[101,13203,6132],{"class":168},[101,13205,13206,13208,13210,13212],{"class":103,"line":2135},[101,13207,8501],{"class":6029},[101,13209,561],{"class":164},[101,13211,8484],{"class":111},[101,13213,6132],{"class":168},[101,13215,13216,13218,13220,13222],{"class":103,"line":2156},[101,13217,6072],{"class":6029},[101,13219,561],{"class":164},[101,13221,6077],{"class":111},[101,13223,6132],{"class":168},[101,13225,13226,13228,13230,13232,13234],{"class":103,"line":2165},[101,13227,6587],{"class":6029},[101,13229,561],{"class":164},[101,13231,6035],{"class":168},[101,13233,8668],{"class":111},[101,13235,8671],{"class":168},[101,13237,13238],{"class":103,"line":2184},[101,13239,8531],{"class":168},[101,13241,13242],{"class":103,"line":2193},[101,13243,307],{"emptyLinePlaceholder":306},[101,13245,13246,13248],{"class":103,"line":2202},[101,13247,6616],{"class":164},[101,13249,8542],{"class":168},[23,13251,13252],{},"最后记得修改cmakelists.txt文件，让编译后将world文件拷贝到install目录下",[23,13254,13255],{},[55,13256],{"alt":57,"src":13257},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1699.webp",[92,13259,13261],{"className":6015,"code":13260,"language":6017,"meta":57,"style":57},"colcon build\nsource install\u002Fsetup.bash\nros2 launch fishbot_description gazebo.launch.py \n",[98,13262,13263,13267,13275],{"__ignoreMap":57},[101,13264,13265],{"class":103,"line":104},[101,13266,7800],{"class":168},[101,13268,13269,13271,13273],{"class":103,"line":229},[101,13270,6649],{"class":168},[101,13272,186],{"class":164},[101,13274,6654],{"class":168},[101,13276,13277],{"class":103,"line":257},[101,13278,6659],{"class":168},[23,13280,13281],{},[55,13282],{"alt":57,"src":13283},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1700.webp",[23,13285,13286],{},[55,13287],{"alt":57,"src":13288},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1701.webp",[84,13290,13291],{"id":13291},"框架优化",[23,13293,13294,13295],{},"本节代码学长也发到仓库了，有需要的学弟学妹请看:",[15,13296,13297],{"href":13297,"rel":13298},"https:\u002F\u002Fgithub.com\u002Ftungchiahui\u002FROS_WS\u002Ftree\u002Fmain\u002FROS2_WS%2F6.ws_simulations%2Fsrc%2Ffishbot_description",[19],[23,13300,13301],{},"比如说支持xacro等优化。",[23,13303,13304],{},"首先先把原来的fishbot_gazebo.urdf里的内容分成好几个urdf和xacro再用一个总的fishbot.urdf.xacro去引用。（学过xacro的肯定都会）",[23,13306,13307],{},[55,13308],{"alt":57,"src":13309},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1702.webp",[23,13311,13312],{},"优化后的launch如下：",[92,13314,13316],{"className":6015,"code":13315,"language":6017,"meta":57,"style":57},"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",[98,13317,13318,13328,13338,13342,13346,13356,13360,13364,13368,13372,13383,13395,13399,13403,13407,13411,13415,13419,13423,13427,13431,13435,13439,13443,13447,13451,13455,13459,13463,13467,13471,13475,13485,13497,13508,13514,13518,13526,13534,13542,13546,13551,13559,13563,13585,13604,13626,13638,13642,13670,13691,13695,13699,13707,13739,13749,13753,13757,13765,13775,13785,13816,13820,13824,13832,13842,13852,13868,13872,13876,13880,13888,13898,13908,13918,13928,13940,13944,13948],{"__ignoreMap":57},[101,13319,13320,13322,13324,13326],{"class":103,"line":104},[101,13321,931],{"class":164},[101,13323,6191],{"class":168},[101,13325,6194],{"class":164},[101,13327,6197],{"class":168},[101,13329,13330,13332,13334,13336],{"class":103,"line":229},[101,13331,931],{"class":164},[101,13333,6204],{"class":168},[101,13335,6194],{"class":164},[101,13337,6209],{"class":168},[101,13339,13340],{"class":103,"line":257},[101,13341,307],{"emptyLinePlaceholder":306},[101,13343,13344],{"class":103,"line":272},[101,13345,6218],{"class":225},[101,13347,13348,13350,13352,13354],{"class":103,"line":284},[101,13349,931],{"class":164},[101,13351,6225],{"class":168},[101,13353,6194],{"class":164},[101,13355,6230],{"class":168},[101,13357,13358],{"class":103,"line":303},[101,13359,307],{"emptyLinePlaceholder":306},[101,13361,13362],{"class":103,"line":310},[101,13363,6239],{"class":225},[101,13365,13366],{"class":103,"line":325},[101,13367,307],{"emptyLinePlaceholder":306},[101,13369,13370],{"class":103,"line":346},[101,13371,6248],{"class":225},[101,13373,13374,13376,13378,13380],{"class":103,"line":357},[101,13375,931],{"class":164},[101,13377,6225],{"class":168},[101,13379,6194],{"class":164},[101,13381,13382],{"class":168}," DeclareLaunchArgument\n",[101,13384,13385,13387,13390,13392],{"class":103,"line":366},[101,13386,931],{"class":164},[101,13388,13389],{"class":168}," launch.substitutions ",[101,13391,6194],{"class":164},[101,13393,13394],{"class":168}," LaunchConfiguration\n",[101,13396,13397],{"class":103,"line":381},[101,13398,307],{"emptyLinePlaceholder":306},[101,13400,13401],{"class":103,"line":386},[101,13402,6275],{"class":225},[101,13404,13405],{"class":103,"line":392},[101,13406,307],{"emptyLinePlaceholder":306},[101,13408,13409],{"class":103,"line":397},[101,13410,6284],{"class":225},[101,13412,13413],{"class":103,"line":403},[101,13414,307],{"emptyLinePlaceholder":306},[101,13416,13417],{"class":103,"line":408},[101,13418,6293],{"class":225},[101,13420,13421],{"class":103,"line":414},[101,13422,307],{"emptyLinePlaceholder":306},[101,13424,13425],{"class":103,"line":419},[101,13426,6302],{"class":225},[101,13428,13429],{"class":103,"line":425},[101,13430,307],{"emptyLinePlaceholder":306},[101,13432,13433],{"class":103,"line":430},[101,13434,6311],{"class":225},[101,13436,13437],{"class":103,"line":436},[101,13438,307],{"emptyLinePlaceholder":306},[101,13440,13441],{"class":103,"line":441},[101,13442,6320],{"class":225},[101,13444,13445],{"class":103,"line":447},[101,13446,307],{"emptyLinePlaceholder":306},[101,13448,13449],{"class":103,"line":452},[101,13450,6329],{"class":225},[101,13452,13453],{"class":103,"line":458},[101,13454,307],{"emptyLinePlaceholder":306},[101,13456,13457],{"class":103,"line":463},[101,13458,6338],{"class":225},[101,13460,13461],{"class":103,"line":469},[101,13462,307],{"emptyLinePlaceholder":306},[101,13464,13465],{"class":103,"line":474},[101,13466,6347],{"class":225},[101,13468,13469],{"class":103,"line":502},[101,13470,307],{"emptyLinePlaceholder":306},[101,13472,13473],{"class":103,"line":528},[101,13474,6356],{"class":225},[101,13476,13477,13479,13481,13483],{"class":103,"line":572},[101,13478,931],{"class":164},[101,13480,6363],{"class":168},[101,13482,6194],{"class":164},[101,13484,6368],{"class":168},[101,13486,13487,13489,13492,13494],{"class":103,"line":577},[101,13488,931],{"class":164},[101,13490,13491],{"class":168}," launch_ros.parameter_descriptions ",[101,13493,6194],{"class":164},[101,13495,13496],{"class":168}," ParameterValue\n",[101,13498,13499,13501,13503,13505],{"class":103,"line":588},[101,13500,931],{"class":164},[101,13502,13389],{"class":168},[101,13504,6194],{"class":164},[101,13506,13507],{"class":168}," Command,LaunchConfiguration\n",[101,13509,13510,13512],{"class":103,"line":633},[101,13511,6194],{"class":164},[101,13513,6375],{"class":168},[101,13515,13516],{"class":103,"line":663},[101,13517,307],{"emptyLinePlaceholder":306},[101,13519,13520,13522,13524],{"class":103,"line":675},[101,13521,6384],{"class":164},[101,13523,6387],{"class":107},[101,13525,6390],{"class":168},[101,13527,13528,13530,13532],{"class":103,"line":797},[101,13529,6395],{"class":168},[101,13531,561],{"class":164},[101,13533,6400],{"class":111},[101,13535,13536,13538,13540],{"class":103,"line":803},[101,13537,6405],{"class":168},[101,13539,561],{"class":164},[101,13541,6410],{"class":111},[101,13543,13544],{"class":103,"line":815},[101,13545,307],{"emptyLinePlaceholder":306},[101,13547,13548],{"class":103,"line":821},[101,13549,13550],{"class":225},"    # urdf_xacro_name = \"fishbot_gazebo.urdf\"\n",[101,13552,13553,13555,13557],{"class":103,"line":827},[101,13554,12911],{"class":168},[101,13556,561],{"class":164},[101,13558,12916],{"class":111},[101,13560,13561],{"class":103,"line":833},[101,13562,307],{"emptyLinePlaceholder":306},[101,13564,13565,13567,13569,13571,13573,13575,13577,13579,13581,13583],{"class":103,"line":839},[101,13566,6429],{"class":168},[101,13568,561],{"class":164},[101,13570,6434],{"class":168},[101,13572,6437],{"class":164},[101,13574,6440],{"class":111},[101,13576,6443],{"class":137},[101,13578,6446],{"class":168},[101,13580,6449],{"class":137},[101,13582,6440],{"class":111},[101,13584,5979],{"class":168},[101,13586,13587,13590,13592,13594,13597,13599,13602],{"class":103,"line":862},[101,13588,13589],{"class":168},"    urdf_xacro_model_path ",[101,13591,561],{"class":164},[101,13593,6463],{"class":168},[101,13595,13596],{"class":111},"\"urdf\u002Fxacro\"",[101,13598,6047],{"class":168},[101,13600,13601],{"class":111},"\"fishbot.urdf.xacro\"",[101,13603,5979],{"class":168},[101,13605,13606,13608,13610,13612,13614,13616,13618,13620,13622,13624],{"class":103,"line":905},[101,13607,12628],{"class":168},[101,13609,561],{"class":164},[101,13611,6463],{"class":168},[101,13613,6437],{"class":164},[101,13615,12977],{"class":111},[101,13617,6443],{"class":137},[101,13619,12982],{"class":168},[101,13621,6449],{"class":137},[101,13623,6478],{"class":111},[101,13625,5979],{"class":168},[101,13627,13628,13630,13632,13634,13636],{"class":103,"line":942},[101,13629,8592],{"class":168},[101,13631,561],{"class":164},[101,13633,6463],{"class":168},[101,13635,8599],{"class":111},[101,13637,5979],{"class":168},[101,13639,13640],{"class":103,"line":947},[101,13641,307],{"emptyLinePlaceholder":306},[101,13643,13644,13647,13649,13652,13655,13657,13660,13662,13665,13667],{"class":103,"line":971},[101,13645,13646],{"class":168},"    model ",[101,13648,561],{"class":164},[101,13650,13651],{"class":168}," DeclareLaunchArgument(",[101,13653,13654],{"class":6029},"name",[101,13656,561],{"class":164},[101,13658,13659],{"class":111},"\"model\"",[101,13661,6041],{"class":168},[101,13663,13664],{"class":6029},"default_value",[101,13666,561],{"class":164},[101,13668,13669],{"class":168},"urdf_xacro_model_path)\n",[101,13671,13672,13675,13677,13680,13683,13686,13688],{"class":103,"line":995},[101,13673,13674],{"class":168},"    robot_description ",[101,13676,561],{"class":164},[101,13678,13679],{"class":168}," ParameterValue(Command([",[101,13681,13682],{"class":111},"\"xacro \"",[101,13684,13685],{"class":168},",LaunchConfiguration(",[101,13687,13659],{"class":111},[101,13689,13690],{"class":168},")]))\n",[101,13692,13693],{"class":103,"line":1874},[101,13694,307],{"emptyLinePlaceholder":306},[101,13696,13697],{"class":103,"line":1883},[101,13698,6489],{"class":225},[101,13700,13701,13703,13705],{"class":103,"line":1898},[101,13702,6494],{"class":168},[101,13704,561],{"class":164},[101,13706,6499],{"class":168},[101,13708,13709,13711,13713,13715,13717,13719,13721,13723,13725,13727,13729,13731,13733,13735,13737],{"class":103,"line":1913},[101,13710,6030],{"class":6029},[101,13712,561],{"class":164},[101,13714,6035],{"class":168},[101,13716,6038],{"class":111},[101,13718,6041],{"class":168},[101,13720,6044],{"class":111},[101,13722,6047],{"class":168},[101,13724,6050],{"class":111},[101,13726,6041],{"class":168},[101,13728,6055],{"class":111},[101,13730,6041],{"class":168},[101,13732,6050],{"class":111},[101,13734,6041],{"class":168},[101,13736,6064],{"class":111},[101,13738,13049],{"class":168},[101,13740,13741,13743,13745,13747],{"class":103,"line":1922},[101,13742,6072],{"class":6029},[101,13744,561],{"class":164},[101,13746,6077],{"class":111},[101,13748,5979],{"class":168},[101,13750,13751],{"class":103,"line":1931},[101,13752,307],{"emptyLinePlaceholder":306},[101,13754,13755],{"class":103,"line":1940},[101,13756,6551],{"class":225},[101,13758,13759,13761,13763],{"class":103,"line":1956},[101,13760,6556],{"class":168},[101,13762,561],{"class":164},[101,13764,6106],{"class":168},[101,13766,13767,13769,13771,13773],{"class":103,"line":2004},[101,13768,6565],{"class":6029},[101,13770,561],{"class":164},[101,13772,6116],{"class":111},[101,13774,6119],{"class":168},[101,13776,13777,13779,13781,13783],{"class":103,"line":2013},[101,13778,6576],{"class":6029},[101,13780,561],{"class":164},[101,13782,6129],{"class":111},[101,13784,6132],{"class":168},[101,13786,13787,13789,13791,13793,13795,13797,13800,13802,13805,13808,13810,13812,13814],{"class":103,"line":2022},[101,13788,6587],{"class":6029},[101,13790,561],{"class":164},[101,13792,6035],{"class":168},[101,13794,6144],{"class":111},[101,13796,6147],{"class":168},[101,13798,13799],{"class":111},"'-topic'",[101,13801,6041],{"class":168},[101,13803,13804],{"class":111},"'\u002Frobot_description'",[101,13806,13807],{"class":168}," ], ",[101,13809,6156],{"class":6029},[101,13811,561],{"class":164},[101,13813,6077],{"class":111},[101,13815,5979],{"class":168},[101,13817,13818],{"class":103,"line":2027},[101,13819,307],{"emptyLinePlaceholder":306},[101,13821,13822],{"class":103,"line":2049},[101,13823,8413],{"class":225},[101,13825,13826,13828,13830],{"class":103,"line":2065},[101,13827,8418],{"class":168},[101,13829,561],{"class":164},[101,13831,6106],{"class":168},[101,13833,13834,13836,13838,13840],{"class":103,"line":2080},[101,13835,6565],{"class":6029},[101,13837,561],{"class":164},[101,13839,8431],{"class":111},[101,13841,6132],{"class":168},[101,13843,13844,13846,13848,13850],{"class":103,"line":2096},[101,13845,6576],{"class":6029},[101,13847,561],{"class":164},[101,13849,8431],{"class":111},[101,13851,6132],{"class":168},[101,13853,13854,13857,13859,13862,13865],{"class":103,"line":2105},[101,13855,13856],{"class":6029},"        parameters",[101,13858,561],{"class":164},[101,13860,13861],{"class":168},"[{",[101,13863,13864],{"class":111},"\"robot_description\"",[101,13866,13867],{"class":168},": robot_description}]\n",[101,13869,13870],{"class":103,"line":2110},[101,13871,8457],{"class":168},[101,13873,13874],{"class":103,"line":2126},[101,13875,307],{"emptyLinePlaceholder":306},[101,13877,13878],{"class":103,"line":2135},[101,13879,8466],{"class":225},[101,13881,13882,13884,13886],{"class":103,"line":2156},[101,13883,8471],{"class":168},[101,13885,561],{"class":164},[101,13887,6106],{"class":168},[101,13889,13890,13892,13894,13896],{"class":103,"line":2165},[101,13891,6565],{"class":6029},[101,13893,561],{"class":164},[101,13895,8484],{"class":111},[101,13897,6132],{"class":168},[101,13899,13900,13902,13904,13906],{"class":103,"line":2184},[101,13901,6576],{"class":6029},[101,13903,561],{"class":164},[101,13905,8484],{"class":111},[101,13907,6132],{"class":168},[101,13909,13910,13912,13914,13916],{"class":103,"line":2193},[101,13911,8501],{"class":6029},[101,13913,561],{"class":164},[101,13915,8484],{"class":111},[101,13917,6132],{"class":168},[101,13919,13920,13922,13924,13926],{"class":103,"line":2202},[101,13921,6072],{"class":6029},[101,13923,561],{"class":164},[101,13925,6077],{"class":111},[101,13927,6132],{"class":168},[101,13929,13930,13932,13934,13936,13938],{"class":103,"line":2211},[101,13931,6587],{"class":6029},[101,13933,561],{"class":164},[101,13935,6035],{"class":168},[101,13937,8668],{"class":111},[101,13939,8671],{"class":168},[101,13941,13942],{"class":103,"line":2232},[101,13943,8531],{"class":168},[101,13945,13946],{"class":103,"line":2241},[101,13947,307],{"emptyLinePlaceholder":306},[101,13949,13950,13952],{"class":103,"line":2256},[101,13951,6616],{"class":164},[101,13953,13954],{"class":168}," LaunchDescription([model,start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[92,13956,13957],{"className":6015,"code":7793,"language":6017,"meta":57,"style":57},[98,13958,13959,13963,13971],{"__ignoreMap":57},[101,13960,13961],{"class":103,"line":104},[101,13962,7800],{"class":168},[101,13964,13965,13967,13969],{"class":103,"line":229},[101,13966,6649],{"class":168},[101,13968,186],{"class":164},[101,13970,6654],{"class":168},[101,13972,13973],{"class":103,"line":257},[101,13974,6659],{"class":168},[23,13976,13977],{},[55,13978],{"alt":57,"src":13979},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1703.webp",[23,13981,13982],{},[55,13983],{"alt":57,"src":13984},"https:\u002F\u002Fcdn.tungchiahui.cn\u002Ftungwebsite\u002Fassets\u002Fimages\u002F2023\u002F12\u002F30\u002Fimage1704.webp",[23,13986,13987],{},"然后就可以去搞导航啦！也可以接着学新版Ignition Gazebo，但这东西教程巨少，截止2024年只有赵虚左老师讲了。\n** 建议学习新的\tGazebo Harmonic （ROS2 Jazzy默认的版本） **",[13989,13990,13991],"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":57,"searchDepth":229,"depth":229,"links":13993},[13994],{"id":12,"depth":257,"text":13995},"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":57},"wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0100-GazeboClassic","VtCufvKLZJSjLF5QXDwwx-lD-ZQafNw1VLqpLG9FKtw",[14009,14015,14020,14025,14030,14035,14040,14044,14049,14054,14058,14059,14064,14069,14074,14079,14084,14089,14094,14099,14104,14109,14114,14119,14124,14129,14133,14138,14142,14147,14152,14157,14162,14167,14172,14177,14182,14187,14192,14196,14201,14206,14211,14216,14221,14226,14231,14236,14241,14246,14251,14256,14261,14266,14271,14276,14281,14286,14291,14296],{"path":14010,"stem":14011,"title":14012,"date":13997,"chapterOrder":14013,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0100-ros2-jie-shao","wiki\u002F2023-12-30-ros2-tutorial\u002F0100-ROS2介绍","ROS2介绍","0100",0,{"path":14016,"stem":14017,"title":14018,"date":13997,"chapterOrder":14019,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0200-ru-men-cao-zuo","wiki\u002F2023-12-30-ros2-tutorial\u002F0200-入门操作","入门操作","0200",{"path":14021,"stem":14022,"title":14023,"date":13997,"chapterOrder":14024,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0300-gong-zuo-kong-jian-yu-gong-neng-bao","wiki\u002F2023-12-30-ros2-tutorial\u002F0300-工作空间与功能包","工作空间与功能包","0300",{"path":14026,"stem":14027,"title":14028,"date":13997,"chapterOrder":14029,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0400-si-da-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F0400-四大通信","四大通信","0400",{"path":14031,"stem":14032,"title":14033,"date":13997,"chapterOrder":14034,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0500-ros2-qi-ta-tong-xin-ji-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F0500-ROS2其他通信机制","ROS2其他通信机制","0500",{"path":14036,"stem":14037,"title":14038,"date":13997,"chapterOrder":14039,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0600-launch","wiki\u002F2023-12-30-ros2-tutorial\u002F0600-Launch","Launch","0600",{"path":14041,"stem":14042,"title":14043,"date":13997,"chapterOrder":888,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0700-hui-su-rosbag2","wiki\u002F2023-12-30-ros2-tutorial\u002F0700-回溯rosbag2","回溯rosbag2",{"path":14045,"stem":14046,"title":14047,"date":13997,"chapterOrder":14048,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F0800-zuo-biao-bian-huan-tf","wiki\u002F2023-12-30-ros2-tutorial\u002F0800-坐标变换TF","坐标变换TF","0800",{"path":14050,"stem":14051,"title":14052,"date":13997,"chapterOrder":14053,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\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建模语言","0900",{"path":14055,"stem":14056,"title":14057,"date":13997,"chapterOrder":693,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1000-stage-ros2-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1000-Stage_Ros2仿真平台","Stage_Ros2仿真平台",{"path":14004,"stem":14006,"title":5,"date":13997,"chapterOrder":13996,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},{"path":14060,"stem":14061,"title":14062,"date":13997,"chapterOrder":14063,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-ignitiongazebo","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0200-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","1100-0200",{"path":14065,"stem":14066,"title":14067,"date":13997,"chapterOrder":14068,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-gazebosim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0300-GazeboSim","Gz Sim（Gazebo Harmonic）","1100-0300",{"path":14070,"stem":14071,"title":14072,"date":13997,"chapterOrder":14073,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-igngz2gzsim","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-0400-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim","1100-0400",{"path":14075,"stem":14076,"title":14077,"date":13997,"chapterOrder":14078,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1100-gezebo-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1100-Gezebo仿真平台","Gezebo仿真平台","1100",{"path":14080,"stem":14081,"title":14082,"date":13997,"chapterOrder":14083,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-humble-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0100-Humble版本","Humble导航仿真","1200-0100",{"path":14085,"stem":14086,"title":14087,"date":13997,"chapterOrder":14088,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-jazzy-ban-ben","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0200-Jazzy版本","Jazzy导航仿真","1200-0200",{"path":14090,"stem":14091,"title":14092,"date":13997,"chapterOrder":14093,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-humble2jazzy","wiki\u002F2023-12-30-ros2-tutorial\u002F1200-0300-Humble2Jazzy","Humble与Jazzy导航的差异","1200-0300",{"path":14095,"stem":14096,"title":14097,"date":13997,"chapterOrder":14098,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\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(仿真篇)","1200",{"path":14100,"stem":14101,"title":14102,"date":13997,"chapterOrder":14103,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-0100-Boost.Aiso","Boost.Asio库","1300-0100-0100",{"path":14105,"stem":14106,"title":14107,"date":13997,"chapterOrder":14108,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\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库","1300-0100-0200",{"path":14110,"stem":14111,"title":14112,"date":13997,"chapterOrder":14113,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-chuan-kou-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0100-串口通信","UART串口通信","1300-0100",{"path":14115,"stem":14116,"title":14117,"date":13997,"chapterOrder":14118,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0100-socketcan","SocketCAN","1300-0200-0100",{"path":14120,"stem":14121,"title":14122,"date":13997,"chapterOrder":14123,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2-socketcan","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-0200-ros2_socketcan","ROS2_SocketCAN","1300-0200-0200",{"path":14125,"stem":14126,"title":14127,"date":13997,"chapterOrder":14128,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-can-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0200-CAN通信","CAN通信","1300-0200",{"path":14130,"stem":14131,"title":14102,"date":13997,"chapterOrder":14132,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-0100-Boost.Aiso","1300-0300-0100",{"path":14134,"stem":14135,"title":14136,"date":13997,"chapterOrder":14137,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-tcp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0300-TCP通信","TCP通信","1300-0300",{"path":14139,"stem":14140,"title":14102,"date":13997,"chapterOrder":14141,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-boost-aiso","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-0100-Boost.Aiso","1300-0400-0100",{"path":14143,"stem":14144,"title":14145,"date":13997,"chapterOrder":14146,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-udp-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-0400-UDP通信","UDP通信","1300-0400",{"path":14148,"stem":14149,"title":14150,"date":13997,"chapterOrder":14151,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1300-linux-ying-jian-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002F1300-Linux硬件通信","Linux硬件通信","1300",{"path":14153,"stem":14154,"title":14155,"date":13997,"chapterOrder":14156,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-ji-qi-ren-zu-cheng","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0100-机器人组成","机器人组成","1400-0100",{"path":14158,"stem":14159,"title":14160,"date":13997,"chapterOrder":14161,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\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","1400-0200-0100",{"path":14163,"stem":14164,"title":14165,"date":13997,"chapterOrder":14166,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-yuan-cheng-fang-wen-zhuo-mian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0200-0200-远程访问桌面","远程访问桌面","1400-0200-0200",{"path":14168,"stem":14169,"title":14170,"date":13997,"chapterOrder":14171,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\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-工控机之远程开发环境","工控机之远程开发环境","1400-0200",{"path":14173,"stem":14174,"title":14175,"date":13997,"chapterOrder":14176,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\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设备","1400-0300",{"path":14178,"stem":14179,"title":14180,"date":13997,"chapterOrder":14181,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-fen-bu-shi-da-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0400-分布式搭建","分布式搭建","1400-0400",{"path":14183,"stem":14184,"title":14185,"date":13997,"chapterOrder":14186,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-you-hua-ri-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0500-优化日志","优化日志","1400-0500",{"path":14188,"stem":14189,"title":14190,"date":13997,"chapterOrder":14191,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-li-cheng-ji-odom","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0100-里程计Odom","里程计Odom","1400-0600-0100",{"path":14193,"stem":14194,"title":9232,"date":13997,"chapterOrder":14195,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-guan-xing-ji-imu","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0200-惯性计IMU","1400-0600-0200",{"path":14197,"stem":14198,"title":14199,"date":13997,"chapterOrder":14200,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\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","1400-0600-0300",{"path":14202,"stem":14203,"title":14204,"date":13997,"chapterOrder":14205,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-xiang-ji-camera","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0400-相机Camera","相机Camera","1400-0600-0400",{"path":14207,"stem":14208,"title":14209,"date":13997,"chapterOrder":14210,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\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","1400-0600-0500",{"path":14212,"stem":14213,"title":14214,"date":13997,"chapterOrder":14215,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-shou-bing-joy","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0600-手柄joy","手柄JOY","1400-0600-0600",{"path":14217,"stem":14218,"title":14219,"date":13997,"chapterOrder":14220,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-jian-pan-kong-zhi-jie-dian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-0700-键盘控制节点","键盘控制节点","1400-0600-0700",{"path":14222,"stem":14223,"title":14224,"date":13997,"chapterOrder":14225,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-ying-jian-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0600-硬件平台","硬件平台","1400-0600",{"path":14227,"stem":14228,"title":14229,"date":13997,"chapterOrder":14230,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-zuo-biao-xi-yu-hua-ti-guan-xi","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0700-坐标系与话题关系","坐标系与话题关系","1400-0700",{"path":14232,"stem":14233,"title":14234,"date":13997,"chapterOrder":14235,"chapterDepth":257,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\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-轮式里程计标定","轮式里程计标定","1400-0800-0100-0100",{"path":14237,"stem":14238,"title":14239,"date":13997,"chapterOrder":14240,"chapterDepth":257,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\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融合","1400-0800-0100-0200",{"path":14242,"stem":14243,"title":14244,"date":13997,"chapterOrder":14245,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\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-轮式里程计标定与融合","轮式里程计标定与融合","1400-0800-0100",{"path":14247,"stem":14248,"title":14249,"date":13997,"chapterOrder":14250,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-ji-guang-lei-da-gong-ju","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0200-激光雷达工具","激光雷达工具","1400-0800-0200",{"path":14252,"stem":14253,"title":14254,"date":13997,"chapterOrder":14255,"chapterDepth":229,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-xiang-ji-shi-yong-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-0300-相机使用进阶","相机使用进阶","1400-0800-0300",{"path":14257,"stem":14258,"title":14259,"date":13997,"chapterOrder":14260,"chapterDepth":104,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-ying-jian-ping-tai-jin-jie","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-0800-硬件平台进阶","硬件平台进阶","1400-0800",{"path":14262,"stem":14263,"title":14264,"date":13997,"chapterOrder":14265,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1400-ji-qi-ren-ying-jian","wiki\u002F2023-12-30-ros2-tutorial\u002F1400-机器人硬件","机器人硬件","1400",{"path":14267,"stem":14268,"title":14269,"date":13997,"chapterOrder":14270,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1500-ros2-control","wiki\u002F2023-12-30-ros2-tutorial\u002F1500-ROS2_Control","ROS2_Control","1500",{"path":14272,"stem":14273,"title":14274,"date":13997,"chapterOrder":14275,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\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工业机器人机械臂","1600",{"path":14277,"stem":14278,"title":14279,"date":13997,"chapterOrder":14280,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\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(实体篇)","1700",{"path":14282,"stem":14283,"title":14284,"date":13997,"chapterOrder":14285,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1800-microros","wiki\u002F2023-12-30-ros2-tutorial\u002F1800-MicroROS","MicroROS","1800",{"path":14287,"stem":14288,"title":14289,"date":13997,"chapterOrder":14290,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F1900-webots-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002F1900-Webots仿真平台","Webots仿真平台","1900",{"path":14292,"stem":14293,"title":14294,"date":13997,"chapterOrder":14295,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":14002},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002F2000-opencv","wiki\u002F2023-12-30-ros2-tutorial\u002F2000-OpenCV","OpenCV","2000",{"path":13999,"stem":14297,"title":14298,"date":13997,"chapterOrder":14299,"chapterDepth":14014,"docKey":13998,"docRoot":13999,"docTitle":14000,"isWikiDoc":306,"isWikiIndex":306},"wiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2机器人操作系统教程",null,1784505229905]