听说你只会用Gazebo仿真?

3968
0
2020年3月15日 20时11分

首先我必须得承认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

 

发表评论

后才能评论