@Project : CoppeliaSim-TryToExportURDF
@Author :Lucio.YipengLi@outlook.com
@Date :2025/02/26
@CoppeliaSim Version: 4.9.0
使用CoppeliaSim内置的URDF导出器
1.问题背景
在CoppeliaSim中,我们有时候在原有导入的URDF上又重新做了调整,此时我们可能想用其他的方法去用这个最新的URDF,这时候就需要CoppeliaSim反向输出新的URDF文件。
CoppeliaSim有很方便的自动导出URDF器,只不过需要根据一定的规则去调整模型文件,否则可能会导出失败甚至是缺胳膊少腿。
2.问题分析
在这个问题下我们主要是学习几个要点:
1.CoppeliaSim的模型结构
2.需要注意的属性设置和检测方法
一、CoppeliaSim的模型定义结构
注:需要完整项目学习的同学可以邮件联系我或者去我github里自取(觉得好帮忙点点STAR,谢谢!)一般的机械模型单结构如下面所示
-Robot_respondable
-Robot_visable
-Robot_Joint
解释:Robot_respondable是声明模型碰撞范围,通过我们导入一个非凹面的模型并要求其有碰撞反应时,仿真会非常非常卡。我们这里采用官方推荐的方法
{选中一个shape} -> [Modules] -> [Geometry / Mesh] -> [Convex hull...]
这样它会自己生成一个比较流畅的碰撞形状,声明这个形状为当前shape的Respondable即可,根据自己的需求去设定respondable或者dynamic/p>
Robot_visable是声明模型的视觉模型,由于这部分我们不打算让它承担任何碰撞或者运动学计算,所以可以不用怎么处理,直接把你自己的模型放在这即可
Robot_Joint是当前shape和下一个shape的连接,只需要正确安放好位置即可
需要注意的是,最上层的respondable(也即基座)需要在Object Properties中设定为Object is model,这样它会自动将机械范围囊括进去
其他的shape点开“Select base of model instead”即可
这样我们可以得到下面这个较为完整的结构,以一个二旋转轴的机械为例子:
-Robot_name(base_respondable)
-base_visable
-base_link1_joint
-link1_respondable
-link1_visable
-link1_link2_joint
-link2_respondable
-link2_visable
二、需要注意的属性设置
需要注意的属性设置分别是:Object的动态属性、Object的可见层、Object的特殊属性
首先是机器人的最上层基座respondable,在这里我们需要选择 "Object is model"和“Select base of model instead”,并且设置在一个不可见的层
而后是下面层其余的respondable,设置在不可见层
所有的respondable还需要设定自己想要的碰撞或动态效果,还需要取消Object special properties中所有的属性
机器人的视觉模型visable,不能设定碰撞或者动态效果,要选择“Select base of model instead”,根据层数确认Collection self-collision inc
机器人的转动关节Joint,选择“Ignored by model bounding”,而后设定在不可见层即可。
三、导出URDF并验证
{选择最上层的模型} -> [Modules] -> [Exporters] -> [URDF exporter...]
导出之后可以选择在一个新场景里重新导入这个URDF,看看是否符合预期
需要注意的是:重新导入后的respondable可能会有点卡(convex在重新导入后居然不认了,可以选择官网手册上其他的优化方法,这里我就懒得尝试了),如果想流畅点可以把不需要碰撞的模型碰撞属性关了就好