如何将URDF转为PROTO并导入Webots

本文简介:
介绍了如何使用官方的URDF转PROTO模型工具,并提供代码参考


相关链接:


urdf2webots

将urdf转PROTO格式需要使用Webots的官方工具urdf2webots,官方仓库链接为urdf2webots

该工具的使用环境为:

  • Python3.5或者更高的版本
  • PIP的最新版本

上述环境的配置只需要参考任何一篇Python的基础教程即可,此处不再赘述。

安装工具

该工具可以在Windows或者Ubuntu环境下使用,下面以Windows为例。

在cmd中使用pip命令

pip install urdf2webots

等待安装完成即可。

使用该工具

首先我们需要准备一个URDF文件,如何构建URDF文件互联网上教程很多,也可以通过Solidworks的URDF插件将模型导出为URDF文件。

通过运行Python文件的方式来使用该工具是比较方便的。

首先我们创建一个.py文件,然后输入:

from urdf2webots.importer import convertUrdfFile	#导入convertUrdfFile这个库
convertUrdfFile(input = '在这里填入你的URDF文件的路径(包括URDF的文件名和.urdf后缀)',output='在这里填入你的PROTO文件的路径(包括PROTO的文件名和.proto后缀')

运行以上的2行代码,终端会打印出:

Root link: xxxx
There are xx links, xx joints and xx sensors

此时PROTO和相关文件会在output=后面填入的路径生成PROTO文件,如图:

此时只需要将这些文件复制到Webots工程下的protos文件夹中即可。

关于convertUrdfFile()函数

convertUrdfFile()是一个Python函数,它有下面这些参数可选:

  • input: 指定要转换的 URDF 文件。
  • output: 如果设置这个参数,则需要指定路径,如果内容以".proto "结尾,则需要指定生成的 PROTO 文件的名称。减去 .proto 扩展名的文件名将作为机器人名称(该参数仅用于 PROTO 转换)。
  • robotName: 指定机器人名称,生成机器人节点字符串,而不生成 PROTO 文件(必须唯一)。
  • normal: 如果设置了该值,则会导出 URDF 定义中存在的法线。
  • boxCollision: 如果设置了该选项,则使用方框对边界对象进行近似处理。
  • toolSlot=LinkName: 指定要添加工具槽的连杆(连杆名称需要准确来自 URDF文件 ,该参数仅用于 PROTO 转换)。
  • initTranslation="0 0 0": 设置 PROTO 文件或 Webots Robot 节点字符串的Translation字段。
  • initRotation="0 0 1 0": 设置 PROTO 文件或 Webots 机器人节点字符串的Rotation字段。
  • initPos: 设置机器人关节的初始位置。例如:initPos="[1.2, 0.5, -1.5]"会将把机器人的前三个关节设置为指定值,其余关节保持默认值。
  • linkToDef: 为每个实体创建一个使用连杆名字的 DEF,以便使用 getFromProtoDef(defName)函数访问它。
  • jointToDef: 为每个关节创建一个使用关节名称的 DEF,以便使用 getFromProtoDef(defName)函数访问它。
  • relativePathPrefix: 如果未设置 input参数,通过 stdin 发送的 URDF 文件中的相对路径将使用此前缀。例如:filename="head.obj" 加上 relativePathPrefix="/home/user/myRobot/" 将变成filename="/home/user/myRobot/head.obj".

通常来说,使用inputoutput两个参数就已经足够,boxCollision参数可以简化对象,可以极大地提高物体互动的模拟效果,尤其是抓取。toolSlot参数更适用于机械臂。

修改完善PROTO文件

导出的PROTO文件需要作进一步检查,在笔者使用的2023.1.0的版本中,生成的PROTO文件在对stl文件的路径生成上会存在”无效转义符“错误。

关于无效转义符的问题,只需要统一文件路径上的所有"/"符号和"\"符号为"/"符号即可。
注意,路径可以使用相对路径,这样可以规避文件夹移动带来的问题,如图:

在仿真中导入PROTO文件

新建一个工程,添加一个Object,就可以导入PROTO了,如图

导入效果如下:

后面可以在PROTO中自行修改颜色,编写controller对电机进行控制,实现更好的效果。

posted @ 2023-11-30 22:12  C-Alen  阅读(812)  评论(0编辑  收藏  举报