[{"data":1,"prerenderedAt":14154},["ShallowReactive",2],{"wiki-page-/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic":3,"wiki-doc-items-/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic":14014},{"id":4,"title":5,"body":6,"chapter":14000,"chapterSort":14001,"date":14002,"description":57,"docKey":14003,"docRoot":14004,"docTitle":14005,"extension":14006,"isWikiDoc":308,"isWikiIndex":14007,"layout":14008,"meta":14009,"navigation":308,"path":14010,"seo":14011,"stem":14012,"wikiDepth":106,"__hash__":14013},"content/wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic.md","Gezebo Classic",{"type":7,"value":8,"toc":13996},"minimark",[9,22,26,29,35,38,43,46,52,59,62,65,72,75,78,85,90,93,124,127,152,155,1022,1027,1030,1033,1036,1052,1057,1060,1074,1079,1082,1095,1098,1101,1118,1123,1141,1146,1149,1166,1169,1177,5686,5689,5692,5697,5700,5705,5708,5713,5716,5719,5724,5727,5730,5733,5736,5741,5744,5749,5752,5755,5758,5763,5766,5769,5774,5777,5782,5785,5792,5824,5827,5858,5861,5932,5937,5940,5983,5988,5991,5996,6007,6010,6016,6083,6092,6095,6166,6169,6174,6177,6180,6183,6623,6626,6663,6668,6671,6674,6711,6716,6871,6876,6879,6884,6887,6890,6898,6901,6904,6907,6910,6915,6918,6921,6924,6927,7039,7049,7055,7058,7061,7071,7076,7090,7093,7246,7249,7507,7510,7530,7791,7794,7816,7819,7839,7844,7847,7850,7879,7882,7891,7894,7919,7922,7925,7934,7937,7942,7953,7958,7963,7966,7975,7978,7983,7986,7999,8546,8549,8562,8565,8570,8573,8578,8583,8586,8679,8682,9229,9232,9236,9239,9242,9245,9256,9259,9262,9265,9268,9273,9276,9279,9284,9287,9292,9295,9301,9304,9307,9314,9317,9328,9331,9347,9354,10089,10092,10100,10111,10116,10140,10145,10150,10495,10498,10503,10507,10510,10517,10520,10525,10528,10533,10536,10544,10547,10552,10555,10558,10563,10566,10571,10574,10579,10582,10587,10590,10593,10598,10604,10610,10613,10616,10619,11007,11010,11039,11042,11047,11057,11062,11084,11089,11092,11095,11100,11103,11108,11111,11116,11121,11126,11130,11136,11139,11142,11145,11166,11169,11174,11177,11180,11185,11211,11214,11223,11226,11328,11331,11833,11836,11864,11867,11872,11875,11922,11925,12004,12007,12013,12058,12065,12362,12365,12368,12371,12376,12381,12384,12387,12390,12393,12396,12421,12424,12427,12430,12433,12438,12441,12457,12463,12468,12471,12474,12477,12482,12485,12488,12491,12494,12499,12502,12507,12510,12513,12518,12523,12526,12531,12534,12539,12542,12547,12550,12553,12558,12561,12564,12569,12572,12575,12580,12583,12586,12616,12622,12700,12703,13253,13256,13261,13282,13287,13292,13295,13303,13306,13309,13314,13317,13959,13979,13984,13989,13992],[10,11,13,14,21],"h3",{"id":12},"gazebogazebo-classic","Gazebo(",[15,16,20],"a",{"href":17,"rel":18},"https://classic.gazebosim.org/",[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://gazebosim.org/home",[19],[23,53,54],{},[55,56],"img",{"alt":57,"src":58},"","https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1627.webp",[23,60,61],{},"如果你想从老版的Gazebo迁移到新版的Gazebo，那么请看下方官方教程：",[23,63,64],{},"从Gazebo Classic迁移到ROS2 Humble的Ign Gazebo(Gazebo Fortress)：",[23,66,67],{},[15,68,71],{"href":69,"rel":70},"https://gazebosim.org/docs/fortress/gazebo%5C_classic%5C_migration/",[19],"https://gazebosim.org/docs/fortress/gazebo\\_classic\\_migration/",[23,73,74],{},"从Gazebo Classic迁移到ROS2 Jazzy的Gazebo Sim(Gazebo Harmonic)：",[23,76,77],{},"Jazzy之后的版本应该变化不会太大，也可以暂时参照下面这个教程（或者去官网找对应版本的教程）：",[23,79,80],{},[15,81,84],{"href":82,"rel":83},"https://gazebosim.org/docs/harmonic/gazebo%5C_classic%5C_migration/",[19],"https://gazebosim.org/docs/harmonic/gazebo\\_classic\\_migration/",[86,87,89],"h4",{"id":88},"gazebo-classic安装与运行","Gazebo Classic安装与运行",[23,91,92],{},"ROS2只有humble有老版Gazebo",[94,95,99],"pre",{"className":96,"code":97,"language":98,"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",[100,101,102],"code",{"__ignoreMap":57},[103,104,107,111,115,118,121],"span",{"class":105,"line":106},"line",1,[103,108,110],{"class":109},"sScJk","sudo",[103,112,114],{"class":113},"sZZnC"," apt",[103,116,117],{"class":113}," install",[103,119,120],{"class":113}," ros-humble-gazebo-ros",[103,122,123],{"class":113}," ros-humble-gazebo-ros-pkgs\n",[23,125,126],{},"安装完成后，我们就可以通过下面的命令行来启动gazebo并加载ros2插件。",[94,128,130],{"className":96,"code":129,"language":98,"meta":57,"style":57},"gazebo --verbose -s libgazebo_ros_init.so -s libgazebo_ros_factory.so \n",[100,131,132],{"__ignoreMap":57},[103,133,134,137,141,144,147,149],{"class":105,"line":106},[103,135,136],{"class":109},"gazebo",[103,138,140],{"class":139},"sj4cs"," --verbose",[103,142,143],{"class":139}," -s",[103,145,146],{"class":113}," libgazebo_ros_init.so",[103,148,143],{"class":139},[103,150,151],{"class":113}," libgazebo_ros_factory.so\n",[23,153,154],{},"看到下面这个日志和gazebo界面，没啥大问题就说明成功了。（一些警告是说Gazebo Classic已经弃用，鼓励使用新版Ingition Gazebo，忽略这些警告即可）",[94,156,160],{"className":157,"code":158,"language":159,"meta":57,"style":57},"language-sql shiki shiki-themes github-light github-dark","root@Dell-G15-5511:/home/tungchiahui/UserFolder/MySource/ROS_WS/ROS2_WS/6.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://gazebosim.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://gazebosim.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://gazebosim.org/docs/latest/gazebo_classic_migration?utm_source=gazebo_ros_pkgs&utm_medium=cli)\n\n[Msg] Waiting for master.\n[Msg] Connected to gazebo master @ http://127.0.0.1:11345\n[Msg] Publicized address: 192.168.31.60\n[Msg] Loading world file [/usr/share/gazebo-11/worlds/empty.world]\nXDG_RUNTIME_DIR (/run/user/1000) 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://127.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 \"/root/.gazebo/gui.ini\"\n[Wrn] [GuiIface.cc:120] QStandardPaths: runtime directory '/run/user/1000' 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://models.gazebosim.org//database.config]. Only locally installed models will be available.\n[Wrn] [Event.cc:61] Warning: Deleting a connection right after creation. Make sure to save the ConnectionPtr from a Connect call\n","sql",[100,161,162,229,257,272,284,303,310,325,346,357,366,381,386,392,397,403,408,414,419,425,430,436,441,447,452,458,463,469,474,502,528,572,577,588,633,663,675,797,803,815,821,827,833,839,862,905,942,947,971,995],{"__ignoreMap":57},[103,163,164,168,172,175,178,180,183,186,189,192,194,197,199,202,204,207,209,212,214,217,219,222,225],{"class":105,"line":106},[103,165,167],{"class":166},"szBVR","root",[103,169,171],{"class":170},"sVt8B","@Dell",[103,173,174],{"class":166},"-",[103,176,177],{"class":170},"G15",[103,179,174],{"class":166},[103,181,182],{"class":139},"5511",[103,184,185],{"class":170},":",[103,187,188],{"class":166},"/",[103,190,191],{"class":170},"home",[103,193,188],{"class":166},[103,195,196],{"class":170},"tungchiahui",[103,198,188],{"class":166},[103,200,201],{"class":170},"UserFolder",[103,203,188],{"class":166},[103,205,206],{"class":170},"MySource",[103,208,188],{"class":166},[103,210,211],{"class":170},"ROS_WS",[103,213,188],{"class":166},[103,215,216],{"class":170},"ROS2_WS",[103,218,188],{"class":166},[103,220,221],{"class":139},"6",[103,223,224],{"class":170},".ws_simulations$ gazebo ",[103,226,228],{"class":227},"sJ8bj","--verbose -s libgazebo_ros_init.so -s libgazebo_ros_factory.so \n",[103,230,232,235,237,240,243,246,249,252,254],{"class":105,"line":231},2,[103,233,234],{"class":170},"Gazebo multi",[103,236,174],{"class":166},[103,238,239],{"class":170},"robot simulator, ",[103,241,242],{"class":166},"version",[103,244,245],{"class":139}," 11",[103,247,248],{"class":170},".",[103,250,251],{"class":139},"10",[103,253,248],{"class":170},[103,255,256],{"class":139},"2\n",[103,258,260,263,266,269],{"class":105,"line":259},3,[103,261,262],{"class":170},"Copyright (C) ",[103,264,265],{"class":139},"2012",[103,267,268],{"class":166}," Open",[103,270,271],{"class":170}," Source Robotics Foundation.\n",[103,273,275,278,281],{"class":105,"line":274},4,[103,276,277],{"class":170},"Released under the Apache ",[103,279,280],{"class":139},"2",[103,282,283],{"class":170}," License.\n",[103,285,287,290,292,295,298,300],{"class":105,"line":286},5,[103,288,289],{"class":166},"http",[103,291,185],{"class":170},[103,293,294],{"class":166},"//",[103,296,297],{"class":139},"gazebosim",[103,299,248],{"class":170},[103,301,302],{"class":139},"org\n",[103,304,306],{"class":105,"line":305},6,[103,307,309],{"emptyLinePlaceholder":308},true,"\n",[103,311,313,316,319,322],{"class":105,"line":312},7,[103,314,315],{"class":170},"[Msg] Waiting ",[103,317,318],{"class":166},"for",[103,320,321],{"class":166}," master",[103,323,324],{"class":170},".\n",[103,326,328,330,332,334,336,338,340,342,344],{"class":105,"line":327},8,[103,329,234],{"class":170},[103,331,174],{"class":166},[103,333,239],{"class":170},[103,335,242],{"class":166},[103,337,245],{"class":139},[103,339,248],{"class":170},[103,341,251],{"class":139},[103,343,248],{"class":170},[103,345,256],{"class":139},[103,347,349,351,353,355],{"class":105,"line":348},9,[103,350,262],{"class":170},[103,352,265],{"class":139},[103,354,268],{"class":166},[103,356,271],{"class":170},[103,358,360,362,364],{"class":105,"line":359},10,[103,361,277],{"class":170},[103,363,280],{"class":139},[103,365,283],{"class":170},[103,367,369,371,373,375,377,379],{"class":105,"line":368},11,[103,370,289],{"class":166},[103,372,185],{"class":170},[103,374,294],{"class":166},[103,376,297],{"class":139},[103,378,248],{"class":170},[103,380,302],{"class":139},[103,382,384],{"class":105,"line":383},12,[103,385,309],{"emptyLinePlaceholder":308},[103,387,389],{"class":105,"line":388},13,[103,390,391],{"class":170},"[Wrn] [gazebo_ros_init.cpp:178] \n",[103,393,395],{"class":105,"line":394},14,[103,396,309],{"emptyLinePlaceholder":308},[103,398,400],{"class":105,"line":399},15,[103,401,402],{"class":170},"#     # ####### ####### ###  #####  #######\n",[103,404,406],{"class":105,"line":405},16,[103,407,309],{"emptyLinePlaceholder":308},[103,409,411],{"class":105,"line":410},17,[103,412,413],{"class":170},"##    # #     #    #     #  #     # #\n",[103,415,417],{"class":105,"line":416},18,[103,418,309],{"emptyLinePlaceholder":308},[103,420,422],{"class":105,"line":421},19,[103,423,424],{"class":170},"# #   # #     #    #     #  #       #\n",[103,426,428],{"class":105,"line":427},20,[103,429,309],{"emptyLinePlaceholder":308},[103,431,433],{"class":105,"line":432},21,[103,434,435],{"class":170},"#  #  # #     #    #     #  #       #####\n",[103,437,439],{"class":105,"line":438},22,[103,440,309],{"emptyLinePlaceholder":308},[103,442,444],{"class":105,"line":443},23,[103,445,446],{"class":170},"#   # # #     #    #     #  #       #\n",[103,448,450],{"class":105,"line":449},24,[103,451,309],{"emptyLinePlaceholder":308},[103,453,455],{"class":105,"line":454},25,[103,456,457],{"class":170},"#    ## #     #    #     #  #     # #\n",[103,459,461],{"class":105,"line":460},26,[103,462,309],{"emptyLinePlaceholder":308},[103,464,466],{"class":105,"line":465},27,[103,467,468],{"class":170},"#     # #######    #    ###  #####  #######\n",[103,470,472],{"class":105,"line":471},28,[103,473,309],{"emptyLinePlaceholder":308},[103,475,477,480,482,485,488,491,494,497,499],{"class":105,"line":476},29,[103,478,479],{"class":170},"This ",[103,481,242],{"class":166},[103,483,484],{"class":170}," of Gazebo, ",[103,486,487],{"class":166},"now",[103,489,490],{"class":170}," called Gazebo classic, reaches ",[103,492,493],{"class":166},"end-",[103,495,496],{"class":170},"of",[103,498,174],{"class":166},[103,500,501],{"class":170},"life\n",[103,503,505,508,511,514,517,520,523,525],{"class":105,"line":504},30,[103,506,507],{"class":166},"in",[103,509,510],{"class":170}," January ",[103,512,513],{"class":139},"2025",[103,515,516],{"class":170},". Users are highly encouraged ",[103,518,519],{"class":166},"to",[103,521,522],{"class":170}," migrate ",[103,524,519],{"class":166},[103,526,527],{"class":170}," the new Gazebo\n",[103,529,531,534,537,539,541,543,546,548,551,553,556,558,561,564,567,569],{"class":105,"line":530},31,[103,532,533],{"class":166},"using",[103,535,536],{"class":170}," our migration guides (https:",[103,538,294],{"class":166},[103,540,297],{"class":139},[103,542,248],{"class":170},[103,544,545],{"class":139},"org",[103,547,188],{"class":166},[103,549,550],{"class":170},"docs",[103,552,188],{"class":166},[103,554,555],{"class":170},"latest",[103,557,188],{"class":166},[103,559,560],{"class":170},"gazebo_classic_migration?utm_source",[103,562,563],{"class":166},"=",[103,565,566],{"class":170},"gazebo_ros_pkgs&utm_medium",[103,568,563],{"class":166},[103,570,571],{"class":170},"cli)\n",[103,573,575],{"class":105,"line":574},32,[103,576,309],{"emptyLinePlaceholder":308},[103,578,580,582,584,586],{"class":105,"line":579},33,[103,581,315],{"class":170},[103,583,318],{"class":166},[103,585,321],{"class":166},[103,587,324],{"class":170},[103,589,591,594,596,599,602,605,607,609,611,614,616,619,621,623,625,628,630],{"class":105,"line":590},34,[103,592,593],{"class":170},"[Msg] Connected ",[103,595,519],{"class":166},[103,597,598],{"class":170}," gazebo ",[103,600,601],{"class":166},"master",[103,603,604],{"class":170}," @ ",[103,606,289],{"class":166},[103,608,185],{"class":170},[103,610,294],{"class":166},[103,612,613],{"class":139},"127",[103,615,248],{"class":170},[103,617,618],{"class":139},"0",[103,620,248],{"class":170},[103,622,618],{"class":139},[103,624,248],{"class":170},[103,626,627],{"class":139},"1",[103,629,185],{"class":170},[103,631,632],{"class":139},"11345\n",[103,634,636,639,642,645,648,650,653,655,658,660],{"class":105,"line":635},35,[103,637,638],{"class":170},"[Msg] Publicized ",[103,640,641],{"class":166},"address",[103,643,644],{"class":170},": ",[103,646,647],{"class":139},"192",[103,649,248],{"class":170},[103,651,652],{"class":139},"168",[103,654,248],{"class":170},[103,656,657],{"class":139},"31",[103,659,248],{"class":170},[103,661,662],{"class":139},"60\n",[103,664,666,669,672],{"class":105,"line":665},36,[103,667,668],{"class":170},"[Msg] Loading world ",[103,670,671],{"class":166},"file",[103,673,674],{"class":170}," [/usr/share/gazebo-11/worlds/empty.world]\n",[103,676,678,681,683,686,688,691,693,696,699,702,705,708,711,714,717,720,723,725,728,731,734,737,739,742,745,748,751,754,757,760,762,765,768,771,774,777,779,782,785,788,791,794],{"class":105,"line":677},37,[103,679,680],{"class":170},"XDG_RUNTIME_DIR (",[103,682,188],{"class":166},[103,684,685],{"class":170},"run",[103,687,188],{"class":166},[103,689,690],{"class":170},"user",[103,692,188],{"class":166},[103,694,695],{"class":139},"1000",[103,697,698],{"class":170},") ",[103,700,701],{"class":166},"is",[103,703,704],{"class":166}," not",[103,706,707],{"class":170}," owned ",[103,709,710],{"class":166},"by",[103,712,713],{"class":170}," us (",[103,715,716],{"class":166},"uid",[103,718,719],{"class":139}," 0",[103,721,722],{"class":170},"), but ",[103,724,710],{"class":166},[103,726,727],{"class":166}," uid",[103,729,730],{"class":139}," 1000",[103,732,733],{"class":170},"! (This could ",[103,735,736],{"class":139},"e",[103,738,248],{"class":170},[103,740,741],{"class":139},"g",[103,743,744],{"class":170},". happen ",[103,746,747],{"class":166},"if",[103,749,750],{"class":170}," you ",[103,752,753],{"class":166},"try",[103,755,756],{"class":166}," to",[103,758,759],{"class":166}," connect",[103,761,756],{"class":166},[103,763,764],{"class":170}," a non",[103,766,767],{"class":166},"-root",[103,769,770],{"class":170}," PulseAudio ",[103,772,773],{"class":166},"as",[103,775,776],{"class":170}," a ",[103,778,167],{"class":166},[103,780,781],{"class":170}," user, ",[103,783,784],{"class":166},"over",[103,786,787],{"class":170}," the ",[103,789,790],{"class":166},"native",[103,792,793],{"class":170}," protocol. Don",[103,795,796],{"class":113},"'t do that.)\n",[103,798,800],{"class":105,"line":799},38,[103,801,802],{"class":113},"ALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave\n",[103,804,806,809,812],{"class":105,"line":805},39,[103,807,808],{"class":113},"AL lib: (EE) ALCplaybackAlsa_open: Could not open playback device '",[103,810,811],{"class":166},"default",[103,813,814],{"class":113},"': No such file or directory\n",[103,816,818],{"class":105,"line":817},40,[103,819,820],{"class":113},"[Err] [OpenAL.cc:84] Unable to open audio device[default]\n",[103,822,824],{"class":105,"line":823},41,[103,825,826],{"class":113}," Audio will be disabled.\n",[103,828,830],{"class":105,"line":829},42,[103,831,832],{"class":113},"[Msg] Connected to gazebo master @ http://127.0.0.1:11345\n",[103,834,836],{"class":105,"line":835},43,[103,837,838],{"class":113},"[Msg] Publicized address: 192.168.31.60\n",[103,840,842,845,848,851,854,856,859],{"class":105,"line":841},44,[103,843,844],{"class":113},"[Wrn] [GuiIface.cc:298] Couldn'",[103,846,847],{"class":170},"t ",[103,849,850],{"class":166},"locate",[103,852,853],{"class":170}," specified .ini. Creating ",[103,855,671],{"class":166},[103,857,858],{"class":166}," at",[103,860,861],{"class":113}," \"/root/.gazebo/gui.ini\"\n",[103,863,865,868,871,874,876,878,880,883,885,888,891,893,895,897,899,902],{"class":105,"line":864},45,[103,866,867],{"class":170},"[Wrn] [GuiIface.cc:120] QStandardPaths: runtime directory ",[103,869,870],{"class":113},"'/run/user/1000'",[103,872,873],{"class":166}," is",[103,875,704],{"class":166},[103,877,707],{"class":170},[103,879,710],{"class":166},[103,881,882],{"class":166}," UID",[103,884,719],{"class":139},[103,886,887],{"class":170},", but a directory permissions ",[103,889,890],{"class":139},"0700",[103,892,707],{"class":170},[103,894,710],{"class":166},[103,896,882],{"class":166},[103,898,730],{"class":139},[103,900,901],{"class":170}," GID ",[103,903,904],{"class":139},"1000\n",[103,906,908,911,914,917,920,923,925,928,931,934,936,939],{"class":105,"line":907},46,[103,909,910],{"class":170},"[Wrn] [Event.cc:61] Warning: Deleting a ",[103,912,913],{"class":166},"connection",[103,915,916],{"class":170}," right ",[103,918,919],{"class":166},"after",[103,921,922],{"class":170}," creation. Make sure ",[103,924,519],{"class":166},[103,926,927],{"class":166}," save",[103,929,930],{"class":170}," the ConnectionPtr ",[103,932,933],{"class":166},"from",[103,935,776],{"class":170},[103,937,938],{"class":166},"Connect",[103,940,941],{"class":166}," call\n",[103,943,945],{"class":105,"line":944},47,[103,946,309],{"emptyLinePlaceholder":308},[103,948,950,953,956,959,962,965,968],{"class":105,"line":949},48,[103,951,952],{"class":170},"libcurl: (",[103,954,955],{"class":139},"35",[103,957,958],{"class":170},") error:0A000126:",[103,960,961],{"class":166},"SSL",[103,963,964],{"class":170}," routines::unexpected eof ",[103,966,967],{"class":166},"while",[103,969,970],{"class":170}," reading\n",[103,972,974,977,979,981,983,986,989,992],{"class":105,"line":973},49,[103,975,976],{"class":170},"[Wrn] [ModelDatabase.cc:212] Unable ",[103,978,519],{"class":166},[103,980,759],{"class":166},[103,982,756],{"class":166},[103,984,985],{"class":170}," model ",[103,987,988],{"class":166},"database",[103,990,991],{"class":166}," using",[103,993,994],{"class":170}," [http://models.gazebosim.org//database.config]. Only locally installed models will be available.\n",[103,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020],{"class":105,"line":997},50,[103,999,910],{"class":170},[103,1001,913],{"class":166},[103,1003,916],{"class":170},[103,1005,919],{"class":166},[103,1007,922],{"class":170},[103,1009,519],{"class":166},[103,1011,927],{"class":166},[103,1013,930],{"class":170},[103,1015,933],{"class":166},[103,1017,776],{"class":170},[103,1019,938],{"class":166},[103,1021,941],{"class":166},[23,1023,1024],{},[55,1025],{"alt":57,"src":1026},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1628.webp",[86,1028,1029],{"id":1029},"插件及节点服务介绍",[23,1031,1032],{},"使用之前的命令启动Gazebo并加载gazebo_ros插件，我们使用下面的指令来看插件的节点，以及改节点为我们提供的服务有哪些？",[23,1034,1035],{},"节点列表",[94,1037,1039],{"className":96,"code":1038,"language":98,"meta":57,"style":57},"ros2 node list\n",[100,1040,1041],{"__ignoreMap":57},[103,1042,1043,1046,1049],{"class":105,"line":106},[103,1044,1045],{"class":109},"ros2",[103,1047,1048],{"class":113}," node",[103,1050,1051],{"class":113}," list\n",[23,1053,1054],{},[55,1055],{"alt":57,"src":1056},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1629.webp",[23,1058,1059],{},"然后我们看看这个节点对外提供的服务有哪些？",[94,1061,1063],{"className":96,"code":1062,"language":98,"meta":57,"style":57},"ros2 service list\n",[100,1064,1065],{"__ignoreMap":57},[103,1066,1067,1069,1072],{"class":105,"line":106},[103,1068,1045],{"class":109},[103,1070,1071],{"class":113}," service",[103,1073,1051],{"class":113},[23,1075,1076],{},[55,1077],{"alt":57,"src":1078},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1630.webp",[23,1080,1081],{},"除去和参数相关的几个服务，我们可以看到另外三个特殊服务：",[1083,1084,1085,1089,1092],"ul",{},[1086,1087,1088],"li",{},"/spawn_entity，用于加载模型到gazebo中",[1086,1090,1091],{},"/get_model_list，用于获取模型列表",[1086,1093,1094],{},"/delete_entity，用于删除gazbeo中已经加载的模型",[23,1096,1097],{},"我们想要让gazebo显示出我们配置好的机器人模型使用/spawn_entity来加载即可。",[23,1099,1100],{},"接着我们可以来请求服务来加载模型，先带你看一下服务的接口类型。",[94,1102,1104],{"className":96,"code":1103,"language":98,"meta":57,"style":57},"ros2 service type /spawn_entity\n",[100,1105,1106],{"__ignoreMap":57},[103,1107,1108,1110,1112,1115],{"class":105,"line":106},[103,1109,1045],{"class":109},[103,1111,1071],{"class":113},[103,1113,1114],{"class":113}," type",[103,1116,1117],{"class":113}," /spawn_entity\n",[23,1119,1120],{},[55,1121],{"alt":57,"src":1122},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1631.webp",[94,1124,1126],{"className":96,"code":1125,"language":98,"meta":57,"style":57},"ros2 interface show gazebo_msgs/srv/SpawnEntity\n",[100,1127,1128],{"__ignoreMap":57},[103,1129,1130,1132,1135,1138],{"class":105,"line":106},[103,1131,1045],{"class":109},[103,1133,1134],{"class":113}," interface",[103,1136,1137],{"class":113}," show",[103,1139,1140],{"class":113}," gazebo_msgs/srv/SpawnEntity\n",[23,1142,1143],{},[55,1144],{"alt":57,"src":1145},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1632.webp",[23,1147,1148],{},"可以看到服务的请求内容包括：",[1083,1150,1151,1154,1157,1160,1163],{},[1086,1152,1153],{},"string name ，需要加载的实体的名称 (可选的)。",[1086,1155,1156],{},"string xml ，实体的XML描述字符串, URDF或者SDF。",[1086,1158,1159],{},"string robot_namespace ，产生的机器人和所有的ROS接口的命名空间，多机器人仿真的时候很有用。",[1086,1161,1162],{},"geometry_msgs/Pose initial_pose ，机器人的初始化位置",[1086,1164,1165],{},"string reference_frame ，初始姿态是相对于该实体的frame定义的。如果保持\"empty\"或\"world\"或“map”，则使用 gazebo的world作为frame。如果指定了不存在的实体，则会返回错误",[86,1167,1168],{"id":1168},"调用服务加载模型",[23,1170,1171,1172],{},"我们这里教程使用鱼香ROS的fishbot模型：",[15,1173,1176],{"href":1174,"rel":1175},"https://github.com/fishros/fishbot/blob/navgation2/src/fishbot%5C_description/urdf/fishbot%5C_gazebo.urdf",[19],"https://github.com/fishros/fishbot/blob/navgation2/src/fishbot\\_description/urdf/fishbot\\_gazebo.urdf",[94,1178,1182],{"className":1179,"code":1180,"language":1181,"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\"/>\n\n  \u003Cjoint name=\"base_joint\" type=\"fixed\">\n    \u003Cparent link=\"base_footprint\"/>\n    \u003Cchild link=\"base_link\"/>\n    \u003Corigin xyz=\"0.0 0.0 0.076\" rpy=\"0 0 0\"/>\n  \u003C/joint>\n\n  \u003Clink name=\"base_link\">\n          \u003Cvisual>\n      \u003Corigin xyz=\"0 0 0.0\" rpy=\"0 0 0\"/>\n      \u003Cgeometry>\n                \u003Ccylinder length=\"0.12\" radius=\"0.10\"/>\n      \u003C/geometry>\n      \u003Cmaterial name=\"blue\">\n              \u003Ccolor rgba=\"0.1 0.1 1.0 0.5\" /> \n      \u003C/material>\n    \u003C/visual>\n    \u003Ccollision>\n      \u003Corigin xyz=\"0 0 0.0\" rpy=\"0 0 0\"/>\n      \u003Cgeometry>\n                \u003Ccylinder length=\"0.12\" radius=\"0.10\"/>\n      \u003C/geometry>\n      \u003Cmaterial name=\"blue\">\n              \u003Ccolor rgba=\"0.1 0.1 1.0 0.5\" /> \n      \u003C/material>\n    \u003C/collision>\n    \u003Cinertial>\n      \u003Cmass value=\"0.2\"/>\n      \u003Cinertia ixx=\"0.0122666\" ixy=\"0\" ixz=\"0\" iyy=\"0.0122666\" iyz=\"0\" izz=\"0.02\"/>\n    \u003C/inertial>\n  \u003C/link>\n\n  \u003Clink name=\"laser_link\">\n    \u003Cvisual>\n      \u003Corigin xyz=\"0 0 0\" rpy=\"0 0 0\"/>\n      \u003Cgeometry>\n        \u003Ccylinder length=\"0.02\" radius=\"0.02\"/>\n      \u003C/geometry>\n      \u003Cmaterial name=\"black\">\n        \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" /> \n      \u003C/material>\n    \u003C/visual>\n    \u003Ccollision>\n      \u003Corigin xyz=\"0 0 0\" rpy=\"0 0 0\"/>\n      \u003Cgeometry>\n        \u003Ccylinder length=\"0.02\" radius=\"0.02\"/>\n      \u003C/geometry>\n      \u003Cmaterial name=\"black\">\n        \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" /> \n      \u003C/material>\n    \u003C/collision>\n    \u003Cinertial>\n    \u003Cmass value=\"0.1\"/>\n      \u003Cinertia ixx=\"0.000190416666667\" ixy=\"0\" ixz=\"0\" iyy=\"0.0001904\" iyz=\"0\" izz=\"0.00036\"/>\n    \u003C/inertial>\n  \u003C/link>\n\n  \u003Cjoint name=\"laser_joint\" type=\"fixed\">\n      \u003Cparent link=\"base_link\" />\n      \u003Cchild link=\"laser_link\" />\n      \u003Corigin xyz=\"0 0 0.075\" />\n  \u003C/joint>\n\n  \u003Clink name=\"imu_link\">\n          \u003Cvisual>\n      \u003Corigin xyz=\"0 0 0.0\" rpy=\"0 0 0\"/>\n      \u003Cgeometry>\n                    \u003Cbox size=\"0.02 0.02 0.02\"/>\n      \u003C/geometry>\n    \u003C/visual>\n    \u003Ccollision>\n      \u003Corigin xyz=\"0 0 0.0\" rpy=\"0 0 0\"/>\n      \u003Cgeometry>\n                    \u003Cbox size=\"0.02 0.02 0.02\"/>\n      \u003C/geometry>\n    \u003C/collision>\n    \u003Cinertial>\n      \u003Cmass value=\"0.1\"/>\n        \u003Cinertia ixx=\"0.000190416666667\" ixy=\"0\" ixz=\"0\" iyy=\"0.0001904\" iyz=\"0\" izz=\"0.00036\"/>\n      \u003C/inertial>\n  \u003C/link>\n\n  \u003Cjoint name=\"imu_joint\" type=\"fixed\">\n      \u003Cparent link=\"base_link\" />\n      \u003Cchild link=\"imu_link\" />\n      \u003Corigin xyz=\"0 0 0.02\" />\n  \u003C/joint>\n\n  \u003Clink name=\"left_wheel_link\">\n      \u003Cvisual>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57079 0 0\"/>\n        \u003Cgeometry>\n          \u003Ccylinder length=\"0.04\" radius=\"0.032\"/>\n        \u003C/geometry>\n          \u003Cmaterial name=\"black\">\n            \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" /> \n          \u003C/material>\n      \u003C/visual>\n      \u003Ccollision>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57079 0 0\"/>\n        \u003Cgeometry>\n          \u003Ccylinder length=\"0.04\" radius=\"0.032\"/>\n        \u003C/geometry>\n          \u003Cmaterial name=\"black\">\n            \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" /> \n          \u003C/material>\n      \u003C/collision>\n      \u003Cinertial>\n        \u003Cmass value=\"0.2\"/>\n          \u003Cinertia ixx=\"0.000190416666667\" ixy=\"0\" ixz=\"0\" iyy=\"0.0001904\" iyz=\"0\" izz=\"0.00036\"/>\n        \u003C/inertial>\n  \u003C/link>\n\n  \u003Clink name=\"right_wheel_link\">\n      \u003Cvisual>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57079 0 0\"/>\n        \u003Cgeometry>\n          \u003Ccylinder length=\"0.04\" radius=\"0.032\"/>\n        \u003C/geometry>\n          \u003Cmaterial name=\"black\">\n            \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" /> \n          \u003C/material>\n      \u003C/visual>\n      \u003Ccollision>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57079 0 0\"/>\n        \u003Cgeometry>\n          \u003Ccylinder length=\"0.04\" radius=\"0.032\"/>\n        \u003C/geometry>\n          \u003Cmaterial name=\"black\">\n            \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" /> \n          \u003C/material>\n      \u003C/collision>\n      \u003Cinertial>\n      \u003Cmass value=\"0.2\"/>\n      \u003Cinertia ixx=\"0.000190416666667\" ixy=\"0\" ixz=\"0\" iyy=\"0.0001904\" iyz=\"0\" izz=\"0.00036\"/>\n    \u003C/inertial>\n  \u003C/link>\n\n  \u003Cjoint name=\"left_wheel_joint\" type=\"continuous\">\n      \u003Cparent link=\"base_link\" />\n      \u003Cchild link=\"left_wheel_link\" />\n      \u003Corigin xyz=\"-0.02 0.10 -0.06\" />\n      \u003Caxis xyz=\"0 1 0\" />\n  \u003C/joint>\n\n  \u003Cjoint name=\"right_wheel_joint\" type=\"continuous\">\n      \u003Cparent link=\"base_link\" />\n      \u003Cchild link=\"right_wheel_link\" />\n      \u003Corigin xyz=\"-0.02 -0.10 -0.06\" />\n      \u003Caxis xyz=\"0 1 0\" />\n  \u003C/joint>\n\n  \u003Clink name=\"caster_link\">\n      \u003Cvisual>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57079 0 0\"/>\n        \u003Cgeometry>\n            \u003Csphere radius=\"0.016\"/>\n        \u003C/geometry>\n          \u003Cmaterial name=\"black\">\n            \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" /> \n          \u003C/material>\n      \u003C/visual>\n      \u003Ccollision>\n        \u003Corigin xyz=\"0 0 0\" rpy=\"1.57079 0 0\"/>\n        \u003Cgeometry>\n            \u003Csphere radius=\"0.016\"/>\n        \u003C/geometry>\n          \u003Cmaterial name=\"black\">\n            \u003Ccolor rgba=\"0.0 0.0 0.0 0.5\" /> \n          \u003C/material>\n      \u003C/collision>\n      \u003Cinertial>\n      \u003Cmass value=\"0.02\"/>\n      \u003Cinertia ixx=\"0.000190416666667\" ixy=\"0\" ixz=\"0\" iyy=\"0.0001904\" iyz=\"0\" izz=\"0.00036\"/>\n    \u003C/inertial>\n  \u003C/link>\n\n  \u003Cjoint name=\"caster_joint\" type=\"fixed\">\n      \u003Cparent link=\"base_link\" />\n      \u003Cchild link=\"caster_link\" />\n      \u003Corigin xyz=\"0.06 0.0 -0.076\" />\n      \u003Caxis xyz=\"0 1 0\" />\n  \u003C/joint>\n\n  \u003Cgazebo reference=\"caster_link\">\n    \u003Cmaterial>Gazebo/Black\u003C/material>\n  \u003C/gazebo>\n\n  \u003Cgazebo reference=\"caster_link\">\n    \u003Cmu1 value=\"0.0\"/>\n    \u003Cmu2 value=\"0.0\"/>\n    \u003Ckp value=\"1000000.0\" />\n    \u003Ckd value=\"10.0\" />\n\n  \u003C/gazebo>\n\n  \u003Cgazebo>\n    \u003Cplugin name='diff_drive' filename='libgazebo_ros_diff_drive.so'>\n          \u003Cros>\n            \u003Cnamespace>/\u003C/namespace>\n            \u003Cremapping>cmd_vel:=cmd_vel\u003C/remapping>\n            \u003Cremapping>odom:=odom\u003C/remapping>\n          \u003C/ros>\n          \u003Cupdate_rate>30\u003C/update_rate>\n\n          \u003Cleft_joint>left_wheel_joint\u003C/left_joint>\n          \u003Cright_joint>right_wheel_joint\u003C/right_joint>\n\n          \u003Cwheel_separation>0.2\u003C/wheel_separation>\n          \u003Cwheel_diameter>0.065\u003C/wheel_diameter>\n\n          \u003Cmax_wheel_torque>20\u003C/max_wheel_torque>\n          \u003Cmax_wheel_acceleration>1.0\u003C/max_wheel_acceleration>\n\n          \u003Cpublish_odom>true\u003C/publish_odom>\n          \u003Cpublish_odom_tf>true\u003C/publish_odom_tf>\n          \u003Cpublish_wheel_tf>false\u003C/publish_wheel_tf>\n          \u003Codometry_frame>odom\u003C/odometry_frame>\n          \u003Crobot_base_frame>base_footprint\u003C/robot_base_frame>\n      \u003C/plugin>\n\n      \u003Cplugin name=\"fishbot_joint_state\" filename=\"libgazebo_ros_joint_state_publisher.so\">\n        \u003Cros>\n          \u003Cremapping>~/out:=joint_states\u003C/remapping>\n        \u003C/ros>\n        \u003Cupdate_rate>30\u003C/update_rate>\n        \u003Cjoint_name>right_wheel_joint\u003C/joint_name>\n        \u003Cjoint_name>left_wheel_joint\u003C/joint_name>\n      \u003C/plugin>    \n      \u003C/gazebo> \n\n      \u003Cgazebo reference=\"laser_link\">\n        \u003Cmaterial>Gazebo/Black\u003C/material>\n      \u003C/gazebo>\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>/\u003C/namespace>\n            \u003Cremapping>~/out:=imu\u003C/remapping>\n          \u003C/ros>\n          \u003Cinitial_orientation_as_reference>false\u003C/initial_orientation_as_reference>\n        \u003C/plugin>\n        \u003Calways_on>true\u003C/always_on>\n        \u003Cupdate_rate>100\u003C/update_rate>\n        \u003Cvisualize>true\u003C/visualize>\n        \u003Cimu>\n          \u003Cangular_velocity>\n            \u003Cx>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C/mean>\n                \u003Cstddev>2e-4\u003C/stddev>\n                \u003Cbias_mean>0.0000075\u003C/bias_mean>\n                \u003Cbias_stddev>0.0000008\u003C/bias_stddev>\n              \u003C/noise>\n            \u003C/x>\n            \u003Cy>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C/mean>\n                \u003Cstddev>2e-4\u003C/stddev>\n                \u003Cbias_mean>0.0000075\u003C/bias_mean>\n                \u003Cbias_stddev>0.0000008\u003C/bias_stddev>\n              \u003C/noise>\n            \u003C/y>\n            \u003Cz>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C/mean>\n                \u003Cstddev>2e-4\u003C/stddev>\n                \u003Cbias_mean>0.0000075\u003C/bias_mean>\n                \u003Cbias_stddev>0.0000008\u003C/bias_stddev>\n              \u003C/noise>\n            \u003C/z>\n          \u003C/angular_velocity>\n          \u003Clinear_acceleration>\n            \u003Cx>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C/mean>\n                \u003Cstddev>1.7e-2\u003C/stddev>\n                \u003Cbias_mean>0.1\u003C/bias_mean>\n                \u003Cbias_stddev>0.001\u003C/bias_stddev>\n              \u003C/noise>\n            \u003C/x>\n            \u003Cy>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C/mean>\n                \u003Cstddev>1.7e-2\u003C/stddev>\n                \u003Cbias_mean>0.1\u003C/bias_mean>\n                \u003Cbias_stddev>0.001\u003C/bias_stddev>\n              \u003C/noise>\n            \u003C/y>\n            \u003Cz>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C/mean>\n                \u003Cstddev>1.7e-2\u003C/stddev>\n                \u003Cbias_mean>0.1\u003C/bias_mean>\n                \u003Cbias_stddev>0.001\u003C/bias_stddev>\n              \u003C/noise>\n            \u003C/z>\n          \u003C/linear_acceleration>\n        \u003C/imu>\n      \u003C/sensor>\n    \u003C/gazebo>\n\n    \u003Cgazebo reference=\"laser_link\">\n      \u003Csensor name=\"laser_sensor\" type=\"ray\">\n      \u003Calways_on>true\u003C/always_on>\n      \u003Cvisualize>true\u003C/visualize>\n      \u003Cupdate_rate>5\u003C/update_rate>\n      \u003Cpose>0 0 0.075 0 0 0\u003C/pose>\n      \u003Cray>\n          \u003Cscan>\n            \u003Chorizontal>\n              \u003Csamples>360\u003C/samples>\n              \u003Cresolution>1.000000\u003C/resolution>\n              \u003Cmin_angle>0.000000\u003C/min_angle>\n              \u003Cmax_angle>6.280000\u003C/max_angle>\n            \u003C/horizontal>\n          \u003C/scan>\n          \u003Crange>\n            \u003Cmin>0.120000\u003C/min>\n            \u003Cmax>3.5\u003C/max>\n            \u003Cresolution>0.015000\u003C/resolution>\n          \u003C/range>\n          \u003Cnoise>\n            \u003Ctype>gaussian\u003C/type>\n            \u003Cmean>0.0\u003C/mean>\n            \u003Cstddev>0.01\u003C/stddev>\n          \u003C/noise>\n      \u003C/ray>\n\n      \u003Cplugin name=\"laserscan\" filename=\"libgazebo_ros_ray_sensor.so\">\n        \u003Cros>\n\n          \u003Cremapping>~/out:=scan\u003C/remapping>\n        \u003C/ros>\n        \u003Coutput_type>sensor_msgs/LaserScan\u003C/output_type>\n        \u003Cframe_name>laser_link\u003C/frame_name>\n      \u003C/plugin>\n      \u003C/sensor>\n    \u003C/gazebo>\n\n\u003C/robot>\n","xml",[100,1183,1184,1203,1222,1226,1244,1248,1271,1288,1304,1329,1338,1342,1356,1366,1388,1397,1423,1432,1448,1467,1475,1484,1493,1513,1521,1541,1549,1563,1577,1585,1593,1602,1619,1673,1681,1689,1693,1708,1716,1736,1744,1765,1773,1788,1803,1811,1819,1827,1847,1855,1875,1884,1899,1914,1923,1932,1941,1957,2005,2014,2023,2028,2050,2066,2081,2097,2106,2111,2127,2136,2157,2166,2185,2194,2203,2212,2233,2242,2257,2266,2275,2284,2299,2344,2353,2362,2367,2389,2404,2419,2435,2444,2449,2465,2474,2496,2505,2528,2538,2553,2569,2579,2588,2597,2618,2627,2648,2657,2672,2687,2696,2705,2714,2729,2774,2783,2792,2797,2813,2822,2843,2852,2873,2882,2897,2912,2921,2930,2939,2960,2969,2990,2999,3014,3029,3038,3047,3056,3071,3116,3125,3134,3139,3162,3177,3192,3208,3225,3234,3239,3261,3276,3291,3307,3322,3331,3336,3352,3361,3382,3391,3408,3417,3432,3447,3456,3465,3474,3495,3504,3519,3528,3543,3558,3567,3576,3585,3600,3645,3654,3663,3668,3690,3705,3720,3736,3751,3760,3765,3781,3795,3804,3809,3824,3841,3857,3874,3891,3896,3905,3910,3919,3944,3954,3969,3984,3998,4007,4022,4027,4042,4057,4062,4077,4092,4097,4112,4127,4132,4147,4161,4176,4191,4206,4215,4220,4243,4252,4266,4275,4288,4302,4315,4325,4335,4340,4355,4368,4377,4382,4397,4421,4444,4453,4466,4480,4489,4503,4512,4526,4540,4554,4564,4574,4584,4601,4616,4631,4646,4661,4671,4681,4691,4706,4719,4732,4745,4758,4767,4776,4786,4801,4814,4827,4840,4853,4862,4871,4880,4890,4899,4914,4927,4941,4955,4969,4978,4987,4996,5011,5024,5037,5050,5063,5072,5081,5090,5105,5118,5131,5144,5157,5166,5175,5184,5193,5202,5211,5216,5231,5254,5267,5280,5294,5309,5319,5329,5339,5354,5369,5384,5399,5408,5417,5427,5442,5457,5471,5480,5489,5504,5517,5531,5540,5549,5554,5577,5586,5591,5605,5614,5629,5644,5653,5662,5671,5676],{"__ignoreMap":57},[103,1185,1186,1189,1192,1195,1197,1200],{"class":105,"line":106},[103,1187,1188],{"class":170},"\u003C?",[103,1190,1181],{"class":1191},"s9eBZ",[103,1193,1194],{"class":109}," version",[103,1196,563],{"class":170},[103,1198,1199],{"class":113},"\"1.0\"",[103,1201,1202],{"class":170},"?>\n",[103,1204,1205,1208,1211,1214,1216,1219],{"class":105,"line":231},[103,1206,1207],{"class":170},"\u003C",[103,1209,1210],{"class":1191},"robot",[103,1212,1213],{"class":109}," name",[103,1215,563],{"class":170},[103,1217,1218],{"class":113},"\"fishbot\"",[103,1220,1221],{"class":170},">\n",[103,1223,1224],{"class":105,"line":259},[103,1225,309],{"emptyLinePlaceholder":308},[103,1227,1228,1231,1234,1236,1238,1241],{"class":105,"line":274},[103,1229,1230],{"class":170},"  \u003C",[103,1232,1233],{"class":1191},"link",[103,1235,1213],{"class":109},[103,1237,563],{"class":170},[103,1239,1240],{"class":113},"\"base_footprint\"",[103,1242,1243],{"class":170},"/>\n",[103,1245,1246],{"class":105,"line":286},[103,1247,309],{"emptyLinePlaceholder":308},[103,1249,1250,1252,1255,1257,1259,1262,1264,1266,1269],{"class":105,"line":305},[103,1251,1230],{"class":170},[103,1253,1254],{"class":1191},"joint",[103,1256,1213],{"class":109},[103,1258,563],{"class":170},[103,1260,1261],{"class":113},"\"base_joint\"",[103,1263,1114],{"class":109},[103,1265,563],{"class":170},[103,1267,1268],{"class":113},"\"fixed\"",[103,1270,1221],{"class":170},[103,1272,1273,1276,1279,1282,1284,1286],{"class":105,"line":312},[103,1274,1275],{"class":170},"    \u003C",[103,1277,1278],{"class":1191},"parent",[103,1280,1281],{"class":109}," link",[103,1283,563],{"class":170},[103,1285,1240],{"class":113},[103,1287,1243],{"class":170},[103,1289,1290,1292,1295,1297,1299,1302],{"class":105,"line":327},[103,1291,1275],{"class":170},[103,1293,1294],{"class":1191},"child",[103,1296,1281],{"class":109},[103,1298,563],{"class":170},[103,1300,1301],{"class":113},"\"base_link\"",[103,1303,1243],{"class":170},[103,1305,1306,1308,1311,1314,1316,1319,1322,1324,1327],{"class":105,"line":348},[103,1307,1275],{"class":170},[103,1309,1310],{"class":1191},"origin",[103,1312,1313],{"class":109}," xyz",[103,1315,563],{"class":170},[103,1317,1318],{"class":113},"\"0.0 0.0 0.076\"",[103,1320,1321],{"class":109}," rpy",[103,1323,563],{"class":170},[103,1325,1326],{"class":113},"\"0 0 0\"",[103,1328,1243],{"class":170},[103,1330,1331,1334,1336],{"class":105,"line":359},[103,1332,1333],{"class":170},"  \u003C/",[103,1335,1254],{"class":1191},[103,1337,1221],{"class":170},[103,1339,1340],{"class":105,"line":368},[103,1341,309],{"emptyLinePlaceholder":308},[103,1343,1344,1346,1348,1350,1352,1354],{"class":105,"line":383},[103,1345,1230],{"class":170},[103,1347,1233],{"class":1191},[103,1349,1213],{"class":109},[103,1351,563],{"class":170},[103,1353,1301],{"class":113},[103,1355,1221],{"class":170},[103,1357,1358,1361,1364],{"class":105,"line":388},[103,1359,1360],{"class":170},"          \u003C",[103,1362,1363],{"class":1191},"visual",[103,1365,1221],{"class":170},[103,1367,1368,1371,1373,1375,1377,1380,1382,1384,1386],{"class":105,"line":394},[103,1369,1370],{"class":170},"      \u003C",[103,1372,1310],{"class":1191},[103,1374,1313],{"class":109},[103,1376,563],{"class":170},[103,1378,1379],{"class":113},"\"0 0 0.0\"",[103,1381,1321],{"class":109},[103,1383,563],{"class":170},[103,1385,1326],{"class":113},[103,1387,1243],{"class":170},[103,1389,1390,1392,1395],{"class":105,"line":399},[103,1391,1370],{"class":170},[103,1393,1394],{"class":1191},"geometry",[103,1396,1221],{"class":170},[103,1398,1399,1402,1405,1408,1410,1413,1416,1418,1421],{"class":105,"line":405},[103,1400,1401],{"class":170},"                \u003C",[103,1403,1404],{"class":1191},"cylinder",[103,1406,1407],{"class":109}," length",[103,1409,563],{"class":170},[103,1411,1412],{"class":113},"\"0.12\"",[103,1414,1415],{"class":109}," radius",[103,1417,563],{"class":170},[103,1419,1420],{"class":113},"\"0.10\"",[103,1422,1243],{"class":170},[103,1424,1425,1428,1430],{"class":105,"line":410},[103,1426,1427],{"class":170},"      \u003C/",[103,1429,1394],{"class":1191},[103,1431,1221],{"class":170},[103,1433,1434,1436,1439,1441,1443,1446],{"class":105,"line":416},[103,1435,1370],{"class":170},[103,1437,1438],{"class":1191},"material",[103,1440,1213],{"class":109},[103,1442,563],{"class":170},[103,1444,1445],{"class":113},"\"blue\"",[103,1447,1221],{"class":170},[103,1449,1450,1453,1456,1459,1461,1464],{"class":105,"line":421},[103,1451,1452],{"class":170},"              \u003C",[103,1454,1455],{"class":1191},"color",[103,1457,1458],{"class":109}," rgba",[103,1460,563],{"class":170},[103,1462,1463],{"class":113},"\"0.1 0.1 1.0 0.5\"",[103,1465,1466],{"class":170}," /> \n",[103,1468,1469,1471,1473],{"class":105,"line":427},[103,1470,1427],{"class":170},[103,1472,1438],{"class":1191},[103,1474,1221],{"class":170},[103,1476,1477,1480,1482],{"class":105,"line":432},[103,1478,1479],{"class":170},"    \u003C/",[103,1481,1363],{"class":1191},[103,1483,1221],{"class":170},[103,1485,1486,1488,1491],{"class":105,"line":438},[103,1487,1275],{"class":170},[103,1489,1490],{"class":1191},"collision",[103,1492,1221],{"class":170},[103,1494,1495,1497,1499,1501,1503,1505,1507,1509,1511],{"class":105,"line":443},[103,1496,1370],{"class":170},[103,1498,1310],{"class":1191},[103,1500,1313],{"class":109},[103,1502,563],{"class":170},[103,1504,1379],{"class":113},[103,1506,1321],{"class":109},[103,1508,563],{"class":170},[103,1510,1326],{"class":113},[103,1512,1243],{"class":170},[103,1514,1515,1517,1519],{"class":105,"line":449},[103,1516,1370],{"class":170},[103,1518,1394],{"class":1191},[103,1520,1221],{"class":170},[103,1522,1523,1525,1527,1529,1531,1533,1535,1537,1539],{"class":105,"line":454},[103,1524,1401],{"class":170},[103,1526,1404],{"class":1191},[103,1528,1407],{"class":109},[103,1530,563],{"class":170},[103,1532,1412],{"class":113},[103,1534,1415],{"class":109},[103,1536,563],{"class":170},[103,1538,1420],{"class":113},[103,1540,1243],{"class":170},[103,1542,1543,1545,1547],{"class":105,"line":460},[103,1544,1427],{"class":170},[103,1546,1394],{"class":1191},[103,1548,1221],{"class":170},[103,1550,1551,1553,1555,1557,1559,1561],{"class":105,"line":465},[103,1552,1370],{"class":170},[103,1554,1438],{"class":1191},[103,1556,1213],{"class":109},[103,1558,563],{"class":170},[103,1560,1445],{"class":113},[103,1562,1221],{"class":170},[103,1564,1565,1567,1569,1571,1573,1575],{"class":105,"line":471},[103,1566,1452],{"class":170},[103,1568,1455],{"class":1191},[103,1570,1458],{"class":109},[103,1572,563],{"class":170},[103,1574,1463],{"class":113},[103,1576,1466],{"class":170},[103,1578,1579,1581,1583],{"class":105,"line":476},[103,1580,1427],{"class":170},[103,1582,1438],{"class":1191},[103,1584,1221],{"class":170},[103,1586,1587,1589,1591],{"class":105,"line":504},[103,1588,1479],{"class":170},[103,1590,1490],{"class":1191},[103,1592,1221],{"class":170},[103,1594,1595,1597,1600],{"class":105,"line":530},[103,1596,1275],{"class":170},[103,1598,1599],{"class":1191},"inertial",[103,1601,1221],{"class":170},[103,1603,1604,1606,1609,1612,1614,1617],{"class":105,"line":574},[103,1605,1370],{"class":170},[103,1607,1608],{"class":1191},"mass",[103,1610,1611],{"class":109}," value",[103,1613,563],{"class":170},[103,1615,1616],{"class":113},"\"0.2\"",[103,1618,1243],{"class":170},[103,1620,1621,1623,1626,1629,1631,1634,1637,1639,1642,1645,1647,1649,1652,1654,1656,1659,1661,1663,1666,1668,1671],{"class":105,"line":579},[103,1622,1370],{"class":170},[103,1624,1625],{"class":1191},"inertia",[103,1627,1628],{"class":109}," ixx",[103,1630,563],{"class":170},[103,1632,1633],{"class":113},"\"0.0122666\"",[103,1635,1636],{"class":109}," ixy",[103,1638,563],{"class":170},[103,1640,1641],{"class":113},"\"0\"",[103,1643,1644],{"class":109}," ixz",[103,1646,563],{"class":170},[103,1648,1641],{"class":113},[103,1650,1651],{"class":109}," iyy",[103,1653,563],{"class":170},[103,1655,1633],{"class":113},[103,1657,1658],{"class":109}," iyz",[103,1660,563],{"class":170},[103,1662,1641],{"class":113},[103,1664,1665],{"class":109}," izz",[103,1667,563],{"class":170},[103,1669,1670],{"class":113},"\"0.02\"",[103,1672,1243],{"class":170},[103,1674,1675,1677,1679],{"class":105,"line":590},[103,1676,1479],{"class":170},[103,1678,1599],{"class":1191},[103,1680,1221],{"class":170},[103,1682,1683,1685,1687],{"class":105,"line":635},[103,1684,1333],{"class":170},[103,1686,1233],{"class":1191},[103,1688,1221],{"class":170},[103,1690,1691],{"class":105,"line":665},[103,1692,309],{"emptyLinePlaceholder":308},[103,1694,1695,1697,1699,1701,1703,1706],{"class":105,"line":677},[103,1696,1230],{"class":170},[103,1698,1233],{"class":1191},[103,1700,1213],{"class":109},[103,1702,563],{"class":170},[103,1704,1705],{"class":113},"\"laser_link\"",[103,1707,1221],{"class":170},[103,1709,1710,1712,1714],{"class":105,"line":799},[103,1711,1275],{"class":170},[103,1713,1363],{"class":1191},[103,1715,1221],{"class":170},[103,1717,1718,1720,1722,1724,1726,1728,1730,1732,1734],{"class":105,"line":805},[103,1719,1370],{"class":170},[103,1721,1310],{"class":1191},[103,1723,1313],{"class":109},[103,1725,563],{"class":170},[103,1727,1326],{"class":113},[103,1729,1321],{"class":109},[103,1731,563],{"class":170},[103,1733,1326],{"class":113},[103,1735,1243],{"class":170},[103,1737,1738,1740,1742],{"class":105,"line":817},[103,1739,1370],{"class":170},[103,1741,1394],{"class":1191},[103,1743,1221],{"class":170},[103,1745,1746,1749,1751,1753,1755,1757,1759,1761,1763],{"class":105,"line":823},[103,1747,1748],{"class":170},"        \u003C",[103,1750,1404],{"class":1191},[103,1752,1407],{"class":109},[103,1754,563],{"class":170},[103,1756,1670],{"class":113},[103,1758,1415],{"class":109},[103,1760,563],{"class":170},[103,1762,1670],{"class":113},[103,1764,1243],{"class":170},[103,1766,1767,1769,1771],{"class":105,"line":829},[103,1768,1427],{"class":170},[103,1770,1394],{"class":1191},[103,1772,1221],{"class":170},[103,1774,1775,1777,1779,1781,1783,1786],{"class":105,"line":835},[103,1776,1370],{"class":170},[103,1778,1438],{"class":1191},[103,1780,1213],{"class":109},[103,1782,563],{"class":170},[103,1784,1785],{"class":113},"\"black\"",[103,1787,1221],{"class":170},[103,1789,1790,1792,1794,1796,1798,1801],{"class":105,"line":841},[103,1791,1748],{"class":170},[103,1793,1455],{"class":1191},[103,1795,1458],{"class":109},[103,1797,563],{"class":170},[103,1799,1800],{"class":113},"\"0.0 0.0 0.0 0.5\"",[103,1802,1466],{"class":170},[103,1804,1805,1807,1809],{"class":105,"line":864},[103,1806,1427],{"class":170},[103,1808,1438],{"class":1191},[103,1810,1221],{"class":170},[103,1812,1813,1815,1817],{"class":105,"line":907},[103,1814,1479],{"class":170},[103,1816,1363],{"class":1191},[103,1818,1221],{"class":170},[103,1820,1821,1823,1825],{"class":105,"line":944},[103,1822,1275],{"class":170},[103,1824,1490],{"class":1191},[103,1826,1221],{"class":170},[103,1828,1829,1831,1833,1835,1837,1839,1841,1843,1845],{"class":105,"line":949},[103,1830,1370],{"class":170},[103,1832,1310],{"class":1191},[103,1834,1313],{"class":109},[103,1836,563],{"class":170},[103,1838,1326],{"class":113},[103,1840,1321],{"class":109},[103,1842,563],{"class":170},[103,1844,1326],{"class":113},[103,1846,1243],{"class":170},[103,1848,1849,1851,1853],{"class":105,"line":973},[103,1850,1370],{"class":170},[103,1852,1394],{"class":1191},[103,1854,1221],{"class":170},[103,1856,1857,1859,1861,1863,1865,1867,1869,1871,1873],{"class":105,"line":997},[103,1858,1748],{"class":170},[103,1860,1404],{"class":1191},[103,1862,1407],{"class":109},[103,1864,563],{"class":170},[103,1866,1670],{"class":113},[103,1868,1415],{"class":109},[103,1870,563],{"class":170},[103,1872,1670],{"class":113},[103,1874,1243],{"class":170},[103,1876,1878,1880,1882],{"class":105,"line":1877},51,[103,1879,1427],{"class":170},[103,1881,1394],{"class":1191},[103,1883,1221],{"class":170},[103,1885,1887,1889,1891,1893,1895,1897],{"class":105,"line":1886},52,[103,1888,1370],{"class":170},[103,1890,1438],{"class":1191},[103,1892,1213],{"class":109},[103,1894,563],{"class":170},[103,1896,1785],{"class":113},[103,1898,1221],{"class":170},[103,1900,1902,1904,1906,1908,1910,1912],{"class":105,"line":1901},53,[103,1903,1748],{"class":170},[103,1905,1455],{"class":1191},[103,1907,1458],{"class":109},[103,1909,563],{"class":170},[103,1911,1800],{"class":113},[103,1913,1466],{"class":170},[103,1915,1917,1919,1921],{"class":105,"line":1916},54,[103,1918,1427],{"class":170},[103,1920,1438],{"class":1191},[103,1922,1221],{"class":170},[103,1924,1926,1928,1930],{"class":105,"line":1925},55,[103,1927,1479],{"class":170},[103,1929,1490],{"class":1191},[103,1931,1221],{"class":170},[103,1933,1935,1937,1939],{"class":105,"line":1934},56,[103,1936,1275],{"class":170},[103,1938,1599],{"class":1191},[103,1940,1221],{"class":170},[103,1942,1944,1946,1948,1950,1952,1955],{"class":105,"line":1943},57,[103,1945,1275],{"class":170},[103,1947,1608],{"class":1191},[103,1949,1611],{"class":109},[103,1951,563],{"class":170},[103,1953,1954],{"class":113},"\"0.1\"",[103,1956,1243],{"class":170},[103,1958,1960,1962,1964,1966,1968,1971,1973,1975,1977,1979,1981,1983,1985,1987,1990,1992,1994,1996,1998,2000,2003],{"class":105,"line":1959},58,[103,1961,1370],{"class":170},[103,1963,1625],{"class":1191},[103,1965,1628],{"class":109},[103,1967,563],{"class":170},[103,1969,1970],{"class":113},"\"0.000190416666667\"",[103,1972,1636],{"class":109},[103,1974,563],{"class":170},[103,1976,1641],{"class":113},[103,1978,1644],{"class":109},[103,1980,563],{"class":170},[103,1982,1641],{"class":113},[103,1984,1651],{"class":109},[103,1986,563],{"class":170},[103,1988,1989],{"class":113},"\"0.0001904\"",[103,1991,1658],{"class":109},[103,1993,563],{"class":170},[103,1995,1641],{"class":113},[103,1997,1665],{"class":109},[103,1999,563],{"class":170},[103,2001,2002],{"class":113},"\"0.00036\"",[103,2004,1243],{"class":170},[103,2006,2008,2010,2012],{"class":105,"line":2007},59,[103,2009,1479],{"class":170},[103,2011,1599],{"class":1191},[103,2013,1221],{"class":170},[103,2015,2017,2019,2021],{"class":105,"line":2016},60,[103,2018,1333],{"class":170},[103,2020,1233],{"class":1191},[103,2022,1221],{"class":170},[103,2024,2026],{"class":105,"line":2025},61,[103,2027,309],{"emptyLinePlaceholder":308},[103,2029,2031,2033,2035,2037,2039,2042,2044,2046,2048],{"class":105,"line":2030},62,[103,2032,1230],{"class":170},[103,2034,1254],{"class":1191},[103,2036,1213],{"class":109},[103,2038,563],{"class":170},[103,2040,2041],{"class":113},"\"laser_joint\"",[103,2043,1114],{"class":109},[103,2045,563],{"class":170},[103,2047,1268],{"class":113},[103,2049,1221],{"class":170},[103,2051,2053,2055,2057,2059,2061,2063],{"class":105,"line":2052},63,[103,2054,1370],{"class":170},[103,2056,1278],{"class":1191},[103,2058,1281],{"class":109},[103,2060,563],{"class":170},[103,2062,1301],{"class":113},[103,2064,2065],{"class":170}," />\n",[103,2067,2069,2071,2073,2075,2077,2079],{"class":105,"line":2068},64,[103,2070,1370],{"class":170},[103,2072,1294],{"class":1191},[103,2074,1281],{"class":109},[103,2076,563],{"class":170},[103,2078,1705],{"class":113},[103,2080,2065],{"class":170},[103,2082,2084,2086,2088,2090,2092,2095],{"class":105,"line":2083},65,[103,2085,1370],{"class":170},[103,2087,1310],{"class":1191},[103,2089,1313],{"class":109},[103,2091,563],{"class":170},[103,2093,2094],{"class":113},"\"0 0 0.075\"",[103,2096,2065],{"class":170},[103,2098,2100,2102,2104],{"class":105,"line":2099},66,[103,2101,1333],{"class":170},[103,2103,1254],{"class":1191},[103,2105,1221],{"class":170},[103,2107,2109],{"class":105,"line":2108},67,[103,2110,309],{"emptyLinePlaceholder":308},[103,2112,2114,2116,2118,2120,2122,2125],{"class":105,"line":2113},68,[103,2115,1230],{"class":170},[103,2117,1233],{"class":1191},[103,2119,1213],{"class":109},[103,2121,563],{"class":170},[103,2123,2124],{"class":113},"\"imu_link\"",[103,2126,1221],{"class":170},[103,2128,2130,2132,2134],{"class":105,"line":2129},69,[103,2131,1360],{"class":170},[103,2133,1363],{"class":1191},[103,2135,1221],{"class":170},[103,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155],{"class":105,"line":2138},70,[103,2140,1370],{"class":170},[103,2142,1310],{"class":1191},[103,2144,1313],{"class":109},[103,2146,563],{"class":170},[103,2148,1379],{"class":113},[103,2150,1321],{"class":109},[103,2152,563],{"class":170},[103,2154,1326],{"class":113},[103,2156,1243],{"class":170},[103,2158,2160,2162,2164],{"class":105,"line":2159},71,[103,2161,1370],{"class":170},[103,2163,1394],{"class":1191},[103,2165,1221],{"class":170},[103,2167,2169,2172,2175,2178,2180,2183],{"class":105,"line":2168},72,[103,2170,2171],{"class":170},"                    \u003C",[103,2173,2174],{"class":1191},"box",[103,2176,2177],{"class":109}," size",[103,2179,563],{"class":170},[103,2181,2182],{"class":113},"\"0.02 0.02 0.02\"",[103,2184,1243],{"class":170},[103,2186,2188,2190,2192],{"class":105,"line":2187},73,[103,2189,1427],{"class":170},[103,2191,1394],{"class":1191},[103,2193,1221],{"class":170},[103,2195,2197,2199,2201],{"class":105,"line":2196},74,[103,2198,1479],{"class":170},[103,2200,1363],{"class":1191},[103,2202,1221],{"class":170},[103,2204,2206,2208,2210],{"class":105,"line":2205},75,[103,2207,1275],{"class":170},[103,2209,1490],{"class":1191},[103,2211,1221],{"class":170},[103,2213,2215,2217,2219,2221,2223,2225,2227,2229,2231],{"class":105,"line":2214},76,[103,2216,1370],{"class":170},[103,2218,1310],{"class":1191},[103,2220,1313],{"class":109},[103,2222,563],{"class":170},[103,2224,1379],{"class":113},[103,2226,1321],{"class":109},[103,2228,563],{"class":170},[103,2230,1326],{"class":113},[103,2232,1243],{"class":170},[103,2234,2236,2238,2240],{"class":105,"line":2235},77,[103,2237,1370],{"class":170},[103,2239,1394],{"class":1191},[103,2241,1221],{"class":170},[103,2243,2245,2247,2249,2251,2253,2255],{"class":105,"line":2244},78,[103,2246,2171],{"class":170},[103,2248,2174],{"class":1191},[103,2250,2177],{"class":109},[103,2252,563],{"class":170},[103,2254,2182],{"class":113},[103,2256,1243],{"class":170},[103,2258,2260,2262,2264],{"class":105,"line":2259},79,[103,2261,1427],{"class":170},[103,2263,1394],{"class":1191},[103,2265,1221],{"class":170},[103,2267,2269,2271,2273],{"class":105,"line":2268},80,[103,2270,1479],{"class":170},[103,2272,1490],{"class":1191},[103,2274,1221],{"class":170},[103,2276,2278,2280,2282],{"class":105,"line":2277},81,[103,2279,1275],{"class":170},[103,2281,1599],{"class":1191},[103,2283,1221],{"class":170},[103,2285,2287,2289,2291,2293,2295,2297],{"class":105,"line":2286},82,[103,2288,1370],{"class":170},[103,2290,1608],{"class":1191},[103,2292,1611],{"class":109},[103,2294,563],{"class":170},[103,2296,1954],{"class":113},[103,2298,1243],{"class":170},[103,2300,2302,2304,2306,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342],{"class":105,"line":2301},83,[103,2303,1748],{"class":170},[103,2305,1625],{"class":1191},[103,2307,1628],{"class":109},[103,2309,563],{"class":170},[103,2311,1970],{"class":113},[103,2313,1636],{"class":109},[103,2315,563],{"class":170},[103,2317,1641],{"class":113},[103,2319,1644],{"class":109},[103,2321,563],{"class":170},[103,2323,1641],{"class":113},[103,2325,1651],{"class":109},[103,2327,563],{"class":170},[103,2329,1989],{"class":113},[103,2331,1658],{"class":109},[103,2333,563],{"class":170},[103,2335,1641],{"class":113},[103,2337,1665],{"class":109},[103,2339,563],{"class":170},[103,2341,2002],{"class":113},[103,2343,1243],{"class":170},[103,2345,2347,2349,2351],{"class":105,"line":2346},84,[103,2348,1427],{"class":170},[103,2350,1599],{"class":1191},[103,2352,1221],{"class":170},[103,2354,2356,2358,2360],{"class":105,"line":2355},85,[103,2357,1333],{"class":170},[103,2359,1233],{"class":1191},[103,2361,1221],{"class":170},[103,2363,2365],{"class":105,"line":2364},86,[103,2366,309],{"emptyLinePlaceholder":308},[103,2368,2370,2372,2374,2376,2378,2381,2383,2385,2387],{"class":105,"line":2369},87,[103,2371,1230],{"class":170},[103,2373,1254],{"class":1191},[103,2375,1213],{"class":109},[103,2377,563],{"class":170},[103,2379,2380],{"class":113},"\"imu_joint\"",[103,2382,1114],{"class":109},[103,2384,563],{"class":170},[103,2386,1268],{"class":113},[103,2388,1221],{"class":170},[103,2390,2392,2394,2396,2398,2400,2402],{"class":105,"line":2391},88,[103,2393,1370],{"class":170},[103,2395,1278],{"class":1191},[103,2397,1281],{"class":109},[103,2399,563],{"class":170},[103,2401,1301],{"class":113},[103,2403,2065],{"class":170},[103,2405,2407,2409,2411,2413,2415,2417],{"class":105,"line":2406},89,[103,2408,1370],{"class":170},[103,2410,1294],{"class":1191},[103,2412,1281],{"class":109},[103,2414,563],{"class":170},[103,2416,2124],{"class":113},[103,2418,2065],{"class":170},[103,2420,2422,2424,2426,2428,2430,2433],{"class":105,"line":2421},90,[103,2423,1370],{"class":170},[103,2425,1310],{"class":1191},[103,2427,1313],{"class":109},[103,2429,563],{"class":170},[103,2431,2432],{"class":113},"\"0 0 0.02\"",[103,2434,2065],{"class":170},[103,2436,2438,2440,2442],{"class":105,"line":2437},91,[103,2439,1333],{"class":170},[103,2441,1254],{"class":1191},[103,2443,1221],{"class":170},[103,2445,2447],{"class":105,"line":2446},92,[103,2448,309],{"emptyLinePlaceholder":308},[103,2450,2452,2454,2456,2458,2460,2463],{"class":105,"line":2451},93,[103,2453,1230],{"class":170},[103,2455,1233],{"class":1191},[103,2457,1213],{"class":109},[103,2459,563],{"class":170},[103,2461,2462],{"class":113},"\"left_wheel_link\"",[103,2464,1221],{"class":170},[103,2466,2468,2470,2472],{"class":105,"line":2467},94,[103,2469,1370],{"class":170},[103,2471,1363],{"class":1191},[103,2473,1221],{"class":170},[103,2475,2477,2479,2481,2483,2485,2487,2489,2491,2494],{"class":105,"line":2476},95,[103,2478,1748],{"class":170},[103,2480,1310],{"class":1191},[103,2482,1313],{"class":109},[103,2484,563],{"class":170},[103,2486,1326],{"class":113},[103,2488,1321],{"class":109},[103,2490,563],{"class":170},[103,2492,2493],{"class":113},"\"1.57079 0 0\"",[103,2495,1243],{"class":170},[103,2497,2499,2501,2503],{"class":105,"line":2498},96,[103,2500,1748],{"class":170},[103,2502,1394],{"class":1191},[103,2504,1221],{"class":170},[103,2506,2508,2510,2512,2514,2516,2519,2521,2523,2526],{"class":105,"line":2507},97,[103,2509,1360],{"class":170},[103,2511,1404],{"class":1191},[103,2513,1407],{"class":109},[103,2515,563],{"class":170},[103,2517,2518],{"class":113},"\"0.04\"",[103,2520,1415],{"class":109},[103,2522,563],{"class":170},[103,2524,2525],{"class":113},"\"0.032\"",[103,2527,1243],{"class":170},[103,2529,2531,2534,2536],{"class":105,"line":2530},98,[103,2532,2533],{"class":170},"        \u003C/",[103,2535,1394],{"class":1191},[103,2537,1221],{"class":170},[103,2539,2541,2543,2545,2547,2549,2551],{"class":105,"line":2540},99,[103,2542,1360],{"class":170},[103,2544,1438],{"class":1191},[103,2546,1213],{"class":109},[103,2548,563],{"class":170},[103,2550,1785],{"class":113},[103,2552,1221],{"class":170},[103,2554,2556,2559,2561,2563,2565,2567],{"class":105,"line":2555},100,[103,2557,2558],{"class":170},"            \u003C",[103,2560,1455],{"class":1191},[103,2562,1458],{"class":109},[103,2564,563],{"class":170},[103,2566,1800],{"class":113},[103,2568,1466],{"class":170},[103,2570,2572,2575,2577],{"class":105,"line":2571},101,[103,2573,2574],{"class":170},"          \u003C/",[103,2576,1438],{"class":1191},[103,2578,1221],{"class":170},[103,2580,2582,2584,2586],{"class":105,"line":2581},102,[103,2583,1427],{"class":170},[103,2585,1363],{"class":1191},[103,2587,1221],{"class":170},[103,2589,2591,2593,2595],{"class":105,"line":2590},103,[103,2592,1370],{"class":170},[103,2594,1490],{"class":1191},[103,2596,1221],{"class":170},[103,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616],{"class":105,"line":2599},104,[103,2601,1748],{"class":170},[103,2603,1310],{"class":1191},[103,2605,1313],{"class":109},[103,2607,563],{"class":170},[103,2609,1326],{"class":113},[103,2611,1321],{"class":109},[103,2613,563],{"class":170},[103,2615,2493],{"class":113},[103,2617,1243],{"class":170},[103,2619,2621,2623,2625],{"class":105,"line":2620},105,[103,2622,1748],{"class":170},[103,2624,1394],{"class":1191},[103,2626,1221],{"class":170},[103,2628,2630,2632,2634,2636,2638,2640,2642,2644,2646],{"class":105,"line":2629},106,[103,2631,1360],{"class":170},[103,2633,1404],{"class":1191},[103,2635,1407],{"class":109},[103,2637,563],{"class":170},[103,2639,2518],{"class":113},[103,2641,1415],{"class":109},[103,2643,563],{"class":170},[103,2645,2525],{"class":113},[103,2647,1243],{"class":170},[103,2649,2651,2653,2655],{"class":105,"line":2650},107,[103,2652,2533],{"class":170},[103,2654,1394],{"class":1191},[103,2656,1221],{"class":170},[103,2658,2660,2662,2664,2666,2668,2670],{"class":105,"line":2659},108,[103,2661,1360],{"class":170},[103,2663,1438],{"class":1191},[103,2665,1213],{"class":109},[103,2667,563],{"class":170},[103,2669,1785],{"class":113},[103,2671,1221],{"class":170},[103,2673,2675,2677,2679,2681,2683,2685],{"class":105,"line":2674},109,[103,2676,2558],{"class":170},[103,2678,1455],{"class":1191},[103,2680,1458],{"class":109},[103,2682,563],{"class":170},[103,2684,1800],{"class":113},[103,2686,1466],{"class":170},[103,2688,2690,2692,2694],{"class":105,"line":2689},110,[103,2691,2574],{"class":170},[103,2693,1438],{"class":1191},[103,2695,1221],{"class":170},[103,2697,2699,2701,2703],{"class":105,"line":2698},111,[103,2700,1427],{"class":170},[103,2702,1490],{"class":1191},[103,2704,1221],{"class":170},[103,2706,2708,2710,2712],{"class":105,"line":2707},112,[103,2709,1370],{"class":170},[103,2711,1599],{"class":1191},[103,2713,1221],{"class":170},[103,2715,2717,2719,2721,2723,2725,2727],{"class":105,"line":2716},113,[103,2718,1748],{"class":170},[103,2720,1608],{"class":1191},[103,2722,1611],{"class":109},[103,2724,563],{"class":170},[103,2726,1616],{"class":113},[103,2728,1243],{"class":170},[103,2730,2732,2734,2736,2738,2740,2742,2744,2746,2748,2750,2752,2754,2756,2758,2760,2762,2764,2766,2768,2770,2772],{"class":105,"line":2731},114,[103,2733,1360],{"class":170},[103,2735,1625],{"class":1191},[103,2737,1628],{"class":109},[103,2739,563],{"class":170},[103,2741,1970],{"class":113},[103,2743,1636],{"class":109},[103,2745,563],{"class":170},[103,2747,1641],{"class":113},[103,2749,1644],{"class":109},[103,2751,563],{"class":170},[103,2753,1641],{"class":113},[103,2755,1651],{"class":109},[103,2757,563],{"class":170},[103,2759,1989],{"class":113},[103,2761,1658],{"class":109},[103,2763,563],{"class":170},[103,2765,1641],{"class":113},[103,2767,1665],{"class":109},[103,2769,563],{"class":170},[103,2771,2002],{"class":113},[103,2773,1243],{"class":170},[103,2775,2777,2779,2781],{"class":105,"line":2776},115,[103,2778,2533],{"class":170},[103,2780,1599],{"class":1191},[103,2782,1221],{"class":170},[103,2784,2786,2788,2790],{"class":105,"line":2785},116,[103,2787,1333],{"class":170},[103,2789,1233],{"class":1191},[103,2791,1221],{"class":170},[103,2793,2795],{"class":105,"line":2794},117,[103,2796,309],{"emptyLinePlaceholder":308},[103,2798,2800,2802,2804,2806,2808,2811],{"class":105,"line":2799},118,[103,2801,1230],{"class":170},[103,2803,1233],{"class":1191},[103,2805,1213],{"class":109},[103,2807,563],{"class":170},[103,2809,2810],{"class":113},"\"right_wheel_link\"",[103,2812,1221],{"class":170},[103,2814,2816,2818,2820],{"class":105,"line":2815},119,[103,2817,1370],{"class":170},[103,2819,1363],{"class":1191},[103,2821,1221],{"class":170},[103,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841],{"class":105,"line":2824},120,[103,2826,1748],{"class":170},[103,2828,1310],{"class":1191},[103,2830,1313],{"class":109},[103,2832,563],{"class":170},[103,2834,1326],{"class":113},[103,2836,1321],{"class":109},[103,2838,563],{"class":170},[103,2840,2493],{"class":113},[103,2842,1243],{"class":170},[103,2844,2846,2848,2850],{"class":105,"line":2845},121,[103,2847,1748],{"class":170},[103,2849,1394],{"class":1191},[103,2851,1221],{"class":170},[103,2853,2855,2857,2859,2861,2863,2865,2867,2869,2871],{"class":105,"line":2854},122,[103,2856,1360],{"class":170},[103,2858,1404],{"class":1191},[103,2860,1407],{"class":109},[103,2862,563],{"class":170},[103,2864,2518],{"class":113},[103,2866,1415],{"class":109},[103,2868,563],{"class":170},[103,2870,2525],{"class":113},[103,2872,1243],{"class":170},[103,2874,2876,2878,2880],{"class":105,"line":2875},123,[103,2877,2533],{"class":170},[103,2879,1394],{"class":1191},[103,2881,1221],{"class":170},[103,2883,2885,2887,2889,2891,2893,2895],{"class":105,"line":2884},124,[103,2886,1360],{"class":170},[103,2888,1438],{"class":1191},[103,2890,1213],{"class":109},[103,2892,563],{"class":170},[103,2894,1785],{"class":113},[103,2896,1221],{"class":170},[103,2898,2900,2902,2904,2906,2908,2910],{"class":105,"line":2899},125,[103,2901,2558],{"class":170},[103,2903,1455],{"class":1191},[103,2905,1458],{"class":109},[103,2907,563],{"class":170},[103,2909,1800],{"class":113},[103,2911,1466],{"class":170},[103,2913,2915,2917,2919],{"class":105,"line":2914},126,[103,2916,2574],{"class":170},[103,2918,1438],{"class":1191},[103,2920,1221],{"class":170},[103,2922,2924,2926,2928],{"class":105,"line":2923},127,[103,2925,1427],{"class":170},[103,2927,1363],{"class":1191},[103,2929,1221],{"class":170},[103,2931,2933,2935,2937],{"class":105,"line":2932},128,[103,2934,1370],{"class":170},[103,2936,1490],{"class":1191},[103,2938,1221],{"class":170},[103,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958],{"class":105,"line":2941},129,[103,2943,1748],{"class":170},[103,2945,1310],{"class":1191},[103,2947,1313],{"class":109},[103,2949,563],{"class":170},[103,2951,1326],{"class":113},[103,2953,1321],{"class":109},[103,2955,563],{"class":170},[103,2957,2493],{"class":113},[103,2959,1243],{"class":170},[103,2961,2963,2965,2967],{"class":105,"line":2962},130,[103,2964,1748],{"class":170},[103,2966,1394],{"class":1191},[103,2968,1221],{"class":170},[103,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988],{"class":105,"line":2971},131,[103,2973,1360],{"class":170},[103,2975,1404],{"class":1191},[103,2977,1407],{"class":109},[103,2979,563],{"class":170},[103,2981,2518],{"class":113},[103,2983,1415],{"class":109},[103,2985,563],{"class":170},[103,2987,2525],{"class":113},[103,2989,1243],{"class":170},[103,2991,2993,2995,2997],{"class":105,"line":2992},132,[103,2994,2533],{"class":170},[103,2996,1394],{"class":1191},[103,2998,1221],{"class":170},[103,3000,3002,3004,3006,3008,3010,3012],{"class":105,"line":3001},133,[103,3003,1360],{"class":170},[103,3005,1438],{"class":1191},[103,3007,1213],{"class":109},[103,3009,563],{"class":170},[103,3011,1785],{"class":113},[103,3013,1221],{"class":170},[103,3015,3017,3019,3021,3023,3025,3027],{"class":105,"line":3016},134,[103,3018,2558],{"class":170},[103,3020,1455],{"class":1191},[103,3022,1458],{"class":109},[103,3024,563],{"class":170},[103,3026,1800],{"class":113},[103,3028,1466],{"class":170},[103,3030,3032,3034,3036],{"class":105,"line":3031},135,[103,3033,2574],{"class":170},[103,3035,1438],{"class":1191},[103,3037,1221],{"class":170},[103,3039,3041,3043,3045],{"class":105,"line":3040},136,[103,3042,1427],{"class":170},[103,3044,1490],{"class":1191},[103,3046,1221],{"class":170},[103,3048,3050,3052,3054],{"class":105,"line":3049},137,[103,3051,1370],{"class":170},[103,3053,1599],{"class":1191},[103,3055,1221],{"class":170},[103,3057,3059,3061,3063,3065,3067,3069],{"class":105,"line":3058},138,[103,3060,1370],{"class":170},[103,3062,1608],{"class":1191},[103,3064,1611],{"class":109},[103,3066,563],{"class":170},[103,3068,1616],{"class":113},[103,3070,1243],{"class":170},[103,3072,3074,3076,3078,3080,3082,3084,3086,3088,3090,3092,3094,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114],{"class":105,"line":3073},139,[103,3075,1370],{"class":170},[103,3077,1625],{"class":1191},[103,3079,1628],{"class":109},[103,3081,563],{"class":170},[103,3083,1970],{"class":113},[103,3085,1636],{"class":109},[103,3087,563],{"class":170},[103,3089,1641],{"class":113},[103,3091,1644],{"class":109},[103,3093,563],{"class":170},[103,3095,1641],{"class":113},[103,3097,1651],{"class":109},[103,3099,563],{"class":170},[103,3101,1989],{"class":113},[103,3103,1658],{"class":109},[103,3105,563],{"class":170},[103,3107,1641],{"class":113},[103,3109,1665],{"class":109},[103,3111,563],{"class":170},[103,3113,2002],{"class":113},[103,3115,1243],{"class":170},[103,3117,3119,3121,3123],{"class":105,"line":3118},140,[103,3120,1479],{"class":170},[103,3122,1599],{"class":1191},[103,3124,1221],{"class":170},[103,3126,3128,3130,3132],{"class":105,"line":3127},141,[103,3129,1333],{"class":170},[103,3131,1233],{"class":1191},[103,3133,1221],{"class":170},[103,3135,3137],{"class":105,"line":3136},142,[103,3138,309],{"emptyLinePlaceholder":308},[103,3140,3142,3144,3146,3148,3150,3153,3155,3157,3160],{"class":105,"line":3141},143,[103,3143,1230],{"class":170},[103,3145,1254],{"class":1191},[103,3147,1213],{"class":109},[103,3149,563],{"class":170},[103,3151,3152],{"class":113},"\"left_wheel_joint\"",[103,3154,1114],{"class":109},[103,3156,563],{"class":170},[103,3158,3159],{"class":113},"\"continuous\"",[103,3161,1221],{"class":170},[103,3163,3165,3167,3169,3171,3173,3175],{"class":105,"line":3164},144,[103,3166,1370],{"class":170},[103,3168,1278],{"class":1191},[103,3170,1281],{"class":109},[103,3172,563],{"class":170},[103,3174,1301],{"class":113},[103,3176,2065],{"class":170},[103,3178,3180,3182,3184,3186,3188,3190],{"class":105,"line":3179},145,[103,3181,1370],{"class":170},[103,3183,1294],{"class":1191},[103,3185,1281],{"class":109},[103,3187,563],{"class":170},[103,3189,2462],{"class":113},[103,3191,2065],{"class":170},[103,3193,3195,3197,3199,3201,3203,3206],{"class":105,"line":3194},146,[103,3196,1370],{"class":170},[103,3198,1310],{"class":1191},[103,3200,1313],{"class":109},[103,3202,563],{"class":170},[103,3204,3205],{"class":113},"\"-0.02 0.10 -0.06\"",[103,3207,2065],{"class":170},[103,3209,3211,3213,3216,3218,3220,3223],{"class":105,"line":3210},147,[103,3212,1370],{"class":170},[103,3214,3215],{"class":1191},"axis",[103,3217,1313],{"class":109},[103,3219,563],{"class":170},[103,3221,3222],{"class":113},"\"0 1 0\"",[103,3224,2065],{"class":170},[103,3226,3228,3230,3232],{"class":105,"line":3227},148,[103,3229,1333],{"class":170},[103,3231,1254],{"class":1191},[103,3233,1221],{"class":170},[103,3235,3237],{"class":105,"line":3236},149,[103,3238,309],{"emptyLinePlaceholder":308},[103,3240,3242,3244,3246,3248,3250,3253,3255,3257,3259],{"class":105,"line":3241},150,[103,3243,1230],{"class":170},[103,3245,1254],{"class":1191},[103,3247,1213],{"class":109},[103,3249,563],{"class":170},[103,3251,3252],{"class":113},"\"right_wheel_joint\"",[103,3254,1114],{"class":109},[103,3256,563],{"class":170},[103,3258,3159],{"class":113},[103,3260,1221],{"class":170},[103,3262,3264,3266,3268,3270,3272,3274],{"class":105,"line":3263},151,[103,3265,1370],{"class":170},[103,3267,1278],{"class":1191},[103,3269,1281],{"class":109},[103,3271,563],{"class":170},[103,3273,1301],{"class":113},[103,3275,2065],{"class":170},[103,3277,3279,3281,3283,3285,3287,3289],{"class":105,"line":3278},152,[103,3280,1370],{"class":170},[103,3282,1294],{"class":1191},[103,3284,1281],{"class":109},[103,3286,563],{"class":170},[103,3288,2810],{"class":113},[103,3290,2065],{"class":170},[103,3292,3294,3296,3298,3300,3302,3305],{"class":105,"line":3293},153,[103,3295,1370],{"class":170},[103,3297,1310],{"class":1191},[103,3299,1313],{"class":109},[103,3301,563],{"class":170},[103,3303,3304],{"class":113},"\"-0.02 -0.10 -0.06\"",[103,3306,2065],{"class":170},[103,3308,3310,3312,3314,3316,3318,3320],{"class":105,"line":3309},154,[103,3311,1370],{"class":170},[103,3313,3215],{"class":1191},[103,3315,1313],{"class":109},[103,3317,563],{"class":170},[103,3319,3222],{"class":113},[103,3321,2065],{"class":170},[103,3323,3325,3327,3329],{"class":105,"line":3324},155,[103,3326,1333],{"class":170},[103,3328,1254],{"class":1191},[103,3330,1221],{"class":170},[103,3332,3334],{"class":105,"line":3333},156,[103,3335,309],{"emptyLinePlaceholder":308},[103,3337,3339,3341,3343,3345,3347,3350],{"class":105,"line":3338},157,[103,3340,1230],{"class":170},[103,3342,1233],{"class":1191},[103,3344,1213],{"class":109},[103,3346,563],{"class":170},[103,3348,3349],{"class":113},"\"caster_link\"",[103,3351,1221],{"class":170},[103,3353,3355,3357,3359],{"class":105,"line":3354},158,[103,3356,1370],{"class":170},[103,3358,1363],{"class":1191},[103,3360,1221],{"class":170},[103,3362,3364,3366,3368,3370,3372,3374,3376,3378,3380],{"class":105,"line":3363},159,[103,3365,1748],{"class":170},[103,3367,1310],{"class":1191},[103,3369,1313],{"class":109},[103,3371,563],{"class":170},[103,3373,1326],{"class":113},[103,3375,1321],{"class":109},[103,3377,563],{"class":170},[103,3379,2493],{"class":113},[103,3381,1243],{"class":170},[103,3383,3385,3387,3389],{"class":105,"line":3384},160,[103,3386,1748],{"class":170},[103,3388,1394],{"class":1191},[103,3390,1221],{"class":170},[103,3392,3394,3396,3399,3401,3403,3406],{"class":105,"line":3393},161,[103,3395,2558],{"class":170},[103,3397,3398],{"class":1191},"sphere",[103,3400,1415],{"class":109},[103,3402,563],{"class":170},[103,3404,3405],{"class":113},"\"0.016\"",[103,3407,1243],{"class":170},[103,3409,3411,3413,3415],{"class":105,"line":3410},162,[103,3412,2533],{"class":170},[103,3414,1394],{"class":1191},[103,3416,1221],{"class":170},[103,3418,3420,3422,3424,3426,3428,3430],{"class":105,"line":3419},163,[103,3421,1360],{"class":170},[103,3423,1438],{"class":1191},[103,3425,1213],{"class":109},[103,3427,563],{"class":170},[103,3429,1785],{"class":113},[103,3431,1221],{"class":170},[103,3433,3435,3437,3439,3441,3443,3445],{"class":105,"line":3434},164,[103,3436,2558],{"class":170},[103,3438,1455],{"class":1191},[103,3440,1458],{"class":109},[103,3442,563],{"class":170},[103,3444,1800],{"class":113},[103,3446,1466],{"class":170},[103,3448,3450,3452,3454],{"class":105,"line":3449},165,[103,3451,2574],{"class":170},[103,3453,1438],{"class":1191},[103,3455,1221],{"class":170},[103,3457,3459,3461,3463],{"class":105,"line":3458},166,[103,3460,1427],{"class":170},[103,3462,1363],{"class":1191},[103,3464,1221],{"class":170},[103,3466,3468,3470,3472],{"class":105,"line":3467},167,[103,3469,1370],{"class":170},[103,3471,1490],{"class":1191},[103,3473,1221],{"class":170},[103,3475,3477,3479,3481,3483,3485,3487,3489,3491,3493],{"class":105,"line":3476},168,[103,3478,1748],{"class":170},[103,3480,1310],{"class":1191},[103,3482,1313],{"class":109},[103,3484,563],{"class":170},[103,3486,1326],{"class":113},[103,3488,1321],{"class":109},[103,3490,563],{"class":170},[103,3492,2493],{"class":113},[103,3494,1243],{"class":170},[103,3496,3498,3500,3502],{"class":105,"line":3497},169,[103,3499,1748],{"class":170},[103,3501,1394],{"class":1191},[103,3503,1221],{"class":170},[103,3505,3507,3509,3511,3513,3515,3517],{"class":105,"line":3506},170,[103,3508,2558],{"class":170},[103,3510,3398],{"class":1191},[103,3512,1415],{"class":109},[103,3514,563],{"class":170},[103,3516,3405],{"class":113},[103,3518,1243],{"class":170},[103,3520,3522,3524,3526],{"class":105,"line":3521},171,[103,3523,2533],{"class":170},[103,3525,1394],{"class":1191},[103,3527,1221],{"class":170},[103,3529,3531,3533,3535,3537,3539,3541],{"class":105,"line":3530},172,[103,3532,1360],{"class":170},[103,3534,1438],{"class":1191},[103,3536,1213],{"class":109},[103,3538,563],{"class":170},[103,3540,1785],{"class":113},[103,3542,1221],{"class":170},[103,3544,3546,3548,3550,3552,3554,3556],{"class":105,"line":3545},173,[103,3547,2558],{"class":170},[103,3549,1455],{"class":1191},[103,3551,1458],{"class":109},[103,3553,563],{"class":170},[103,3555,1800],{"class":113},[103,3557,1466],{"class":170},[103,3559,3561,3563,3565],{"class":105,"line":3560},174,[103,3562,2574],{"class":170},[103,3564,1438],{"class":1191},[103,3566,1221],{"class":170},[103,3568,3570,3572,3574],{"class":105,"line":3569},175,[103,3571,1427],{"class":170},[103,3573,1490],{"class":1191},[103,3575,1221],{"class":170},[103,3577,3579,3581,3583],{"class":105,"line":3578},176,[103,3580,1370],{"class":170},[103,3582,1599],{"class":1191},[103,3584,1221],{"class":170},[103,3586,3588,3590,3592,3594,3596,3598],{"class":105,"line":3587},177,[103,3589,1370],{"class":170},[103,3591,1608],{"class":1191},[103,3593,1611],{"class":109},[103,3595,563],{"class":170},[103,3597,1670],{"class":113},[103,3599,1243],{"class":170},[103,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629,3631,3633,3635,3637,3639,3641,3643],{"class":105,"line":3602},178,[103,3604,1370],{"class":170},[103,3606,1625],{"class":1191},[103,3608,1628],{"class":109},[103,3610,563],{"class":170},[103,3612,1970],{"class":113},[103,3614,1636],{"class":109},[103,3616,563],{"class":170},[103,3618,1641],{"class":113},[103,3620,1644],{"class":109},[103,3622,563],{"class":170},[103,3624,1641],{"class":113},[103,3626,1651],{"class":109},[103,3628,563],{"class":170},[103,3630,1989],{"class":113},[103,3632,1658],{"class":109},[103,3634,563],{"class":170},[103,3636,1641],{"class":113},[103,3638,1665],{"class":109},[103,3640,563],{"class":170},[103,3642,2002],{"class":113},[103,3644,1243],{"class":170},[103,3646,3648,3650,3652],{"class":105,"line":3647},179,[103,3649,1479],{"class":170},[103,3651,1599],{"class":1191},[103,3653,1221],{"class":170},[103,3655,3657,3659,3661],{"class":105,"line":3656},180,[103,3658,1333],{"class":170},[103,3660,1233],{"class":1191},[103,3662,1221],{"class":170},[103,3664,3666],{"class":105,"line":3665},181,[103,3667,309],{"emptyLinePlaceholder":308},[103,3669,3671,3673,3675,3677,3679,3682,3684,3686,3688],{"class":105,"line":3670},182,[103,3672,1230],{"class":170},[103,3674,1254],{"class":1191},[103,3676,1213],{"class":109},[103,3678,563],{"class":170},[103,3680,3681],{"class":113},"\"caster_joint\"",[103,3683,1114],{"class":109},[103,3685,563],{"class":170},[103,3687,1268],{"class":113},[103,3689,1221],{"class":170},[103,3691,3693,3695,3697,3699,3701,3703],{"class":105,"line":3692},183,[103,3694,1370],{"class":170},[103,3696,1278],{"class":1191},[103,3698,1281],{"class":109},[103,3700,563],{"class":170},[103,3702,1301],{"class":113},[103,3704,2065],{"class":170},[103,3706,3708,3710,3712,3714,3716,3718],{"class":105,"line":3707},184,[103,3709,1370],{"class":170},[103,3711,1294],{"class":1191},[103,3713,1281],{"class":109},[103,3715,563],{"class":170},[103,3717,3349],{"class":113},[103,3719,2065],{"class":170},[103,3721,3723,3725,3727,3729,3731,3734],{"class":105,"line":3722},185,[103,3724,1370],{"class":170},[103,3726,1310],{"class":1191},[103,3728,1313],{"class":109},[103,3730,563],{"class":170},[103,3732,3733],{"class":113},"\"0.06 0.0 -0.076\"",[103,3735,2065],{"class":170},[103,3737,3739,3741,3743,3745,3747,3749],{"class":105,"line":3738},186,[103,3740,1370],{"class":170},[103,3742,3215],{"class":1191},[103,3744,1313],{"class":109},[103,3746,563],{"class":170},[103,3748,3222],{"class":113},[103,3750,2065],{"class":170},[103,3752,3754,3756,3758],{"class":105,"line":3753},187,[103,3755,1333],{"class":170},[103,3757,1254],{"class":1191},[103,3759,1221],{"class":170},[103,3761,3763],{"class":105,"line":3762},188,[103,3764,309],{"emptyLinePlaceholder":308},[103,3766,3768,3770,3772,3775,3777,3779],{"class":105,"line":3767},189,[103,3769,1230],{"class":170},[103,3771,136],{"class":1191},[103,3773,3774],{"class":109}," reference",[103,3776,563],{"class":170},[103,3778,3349],{"class":113},[103,3780,1221],{"class":170},[103,3782,3784,3786,3788,3791,3793],{"class":105,"line":3783},190,[103,3785,1275],{"class":170},[103,3787,1438],{"class":1191},[103,3789,3790],{"class":170},">Gazebo/Black\u003C/",[103,3792,1438],{"class":1191},[103,3794,1221],{"class":170},[103,3796,3798,3800,3802],{"class":105,"line":3797},191,[103,3799,1333],{"class":170},[103,3801,136],{"class":1191},[103,3803,1221],{"class":170},[103,3805,3807],{"class":105,"line":3806},192,[103,3808,309],{"emptyLinePlaceholder":308},[103,3810,3812,3814,3816,3818,3820,3822],{"class":105,"line":3811},193,[103,3813,1230],{"class":170},[103,3815,136],{"class":1191},[103,3817,3774],{"class":109},[103,3819,563],{"class":170},[103,3821,3349],{"class":113},[103,3823,1221],{"class":170},[103,3825,3827,3829,3832,3834,3836,3839],{"class":105,"line":3826},194,[103,3828,1275],{"class":170},[103,3830,3831],{"class":1191},"mu1",[103,3833,1611],{"class":109},[103,3835,563],{"class":170},[103,3837,3838],{"class":113},"\"0.0\"",[103,3840,1243],{"class":170},[103,3842,3844,3846,3849,3851,3853,3855],{"class":105,"line":3843},195,[103,3845,1275],{"class":170},[103,3847,3848],{"class":1191},"mu2",[103,3850,1611],{"class":109},[103,3852,563],{"class":170},[103,3854,3838],{"class":113},[103,3856,1243],{"class":170},[103,3858,3860,3862,3865,3867,3869,3872],{"class":105,"line":3859},196,[103,3861,1275],{"class":170},[103,3863,3864],{"class":1191},"kp",[103,3866,1611],{"class":109},[103,3868,563],{"class":170},[103,3870,3871],{"class":113},"\"1000000.0\"",[103,3873,2065],{"class":170},[103,3875,3877,3879,3882,3884,3886,3889],{"class":105,"line":3876},197,[103,3878,1275],{"class":170},[103,3880,3881],{"class":1191},"kd",[103,3883,1611],{"class":109},[103,3885,563],{"class":170},[103,3887,3888],{"class":113},"\"10.0\"",[103,3890,2065],{"class":170},[103,3892,3894],{"class":105,"line":3893},198,[103,3895,309],{"emptyLinePlaceholder":308},[103,3897,3899,3901,3903],{"class":105,"line":3898},199,[103,3900,1333],{"class":170},[103,3902,136],{"class":1191},[103,3904,1221],{"class":170},[103,3906,3908],{"class":105,"line":3907},200,[103,3909,309],{"emptyLinePlaceholder":308},[103,3911,3913,3915,3917],{"class":105,"line":3912},201,[103,3914,1230],{"class":170},[103,3916,136],{"class":1191},[103,3918,1221],{"class":170},[103,3920,3922,3924,3927,3929,3931,3934,3937,3939,3942],{"class":105,"line":3921},202,[103,3923,1275],{"class":170},[103,3925,3926],{"class":1191},"plugin",[103,3928,1213],{"class":109},[103,3930,563],{"class":170},[103,3932,3933],{"class":113},"'diff_drive'",[103,3935,3936],{"class":109}," filename",[103,3938,563],{"class":170},[103,3940,3941],{"class":113},"'libgazebo_ros_diff_drive.so'",[103,3943,1221],{"class":170},[103,3945,3947,3949,3952],{"class":105,"line":3946},203,[103,3948,1360],{"class":170},[103,3950,3951],{"class":1191},"ros",[103,3953,1221],{"class":170},[103,3955,3957,3959,3962,3965,3967],{"class":105,"line":3956},204,[103,3958,2558],{"class":170},[103,3960,3961],{"class":1191},"namespace",[103,3963,3964],{"class":170},">/\u003C/",[103,3966,3961],{"class":1191},[103,3968,1221],{"class":170},[103,3970,3972,3974,3977,3980,3982],{"class":105,"line":3971},205,[103,3973,2558],{"class":170},[103,3975,3976],{"class":1191},"remapping",[103,3978,3979],{"class":170},">cmd_vel:=cmd_vel\u003C/",[103,3981,3976],{"class":1191},[103,3983,1221],{"class":170},[103,3985,3987,3989,3991,3994,3996],{"class":105,"line":3986},206,[103,3988,2558],{"class":170},[103,3990,3976],{"class":1191},[103,3992,3993],{"class":170},">odom:=odom\u003C/",[103,3995,3976],{"class":1191},[103,3997,1221],{"class":170},[103,3999,4001,4003,4005],{"class":105,"line":4000},207,[103,4002,2574],{"class":170},[103,4004,3951],{"class":1191},[103,4006,1221],{"class":170},[103,4008,4010,4012,4015,4018,4020],{"class":105,"line":4009},208,[103,4011,1360],{"class":170},[103,4013,4014],{"class":1191},"update_rate",[103,4016,4017],{"class":170},">30\u003C/",[103,4019,4014],{"class":1191},[103,4021,1221],{"class":170},[103,4023,4025],{"class":105,"line":4024},209,[103,4026,309],{"emptyLinePlaceholder":308},[103,4028,4030,4032,4035,4038,4040],{"class":105,"line":4029},210,[103,4031,1360],{"class":170},[103,4033,4034],{"class":1191},"left_joint",[103,4036,4037],{"class":170},">left_wheel_joint\u003C/",[103,4039,4034],{"class":1191},[103,4041,1221],{"class":170},[103,4043,4045,4047,4050,4053,4055],{"class":105,"line":4044},211,[103,4046,1360],{"class":170},[103,4048,4049],{"class":1191},"right_joint",[103,4051,4052],{"class":170},">right_wheel_joint\u003C/",[103,4054,4049],{"class":1191},[103,4056,1221],{"class":170},[103,4058,4060],{"class":105,"line":4059},212,[103,4061,309],{"emptyLinePlaceholder":308},[103,4063,4065,4067,4070,4073,4075],{"class":105,"line":4064},213,[103,4066,1360],{"class":170},[103,4068,4069],{"class":1191},"wheel_separation",[103,4071,4072],{"class":170},">0.2\u003C/",[103,4074,4069],{"class":1191},[103,4076,1221],{"class":170},[103,4078,4080,4082,4085,4088,4090],{"class":105,"line":4079},214,[103,4081,1360],{"class":170},[103,4083,4084],{"class":1191},"wheel_diameter",[103,4086,4087],{"class":170},">0.065\u003C/",[103,4089,4084],{"class":1191},[103,4091,1221],{"class":170},[103,4093,4095],{"class":105,"line":4094},215,[103,4096,309],{"emptyLinePlaceholder":308},[103,4098,4100,4102,4105,4108,4110],{"class":105,"line":4099},216,[103,4101,1360],{"class":170},[103,4103,4104],{"class":1191},"max_wheel_torque",[103,4106,4107],{"class":170},">20\u003C/",[103,4109,4104],{"class":1191},[103,4111,1221],{"class":170},[103,4113,4115,4117,4120,4123,4125],{"class":105,"line":4114},217,[103,4116,1360],{"class":170},[103,4118,4119],{"class":1191},"max_wheel_acceleration",[103,4121,4122],{"class":170},">1.0\u003C/",[103,4124,4119],{"class":1191},[103,4126,1221],{"class":170},[103,4128,4130],{"class":105,"line":4129},218,[103,4131,309],{"emptyLinePlaceholder":308},[103,4133,4135,4137,4140,4143,4145],{"class":105,"line":4134},219,[103,4136,1360],{"class":170},[103,4138,4139],{"class":1191},"publish_odom",[103,4141,4142],{"class":170},">true\u003C/",[103,4144,4139],{"class":1191},[103,4146,1221],{"class":170},[103,4148,4150,4152,4155,4157,4159],{"class":105,"line":4149},220,[103,4151,1360],{"class":170},[103,4153,4154],{"class":1191},"publish_odom_tf",[103,4156,4142],{"class":170},[103,4158,4154],{"class":1191},[103,4160,1221],{"class":170},[103,4162,4164,4166,4169,4172,4174],{"class":105,"line":4163},221,[103,4165,1360],{"class":170},[103,4167,4168],{"class":1191},"publish_wheel_tf",[103,4170,4171],{"class":170},">false\u003C/",[103,4173,4168],{"class":1191},[103,4175,1221],{"class":170},[103,4177,4179,4181,4184,4187,4189],{"class":105,"line":4178},222,[103,4180,1360],{"class":170},[103,4182,4183],{"class":1191},"odometry_frame",[103,4185,4186],{"class":170},">odom\u003C/",[103,4188,4183],{"class":1191},[103,4190,1221],{"class":170},[103,4192,4194,4196,4199,4202,4204],{"class":105,"line":4193},223,[103,4195,1360],{"class":170},[103,4197,4198],{"class":1191},"robot_base_frame",[103,4200,4201],{"class":170},">base_footprint\u003C/",[103,4203,4198],{"class":1191},[103,4205,1221],{"class":170},[103,4207,4209,4211,4213],{"class":105,"line":4208},224,[103,4210,1427],{"class":170},[103,4212,3926],{"class":1191},[103,4214,1221],{"class":170},[103,4216,4218],{"class":105,"line":4217},225,[103,4219,309],{"emptyLinePlaceholder":308},[103,4221,4223,4225,4227,4229,4231,4234,4236,4238,4241],{"class":105,"line":4222},226,[103,4224,1370],{"class":170},[103,4226,3926],{"class":1191},[103,4228,1213],{"class":109},[103,4230,563],{"class":170},[103,4232,4233],{"class":113},"\"fishbot_joint_state\"",[103,4235,3936],{"class":109},[103,4237,563],{"class":170},[103,4239,4240],{"class":113},"\"libgazebo_ros_joint_state_publisher.so\"",[103,4242,1221],{"class":170},[103,4244,4246,4248,4250],{"class":105,"line":4245},227,[103,4247,1748],{"class":170},[103,4249,3951],{"class":1191},[103,4251,1221],{"class":170},[103,4253,4255,4257,4259,4262,4264],{"class":105,"line":4254},228,[103,4256,1360],{"class":170},[103,4258,3976],{"class":1191},[103,4260,4261],{"class":170},">~/out:=joint_states\u003C/",[103,4263,3976],{"class":1191},[103,4265,1221],{"class":170},[103,4267,4269,4271,4273],{"class":105,"line":4268},229,[103,4270,2533],{"class":170},[103,4272,3951],{"class":1191},[103,4274,1221],{"class":170},[103,4276,4278,4280,4282,4284,4286],{"class":105,"line":4277},230,[103,4279,1748],{"class":170},[103,4281,4014],{"class":1191},[103,4283,4017],{"class":170},[103,4285,4014],{"class":1191},[103,4287,1221],{"class":170},[103,4289,4291,4293,4296,4298,4300],{"class":105,"line":4290},231,[103,4292,1748],{"class":170},[103,4294,4295],{"class":1191},"joint_name",[103,4297,4052],{"class":170},[103,4299,4295],{"class":1191},[103,4301,1221],{"class":170},[103,4303,4305,4307,4309,4311,4313],{"class":105,"line":4304},232,[103,4306,1748],{"class":170},[103,4308,4295],{"class":1191},[103,4310,4037],{"class":170},[103,4312,4295],{"class":1191},[103,4314,1221],{"class":170},[103,4316,4318,4320,4322],{"class":105,"line":4317},233,[103,4319,1427],{"class":170},[103,4321,3926],{"class":1191},[103,4323,4324],{"class":170},">    \n",[103,4326,4328,4330,4332],{"class":105,"line":4327},234,[103,4329,1427],{"class":170},[103,4331,136],{"class":1191},[103,4333,4334],{"class":170},"> \n",[103,4336,4338],{"class":105,"line":4337},235,[103,4339,309],{"emptyLinePlaceholder":308},[103,4341,4343,4345,4347,4349,4351,4353],{"class":105,"line":4342},236,[103,4344,1370],{"class":170},[103,4346,136],{"class":1191},[103,4348,3774],{"class":109},[103,4350,563],{"class":170},[103,4352,1705],{"class":113},[103,4354,1221],{"class":170},[103,4356,4358,4360,4362,4364,4366],{"class":105,"line":4357},237,[103,4359,1748],{"class":170},[103,4361,1438],{"class":1191},[103,4363,3790],{"class":170},[103,4365,1438],{"class":1191},[103,4367,1221],{"class":170},[103,4369,4371,4373,4375],{"class":105,"line":4370},238,[103,4372,1427],{"class":170},[103,4374,136],{"class":1191},[103,4376,1221],{"class":170},[103,4378,4380],{"class":105,"line":4379},239,[103,4381,309],{"emptyLinePlaceholder":308},[103,4383,4385,4387,4389,4391,4393,4395],{"class":105,"line":4384},240,[103,4386,1275],{"class":170},[103,4388,136],{"class":1191},[103,4390,3774],{"class":109},[103,4392,563],{"class":170},[103,4394,2124],{"class":113},[103,4396,1221],{"class":170},[103,4398,4400,4402,4405,4407,4409,4412,4414,4416,4419],{"class":105,"line":4399},241,[103,4401,1370],{"class":170},[103,4403,4404],{"class":1191},"sensor",[103,4406,1213],{"class":109},[103,4408,563],{"class":170},[103,4410,4411],{"class":113},"\"imu_sensor\"",[103,4413,1114],{"class":109},[103,4415,563],{"class":170},[103,4417,4418],{"class":113},"\"imu\"",[103,4420,1221],{"class":170},[103,4422,4424,4426,4428,4430,4432,4435,4437,4439,4442],{"class":105,"line":4423},242,[103,4425,1370],{"class":170},[103,4427,3926],{"class":1191},[103,4429,3936],{"class":109},[103,4431,563],{"class":170},[103,4433,4434],{"class":113},"\"libgazebo_ros_imu_sensor.so\"",[103,4436,1213],{"class":109},[103,4438,563],{"class":170},[103,4440,4441],{"class":113},"\"imu_plugin\"",[103,4443,1221],{"class":170},[103,4445,4447,4449,4451],{"class":105,"line":4446},243,[103,4448,1360],{"class":170},[103,4450,3951],{"class":1191},[103,4452,1221],{"class":170},[103,4454,4456,4458,4460,4462,4464],{"class":105,"line":4455},244,[103,4457,2558],{"class":170},[103,4459,3961],{"class":1191},[103,4461,3964],{"class":170},[103,4463,3961],{"class":1191},[103,4465,1221],{"class":170},[103,4467,4469,4471,4473,4476,4478],{"class":105,"line":4468},245,[103,4470,2558],{"class":170},[103,4472,3976],{"class":1191},[103,4474,4475],{"class":170},">~/out:=imu\u003C/",[103,4477,3976],{"class":1191},[103,4479,1221],{"class":170},[103,4481,4483,4485,4487],{"class":105,"line":4482},246,[103,4484,2574],{"class":170},[103,4486,3951],{"class":1191},[103,4488,1221],{"class":170},[103,4490,4492,4494,4497,4499,4501],{"class":105,"line":4491},247,[103,4493,1360],{"class":170},[103,4495,4496],{"class":1191},"initial_orientation_as_reference",[103,4498,4171],{"class":170},[103,4500,4496],{"class":1191},[103,4502,1221],{"class":170},[103,4504,4506,4508,4510],{"class":105,"line":4505},248,[103,4507,2533],{"class":170},[103,4509,3926],{"class":1191},[103,4511,1221],{"class":170},[103,4513,4515,4517,4520,4522,4524],{"class":105,"line":4514},249,[103,4516,1748],{"class":170},[103,4518,4519],{"class":1191},"always_on",[103,4521,4142],{"class":170},[103,4523,4519],{"class":1191},[103,4525,1221],{"class":170},[103,4527,4529,4531,4533,4536,4538],{"class":105,"line":4528},250,[103,4530,1748],{"class":170},[103,4532,4014],{"class":1191},[103,4534,4535],{"class":170},">100\u003C/",[103,4537,4014],{"class":1191},[103,4539,1221],{"class":170},[103,4541,4543,4545,4548,4550,4552],{"class":105,"line":4542},251,[103,4544,1748],{"class":170},[103,4546,4547],{"class":1191},"visualize",[103,4549,4142],{"class":170},[103,4551,4547],{"class":1191},[103,4553,1221],{"class":170},[103,4555,4557,4559,4562],{"class":105,"line":4556},252,[103,4558,1748],{"class":170},[103,4560,4561],{"class":1191},"imu",[103,4563,1221],{"class":170},[103,4565,4567,4569,4572],{"class":105,"line":4566},253,[103,4568,1360],{"class":170},[103,4570,4571],{"class":1191},"angular_velocity",[103,4573,1221],{"class":170},[103,4575,4577,4579,4582],{"class":105,"line":4576},254,[103,4578,2558],{"class":170},[103,4580,4581],{"class":1191},"x",[103,4583,1221],{"class":170},[103,4585,4587,4589,4592,4594,4596,4599],{"class":105,"line":4586},255,[103,4588,1452],{"class":170},[103,4590,4591],{"class":1191},"noise",[103,4593,1114],{"class":109},[103,4595,563],{"class":170},[103,4597,4598],{"class":113},"\"gaussian\"",[103,4600,1221],{"class":170},[103,4602,4604,4606,4609,4612,4614],{"class":105,"line":4603},256,[103,4605,1401],{"class":170},[103,4607,4608],{"class":1191},"mean",[103,4610,4611],{"class":170},">0.0\u003C/",[103,4613,4608],{"class":1191},[103,4615,1221],{"class":170},[103,4617,4619,4621,4624,4627,4629],{"class":105,"line":4618},257,[103,4620,1401],{"class":170},[103,4622,4623],{"class":1191},"stddev",[103,4625,4626],{"class":170},">2e-4\u003C/",[103,4628,4623],{"class":1191},[103,4630,1221],{"class":170},[103,4632,4634,4636,4639,4642,4644],{"class":105,"line":4633},258,[103,4635,1401],{"class":170},[103,4637,4638],{"class":1191},"bias_mean",[103,4640,4641],{"class":170},">0.0000075\u003C/",[103,4643,4638],{"class":1191},[103,4645,1221],{"class":170},[103,4647,4649,4651,4654,4657,4659],{"class":105,"line":4648},259,[103,4650,1401],{"class":170},[103,4652,4653],{"class":1191},"bias_stddev",[103,4655,4656],{"class":170},">0.0000008\u003C/",[103,4658,4653],{"class":1191},[103,4660,1221],{"class":170},[103,4662,4664,4667,4669],{"class":105,"line":4663},260,[103,4665,4666],{"class":170},"              \u003C/",[103,4668,4591],{"class":1191},[103,4670,1221],{"class":170},[103,4672,4674,4677,4679],{"class":105,"line":4673},261,[103,4675,4676],{"class":170},"            \u003C/",[103,4678,4581],{"class":1191},[103,4680,1221],{"class":170},[103,4682,4684,4686,4689],{"class":105,"line":4683},262,[103,4685,2558],{"class":170},[103,4687,4688],{"class":1191},"y",[103,4690,1221],{"class":170},[103,4692,4694,4696,4698,4700,4702,4704],{"class":105,"line":4693},263,[103,4695,1452],{"class":170},[103,4697,4591],{"class":1191},[103,4699,1114],{"class":109},[103,4701,563],{"class":170},[103,4703,4598],{"class":113},[103,4705,1221],{"class":170},[103,4707,4709,4711,4713,4715,4717],{"class":105,"line":4708},264,[103,4710,1401],{"class":170},[103,4712,4608],{"class":1191},[103,4714,4611],{"class":170},[103,4716,4608],{"class":1191},[103,4718,1221],{"class":170},[103,4720,4722,4724,4726,4728,4730],{"class":105,"line":4721},265,[103,4723,1401],{"class":170},[103,4725,4623],{"class":1191},[103,4727,4626],{"class":170},[103,4729,4623],{"class":1191},[103,4731,1221],{"class":170},[103,4733,4735,4737,4739,4741,4743],{"class":105,"line":4734},266,[103,4736,1401],{"class":170},[103,4738,4638],{"class":1191},[103,4740,4641],{"class":170},[103,4742,4638],{"class":1191},[103,4744,1221],{"class":170},[103,4746,4748,4750,4752,4754,4756],{"class":105,"line":4747},267,[103,4749,1401],{"class":170},[103,4751,4653],{"class":1191},[103,4753,4656],{"class":170},[103,4755,4653],{"class":1191},[103,4757,1221],{"class":170},[103,4759,4761,4763,4765],{"class":105,"line":4760},268,[103,4762,4666],{"class":170},[103,4764,4591],{"class":1191},[103,4766,1221],{"class":170},[103,4768,4770,4772,4774],{"class":105,"line":4769},269,[103,4771,4676],{"class":170},[103,4773,4688],{"class":1191},[103,4775,1221],{"class":170},[103,4777,4779,4781,4784],{"class":105,"line":4778},270,[103,4780,2558],{"class":170},[103,4782,4783],{"class":1191},"z",[103,4785,1221],{"class":170},[103,4787,4789,4791,4793,4795,4797,4799],{"class":105,"line":4788},271,[103,4790,1452],{"class":170},[103,4792,4591],{"class":1191},[103,4794,1114],{"class":109},[103,4796,563],{"class":170},[103,4798,4598],{"class":113},[103,4800,1221],{"class":170},[103,4802,4804,4806,4808,4810,4812],{"class":105,"line":4803},272,[103,4805,1401],{"class":170},[103,4807,4608],{"class":1191},[103,4809,4611],{"class":170},[103,4811,4608],{"class":1191},[103,4813,1221],{"class":170},[103,4815,4817,4819,4821,4823,4825],{"class":105,"line":4816},273,[103,4818,1401],{"class":170},[103,4820,4623],{"class":1191},[103,4822,4626],{"class":170},[103,4824,4623],{"class":1191},[103,4826,1221],{"class":170},[103,4828,4830,4832,4834,4836,4838],{"class":105,"line":4829},274,[103,4831,1401],{"class":170},[103,4833,4638],{"class":1191},[103,4835,4641],{"class":170},[103,4837,4638],{"class":1191},[103,4839,1221],{"class":170},[103,4841,4843,4845,4847,4849,4851],{"class":105,"line":4842},275,[103,4844,1401],{"class":170},[103,4846,4653],{"class":1191},[103,4848,4656],{"class":170},[103,4850,4653],{"class":1191},[103,4852,1221],{"class":170},[103,4854,4856,4858,4860],{"class":105,"line":4855},276,[103,4857,4666],{"class":170},[103,4859,4591],{"class":1191},[103,4861,1221],{"class":170},[103,4863,4865,4867,4869],{"class":105,"line":4864},277,[103,4866,4676],{"class":170},[103,4868,4783],{"class":1191},[103,4870,1221],{"class":170},[103,4872,4874,4876,4878],{"class":105,"line":4873},278,[103,4875,2574],{"class":170},[103,4877,4571],{"class":1191},[103,4879,1221],{"class":170},[103,4881,4883,4885,4888],{"class":105,"line":4882},279,[103,4884,1360],{"class":170},[103,4886,4887],{"class":1191},"linear_acceleration",[103,4889,1221],{"class":170},[103,4891,4893,4895,4897],{"class":105,"line":4892},280,[103,4894,2558],{"class":170},[103,4896,4581],{"class":1191},[103,4898,1221],{"class":170},[103,4900,4902,4904,4906,4908,4910,4912],{"class":105,"line":4901},281,[103,4903,1452],{"class":170},[103,4905,4591],{"class":1191},[103,4907,1114],{"class":109},[103,4909,563],{"class":170},[103,4911,4598],{"class":113},[103,4913,1221],{"class":170},[103,4915,4917,4919,4921,4923,4925],{"class":105,"line":4916},282,[103,4918,1401],{"class":170},[103,4920,4608],{"class":1191},[103,4922,4611],{"class":170},[103,4924,4608],{"class":1191},[103,4926,1221],{"class":170},[103,4928,4930,4932,4934,4937,4939],{"class":105,"line":4929},283,[103,4931,1401],{"class":170},[103,4933,4623],{"class":1191},[103,4935,4936],{"class":170},">1.7e-2\u003C/",[103,4938,4623],{"class":1191},[103,4940,1221],{"class":170},[103,4942,4944,4946,4948,4951,4953],{"class":105,"line":4943},284,[103,4945,1401],{"class":170},[103,4947,4638],{"class":1191},[103,4949,4950],{"class":170},">0.1\u003C/",[103,4952,4638],{"class":1191},[103,4954,1221],{"class":170},[103,4956,4958,4960,4962,4965,4967],{"class":105,"line":4957},285,[103,4959,1401],{"class":170},[103,4961,4653],{"class":1191},[103,4963,4964],{"class":170},">0.001\u003C/",[103,4966,4653],{"class":1191},[103,4968,1221],{"class":170},[103,4970,4972,4974,4976],{"class":105,"line":4971},286,[103,4973,4666],{"class":170},[103,4975,4591],{"class":1191},[103,4977,1221],{"class":170},[103,4979,4981,4983,4985],{"class":105,"line":4980},287,[103,4982,4676],{"class":170},[103,4984,4581],{"class":1191},[103,4986,1221],{"class":170},[103,4988,4990,4992,4994],{"class":105,"line":4989},288,[103,4991,2558],{"class":170},[103,4993,4688],{"class":1191},[103,4995,1221],{"class":170},[103,4997,4999,5001,5003,5005,5007,5009],{"class":105,"line":4998},289,[103,5000,1452],{"class":170},[103,5002,4591],{"class":1191},[103,5004,1114],{"class":109},[103,5006,563],{"class":170},[103,5008,4598],{"class":113},[103,5010,1221],{"class":170},[103,5012,5014,5016,5018,5020,5022],{"class":105,"line":5013},290,[103,5015,1401],{"class":170},[103,5017,4608],{"class":1191},[103,5019,4611],{"class":170},[103,5021,4608],{"class":1191},[103,5023,1221],{"class":170},[103,5025,5027,5029,5031,5033,5035],{"class":105,"line":5026},291,[103,5028,1401],{"class":170},[103,5030,4623],{"class":1191},[103,5032,4936],{"class":170},[103,5034,4623],{"class":1191},[103,5036,1221],{"class":170},[103,5038,5040,5042,5044,5046,5048],{"class":105,"line":5039},292,[103,5041,1401],{"class":170},[103,5043,4638],{"class":1191},[103,5045,4950],{"class":170},[103,5047,4638],{"class":1191},[103,5049,1221],{"class":170},[103,5051,5053,5055,5057,5059,5061],{"class":105,"line":5052},293,[103,5054,1401],{"class":170},[103,5056,4653],{"class":1191},[103,5058,4964],{"class":170},[103,5060,4653],{"class":1191},[103,5062,1221],{"class":170},[103,5064,5066,5068,5070],{"class":105,"line":5065},294,[103,5067,4666],{"class":170},[103,5069,4591],{"class":1191},[103,5071,1221],{"class":170},[103,5073,5075,5077,5079],{"class":105,"line":5074},295,[103,5076,4676],{"class":170},[103,5078,4688],{"class":1191},[103,5080,1221],{"class":170},[103,5082,5084,5086,5088],{"class":105,"line":5083},296,[103,5085,2558],{"class":170},[103,5087,4783],{"class":1191},[103,5089,1221],{"class":170},[103,5091,5093,5095,5097,5099,5101,5103],{"class":105,"line":5092},297,[103,5094,1452],{"class":170},[103,5096,4591],{"class":1191},[103,5098,1114],{"class":109},[103,5100,563],{"class":170},[103,5102,4598],{"class":113},[103,5104,1221],{"class":170},[103,5106,5108,5110,5112,5114,5116],{"class":105,"line":5107},298,[103,5109,1401],{"class":170},[103,5111,4608],{"class":1191},[103,5113,4611],{"class":170},[103,5115,4608],{"class":1191},[103,5117,1221],{"class":170},[103,5119,5121,5123,5125,5127,5129],{"class":105,"line":5120},299,[103,5122,1401],{"class":170},[103,5124,4623],{"class":1191},[103,5126,4936],{"class":170},[103,5128,4623],{"class":1191},[103,5130,1221],{"class":170},[103,5132,5134,5136,5138,5140,5142],{"class":105,"line":5133},300,[103,5135,1401],{"class":170},[103,5137,4638],{"class":1191},[103,5139,4950],{"class":170},[103,5141,4638],{"class":1191},[103,5143,1221],{"class":170},[103,5145,5147,5149,5151,5153,5155],{"class":105,"line":5146},301,[103,5148,1401],{"class":170},[103,5150,4653],{"class":1191},[103,5152,4964],{"class":170},[103,5154,4653],{"class":1191},[103,5156,1221],{"class":170},[103,5158,5160,5162,5164],{"class":105,"line":5159},302,[103,5161,4666],{"class":170},[103,5163,4591],{"class":1191},[103,5165,1221],{"class":170},[103,5167,5169,5171,5173],{"class":105,"line":5168},303,[103,5170,4676],{"class":170},[103,5172,4783],{"class":1191},[103,5174,1221],{"class":170},[103,5176,5178,5180,5182],{"class":105,"line":5177},304,[103,5179,2574],{"class":170},[103,5181,4887],{"class":1191},[103,5183,1221],{"class":170},[103,5185,5187,5189,5191],{"class":105,"line":5186},305,[103,5188,2533],{"class":170},[103,5190,4561],{"class":1191},[103,5192,1221],{"class":170},[103,5194,5196,5198,5200],{"class":105,"line":5195},306,[103,5197,1427],{"class":170},[103,5199,4404],{"class":1191},[103,5201,1221],{"class":170},[103,5203,5205,5207,5209],{"class":105,"line":5204},307,[103,5206,1479],{"class":170},[103,5208,136],{"class":1191},[103,5210,1221],{"class":170},[103,5212,5214],{"class":105,"line":5213},308,[103,5215,309],{"emptyLinePlaceholder":308},[103,5217,5219,5221,5223,5225,5227,5229],{"class":105,"line":5218},309,[103,5220,1275],{"class":170},[103,5222,136],{"class":1191},[103,5224,3774],{"class":109},[103,5226,563],{"class":170},[103,5228,1705],{"class":113},[103,5230,1221],{"class":170},[103,5232,5234,5236,5238,5240,5242,5245,5247,5249,5252],{"class":105,"line":5233},310,[103,5235,1370],{"class":170},[103,5237,4404],{"class":1191},[103,5239,1213],{"class":109},[103,5241,563],{"class":170},[103,5243,5244],{"class":113},"\"laser_sensor\"",[103,5246,1114],{"class":109},[103,5248,563],{"class":170},[103,5250,5251],{"class":113},"\"ray\"",[103,5253,1221],{"class":170},[103,5255,5257,5259,5261,5263,5265],{"class":105,"line":5256},311,[103,5258,1370],{"class":170},[103,5260,4519],{"class":1191},[103,5262,4142],{"class":170},[103,5264,4519],{"class":1191},[103,5266,1221],{"class":170},[103,5268,5270,5272,5274,5276,5278],{"class":105,"line":5269},312,[103,5271,1370],{"class":170},[103,5273,4547],{"class":1191},[103,5275,4142],{"class":170},[103,5277,4547],{"class":1191},[103,5279,1221],{"class":170},[103,5281,5283,5285,5287,5290,5292],{"class":105,"line":5282},313,[103,5284,1370],{"class":170},[103,5286,4014],{"class":1191},[103,5288,5289],{"class":170},">5\u003C/",[103,5291,4014],{"class":1191},[103,5293,1221],{"class":170},[103,5295,5297,5299,5302,5305,5307],{"class":105,"line":5296},314,[103,5298,1370],{"class":170},[103,5300,5301],{"class":1191},"pose",[103,5303,5304],{"class":170},">0 0 0.075 0 0 0\u003C/",[103,5306,5301],{"class":1191},[103,5308,1221],{"class":170},[103,5310,5312,5314,5317],{"class":105,"line":5311},315,[103,5313,1370],{"class":170},[103,5315,5316],{"class":1191},"ray",[103,5318,1221],{"class":170},[103,5320,5322,5324,5327],{"class":105,"line":5321},316,[103,5323,1360],{"class":170},[103,5325,5326],{"class":1191},"scan",[103,5328,1221],{"class":170},[103,5330,5332,5334,5337],{"class":105,"line":5331},317,[103,5333,2558],{"class":170},[103,5335,5336],{"class":1191},"horizontal",[103,5338,1221],{"class":170},[103,5340,5342,5344,5347,5350,5352],{"class":105,"line":5341},318,[103,5343,1452],{"class":170},[103,5345,5346],{"class":1191},"samples",[103,5348,5349],{"class":170},">360\u003C/",[103,5351,5346],{"class":1191},[103,5353,1221],{"class":170},[103,5355,5357,5359,5362,5365,5367],{"class":105,"line":5356},319,[103,5358,1452],{"class":170},[103,5360,5361],{"class":1191},"resolution",[103,5363,5364],{"class":170},">1.000000\u003C/",[103,5366,5361],{"class":1191},[103,5368,1221],{"class":170},[103,5370,5372,5374,5377,5380,5382],{"class":105,"line":5371},320,[103,5373,1452],{"class":170},[103,5375,5376],{"class":1191},"min_angle",[103,5378,5379],{"class":170},">0.000000\u003C/",[103,5381,5376],{"class":1191},[103,5383,1221],{"class":170},[103,5385,5387,5389,5392,5395,5397],{"class":105,"line":5386},321,[103,5388,1452],{"class":170},[103,5390,5391],{"class":1191},"max_angle",[103,5393,5394],{"class":170},">6.280000\u003C/",[103,5396,5391],{"class":1191},[103,5398,1221],{"class":170},[103,5400,5402,5404,5406],{"class":105,"line":5401},322,[103,5403,4676],{"class":170},[103,5405,5336],{"class":1191},[103,5407,1221],{"class":170},[103,5409,5411,5413,5415],{"class":105,"line":5410},323,[103,5412,2574],{"class":170},[103,5414,5326],{"class":1191},[103,5416,1221],{"class":170},[103,5418,5420,5422,5425],{"class":105,"line":5419},324,[103,5421,1360],{"class":170},[103,5423,5424],{"class":1191},"range",[103,5426,1221],{"class":170},[103,5428,5430,5432,5435,5438,5440],{"class":105,"line":5429},325,[103,5431,2558],{"class":170},[103,5433,5434],{"class":1191},"min",[103,5436,5437],{"class":170},">0.120000\u003C/",[103,5439,5434],{"class":1191},[103,5441,1221],{"class":170},[103,5443,5445,5447,5450,5453,5455],{"class":105,"line":5444},326,[103,5446,2558],{"class":170},[103,5448,5449],{"class":1191},"max",[103,5451,5452],{"class":170},">3.5\u003C/",[103,5454,5449],{"class":1191},[103,5456,1221],{"class":170},[103,5458,5460,5462,5464,5467,5469],{"class":105,"line":5459},327,[103,5461,2558],{"class":170},[103,5463,5361],{"class":1191},[103,5465,5466],{"class":170},">0.015000\u003C/",[103,5468,5361],{"class":1191},[103,5470,1221],{"class":170},[103,5472,5474,5476,5478],{"class":105,"line":5473},328,[103,5475,2574],{"class":170},[103,5477,5424],{"class":1191},[103,5479,1221],{"class":170},[103,5481,5483,5485,5487],{"class":105,"line":5482},329,[103,5484,1360],{"class":170},[103,5486,4591],{"class":1191},[103,5488,1221],{"class":170},[103,5490,5492,5494,5497,5500,5502],{"class":105,"line":5491},330,[103,5493,2558],{"class":170},[103,5495,5496],{"class":1191},"type",[103,5498,5499],{"class":170},">gaussian\u003C/",[103,5501,5496],{"class":1191},[103,5503,1221],{"class":170},[103,5505,5507,5509,5511,5513,5515],{"class":105,"line":5506},331,[103,5508,2558],{"class":170},[103,5510,4608],{"class":1191},[103,5512,4611],{"class":170},[103,5514,4608],{"class":1191},[103,5516,1221],{"class":170},[103,5518,5520,5522,5524,5527,5529],{"class":105,"line":5519},332,[103,5521,2558],{"class":170},[103,5523,4623],{"class":1191},[103,5525,5526],{"class":170},">0.01\u003C/",[103,5528,4623],{"class":1191},[103,5530,1221],{"class":170},[103,5532,5534,5536,5538],{"class":105,"line":5533},333,[103,5535,2574],{"class":170},[103,5537,4591],{"class":1191},[103,5539,1221],{"class":170},[103,5541,5543,5545,5547],{"class":105,"line":5542},334,[103,5544,1427],{"class":170},[103,5546,5316],{"class":1191},[103,5548,1221],{"class":170},[103,5550,5552],{"class":105,"line":5551},335,[103,5553,309],{"emptyLinePlaceholder":308},[103,5555,5557,5559,5561,5563,5565,5568,5570,5572,5575],{"class":105,"line":5556},336,[103,5558,1370],{"class":170},[103,5560,3926],{"class":1191},[103,5562,1213],{"class":109},[103,5564,563],{"class":170},[103,5566,5567],{"class":113},"\"laserscan\"",[103,5569,3936],{"class":109},[103,5571,563],{"class":170},[103,5573,5574],{"class":113},"\"libgazebo_ros_ray_sensor.so\"",[103,5576,1221],{"class":170},[103,5578,5580,5582,5584],{"class":105,"line":5579},337,[103,5581,1748],{"class":170},[103,5583,3951],{"class":1191},[103,5585,1221],{"class":170},[103,5587,5589],{"class":105,"line":5588},338,[103,5590,309],{"emptyLinePlaceholder":308},[103,5592,5594,5596,5598,5601,5603],{"class":105,"line":5593},339,[103,5595,1360],{"class":170},[103,5597,3976],{"class":1191},[103,5599,5600],{"class":170},">~/out:=scan\u003C/",[103,5602,3976],{"class":1191},[103,5604,1221],{"class":170},[103,5606,5608,5610,5612],{"class":105,"line":5607},340,[103,5609,2533],{"class":170},[103,5611,3951],{"class":1191},[103,5613,1221],{"class":170},[103,5615,5617,5619,5622,5625,5627],{"class":105,"line":5616},341,[103,5618,1748],{"class":170},[103,5620,5621],{"class":1191},"output_type",[103,5623,5624],{"class":170},">sensor_msgs/LaserScan\u003C/",[103,5626,5621],{"class":1191},[103,5628,1221],{"class":170},[103,5630,5632,5634,5637,5640,5642],{"class":105,"line":5631},342,[103,5633,1748],{"class":170},[103,5635,5636],{"class":1191},"frame_name",[103,5638,5639],{"class":170},">laser_link\u003C/",[103,5641,5636],{"class":1191},[103,5643,1221],{"class":170},[103,5645,5647,5649,5651],{"class":105,"line":5646},343,[103,5648,1427],{"class":170},[103,5650,3926],{"class":1191},[103,5652,1221],{"class":170},[103,5654,5656,5658,5660],{"class":105,"line":5655},344,[103,5657,1427],{"class":170},[103,5659,4404],{"class":1191},[103,5661,1221],{"class":170},[103,5663,5665,5667,5669],{"class":105,"line":5664},345,[103,5666,1479],{"class":170},[103,5668,136],{"class":1191},[103,5670,1221],{"class":170},[103,5672,5674],{"class":105,"line":5673},346,[103,5675,309],{"emptyLinePlaceholder":308},[103,5677,5679,5682,5684],{"class":105,"line":5678},347,[103,5680,5681],{"class":170},"\u003C/",[103,5683,1210],{"class":1191},[103,5685,1221],{"class":170},[23,5687,5688],{},"看到这里你是不是迫不及待敲起来命令行来加载我们的机器人到gazebo了，别着急，小鱼再推荐一个可视化服务请求工具，其实在第六章中小鱼介绍过，在rqt工具集里有一个叫服务请求工具。",[23,5690,5691],{},"命令行输入rqt，在插件选项中选择Services->Service Caller,然后再下拉框选择/spawn_entity服务，即可看到下面的界面。",[23,5693,5694],{},[55,5695],{"alt":57,"src":5696},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1633.webp",[23,5698,5699],{},"接着我们把我们的FishBot的URDF模型复制粘贴，放到xml中（注意要把原来的''删掉哦！）",[23,5701,5702],{},[55,5703],{"alt":57,"src":5704},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1634.webp",[23,5706,5707],{},"然后点右上角的call，可以显示下图成功了。",[23,5709,5710],{},[55,5711],{"alt":57,"src":5712},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1635.webp",[23,5714,5715],{},"接着就可以看到工厂返回说成功把机器人制作出来送入gazebo了。",[23,5717,5718],{},"此时再看我们的Gazebo,一个小小的，白白的机器人出现了。",[23,5720,5721],{},[55,5722],{"alt":57,"src":5723},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1636.webp",[23,5725,5726],{},"shift+鼠标左键，或者直接点滚轮中键，都可以拖动视角。很多玩过第三人称游戏的学弟学妹肯定都不陌生这种操控吧。",[86,5728,5729],{"id":5729},"在不同位置加载多个机器人",[23,5731,5732],{},"可以再生产一个fishbot（为了后面需要多机器人仿真的小伙伴）。",[23,5734,5735],{},"修改rqt中的参数，增加一个命名空间，然后修改一个位置，让第二个机器人和第一个相距1m的地方生产，然后点击Call。",[23,5737,5738],{},[55,5739],{"alt":57,"src":5740},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1637.webp",[23,5742,5743],{},"返回成功，此时拖送Gazebo观察一下，发现多出了一个机器人，距离刚好是在X轴（红色）1米（一个小格子一米）处。",[23,5745,5746],{},[55,5747],{"alt":57,"src":5748},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1638.webp",[86,5750,5751],{"id":5751},"查询和删除机器人",[23,5753,5754],{},"利用rqt工具，我们再对另外两个服务接口进行请求。",[23,5756,5757],{},"首先先查询有几个模型在仿真环境中",[23,5759,5760],{},[55,5761],{"alt":57,"src":5762},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1639.webp",[23,5764,5765],{},"查到了三个模型，一个大地，一个fishbot，一个fishbot_0。",[23,5767,5768],{},"我们接着尝试把fishbot_0删掉，选择删除实体，输入fishbot_0的名字，拿起小电话通知工厂回收我们的0号fishbot。",[23,5770,5771],{},[55,5772],{"alt":57,"src":5773},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1640.webp",[23,5775,5776],{},"调用成功，观察gazebo发现机器人，人没了",[23,5778,5779],{},[55,5780],{"alt":57,"src":5781},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1641.webp",[86,5783,5784],{"id":5784},"创建工作空间",[23,5786,5787,5788],{},"本节代码参考鱼香ROS：",[15,5789,5790],{"href":5790,"rel":5791},"https://github.com/fishros/fishbot/tree/navgation2",[19],[94,5793,5795],{"className":96,"code":5794,"language":98,"meta":57,"style":57},"\n# 创建工作空间\nmkdir -p ws_simulations/src\ncd ws_simulations/src\n",[100,5796,5797,5801,5806,5817],{"__ignoreMap":57},[103,5798,5799],{"class":105,"line":106},[103,5800,309],{"emptyLinePlaceholder":308},[103,5802,5803],{"class":105,"line":231},[103,5804,5805],{"class":227},"# 创建工作空间\n",[103,5807,5808,5811,5814],{"class":105,"line":259},[103,5809,5810],{"class":109},"mkdir",[103,5812,5813],{"class":139}," -p",[103,5815,5816],{"class":113}," ws_simulations/src\n",[103,5818,5819,5822],{"class":105,"line":274},[103,5820,5821],{"class":139},"cd",[103,5823,5816],{"class":113},[23,5825,5826],{},"创建功能包",[94,5828,5830],{"className":96,"code":5829,"language":98,"meta":57,"style":57},"ros2 pkg create fishbot_description --build-type ament_cmake\ncd fishbot_description\n",[100,5831,5832,5851],{"__ignoreMap":57},[103,5833,5834,5836,5839,5842,5845,5848],{"class":105,"line":106},[103,5835,1045],{"class":109},[103,5837,5838],{"class":113}," pkg",[103,5840,5841],{"class":113}," create",[103,5843,5844],{"class":113}," fishbot_description",[103,5846,5847],{"class":139}," --build-type",[103,5849,5850],{"class":113}," ament_cmake\n",[103,5852,5853,5855],{"class":105,"line":231},[103,5854,5821],{"class":139},[103,5856,5857],{"class":113}," fishbot_description\n",[23,5859,5860],{},"然后配置package.xml",[94,5862,5864],{"className":1179,"code":5863,"language":1181,"meta":57,"style":57},"  \u003Cexec_depend>rviz2\u003C/exec_depend>\n  \u003Cexec_depend>xacro\u003C/exec_depend>\n  \u003Cexec_depend>robot_state_publisher\u003C/exec_depend>\n  \u003Cexec_depend>joint_state_publisher\u003C/exec_depend>\n  \u003Cexec_depend>ros2launch\u003C/exec_depend>\n",[100,5865,5866,5880,5893,5906,5919],{"__ignoreMap":57},[103,5867,5868,5870,5873,5876,5878],{"class":105,"line":106},[103,5869,1230],{"class":170},[103,5871,5872],{"class":1191},"exec_depend",[103,5874,5875],{"class":170},">rviz2\u003C/",[103,5877,5872],{"class":1191},[103,5879,1221],{"class":170},[103,5881,5882,5884,5886,5889,5891],{"class":105,"line":231},[103,5883,1230],{"class":170},[103,5885,5872],{"class":1191},[103,5887,5888],{"class":170},">xacro\u003C/",[103,5890,5872],{"class":1191},[103,5892,1221],{"class":170},[103,5894,5895,5897,5899,5902,5904],{"class":105,"line":259},[103,5896,1230],{"class":170},[103,5898,5872],{"class":1191},[103,5900,5901],{"class":170},">robot_state_publisher\u003C/",[103,5903,5872],{"class":1191},[103,5905,1221],{"class":170},[103,5907,5908,5910,5912,5915,5917],{"class":105,"line":274},[103,5909,1230],{"class":170},[103,5911,5872],{"class":1191},[103,5913,5914],{"class":170},">joint_state_publisher\u003C/",[103,5916,5872],{"class":1191},[103,5918,1221],{"class":170},[103,5920,5921,5923,5925,5928,5930],{"class":105,"line":286},[103,5922,1230],{"class":170},[103,5924,5872],{"class":1191},[103,5926,5927],{"class":170},">ros2launch\u003C/",[103,5929,5872],{"class":1191},[103,5931,1221],{"class":170},[23,5933,5934],{},[55,5935],{"alt":57,"src":5936},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1642.webp",[23,5938,5939],{},"然后修改cmakelists.txt",[94,5941,5943],{"className":96,"code":5942,"language":98,"meta":57,"style":57},"install(\n  DIRECTORY launch urdf rviz meshes\n  DESTINATION share/${PROJECT_NAME}  \n)\n",[100,5944,5945,5950,5967,5978],{"__ignoreMap":57},[103,5946,5947],{"class":105,"line":106},[103,5948,5949],{"class":109},"install(\n",[103,5951,5952,5955,5958,5961,5964],{"class":105,"line":231},[103,5953,5954],{"class":109},"  DIRECTORY",[103,5956,5957],{"class":113}," launch",[103,5959,5960],{"class":113}," urdf",[103,5962,5963],{"class":113}," rviz",[103,5965,5966],{"class":113}," meshes\n",[103,5968,5969,5972,5975],{"class":105,"line":259},[103,5970,5971],{"class":109},"  DESTINATION",[103,5973,5974],{"class":113}," share/",[103,5976,5977],{"class":170},"${PROJECT_NAME}  \n",[103,5979,5980],{"class":105,"line":274},[103,5981,5982],{"class":170},")\n",[23,5984,5985],{},[55,5986],{"alt":57,"src":5987},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1643.webp",[23,5989,5990],{},"克隆下鱼香ROS的仓库，并复制下里面的文件到咱们的目录下。这都是上一节的东西，与本节学习无关，直接复制就行。",[23,5992,5993],{},[55,5994],{"alt":57,"src":5995},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1644.webp",[23,5997,5998,5999,6002,6003,6006],{},"打开工作空间，在",[100,6000,6001],{},"src/fishbot_description/launch","中添加一个",[100,6004,6005],{},"gazebo.launch.py","文件，我们开始编写launch文件来在gazebo中加载机器人模型。",[23,6008,6009],{},"我们主要需要做两件事：",[6011,6012,6013],"ol",{},[1086,6014,6015],{},"启动gazebo，我们可以将命令行写成一个launch节点",[94,6017,6021],{"className":6018,"code":6019,"language":6020,"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",[100,6022,6023,6028,6071],{"__ignoreMap":57},[103,6024,6025],{"class":105,"line":106},[103,6026,6027],{"class":170},"ExecuteProcess(\n",[103,6029,6030,6034,6036,6039,6042,6045,6048,6051,6054,6056,6059,6061,6063,6065,6068],{"class":105,"line":231},[103,6031,6033],{"class":6032},"s4XuR","        cmd",[103,6035,563],{"class":166},[103,6037,6038],{"class":170},"[",[103,6040,6041],{"class":113},"'gazebo'",[103,6043,6044],{"class":170},", ",[103,6046,6047],{"class":113},"'--verbose'",[103,6049,6050],{"class":170},",",[103,6052,6053],{"class":113},"'-s'",[103,6055,6044],{"class":170},[103,6057,6058],{"class":113},"'libgazebo_ros_init.so'",[103,6060,6044],{"class":170},[103,6062,6053],{"class":113},[103,6064,6044],{"class":170},[103,6066,6067],{"class":113},"'libgazebo_ros_factory.so'",[103,6069,6070],{"class":170},", gazebo_world_path],\n",[103,6072,6073,6076,6078,6081],{"class":105,"line":259},[103,6074,6075],{"class":6032},"        output",[103,6077,563],{"class":166},[103,6079,6080],{"class":113},"'screen'",[103,6082,5982],{"class":170},[6011,6084,6085],{"start":231},[1086,6086,6087,6088,6091],{},"上面我们加载机器人是直接将XML格式的URDF复制过去进行加载的，这样很不方便，我们可以使用gazebo_ros为我们提供好的一个叫做",[100,6089,6090],{},"spawn_entity.py","节点，该节点支持从文件地址直接生产机器人到Gazebo。",[23,6093,6094],{},"该节点需要两个参数，一个机器人的模型名字和urdf的文件地址，这个简单，前面我们曾经使用package_share来拼接过urdf路径。",[94,6096,6098],{"className":6018,"code":6097,"language":6020,"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",[100,6099,6100,6110,6123,6136],{"__ignoreMap":57},[103,6101,6102,6105,6107],{"class":105,"line":106},[103,6103,6104],{"class":170},"spawn_entity_cmd ",[103,6106,563],{"class":166},[103,6108,6109],{"class":170}," Node(\n",[103,6111,6112,6115,6117,6120],{"class":105,"line":231},[103,6113,6114],{"class":6032},"    package",[103,6116,563],{"class":166},[103,6118,6119],{"class":113},"'gazebo_ros'",[103,6121,6122],{"class":170},", \n",[103,6124,6125,6128,6130,6133],{"class":105,"line":259},[103,6126,6127],{"class":6032},"    executable",[103,6129,563],{"class":166},[103,6131,6132],{"class":113},"'spawn_entity.py'",[103,6134,6135],{"class":170},",\n",[103,6137,6138,6141,6143,6145,6148,6151,6154,6157,6160,6162,6164],{"class":105,"line":274},[103,6139,6140],{"class":6032},"    arguments",[103,6142,563],{"class":166},[103,6144,6038],{"class":170},[103,6146,6147],{"class":113},"'-entity'",[103,6149,6150],{"class":170},", robot_name_in_model,  ",[103,6152,6153],{"class":113},"'-file'",[103,6155,6156],{"class":170},", urdf_model_path ], ",[103,6158,6159],{"class":6032},"output",[103,6161,563],{"class":166},[103,6163,6080],{"class":113},[103,6165,5982],{"class":170},[23,6167,6168],{},"先加载赵虚左老师的模板",[23,6170,6171],{},[55,6172],{"alt":57,"src":6173},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1645.webp",[23,6175,6176],{},"我们首先需要ExecuteProcess来输入终端命令，所以要先把from launch.actions import ExecuteProcess的注释先打开。",[23,6178,6179],{},"为了方便修改加载的机器人模型和urdf,我们还需要使用share目录，所以也要把from ament_index_python.packages import get_package_share_directory的注释打开，并import os。",[23,6181,6182],{},"写完后的launch文件如下：",[94,6184,6186],{"className":6018,"code":6185,"language":6020,"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/urdf/{urdf_name}')\n\n    # Start Gazebo server\n    start_gazebo_cmd = ExecuteProcess(\n        cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so'],\n        output='screen')\n\n    # Launch the robot\n    spawn_entity_cmd = Node(\n        package='gazebo_ros', \n        executable='spawn_entity.py',\n        arguments=['-entity', robot_name_in_model,  '-file', urdf_model_path ], output='screen')\n\n    return LaunchDescription([start_gazebo_cmd,spawn_entity_cmd])\n",[100,6187,6188,6201,6213,6217,6222,6234,6238,6243,6247,6252,6256,6261,6265,6270,6274,6279,6283,6288,6292,6297,6301,6306,6310,6315,6319,6324,6328,6333,6337,6342,6346,6351,6355,6360,6372,6379,6383,6394,6404,6414,6424,6428,6457,6484,6488,6493,6503,6536,6546,6550,6555,6564,6575,6586,6611,6615],{"__ignoreMap":57},[103,6189,6190,6192,6195,6198],{"class":105,"line":106},[103,6191,933],{"class":166},[103,6193,6194],{"class":170}," launch ",[103,6196,6197],{"class":166},"import",[103,6199,6200],{"class":170}," LaunchDescription\n",[103,6202,6203,6205,6208,6210],{"class":105,"line":231},[103,6204,933],{"class":166},[103,6206,6207],{"class":170}," launch_ros.actions ",[103,6209,6197],{"class":166},[103,6211,6212],{"class":170}," Node\n",[103,6214,6215],{"class":105,"line":259},[103,6216,309],{"emptyLinePlaceholder":308},[103,6218,6219],{"class":105,"line":274},[103,6220,6221],{"class":227},"# 封装终端指令相关类\n",[103,6223,6224,6226,6229,6231],{"class":105,"line":286},[103,6225,933],{"class":166},[103,6227,6228],{"class":170}," launch.actions ",[103,6230,6197],{"class":166},[103,6232,6233],{"class":170}," ExecuteProcess\n",[103,6235,6236],{"class":105,"line":305},[103,6237,309],{"emptyLinePlaceholder":308},[103,6239,6240],{"class":105,"line":312},[103,6241,6242],{"class":227},"# from launch.substitutions import FindExecutable\n",[103,6244,6245],{"class":105,"line":327},[103,6246,309],{"emptyLinePlaceholder":308},[103,6248,6249],{"class":105,"line":348},[103,6250,6251],{"class":227},"# 参数声明与获取\n",[103,6253,6254],{"class":105,"line":359},[103,6255,309],{"emptyLinePlaceholder":308},[103,6257,6258],{"class":105,"line":368},[103,6259,6260],{"class":227},"# from launch.actions import DeclareLaunchArgument\n",[103,6262,6263],{"class":105,"line":383},[103,6264,309],{"emptyLinePlaceholder":308},[103,6266,6267],{"class":105,"line":388},[103,6268,6269],{"class":227},"# from launch.substitutions import LaunchConfiguration\n",[103,6271,6272],{"class":105,"line":394},[103,6273,309],{"emptyLinePlaceholder":308},[103,6275,6276],{"class":105,"line":399},[103,6277,6278],{"class":227},"# 文件包含相关\n",[103,6280,6281],{"class":105,"line":405},[103,6282,309],{"emptyLinePlaceholder":308},[103,6284,6285],{"class":105,"line":410},[103,6286,6287],{"class":227},"# from launch.actions import IncludeLaunchDescription\n",[103,6289,6290],{"class":105,"line":416},[103,6291,309],{"emptyLinePlaceholder":308},[103,6293,6294],{"class":105,"line":421},[103,6295,6296],{"class":227},"# from launch.launch_description_sources import PythonLaunchDescriptionSource\n",[103,6298,6299],{"class":105,"line":427},[103,6300,309],{"emptyLinePlaceholder":308},[103,6302,6303],{"class":105,"line":432},[103,6304,6305],{"class":227},"# 分组相关\n",[103,6307,6308],{"class":105,"line":438},[103,6309,309],{"emptyLinePlaceholder":308},[103,6311,6312],{"class":105,"line":443},[103,6313,6314],{"class":227},"# from launch_ros.actions import PushRosNamespace\n",[103,6316,6317],{"class":105,"line":449},[103,6318,309],{"emptyLinePlaceholder":308},[103,6320,6321],{"class":105,"line":454},[103,6322,6323],{"class":227},"# from launch.actions import GroupAction\n",[103,6325,6326],{"class":105,"line":460},[103,6327,309],{"emptyLinePlaceholder":308},[103,6329,6330],{"class":105,"line":465},[103,6331,6332],{"class":227},"# 事件相关\n",[103,6334,6335],{"class":105,"line":471},[103,6336,309],{"emptyLinePlaceholder":308},[103,6338,6339],{"class":105,"line":476},[103,6340,6341],{"class":227},"# from launch.event_handlers import OnProcessStart,OnProcessExit\n",[103,6343,6344],{"class":105,"line":504},[103,6345,309],{"emptyLinePlaceholder":308},[103,6347,6348],{"class":105,"line":530},[103,6349,6350],{"class":227},"# from launch.actions import ExecuteProcess,RegisterEventHandler,LogInfo\n",[103,6352,6353],{"class":105,"line":574},[103,6354,309],{"emptyLinePlaceholder":308},[103,6356,6357],{"class":105,"line":579},[103,6358,6359],{"class":227},"# 获取功能包下share目录或路径\n",[103,6361,6362,6364,6367,6369],{"class":105,"line":590},[103,6363,933],{"class":166},[103,6365,6366],{"class":170}," ament_index_python.packages ",[103,6368,6197],{"class":166},[103,6370,6371],{"class":170}," get_package_share_directory\n",[103,6373,6374,6376],{"class":105,"line":635},[103,6375,6197],{"class":166},[103,6377,6378],{"class":170}," os\n",[103,6380,6381],{"class":105,"line":665},[103,6382,309],{"emptyLinePlaceholder":308},[103,6384,6385,6388,6391],{"class":105,"line":677},[103,6386,6387],{"class":166},"def",[103,6389,6390],{"class":109}," generate_launch_description",[103,6392,6393],{"class":170},"():\n",[103,6395,6396,6399,6401],{"class":105,"line":799},[103,6397,6398],{"class":170},"    robot_name_in_model ",[103,6400,563],{"class":166},[103,6402,6403],{"class":113}," 'fishbot'\n",[103,6405,6406,6409,6411],{"class":105,"line":805},[103,6407,6408],{"class":170},"    package_name ",[103,6410,563],{"class":166},[103,6412,6413],{"class":113}," 'fishbot_description'\n",[103,6415,6416,6419,6421],{"class":105,"line":817},[103,6417,6418],{"class":170},"    urdf_name ",[103,6420,563],{"class":166},[103,6422,6423],{"class":113}," \"fishbot_gazebo.urdf\"\n",[103,6425,6426],{"class":105,"line":823},[103,6427,309],{"emptyLinePlaceholder":308},[103,6429,6430,6433,6435,6438,6441,6444,6447,6450,6453,6455],{"class":105,"line":829},[103,6431,6432],{"class":170},"    pkg_share ",[103,6434,563],{"class":166},[103,6436,6437],{"class":170}," get_package_share_directory(",[103,6439,6440],{"class":166},"f",[103,6442,6443],{"class":113},"\"",[103,6445,6446],{"class":139},"{",[103,6448,6449],{"class":170},"package_name",[103,6451,6452],{"class":139},"}",[103,6454,6443],{"class":113},[103,6456,5982],{"class":170},[103,6458,6459,6462,6464,6467,6469,6472,6474,6477,6479,6482],{"class":105,"line":835},[103,6460,6461],{"class":170},"    urdf_model_path ",[103,6463,563],{"class":166},[103,6465,6466],{"class":170}," os.path.join(pkg_share, ",[103,6468,6440],{"class":166},[103,6470,6471],{"class":113},"'urdf/urdf/",[103,6473,6446],{"class":139},[103,6475,6476],{"class":170},"urdf_name",[103,6478,6452],{"class":139},[103,6480,6481],{"class":113},"'",[103,6483,5982],{"class":170},[103,6485,6486],{"class":105,"line":841},[103,6487,309],{"emptyLinePlaceholder":308},[103,6489,6490],{"class":105,"line":864},[103,6491,6492],{"class":227},"    # Start Gazebo server\n",[103,6494,6495,6498,6500],{"class":105,"line":907},[103,6496,6497],{"class":170},"    start_gazebo_cmd ",[103,6499,563],{"class":166},[103,6501,6502],{"class":170}," ExecuteProcess(\n",[103,6504,6505,6507,6509,6511,6513,6515,6517,6519,6521,6523,6525,6527,6529,6531,6533],{"class":105,"line":944},[103,6506,6033],{"class":6032},[103,6508,563],{"class":166},[103,6510,6038],{"class":170},[103,6512,6041],{"class":113},[103,6514,6044],{"class":170},[103,6516,6047],{"class":113},[103,6518,6050],{"class":170},[103,6520,6053],{"class":113},[103,6522,6044],{"class":170},[103,6524,6058],{"class":113},[103,6526,6044],{"class":170},[103,6528,6053],{"class":113},[103,6530,6044],{"class":170},[103,6532,6067],{"class":113},[103,6534,6535],{"class":170},"],\n",[103,6537,6538,6540,6542,6544],{"class":105,"line":949},[103,6539,6075],{"class":6032},[103,6541,563],{"class":166},[103,6543,6080],{"class":113},[103,6545,5982],{"class":170},[103,6547,6548],{"class":105,"line":973},[103,6549,309],{"emptyLinePlaceholder":308},[103,6551,6552],{"class":105,"line":997},[103,6553,6554],{"class":227},"    # Launch the robot\n",[103,6556,6557,6560,6562],{"class":105,"line":1877},[103,6558,6559],{"class":170},"    spawn_entity_cmd ",[103,6561,563],{"class":166},[103,6563,6109],{"class":170},[103,6565,6566,6569,6571,6573],{"class":105,"line":1886},[103,6567,6568],{"class":6032},"        package",[103,6570,563],{"class":166},[103,6572,6119],{"class":113},[103,6574,6122],{"class":170},[103,6576,6577,6580,6582,6584],{"class":105,"line":1901},[103,6578,6579],{"class":6032},"        executable",[103,6581,563],{"class":166},[103,6583,6132],{"class":113},[103,6585,6135],{"class":170},[103,6587,6588,6591,6593,6595,6597,6599,6601,6603,6605,6607,6609],{"class":105,"line":1916},[103,6589,6590],{"class":6032},"        arguments",[103,6592,563],{"class":166},[103,6594,6038],{"class":170},[103,6596,6147],{"class":113},[103,6598,6150],{"class":170},[103,6600,6153],{"class":113},[103,6602,6156],{"class":170},[103,6604,6159],{"class":6032},[103,6606,563],{"class":166},[103,6608,6080],{"class":113},[103,6610,5982],{"class":170},[103,6612,6613],{"class":105,"line":1925},[103,6614,309],{"emptyLinePlaceholder":308},[103,6616,6617,6620],{"class":105,"line":1934},[103,6618,6619],{"class":166},"    return",[103,6621,6622],{"class":170}," LaunchDescription([start_gazebo_cmd,spawn_entity_cmd])\n",[23,6624,6625],{},"编译运行",[94,6627,6629],{"className":6018,"code":6628,"language":6020,"meta":57,"style":57},"colcon build --packages-select fishbot_description\nsource install/setup.bash\nros2 launch fishbot_description gazebo.launch.py\n",[100,6630,6631,6648,6658],{"__ignoreMap":57},[103,6632,6633,6636,6640,6643,6645],{"class":105,"line":106},[103,6634,6635],{"class":170},"colcon build ",[103,6637,6639],{"class":6638},"s7hpK","--",[103,6641,6642],{"class":170},"packages",[103,6644,174],{"class":166},[103,6646,6647],{"class":170},"select fishbot_description\n",[103,6649,6650,6653,6655],{"class":105,"line":231},[103,6651,6652],{"class":170},"source install",[103,6654,188],{"class":166},[103,6656,6657],{"class":170},"setup.bash\n",[103,6659,6660],{"class":105,"line":259},[103,6661,6662],{"class":170},"ros2 launch fishbot_description gazebo.launch.py\n",[23,6664,6665],{},[55,6666],{"alt":57,"src":6667},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1646.webp",[86,6669,6670],{"id":6670},"插件",[23,6672,6673],{},"使用下面的指令可以查看所有的动态链接库：",[94,6675,6677],{"className":6018,"code":6676,"language":6020,"meta":57,"style":57},"ls /opt/ros/humble/lib/libgazebo_ros*\n",[100,6678,6679],{"__ignoreMap":57},[103,6680,6681,6684,6686,6689,6691,6693,6695,6698,6700,6703,6705,6708],{"class":105,"line":106},[103,6682,6683],{"class":170},"ls ",[103,6685,188],{"class":166},[103,6687,6688],{"class":170},"opt",[103,6690,188],{"class":166},[103,6692,3951],{"class":170},[103,6694,188],{"class":166},[103,6696,6697],{"class":170},"humble",[103,6699,188],{"class":166},[103,6701,6702],{"class":170},"lib",[103,6704,188],{"class":166},[103,6706,6707],{"class":170},"libgazebo_ros",[103,6709,6710],{"class":166},"*\n",[23,6712,6713],{},[55,6714],{"alt":57,"src":6715},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1647.webp",[94,6717,6719],{"className":96,"code":6718,"language":98,"meta":57,"style":57},"/opt/ros/humble/lib/libgazebo_ros2_control.so\n/opt/ros/humble/lib/libgazebo_ros_ackermann_drive.so\n/opt/ros/humble/lib/libgazebo_ros_bumper.so\n/opt/ros/humble/lib/libgazebo_ros_camera.so\n/opt/ros/humble/lib/libgazebo_ros_diff_drive.so\n/opt/ros/humble/lib/libgazebo_ros_elevator.so\n/opt/ros/humble/lib/libgazebo_ros_factory.so\n/opt/ros/humble/lib/libgazebo_ros_force.so\n/opt/ros/humble/lib/libgazebo_ros_force_system.so\n/opt/ros/humble/lib/libgazebo_ros_ft_sensor.so\n/opt/ros/humble/lib/libgazebo_ros_gps_sensor.so\n/opt/ros/humble/lib/libgazebo_ros_hand_of_god.so\n/opt/ros/humble/lib/libgazebo_ros_harness.so\n/opt/ros/humble/lib/libgazebo_ros_imu_sensor.so\n/opt/ros/humble/lib/libgazebo_ros_init.so\n/opt/ros/humble/lib/libgazebo_ros_joint_pose_trajectory.so\n/opt/ros/humble/lib/libgazebo_ros_joint_state_publisher.so\n/opt/ros/humble/lib/libgazebo_ros_node.so\n/opt/ros/humble/lib/libgazebo_ros_p3d.so\n/opt/ros/humble/lib/libgazebo_ros_planar_move.so\n/opt/ros/humble/lib/libgazebo_ros_projector.so\n/opt/ros/humble/lib/libgazebo_ros_properties.so\n/opt/ros/humble/lib/libgazebo_ros_ray_sensor.so\n/opt/ros/humble/lib/libgazebo_ros_state.so\n/opt/ros/humble/lib/libgazebo_ros_template.so\n/opt/ros/humble/lib/libgazebo_ros_tricycle_drive.so\n/opt/ros/humble/lib/libgazebo_ros_utils.so\n/opt/ros/humble/lib/libgazebo_ros_vacuum_gripper.so\n/opt/ros/humble/lib/libgazebo_ros_video.so\n/opt/ros/humble/lib/libgazebo_ros_wheel_slip.so\n",[100,6720,6721,6726,6731,6736,6741,6746,6751,6756,6761,6766,6771,6776,6781,6786,6791,6796,6801,6806,6811,6816,6821,6826,6831,6836,6841,6846,6851,6856,6861,6866],{"__ignoreMap":57},[103,6722,6723],{"class":105,"line":106},[103,6724,6725],{"class":109},"/opt/ros/humble/lib/libgazebo_ros2_control.so\n",[103,6727,6728],{"class":105,"line":231},[103,6729,6730],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_ackermann_drive.so\n",[103,6732,6733],{"class":105,"line":259},[103,6734,6735],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_bumper.so\n",[103,6737,6738],{"class":105,"line":274},[103,6739,6740],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_camera.so\n",[103,6742,6743],{"class":105,"line":286},[103,6744,6745],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_diff_drive.so\n",[103,6747,6748],{"class":105,"line":305},[103,6749,6750],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_elevator.so\n",[103,6752,6753],{"class":105,"line":312},[103,6754,6755],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_factory.so\n",[103,6757,6758],{"class":105,"line":327},[103,6759,6760],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_force.so\n",[103,6762,6763],{"class":105,"line":348},[103,6764,6765],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_force_system.so\n",[103,6767,6768],{"class":105,"line":359},[103,6769,6770],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_ft_sensor.so\n",[103,6772,6773],{"class":105,"line":368},[103,6774,6775],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_gps_sensor.so\n",[103,6777,6778],{"class":105,"line":383},[103,6779,6780],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_hand_of_god.so\n",[103,6782,6783],{"class":105,"line":388},[103,6784,6785],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_harness.so\n",[103,6787,6788],{"class":105,"line":394},[103,6789,6790],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_imu_sensor.so\n",[103,6792,6793],{"class":105,"line":399},[103,6794,6795],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_init.so\n",[103,6797,6798],{"class":105,"line":405},[103,6799,6800],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_joint_pose_trajectory.so\n",[103,6802,6803],{"class":105,"line":410},[103,6804,6805],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_joint_state_publisher.so\n",[103,6807,6808],{"class":105,"line":416},[103,6809,6810],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_node.so\n",[103,6812,6813],{"class":105,"line":421},[103,6814,6815],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_p3d.so\n",[103,6817,6818],{"class":105,"line":427},[103,6819,6820],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_planar_move.so\n",[103,6822,6823],{"class":105,"line":432},[103,6824,6825],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_projector.so\n",[103,6827,6828],{"class":105,"line":438},[103,6829,6830],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_properties.so\n",[103,6832,6833],{"class":105,"line":443},[103,6834,6835],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_ray_sensor.so\n",[103,6837,6838],{"class":105,"line":449},[103,6839,6840],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_state.so\n",[103,6842,6843],{"class":105,"line":454},[103,6844,6845],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_template.so\n",[103,6847,6848],{"class":105,"line":460},[103,6849,6850],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_tricycle_drive.so\n",[103,6852,6853],{"class":105,"line":465},[103,6854,6855],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_utils.so\n",[103,6857,6858],{"class":105,"line":471},[103,6859,6860],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_vacuum_gripper.so\n",[103,6862,6863],{"class":105,"line":476},[103,6864,6865],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_video.so\n",[103,6867,6868],{"class":105,"line":504},[103,6869,6870],{"class":109},"/opt/ros/humble/lib/libgazebo_ros_wheel_slip.so\n",[6872,6873,6875],"h5",{"id":6874},"运动控制插件里程计odom","运动控制插件+里程计odom",[23,6877,6878],{},"本节课通过配置两轮差速控制插件，让我们的机器人动起来",[23,6880,6881],{},[55,6882],{"alt":57,"src":6883},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1648.webp",[23,6885,6886],{},"插件介绍：",[23,6888,6889],{},"Gazebo是一个独立于ROS的软件，对外提供了丰富的API可以使用，gazebo的插件按照用途大致可以分为两种：",[6011,6891,6892,6895],{},[1086,6893,6894],{},"用于控制的插件，通过插件可以控制机器人关节运动，可以进行位置、速度、力的控制，比如我们这节课的两轮差速控制器。",[1086,6896,6897],{},"用于数据采集的插件，比如IMU传感器用于采集机器人的惯性，激光雷达用于采集机器人周围的点云信息。",[23,6899,6900],{},"当然上面两类插件功能也可以写到一个插件里，两轮差速插件（gazebo_ros_diff_drive）就是一个二合一加强版。（差速控制+odom）",[23,6902,6903],{},"两轮差速插件用于控制机器人轮子关节的位置变化，同时该插件还会获取轮子的位置以及速度的信息的反馈，根据反馈的位置信息结合运动学模型即可计算出当前机器人的位姿（里程计）。",[23,6905,6906],{},"两轮差速控制器可以将轮子的目标转速发送给Gazebo，并从Gazebo获取到实际的速度和位置。（注意：发送给Gazebo是目标速度，反馈回来的是实际速度。目标!=实际，比如轮子卡住了，无论你发什么目标速度，实际速度都是0。）",[23,6908,6909],{},"要想快速了解一个系统的功能，最直接的就是看系统的对外的输入和输出是什么？什么都不要说，看下图：",[23,6911,6912],{},[55,6913],{"alt":57,"src":6914},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1649.webp",[23,6916,6917],{},"上图就是对gazebo_ros_diff_drive的输入和输出信息的总结，可以很直观的看到该插件主要输入控制指令，主要输出里程计信息。接着小鱼带你分别认识一下输入和输出两个部分。",[23,6919,6920],{},"这个插件需要配置一系列参数如下图：",[23,6922,6923],{},"不知道你是否还记得在第七章中，小鱼对两轮差速底盘的运动学正的介绍。如果要完成底盘的正逆解和里程计的推算就必须要知道轮子的直径和间距。",[23,6925,6926],{},"同时该插件还提供了一些可以控制输出的选项，因为是仿真，所以还要告诉插件轮子对应的joint名称等信息，这样就有了下面这个参数表格：",[6928,6929,6930,6944],"table",{},[6931,6932,6933],"thead",{},[6934,6935,6936,6941],"tr",{},[6937,6938,6940],"th",{"align":6939},"left","配置项",[6937,6942,6943],{"align":6939},"含义",[6945,6946,6947,6955,6962,6969,6976,6983,6990,6997,7004,7011,7018,7025,7032],"tbody",{},[6934,6948,6949,6952],{},[6950,6951,3951],"td",{"align":6939},[6950,6953,6954],{"align":6939},"ros相关配置，包含命名空间和话题重映射等",[6934,6956,6957,6959],{},[6950,6958,4014],{"align":6939},[6950,6960,6961],{"align":6939},"数据更新速率",[6934,6963,6964,6966],{},[6950,6965,4034],{"align":6939},[6950,6967,6968],{"align":6939},"左轮关节名称",[6934,6970,6971,6973],{},[6950,6972,4049],{"align":6939},[6950,6974,6975],{"align":6939},"右轮关节名称",[6934,6977,6978,6980],{},[6950,6979,4069],{"align":6939},[6950,6981,6982],{"align":6939},"左右轮子的间距",[6934,6984,6985,6987],{},[6950,6986,4084],{"align":6939},[6950,6988,6989],{"align":6939},"轮子的直径",[6934,6991,6992,6994],{},[6950,6993,4104],{"align":6939},[6950,6995,6996],{"align":6939},"轮子最大的力矩",[6934,6998,6999,7001],{},[6950,7000,4119],{"align":6939},[6950,7002,7003],{"align":6939},"轮子最大的加速度",[6934,7005,7006,7008],{},[6950,7007,4139],{"align":6939},[6950,7009,7010],{"align":6939},"是否发布里程计",[6934,7012,7013,7015],{},[6950,7014,4154],{"align":6939},[6950,7016,7017],{"align":6939},"是否发布里程计的tf开关",[6934,7019,7020,7022],{},[6950,7021,4168],{"align":6939},[6950,7023,7024],{"align":6939},"是否发布轮子的tf数据开关",[6934,7026,7027,7029],{},[6950,7028,4183],{"align":6939},[6950,7030,7031],{"align":6939},"里程计的framed ID，最终体现在话题和TF上",[6934,7033,7034,7036],{},[6950,7035,4198],{"align":6939},[6950,7037,7038],{"align":6939},"机器人的基础frame的ID",[23,7040,7041,7042,7045,7046],{},"控制指令：两轮差速控制器默认通过订阅话题",[100,7043,7044],{},"cmd_vel","来获取目标线速度和角速度。该话题的类型为：",[100,7047,7048],{},"geometry_msgs/msg/Twist",[23,7050,7051,7052],{},"该接口里主要是一些线速度和角速度都包含在x、y、z，代表坐标系的三个方向上的对应速度。 ",[32,7053,7054],{},"（详细的接口内容请看硬件平台章节）",[23,7056,7057],{},"两轮差速控制器收到这个话题数据后将其中的角速度和线速度转换上两个轮子的转动速度发送给Gazebo。",[23,7059,7060],{},"输出的信息：",[23,7062,7063,7064,7067,7068],{},"里程计信息默认的输出话题为",[100,7065,7066],{},"odom","，其消息类型为：",[100,7069,7070],{},"nav_msgs/msg/Odometry",[23,7072,7073,7074],{},"其数据主要包含三个部分： ",[32,7075,7054],{},[1083,7077,7078,7081,7084,7087],{},[1086,7079,7080],{},"header，表示该消息发布的时间",[1086,7082,7083],{},"pose，表示当前机器人位置和朝向",[1086,7085,7086],{},"twist，表示当前机器人的线速度和角速度",[1086,7088,7089],{},"数据中还包含一个covariance，其代表协方差矩阵，后面小鱼写篇文章来介绍下，这里只需了解其含义即可。",[23,7091,7092],{},"里程计TF信息也可以输出：设为true，订阅tf话题里你就可以看到像下面的msg，建议后面配置好后，手动修改下，对比区别",[94,7094,7098],{"className":7095,"code":7096,"language":7097,"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",[100,7099,7100,7111,7118,7128,7138,7148,7158,7165,7172,7182,7192,7202,7209,7218,7227,7236],{"__ignoreMap":57},[103,7101,7102,7105,7108],{"class":105,"line":106},[103,7103,7104],{"class":170},"- ",[103,7106,7107],{"class":1191},"header",[103,7109,7110],{"class":170},":\n",[103,7112,7113,7116],{"class":105,"line":231},[103,7114,7115],{"class":1191},"    stamp",[103,7117,7110],{"class":170},[103,7119,7120,7123,7125],{"class":105,"line":259},[103,7121,7122],{"class":1191},"      sec",[103,7124,644],{"class":170},[103,7126,7127],{"class":139},"6157\n",[103,7129,7130,7133,7135],{"class":105,"line":274},[103,7131,7132],{"class":1191},"      nanosec",[103,7134,644],{"class":170},[103,7136,7137],{"class":139},"907000000\n",[103,7139,7140,7143,7145],{"class":105,"line":286},[103,7141,7142],{"class":1191},"    frame_id",[103,7144,644],{"class":170},[103,7146,7147],{"class":113},"odom\n",[103,7149,7150,7153,7155],{"class":105,"line":305},[103,7151,7152],{"class":1191},"  child_frame_id",[103,7154,644],{"class":170},[103,7156,7157],{"class":113},"base_footprint\n",[103,7159,7160,7163],{"class":105,"line":312},[103,7161,7162],{"class":1191},"  transform",[103,7164,7110],{"class":170},[103,7166,7167,7170],{"class":105,"line":327},[103,7168,7169],{"class":1191},"    translation",[103,7171,7110],{"class":170},[103,7173,7174,7177,7179],{"class":105,"line":348},[103,7175,7176],{"class":1191},"      x",[103,7178,644],{"class":170},[103,7180,7181],{"class":139},"0.0005557960241049835\n",[103,7183,7184,7187,7189],{"class":105,"line":359},[103,7185,7186],{"class":139},"      y",[103,7188,644],{"class":170},[103,7190,7191],{"class":139},"-0.0007350446303238693\n",[103,7193,7194,7197,7199],{"class":105,"line":368},[103,7195,7196],{"class":1191},"      z",[103,7198,644],{"class":170},[103,7200,7201],{"class":139},"0.01599968753145574\n",[103,7203,7204,7207],{"class":105,"line":383},[103,7205,7206],{"class":1191},"    rotation",[103,7208,7110],{"class":170},[103,7210,7211,7213,7215],{"class":105,"line":388},[103,7212,7176],{"class":1191},[103,7214,644],{"class":170},[103,7216,7217],{"class":139},"4.691143395208505e-07\n",[103,7219,7220,7222,7224],{"class":105,"line":394},[103,7221,7186],{"class":139},[103,7223,644],{"class":170},[103,7225,7226],{"class":139},"7.115496626557812e-06\n",[103,7228,7229,7231,7233],{"class":105,"line":399},[103,7230,7196],{"class":1191},[103,7232,644],{"class":170},[103,7234,7235],{"class":139},"-0.018531475772549166\n",[103,7237,7238,7241,7243],{"class":105,"line":405},[103,7239,7240],{"class":1191},"      w",[103,7242,644],{"class":170},[103,7244,7245],{"class":139},"0.9998282774331005\n",[23,7247,7248],{},"轮子TF信息也可以输出：设为true，订阅tf话题里你就可以看到像下面的msg，建议后面配置好后，手动修改下，对比区别",[94,7250,7252],{"className":7095,"code":7251,"language":7097,"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",[100,7253,7254,7262,7268,7276,7285,7294,7303,7309,7315,7324,7333,7342,7348,7357,7366,7374,7383,7391,7397,7405,7413,7421,7430,7436,7442,7450,7459,7467,7473,7481,7490,7498],{"__ignoreMap":57},[103,7255,7256,7258,7260],{"class":105,"line":106},[103,7257,7104],{"class":170},[103,7259,7107],{"class":1191},[103,7261,7110],{"class":170},[103,7263,7264,7266],{"class":105,"line":231},[103,7265,7115],{"class":1191},[103,7267,7110],{"class":170},[103,7269,7270,7272,7274],{"class":105,"line":259},[103,7271,7122],{"class":1191},[103,7273,644],{"class":170},[103,7275,7127],{"class":139},[103,7277,7278,7280,7282],{"class":105,"line":274},[103,7279,7132],{"class":1191},[103,7281,644],{"class":170},[103,7283,7284],{"class":139},"941000000\n",[103,7286,7287,7289,7291],{"class":105,"line":286},[103,7288,7142],{"class":1191},[103,7290,644],{"class":170},[103,7292,7293],{"class":113},"base_link\n",[103,7295,7296,7298,7300],{"class":105,"line":305},[103,7297,7152],{"class":1191},[103,7299,644],{"class":170},[103,7301,7302],{"class":113},"left_wheel_link\n",[103,7304,7305,7307],{"class":105,"line":312},[103,7306,7162],{"class":1191},[103,7308,7110],{"class":170},[103,7310,7311,7313],{"class":105,"line":327},[103,7312,7169],{"class":1191},[103,7314,7110],{"class":170},[103,7316,7317,7319,7321],{"class":105,"line":348},[103,7318,7176],{"class":1191},[103,7320,644],{"class":170},[103,7322,7323],{"class":139},"-0.02\n",[103,7325,7326,7328,7330],{"class":105,"line":359},[103,7327,7186],{"class":139},[103,7329,644],{"class":170},[103,7331,7332],{"class":139},"0.1\n",[103,7334,7335,7337,7339],{"class":105,"line":368},[103,7336,7196],{"class":1191},[103,7338,644],{"class":170},[103,7340,7341],{"class":139},"-0.06\n",[103,7343,7344,7346],{"class":105,"line":383},[103,7345,7206],{"class":1191},[103,7347,7110],{"class":170},[103,7349,7350,7352,7354],{"class":105,"line":388},[103,7351,7176],{"class":1191},[103,7353,644],{"class":170},[103,7355,7356],{"class":139},"0.0\n",[103,7358,7359,7361,7363],{"class":105,"line":394},[103,7360,7186],{"class":139},[103,7362,644],{"class":170},[103,7364,7365],{"class":139},"0.049519025127821005\n",[103,7367,7368,7370,7372],{"class":105,"line":399},[103,7369,7196],{"class":1191},[103,7371,644],{"class":170},[103,7373,7356],{"class":139},[103,7375,7376,7378,7380],{"class":105,"line":405},[103,7377,7240],{"class":1191},[103,7379,644],{"class":170},[103,7381,7382],{"class":139},"0.9987731805321918\n",[103,7384,7385,7387,7389],{"class":105,"line":410},[103,7386,7104],{"class":170},[103,7388,7107],{"class":1191},[103,7390,7110],{"class":170},[103,7392,7393,7395],{"class":105,"line":416},[103,7394,7115],{"class":1191},[103,7396,7110],{"class":170},[103,7398,7399,7401,7403],{"class":105,"line":421},[103,7400,7122],{"class":1191},[103,7402,644],{"class":170},[103,7404,7127],{"class":139},[103,7406,7407,7409,7411],{"class":105,"line":427},[103,7408,7132],{"class":1191},[103,7410,644],{"class":170},[103,7412,7284],{"class":139},[103,7414,7415,7417,7419],{"class":105,"line":432},[103,7416,7142],{"class":1191},[103,7418,644],{"class":170},[103,7420,7293],{"class":113},[103,7422,7423,7425,7427],{"class":105,"line":438},[103,7424,7152],{"class":1191},[103,7426,644],{"class":170},[103,7428,7429],{"class":113},"right_wheel_link\n",[103,7431,7432,7434],{"class":105,"line":443},[103,7433,7162],{"class":1191},[103,7435,7110],{"class":170},[103,7437,7438,7440],{"class":105,"line":449},[103,7439,7169],{"class":1191},[103,7441,7110],{"class":170},[103,7443,7444,7446,7448],{"class":105,"line":454},[103,7445,7176],{"class":1191},[103,7447,644],{"class":170},[103,7449,7323],{"class":139},[103,7451,7452,7454,7456],{"class":105,"line":460},[103,7453,7186],{"class":139},[103,7455,644],{"class":170},[103,7457,7458],{"class":139},"-0.1\n",[103,7460,7461,7463,7465],{"class":105,"line":465},[103,7462,7196],{"class":1191},[103,7464,644],{"class":170},[103,7466,7341],{"class":139},[103,7468,7469,7471],{"class":105,"line":471},[103,7470,7206],{"class":1191},[103,7472,7110],{"class":170},[103,7474,7475,7477,7479],{"class":105,"line":476},[103,7476,7176],{"class":1191},[103,7478,644],{"class":170},[103,7480,7356],{"class":139},[103,7482,7483,7485,7487],{"class":105,"line":504},[103,7484,7186],{"class":139},[103,7486,644],{"class":170},[103,7488,7489],{"class":139},"-0.0663387077034509\n",[103,7491,7492,7494,7496],{"class":105,"line":530},[103,7493,7196],{"class":1191},[103,7495,644],{"class":170},[103,7497,7356],{"class":139},[103,7499,7500,7502,7504],{"class":105,"line":574},[103,7501,7240],{"class":1191},[103,7503,644],{"class":170},[103,7505,7506],{"class":139},"0.9977971616817898\n",[23,7508,7509],{},"咱们之前下载的那个鱼香ROS的fishbot的urdf已经包含了差速插件的内容，如下：",[23,7511,7512,7513,7516,7517,7520,7521,7523,7524,7526,7527,7529],{},"因为是给Gazebo的插件，所以在",[100,7514,7515],{},"URDF","中，我们需要使用",[100,7518,7519],{},"\u003Cgazebo>","进行配置，因为是要给",[100,7522,136],{},"配置插件，所有要在",[100,7525,136],{},"标签下添加",[100,7528,3926],{},"子插件。",[94,7531,7533],{"className":1179,"code":7532,"language":1181,"meta":57,"style":57},"  \u003Cgazebo>\n    \u003Cplugin name='diff_drive' filename='libgazebo_ros_diff_drive.so'>\n          \u003Cros>\n            \u003Cnamespace>/\u003C/namespace>\n            \u003Cremapping>cmd_vel:=cmd_vel\u003C/remapping>\n            \u003Cremapping>odom:=odom\u003C/remapping>\n          \u003C/ros>\n          \u003Cupdate_rate>30\u003C/update_rate>\n\n          \u003Cleft_joint>left_wheel_joint\u003C/left_joint>\n          \u003Cright_joint>right_wheel_joint\u003C/right_joint>\n\n          \u003Cwheel_separation>0.2\u003C/wheel_separation>\n          \u003Cwheel_diameter>0.065\u003C/wheel_diameter>\n\n          \u003Cmax_wheel_torque>20\u003C/max_wheel_torque>\n          \u003Cmax_wheel_acceleration>1.0\u003C/max_wheel_acceleration>\n\n          \u003Cpublish_odom>true\u003C/publish_odom>\n          \u003Cpublish_odom_tf>true\u003C/publish_odom_tf>\n          \u003Cpublish_wheel_tf>true\u003C/publish_wheel_tf>\n          \u003Codometry_frame>odom\u003C/odometry_frame>\n          \u003Crobot_base_frame>base_footprint\u003C/robot_base_frame>\n      \u003C/plugin>\n    \u003C/gazebo> \n",[100,7534,7535,7543,7563,7571,7583,7595,7607,7615,7627,7631,7643,7655,7659,7671,7683,7687,7699,7711,7715,7727,7739,7751,7763,7775,7783],{"__ignoreMap":57},[103,7536,7537,7539,7541],{"class":105,"line":106},[103,7538,1230],{"class":170},[103,7540,136],{"class":1191},[103,7542,1221],{"class":170},[103,7544,7545,7547,7549,7551,7553,7555,7557,7559,7561],{"class":105,"line":231},[103,7546,1275],{"class":170},[103,7548,3926],{"class":1191},[103,7550,1213],{"class":109},[103,7552,563],{"class":170},[103,7554,3933],{"class":113},[103,7556,3936],{"class":109},[103,7558,563],{"class":170},[103,7560,3941],{"class":113},[103,7562,1221],{"class":170},[103,7564,7565,7567,7569],{"class":105,"line":259},[103,7566,1360],{"class":170},[103,7568,3951],{"class":1191},[103,7570,1221],{"class":170},[103,7572,7573,7575,7577,7579,7581],{"class":105,"line":274},[103,7574,2558],{"class":170},[103,7576,3961],{"class":1191},[103,7578,3964],{"class":170},[103,7580,3961],{"class":1191},[103,7582,1221],{"class":170},[103,7584,7585,7587,7589,7591,7593],{"class":105,"line":286},[103,7586,2558],{"class":170},[103,7588,3976],{"class":1191},[103,7590,3979],{"class":170},[103,7592,3976],{"class":1191},[103,7594,1221],{"class":170},[103,7596,7597,7599,7601,7603,7605],{"class":105,"line":305},[103,7598,2558],{"class":170},[103,7600,3976],{"class":1191},[103,7602,3993],{"class":170},[103,7604,3976],{"class":1191},[103,7606,1221],{"class":170},[103,7608,7609,7611,7613],{"class":105,"line":312},[103,7610,2574],{"class":170},[103,7612,3951],{"class":1191},[103,7614,1221],{"class":170},[103,7616,7617,7619,7621,7623,7625],{"class":105,"line":327},[103,7618,1360],{"class":170},[103,7620,4014],{"class":1191},[103,7622,4017],{"class":170},[103,7624,4014],{"class":1191},[103,7626,1221],{"class":170},[103,7628,7629],{"class":105,"line":348},[103,7630,309],{"emptyLinePlaceholder":308},[103,7632,7633,7635,7637,7639,7641],{"class":105,"line":359},[103,7634,1360],{"class":170},[103,7636,4034],{"class":1191},[103,7638,4037],{"class":170},[103,7640,4034],{"class":1191},[103,7642,1221],{"class":170},[103,7644,7645,7647,7649,7651,7653],{"class":105,"line":368},[103,7646,1360],{"class":170},[103,7648,4049],{"class":1191},[103,7650,4052],{"class":170},[103,7652,4049],{"class":1191},[103,7654,1221],{"class":170},[103,7656,7657],{"class":105,"line":383},[103,7658,309],{"emptyLinePlaceholder":308},[103,7660,7661,7663,7665,7667,7669],{"class":105,"line":388},[103,7662,1360],{"class":170},[103,7664,4069],{"class":1191},[103,7666,4072],{"class":170},[103,7668,4069],{"class":1191},[103,7670,1221],{"class":170},[103,7672,7673,7675,7677,7679,7681],{"class":105,"line":394},[103,7674,1360],{"class":170},[103,7676,4084],{"class":1191},[103,7678,4087],{"class":170},[103,7680,4084],{"class":1191},[103,7682,1221],{"class":170},[103,7684,7685],{"class":105,"line":399},[103,7686,309],{"emptyLinePlaceholder":308},[103,7688,7689,7691,7693,7695,7697],{"class":105,"line":405},[103,7690,1360],{"class":170},[103,7692,4104],{"class":1191},[103,7694,4107],{"class":170},[103,7696,4104],{"class":1191},[103,7698,1221],{"class":170},[103,7700,7701,7703,7705,7707,7709],{"class":105,"line":410},[103,7702,1360],{"class":170},[103,7704,4119],{"class":1191},[103,7706,4122],{"class":170},[103,7708,4119],{"class":1191},[103,7710,1221],{"class":170},[103,7712,7713],{"class":105,"line":416},[103,7714,309],{"emptyLinePlaceholder":308},[103,7716,7717,7719,7721,7723,7725],{"class":105,"line":421},[103,7718,1360],{"class":170},[103,7720,4139],{"class":1191},[103,7722,4142],{"class":170},[103,7724,4139],{"class":1191},[103,7726,1221],{"class":170},[103,7728,7729,7731,7733,7735,7737],{"class":105,"line":427},[103,7730,1360],{"class":170},[103,7732,4154],{"class":1191},[103,7734,4142],{"class":170},[103,7736,4154],{"class":1191},[103,7738,1221],{"class":170},[103,7740,7741,7743,7745,7747,7749],{"class":105,"line":432},[103,7742,1360],{"class":170},[103,7744,4168],{"class":1191},[103,7746,4142],{"class":170},[103,7748,4168],{"class":1191},[103,7750,1221],{"class":170},[103,7752,7753,7755,7757,7759,7761],{"class":105,"line":438},[103,7754,1360],{"class":170},[103,7756,4183],{"class":1191},[103,7758,4186],{"class":170},[103,7760,4183],{"class":1191},[103,7762,1221],{"class":170},[103,7764,7765,7767,7769,7771,7773],{"class":105,"line":443},[103,7766,1360],{"class":170},[103,7768,4198],{"class":1191},[103,7770,4201],{"class":170},[103,7772,4198],{"class":1191},[103,7774,1221],{"class":170},[103,7776,7777,7779,7781],{"class":105,"line":449},[103,7778,1427],{"class":170},[103,7780,3926],{"class":1191},[103,7782,1221],{"class":170},[103,7784,7785,7787,7789],{"class":105,"line":454},[103,7786,1479],{"class":170},[103,7788,136],{"class":1191},[103,7790,1221],{"class":170},[23,7792,7793],{},"编译一下：",[94,7795,7797],{"className":6018,"code":7796,"language":6020,"meta":57,"style":57},"colcon build\nsource install/setup.bash\nros2 launch fishbot_description gazebo.launch.py\n",[100,7798,7799,7804,7812],{"__ignoreMap":57},[103,7800,7801],{"class":105,"line":106},[103,7802,7803],{"class":170},"colcon build\n",[103,7805,7806,7808,7810],{"class":105,"line":231},[103,7807,6652],{"class":170},[103,7809,188],{"class":166},[103,7811,6657],{"class":170},[103,7813,7814],{"class":105,"line":259},[103,7815,6662],{"class":170},[23,7817,7818],{},"然后可以看看下面这俩命令：",[94,7820,7822],{"className":6018,"code":7821,"language":6020,"meta":57,"style":57},"ros2 node list\nros2 topic list\n",[100,7823,7824,7832],{"__ignoreMap":57},[103,7825,7826,7829],{"class":105,"line":106},[103,7827,7828],{"class":170},"ros2 node ",[103,7830,7831],{"class":139},"list\n",[103,7833,7834,7837],{"class":105,"line":231},[103,7835,7836],{"class":170},"ros2 topic ",[103,7838,7831],{"class":139},[23,7840,7841],{},[55,7842],{"alt":57,"src":7843},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1650.webp",[23,7845,7846],{},"可以看到了我们插件订阅的的/cmd_vel和发布的/odom了。",[23,7848,7849],{},"然后我们可以通过teleop-twist-keyboard节点发布cmd_vel来控制fishbot。",[94,7851,7853],{"className":6018,"code":7852,"language":6020,"meta":57,"style":57},"sudo apt install ros-humble-teleop-twist-keyboard\n",[100,7854,7855],{"__ignoreMap":57},[103,7856,7857,7860,7862,7864,7866,7869,7871,7874,7876],{"class":105,"line":106},[103,7858,7859],{"class":170},"sudo apt install ros",[103,7861,174],{"class":166},[103,7863,6697],{"class":170},[103,7865,174],{"class":166},[103,7867,7868],{"class":170},"teleop",[103,7870,174],{"class":166},[103,7872,7873],{"class":170},"twist",[103,7875,174],{"class":166},[103,7877,7878],{"class":170},"keyboard\n",[23,7880,7881],{},"使用下方节点来控制",[94,7883,7885],{"className":6018,"code":7884,"language":6020,"meta":57,"style":57},"ros2 run teleop_twist_keyboard teleop_twist_keyboard\n",[100,7886,7887],{"__ignoreMap":57},[103,7888,7889],{"class":105,"line":106},[103,7890,7884],{"class":170},[23,7892,7893],{},"接着尝试使用来控制机器人运动",[94,7895,7897],{"className":6018,"code":7896,"language":6020,"meta":57,"style":57},"   U    I    O\n   J    K    L\n   M    \u003C    >\n",[100,7898,7899,7904,7909],{"__ignoreMap":57},[103,7900,7901],{"class":105,"line":106},[103,7902,7903],{"class":170},"   U    I    O\n",[103,7905,7906],{"class":105,"line":231},[103,7907,7908],{"class":170},"   J    K    L\n",[103,7910,7911,7914,7916],{"class":105,"line":259},[103,7912,7913],{"class":170},"   M    ",[103,7915,1207],{"class":166},[103,7917,7918],{"class":166},"    >\n",[23,7920,7921],{},"点一下，你就能看到fishbot在Gazebo中飞速的移动。接着打开终端，打印一下odom话题和tf话题，移动机器人观察数据变化。",[23,7923,7924],{},"也可以使用rqt显示速度数据",[94,7926,7928],{"className":6018,"code":7927,"language":6020,"meta":57,"style":57},"rqt\n",[100,7929,7930],{"__ignoreMap":57},[103,7931,7932],{"class":105,"line":106},[103,7933,7927],{"class":170},[23,7935,7936],{},"选择Plugin->Visualization->Plot",[23,7938,7939],{},[55,7940],{"alt":57,"src":7941},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1651.webp",[23,7943,7944,7945,7948,7949,7952],{},"在上方Topic输入",[100,7946,7947],{},"/cmd_vel/linear/x","，再输入",[100,7950,7951],{},"/cmd_vel/angular/z","，然后用键盘控制机器人移动。",[23,7954,7955],{},[55,7956],{"alt":57,"src":7957},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1652.webp",[23,7959,7960],{},[55,7961],{"alt":57,"src":7962},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1653.webp",[23,7964,7965],{},"也可以在rviz2里看odom",[94,7967,7969],{"className":6018,"code":7968,"language":6020,"meta":57,"style":57},"rviz2\n",[100,7970,7971],{"__ignoreMap":57},[103,7972,7973],{"class":105,"line":106},[103,7974,7968],{"class":170},[23,7976,7977],{},"点键盘控制节点按U，让机器人转圈。",[23,7979,7980],{},[55,7981],{"alt":57,"src":7982},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1654.webp",[23,7984,7985],{},"虽然机器人的轨迹已经在RVIZ中显示出来了，但是并没有机器人的模型，也看不到轮子的转动，咱们来带你一起解决这个问题。",[23,7987,7988,7989,7992,7993,7995,7996,7998],{},"前面咱们介绍过，要发布机器人模型我们所使用的节点是",[100,7990,7991],{},"robot_state_publisher",",所以我们在",[100,7994,6005],{},"中加入这个节点，同时再加上rviz2的启动节点，最终的",[100,7997,6005],{},"内容如下：",[94,8000,8002],{"className":6018,"code":8001,"language":6020,"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/urdf/{urdf_name}')\n\n    # gazebo_world_path = os.path.join(pkg_share, 'world/fishbot.world')\n\n    # Start Gazebo server\n\n    # start_gazebo_cmd = ExecuteProcess(\n\n    #     cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so',gazebo_world_path],\n\n    #     output='screen')\n    start_gazebo_cmd = ExecuteProcess(\n        cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so'],\n        output='screen')\n\n    # Launch the robot\n    spawn_entity_cmd = Node(\n        package='gazebo_ros', \n        executable='spawn_entity.py',\n        arguments=['-entity', robot_name_in_model,  '-file', urdf_model_path ], output='screen')\n\n    # Start Robot State publisher\n    start_robot_state_publisher_cmd = Node(\n        package='robot_state_publisher',\n        executable='robot_state_publisher',\n        arguments=[urdf_model_path]\n    )\n\n    # Launch RViz\n    start_rviz_cmd = Node(\n        package='rviz2',\n        executable='rviz2',\n        name='rviz2',\n        output='screen',\n\n        # arguments=['-d', default_rviz_config_path]\n        )\n\n    return LaunchDescription([start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[100,8003,8004,8014,8024,8028,8032,8042,8046,8050,8054,8058,8062,8066,8070,8074,8078,8082,8086,8090,8094,8098,8102,8106,8110,8114,8118,8122,8126,8130,8134,8138,8142,8146,8150,8154,8164,8170,8174,8182,8190,8198,8206,8210,8232,8254,8258,8263,8267,8271,8275,8280,8284,8289,8293,8298,8306,8338,8348,8352,8356,8364,8374,8384,8408,8412,8417,8426,8437,8447,8456,8461,8465,8470,8479,8490,8500,8511,8521,8525,8530,8535,8539],{"__ignoreMap":57},[103,8005,8006,8008,8010,8012],{"class":105,"line":106},[103,8007,933],{"class":166},[103,8009,6194],{"class":170},[103,8011,6197],{"class":166},[103,8013,6200],{"class":170},[103,8015,8016,8018,8020,8022],{"class":105,"line":231},[103,8017,933],{"class":166},[103,8019,6207],{"class":170},[103,8021,6197],{"class":166},[103,8023,6212],{"class":170},[103,8025,8026],{"class":105,"line":259},[103,8027,309],{"emptyLinePlaceholder":308},[103,8029,8030],{"class":105,"line":274},[103,8031,6221],{"class":227},[103,8033,8034,8036,8038,8040],{"class":105,"line":286},[103,8035,933],{"class":166},[103,8037,6228],{"class":170},[103,8039,6197],{"class":166},[103,8041,6233],{"class":170},[103,8043,8044],{"class":105,"line":305},[103,8045,309],{"emptyLinePlaceholder":308},[103,8047,8048],{"class":105,"line":312},[103,8049,6242],{"class":227},[103,8051,8052],{"class":105,"line":327},[103,8053,309],{"emptyLinePlaceholder":308},[103,8055,8056],{"class":105,"line":348},[103,8057,6251],{"class":227},[103,8059,8060],{"class":105,"line":359},[103,8061,309],{"emptyLinePlaceholder":308},[103,8063,8064],{"class":105,"line":368},[103,8065,6260],{"class":227},[103,8067,8068],{"class":105,"line":383},[103,8069,309],{"emptyLinePlaceholder":308},[103,8071,8072],{"class":105,"line":388},[103,8073,6269],{"class":227},[103,8075,8076],{"class":105,"line":394},[103,8077,309],{"emptyLinePlaceholder":308},[103,8079,8080],{"class":105,"line":399},[103,8081,6278],{"class":227},[103,8083,8084],{"class":105,"line":405},[103,8085,309],{"emptyLinePlaceholder":308},[103,8087,8088],{"class":105,"line":410},[103,8089,6287],{"class":227},[103,8091,8092],{"class":105,"line":416},[103,8093,309],{"emptyLinePlaceholder":308},[103,8095,8096],{"class":105,"line":421},[103,8097,6296],{"class":227},[103,8099,8100],{"class":105,"line":427},[103,8101,309],{"emptyLinePlaceholder":308},[103,8103,8104],{"class":105,"line":432},[103,8105,6305],{"class":227},[103,8107,8108],{"class":105,"line":438},[103,8109,309],{"emptyLinePlaceholder":308},[103,8111,8112],{"class":105,"line":443},[103,8113,6314],{"class":227},[103,8115,8116],{"class":105,"line":449},[103,8117,309],{"emptyLinePlaceholder":308},[103,8119,8120],{"class":105,"line":454},[103,8121,6323],{"class":227},[103,8123,8124],{"class":105,"line":460},[103,8125,309],{"emptyLinePlaceholder":308},[103,8127,8128],{"class":105,"line":465},[103,8129,6332],{"class":227},[103,8131,8132],{"class":105,"line":471},[103,8133,309],{"emptyLinePlaceholder":308},[103,8135,8136],{"class":105,"line":476},[103,8137,6341],{"class":227},[103,8139,8140],{"class":105,"line":504},[103,8141,309],{"emptyLinePlaceholder":308},[103,8143,8144],{"class":105,"line":530},[103,8145,6350],{"class":227},[103,8147,8148],{"class":105,"line":574},[103,8149,309],{"emptyLinePlaceholder":308},[103,8151,8152],{"class":105,"line":579},[103,8153,6359],{"class":227},[103,8155,8156,8158,8160,8162],{"class":105,"line":590},[103,8157,933],{"class":166},[103,8159,6366],{"class":170},[103,8161,6197],{"class":166},[103,8163,6371],{"class":170},[103,8165,8166,8168],{"class":105,"line":635},[103,8167,6197],{"class":166},[103,8169,6378],{"class":170},[103,8171,8172],{"class":105,"line":665},[103,8173,309],{"emptyLinePlaceholder":308},[103,8175,8176,8178,8180],{"class":105,"line":677},[103,8177,6387],{"class":166},[103,8179,6390],{"class":109},[103,8181,6393],{"class":170},[103,8183,8184,8186,8188],{"class":105,"line":799},[103,8185,6398],{"class":170},[103,8187,563],{"class":166},[103,8189,6403],{"class":113},[103,8191,8192,8194,8196],{"class":105,"line":805},[103,8193,6408],{"class":170},[103,8195,563],{"class":166},[103,8197,6413],{"class":113},[103,8199,8200,8202,8204],{"class":105,"line":817},[103,8201,6418],{"class":170},[103,8203,563],{"class":166},[103,8205,6423],{"class":113},[103,8207,8208],{"class":105,"line":823},[103,8209,309],{"emptyLinePlaceholder":308},[103,8211,8212,8214,8216,8218,8220,8222,8224,8226,8228,8230],{"class":105,"line":829},[103,8213,6432],{"class":170},[103,8215,563],{"class":166},[103,8217,6437],{"class":170},[103,8219,6440],{"class":166},[103,8221,6443],{"class":113},[103,8223,6446],{"class":139},[103,8225,6449],{"class":170},[103,8227,6452],{"class":139},[103,8229,6443],{"class":113},[103,8231,5982],{"class":170},[103,8233,8234,8236,8238,8240,8242,8244,8246,8248,8250,8252],{"class":105,"line":835},[103,8235,6461],{"class":170},[103,8237,563],{"class":166},[103,8239,6466],{"class":170},[103,8241,6440],{"class":166},[103,8243,6471],{"class":113},[103,8245,6446],{"class":139},[103,8247,6476],{"class":170},[103,8249,6452],{"class":139},[103,8251,6481],{"class":113},[103,8253,5982],{"class":170},[103,8255,8256],{"class":105,"line":841},[103,8257,309],{"emptyLinePlaceholder":308},[103,8259,8260],{"class":105,"line":864},[103,8261,8262],{"class":227},"    # gazebo_world_path = os.path.join(pkg_share, 'world/fishbot.world')\n",[103,8264,8265],{"class":105,"line":907},[103,8266,309],{"emptyLinePlaceholder":308},[103,8268,8269],{"class":105,"line":944},[103,8270,6492],{"class":227},[103,8272,8273],{"class":105,"line":949},[103,8274,309],{"emptyLinePlaceholder":308},[103,8276,8277],{"class":105,"line":973},[103,8278,8279],{"class":227},"    # start_gazebo_cmd = ExecuteProcess(\n",[103,8281,8282],{"class":105,"line":997},[103,8283,309],{"emptyLinePlaceholder":308},[103,8285,8286],{"class":105,"line":1877},[103,8287,8288],{"class":227},"    #     cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so',gazebo_world_path],\n",[103,8290,8291],{"class":105,"line":1886},[103,8292,309],{"emptyLinePlaceholder":308},[103,8294,8295],{"class":105,"line":1901},[103,8296,8297],{"class":227},"    #     output='screen')\n",[103,8299,8300,8302,8304],{"class":105,"line":1916},[103,8301,6497],{"class":170},[103,8303,563],{"class":166},[103,8305,6502],{"class":170},[103,8307,8308,8310,8312,8314,8316,8318,8320,8322,8324,8326,8328,8330,8332,8334,8336],{"class":105,"line":1925},[103,8309,6033],{"class":6032},[103,8311,563],{"class":166},[103,8313,6038],{"class":170},[103,8315,6041],{"class":113},[103,8317,6044],{"class":170},[103,8319,6047],{"class":113},[103,8321,6050],{"class":170},[103,8323,6053],{"class":113},[103,8325,6044],{"class":170},[103,8327,6058],{"class":113},[103,8329,6044],{"class":170},[103,8331,6053],{"class":113},[103,8333,6044],{"class":170},[103,8335,6067],{"class":113},[103,8337,6535],{"class":170},[103,8339,8340,8342,8344,8346],{"class":105,"line":1934},[103,8341,6075],{"class":6032},[103,8343,563],{"class":166},[103,8345,6080],{"class":113},[103,8347,5982],{"class":170},[103,8349,8350],{"class":105,"line":1943},[103,8351,309],{"emptyLinePlaceholder":308},[103,8353,8354],{"class":105,"line":1959},[103,8355,6554],{"class":227},[103,8357,8358,8360,8362],{"class":105,"line":2007},[103,8359,6559],{"class":170},[103,8361,563],{"class":166},[103,8363,6109],{"class":170},[103,8365,8366,8368,8370,8372],{"class":105,"line":2016},[103,8367,6568],{"class":6032},[103,8369,563],{"class":166},[103,8371,6119],{"class":113},[103,8373,6122],{"class":170},[103,8375,8376,8378,8380,8382],{"class":105,"line":2025},[103,8377,6579],{"class":6032},[103,8379,563],{"class":166},[103,8381,6132],{"class":113},[103,8383,6135],{"class":170},[103,8385,8386,8388,8390,8392,8394,8396,8398,8400,8402,8404,8406],{"class":105,"line":2030},[103,8387,6590],{"class":6032},[103,8389,563],{"class":166},[103,8391,6038],{"class":170},[103,8393,6147],{"class":113},[103,8395,6150],{"class":170},[103,8397,6153],{"class":113},[103,8399,6156],{"class":170},[103,8401,6159],{"class":6032},[103,8403,563],{"class":166},[103,8405,6080],{"class":113},[103,8407,5982],{"class":170},[103,8409,8410],{"class":105,"line":2052},[103,8411,309],{"emptyLinePlaceholder":308},[103,8413,8414],{"class":105,"line":2068},[103,8415,8416],{"class":227},"    # Start Robot State publisher\n",[103,8418,8419,8422,8424],{"class":105,"line":2083},[103,8420,8421],{"class":170},"    start_robot_state_publisher_cmd ",[103,8423,563],{"class":166},[103,8425,6109],{"class":170},[103,8427,8428,8430,8432,8435],{"class":105,"line":2099},[103,8429,6568],{"class":6032},[103,8431,563],{"class":166},[103,8433,8434],{"class":113},"'robot_state_publisher'",[103,8436,6135],{"class":170},[103,8438,8439,8441,8443,8445],{"class":105,"line":2108},[103,8440,6579],{"class":6032},[103,8442,563],{"class":166},[103,8444,8434],{"class":113},[103,8446,6135],{"class":170},[103,8448,8449,8451,8453],{"class":105,"line":2113},[103,8450,6590],{"class":6032},[103,8452,563],{"class":166},[103,8454,8455],{"class":170},"[urdf_model_path]\n",[103,8457,8458],{"class":105,"line":2129},[103,8459,8460],{"class":170},"    )\n",[103,8462,8463],{"class":105,"line":2138},[103,8464,309],{"emptyLinePlaceholder":308},[103,8466,8467],{"class":105,"line":2159},[103,8468,8469],{"class":227},"    # Launch RViz\n",[103,8471,8472,8475,8477],{"class":105,"line":2168},[103,8473,8474],{"class":170},"    start_rviz_cmd ",[103,8476,563],{"class":166},[103,8478,6109],{"class":170},[103,8480,8481,8483,8485,8488],{"class":105,"line":2187},[103,8482,6568],{"class":6032},[103,8484,563],{"class":166},[103,8486,8487],{"class":113},"'rviz2'",[103,8489,6135],{"class":170},[103,8491,8492,8494,8496,8498],{"class":105,"line":2196},[103,8493,6579],{"class":6032},[103,8495,563],{"class":166},[103,8497,8487],{"class":113},[103,8499,6135],{"class":170},[103,8501,8502,8505,8507,8509],{"class":105,"line":2205},[103,8503,8504],{"class":6032},"        name",[103,8506,563],{"class":166},[103,8508,8487],{"class":113},[103,8510,6135],{"class":170},[103,8512,8513,8515,8517,8519],{"class":105,"line":2214},[103,8514,6075],{"class":6032},[103,8516,563],{"class":166},[103,8518,6080],{"class":113},[103,8520,6135],{"class":170},[103,8522,8523],{"class":105,"line":2235},[103,8524,309],{"emptyLinePlaceholder":308},[103,8526,8527],{"class":105,"line":2244},[103,8528,8529],{"class":227},"        # arguments=['-d', default_rviz_config_path]\n",[103,8531,8532],{"class":105,"line":2259},[103,8533,8534],{"class":170},"        )\n",[103,8536,8537],{"class":105,"line":2268},[103,8538,309],{"emptyLinePlaceholder":308},[103,8540,8541,8543],{"class":105,"line":2277},[103,8542,6619],{"class":166},[103,8544,8545],{"class":170}," LaunchDescription([start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[23,8547,8548],{},"保存编译启动",[94,8550,8552],{"className":6018,"code":8551,"language":6020,"meta":57,"style":57},"colcon build\nros2 launch fishbot_description gazebo.launch.py\n",[100,8553,8554,8558],{"__ignoreMap":57},[103,8555,8556],{"class":105,"line":106},[103,8557,7803],{"class":170},[103,8559,8560],{"class":105,"line":231},[103,8561,6662],{"class":170},[23,8563,8564],{},"这样rviz2里就有模型了。",[23,8566,8567],{},[55,8568],{"alt":57,"src":8569},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1655.webp",[23,8571,8572],{},"可以保存下rviz2的配置",[23,8574,8575],{},[55,8576],{"alt":57,"src":8577},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1656.webp",[23,8579,8580],{},[55,8581],{"alt":57,"src":8582},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1657.webp",[23,8584,8585],{},"然后在launch里添加上rviz2的路径配置：",[94,8587,8589],{"className":6018,"code":8588,"language":6020,"meta":57,"style":57},"    default_rviz_config_path = os.path.join(pkg_share, 'rviz/rviz2.rviz')\n\n    # Launch RViz\n    start_rviz_cmd = Node(\n        package='rviz2',\n        executable='rviz2',\n        name='rviz2',\n        output='screen',\n        arguments=['-d', default_rviz_config_path]\n        )\n",[100,8590,8591,8605,8609,8613,8621,8631,8641,8651,8661,8675],{"__ignoreMap":57},[103,8592,8593,8596,8598,8600,8603],{"class":105,"line":106},[103,8594,8595],{"class":170},"    default_rviz_config_path ",[103,8597,563],{"class":166},[103,8599,6466],{"class":170},[103,8601,8602],{"class":113},"'rviz/rviz2.rviz'",[103,8604,5982],{"class":170},[103,8606,8607],{"class":105,"line":231},[103,8608,309],{"emptyLinePlaceholder":308},[103,8610,8611],{"class":105,"line":259},[103,8612,8469],{"class":227},[103,8614,8615,8617,8619],{"class":105,"line":274},[103,8616,8474],{"class":170},[103,8618,563],{"class":166},[103,8620,6109],{"class":170},[103,8622,8623,8625,8627,8629],{"class":105,"line":286},[103,8624,6568],{"class":6032},[103,8626,563],{"class":166},[103,8628,8487],{"class":113},[103,8630,6135],{"class":170},[103,8632,8633,8635,8637,8639],{"class":105,"line":305},[103,8634,6579],{"class":6032},[103,8636,563],{"class":166},[103,8638,8487],{"class":113},[103,8640,6135],{"class":170},[103,8642,8643,8645,8647,8649],{"class":105,"line":312},[103,8644,8504],{"class":6032},[103,8646,563],{"class":166},[103,8648,8487],{"class":113},[103,8650,6135],{"class":170},[103,8652,8653,8655,8657,8659],{"class":105,"line":327},[103,8654,6075],{"class":6032},[103,8656,563],{"class":166},[103,8658,6080],{"class":113},[103,8660,6135],{"class":170},[103,8662,8663,8665,8667,8669,8672],{"class":105,"line":348},[103,8664,6590],{"class":6032},[103,8666,563],{"class":166},[103,8668,6038],{"class":170},[103,8670,8671],{"class":113},"'-d'",[103,8673,8674],{"class":170},", default_rviz_config_path]\n",[103,8676,8677],{"class":105,"line":359},[103,8678,8534],{"class":170},[23,8680,8681],{},"如下为全部的launch：",[94,8683,8685],{"className":6018,"code":8684,"language":6020,"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/urdf/{urdf_name}')\n\n    # gazebo_world_path = os.path.join(pkg_share, 'world/fishbot.world')\n    default_rviz_config_path = os.path.join(pkg_share, 'rviz/rviz2.rviz')\n\n    # Start Gazebo server\n\n    # start_gazebo_cmd = ExecuteProcess(\n\n    #     cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so',gazebo_world_path],\n\n    #     output='screen')\n    start_gazebo_cmd = ExecuteProcess(\n        cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so'],\n        output='screen')\n\n    # Launch the robot\n    spawn_entity_cmd = Node(\n        package='gazebo_ros', \n        executable='spawn_entity.py',\n        arguments=['-entity', robot_name_in_model,  '-file', urdf_model_path ], output='screen')\n\n    # Start Robot State publisher\n    start_robot_state_publisher_cmd = Node(\n        package='robot_state_publisher',\n        executable='robot_state_publisher',\n        arguments=[urdf_model_path]\n    )\n\n    # Launch RViz\n    start_rviz_cmd = Node(\n        package='rviz2',\n        executable='rviz2',\n        name='rviz2',\n        output='screen',\n        arguments=['-d', default_rviz_config_path]\n        )\n\n    return LaunchDescription([start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[100,8686,8687,8697,8707,8711,8715,8725,8729,8733,8737,8741,8745,8749,8753,8757,8761,8765,8769,8773,8777,8781,8785,8789,8793,8797,8801,8805,8809,8813,8817,8821,8825,8829,8833,8837,8847,8853,8857,8865,8873,8881,8889,8893,8915,8937,8941,8945,8957,8961,8965,8969,8973,8977,8981,8985,8989,8997,9029,9039,9043,9047,9055,9065,9075,9099,9103,9107,9115,9125,9135,9143,9147,9151,9155,9163,9173,9183,9193,9203,9215,9219,9223],{"__ignoreMap":57},[103,8688,8689,8691,8693,8695],{"class":105,"line":106},[103,8690,933],{"class":166},[103,8692,6194],{"class":170},[103,8694,6197],{"class":166},[103,8696,6200],{"class":170},[103,8698,8699,8701,8703,8705],{"class":105,"line":231},[103,8700,933],{"class":166},[103,8702,6207],{"class":170},[103,8704,6197],{"class":166},[103,8706,6212],{"class":170},[103,8708,8709],{"class":105,"line":259},[103,8710,309],{"emptyLinePlaceholder":308},[103,8712,8713],{"class":105,"line":274},[103,8714,6221],{"class":227},[103,8716,8717,8719,8721,8723],{"class":105,"line":286},[103,8718,933],{"class":166},[103,8720,6228],{"class":170},[103,8722,6197],{"class":166},[103,8724,6233],{"class":170},[103,8726,8727],{"class":105,"line":305},[103,8728,309],{"emptyLinePlaceholder":308},[103,8730,8731],{"class":105,"line":312},[103,8732,6242],{"class":227},[103,8734,8735],{"class":105,"line":327},[103,8736,309],{"emptyLinePlaceholder":308},[103,8738,8739],{"class":105,"line":348},[103,8740,6251],{"class":227},[103,8742,8743],{"class":105,"line":359},[103,8744,309],{"emptyLinePlaceholder":308},[103,8746,8747],{"class":105,"line":368},[103,8748,6260],{"class":227},[103,8750,8751],{"class":105,"line":383},[103,8752,309],{"emptyLinePlaceholder":308},[103,8754,8755],{"class":105,"line":388},[103,8756,6269],{"class":227},[103,8758,8759],{"class":105,"line":394},[103,8760,309],{"emptyLinePlaceholder":308},[103,8762,8763],{"class":105,"line":399},[103,8764,6278],{"class":227},[103,8766,8767],{"class":105,"line":405},[103,8768,309],{"emptyLinePlaceholder":308},[103,8770,8771],{"class":105,"line":410},[103,8772,6287],{"class":227},[103,8774,8775],{"class":105,"line":416},[103,8776,309],{"emptyLinePlaceholder":308},[103,8778,8779],{"class":105,"line":421},[103,8780,6296],{"class":227},[103,8782,8783],{"class":105,"line":427},[103,8784,309],{"emptyLinePlaceholder":308},[103,8786,8787],{"class":105,"line":432},[103,8788,6305],{"class":227},[103,8790,8791],{"class":105,"line":438},[103,8792,309],{"emptyLinePlaceholder":308},[103,8794,8795],{"class":105,"line":443},[103,8796,6314],{"class":227},[103,8798,8799],{"class":105,"line":449},[103,8800,309],{"emptyLinePlaceholder":308},[103,8802,8803],{"class":105,"line":454},[103,8804,6323],{"class":227},[103,8806,8807],{"class":105,"line":460},[103,8808,309],{"emptyLinePlaceholder":308},[103,8810,8811],{"class":105,"line":465},[103,8812,6332],{"class":227},[103,8814,8815],{"class":105,"line":471},[103,8816,309],{"emptyLinePlaceholder":308},[103,8818,8819],{"class":105,"line":476},[103,8820,6341],{"class":227},[103,8822,8823],{"class":105,"line":504},[103,8824,309],{"emptyLinePlaceholder":308},[103,8826,8827],{"class":105,"line":530},[103,8828,6350],{"class":227},[103,8830,8831],{"class":105,"line":574},[103,8832,309],{"emptyLinePlaceholder":308},[103,8834,8835],{"class":105,"line":579},[103,8836,6359],{"class":227},[103,8838,8839,8841,8843,8845],{"class":105,"line":590},[103,8840,933],{"class":166},[103,8842,6366],{"class":170},[103,8844,6197],{"class":166},[103,8846,6371],{"class":170},[103,8848,8849,8851],{"class":105,"line":635},[103,8850,6197],{"class":166},[103,8852,6378],{"class":170},[103,8854,8855],{"class":105,"line":665},[103,8856,309],{"emptyLinePlaceholder":308},[103,8858,8859,8861,8863],{"class":105,"line":677},[103,8860,6387],{"class":166},[103,8862,6390],{"class":109},[103,8864,6393],{"class":170},[103,8866,8867,8869,8871],{"class":105,"line":799},[103,8868,6398],{"class":170},[103,8870,563],{"class":166},[103,8872,6403],{"class":113},[103,8874,8875,8877,8879],{"class":105,"line":805},[103,8876,6408],{"class":170},[103,8878,563],{"class":166},[103,8880,6413],{"class":113},[103,8882,8883,8885,8887],{"class":105,"line":817},[103,8884,6418],{"class":170},[103,8886,563],{"class":166},[103,8888,6423],{"class":113},[103,8890,8891],{"class":105,"line":823},[103,8892,309],{"emptyLinePlaceholder":308},[103,8894,8895,8897,8899,8901,8903,8905,8907,8909,8911,8913],{"class":105,"line":829},[103,8896,6432],{"class":170},[103,8898,563],{"class":166},[103,8900,6437],{"class":170},[103,8902,6440],{"class":166},[103,8904,6443],{"class":113},[103,8906,6446],{"class":139},[103,8908,6449],{"class":170},[103,8910,6452],{"class":139},[103,8912,6443],{"class":113},[103,8914,5982],{"class":170},[103,8916,8917,8919,8921,8923,8925,8927,8929,8931,8933,8935],{"class":105,"line":835},[103,8918,6461],{"class":170},[103,8920,563],{"class":166},[103,8922,6466],{"class":170},[103,8924,6440],{"class":166},[103,8926,6471],{"class":113},[103,8928,6446],{"class":139},[103,8930,6476],{"class":170},[103,8932,6452],{"class":139},[103,8934,6481],{"class":113},[103,8936,5982],{"class":170},[103,8938,8939],{"class":105,"line":841},[103,8940,309],{"emptyLinePlaceholder":308},[103,8942,8943],{"class":105,"line":864},[103,8944,8262],{"class":227},[103,8946,8947,8949,8951,8953,8955],{"class":105,"line":907},[103,8948,8595],{"class":170},[103,8950,563],{"class":166},[103,8952,6466],{"class":170},[103,8954,8602],{"class":113},[103,8956,5982],{"class":170},[103,8958,8959],{"class":105,"line":944},[103,8960,309],{"emptyLinePlaceholder":308},[103,8962,8963],{"class":105,"line":949},[103,8964,6492],{"class":227},[103,8966,8967],{"class":105,"line":973},[103,8968,309],{"emptyLinePlaceholder":308},[103,8970,8971],{"class":105,"line":997},[103,8972,8279],{"class":227},[103,8974,8975],{"class":105,"line":1877},[103,8976,309],{"emptyLinePlaceholder":308},[103,8978,8979],{"class":105,"line":1886},[103,8980,8288],{"class":227},[103,8982,8983],{"class":105,"line":1901},[103,8984,309],{"emptyLinePlaceholder":308},[103,8986,8987],{"class":105,"line":1916},[103,8988,8297],{"class":227},[103,8990,8991,8993,8995],{"class":105,"line":1925},[103,8992,6497],{"class":170},[103,8994,563],{"class":166},[103,8996,6502],{"class":170},[103,8998,8999,9001,9003,9005,9007,9009,9011,9013,9015,9017,9019,9021,9023,9025,9027],{"class":105,"line":1934},[103,9000,6033],{"class":6032},[103,9002,563],{"class":166},[103,9004,6038],{"class":170},[103,9006,6041],{"class":113},[103,9008,6044],{"class":170},[103,9010,6047],{"class":113},[103,9012,6050],{"class":170},[103,9014,6053],{"class":113},[103,9016,6044],{"class":170},[103,9018,6058],{"class":113},[103,9020,6044],{"class":170},[103,9022,6053],{"class":113},[103,9024,6044],{"class":170},[103,9026,6067],{"class":113},[103,9028,6535],{"class":170},[103,9030,9031,9033,9035,9037],{"class":105,"line":1943},[103,9032,6075],{"class":6032},[103,9034,563],{"class":166},[103,9036,6080],{"class":113},[103,9038,5982],{"class":170},[103,9040,9041],{"class":105,"line":1959},[103,9042,309],{"emptyLinePlaceholder":308},[103,9044,9045],{"class":105,"line":2007},[103,9046,6554],{"class":227},[103,9048,9049,9051,9053],{"class":105,"line":2016},[103,9050,6559],{"class":170},[103,9052,563],{"class":166},[103,9054,6109],{"class":170},[103,9056,9057,9059,9061,9063],{"class":105,"line":2025},[103,9058,6568],{"class":6032},[103,9060,563],{"class":166},[103,9062,6119],{"class":113},[103,9064,6122],{"class":170},[103,9066,9067,9069,9071,9073],{"class":105,"line":2030},[103,9068,6579],{"class":6032},[103,9070,563],{"class":166},[103,9072,6132],{"class":113},[103,9074,6135],{"class":170},[103,9076,9077,9079,9081,9083,9085,9087,9089,9091,9093,9095,9097],{"class":105,"line":2052},[103,9078,6590],{"class":6032},[103,9080,563],{"class":166},[103,9082,6038],{"class":170},[103,9084,6147],{"class":113},[103,9086,6150],{"class":170},[103,9088,6153],{"class":113},[103,9090,6156],{"class":170},[103,9092,6159],{"class":6032},[103,9094,563],{"class":166},[103,9096,6080],{"class":113},[103,9098,5982],{"class":170},[103,9100,9101],{"class":105,"line":2068},[103,9102,309],{"emptyLinePlaceholder":308},[103,9104,9105],{"class":105,"line":2083},[103,9106,8416],{"class":227},[103,9108,9109,9111,9113],{"class":105,"line":2099},[103,9110,8421],{"class":170},[103,9112,563],{"class":166},[103,9114,6109],{"class":170},[103,9116,9117,9119,9121,9123],{"class":105,"line":2108},[103,9118,6568],{"class":6032},[103,9120,563],{"class":166},[103,9122,8434],{"class":113},[103,9124,6135],{"class":170},[103,9126,9127,9129,9131,9133],{"class":105,"line":2113},[103,9128,6579],{"class":6032},[103,9130,563],{"class":166},[103,9132,8434],{"class":113},[103,9134,6135],{"class":170},[103,9136,9137,9139,9141],{"class":105,"line":2129},[103,9138,6590],{"class":6032},[103,9140,563],{"class":166},[103,9142,8455],{"class":170},[103,9144,9145],{"class":105,"line":2138},[103,9146,8460],{"class":170},[103,9148,9149],{"class":105,"line":2159},[103,9150,309],{"emptyLinePlaceholder":308},[103,9152,9153],{"class":105,"line":2168},[103,9154,8469],{"class":227},[103,9156,9157,9159,9161],{"class":105,"line":2187},[103,9158,8474],{"class":170},[103,9160,563],{"class":166},[103,9162,6109],{"class":170},[103,9164,9165,9167,9169,9171],{"class":105,"line":2196},[103,9166,6568],{"class":6032},[103,9168,563],{"class":166},[103,9170,8487],{"class":113},[103,9172,6135],{"class":170},[103,9174,9175,9177,9179,9181],{"class":105,"line":2205},[103,9176,6579],{"class":6032},[103,9178,563],{"class":166},[103,9180,8487],{"class":113},[103,9182,6135],{"class":170},[103,9184,9185,9187,9189,9191],{"class":105,"line":2214},[103,9186,8504],{"class":6032},[103,9188,563],{"class":166},[103,9190,8487],{"class":113},[103,9192,6135],{"class":170},[103,9194,9195,9197,9199,9201],{"class":105,"line":2235},[103,9196,6075],{"class":6032},[103,9198,563],{"class":166},[103,9200,6080],{"class":113},[103,9202,6135],{"class":170},[103,9204,9205,9207,9209,9211,9213],{"class":105,"line":2244},[103,9206,6590],{"class":6032},[103,9208,563],{"class":166},[103,9210,6038],{"class":170},[103,9212,8671],{"class":113},[103,9214,8674],{"class":170},[103,9216,9217],{"class":105,"line":2259},[103,9218,8534],{"class":170},[103,9220,9221],{"class":105,"line":2268},[103,9222,309],{"emptyLinePlaceholder":308},[103,9224,9225,9227],{"class":105,"line":2277},[103,9226,6619],{"class":166},[103,9228,8545],{"class":170},[23,9230,9231],{},"可以自行编译测试。",[6872,9233,9235],{"id":9234},"惯性计imu","惯性计IMU",[23,9237,9238],{},"上节课通过配置两轮差速控制器我们已经成功的让fishbot在gazebo中动了起来，本节课我们通过给fishbot的URDF配置IMU传感器插件，让IMU模块工作起来。",[23,9240,9241],{},"惯性测量单元是测量物体三轴姿态角(或角速率)以及加速度的装置。一般的，一个IMU包含了三个单轴的加速度计和三个单轴的陀螺，加速度计检测物体在载体坐标系统独立三轴的加速度信号，而陀螺检测载体相对于导航坐标系的角速度信号，测量物体在三维空间中的角速度和加速度，并以此解算出物体的姿态。在导航中有着很重要的应用价值。",[23,9243,9244],{},"上面这段话是小鱼从百科中摘抄出来的，你需要知道的一个关键点是IMU可以测量以下三组数据：",[1083,9246,9247,9250,9253],{},[1086,9248,9249],{},"三维加速度计加速度",[1086,9251,9252],{},"三维陀螺仪角速度",[1086,9254,9255],{},"三维磁力计（有的也没有磁力计）",[23,9257,9258],{},"用六轴、九轴算法或其他算法等可以输出三轴欧拉角（Yaw,Pitch,Roll），欧拉角可以转化为四元数。",[23,9260,9261],{},"IMU长啥样？直接线下找控制组要就行，他们经常会玩这个。",[23,9263,9264],{},"便宜的长这样（MPU6050,MPU9050等）：",[23,9266,9267],{},"MPU6050是六轴的，MPU9050是九轴的。",[23,9269,9270],{},[55,9271],{"alt":57,"src":9272},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1658.webp",[23,9274,9275],{},"贵的长这样（HWT101CT，HWT605等）：",[23,9277,9278],{},"其中HWT101CT是三轴的，HWT605是六轴的。（各有优缺点）",[23,9280,9281],{},[55,9282],{"alt":57,"src":9283},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1659.webp",[23,9285,9286],{},"不要钱的长什么样？",[23,9288,9289],{},[55,9290],{"alt":57,"src":9291},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1660.webp",[23,9293,9294],{},"仿真的不要钱哈哈，接着我们来配置一下仿真的IMU。",[23,9296,9297,9298],{},"IMU对应的消息类型为",[100,9299,9300],{},"sensor_msgs/msg/Imu",[23,9302,9303],{},"ROS的imu信息只有三轴加速度，角速度和四元数。（并没有磁力计和欧拉角，磁力计并非必须要填的，而欧拉角和四元数可以互相转换，四元数更好被算法运算，所以选择用四元数）",[23,9305,9306],{},"具体imu接口请看硬件平台章节。",[23,9308,9309,9310,9313],{},"可以看到除了每个数据对应的三个协方差之外，每一个还都对应一个",[100,9311,9312],{},"3*3","的协方差矩阵。",[23,9315,9316],{},"有了上节课的经验，我们可以很轻松的添加IMU传感器，但是还有一个需要注意的地方，为了更真实的模拟IMU传感器，我们需要给我们的仿真IMU传感器加点料。",[23,9318,9319,9320,9323,9324,9327],{},"加什么？加点高斯噪声，高斯噪声只需要指定平均值和标准差两个参数即可，不过因为IMU传感器的特殊性，我们还需要给模型添加两个偏差参数，分别是 ",[100,9321,9322],{},"平均值偏差","和",[100,9325,9326],{},"标准差偏差","。",[23,9329,9330],{},"有关Gazebo仿真和噪声模型更深入的介绍可以参考鱼香ROS发的两篇推文：",[1083,9332,9333,9340],{},[1086,9334,9335],{},[15,9336,9339],{"href":9337,"rel":9338},"https://mp.weixin.qq.com/s/0-OEATkyfMf6wEyrP5csGw",[19],"Gazebo仿真进阶教程之传感器高斯噪声（一）",[1086,9341,9342],{},[15,9343,9346],{"href":9344,"rel":9345},"https://mp.weixin.qq.com/s/5k1SEGdASjUMbwWdSpf1PQ",[19],"Gazebo仿真进阶教程之传感器高斯噪声（二）",[23,9348,9349,9350,9353],{},"下面是IMU传感器的URDF配置代码，大家结合文章对应可以理解一下，IMU对应的插件库",[100,9351,9352],{},"libgazebo_ros_imu_sensor.so","：",[94,9355,9357],{"className":1179,"code":9356,"language":1181,"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>/\u003C/namespace>\n            \u003Cremapping>~/out:=imu\u003C/remapping>\n          \u003C/ros>\n          \u003Cinitial_orientation_as_reference>false\u003C/initial_orientation_as_reference>\n        \u003C/plugin>\n        \u003Calways_on>true\u003C/always_on>\n        \u003Cupdate_rate>100\u003C/update_rate>\n        \u003Cvisualize>true\u003C/visualize>\n        \u003Cimu>\n          \u003Cangular_velocity>\n            \u003Cx>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C/mean>\n                \u003Cstddev>2e-4\u003C/stddev>\n                \u003Cbias_mean>0.0000075\u003C/bias_mean>\n                \u003Cbias_stddev>0.0000008\u003C/bias_stddev>\n              \u003C/noise>\n            \u003C/x>\n            \u003Cy>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C/mean>\n                \u003Cstddev>2e-4\u003C/stddev>\n                \u003Cbias_mean>0.0000075\u003C/bias_mean>\n                \u003Cbias_stddev>0.0000008\u003C/bias_stddev>\n              \u003C/noise>\n            \u003C/y>\n            \u003Cz>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C/mean>\n                \u003Cstddev>2e-4\u003C/stddev>\n                \u003Cbias_mean>0.0000075\u003C/bias_mean>\n                \u003Cbias_stddev>0.0000008\u003C/bias_stddev>\n              \u003C/noise>\n            \u003C/z>\n          \u003C/angular_velocity>\n          \u003Clinear_acceleration>\n            \u003Cx>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C/mean>\n                \u003Cstddev>1.7e-2\u003C/stddev>\n                \u003Cbias_mean>0.1\u003C/bias_mean>\n                \u003Cbias_stddev>0.001\u003C/bias_stddev>\n              \u003C/noise>\n            \u003C/x>\n            \u003Cy>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C/mean>\n                \u003Cstddev>1.7e-2\u003C/stddev>\n                \u003Cbias_mean>0.1\u003C/bias_mean>\n                \u003Cbias_stddev>0.001\u003C/bias_stddev>\n              \u003C/noise>\n            \u003C/y>\n            \u003Cz>\n              \u003Cnoise type=\"gaussian\">\n                \u003Cmean>0.0\u003C/mean>\n                \u003Cstddev>1.7e-2\u003C/stddev>\n                \u003Cbias_mean>0.1\u003C/bias_mean>\n                \u003Cbias_stddev>0.001\u003C/bias_stddev>\n              \u003C/noise>\n            \u003C/z>\n          \u003C/linear_acceleration>\n        \u003C/imu>\n      \u003C/sensor>\n    \u003C/gazebo>\n",[100,9358,9359,9373,9393,9413,9421,9433,9445,9453,9465,9473,9485,9497,9509,9517,9525,9533,9547,9559,9571,9583,9595,9603,9611,9619,9633,9645,9657,9669,9681,9689,9697,9705,9719,9731,9743,9755,9767,9775,9783,9791,9799,9807,9821,9833,9845,9857,9869,9877,9885,9893,9907,9919,9931,9943,9955,9963,9971,9979,9993,10005,10017,10029,10041,10049,10057,10065,10073,10081],{"__ignoreMap":57},[103,9360,9361,9363,9365,9367,9369,9371],{"class":105,"line":106},[103,9362,1275],{"class":170},[103,9364,136],{"class":1191},[103,9366,3774],{"class":109},[103,9368,563],{"class":170},[103,9370,2124],{"class":113},[103,9372,1221],{"class":170},[103,9374,9375,9377,9379,9381,9383,9385,9387,9389,9391],{"class":105,"line":231},[103,9376,1370],{"class":170},[103,9378,4404],{"class":1191},[103,9380,1213],{"class":109},[103,9382,563],{"class":170},[103,9384,4411],{"class":113},[103,9386,1114],{"class":109},[103,9388,563],{"class":170},[103,9390,4418],{"class":113},[103,9392,1221],{"class":170},[103,9394,9395,9397,9399,9401,9403,9405,9407,9409,9411],{"class":105,"line":259},[103,9396,1370],{"class":170},[103,9398,3926],{"class":1191},[103,9400,3936],{"class":109},[103,9402,563],{"class":170},[103,9404,4434],{"class":113},[103,9406,1213],{"class":109},[103,9408,563],{"class":170},[103,9410,4441],{"class":113},[103,9412,1221],{"class":170},[103,9414,9415,9417,9419],{"class":105,"line":274},[103,9416,1360],{"class":170},[103,9418,3951],{"class":1191},[103,9420,1221],{"class":170},[103,9422,9423,9425,9427,9429,9431],{"class":105,"line":286},[103,9424,2558],{"class":170},[103,9426,3961],{"class":1191},[103,9428,3964],{"class":170},[103,9430,3961],{"class":1191},[103,9432,1221],{"class":170},[103,9434,9435,9437,9439,9441,9443],{"class":105,"line":305},[103,9436,2558],{"class":170},[103,9438,3976],{"class":1191},[103,9440,4475],{"class":170},[103,9442,3976],{"class":1191},[103,9444,1221],{"class":170},[103,9446,9447,9449,9451],{"class":105,"line":312},[103,9448,2574],{"class":170},[103,9450,3951],{"class":1191},[103,9452,1221],{"class":170},[103,9454,9455,9457,9459,9461,9463],{"class":105,"line":327},[103,9456,1360],{"class":170},[103,9458,4496],{"class":1191},[103,9460,4171],{"class":170},[103,9462,4496],{"class":1191},[103,9464,1221],{"class":170},[103,9466,9467,9469,9471],{"class":105,"line":348},[103,9468,2533],{"class":170},[103,9470,3926],{"class":1191},[103,9472,1221],{"class":170},[103,9474,9475,9477,9479,9481,9483],{"class":105,"line":359},[103,9476,1748],{"class":170},[103,9478,4519],{"class":1191},[103,9480,4142],{"class":170},[103,9482,4519],{"class":1191},[103,9484,1221],{"class":170},[103,9486,9487,9489,9491,9493,9495],{"class":105,"line":368},[103,9488,1748],{"class":170},[103,9490,4014],{"class":1191},[103,9492,4535],{"class":170},[103,9494,4014],{"class":1191},[103,9496,1221],{"class":170},[103,9498,9499,9501,9503,9505,9507],{"class":105,"line":383},[103,9500,1748],{"class":170},[103,9502,4547],{"class":1191},[103,9504,4142],{"class":170},[103,9506,4547],{"class":1191},[103,9508,1221],{"class":170},[103,9510,9511,9513,9515],{"class":105,"line":388},[103,9512,1748],{"class":170},[103,9514,4561],{"class":1191},[103,9516,1221],{"class":170},[103,9518,9519,9521,9523],{"class":105,"line":394},[103,9520,1360],{"class":170},[103,9522,4571],{"class":1191},[103,9524,1221],{"class":170},[103,9526,9527,9529,9531],{"class":105,"line":399},[103,9528,2558],{"class":170},[103,9530,4581],{"class":1191},[103,9532,1221],{"class":170},[103,9534,9535,9537,9539,9541,9543,9545],{"class":105,"line":405},[103,9536,1452],{"class":170},[103,9538,4591],{"class":1191},[103,9540,1114],{"class":109},[103,9542,563],{"class":170},[103,9544,4598],{"class":113},[103,9546,1221],{"class":170},[103,9548,9549,9551,9553,9555,9557],{"class":105,"line":410},[103,9550,1401],{"class":170},[103,9552,4608],{"class":1191},[103,9554,4611],{"class":170},[103,9556,4608],{"class":1191},[103,9558,1221],{"class":170},[103,9560,9561,9563,9565,9567,9569],{"class":105,"line":416},[103,9562,1401],{"class":170},[103,9564,4623],{"class":1191},[103,9566,4626],{"class":170},[103,9568,4623],{"class":1191},[103,9570,1221],{"class":170},[103,9572,9573,9575,9577,9579,9581],{"class":105,"line":421},[103,9574,1401],{"class":170},[103,9576,4638],{"class":1191},[103,9578,4641],{"class":170},[103,9580,4638],{"class":1191},[103,9582,1221],{"class":170},[103,9584,9585,9587,9589,9591,9593],{"class":105,"line":427},[103,9586,1401],{"class":170},[103,9588,4653],{"class":1191},[103,9590,4656],{"class":170},[103,9592,4653],{"class":1191},[103,9594,1221],{"class":170},[103,9596,9597,9599,9601],{"class":105,"line":432},[103,9598,4666],{"class":170},[103,9600,4591],{"class":1191},[103,9602,1221],{"class":170},[103,9604,9605,9607,9609],{"class":105,"line":438},[103,9606,4676],{"class":170},[103,9608,4581],{"class":1191},[103,9610,1221],{"class":170},[103,9612,9613,9615,9617],{"class":105,"line":443},[103,9614,2558],{"class":170},[103,9616,4688],{"class":1191},[103,9618,1221],{"class":170},[103,9620,9621,9623,9625,9627,9629,9631],{"class":105,"line":449},[103,9622,1452],{"class":170},[103,9624,4591],{"class":1191},[103,9626,1114],{"class":109},[103,9628,563],{"class":170},[103,9630,4598],{"class":113},[103,9632,1221],{"class":170},[103,9634,9635,9637,9639,9641,9643],{"class":105,"line":454},[103,9636,1401],{"class":170},[103,9638,4608],{"class":1191},[103,9640,4611],{"class":170},[103,9642,4608],{"class":1191},[103,9644,1221],{"class":170},[103,9646,9647,9649,9651,9653,9655],{"class":105,"line":460},[103,9648,1401],{"class":170},[103,9650,4623],{"class":1191},[103,9652,4626],{"class":170},[103,9654,4623],{"class":1191},[103,9656,1221],{"class":170},[103,9658,9659,9661,9663,9665,9667],{"class":105,"line":465},[103,9660,1401],{"class":170},[103,9662,4638],{"class":1191},[103,9664,4641],{"class":170},[103,9666,4638],{"class":1191},[103,9668,1221],{"class":170},[103,9670,9671,9673,9675,9677,9679],{"class":105,"line":471},[103,9672,1401],{"class":170},[103,9674,4653],{"class":1191},[103,9676,4656],{"class":170},[103,9678,4653],{"class":1191},[103,9680,1221],{"class":170},[103,9682,9683,9685,9687],{"class":105,"line":476},[103,9684,4666],{"class":170},[103,9686,4591],{"class":1191},[103,9688,1221],{"class":170},[103,9690,9691,9693,9695],{"class":105,"line":504},[103,9692,4676],{"class":170},[103,9694,4688],{"class":1191},[103,9696,1221],{"class":170},[103,9698,9699,9701,9703],{"class":105,"line":530},[103,9700,2558],{"class":170},[103,9702,4783],{"class":1191},[103,9704,1221],{"class":170},[103,9706,9707,9709,9711,9713,9715,9717],{"class":105,"line":574},[103,9708,1452],{"class":170},[103,9710,4591],{"class":1191},[103,9712,1114],{"class":109},[103,9714,563],{"class":170},[103,9716,4598],{"class":113},[103,9718,1221],{"class":170},[103,9720,9721,9723,9725,9727,9729],{"class":105,"line":579},[103,9722,1401],{"class":170},[103,9724,4608],{"class":1191},[103,9726,4611],{"class":170},[103,9728,4608],{"class":1191},[103,9730,1221],{"class":170},[103,9732,9733,9735,9737,9739,9741],{"class":105,"line":590},[103,9734,1401],{"class":170},[103,9736,4623],{"class":1191},[103,9738,4626],{"class":170},[103,9740,4623],{"class":1191},[103,9742,1221],{"class":170},[103,9744,9745,9747,9749,9751,9753],{"class":105,"line":635},[103,9746,1401],{"class":170},[103,9748,4638],{"class":1191},[103,9750,4641],{"class":170},[103,9752,4638],{"class":1191},[103,9754,1221],{"class":170},[103,9756,9757,9759,9761,9763,9765],{"class":105,"line":665},[103,9758,1401],{"class":170},[103,9760,4653],{"class":1191},[103,9762,4656],{"class":170},[103,9764,4653],{"class":1191},[103,9766,1221],{"class":170},[103,9768,9769,9771,9773],{"class":105,"line":677},[103,9770,4666],{"class":170},[103,9772,4591],{"class":1191},[103,9774,1221],{"class":170},[103,9776,9777,9779,9781],{"class":105,"line":799},[103,9778,4676],{"class":170},[103,9780,4783],{"class":1191},[103,9782,1221],{"class":170},[103,9784,9785,9787,9789],{"class":105,"line":805},[103,9786,2574],{"class":170},[103,9788,4571],{"class":1191},[103,9790,1221],{"class":170},[103,9792,9793,9795,9797],{"class":105,"line":817},[103,9794,1360],{"class":170},[103,9796,4887],{"class":1191},[103,9798,1221],{"class":170},[103,9800,9801,9803,9805],{"class":105,"line":823},[103,9802,2558],{"class":170},[103,9804,4581],{"class":1191},[103,9806,1221],{"class":170},[103,9808,9809,9811,9813,9815,9817,9819],{"class":105,"line":829},[103,9810,1452],{"class":170},[103,9812,4591],{"class":1191},[103,9814,1114],{"class":109},[103,9816,563],{"class":170},[103,9818,4598],{"class":113},[103,9820,1221],{"class":170},[103,9822,9823,9825,9827,9829,9831],{"class":105,"line":835},[103,9824,1401],{"class":170},[103,9826,4608],{"class":1191},[103,9828,4611],{"class":170},[103,9830,4608],{"class":1191},[103,9832,1221],{"class":170},[103,9834,9835,9837,9839,9841,9843],{"class":105,"line":841},[103,9836,1401],{"class":170},[103,9838,4623],{"class":1191},[103,9840,4936],{"class":170},[103,9842,4623],{"class":1191},[103,9844,1221],{"class":170},[103,9846,9847,9849,9851,9853,9855],{"class":105,"line":864},[103,9848,1401],{"class":170},[103,9850,4638],{"class":1191},[103,9852,4950],{"class":170},[103,9854,4638],{"class":1191},[103,9856,1221],{"class":170},[103,9858,9859,9861,9863,9865,9867],{"class":105,"line":907},[103,9860,1401],{"class":170},[103,9862,4653],{"class":1191},[103,9864,4964],{"class":170},[103,9866,4653],{"class":1191},[103,9868,1221],{"class":170},[103,9870,9871,9873,9875],{"class":105,"line":944},[103,9872,4666],{"class":170},[103,9874,4591],{"class":1191},[103,9876,1221],{"class":170},[103,9878,9879,9881,9883],{"class":105,"line":949},[103,9880,4676],{"class":170},[103,9882,4581],{"class":1191},[103,9884,1221],{"class":170},[103,9886,9887,9889,9891],{"class":105,"line":973},[103,9888,2558],{"class":170},[103,9890,4688],{"class":1191},[103,9892,1221],{"class":170},[103,9894,9895,9897,9899,9901,9903,9905],{"class":105,"line":997},[103,9896,1452],{"class":170},[103,9898,4591],{"class":1191},[103,9900,1114],{"class":109},[103,9902,563],{"class":170},[103,9904,4598],{"class":113},[103,9906,1221],{"class":170},[103,9908,9909,9911,9913,9915,9917],{"class":105,"line":1877},[103,9910,1401],{"class":170},[103,9912,4608],{"class":1191},[103,9914,4611],{"class":170},[103,9916,4608],{"class":1191},[103,9918,1221],{"class":170},[103,9920,9921,9923,9925,9927,9929],{"class":105,"line":1886},[103,9922,1401],{"class":170},[103,9924,4623],{"class":1191},[103,9926,4936],{"class":170},[103,9928,4623],{"class":1191},[103,9930,1221],{"class":170},[103,9932,9933,9935,9937,9939,9941],{"class":105,"line":1901},[103,9934,1401],{"class":170},[103,9936,4638],{"class":1191},[103,9938,4950],{"class":170},[103,9940,4638],{"class":1191},[103,9942,1221],{"class":170},[103,9944,9945,9947,9949,9951,9953],{"class":105,"line":1916},[103,9946,1401],{"class":170},[103,9948,4653],{"class":1191},[103,9950,4964],{"class":170},[103,9952,4653],{"class":1191},[103,9954,1221],{"class":170},[103,9956,9957,9959,9961],{"class":105,"line":1925},[103,9958,4666],{"class":170},[103,9960,4591],{"class":1191},[103,9962,1221],{"class":170},[103,9964,9965,9967,9969],{"class":105,"line":1934},[103,9966,4676],{"class":170},[103,9968,4688],{"class":1191},[103,9970,1221],{"class":170},[103,9972,9973,9975,9977],{"class":105,"line":1943},[103,9974,2558],{"class":170},[103,9976,4783],{"class":1191},[103,9978,1221],{"class":170},[103,9980,9981,9983,9985,9987,9989,9991],{"class":105,"line":1959},[103,9982,1452],{"class":170},[103,9984,4591],{"class":1191},[103,9986,1114],{"class":109},[103,9988,563],{"class":170},[103,9990,4598],{"class":113},[103,9992,1221],{"class":170},[103,9994,9995,9997,9999,10001,10003],{"class":105,"line":2007},[103,9996,1401],{"class":170},[103,9998,4608],{"class":1191},[103,10000,4611],{"class":170},[103,10002,4608],{"class":1191},[103,10004,1221],{"class":170},[103,10006,10007,10009,10011,10013,10015],{"class":105,"line":2016},[103,10008,1401],{"class":170},[103,10010,4623],{"class":1191},[103,10012,4936],{"class":170},[103,10014,4623],{"class":1191},[103,10016,1221],{"class":170},[103,10018,10019,10021,10023,10025,10027],{"class":105,"line":2025},[103,10020,1401],{"class":170},[103,10022,4638],{"class":1191},[103,10024,4950],{"class":170},[103,10026,4638],{"class":1191},[103,10028,1221],{"class":170},[103,10030,10031,10033,10035,10037,10039],{"class":105,"line":2030},[103,10032,1401],{"class":170},[103,10034,4653],{"class":1191},[103,10036,4964],{"class":170},[103,10038,4653],{"class":1191},[103,10040,1221],{"class":170},[103,10042,10043,10045,10047],{"class":105,"line":2052},[103,10044,4666],{"class":170},[103,10046,4591],{"class":1191},[103,10048,1221],{"class":170},[103,10050,10051,10053,10055],{"class":105,"line":2068},[103,10052,4676],{"class":170},[103,10054,4783],{"class":1191},[103,10056,1221],{"class":170},[103,10058,10059,10061,10063],{"class":105,"line":2083},[103,10060,2574],{"class":170},[103,10062,4887],{"class":1191},[103,10064,1221],{"class":170},[103,10066,10067,10069,10071],{"class":105,"line":2099},[103,10068,2533],{"class":170},[103,10070,4561],{"class":1191},[103,10072,1221],{"class":170},[103,10074,10075,10077,10079],{"class":105,"line":2108},[103,10076,1427],{"class":170},[103,10078,4404],{"class":1191},[103,10080,1221],{"class":170},[103,10082,10083,10085,10087],{"class":105,"line":2113},[103,10084,1479],{"class":170},[103,10086,136],{"class":1191},[103,10088,1221],{"class":170},[23,10090,10091],{},"我们之前下载的fishbot已经包含该内容了，所以不用再添加了，直接运行即可。",[94,10093,10094],{"className":6018,"code":6662,"language":6020,"meta":57,"style":57},[100,10095,10096],{"__ignoreMap":57},[103,10097,10098],{"class":105,"line":106},[103,10099,6662],{"class":170},[94,10101,10103],{"className":6018,"code":10102,"language":6020,"meta":57,"style":57},"ros2 topic list\n",[100,10104,10105],{"__ignoreMap":57},[103,10106,10107,10109],{"class":105,"line":106},[103,10108,7836],{"class":170},[103,10110,7831],{"class":139},[23,10112,10113],{},[55,10114],{"alt":57,"src":10115},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1661.webp",[94,10117,10119],{"className":6018,"code":10118,"language":6020,"meta":57,"style":57},"ros2 topic info /imu\nros2 topic echo /imu\n",[100,10120,10121,10131],{"__ignoreMap":57},[103,10122,10123,10126,10128],{"class":105,"line":106},[103,10124,10125],{"class":170},"ros2 topic info ",[103,10127,188],{"class":166},[103,10129,10130],{"class":170},"imu\n",[103,10132,10133,10136,10138],{"class":105,"line":231},[103,10134,10135],{"class":170},"ros2 topic echo ",[103,10137,188],{"class":166},[103,10139,10130],{"class":170},[23,10141,10142],{},[55,10143],{"alt":57,"src":10144},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1662.webp",[23,10146,10147],{},[55,10148],{"alt":57,"src":10149},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1663.webp",[94,10151,10153],{"className":7095,"code":10152,"language":7097,"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",[100,10154,10155,10161,10168,10178,10188,10197,10204,10214,10224,10234,10244,10251,10257,10263,10269,10275,10281,10287,10293,10299,10305,10311,10320,10329,10338,10345,10352,10358,10364,10370,10376,10382,10388,10394,10400,10406,10415,10424,10433,10440,10447,10453,10459,10465,10471,10477,10483,10489],{"__ignoreMap":57},[103,10156,10157,10159],{"class":105,"line":106},[103,10158,7107],{"class":1191},[103,10160,7110],{"class":170},[103,10162,10163,10166],{"class":105,"line":231},[103,10164,10165],{"class":1191},"  stamp",[103,10167,7110],{"class":170},[103,10169,10170,10173,10175],{"class":105,"line":259},[103,10171,10172],{"class":1191},"    sec",[103,10174,644],{"class":170},[103,10176,10177],{"class":139},"150\n",[103,10179,10180,10183,10185],{"class":105,"line":274},[103,10181,10182],{"class":1191},"    nanosec",[103,10184,644],{"class":170},[103,10186,10187],{"class":139},"599000000\n",[103,10189,10190,10193,10195],{"class":105,"line":286},[103,10191,10192],{"class":1191},"  frame_id",[103,10194,644],{"class":170},[103,10196,7157],{"class":113},[103,10198,10199,10202],{"class":105,"line":305},[103,10200,10201],{"class":1191},"orientation",[103,10203,7110],{"class":170},[103,10205,10206,10209,10211],{"class":105,"line":312},[103,10207,10208],{"class":1191},"  x",[103,10210,644],{"class":170},[103,10212,10213],{"class":139},"3.434713830866392e-07\n",[103,10215,10216,10219,10221],{"class":105,"line":327},[103,10217,10218],{"class":139},"  y",[103,10220,644],{"class":170},[103,10222,10223],{"class":139},"7.119913105768616e-06\n",[103,10225,10226,10229,10231],{"class":105,"line":348},[103,10227,10228],{"class":1191},"  z",[103,10230,644],{"class":170},[103,10232,10233],{"class":139},"-0.00028312437320413914\n",[103,10235,10236,10239,10241],{"class":105,"line":359},[103,10237,10238],{"class":1191},"  w",[103,10240,644],{"class":170},[103,10242,10243],{"class":139},"0.9999999598948884\n",[103,10245,10246,10249],{"class":105,"line":368},[103,10247,10248],{"class":1191},"orientation_covariance",[103,10250,7110],{"class":170},[103,10252,10253,10255],{"class":105,"line":383},[103,10254,7104],{"class":170},[103,10256,7356],{"class":139},[103,10258,10259,10261],{"class":105,"line":388},[103,10260,7104],{"class":170},[103,10262,7356],{"class":139},[103,10264,10265,10267],{"class":105,"line":394},[103,10266,7104],{"class":170},[103,10268,7356],{"class":139},[103,10270,10271,10273],{"class":105,"line":399},[103,10272,7104],{"class":170},[103,10274,7356],{"class":139},[103,10276,10277,10279],{"class":105,"line":405},[103,10278,7104],{"class":170},[103,10280,7356],{"class":139},[103,10282,10283,10285],{"class":105,"line":410},[103,10284,7104],{"class":170},[103,10286,7356],{"class":139},[103,10288,10289,10291],{"class":105,"line":416},[103,10290,7104],{"class":170},[103,10292,7356],{"class":139},[103,10294,10295,10297],{"class":105,"line":421},[103,10296,7104],{"class":170},[103,10298,7356],{"class":139},[103,10300,10301,10303],{"class":105,"line":427},[103,10302,7104],{"class":170},[103,10304,7356],{"class":139},[103,10306,10307,10309],{"class":105,"line":432},[103,10308,4571],{"class":1191},[103,10310,7110],{"class":170},[103,10312,10313,10315,10317],{"class":105,"line":438},[103,10314,10208],{"class":1191},[103,10316,644],{"class":170},[103,10318,10319],{"class":139},"-0.00013597855247901325\n",[103,10321,10322,10324,10326],{"class":105,"line":443},[103,10323,10218],{"class":139},[103,10325,644],{"class":170},[103,10327,10328],{"class":139},"0.0006306135617081868\n",[103,10330,10331,10333,10335],{"class":105,"line":449},[103,10332,10228],{"class":1191},[103,10334,644],{"class":170},[103,10336,10337],{"class":139},"-0.00015794894627685146\n",[103,10339,10340,10343],{"class":105,"line":454},[103,10341,10342],{"class":1191},"angular_velocity_covariance",[103,10344,7110],{"class":170},[103,10346,10347,10349],{"class":105,"line":460},[103,10348,7104],{"class":170},[103,10350,10351],{"class":139},"4.0e-08\n",[103,10353,10354,10356],{"class":105,"line":465},[103,10355,7104],{"class":170},[103,10357,7356],{"class":139},[103,10359,10360,10362],{"class":105,"line":471},[103,10361,7104],{"class":170},[103,10363,7356],{"class":139},[103,10365,10366,10368],{"class":105,"line":476},[103,10367,7104],{"class":170},[103,10369,7356],{"class":139},[103,10371,10372,10374],{"class":105,"line":504},[103,10373,7104],{"class":170},[103,10375,10351],{"class":139},[103,10377,10378,10380],{"class":105,"line":530},[103,10379,7104],{"class":170},[103,10381,7356],{"class":139},[103,10383,10384,10386],{"class":105,"line":574},[103,10385,7104],{"class":170},[103,10387,7356],{"class":139},[103,10389,10390,10392],{"class":105,"line":579},[103,10391,7104],{"class":170},[103,10393,7356],{"class":139},[103,10395,10396,10398],{"class":105,"line":590},[103,10397,7104],{"class":170},[103,10399,10351],{"class":139},[103,10401,10402,10404],{"class":105,"line":635},[103,10403,4887],{"class":1191},[103,10405,7110],{"class":170},[103,10407,10408,10410,10412],{"class":105,"line":665},[103,10409,10208],{"class":1191},[103,10411,644],{"class":170},[103,10413,10414],{"class":139},"0.08679200038530369\n",[103,10416,10417,10419,10421],{"class":105,"line":677},[103,10418,10218],{"class":139},[103,10420,644],{"class":170},[103,10422,10423],{"class":139},"0.07753419258567491\n",[103,10425,10426,10428,10430],{"class":105,"line":799},[103,10427,10228],{"class":1191},[103,10429,644],{"class":170},[103,10431,10432],{"class":139},"9.687910969061628\n",[103,10434,10435,10438],{"class":105,"line":805},[103,10436,10437],{"class":1191},"linear_acceleration_covariance",[103,10439,7110],{"class":170},[103,10441,10442,10444],{"class":105,"line":817},[103,10443,7104],{"class":170},[103,10445,10446],{"class":139},"0.00028900000000000003\n",[103,10448,10449,10451],{"class":105,"line":823},[103,10450,7104],{"class":170},[103,10452,7356],{"class":139},[103,10454,10455,10457],{"class":105,"line":829},[103,10456,7104],{"class":170},[103,10458,7356],{"class":139},[103,10460,10461,10463],{"class":105,"line":835},[103,10462,7104],{"class":170},[103,10464,7356],{"class":139},[103,10466,10467,10469],{"class":105,"line":841},[103,10468,7104],{"class":170},[103,10470,10446],{"class":139},[103,10472,10473,10475],{"class":105,"line":864},[103,10474,7104],{"class":170},[103,10476,7356],{"class":139},[103,10478,10479,10481],{"class":105,"line":907},[103,10480,7104],{"class":170},[103,10482,7356],{"class":139},[103,10484,10485,10487],{"class":105,"line":944},[103,10486,7104],{"class":170},[103,10488,7356],{"class":139},[103,10490,10491,10493],{"class":105,"line":949},[103,10492,7104],{"class":170},[103,10494,10446],{"class":139},[23,10496,10497],{},"用rqt可视化：",[23,10499,10500],{},[55,10501],{"alt":57,"src":10502},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1664.webp",[6872,10504,10506],{"id":10505},"雷达laser","雷达Laser",[23,10508,10509],{},"本节我们来认识一个新的传感器，该传感器在自动驾驶、室内导航等应用非常多，比如扫地机器人上就是用的它作为感知环境的重要工具，该传感器是激光雷达。",[23,10511,10512,10513,10516],{},"激光雷达（Light Detection And Ranging）,缩写",[100,10514,10515],{},"LiDAR","，英文也叫laser,翻译一下叫——激光探测与测距。",[23,10518,10519],{},"激光雷达的原理也很简单，就像蝙蝠的定位方法一样，蝙蝠定位大家都知道吧，像下面这样子的回声定位。",[23,10521,10522],{},[55,10523],{"alt":57,"src":10524},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1665.webp",[23,10526,10527],{},"普通的单线激光雷达一般有一个发射器，一个接收器，发射器发出激光射线到前方的目标上，物品会将激光反射回来，然后激光雷达的接受器可以检测到反射的激光。",[23,10529,10530],{},[55,10531],{"alt":57,"src":10532},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1666.webp",[23,10534,10535],{},"通过计算发送和反馈之间的时间间隔，乘上激光的速度，就可以计算出激光飞行的距离，该计算方法成为TOF（飞行时间法Time of flight，也称时差法）。",[23,10537,10538,10539],{},"除了TOF之外还有其他方法进行测距，比如三角法，这里就不拓展了放一篇文章，大家自行阅读。",[15,10540,10543],{"href":10541,"rel":10542},"https://www.slamtec.com/cn/News/Detail/190",[19],"激光三角测距原理详述",[23,10545,10546],{},"目前市面上的激光雷达，几乎都是采用三角测距，比如思岚的：",[23,10548,10549],{},[55,10550],{"alt":57,"src":10551},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1667.webp",[23,10553,10554],{},"需要注意的是虽然只有一个发射器和一个接受器，激光雷达通过电机可以进行旋转，这样就可以达到对周围环境360度测距的目的。",[23,10556,10557],{},"五位数的长这样：",[23,10559,10560],{},[55,10561],{"alt":57,"src":10562},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1668.webp",[23,10564,10565],{},"四位数的长这样（咱们有一台）",[23,10567,10568],{},[55,10569],{"alt":57,"src":10570},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1669.webp",[23,10572,10573],{},"三位数的长这样（咱们也有）",[23,10575,10576],{},[55,10577],{"alt":57,"src":10578},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1670.webp",[23,10580,10581],{},"两位数的长这样",[23,10583,10584],{},[55,10585],{"alt":57,"src":10586},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1671.webp",[23,10588,10589],{},"不要钱的长这样",[23,10591,10592],{},"仿真的，不要钱",[23,10594,10595],{},[55,10596],{"alt":57,"src":10597},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1672.webp",[23,10599,10600,10601,9327],{},"因为激光雷达是属于射线类传感器，该类传感在在Gazebo插件中都被封装成了一个动态库",[100,10602,10603],{},"libgazebo_ros_ray_sensor.so",[23,10605,10606,10607,9327],{},"接着我们来看看LiDAR的话题消息接口",[100,10608,10609],{},"sensor_msgs/msg/LaserScan",[23,10611,10612],{},"雷达的数据结构有些复杂，但通过注释和名字相信你可以看的七七八八，看不懂也没关系，一般情况下我们不会直接的对雷达的数据做操作。",[23,10614,10615],{},"雷达的模型不需要collision，请删掉，否则会挡激光射出。",[23,10617,10618],{},"有了前面的经验，我们需要在URDF添加以下内容即可，但我们下载的是鱼香ROS添加好的，所以不用改了：",[94,10620,10622],{"className":1179,"code":10621,"language":1181,"meta":57,"style":57},"  \u003Cgazebo reference=\"laser_link\">\n      \u003Csensor name=\"laser_sensor\" type=\"ray\">\n      \u003Calways_on>true\u003C/always_on>\n      \u003Cvisualize>true\u003C/visualize>\n      \u003Cupdate_rate>10\u003C/update_rate>\n      \u003Cpose>0 0 0.075 0 0 0\u003C/pose>\n      \u003Cray>\n          \u003Cscan>\n            \u003Chorizontal>\n              \u003Csamples>360\u003C/samples>\n              \u003Cresolution>1.000000\u003C/resolution>\n              \u003Cmin_angle>0.000000\u003C/min_angle>\n              \u003Cmax_angle>6.280000\u003C/max_angle>\n            \u003C/horizontal>\n          \u003C/scan>\n          \u003Crange>\n            \u003Cmin>0.120000\u003C/min>\n            \u003Cmax>3.5\u003C/max>\n            \u003Cresolution>0.015000\u003C/resolution>\n          \u003C/range>\n          \u003Cnoise>\n            \u003Ctype>gaussian\u003C/type>\n            \u003Cmean>0.0\u003C/mean>\n            \u003Cstddev>0.01\u003C/stddev>\n          \u003C/noise>\n      \u003C/ray>\n\n      \u003Cplugin name=\"laserscan\" filename=\"libgazebo_ros_ray_sensor.so\">\n        \u003Cros>\n          \u003Cremapping>~/out:=scan\u003C/remapping>\n        \u003C/ros>\n        \u003Coutput_type>sensor_msgs/LaserScan\u003C/output_type>\n        \u003Cframe_name>laser_link\u003C/frame_name>\n      \u003C/plugin>\n      \u003C/sensor>\n    \u003C/gazebo>\n",[100,10623,10624,10638,10658,10670,10682,10695,10707,10715,10723,10731,10743,10755,10767,10779,10787,10795,10803,10815,10827,10839,10847,10855,10867,10879,10891,10899,10907,10911,10931,10939,10951,10959,10971,10983,10991,10999],{"__ignoreMap":57},[103,10625,10626,10628,10630,10632,10634,10636],{"class":105,"line":106},[103,10627,1230],{"class":170},[103,10629,136],{"class":1191},[103,10631,3774],{"class":109},[103,10633,563],{"class":170},[103,10635,1705],{"class":113},[103,10637,1221],{"class":170},[103,10639,10640,10642,10644,10646,10648,10650,10652,10654,10656],{"class":105,"line":231},[103,10641,1370],{"class":170},[103,10643,4404],{"class":1191},[103,10645,1213],{"class":109},[103,10647,563],{"class":170},[103,10649,5244],{"class":113},[103,10651,1114],{"class":109},[103,10653,563],{"class":170},[103,10655,5251],{"class":113},[103,10657,1221],{"class":170},[103,10659,10660,10662,10664,10666,10668],{"class":105,"line":259},[103,10661,1370],{"class":170},[103,10663,4519],{"class":1191},[103,10665,4142],{"class":170},[103,10667,4519],{"class":1191},[103,10669,1221],{"class":170},[103,10671,10672,10674,10676,10678,10680],{"class":105,"line":274},[103,10673,1370],{"class":170},[103,10675,4547],{"class":1191},[103,10677,4142],{"class":170},[103,10679,4547],{"class":1191},[103,10681,1221],{"class":170},[103,10683,10684,10686,10688,10691,10693],{"class":105,"line":286},[103,10685,1370],{"class":170},[103,10687,4014],{"class":1191},[103,10689,10690],{"class":170},">10\u003C/",[103,10692,4014],{"class":1191},[103,10694,1221],{"class":170},[103,10696,10697,10699,10701,10703,10705],{"class":105,"line":305},[103,10698,1370],{"class":170},[103,10700,5301],{"class":1191},[103,10702,5304],{"class":170},[103,10704,5301],{"class":1191},[103,10706,1221],{"class":170},[103,10708,10709,10711,10713],{"class":105,"line":312},[103,10710,1370],{"class":170},[103,10712,5316],{"class":1191},[103,10714,1221],{"class":170},[103,10716,10717,10719,10721],{"class":105,"line":327},[103,10718,1360],{"class":170},[103,10720,5326],{"class":1191},[103,10722,1221],{"class":170},[103,10724,10725,10727,10729],{"class":105,"line":348},[103,10726,2558],{"class":170},[103,10728,5336],{"class":1191},[103,10730,1221],{"class":170},[103,10732,10733,10735,10737,10739,10741],{"class":105,"line":359},[103,10734,1452],{"class":170},[103,10736,5346],{"class":1191},[103,10738,5349],{"class":170},[103,10740,5346],{"class":1191},[103,10742,1221],{"class":170},[103,10744,10745,10747,10749,10751,10753],{"class":105,"line":368},[103,10746,1452],{"class":170},[103,10748,5361],{"class":1191},[103,10750,5364],{"class":170},[103,10752,5361],{"class":1191},[103,10754,1221],{"class":170},[103,10756,10757,10759,10761,10763,10765],{"class":105,"line":383},[103,10758,1452],{"class":170},[103,10760,5376],{"class":1191},[103,10762,5379],{"class":170},[103,10764,5376],{"class":1191},[103,10766,1221],{"class":170},[103,10768,10769,10771,10773,10775,10777],{"class":105,"line":388},[103,10770,1452],{"class":170},[103,10772,5391],{"class":1191},[103,10774,5394],{"class":170},[103,10776,5391],{"class":1191},[103,10778,1221],{"class":170},[103,10780,10781,10783,10785],{"class":105,"line":394},[103,10782,4676],{"class":170},[103,10784,5336],{"class":1191},[103,10786,1221],{"class":170},[103,10788,10789,10791,10793],{"class":105,"line":399},[103,10790,2574],{"class":170},[103,10792,5326],{"class":1191},[103,10794,1221],{"class":170},[103,10796,10797,10799,10801],{"class":105,"line":405},[103,10798,1360],{"class":170},[103,10800,5424],{"class":1191},[103,10802,1221],{"class":170},[103,10804,10805,10807,10809,10811,10813],{"class":105,"line":410},[103,10806,2558],{"class":170},[103,10808,5434],{"class":1191},[103,10810,5437],{"class":170},[103,10812,5434],{"class":1191},[103,10814,1221],{"class":170},[103,10816,10817,10819,10821,10823,10825],{"class":105,"line":416},[103,10818,2558],{"class":170},[103,10820,5449],{"class":1191},[103,10822,5452],{"class":170},[103,10824,5449],{"class":1191},[103,10826,1221],{"class":170},[103,10828,10829,10831,10833,10835,10837],{"class":105,"line":421},[103,10830,2558],{"class":170},[103,10832,5361],{"class":1191},[103,10834,5466],{"class":170},[103,10836,5361],{"class":1191},[103,10838,1221],{"class":170},[103,10840,10841,10843,10845],{"class":105,"line":427},[103,10842,2574],{"class":170},[103,10844,5424],{"class":1191},[103,10846,1221],{"class":170},[103,10848,10849,10851,10853],{"class":105,"line":432},[103,10850,1360],{"class":170},[103,10852,4591],{"class":1191},[103,10854,1221],{"class":170},[103,10856,10857,10859,10861,10863,10865],{"class":105,"line":438},[103,10858,2558],{"class":170},[103,10860,5496],{"class":1191},[103,10862,5499],{"class":170},[103,10864,5496],{"class":1191},[103,10866,1221],{"class":170},[103,10868,10869,10871,10873,10875,10877],{"class":105,"line":443},[103,10870,2558],{"class":170},[103,10872,4608],{"class":1191},[103,10874,4611],{"class":170},[103,10876,4608],{"class":1191},[103,10878,1221],{"class":170},[103,10880,10881,10883,10885,10887,10889],{"class":105,"line":449},[103,10882,2558],{"class":170},[103,10884,4623],{"class":1191},[103,10886,5526],{"class":170},[103,10888,4623],{"class":1191},[103,10890,1221],{"class":170},[103,10892,10893,10895,10897],{"class":105,"line":454},[103,10894,2574],{"class":170},[103,10896,4591],{"class":1191},[103,10898,1221],{"class":170},[103,10900,10901,10903,10905],{"class":105,"line":460},[103,10902,1427],{"class":170},[103,10904,5316],{"class":1191},[103,10906,1221],{"class":170},[103,10908,10909],{"class":105,"line":465},[103,10910,309],{"emptyLinePlaceholder":308},[103,10912,10913,10915,10917,10919,10921,10923,10925,10927,10929],{"class":105,"line":471},[103,10914,1370],{"class":170},[103,10916,3926],{"class":1191},[103,10918,1213],{"class":109},[103,10920,563],{"class":170},[103,10922,5567],{"class":113},[103,10924,3936],{"class":109},[103,10926,563],{"class":170},[103,10928,5574],{"class":113},[103,10930,1221],{"class":170},[103,10932,10933,10935,10937],{"class":105,"line":476},[103,10934,1748],{"class":170},[103,10936,3951],{"class":1191},[103,10938,1221],{"class":170},[103,10940,10941,10943,10945,10947,10949],{"class":105,"line":504},[103,10942,1360],{"class":170},[103,10944,3976],{"class":1191},[103,10946,5600],{"class":170},[103,10948,3976],{"class":1191},[103,10950,1221],{"class":170},[103,10952,10953,10955,10957],{"class":105,"line":530},[103,10954,2533],{"class":170},[103,10956,3951],{"class":1191},[103,10958,1221],{"class":170},[103,10960,10961,10963,10965,10967,10969],{"class":105,"line":574},[103,10962,1748],{"class":170},[103,10964,5621],{"class":1191},[103,10966,5624],{"class":170},[103,10968,5621],{"class":1191},[103,10970,1221],{"class":170},[103,10972,10973,10975,10977,10979,10981],{"class":105,"line":579},[103,10974,1748],{"class":170},[103,10976,5636],{"class":1191},[103,10978,5639],{"class":170},[103,10980,5636],{"class":1191},[103,10982,1221],{"class":170},[103,10984,10985,10987,10989],{"class":105,"line":590},[103,10986,1427],{"class":170},[103,10988,3926],{"class":1191},[103,10990,1221],{"class":170},[103,10992,10993,10995,10997],{"class":105,"line":635},[103,10994,1427],{"class":170},[103,10996,4404],{"class":1191},[103,10998,1221],{"class":170},[103,11000,11001,11003,11005],{"class":105,"line":665},[103,11002,1479],{"class":170},[103,11004,136],{"class":1191},[103,11006,1221],{"class":170},[23,11008,11009],{},"可以看到:",[6011,11011,11012,11018,11021,11027,11033],{},[1086,11013,11014,11015,11017],{},"雷达也可以设置更新频率",[100,11016,4014],{},"，这里设置为5",[1086,11019,11020],{},"雷达可以设置分辨率，设置为1，采样数量360个，最终生成的点云数量就是360",[1086,11022,11023,11024],{},"雷达也有噪声，模型为",[100,11025,11026],{},"gaussian",[1086,11028,11029,11030,11032],{},"雷达有扫描范围",[100,11031,5424],{},"，这里配置成0.12-3.5，0.015分辨率",[1086,11034,11035,11036,11038],{},"雷达的",[100,11037,5301],{},"就是雷达的joint中位置的设置值",[23,11040,11041],{},"下面这个蓝色的就是激光雷达的光线覆盖范围：",[23,11043,11044],{},[55,11045],{"alt":57,"src":11046},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1673.webp",[94,11048,11049],{"className":6018,"code":10102,"language":6020,"meta":57,"style":57},[100,11050,11051],{"__ignoreMap":57},[103,11052,11053,11055],{"class":105,"line":106},[103,11054,7836],{"class":170},[103,11056,7831],{"class":139},[23,11058,11059],{},[55,11060],{"alt":57,"src":11061},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1674.webp",[94,11063,11065],{"className":6018,"code":11064,"language":6020,"meta":57,"style":57},"ros2 topic info /scan\nros2 topic echo /scan\n",[100,11066,11067,11076],{"__ignoreMap":57},[103,11068,11069,11071,11073],{"class":105,"line":106},[103,11070,10125],{"class":170},[103,11072,188],{"class":166},[103,11074,11075],{"class":170},"scan\n",[103,11077,11078,11080,11082],{"class":105,"line":231},[103,11079,10135],{"class":170},[103,11081,188],{"class":166},[103,11083,11075],{"class":170},[23,11085,11086],{},[55,11087],{"alt":57,"src":11088},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1675.webp",[23,11090,11091],{},"接着我们尝试使用rviz2进行可视化激光雷达数据",[23,11093,11094],{},"添加和修改RVIZ2的如下：（通过LaserScan插件可以看到激光数据）",[23,11096,11097],{},[55,11098],{"alt":57,"src":11099},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1676.webp",[23,11101,11102],{},"相信你改完之后依然是看不到任何激光雷达的数据的，反看topic的echo出来的数据，不是0就是inf(无限大)，再看看gazebo你会发现，激光雷达并没有达到任何一个物体上。",[23,11104,11105],{},[55,11106],{"alt":57,"src":11107},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1677.webp",[23,11109,11110],{},"所以我们可以手动的给激光雷达周围添加一下东西，点击Gazebo工具栏的正方体，圆球或者圆柱，随意放置几个到我们激光雷达的最大扫描半径内。",[23,11112,11113],{},[55,11114],{"alt":57,"src":11115},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1678.webp",[23,11117,11118],{},[55,11119],{"alt":57,"src":11120},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1679.webp",[23,11122,11123],{},[55,11124],{"alt":57,"src":11125},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1680.webp",[6872,11127,11129],{"id":11128},"超声波ultrasonic","超声波Ultrasonic",[23,11131,11132,11133],{},"这玩意对于ROS2算法意义不是很大，控制组直接在MCU上实现即可，有需求可以学本节。 ",[32,11134,11135],{},"（可以跳过本节）",[23,11137,11138],{},"在实际的机器人开发过程中，我们可能会利用超声波传感器实现实时避障的功能，毕竟超声波的价格相较于激光雷达要便宜很多（便宜的几块钱）。",[23,11140,11141],{},"所以本节我们来说一下如何使用ROS2+Gazebo来仿真超声波传感器。",[23,11143,11144],{},"百科来一段：",[23,11146,11147,11148,11153,11154,11159,11160,11165],{},"超声波传感器是将超声波信号转换成其它能量信号（通常是电信号）的传感器。超声波是",[15,11149,11152],{"href":11150,"rel":11151},"https://baike.baidu.com/item/%E6%8C%AF%E5%8A%A8%E9%A2%91%E7%8E%87/8068137",[19],"振动频率","高于20kHz的机械波。它具有频率高、波长短、绕射现象小，特别是方向性好、能够成为",[15,11155,11158],{"href":11156,"rel":11157},"https://baike.baidu.com/item/%E5%B0%84%E7%BA%BF/327964",[19],"射线","而定向传播等特点。超声波对液体、固体的穿透本领很大，尤其是在阳光不透明的固体中。超声波碰到杂质或分界面会产生显著反射形成反射回波，碰到活动物体能产生",[15,11161,11164],{"href":11162,"rel":11163},"https://baike.baidu.com/item/%E5%A4%9A%E6%99%AE%E5%8B%92%E6%95%88%E5%BA%94/115710",[19],"多普勒效应","。超声波传感器广泛应用在工业、国防、生物医学等方面。",[23,11167,11168],{},"接着看看长什么样子：",[23,11170,11171],{},[55,11172],{"alt":57,"src":11173},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1681.webp",[23,11175,11176],{},"便宜的就长这样子，一共两个头，一个头用于发送波，一个头接收波。这个还稍微高级一点，带一个光敏电阻，可以为超声波数据做一些补偿。",[23,11178,11179],{},"超声波传感器原理是什么呢？",[23,11181,11182],{},[55,11183],{"alt":57,"src":11184},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1682.webp",[94,11186,11188],{"className":96,"code":11187,"language":98,"meta":57,"style":57},"距离=(发送时间-接收时间)*速度/2Copy to clipboardErrorCopied\n",[100,11189,11190],{"__ignoreMap":57},[103,11191,11192,11195,11197,11200,11203,11205,11208],{"class":105,"line":106},[103,11193,11194],{"class":109},"距离",[103,11196,563],{"class":113},[103,11198,11199],{"class":170},"(",[103,11201,11202],{"class":113},"发送时间-接收时间",[103,11204,21],{"class":170},[103,11206,11207],{"class":166},"*",[103,11209,11210],{"class":170},"速度/2Copy to clipboardErrorCopied\n",[23,11212,11213],{},"看了超声波的原理，你有没有发现和前面的激光雷达传感器是一样的，是的，所以超声波传感器插件和激光雷达传感器插件在Gazebo插件中是同一个：",[94,11215,11217],{"className":96,"code":11216,"language":98,"meta":57,"style":57},"libgazebo_ros_ray_sensor.so\n",[100,11218,11219],{"__ignoreMap":57},[103,11220,11221],{"class":105,"line":106},[103,11222,11216],{"class":109},[23,11224,11225],{},"超声波总要装在机器人身上某个位置，所以我们先添加一个关节和Joint，为了省事，link我们就只写个名字，你如果有需要可以按照前面的章节那样添加一下。",[94,11227,11229],{"className":1179,"code":11228,"language":1181,"meta":57,"style":57},"  \u003Clink name=\"ultrasonic_sensor_link\" />\n\n  \u003Cjoint name=\"ultrasonic_sensor_joint\" type=\"fixed\">\n    \u003Cparent link=\"base_link\"/>\n    \u003Cchild link=\"ultrasonic_sensor_link\"/>\n    \u003Corigin xyz=\"0.07 0.0 0.076\" rpy=\"0 0 0\"/>\n  \u003C/joint>\n",[100,11230,11231,11246,11250,11271,11285,11299,11320],{"__ignoreMap":57},[103,11232,11233,11235,11237,11239,11241,11244],{"class":105,"line":106},[103,11234,1230],{"class":170},[103,11236,1233],{"class":1191},[103,11238,1213],{"class":109},[103,11240,563],{"class":170},[103,11242,11243],{"class":113},"\"ultrasonic_sensor_link\"",[103,11245,2065],{"class":170},[103,11247,11248],{"class":105,"line":231},[103,11249,309],{"emptyLinePlaceholder":308},[103,11251,11252,11254,11256,11258,11260,11263,11265,11267,11269],{"class":105,"line":259},[103,11253,1230],{"class":170},[103,11255,1254],{"class":1191},[103,11257,1213],{"class":109},[103,11259,563],{"class":170},[103,11261,11262],{"class":113},"\"ultrasonic_sensor_joint\"",[103,11264,1114],{"class":109},[103,11266,563],{"class":170},[103,11268,1268],{"class":113},[103,11270,1221],{"class":170},[103,11272,11273,11275,11277,11279,11281,11283],{"class":105,"line":274},[103,11274,1275],{"class":170},[103,11276,1278],{"class":1191},[103,11278,1281],{"class":109},[103,11280,563],{"class":170},[103,11282,1301],{"class":113},[103,11284,1243],{"class":170},[103,11286,11287,11289,11291,11293,11295,11297],{"class":105,"line":286},[103,11288,1275],{"class":170},[103,11290,1294],{"class":1191},[103,11292,1281],{"class":109},[103,11294,563],{"class":170},[103,11296,11243],{"class":113},[103,11298,1243],{"class":170},[103,11300,11301,11303,11305,11307,11309,11312,11314,11316,11318],{"class":105,"line":305},[103,11302,1275],{"class":170},[103,11304,1310],{"class":1191},[103,11306,1313],{"class":109},[103,11308,563],{"class":170},[103,11310,11311],{"class":113},"\"0.07 0.0 0.076\"",[103,11313,1321],{"class":109},[103,11315,563],{"class":170},[103,11317,1326],{"class":113},[103,11319,1243],{"class":170},[103,11321,11322,11324,11326],{"class":105,"line":312},[103,11323,1333],{"class":170},[103,11325,1254],{"class":1191},[103,11327,1221],{"class":170},[23,11329,11330],{},"添加完了关节，我们就可以配置gazebo的插件了，gazebo插件配置如下",[94,11332,11334],{"className":1179,"code":11333,"language":1181,"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/pose>\n\n      \u003Cvisualize>true\u003C/visualize>\n\n      \u003Cupdate_rate>5\u003C/update_rate>\n      \u003Cray>\n        \u003Cscan>\n\n          \u003Chorizontal>\n            \u003Csamples>5\u003C/samples>\n            \u003Cresolution>1\u003C/resolution>\n            \u003Cmin_angle>-0.12\u003C/min_angle>\n            \u003Cmax_angle>0.12\u003C/max_angle>\n          \u003C/horizontal>\n\n          \u003Cvertical>\n            \u003Csamples>5\u003C/samples>\n            \u003Cresolution>1\u003C/resolution>\n            \u003Cmin_angle>-0.01\u003C/min_angle>\n            \u003Cmax_angle>0.01\u003C/max_angle>\n          \u003C/vertical>\n        \u003C/scan>\n\n        \u003Crange>\n          \u003Cmin>0.02\u003C/min>\n          \u003Cmax>4\u003C/max>\n          \u003Cresolution>0.01\u003C/resolution>\n        \u003C/range>\n\n        \u003Cnoise>\n          \u003Ctype>gaussian\u003C/type>\n          \u003Cmean>0.0\u003C/mean>\n          \u003Cstddev>0.01\u003C/stddev>\n        \u003C/noise>\n      \u003C/ray>\n      \u003Cplugin name=\"ultrasonic_sensor_controller\" filename=\"libgazebo_ros_ray_sensor.so\">\n        \u003Cros>\n\n          \u003Cremapping>~/out:=ultrasonic_sensor_1\u003C/remapping>\n        \u003C/ros>\n\n        \u003Coutput_type>sensor_msgs/Range\u003C/output_type>\n\n        \u003Cradiation_type>ultrasound\u003C/radiation_type>\n\n        \u003Cframe_name>ultrasonic_sensor_link\u003C/frame_name>\n      \u003C/plugin>\n    \u003C/sensor>\n  \u003C/gazebo>\n\n",[100,11335,11336,11350,11371,11384,11388,11400,11404,11416,11424,11432,11436,11444,11456,11469,11482,11495,11503,11507,11516,11528,11540,11553,11565,11573,11581,11585,11593,11606,11619,11631,11639,11643,11651,11663,11675,11687,11695,11703,11724,11732,11736,11749,11757,11761,11774,11778,11792,11796,11809,11817,11825],{"__ignoreMap":57},[103,11337,11338,11340,11342,11344,11346,11348],{"class":105,"line":106},[103,11339,1230],{"class":170},[103,11341,136],{"class":1191},[103,11343,3774],{"class":109},[103,11345,563],{"class":170},[103,11347,11243],{"class":113},[103,11349,1221],{"class":170},[103,11351,11352,11354,11356,11358,11360,11362,11364,11366,11369],{"class":105,"line":231},[103,11353,1275],{"class":170},[103,11355,4404],{"class":1191},[103,11357,1114],{"class":109},[103,11359,563],{"class":170},[103,11361,5251],{"class":113},[103,11363,1213],{"class":109},[103,11365,563],{"class":170},[103,11367,11368],{"class":113},"\"ultrasonic_sensor\"",[103,11370,1221],{"class":170},[103,11372,11373,11375,11377,11380,11382],{"class":105,"line":259},[103,11374,1370],{"class":170},[103,11376,5301],{"class":1191},[103,11378,11379],{"class":170},">0 0 0 0 0 0\u003C/",[103,11381,5301],{"class":1191},[103,11383,1221],{"class":170},[103,11385,11386],{"class":105,"line":274},[103,11387,309],{"emptyLinePlaceholder":308},[103,11389,11390,11392,11394,11396,11398],{"class":105,"line":286},[103,11391,1370],{"class":170},[103,11393,4547],{"class":1191},[103,11395,4142],{"class":170},[103,11397,4547],{"class":1191},[103,11399,1221],{"class":170},[103,11401,11402],{"class":105,"line":305},[103,11403,309],{"emptyLinePlaceholder":308},[103,11405,11406,11408,11410,11412,11414],{"class":105,"line":312},[103,11407,1370],{"class":170},[103,11409,4014],{"class":1191},[103,11411,5289],{"class":170},[103,11413,4014],{"class":1191},[103,11415,1221],{"class":170},[103,11417,11418,11420,11422],{"class":105,"line":327},[103,11419,1370],{"class":170},[103,11421,5316],{"class":1191},[103,11423,1221],{"class":170},[103,11425,11426,11428,11430],{"class":105,"line":348},[103,11427,1748],{"class":170},[103,11429,5326],{"class":1191},[103,11431,1221],{"class":170},[103,11433,11434],{"class":105,"line":359},[103,11435,309],{"emptyLinePlaceholder":308},[103,11437,11438,11440,11442],{"class":105,"line":368},[103,11439,1360],{"class":170},[103,11441,5336],{"class":1191},[103,11443,1221],{"class":170},[103,11445,11446,11448,11450,11452,11454],{"class":105,"line":383},[103,11447,2558],{"class":170},[103,11449,5346],{"class":1191},[103,11451,5289],{"class":170},[103,11453,5346],{"class":1191},[103,11455,1221],{"class":170},[103,11457,11458,11460,11462,11465,11467],{"class":105,"line":388},[103,11459,2558],{"class":170},[103,11461,5361],{"class":1191},[103,11463,11464],{"class":170},">1\u003C/",[103,11466,5361],{"class":1191},[103,11468,1221],{"class":170},[103,11470,11471,11473,11475,11478,11480],{"class":105,"line":394},[103,11472,2558],{"class":170},[103,11474,5376],{"class":1191},[103,11476,11477],{"class":170},">-0.12\u003C/",[103,11479,5376],{"class":1191},[103,11481,1221],{"class":170},[103,11483,11484,11486,11488,11491,11493],{"class":105,"line":399},[103,11485,2558],{"class":170},[103,11487,5391],{"class":1191},[103,11489,11490],{"class":170},">0.12\u003C/",[103,11492,5391],{"class":1191},[103,11494,1221],{"class":170},[103,11496,11497,11499,11501],{"class":105,"line":405},[103,11498,2574],{"class":170},[103,11500,5336],{"class":1191},[103,11502,1221],{"class":170},[103,11504,11505],{"class":105,"line":410},[103,11506,309],{"emptyLinePlaceholder":308},[103,11508,11509,11511,11514],{"class":105,"line":416},[103,11510,1360],{"class":170},[103,11512,11513],{"class":1191},"vertical",[103,11515,1221],{"class":170},[103,11517,11518,11520,11522,11524,11526],{"class":105,"line":421},[103,11519,2558],{"class":170},[103,11521,5346],{"class":1191},[103,11523,5289],{"class":170},[103,11525,5346],{"class":1191},[103,11527,1221],{"class":170},[103,11529,11530,11532,11534,11536,11538],{"class":105,"line":427},[103,11531,2558],{"class":170},[103,11533,5361],{"class":1191},[103,11535,11464],{"class":170},[103,11537,5361],{"class":1191},[103,11539,1221],{"class":170},[103,11541,11542,11544,11546,11549,11551],{"class":105,"line":432},[103,11543,2558],{"class":170},[103,11545,5376],{"class":1191},[103,11547,11548],{"class":170},">-0.01\u003C/",[103,11550,5376],{"class":1191},[103,11552,1221],{"class":170},[103,11554,11555,11557,11559,11561,11563],{"class":105,"line":438},[103,11556,2558],{"class":170},[103,11558,5391],{"class":1191},[103,11560,5526],{"class":170},[103,11562,5391],{"class":1191},[103,11564,1221],{"class":170},[103,11566,11567,11569,11571],{"class":105,"line":443},[103,11568,2574],{"class":170},[103,11570,11513],{"class":1191},[103,11572,1221],{"class":170},[103,11574,11575,11577,11579],{"class":105,"line":449},[103,11576,2533],{"class":170},[103,11578,5326],{"class":1191},[103,11580,1221],{"class":170},[103,11582,11583],{"class":105,"line":454},[103,11584,309],{"emptyLinePlaceholder":308},[103,11586,11587,11589,11591],{"class":105,"line":460},[103,11588,1748],{"class":170},[103,11590,5424],{"class":1191},[103,11592,1221],{"class":170},[103,11594,11595,11597,11599,11602,11604],{"class":105,"line":465},[103,11596,1360],{"class":170},[103,11598,5434],{"class":1191},[103,11600,11601],{"class":170},">0.02\u003C/",[103,11603,5434],{"class":1191},[103,11605,1221],{"class":170},[103,11607,11608,11610,11612,11615,11617],{"class":105,"line":471},[103,11609,1360],{"class":170},[103,11611,5449],{"class":1191},[103,11613,11614],{"class":170},">4\u003C/",[103,11616,5449],{"class":1191},[103,11618,1221],{"class":170},[103,11620,11621,11623,11625,11627,11629],{"class":105,"line":476},[103,11622,1360],{"class":170},[103,11624,5361],{"class":1191},[103,11626,5526],{"class":170},[103,11628,5361],{"class":1191},[103,11630,1221],{"class":170},[103,11632,11633,11635,11637],{"class":105,"line":504},[103,11634,2533],{"class":170},[103,11636,5424],{"class":1191},[103,11638,1221],{"class":170},[103,11640,11641],{"class":105,"line":530},[103,11642,309],{"emptyLinePlaceholder":308},[103,11644,11645,11647,11649],{"class":105,"line":574},[103,11646,1748],{"class":170},[103,11648,4591],{"class":1191},[103,11650,1221],{"class":170},[103,11652,11653,11655,11657,11659,11661],{"class":105,"line":579},[103,11654,1360],{"class":170},[103,11656,5496],{"class":1191},[103,11658,5499],{"class":170},[103,11660,5496],{"class":1191},[103,11662,1221],{"class":170},[103,11664,11665,11667,11669,11671,11673],{"class":105,"line":590},[103,11666,1360],{"class":170},[103,11668,4608],{"class":1191},[103,11670,4611],{"class":170},[103,11672,4608],{"class":1191},[103,11674,1221],{"class":170},[103,11676,11677,11679,11681,11683,11685],{"class":105,"line":635},[103,11678,1360],{"class":170},[103,11680,4623],{"class":1191},[103,11682,5526],{"class":170},[103,11684,4623],{"class":1191},[103,11686,1221],{"class":170},[103,11688,11689,11691,11693],{"class":105,"line":665},[103,11690,2533],{"class":170},[103,11692,4591],{"class":1191},[103,11694,1221],{"class":170},[103,11696,11697,11699,11701],{"class":105,"line":677},[103,11698,1427],{"class":170},[103,11700,5316],{"class":1191},[103,11702,1221],{"class":170},[103,11704,11705,11707,11709,11711,11713,11716,11718,11720,11722],{"class":105,"line":799},[103,11706,1370],{"class":170},[103,11708,3926],{"class":1191},[103,11710,1213],{"class":109},[103,11712,563],{"class":170},[103,11714,11715],{"class":113},"\"ultrasonic_sensor_controller\"",[103,11717,3936],{"class":109},[103,11719,563],{"class":170},[103,11721,5574],{"class":113},[103,11723,1221],{"class":170},[103,11725,11726,11728,11730],{"class":105,"line":805},[103,11727,1748],{"class":170},[103,11729,3951],{"class":1191},[103,11731,1221],{"class":170},[103,11733,11734],{"class":105,"line":817},[103,11735,309],{"emptyLinePlaceholder":308},[103,11737,11738,11740,11742,11745,11747],{"class":105,"line":823},[103,11739,1360],{"class":170},[103,11741,3976],{"class":1191},[103,11743,11744],{"class":170},">~/out:=ultrasonic_sensor_1\u003C/",[103,11746,3976],{"class":1191},[103,11748,1221],{"class":170},[103,11750,11751,11753,11755],{"class":105,"line":829},[103,11752,2533],{"class":170},[103,11754,3951],{"class":1191},[103,11756,1221],{"class":170},[103,11758,11759],{"class":105,"line":835},[103,11760,309],{"emptyLinePlaceholder":308},[103,11762,11763,11765,11767,11770,11772],{"class":105,"line":841},[103,11764,1748],{"class":170},[103,11766,5621],{"class":1191},[103,11768,11769],{"class":170},">sensor_msgs/Range\u003C/",[103,11771,5621],{"class":1191},[103,11773,1221],{"class":170},[103,11775,11776],{"class":105,"line":864},[103,11777,309],{"emptyLinePlaceholder":308},[103,11779,11780,11782,11785,11788,11790],{"class":105,"line":907},[103,11781,1748],{"class":170},[103,11783,11784],{"class":1191},"radiation_type",[103,11786,11787],{"class":170},">ultrasound\u003C/",[103,11789,11784],{"class":1191},[103,11791,1221],{"class":170},[103,11793,11794],{"class":105,"line":944},[103,11795,309],{"emptyLinePlaceholder":308},[103,11797,11798,11800,11802,11805,11807],{"class":105,"line":949},[103,11799,1748],{"class":170},[103,11801,5636],{"class":1191},[103,11803,11804],{"class":170},">ultrasonic_sensor_link\u003C/",[103,11806,5636],{"class":1191},[103,11808,1221],{"class":170},[103,11810,11811,11813,11815],{"class":105,"line":973},[103,11812,1427],{"class":170},[103,11814,3926],{"class":1191},[103,11816,1221],{"class":170},[103,11818,11819,11821,11823],{"class":105,"line":997},[103,11820,1479],{"class":170},[103,11822,4404],{"class":1191},[103,11824,1221],{"class":170},[103,11826,11827,11829,11831],{"class":105,"line":1877},[103,11828,1333],{"class":170},[103,11830,136],{"class":1191},[103,11832,1221],{"class":170},[23,11834,11835],{},"添加完成后就可以编译测试下代码",[94,11837,11838],{"className":6018,"code":6628,"language":6020,"meta":57,"style":57},[100,11839,11840,11852,11860],{"__ignoreMap":57},[103,11841,11842,11844,11846,11848,11850],{"class":105,"line":106},[103,11843,6635],{"class":170},[103,11845,6639],{"class":6638},[103,11847,6642],{"class":170},[103,11849,174],{"class":166},[103,11851,6647],{"class":170},[103,11853,11854,11856,11858],{"class":105,"line":231},[103,11855,6652],{"class":170},[103,11857,188],{"class":166},[103,11859,6657],{"class":170},[103,11861,11862],{"class":105,"line":259},[103,11863,6662],{"class":170},[23,11865,11866],{},"没有物体的前面可以放个东西",[23,11868,11869],{},[55,11870],{"alt":57,"src":11871},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1683.webp",[23,11873,11874],{},"打开终端，输入下面指令",[94,11876,11878],{"className":96,"code":11877,"language":98,"meta":57,"style":57},"ros2 topic list \nros2 topic info /ultrasonic_sensor_1\nros2 topic echo /ultrasonic_sensor_1Copy to clipboardErrorCopied\n",[100,11879,11880,11893,11905],{"__ignoreMap":57},[103,11881,11882,11884,11887,11890],{"class":105,"line":106},[103,11883,1045],{"class":109},[103,11885,11886],{"class":113}," topic",[103,11888,11889],{"class":113}," list",[103,11891,11892],{"class":170}," \n",[103,11894,11895,11897,11899,11902],{"class":105,"line":231},[103,11896,1045],{"class":109},[103,11898,11886],{"class":113},[103,11900,11901],{"class":113}," info",[103,11903,11904],{"class":113}," /ultrasonic_sensor_1\n",[103,11906,11907,11909,11911,11914,11917,11919],{"class":105,"line":259},[103,11908,1045],{"class":109},[103,11910,11886],{"class":113},[103,11912,11913],{"class":113}," echo",[103,11915,11916],{"class":113}," /ultrasonic_sensor_1Copy",[103,11918,756],{"class":113},[103,11920,11921],{"class":113}," clipboardErrorCopied\n",[23,11923,11924],{},"不出意外可以看到下面的数据",[94,11926,11928],{"className":96,"code":11927,"language":98,"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",[100,11929,11930,11935,11940,11948,11956,11964,11972,11980,11988,11996],{"__ignoreMap":57},[103,11931,11932],{"class":105,"line":106},[103,11933,11934],{"class":109},"header:\n",[103,11936,11937],{"class":105,"line":231},[103,11938,11939],{"class":109},"  stamp:\n",[103,11941,11942,11945],{"class":105,"line":259},[103,11943,11944],{"class":109},"    sec:",[103,11946,11947],{"class":139}," 4458\n",[103,11949,11950,11953],{"class":105,"line":274},[103,11951,11952],{"class":109},"    nanosec:",[103,11954,11955],{"class":139}," 1000000\n",[103,11957,11958,11961],{"class":105,"line":286},[103,11959,11960],{"class":109},"  frame_id:",[103,11962,11963],{"class":113}," ultrasonic_sensor_link\n",[103,11965,11966,11969],{"class":105,"line":305},[103,11967,11968],{"class":109},"radiation_type:",[103,11970,11971],{"class":139}," 0\n",[103,11973,11974,11977],{"class":105,"line":312},[103,11975,11976],{"class":109},"field_of_view:",[103,11978,11979],{"class":139}," 0.23999999463558197\n",[103,11981,11982,11985],{"class":105,"line":327},[103,11983,11984],{"class":109},"min_range:",[103,11986,11987],{"class":139}," 0.019999999552965164\n",[103,11989,11990,11993],{"class":105,"line":348},[103,11991,11992],{"class":109},"max_range:",[103,11994,11995],{"class":139}," 4.0\n",[103,11997,11998,12001],{"class":105,"line":359},[103,11999,12000],{"class":109},"range:",[103,12002,12003],{"class":139}," 2.6798219680786133\n",[23,12005,12006],{},"这里的range就是fishbot到墙之间的距离：2.67982",[23,12008,12009,12010],{},"我们来讲一讲超声波传感器的数据类型",[100,12011,12012],{},"sensor_msgs/msg/Range",[94,12014,12016],{"className":6018,"code":12015,"language":6020,"meta":57,"style":57},"\n# ros2 topic info /ultrasonic_sensor_1\nType: sensor_msgs/msg/Range\nPublisher count: 1\nSubscription count: 0\n\n",[100,12017,12018,12022,12027,12042,12050],{"__ignoreMap":57},[103,12019,12020],{"class":105,"line":106},[103,12021,309],{"emptyLinePlaceholder":308},[103,12023,12024],{"class":105,"line":231},[103,12025,12026],{"class":227},"# ros2 topic info /ultrasonic_sensor_1\n",[103,12028,12029,12032,12034,12037,12039],{"class":105,"line":259},[103,12030,12031],{"class":170},"Type: sensor_msgs",[103,12033,188],{"class":166},[103,12035,12036],{"class":170},"msg",[103,12038,188],{"class":166},[103,12040,12041],{"class":170},"Range\n",[103,12043,12044,12047],{"class":105,"line":274},[103,12045,12046],{"class":170},"Publisher count: ",[103,12048,12049],{"class":139},"1\n",[103,12051,12052,12055],{"class":105,"line":286},[103,12053,12054],{"class":170},"Subscription count: ",[103,12056,12057],{"class":139},"0\n",[23,12059,12060,12061,12064],{},"你可以使用",[100,12062,12063],{},"ros2 interface show sensor_msgs/msg/Range","看到详细的解释，我们翻译一下",[94,12066,12068],{"className":6018,"code":12067,"language":6020,"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/Header 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/2 到 field_of_view/2 之间。\n\n                        # 0 角度对应于传感器的 x 轴。\n\nfloat32 min_range       # 最小范围值 [m]\nfloat32 max_range       # 最大范围值 [m]\n\n                        #  固定距离需要 min_range==max_range\n\nfloat32 range           # 范围数据 [m]\n\n                        # (Note: values \u003C range_min or > range_max should be discarded)\n\n                        # Fixed distance rangers only output -Inf or +Inf.\n\n                        # -Inf represents a detection within fixed distance.\n\n                        # (Detection too close to the sensor to quantify)\n\n                        # +Inf represents no detection within the fixed distance.\n\n                        # (Object out of range)\n\n",[100,12069,12070,12074,12079,12083,12088,12092,12097,12101,12106,12111,12115,12120,12124,12129,12133,12138,12142,12147,12151,12164,12168,12173,12177,12182,12186,12191,12203,12214,12218,12226,12230,12235,12239,12247,12251,12256,12260,12265,12269,12277,12285,12289,12294,12298,12308,12312,12317,12321,12326,12330,12335,12339,12344,12348,12353,12357],{"__ignoreMap":57},[103,12071,12072],{"class":105,"line":106},[103,12073,309],{"emptyLinePlaceholder":308},[103,12075,12076],{"class":105,"line":231},[103,12077,12078],{"class":227},"# Single range reading from an active ranger that emits energy and reports\n",[103,12080,12081],{"class":105,"line":259},[103,12082,309],{"emptyLinePlaceholder":308},[103,12084,12085],{"class":105,"line":274},[103,12086,12087],{"class":227},"# one range reading that is valid along an arc at the distance measured.\n",[103,12089,12090],{"class":105,"line":286},[103,12091,309],{"emptyLinePlaceholder":308},[103,12093,12094],{"class":105,"line":305},[103,12095,12096],{"class":227},"# This message is  not appropriate for laser scanners. See the LaserScan\n",[103,12098,12099],{"class":105,"line":312},[103,12100,309],{"emptyLinePlaceholder":308},[103,12102,12103],{"class":105,"line":327},[103,12104,12105],{"class":227},"# message if you are working with a laser scanner.\n",[103,12107,12108],{"class":105,"line":348},[103,12109,12110],{"class":227},"#\n",[103,12112,12113],{"class":105,"line":359},[103,12114,309],{"emptyLinePlaceholder":308},[103,12116,12117],{"class":105,"line":368},[103,12118,12119],{"class":227},"# This message also can represent a fixed-distance (binary) ranger.  This\n",[103,12121,12122],{"class":105,"line":383},[103,12123,309],{"emptyLinePlaceholder":308},[103,12125,12126],{"class":105,"line":388},[103,12127,12128],{"class":227},"# sensor will have min_range===max_range===distance of detection.\n",[103,12130,12131],{"class":105,"line":394},[103,12132,309],{"emptyLinePlaceholder":308},[103,12134,12135],{"class":105,"line":399},[103,12136,12137],{"class":227},"# These sensors follow REP 117 and will output -Inf if the object is detected\n",[103,12139,12140],{"class":105,"line":405},[103,12141,309],{"emptyLinePlaceholder":308},[103,12143,12144],{"class":105,"line":410},[103,12145,12146],{"class":227},"# and +Inf if the object is outside of the detection range.\n",[103,12148,12149],{"class":105,"line":416},[103,12150,309],{"emptyLinePlaceholder":308},[103,12152,12153,12156,12158,12161],{"class":105,"line":421},[103,12154,12155],{"class":170},"std_msgs",[103,12157,188],{"class":166},[103,12159,12160],{"class":170},"Header header ",[103,12162,12163],{"class":227},"# timestamp in the header is the time the ranger\n",[103,12165,12166],{"class":105,"line":427},[103,12167,309],{"emptyLinePlaceholder":308},[103,12169,12170],{"class":105,"line":432},[103,12171,12172],{"class":227},"                             # returned the distance reading\n",[103,12174,12175],{"class":105,"line":438},[103,12176,309],{"emptyLinePlaceholder":308},[103,12178,12179],{"class":105,"line":443},[103,12180,12181],{"class":227},"# Radiation type enums\n",[103,12183,12184],{"class":105,"line":449},[103,12185,309],{"emptyLinePlaceholder":308},[103,12187,12188],{"class":105,"line":454},[103,12189,12190],{"class":227},"# If you want a value added to this list, send an email to the ros-users list\n",[103,12192,12193,12196,12199,12201],{"class":105,"line":460},[103,12194,12195],{"class":170},"uint8 ",[103,12197,12198],{"class":139},"ULTRASOUND",[103,12200,563],{"class":166},[103,12202,12057],{"class":139},[103,12204,12205,12207,12210,12212],{"class":105,"line":465},[103,12206,12195],{"class":170},[103,12208,12209],{"class":139},"INFRARED",[103,12211,563],{"class":166},[103,12213,12049],{"class":139},[103,12215,12216],{"class":105,"line":471},[103,12217,309],{"emptyLinePlaceholder":308},[103,12219,12220,12223],{"class":105,"line":476},[103,12221,12222],{"class":170},"uint8 radiation_type    ",[103,12224,12225],{"class":227},"# 传感器射线类型\n",[103,12227,12228],{"class":105,"line":504},[103,12229,309],{"emptyLinePlaceholder":308},[103,12231,12232],{"class":105,"line":530},[103,12233,12234],{"class":227},"                        # (sound, IR, etc) [enum]\n",[103,12236,12237],{"class":105,"line":574},[103,12238,309],{"emptyLinePlaceholder":308},[103,12240,12241,12244],{"class":105,"line":579},[103,12242,12243],{"class":170},"float32 field_of_view   ",[103,12245,12246],{"class":227},"# 距离数据对应的弧[rad]的大小，测量物体的范围介于         \n",[103,12248,12249],{"class":105,"line":590},[103,12250,309],{"emptyLinePlaceholder":308},[103,12252,12253],{"class":105,"line":635},[103,12254,12255],{"class":227},"                        # -field_of_view/2 到 field_of_view/2 之间。\n",[103,12257,12258],{"class":105,"line":665},[103,12259,309],{"emptyLinePlaceholder":308},[103,12261,12262],{"class":105,"line":677},[103,12263,12264],{"class":227},"                        # 0 角度对应于传感器的 x 轴。\n",[103,12266,12267],{"class":105,"line":799},[103,12268,309],{"emptyLinePlaceholder":308},[103,12270,12271,12274],{"class":105,"line":805},[103,12272,12273],{"class":170},"float32 min_range       ",[103,12275,12276],{"class":227},"# 最小范围值 [m]\n",[103,12278,12279,12282],{"class":105,"line":817},[103,12280,12281],{"class":170},"float32 max_range       ",[103,12283,12284],{"class":227},"# 最大范围值 [m]\n",[103,12286,12287],{"class":105,"line":823},[103,12288,309],{"emptyLinePlaceholder":308},[103,12290,12291],{"class":105,"line":829},[103,12292,12293],{"class":227},"                        #  固定距离需要 min_range==max_range\n",[103,12295,12296],{"class":105,"line":835},[103,12297,309],{"emptyLinePlaceholder":308},[103,12299,12300,12303,12305],{"class":105,"line":841},[103,12301,12302],{"class":170},"float32 ",[103,12304,5424],{"class":139},[103,12306,12307],{"class":227},"           # 范围数据 [m]\n",[103,12309,12310],{"class":105,"line":864},[103,12311,309],{"emptyLinePlaceholder":308},[103,12313,12314],{"class":105,"line":907},[103,12315,12316],{"class":227},"                        # (Note: values \u003C range_min or > range_max should be discarded)\n",[103,12318,12319],{"class":105,"line":944},[103,12320,309],{"emptyLinePlaceholder":308},[103,12322,12323],{"class":105,"line":949},[103,12324,12325],{"class":227},"                        # Fixed distance rangers only output -Inf or +Inf.\n",[103,12327,12328],{"class":105,"line":973},[103,12329,309],{"emptyLinePlaceholder":308},[103,12331,12332],{"class":105,"line":997},[103,12333,12334],{"class":227},"                        # -Inf represents a detection within fixed distance.\n",[103,12336,12337],{"class":105,"line":1877},[103,12338,309],{"emptyLinePlaceholder":308},[103,12340,12341],{"class":105,"line":1886},[103,12342,12343],{"class":227},"                        # (Detection too close to the sensor to quantify)\n",[103,12345,12346],{"class":105,"line":1901},[103,12347,309],{"emptyLinePlaceholder":308},[103,12349,12350],{"class":105,"line":1916},[103,12351,12352],{"class":227},"                        # +Inf represents no detection within the fixed distance.\n",[103,12354,12355],{"class":105,"line":1925},[103,12356,309],{"emptyLinePlaceholder":308},[103,12358,12359],{"class":105,"line":1934},[103,12360,12361],{"class":227},"                        # (Object out of range)\n",[23,12363,12364],{},"结论，主要关注range就可以了。",[23,12366,12367],{},"在rviz2里添加超声波数据",[23,12369,12370],{},"Add ->By topic->Range",[23,12372,12373],{},[55,12374],{"alt":57,"src":12375},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1684.webp",[23,12377,12378],{},[55,12379],{"alt":57,"src":12380},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1685.webp",[86,12382,12383],{"id":12383},"搭建世界地图",[23,12385,12386],{},"本节我们要在Gazebo中建立一个测试的环境，其实也很简单，利用Gazebo的画墙工具即可完成。",[23,12388,12389],{},"world即世界，gazebo的world文件就是用于描述世界模型的，也就是环境模型。",[23,12391,12392],{},"Gazebo已经为我们准备了很多常用的物体模型，除了基础的圆球，圆柱，立方体外的，其实还有飞机、汽车、房子等你现实中无法拥有的。",[23,12394,12395],{},"但是一开始安装Gazebo的时候并不会帮你下载好这些模型，需要我们手动下载，找一个你要存模型的文件夹，打开终端，复制粘贴下面这句",[94,12397,12399],{"className":6018,"code":12398,"language":6020,"meta":57,"style":57},"git clone https://github.com/osrf/gazebo_models\n",[100,12400,12401],{"__ignoreMap":57},[103,12402,12403,12406,12408,12411,12413,12416,12418],{"class":105,"line":106},[103,12404,12405],{"class":170},"git clone https:",[103,12407,294],{"class":166},[103,12409,12410],{"class":170},"github.com",[103,12412,188],{"class":166},[103,12414,12415],{"class":170},"osrf",[103,12417,188],{"class":166},[103,12419,12420],{"class":170},"gazebo_models\n",[23,12422,12423],{},"并把存放模型的路径加到~/.bashrc里（第二个冒号后面的可以不写，第二个冒号后面的是多个路径。）",[23,12425,12426],{},"GAZEBO_MODEL_PATH是老版Gazebo Classic的宏。",[23,12428,12429],{},"IGN_GAZEBO_RESOURCE_PATH是新版Igntion Gazebo的宏。",[23,12431,12432],{},"模型都通用，可以一起配置上。",[23,12434,12435],{},[55,12436],{"alt":57,"src":12437},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1686.webp",[23,12439,12440],{},"刷新环境变量",[94,12442,12444],{"className":6018,"code":12443,"language":6020,"meta":57,"style":57},"source ~/.bashrc\n",[100,12445,12446],{"__ignoreMap":57},[103,12447,12448,12451,12454],{"class":105,"line":106},[103,12449,12450],{"class":170},"source ",[103,12452,12453],{"class":166},"~/",[103,12455,12456],{"class":170},".bashrc\n",[23,12458,12459,12460,12462],{},"此时再次打开终端，输入",[100,12461,136],{},"，把选项卡切换到Insert",[23,12464,12465],{},[55,12466],{"alt":57,"src":12467},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1687.webp",[23,12469,12470],{},"在Insert选项卡下可以看到一个目录，以及目录下的模型名称，随着下载脚本的不断下载，这里的模型会越来越多。",[23,12472,12473],{},"随手拖几个，搭建一个漂亮的环境出来~",[23,12475,12476],{},"每个成功的男人都有一辆车，咱们也不例外",[23,12478,12479],{},[55,12480],{"alt":57,"src":12481},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1688.webp",[23,12483,12484],{},"上面是Gazebo为我们准备好的开源模型，我们也可以通过Gazebo的工具来自己画一个环境。",[23,12486,12487],{},"然后也可以用墙壁工具建墙",[23,12489,12490],{},"Gazebo左上角->Edit->Building Editor",[23,12492,12493],{},"接着可以看到这样一个编辑界面",[23,12495,12496],{},[55,12497],{"alt":57,"src":12498},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1689.webp",[23,12500,12501],{},"点击左边的Wall,你就可以在上方的白色区域进行建墙了，这个和模拟人生游戏不一样，这个是画二维的墙生成三维的墙，模拟人生是直接在三维里画。",[23,12503,12504],{},[55,12505],{"alt":57,"src":12506},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1690.webp",[23,12508,12509],{},"建完后还可以用选Add Color或者Add Texture，然后点击下方墙，给墙添加颜色或者纹理。",[23,12511,12512],{},"首先你要有一个地图，小鱼为你准备了两个，两个图片都是800*600像素的。",[23,12514,12515],{},[55,12516],{"alt":57,"src":12517},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1691.webp",[23,12519,12520],{},[55,12521],{"alt":57,"src":12522},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1692.webp",[23,12524,12525],{},"打开Gazebo->Gazebo左上角->Edit->Building Editor->左下方选Import",[23,12527,12528],{},[55,12529],{"alt":57,"src":12530},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1693.webp",[23,12532,12533],{},"将上面两个图片存到本地，在这个界面选图片，记着选Next",[23,12535,12536],{},[55,12537],{"alt":57,"src":12538},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1694.webp",[23,12540,12541],{},"左边选尺寸对应关系",[23,12543,12544],{},[55,12545],{"alt":57,"src":12546},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1695.webp",[23,12548,12549],{},"我们选择默认的，100像素/米。点击OK（需要手动将100改变一下才能点击OK哦），之后就可以用图片画墙了。",[23,12551,12552],{},"注意：导入完图片不会直接出来墙，图片只是提供了墙的大概位置，需要你手动用墙再将边描一遍。",[23,12554,12555],{},[55,12556],{"alt":57,"src":12557},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1696.webp",[23,12559,12560],{},"建完后点击File->Exit,在退出的弹框中选Exit。",[23,12562,12563],{},"接着在Gazebo界面中就可以看到墙了，我们再手动添加几个物体，就可以用于下面的导航使用了。",[23,12565,12566],{},[55,12567],{"alt":57,"src":12568},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1697.webp",[23,12570,12571],{},"添加完，接着点击File->SaveWorld，将文件保存到我们的fishbot_descrption的world下。",[23,12573,12574],{},"没有world目录的小伙伴可以先手动创建下",[23,12576,12577],{},[55,12578],{"alt":57,"src":12579},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1698.webp",[23,12581,12582],{},"加载world其实也很简单，可以先启动Gazebo，再手动的加载文件，也可以在Gazebo启动时加载：",[23,12584,12585],{},"比如在前面加载ROS2插件基础上再加载fishbot.world。",[94,12587,12589],{"className":6018,"code":12588,"language":6020,"meta":57,"style":57},"gazebo --verbose  -s libgazebo_ros_init.so -s  libgazebo_ros_factory.so 你的world文件目录/fishbot.world\n",[100,12590,12591],{"__ignoreMap":57},[103,12592,12593,12596,12598,12601,12603,12606,12608,12611,12613],{"class":105,"line":106},[103,12594,12595],{"class":170},"gazebo ",[103,12597,6639],{"class":6638},[103,12599,12600],{"class":170},"verbose  ",[103,12602,174],{"class":166},[103,12604,12605],{"class":170},"s libgazebo_ros_init.so ",[103,12607,174],{"class":166},[103,12609,12610],{"class":170},"s  libgazebo_ros_factory.so 你的world文件目录",[103,12612,188],{"class":166},[103,12614,12615],{"class":170},"fishbot.world\n",[23,12617,12618,12619,12621],{},"修改launch文件，将上面的命令行写到",[100,12620,6005],{},"中即可。",[94,12623,12625],{"className":6018,"code":12624,"language":6020,"meta":57,"style":57},"    gazebo_world_path = os.path.join(pkg_share, 'world/fishbot.world')\n\n    # Start Gazebo server\n    start_gazebo_cmd =  ExecuteProcess(\n        cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so', gazebo_world_path],\n        output='screen')\n\n",[100,12626,12627,12641,12645,12649,12658,12690],{"__ignoreMap":57},[103,12628,12629,12632,12634,12636,12639],{"class":105,"line":106},[103,12630,12631],{"class":170},"    gazebo_world_path ",[103,12633,563],{"class":166},[103,12635,6466],{"class":170},[103,12637,12638],{"class":113},"'world/fishbot.world'",[103,12640,5982],{"class":170},[103,12642,12643],{"class":105,"line":231},[103,12644,309],{"emptyLinePlaceholder":308},[103,12646,12647],{"class":105,"line":259},[103,12648,6492],{"class":227},[103,12650,12651,12653,12655],{"class":105,"line":274},[103,12652,6497],{"class":170},[103,12654,563],{"class":166},[103,12656,12657],{"class":170},"  ExecuteProcess(\n",[103,12659,12660,12662,12664,12666,12668,12670,12672,12674,12676,12678,12680,12682,12684,12686,12688],{"class":105,"line":286},[103,12661,6033],{"class":6032},[103,12663,563],{"class":166},[103,12665,6038],{"class":170},[103,12667,6041],{"class":113},[103,12669,6044],{"class":170},[103,12671,6047],{"class":113},[103,12673,6050],{"class":170},[103,12675,6053],{"class":113},[103,12677,6044],{"class":170},[103,12679,6058],{"class":113},[103,12681,6044],{"class":170},[103,12683,6053],{"class":113},[103,12685,6044],{"class":170},[103,12687,6067],{"class":113},[103,12689,6070],{"class":170},[103,12691,12692,12694,12696,12698],{"class":105,"line":305},[103,12693,6075],{"class":6032},[103,12695,563],{"class":166},[103,12697,6080],{"class":113},[103,12699,5982],{"class":170},[23,12701,12702],{},"下面是整个launch文件：",[94,12704,12706],{"className":6018,"code":12705,"language":6020,"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/urdf/{urdf_name}')\n    gazebo_world_path = os.path.join(pkg_share, f'world/{world_name}')\n    default_rviz_config_path = os.path.join(pkg_share, 'rviz/rviz2.rviz')\n\n    # Start Gazebo server\n    start_gazebo_cmd = ExecuteProcess(\n        cmd=['gazebo', '--verbose','-s', 'libgazebo_ros_init.so', '-s', 'libgazebo_ros_factory.so',gazebo_world_path],\n        output='screen')\n\n    # Launch the robot\n    spawn_entity_cmd = Node(\n        package='gazebo_ros', \n        executable='spawn_entity.py',\n        arguments=['-entity', robot_name_in_model,  '-file', urdf_model_path ], output='screen')\n\n    # Start Robot State publisher\n    start_robot_state_publisher_cmd = Node(\n        package='robot_state_publisher',\n        executable='robot_state_publisher',\n        arguments=[urdf_model_path]\n    )\n\n    # Launch RViz\n    start_rviz_cmd = Node(\n        package='rviz2',\n        executable='rviz2',\n        name='rviz2',\n        output='screen',\n        arguments=['-d', default_rviz_config_path]\n        )\n\n    return LaunchDescription([start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[100,12707,12708,12718,12728,12732,12736,12746,12750,12754,12758,12762,12766,12770,12774,12778,12782,12786,12790,12794,12798,12802,12806,12810,12814,12818,12822,12826,12830,12834,12838,12842,12846,12850,12854,12858,12868,12874,12878,12886,12894,12902,12910,12920,12924,12946,12968,12992,13004,13008,13012,13020,13053,13063,13067,13071,13079,13089,13099,13123,13127,13131,13139,13149,13159,13167,13171,13175,13179,13187,13197,13207,13217,13227,13239,13243,13247],{"__ignoreMap":57},[103,12709,12710,12712,12714,12716],{"class":105,"line":106},[103,12711,933],{"class":166},[103,12713,6194],{"class":170},[103,12715,6197],{"class":166},[103,12717,6200],{"class":170},[103,12719,12720,12722,12724,12726],{"class":105,"line":231},[103,12721,933],{"class":166},[103,12723,6207],{"class":170},[103,12725,6197],{"class":166},[103,12727,6212],{"class":170},[103,12729,12730],{"class":105,"line":259},[103,12731,309],{"emptyLinePlaceholder":308},[103,12733,12734],{"class":105,"line":274},[103,12735,6221],{"class":227},[103,12737,12738,12740,12742,12744],{"class":105,"line":286},[103,12739,933],{"class":166},[103,12741,6228],{"class":170},[103,12743,6197],{"class":166},[103,12745,6233],{"class":170},[103,12747,12748],{"class":105,"line":305},[103,12749,309],{"emptyLinePlaceholder":308},[103,12751,12752],{"class":105,"line":312},[103,12753,6242],{"class":227},[103,12755,12756],{"class":105,"line":327},[103,12757,309],{"emptyLinePlaceholder":308},[103,12759,12760],{"class":105,"line":348},[103,12761,6251],{"class":227},[103,12763,12764],{"class":105,"line":359},[103,12765,309],{"emptyLinePlaceholder":308},[103,12767,12768],{"class":105,"line":368},[103,12769,6260],{"class":227},[103,12771,12772],{"class":105,"line":383},[103,12773,309],{"emptyLinePlaceholder":308},[103,12775,12776],{"class":105,"line":388},[103,12777,6269],{"class":227},[103,12779,12780],{"class":105,"line":394},[103,12781,309],{"emptyLinePlaceholder":308},[103,12783,12784],{"class":105,"line":399},[103,12785,6278],{"class":227},[103,12787,12788],{"class":105,"line":405},[103,12789,309],{"emptyLinePlaceholder":308},[103,12791,12792],{"class":105,"line":410},[103,12793,6287],{"class":227},[103,12795,12796],{"class":105,"line":416},[103,12797,309],{"emptyLinePlaceholder":308},[103,12799,12800],{"class":105,"line":421},[103,12801,6296],{"class":227},[103,12803,12804],{"class":105,"line":427},[103,12805,309],{"emptyLinePlaceholder":308},[103,12807,12808],{"class":105,"line":432},[103,12809,6305],{"class":227},[103,12811,12812],{"class":105,"line":438},[103,12813,309],{"emptyLinePlaceholder":308},[103,12815,12816],{"class":105,"line":443},[103,12817,6314],{"class":227},[103,12819,12820],{"class":105,"line":449},[103,12821,309],{"emptyLinePlaceholder":308},[103,12823,12824],{"class":105,"line":454},[103,12825,6323],{"class":227},[103,12827,12828],{"class":105,"line":460},[103,12829,309],{"emptyLinePlaceholder":308},[103,12831,12832],{"class":105,"line":465},[103,12833,6332],{"class":227},[103,12835,12836],{"class":105,"line":471},[103,12837,309],{"emptyLinePlaceholder":308},[103,12839,12840],{"class":105,"line":476},[103,12841,6341],{"class":227},[103,12843,12844],{"class":105,"line":504},[103,12845,309],{"emptyLinePlaceholder":308},[103,12847,12848],{"class":105,"line":530},[103,12849,6350],{"class":227},[103,12851,12852],{"class":105,"line":574},[103,12853,309],{"emptyLinePlaceholder":308},[103,12855,12856],{"class":105,"line":579},[103,12857,6359],{"class":227},[103,12859,12860,12862,12864,12866],{"class":105,"line":590},[103,12861,933],{"class":166},[103,12863,6366],{"class":170},[103,12865,6197],{"class":166},[103,12867,6371],{"class":170},[103,12869,12870,12872],{"class":105,"line":635},[103,12871,6197],{"class":166},[103,12873,6378],{"class":170},[103,12875,12876],{"class":105,"line":665},[103,12877,309],{"emptyLinePlaceholder":308},[103,12879,12880,12882,12884],{"class":105,"line":677},[103,12881,6387],{"class":166},[103,12883,6390],{"class":109},[103,12885,6393],{"class":170},[103,12887,12888,12890,12892],{"class":105,"line":799},[103,12889,6398],{"class":170},[103,12891,563],{"class":166},[103,12893,6403],{"class":113},[103,12895,12896,12898,12900],{"class":105,"line":805},[103,12897,6408],{"class":170},[103,12899,563],{"class":166},[103,12901,6413],{"class":113},[103,12903,12904,12906,12908],{"class":105,"line":817},[103,12905,6418],{"class":170},[103,12907,563],{"class":166},[103,12909,6423],{"class":113},[103,12911,12912,12915,12917],{"class":105,"line":823},[103,12913,12914],{"class":170},"    world_name ",[103,12916,563],{"class":166},[103,12918,12919],{"class":113}," \"fishbot.world\"\n",[103,12921,12922],{"class":105,"line":829},[103,12923,309],{"emptyLinePlaceholder":308},[103,12925,12926,12928,12930,12932,12934,12936,12938,12940,12942,12944],{"class":105,"line":835},[103,12927,6432],{"class":170},[103,12929,563],{"class":166},[103,12931,6437],{"class":170},[103,12933,6440],{"class":166},[103,12935,6443],{"class":113},[103,12937,6446],{"class":139},[103,12939,6449],{"class":170},[103,12941,6452],{"class":139},[103,12943,6443],{"class":113},[103,12945,5982],{"class":170},[103,12947,12948,12950,12952,12954,12956,12958,12960,12962,12964,12966],{"class":105,"line":841},[103,12949,6461],{"class":170},[103,12951,563],{"class":166},[103,12953,6466],{"class":170},[103,12955,6440],{"class":166},[103,12957,6471],{"class":113},[103,12959,6446],{"class":139},[103,12961,6476],{"class":170},[103,12963,6452],{"class":139},[103,12965,6481],{"class":113},[103,12967,5982],{"class":170},[103,12969,12970,12972,12974,12976,12978,12981,12983,12986,12988,12990],{"class":105,"line":864},[103,12971,12631],{"class":170},[103,12973,563],{"class":166},[103,12975,6466],{"class":170},[103,12977,6440],{"class":166},[103,12979,12980],{"class":113},"'world/",[103,12982,6446],{"class":139},[103,12984,12985],{"class":170},"world_name",[103,12987,6452],{"class":139},[103,12989,6481],{"class":113},[103,12991,5982],{"class":170},[103,12993,12994,12996,12998,13000,13002],{"class":105,"line":907},[103,12995,8595],{"class":170},[103,12997,563],{"class":166},[103,12999,6466],{"class":170},[103,13001,8602],{"class":113},[103,13003,5982],{"class":170},[103,13005,13006],{"class":105,"line":944},[103,13007,309],{"emptyLinePlaceholder":308},[103,13009,13010],{"class":105,"line":949},[103,13011,6492],{"class":227},[103,13013,13014,13016,13018],{"class":105,"line":973},[103,13015,6497],{"class":170},[103,13017,563],{"class":166},[103,13019,6502],{"class":170},[103,13021,13022,13024,13026,13028,13030,13032,13034,13036,13038,13040,13042,13044,13046,13048,13050],{"class":105,"line":997},[103,13023,6033],{"class":6032},[103,13025,563],{"class":166},[103,13027,6038],{"class":170},[103,13029,6041],{"class":113},[103,13031,6044],{"class":170},[103,13033,6047],{"class":113},[103,13035,6050],{"class":170},[103,13037,6053],{"class":113},[103,13039,6044],{"class":170},[103,13041,6058],{"class":113},[103,13043,6044],{"class":170},[103,13045,6053],{"class":113},[103,13047,6044],{"class":170},[103,13049,6067],{"class":113},[103,13051,13052],{"class":170},",gazebo_world_path],\n",[103,13054,13055,13057,13059,13061],{"class":105,"line":1877},[103,13056,6075],{"class":6032},[103,13058,563],{"class":166},[103,13060,6080],{"class":113},[103,13062,5982],{"class":170},[103,13064,13065],{"class":105,"line":1886},[103,13066,309],{"emptyLinePlaceholder":308},[103,13068,13069],{"class":105,"line":1901},[103,13070,6554],{"class":227},[103,13072,13073,13075,13077],{"class":105,"line":1916},[103,13074,6559],{"class":170},[103,13076,563],{"class":166},[103,13078,6109],{"class":170},[103,13080,13081,13083,13085,13087],{"class":105,"line":1925},[103,13082,6568],{"class":6032},[103,13084,563],{"class":166},[103,13086,6119],{"class":113},[103,13088,6122],{"class":170},[103,13090,13091,13093,13095,13097],{"class":105,"line":1934},[103,13092,6579],{"class":6032},[103,13094,563],{"class":166},[103,13096,6132],{"class":113},[103,13098,6135],{"class":170},[103,13100,13101,13103,13105,13107,13109,13111,13113,13115,13117,13119,13121],{"class":105,"line":1943},[103,13102,6590],{"class":6032},[103,13104,563],{"class":166},[103,13106,6038],{"class":170},[103,13108,6147],{"class":113},[103,13110,6150],{"class":170},[103,13112,6153],{"class":113},[103,13114,6156],{"class":170},[103,13116,6159],{"class":6032},[103,13118,563],{"class":166},[103,13120,6080],{"class":113},[103,13122,5982],{"class":170},[103,13124,13125],{"class":105,"line":1959},[103,13126,309],{"emptyLinePlaceholder":308},[103,13128,13129],{"class":105,"line":2007},[103,13130,8416],{"class":227},[103,13132,13133,13135,13137],{"class":105,"line":2016},[103,13134,8421],{"class":170},[103,13136,563],{"class":166},[103,13138,6109],{"class":170},[103,13140,13141,13143,13145,13147],{"class":105,"line":2025},[103,13142,6568],{"class":6032},[103,13144,563],{"class":166},[103,13146,8434],{"class":113},[103,13148,6135],{"class":170},[103,13150,13151,13153,13155,13157],{"class":105,"line":2030},[103,13152,6579],{"class":6032},[103,13154,563],{"class":166},[103,13156,8434],{"class":113},[103,13158,6135],{"class":170},[103,13160,13161,13163,13165],{"class":105,"line":2052},[103,13162,6590],{"class":6032},[103,13164,563],{"class":166},[103,13166,8455],{"class":170},[103,13168,13169],{"class":105,"line":2068},[103,13170,8460],{"class":170},[103,13172,13173],{"class":105,"line":2083},[103,13174,309],{"emptyLinePlaceholder":308},[103,13176,13177],{"class":105,"line":2099},[103,13178,8469],{"class":227},[103,13180,13181,13183,13185],{"class":105,"line":2108},[103,13182,8474],{"class":170},[103,13184,563],{"class":166},[103,13186,6109],{"class":170},[103,13188,13189,13191,13193,13195],{"class":105,"line":2113},[103,13190,6568],{"class":6032},[103,13192,563],{"class":166},[103,13194,8487],{"class":113},[103,13196,6135],{"class":170},[103,13198,13199,13201,13203,13205],{"class":105,"line":2129},[103,13200,6579],{"class":6032},[103,13202,563],{"class":166},[103,13204,8487],{"class":113},[103,13206,6135],{"class":170},[103,13208,13209,13211,13213,13215],{"class":105,"line":2138},[103,13210,8504],{"class":6032},[103,13212,563],{"class":166},[103,13214,8487],{"class":113},[103,13216,6135],{"class":170},[103,13218,13219,13221,13223,13225],{"class":105,"line":2159},[103,13220,6075],{"class":6032},[103,13222,563],{"class":166},[103,13224,6080],{"class":113},[103,13226,6135],{"class":170},[103,13228,13229,13231,13233,13235,13237],{"class":105,"line":2168},[103,13230,6590],{"class":6032},[103,13232,563],{"class":166},[103,13234,6038],{"class":170},[103,13236,8671],{"class":113},[103,13238,8674],{"class":170},[103,13240,13241],{"class":105,"line":2187},[103,13242,8534],{"class":170},[103,13244,13245],{"class":105,"line":2196},[103,13246,309],{"emptyLinePlaceholder":308},[103,13248,13249,13251],{"class":105,"line":2205},[103,13250,6619],{"class":166},[103,13252,8545],{"class":170},[23,13254,13255],{},"最后记得修改cmakelists.txt文件，让编译后将world文件拷贝到install目录下",[23,13257,13258],{},[55,13259],{"alt":57,"src":13260},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1699.webp",[94,13262,13264],{"className":6018,"code":13263,"language":6020,"meta":57,"style":57},"colcon build\nsource install/setup.bash\nros2 launch fishbot_description gazebo.launch.py \n",[100,13265,13266,13270,13278],{"__ignoreMap":57},[103,13267,13268],{"class":105,"line":106},[103,13269,7803],{"class":170},[103,13271,13272,13274,13276],{"class":105,"line":231},[103,13273,6652],{"class":170},[103,13275,188],{"class":166},[103,13277,6657],{"class":170},[103,13279,13280],{"class":105,"line":259},[103,13281,6662],{"class":170},[23,13283,13284],{},[55,13285],{"alt":57,"src":13286},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1700.webp",[23,13288,13289],{},[55,13290],{"alt":57,"src":13291},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1701.webp",[86,13293,13294],{"id":13294},"框架优化",[23,13296,13297,13298],{},"本节代码学长也发到仓库了，有需要的学弟学妹请看:",[15,13299,13302],{"href":13300,"rel":13301},"https://github.com/tungchiahui/ROS%5C_WS/tree/main/ROS2%5C_WS%2F6.ws%5C_simulations%2Fsrc%2Ffishbot%5C_description",[19],"https://github.com/tungchiahui/ROS\\_WS/tree/main/ROS2\\_WS%2F6.ws\\_simulations%2Fsrc%2Ffishbot\\_description",[23,13304,13305],{},"比如说支持xacro等优化。",[23,13307,13308],{},"首先先把原来的fishbot_gazebo.urdf里的内容分成好几个urdf和xacro再用一个总的fishbot.urdf.xacro去引用。（学过xacro的肯定都会）",[23,13310,13311],{},[55,13312],{"alt":57,"src":13313},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1702.webp",[23,13315,13316],{},"优化后的launch如下：",[94,13318,13320],{"className":6018,"code":13319,"language":6020,"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/xacro\",\"fishbot.urdf.xacro\")\n    gazebo_world_path = os.path.join(pkg_share, f'world/{world_name}')\n    default_rviz_config_path = os.path.join(pkg_share, 'rviz/rviz2.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', '/robot_description' ], output='screen')\n\n    # Start Robot State publisher\n    start_robot_state_publisher_cmd = Node(\n        package='robot_state_publisher',\n        executable='robot_state_publisher',\n        parameters=[{\"robot_description\": robot_description}]\n    )\n\n    # Launch RViz\n    start_rviz_cmd = Node(\n        package='rviz2',\n        executable='rviz2',\n        name='rviz2',\n        output='screen',\n        arguments=['-d', default_rviz_config_path]\n        )\n\n    return LaunchDescription([model,start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[100,13321,13322,13332,13342,13346,13350,13360,13364,13368,13372,13376,13387,13399,13403,13407,13411,13415,13419,13423,13427,13431,13435,13439,13443,13447,13451,13455,13459,13463,13467,13471,13475,13479,13489,13501,13512,13518,13522,13530,13538,13546,13550,13555,13563,13567,13589,13608,13630,13642,13646,13674,13695,13699,13703,13711,13743,13753,13757,13761,13769,13779,13789,13820,13824,13828,13836,13846,13856,13872,13876,13880,13884,13892,13902,13912,13922,13932,13944,13948,13952],{"__ignoreMap":57},[103,13323,13324,13326,13328,13330],{"class":105,"line":106},[103,13325,933],{"class":166},[103,13327,6194],{"class":170},[103,13329,6197],{"class":166},[103,13331,6200],{"class":170},[103,13333,13334,13336,13338,13340],{"class":105,"line":231},[103,13335,933],{"class":166},[103,13337,6207],{"class":170},[103,13339,6197],{"class":166},[103,13341,6212],{"class":170},[103,13343,13344],{"class":105,"line":259},[103,13345,309],{"emptyLinePlaceholder":308},[103,13347,13348],{"class":105,"line":274},[103,13349,6221],{"class":227},[103,13351,13352,13354,13356,13358],{"class":105,"line":286},[103,13353,933],{"class":166},[103,13355,6228],{"class":170},[103,13357,6197],{"class":166},[103,13359,6233],{"class":170},[103,13361,13362],{"class":105,"line":305},[103,13363,309],{"emptyLinePlaceholder":308},[103,13365,13366],{"class":105,"line":312},[103,13367,6242],{"class":227},[103,13369,13370],{"class":105,"line":327},[103,13371,309],{"emptyLinePlaceholder":308},[103,13373,13374],{"class":105,"line":348},[103,13375,6251],{"class":227},[103,13377,13378,13380,13382,13384],{"class":105,"line":359},[103,13379,933],{"class":166},[103,13381,6228],{"class":170},[103,13383,6197],{"class":166},[103,13385,13386],{"class":170}," DeclareLaunchArgument\n",[103,13388,13389,13391,13394,13396],{"class":105,"line":368},[103,13390,933],{"class":166},[103,13392,13393],{"class":170}," launch.substitutions ",[103,13395,6197],{"class":166},[103,13397,13398],{"class":170}," LaunchConfiguration\n",[103,13400,13401],{"class":105,"line":383},[103,13402,309],{"emptyLinePlaceholder":308},[103,13404,13405],{"class":105,"line":388},[103,13406,6278],{"class":227},[103,13408,13409],{"class":105,"line":394},[103,13410,309],{"emptyLinePlaceholder":308},[103,13412,13413],{"class":105,"line":399},[103,13414,6287],{"class":227},[103,13416,13417],{"class":105,"line":405},[103,13418,309],{"emptyLinePlaceholder":308},[103,13420,13421],{"class":105,"line":410},[103,13422,6296],{"class":227},[103,13424,13425],{"class":105,"line":416},[103,13426,309],{"emptyLinePlaceholder":308},[103,13428,13429],{"class":105,"line":421},[103,13430,6305],{"class":227},[103,13432,13433],{"class":105,"line":427},[103,13434,309],{"emptyLinePlaceholder":308},[103,13436,13437],{"class":105,"line":432},[103,13438,6314],{"class":227},[103,13440,13441],{"class":105,"line":438},[103,13442,309],{"emptyLinePlaceholder":308},[103,13444,13445],{"class":105,"line":443},[103,13446,6323],{"class":227},[103,13448,13449],{"class":105,"line":449},[103,13450,309],{"emptyLinePlaceholder":308},[103,13452,13453],{"class":105,"line":454},[103,13454,6332],{"class":227},[103,13456,13457],{"class":105,"line":460},[103,13458,309],{"emptyLinePlaceholder":308},[103,13460,13461],{"class":105,"line":465},[103,13462,6341],{"class":227},[103,13464,13465],{"class":105,"line":471},[103,13466,309],{"emptyLinePlaceholder":308},[103,13468,13469],{"class":105,"line":476},[103,13470,6350],{"class":227},[103,13472,13473],{"class":105,"line":504},[103,13474,309],{"emptyLinePlaceholder":308},[103,13476,13477],{"class":105,"line":530},[103,13478,6359],{"class":227},[103,13480,13481,13483,13485,13487],{"class":105,"line":574},[103,13482,933],{"class":166},[103,13484,6366],{"class":170},[103,13486,6197],{"class":166},[103,13488,6371],{"class":170},[103,13490,13491,13493,13496,13498],{"class":105,"line":579},[103,13492,933],{"class":166},[103,13494,13495],{"class":170}," launch_ros.parameter_descriptions ",[103,13497,6197],{"class":166},[103,13499,13500],{"class":170}," ParameterValue\n",[103,13502,13503,13505,13507,13509],{"class":105,"line":590},[103,13504,933],{"class":166},[103,13506,13393],{"class":170},[103,13508,6197],{"class":166},[103,13510,13511],{"class":170}," Command,LaunchConfiguration\n",[103,13513,13514,13516],{"class":105,"line":635},[103,13515,6197],{"class":166},[103,13517,6378],{"class":170},[103,13519,13520],{"class":105,"line":665},[103,13521,309],{"emptyLinePlaceholder":308},[103,13523,13524,13526,13528],{"class":105,"line":677},[103,13525,6387],{"class":166},[103,13527,6390],{"class":109},[103,13529,6393],{"class":170},[103,13531,13532,13534,13536],{"class":105,"line":799},[103,13533,6398],{"class":170},[103,13535,563],{"class":166},[103,13537,6403],{"class":113},[103,13539,13540,13542,13544],{"class":105,"line":805},[103,13541,6408],{"class":170},[103,13543,563],{"class":166},[103,13545,6413],{"class":113},[103,13547,13548],{"class":105,"line":817},[103,13549,309],{"emptyLinePlaceholder":308},[103,13551,13552],{"class":105,"line":823},[103,13553,13554],{"class":227},"    # urdf_xacro_name = \"fishbot_gazebo.urdf\"\n",[103,13556,13557,13559,13561],{"class":105,"line":829},[103,13558,12914],{"class":170},[103,13560,563],{"class":166},[103,13562,12919],{"class":113},[103,13564,13565],{"class":105,"line":835},[103,13566,309],{"emptyLinePlaceholder":308},[103,13568,13569,13571,13573,13575,13577,13579,13581,13583,13585,13587],{"class":105,"line":841},[103,13570,6432],{"class":170},[103,13572,563],{"class":166},[103,13574,6437],{"class":170},[103,13576,6440],{"class":166},[103,13578,6443],{"class":113},[103,13580,6446],{"class":139},[103,13582,6449],{"class":170},[103,13584,6452],{"class":139},[103,13586,6443],{"class":113},[103,13588,5982],{"class":170},[103,13590,13591,13594,13596,13598,13601,13603,13606],{"class":105,"line":864},[103,13592,13593],{"class":170},"    urdf_xacro_model_path ",[103,13595,563],{"class":166},[103,13597,6466],{"class":170},[103,13599,13600],{"class":113},"\"urdf/xacro\"",[103,13602,6050],{"class":170},[103,13604,13605],{"class":113},"\"fishbot.urdf.xacro\"",[103,13607,5982],{"class":170},[103,13609,13610,13612,13614,13616,13618,13620,13622,13624,13626,13628],{"class":105,"line":907},[103,13611,12631],{"class":170},[103,13613,563],{"class":166},[103,13615,6466],{"class":170},[103,13617,6440],{"class":166},[103,13619,12980],{"class":113},[103,13621,6446],{"class":139},[103,13623,12985],{"class":170},[103,13625,6452],{"class":139},[103,13627,6481],{"class":113},[103,13629,5982],{"class":170},[103,13631,13632,13634,13636,13638,13640],{"class":105,"line":944},[103,13633,8595],{"class":170},[103,13635,563],{"class":166},[103,13637,6466],{"class":170},[103,13639,8602],{"class":113},[103,13641,5982],{"class":170},[103,13643,13644],{"class":105,"line":949},[103,13645,309],{"emptyLinePlaceholder":308},[103,13647,13648,13651,13653,13656,13659,13661,13664,13666,13669,13671],{"class":105,"line":973},[103,13649,13650],{"class":170},"    model ",[103,13652,563],{"class":166},[103,13654,13655],{"class":170}," DeclareLaunchArgument(",[103,13657,13658],{"class":6032},"name",[103,13660,563],{"class":166},[103,13662,13663],{"class":113},"\"model\"",[103,13665,6044],{"class":170},[103,13667,13668],{"class":6032},"default_value",[103,13670,563],{"class":166},[103,13672,13673],{"class":170},"urdf_xacro_model_path)\n",[103,13675,13676,13679,13681,13684,13687,13690,13692],{"class":105,"line":997},[103,13677,13678],{"class":170},"    robot_description ",[103,13680,563],{"class":166},[103,13682,13683],{"class":170}," ParameterValue(Command([",[103,13685,13686],{"class":113},"\"xacro \"",[103,13688,13689],{"class":170},",LaunchConfiguration(",[103,13691,13663],{"class":113},[103,13693,13694],{"class":170},")]))\n",[103,13696,13697],{"class":105,"line":1877},[103,13698,309],{"emptyLinePlaceholder":308},[103,13700,13701],{"class":105,"line":1886},[103,13702,6492],{"class":227},[103,13704,13705,13707,13709],{"class":105,"line":1901},[103,13706,6497],{"class":170},[103,13708,563],{"class":166},[103,13710,6502],{"class":170},[103,13712,13713,13715,13717,13719,13721,13723,13725,13727,13729,13731,13733,13735,13737,13739,13741],{"class":105,"line":1916},[103,13714,6033],{"class":6032},[103,13716,563],{"class":166},[103,13718,6038],{"class":170},[103,13720,6041],{"class":113},[103,13722,6044],{"class":170},[103,13724,6047],{"class":113},[103,13726,6050],{"class":170},[103,13728,6053],{"class":113},[103,13730,6044],{"class":170},[103,13732,6058],{"class":113},[103,13734,6044],{"class":170},[103,13736,6053],{"class":113},[103,13738,6044],{"class":170},[103,13740,6067],{"class":113},[103,13742,13052],{"class":170},[103,13744,13745,13747,13749,13751],{"class":105,"line":1925},[103,13746,6075],{"class":6032},[103,13748,563],{"class":166},[103,13750,6080],{"class":113},[103,13752,5982],{"class":170},[103,13754,13755],{"class":105,"line":1934},[103,13756,309],{"emptyLinePlaceholder":308},[103,13758,13759],{"class":105,"line":1943},[103,13760,6554],{"class":227},[103,13762,13763,13765,13767],{"class":105,"line":1959},[103,13764,6559],{"class":170},[103,13766,563],{"class":166},[103,13768,6109],{"class":170},[103,13770,13771,13773,13775,13777],{"class":105,"line":2007},[103,13772,6568],{"class":6032},[103,13774,563],{"class":166},[103,13776,6119],{"class":113},[103,13778,6122],{"class":170},[103,13780,13781,13783,13785,13787],{"class":105,"line":2016},[103,13782,6579],{"class":6032},[103,13784,563],{"class":166},[103,13786,6132],{"class":113},[103,13788,6135],{"class":170},[103,13790,13791,13793,13795,13797,13799,13801,13804,13806,13809,13812,13814,13816,13818],{"class":105,"line":2025},[103,13792,6590],{"class":6032},[103,13794,563],{"class":166},[103,13796,6038],{"class":170},[103,13798,6147],{"class":113},[103,13800,6150],{"class":170},[103,13802,13803],{"class":113},"'-topic'",[103,13805,6044],{"class":170},[103,13807,13808],{"class":113},"'/robot_description'",[103,13810,13811],{"class":170}," ], ",[103,13813,6159],{"class":6032},[103,13815,563],{"class":166},[103,13817,6080],{"class":113},[103,13819,5982],{"class":170},[103,13821,13822],{"class":105,"line":2030},[103,13823,309],{"emptyLinePlaceholder":308},[103,13825,13826],{"class":105,"line":2052},[103,13827,8416],{"class":227},[103,13829,13830,13832,13834],{"class":105,"line":2068},[103,13831,8421],{"class":170},[103,13833,563],{"class":166},[103,13835,6109],{"class":170},[103,13837,13838,13840,13842,13844],{"class":105,"line":2083},[103,13839,6568],{"class":6032},[103,13841,563],{"class":166},[103,13843,8434],{"class":113},[103,13845,6135],{"class":170},[103,13847,13848,13850,13852,13854],{"class":105,"line":2099},[103,13849,6579],{"class":6032},[103,13851,563],{"class":166},[103,13853,8434],{"class":113},[103,13855,6135],{"class":170},[103,13857,13858,13861,13863,13866,13869],{"class":105,"line":2108},[103,13859,13860],{"class":6032},"        parameters",[103,13862,563],{"class":166},[103,13864,13865],{"class":170},"[{",[103,13867,13868],{"class":113},"\"robot_description\"",[103,13870,13871],{"class":170},": robot_description}]\n",[103,13873,13874],{"class":105,"line":2113},[103,13875,8460],{"class":170},[103,13877,13878],{"class":105,"line":2129},[103,13879,309],{"emptyLinePlaceholder":308},[103,13881,13882],{"class":105,"line":2138},[103,13883,8469],{"class":227},[103,13885,13886,13888,13890],{"class":105,"line":2159},[103,13887,8474],{"class":170},[103,13889,563],{"class":166},[103,13891,6109],{"class":170},[103,13893,13894,13896,13898,13900],{"class":105,"line":2168},[103,13895,6568],{"class":6032},[103,13897,563],{"class":166},[103,13899,8487],{"class":113},[103,13901,6135],{"class":170},[103,13903,13904,13906,13908,13910],{"class":105,"line":2187},[103,13905,6579],{"class":6032},[103,13907,563],{"class":166},[103,13909,8487],{"class":113},[103,13911,6135],{"class":170},[103,13913,13914,13916,13918,13920],{"class":105,"line":2196},[103,13915,8504],{"class":6032},[103,13917,563],{"class":166},[103,13919,8487],{"class":113},[103,13921,6135],{"class":170},[103,13923,13924,13926,13928,13930],{"class":105,"line":2205},[103,13925,6075],{"class":6032},[103,13927,563],{"class":166},[103,13929,6080],{"class":113},[103,13931,6135],{"class":170},[103,13933,13934,13936,13938,13940,13942],{"class":105,"line":2214},[103,13935,6590],{"class":6032},[103,13937,563],{"class":166},[103,13939,6038],{"class":170},[103,13941,8671],{"class":113},[103,13943,8674],{"class":170},[103,13945,13946],{"class":105,"line":2235},[103,13947,8534],{"class":170},[103,13949,13950],{"class":105,"line":2244},[103,13951,309],{"emptyLinePlaceholder":308},[103,13953,13954,13956],{"class":105,"line":2259},[103,13955,6619],{"class":166},[103,13957,13958],{"class":170}," LaunchDescription([model,start_gazebo_cmd,spawn_entity_cmd,start_robot_state_publisher_cmd,start_rviz_cmd])\n",[94,13960,13961],{"className":6018,"code":7796,"language":6020,"meta":57,"style":57},[100,13962,13963,13967,13975],{"__ignoreMap":57},[103,13964,13965],{"class":105,"line":106},[103,13966,7803],{"class":170},[103,13968,13969,13971,13973],{"class":105,"line":231},[103,13970,6652],{"class":170},[103,13972,188],{"class":166},[103,13974,6657],{"class":170},[103,13976,13977],{"class":105,"line":259},[103,13978,6662],{"class":170},[23,13980,13981],{},[55,13982],{"alt":57,"src":13983},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1703.webp",[23,13985,13986],{},[55,13987],{"alt":57,"src":13988},"https://cdn.tungchiahui.cn/tungwebsite/assets/images/2023/12/30/image1704.webp",[23,13990,13991],{},"然后就可以去搞导航啦！也可以接着学新版Ignition Gazebo，但这东西教程巨少，截止2024年只有赵虚左老师讲了。\n** 建议学习新的\tGazebo Harmonic （ROS2 Jazzy默认的版本） **",[13993,13994,13995],"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":231,"depth":231,"links":13997},[13998],{"id":12,"depth":259,"text":13999},"Gazebo(Gazebo Classic)","11.1",11010000,"2023-12-30","2023-12-30-ros2-tutorial","/wiki/2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,null,{},"/wiki/2023-12-30-ros2-tutorial/ch11-1-gazeboclassic",{"title":5,"description":57},"wiki/2023-12-30-ros2-tutorial/ch11-1-GazeboClassic","vxak0XAAhKmXNO3t6iIHt2aHanOe82sBA4grPPAyky4",[14015,14020,14025,14026,14032,14038,14044,14050,14056,14062,14068,14074,14080,14086,14092,14098,14103,14109,14115,14121,14127,14132,14138,14144,14150],{"path":14016,"stem":14017,"title":14018,"date":14002,"chapter":627,"chapterSort":14019,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch1-ros2-jie-shao","wiki/2023-12-30-ros2-tutorial/ch1-ROS2介绍","ROS2介绍",1000000,{"path":14021,"stem":14022,"title":14023,"date":14002,"chapter":251,"chapterSort":14024,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch10-stage-ros2-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch10-Stage_Ros2仿真平台","Stage_Ros2仿真平台",10000000,{"path":14010,"stem":14012,"title":5,"date":14002,"chapter":14000,"chapterSort":14001,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},{"path":14027,"stem":14028,"title":14029,"date":14002,"chapter":14030,"chapterSort":14031,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch11-2-ignitiongazebo","wiki/2023-12-30-ros2-tutorial/ch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":14033,"stem":14034,"title":14035,"date":14002,"chapter":14036,"chapterSort":14037,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch11-3-gazebosim","wiki/2023-12-30-ros2-tutorial/ch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":14039,"stem":14040,"title":14041,"date":14002,"chapter":14042,"chapterSort":14043,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch11-4-igngz2gzsim","wiki/2023-12-30-ros2-tutorial/ch11-4-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim","11.4",11040000,{"path":14045,"stem":14046,"title":14047,"date":14002,"chapter":14048,"chapterSort":14049,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch11-gezebo-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch11-Gezebo仿真平台","Gezebo仿真平台","11",11000000,{"path":14051,"stem":14052,"title":14053,"date":14002,"chapter":14054,"chapterSort":14055,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki/2023-12-30-ros2-tutorial/ch12-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)","12",12000000,{"path":14057,"stem":14058,"title":14059,"date":14002,"chapter":14060,"chapterSort":14061,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch13-ros2serial","wiki/2023-12-30-ros2-tutorial/ch13-ROS2Serial","ROS2 Serial","13",13000000,{"path":14063,"stem":14064,"title":14065,"date":14002,"chapter":14066,"chapterSort":14067,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch14-ji-qi-ren-ying-jian","wiki/2023-12-30-ros2-tutorial/ch14-机器人硬件","机器人硬件","14",14000000,{"path":14069,"stem":14070,"title":14071,"date":14002,"chapter":14072,"chapterSort":14073,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch15-ros2-control","wiki/2023-12-30-ros2-tutorial/ch15-ROS2_Control","ROS2_Control","15",15000000,{"path":14075,"stem":14076,"title":14077,"date":14002,"chapter":14078,"chapterSort":14079,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki/2023-12-30-ros2-tutorial/ch16-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂","16",16000000,{"path":14081,"stem":14082,"title":14083,"date":14002,"chapter":14084,"chapterSort":14085,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki/2023-12-30-ros2-tutorial/ch17-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)","17",17000000,{"path":14087,"stem":14088,"title":14089,"date":14002,"chapter":14090,"chapterSort":14091,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch18-microros","wiki/2023-12-30-ros2-tutorial/ch18-MicroROS","MicroROS","18",18000000,{"path":14093,"stem":14094,"title":14095,"date":14002,"chapter":14096,"chapterSort":14097,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch19-webots-fang-zhen-ping-tai","wiki/2023-12-30-ros2-tutorial/ch19-Webots仿真平台","Webots仿真平台","19",19000000,{"path":14099,"stem":14100,"title":14101,"date":14002,"chapter":280,"chapterSort":14102,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch2-ru-men-cao-zuo","wiki/2023-12-30-ros2-tutorial/ch2-入门操作","入门操作",2000000,{"path":14104,"stem":14105,"title":14106,"date":14002,"chapter":14107,"chapterSort":14108,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch20-opencv","wiki/2023-12-30-ros2-tutorial/ch20-OpenCV","OpenCV","20",20000000,{"path":14110,"stem":14111,"title":14112,"date":14002,"chapter":14113,"chapterSort":14114,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch3-gong-zuo-kong-jian-yu-gong-neng-bao","wiki/2023-12-30-ros2-tutorial/ch3-工作空间与功能包","工作空间与功能包","3",3000000,{"path":14116,"stem":14117,"title":14118,"date":14002,"chapter":14119,"chapterSort":14120,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch4-si-da-tong-xin","wiki/2023-12-30-ros2-tutorial/ch4-四大通信","四大通信","4",4000000,{"path":14122,"stem":14123,"title":14124,"date":14002,"chapter":14125,"chapterSort":14126,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch5-ros2-qi-ta-tong-xin-ji-zhi","wiki/2023-12-30-ros2-tutorial/ch5-ROS2其他通信机制","ROS2其他通信机制","5",5000000,{"path":14128,"stem":14129,"title":14130,"date":14002,"chapter":221,"chapterSort":14131,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch6-launch","wiki/2023-12-30-ros2-tutorial/ch6-Launch","Launch",6000000,{"path":14133,"stem":14134,"title":14135,"date":14002,"chapter":14136,"chapterSort":14137,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch7-hui-su-rosbag2","wiki/2023-12-30-ros2-tutorial/ch7-回溯rosbag2","回溯rosbag2","7",7000000,{"path":14139,"stem":14140,"title":14141,"date":14002,"chapter":14142,"chapterSort":14143,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch8-zuo-biao-bian-huan-tf","wiki/2023-12-30-ros2-tutorial/ch8-坐标变换TF","坐标变换TF","8",8000000,{"path":14145,"stem":14146,"title":14147,"date":14002,"chapter":14148,"chapterSort":14149,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":14007},"/wiki/2023-12-30-ros2-tutorial/ch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki/2023-12-30-ros2-tutorial/ch9-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言","9",9000000,{"path":14004,"stem":14151,"title":14152,"date":14002,"chapter":14008,"chapterSort":14153,"docKey":14003,"docRoot":14004,"docTitle":14005,"isWikiDoc":308,"isWikiIndex":308},"wiki/2023-12-30-ros2-tutorial/index","ROS2机器人操作系统教程",0,1778560329073]