[{"data":1,"prerenderedAt":443},["ShallowReactive",2],{"wiki-page-\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch19-webots-fang-zhen-ping-tai":3,"wiki-doc-items-2023-12-30-ros2-tutorial":298},{"id":4,"title":5,"body":6,"chapter":285,"chapterSort":286,"date":287,"description":12,"docKey":288,"docRoot":289,"docTitle":290,"extension":291,"isWikiDoc":205,"isWikiIndex":292,"meta":293,"navigation":205,"path":294,"seo":295,"stem":296,"wikiDepth":63,"__hash__":297},"wiki\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch19-Webots仿真平台.md","Webots仿真平台",{"type":7,"value":8,"toc":283},"minimark",[9,13,16,25,31,34,37,40,43,46,49,279],[10,11,12],"p",{},"这个平台用来测运动学很舒服。",[10,14,15],{},"可以SolidWorks转URDF（ROS官方提供sw2udfo工具），再URDF转Webots（webots官方提供urdf2webots工具）。",[10,17,18],{},[19,20,24],"a",{"href":21,"rel":22},"https:\u002F\u002Fgithub.com\u002Fros\u002Fsolidworks%5C_urdf%5C_exporter",[23],"nofollow","https:\u002F\u002Fgithub.com\u002Fros\u002Fsolidworks\\_urdf\\_exporter",[10,26,27],{},[19,28,29],{"href":29,"rel":30},"https:\u002F\u002Fgithub.com\u002Fcyberbotics\u002Furdf2webots",[23],[10,32,33],{},"这样的话，连电机甚至都给你选好了，你只需要写运动学即可。",[10,35,36],{},"运动控制程序可以用C\u002FC++、Python、Java等语言编写，控制的时候只需要注意一下控制电机角度和速度的方式以及单位即可。",[10,38,39],{},"如果你给电机setPosition(INFINITY)的话，那么这个电机将变成角度电机，而原本设置速度的函数将会变成设置角速度。",[10,41,42],{},"如果你没给电机设置setPosition(INFINITY)，那么这个电机就是个速度电机。",[10,44,45],{},"角度单位是rad（存疑）",[10,47,48],{},"速度单位是rad\u002Fs（存疑）",[50,51,56],"pre",{"className":52,"code":53,"language":54,"meta":55,"style":55},"language-cpp shiki shiki-themes github-light github-dark","        for (int i = 0;i \u003C 4;i++)\n        {\n                \u002F\u002F舵电机仿真中默认顺时针为正\n                swerve_motor[i] = robot->getMotor(\"swerve_joint\" + std::to_string(i));\n                \u002F\u002Fswerve_motor[i]->setPosition(INFINITY);       \u002F\u002F 注释掉：不启用速度控制\n                swerve_motor[i]->setPosition(0.0);       \u002F\u002F 初始角度为0\n                swerve_motor[i]->setVelocity(50.0);       \u002F\u002F 设置角速度\n\n                \u002F\u002F驱动电机仿真中默认向后滚为正\n                drive_motor[i] = robot->getMotor(\"drive_joint\" + std::to_string(i));\n                drive_motor[i]->setPosition(INFINITY);   \u002F\u002F 启用速度控制\n                drive_motor[i]->setVelocity(-0.0);        \u002F\u002F 初始速度为0\n        }\n","cpp","",[57,58,59,103,109,116,153,162,182,200,207,213,240,254,273],"code",{"__ignoreMap":55},[60,61,64,68,72,75,78,81,85,88,91,94,97,100],"span",{"class":62,"line":63},"line",1,[60,65,67],{"class":66},"szBVR","        for",[60,69,71],{"class":70},"sVt8B"," (",[60,73,74],{"class":66},"int",[60,76,77],{"class":70}," i ",[60,79,80],{"class":66},"=",[60,82,84],{"class":83},"sj4cs"," 0",[60,86,87],{"class":70},";i ",[60,89,90],{"class":66},"\u003C",[60,92,93],{"class":83}," 4",[60,95,96],{"class":70},";i",[60,98,99],{"class":66},"++",[60,101,102],{"class":70},")\n",[60,104,106],{"class":62,"line":105},2,[60,107,108],{"class":70},"        {\n",[60,110,112],{"class":62,"line":111},3,[60,113,115],{"class":114},"sJ8bj","                \u002F\u002F舵电机仿真中默认顺时针为正\n",[60,117,119,122,124,127,131,134,138,141,144,147,150],{"class":62,"line":118},4,[60,120,121],{"class":70},"                swerve_motor[i] ",[60,123,80],{"class":66},[60,125,126],{"class":70}," robot->",[60,128,130],{"class":129},"sScJk","getMotor",[60,132,133],{"class":70},"(",[60,135,137],{"class":136},"sZZnC","\"swerve_joint\"",[60,139,140],{"class":66}," +",[60,142,143],{"class":129}," std",[60,145,146],{"class":70},"::",[60,148,149],{"class":129},"to_string",[60,151,152],{"class":70},"(i));\n",[60,154,156,159],{"class":62,"line":155},5,[60,157,158],{"class":114},"                \u002F\u002Fswerve_motor[i]->setPosition(INFINITY);",[60,160,161],{"class":114},"       \u002F\u002F 注释掉：不启用速度控制\n",[60,163,165,168,171,173,176,179],{"class":62,"line":164},6,[60,166,167],{"class":70},"                swerve_motor[i]->",[60,169,170],{"class":129},"setPosition",[60,172,133],{"class":70},[60,174,175],{"class":83},"0.0",[60,177,178],{"class":70},");",[60,180,181],{"class":114},"       \u002F\u002F 初始角度为0\n",[60,183,185,187,190,192,195,197],{"class":62,"line":184},7,[60,186,167],{"class":70},[60,188,189],{"class":129},"setVelocity",[60,191,133],{"class":70},[60,193,194],{"class":83},"50.0",[60,196,178],{"class":70},[60,198,199],{"class":114},"       \u002F\u002F 设置角速度\n",[60,201,203],{"class":62,"line":202},8,[60,204,206],{"emptyLinePlaceholder":205},true,"\n",[60,208,210],{"class":62,"line":209},9,[60,211,212],{"class":114},"                \u002F\u002F驱动电机仿真中默认向后滚为正\n",[60,214,216,219,221,223,225,227,230,232,234,236,238],{"class":62,"line":215},10,[60,217,218],{"class":70},"                drive_motor[i] ",[60,220,80],{"class":66},[60,222,126],{"class":70},[60,224,130],{"class":129},[60,226,133],{"class":70},[60,228,229],{"class":136},"\"drive_joint\"",[60,231,140],{"class":66},[60,233,143],{"class":129},[60,235,146],{"class":70},[60,237,149],{"class":129},[60,239,152],{"class":70},[60,241,243,246,248,251],{"class":62,"line":242},11,[60,244,245],{"class":70},"                drive_motor[i]->",[60,247,170],{"class":129},[60,249,250],{"class":70},"(INFINITY);",[60,252,253],{"class":114},"   \u002F\u002F 启用速度控制\n",[60,255,257,259,261,263,266,268,270],{"class":62,"line":256},12,[60,258,245],{"class":70},[60,260,189],{"class":129},[60,262,133],{"class":70},[60,264,265],{"class":66},"-",[60,267,175],{"class":83},[60,269,178],{"class":70},[60,271,272],{"class":114},"        \u002F\u002F 初始速度为0\n",[60,274,276],{"class":62,"line":275},13,[60,277,278],{"class":70},"        }\n",[280,281,282],"style",{},"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 .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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);}",{"title":55,"searchDepth":105,"depth":105,"links":284},[],"19",19000000,"2023-12-30","2023-12-30-ros2-tutorial","\u002Fwiki\u002F2023-12-30-ros2-tutorial","Ros2 Tutorial","md",false,{},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch19-webots-fang-zhen-ping-tai",{"title":5,"description":12},"wiki\u002F2023-12-30-ros2-tutorial\u002Fch19-Webots仿真平台","0gCmfEYDxAvPpAgv179RKw8_mR1tbwvf6FdrSRho3HY",[299,305,311,317,323,329,335,341,347,353,359,365,371,377,383,384,390,396,402,408,414,420,426,432,438],{"path":300,"stem":301,"title":302,"date":287,"chapter":303,"chapterSort":304,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch1-ros2-jie-shao","wiki\u002F2023-12-30-ros2-tutorial\u002Fch1-ROS2介绍","ROS2介绍","1",1000000,{"path":306,"stem":307,"title":308,"date":287,"chapter":309,"chapterSort":310,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch10-stage-ros2-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002Fch10-Stage_Ros2仿真平台","Stage_Ros2仿真平台","10",10000000,{"path":312,"stem":313,"title":314,"date":287,"chapter":315,"chapterSort":316,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch11-1-gazeboclassic","wiki\u002F2023-12-30-ros2-tutorial\u002Fch11-1-GazeboClassic","Gezebo Classic","11.1",11010000,{"path":318,"stem":319,"title":320,"date":287,"chapter":321,"chapterSort":322,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch11-2-ignitiongazebo","wiki\u002F2023-12-30-ros2-tutorial\u002Fch11-2-IgnitionGazebo","Ignition Gazebo（Gazebo Fortress）","11.2",11020000,{"path":324,"stem":325,"title":326,"date":287,"chapter":327,"chapterSort":328,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch11-3-gazebosim","wiki\u002F2023-12-30-ros2-tutorial\u002Fch11-3-GazeboSim","Gz Sim（Gazebo Harmonic）","11.3",11030000,{"path":330,"stem":331,"title":332,"date":287,"chapter":333,"chapterSort":334,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch11-4-igngz2gzsim","wiki\u002F2023-12-30-ros2-tutorial\u002Fch11-4-Igngz2gzsim","将Ign Gazebo迁移至Gz Sim","11.4",11040000,{"path":336,"stem":337,"title":338,"date":287,"chapter":339,"chapterSort":340,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch11-gezebo-fang-zhen-ping-tai","wiki\u002F2023-12-30-ros2-tutorial\u002Fch11-Gezebo仿真平台","Gezebo仿真平台","11",11000000,{"path":342,"stem":343,"title":344,"date":287,"chapter":345,"chapterSort":346,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch12-ji-qi-ren-dao-hang-navigation2-fang-zhen-pian","wiki\u002F2023-12-30-ros2-tutorial\u002Fch12-机器人导航Navigation2(仿真篇)","机器人导航Navigation2(仿真篇)","12",12000000,{"path":348,"stem":349,"title":350,"date":287,"chapter":351,"chapterSort":352,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch13-ros2serial","wiki\u002F2023-12-30-ros2-tutorial\u002Fch13-ROS2Serial","ROS2 Serial","13",13000000,{"path":354,"stem":355,"title":356,"date":287,"chapter":357,"chapterSort":358,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch14-ji-qi-ren-ying-jian","wiki\u002F2023-12-30-ros2-tutorial\u002Fch14-机器人硬件","机器人硬件","14",14000000,{"path":360,"stem":361,"title":362,"date":287,"chapter":363,"chapterSort":364,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch15-ros2-control","wiki\u002F2023-12-30-ros2-tutorial\u002Fch15-ROS2_Control","ROS2_Control","15",15000000,{"path":366,"stem":367,"title":368,"date":287,"chapter":369,"chapterSort":370,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch16-moveit2-gong-ye-ji-qi-ren-ji-xie-bi","wiki\u002F2023-12-30-ros2-tutorial\u002Fch16-Moveit2工业机器人机械臂","Moveit2工业机器人机械臂","16",16000000,{"path":372,"stem":373,"title":374,"date":287,"chapter":375,"chapterSort":376,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch17-ji-qi-ren-dao-hang-navigation2-shi-ti-pian","wiki\u002F2023-12-30-ros2-tutorial\u002Fch17-机器人导航Navigation2(实体篇)","机器人导航Navigation2(实体篇)","17",17000000,{"path":378,"stem":379,"title":380,"date":287,"chapter":381,"chapterSort":382,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch18-microros","wiki\u002F2023-12-30-ros2-tutorial\u002Fch18-MicroROS","MicroROS","18",18000000,{"path":294,"stem":296,"title":5,"date":287,"chapter":285,"chapterSort":286,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},{"path":385,"stem":386,"title":387,"date":287,"chapter":388,"chapterSort":389,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch2-ru-men-cao-zuo","wiki\u002F2023-12-30-ros2-tutorial\u002Fch2-入门操作","入门操作","2",2000000,{"path":391,"stem":392,"title":393,"date":287,"chapter":394,"chapterSort":395,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch20-opencv","wiki\u002F2023-12-30-ros2-tutorial\u002Fch20-OpenCV","OpenCV","20",20000000,{"path":397,"stem":398,"title":399,"date":287,"chapter":400,"chapterSort":401,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch3-gong-zuo-kong-jian-yu-gong-neng-bao","wiki\u002F2023-12-30-ros2-tutorial\u002Fch3-工作空间与功能包","工作空间与功能包","3",3000000,{"path":403,"stem":404,"title":405,"date":287,"chapter":406,"chapterSort":407,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch4-si-da-tong-xin","wiki\u002F2023-12-30-ros2-tutorial\u002Fch4-四大通信","四大通信","4",4000000,{"path":409,"stem":410,"title":411,"date":287,"chapter":412,"chapterSort":413,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch5-ros2-qi-ta-tong-xin-ji-zhi","wiki\u002F2023-12-30-ros2-tutorial\u002Fch5-ROS2其他通信机制","ROS2其他通信机制","5",5000000,{"path":415,"stem":416,"title":417,"date":287,"chapter":418,"chapterSort":419,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch6-launch","wiki\u002F2023-12-30-ros2-tutorial\u002Fch6-Launch","Launch","6",6000000,{"path":421,"stem":422,"title":423,"date":287,"chapter":424,"chapterSort":425,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch7-hui-su-rosbag2","wiki\u002F2023-12-30-ros2-tutorial\u002Fch7-回溯rosbag2","回溯rosbag2","7",7000000,{"path":427,"stem":428,"title":429,"date":287,"chapter":430,"chapterSort":431,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch8-zuo-biao-bian-huan-tf","wiki\u002F2023-12-30-ros2-tutorial\u002Fch8-坐标变换TF","坐标变换TF","8",8000000,{"path":433,"stem":434,"title":435,"date":287,"chapter":436,"chapterSort":437,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":292},"\u002Fwiki\u002F2023-12-30-ros2-tutorial\u002Fch9-ke-shi-hua-ping-tai-rviz2-yu-urdf-jian-mo-yu-yan","wiki\u002F2023-12-30-ros2-tutorial\u002Fch9-可视化平台RVIZ2与URDF建模语言","可视化平台RVIZ2与URDF建模语言","9",9000000,{"path":289,"stem":439,"title":440,"date":287,"chapter":441,"chapterSort":442,"docKey":288,"docRoot":289,"docTitle":290,"isWikiDoc":205,"isWikiIndex":205},"wiki\u002F2023-12-30-ros2-tutorial\u002Findex","ROS2机器人操作系统教程",null,0,1778666545893]