首先我必须得承认Gazebo功能有多强大,然而对于大多数刚入门的新手来说,使用Gazebo仿真的时候各种参数的配置简直让人头疼,一不小心终端就是一片“爆红”!所以今天就给大家推荐另外一款机器人仿真软件——Webots。经历了20年商业许可的它,2018年终于以开源的身份面向广泛的机器人爱好者,让我们一起来了解一下吧!

Webots到底有多好用?

  “地表最强”我不敢说,但它绝对是能够帮我们快速实现算法验证的好助手,它可以支持C/C++、Python、MATLAB、Java、ROS和TCP/IP等多种方式实现模型的仿真控制。不仅如此它还内置了50多种机器人模型,涵盖了人形机器人、移动机器人、单臂移动机器人、双臂移动机器人、爬行机器人、机械臂、无人机等等,其中就包括大家比较熟悉的Boston Dynamics Atlas、DJI Mavic 2 PRO、Nao、PR2、YouBot、UR、Turtlebot3 Burger等机器人。如果只是用来验证算法,我们连机器人建模都省了呢!你可以用它让你的机器人欢快的在水中遨游,可以用它让你的“好奇号”在火星漫步,可以用它让你的机器人扫地拿东西等等。   插图1-蝾螈游泳插图2-火星车插图3-扫地机器人           插图5-UR插图6-无人机     哦对了,如果你想验证你的自动驾驶算法,内置的BMW、Tesla等模型足以快速搭建起你需要的实验平台。另一方面,webots还集成了很多商用传感器(Hokuyo、SICK等品牌的激光雷达,Kinect摄像头等),我们直接导入相应的节点就可以了,是不是很方便呢?   插图8-自动驾驶插图7-自动驾驶  

如何建模呢?

如果想用自己的机器人仿真,应该怎么办呢?   目前来说有三种方法可以供我们选择:   (1)使用webots模型树建模 这种方法最麻烦,对于简单的模型我们可以使用它来解决,对于比较复杂的模型,例如有机械臂连杆这种不规则表面的模型,祥哥推荐你使用下面两种方法。   (2)使用SolidWorks等三维建模软件导出VRML(*.wrl) webots环境建模是用一种虚拟现实建模语言VRML(Virtual Reality Modeling Language)来描述的,因此我们可以使用三维软件导出这种格式。以SolidWorks为例,使用SolidWorks完成建模以后,将其另存为VRML(*.wrl)文件。由于SolidWorks装配体的装配关系在转换成*.wrl后装配关系会消失,因此我们需要在webots模型树进行重新装配。零部件的导入,使用webots【文件】中的【Import VRML97】功能实现。   插图10-webots导入VRML


 

避坑指南: ①  建议使用单个零部件分别导入,装配体整体导入时会存在一些坐标系移位的问题。 ②  导出零部件前先简化一下特征,去掉多余的孔、倒角、圆角之类的特征,避免特征过多导致仿真卡顿或者webots闪退的情况。

以一根圆柱link1为例,另存为VRML(*.wrl)文件时需要注意默认导出的是VRML 1.0,而该版本的文件导入webots是会报错的,因此我们单击选项,设置输出版本为VRML 97,单位:,下方的输出坐标系选中建好的坐标系。   插图11-solidworks导出vrml插图12-solidworks导出vrml选项


  此处输出坐标系的选择,会影响到我们装配时的便捷程度,在webots中零部件的移动是以自身坐标系为基准的。   举个栗子,杆link1的坐标系设置如下图: 插图13-link1坐标系


  假设我们使用默认坐标系输出的VRML文件为link1_base.wrl,使用杆心坐标系1输出的VRML文件为link1.wrl,导入webots后分别命名为link1_base、link1,效果对比如下:   插图14-坐标对比插图15-坐标对比1


对于零部件的装配,我们在下次的《webots建模指南》中仔细讲解。

(3)使用urdf/xacro转换 对于已有或只有urdf/xacro文件的情况下,我们可以通过urdf2webots功能包实现。由于官网现有包有些问题,我们在此使用已有可用版本的源码包。在使用前需要先配置该功能包的运行环境,切换到功能包urdf2webots的目录下,终端执行如下命令:   pip install -r requirements.txt  

避坑指南: ①  在urdf2webots功能包目录下执行以上命令时,由于网络问题可能会终端“爆红”,多运行几次或者切换到手机热点即可解决。 ②  目前官方github的urdf2webots包转换的模型,导入软件后会报错,推荐使用祥哥提供的包,链接在文末。

  使用方法: python urdf2webots.py --input=yourSelfRobotModel.urdf   插图16-urdf2webots使用说明 插图17-urdf2webots使用说明_win


避坑指南: 不要使用除input参数以外的output等其他参数,也不要修改生成的yourSelfRobotModel.proto文件名称!!!

  生成的*.proto文件位于urdf2webots功能包目录下。   插图18-导出目录


  接下来我们将生成的*.proto文件导入webots,先单击空白世界(除地面、模型以外的地方),然后在模型树上方点击1111111,或者使用快捷键Ctrl + Shift + A,在PROTO nodes(Current Project)项的说明部分查看要放置的目录,如下图所示。根据提示将yourSelfRobotModel.proto文件复制到指定目录下的/protos文件夹下即可。   插图19-查看模型放置的位置插图20-查看模型放置的位置_win          


避坑指南: 目录会因为你保存的世界文件*.wbt文件所在位置不同而不同,复制前需要注意!

  再次打开PROTO nodes(Current Project)项我们可以看到,已经多了两项我们转换成功的模型:   插图21-添加机器人   添加完成后发现模型处于倾倒状态,我们可以通过rotation将其姿态调正:   插图23-导入后的机器人  

避坑指南: 此状态下保存完工程文件后,再次打开后会发现两个机器人模型会消失,因此需要将其转换为基本节点。具体操作如下:选中模型,右击选择Convert to Base Node(s)即可。

  当你点击222222开始仿真时,会发现机器人会疯狂往下掉,这是由于自动转换的模型没有设置边界条件,每个Solid中都有一个boundingObject节点,碰撞检测就是靠它实现的,具体设置同样留个悬念,而对于上图中控制台的警告就是由于没有设置边界条件所造成的。   插图24-仿真动图


  模型建完了,相信你已经迫不及待的想让它动起来吧!别着急,我先卖个关子,看看屏幕前好学的你能不能解决这个问题~   读万卷书,也要行万里路!我是罗伯特祥,下次见!


  本文涉及到项目文件链接:https://share.weiyun.com/5StRIeM