如何将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"
.
通常来说,使用input和output两个参数就已经足够,boxCollision参数可以简化对象,可以极大地提高物体互动的模拟效果,尤其是抓取。toolSlot参数更适用于机械臂。
修改完善PROTO文件
导出的PROTO文件需要作进一步检查,在笔者使用的2023.1.0的版本中,生成的PROTO文件在对stl文件的路径生成上会存在”无效转义符“错误。
关于无效转义符的问题,只需要统一文件路径上的所有"/"符号和"\"符号为"/"符号即可。
注意,路径可以使用相对路径,这样可以规避文件夹移动带来的问题,如图:
在仿真中导入PROTO文件
新建一个工程,添加一个Object,就可以导入PROTO了,如图
导入效果如下:
后面可以在PROTO中自行修改颜色,编写controller对电机进行控制,实现更好的效果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~