SolidWorks 导出 URDF 中的惯性矩阵错误问题

系列文章目录


前言


一、

dsubhasish09于2021年5月23日发表评论

在装配体中定义由多个零件组成的 link 时,单个零件质心处各自的惯性值(在使用相似性变换使其与关节坐标系平行后)会直接相加,从而得到净惯性矩阵,而不是先平移到(链接中所有零件组合的)净质心处再相加。这样得到的惯性矩阵是错误的。这个问题最近才发现,请尽早解决。

jespersmith 于 2021 年 7 月 29 日发表评论说 -

几年前我就注意到了这个问题,并在 bitbucket 上留下了问题报告。遗憾的是,我无法再调出这个报告,但这对于力控机器人来说是个问题。我们一直在手动更新惯性,并在创建模型时将其作为一个很好的审查步骤,因此它并不是一个真正的障碍。

还要注意的是,solidworks 输出的惯性张量与惯性矩阵的对角线外分量不同。

dsubhasish09于2021年7月29日发表评论

是的,我们也是这么做的,但要手动更改每个链接的惯性值非常麻烦,尤其是在链接数量较多的情况下。你们是否通过任何方式实现了自动化?

jespersmith 于 2021 年 7 月 29 日发表评论

我们有一个编辑 URDF 的简单用户界面,可以解析来自 solidworks 质量工具的数据(将数据复制到剪贴板)。我们刚刚重新开始开发,可能会考虑将其开源。

brawner 于 2021 年 11 月 22 日发表评论

很遗憾听到这个错误,因为我几乎只是使用 SW 的接口来计算 MOI。听起来这可能是上游的一个错误。

https://github.com/ros/solidworks_urdf_exporter/blob/master/SW2URDF/URDFExport/ExportHelperExtension.cs#L248-L260

你们是否有代表性模型和 URDF 以帮助进行比较?

bbokser 于 2022 年 5 月 4 日发表评论

如果您愿意,我可以提供有代表性的模型。我非常希望不必每次生成 URDF 时都要手动校正数值。天知道这么多年来这让我头疼了多少次......

xwavex 于 2022 年 8 月 4 日发表评论

这听起来像是急需解决的问题

internetKevin0 评论于 2023 年 2 月 1 日 -

我想火上浇油。惯性计算不正确,需要尽快修复。我们的解决方法是在每个有两个以上部件或主体的链接中手动输入正确的惯性矩阵值。只有当每个链接只有一个主体时,导出程序才能正常工作。即使同一部件中有多个主体,如果它们的密度不同,惯性计算仍会出现偏差。

brawner 评论于 2023年2月1日

此代码已开源,欢迎随时提交 PR

luoye2333 于 Jun 3 - 发表评论

我们有一个编辑 URDF 的简单用户界面,可以解析来自 solidworks 质量工具的数据(将数据复制到剪贴板)。我们刚刚重新开始开发,可能会考虑将其开源。

我使用 chatgpt 在 python 中生成一个转换程序。使用时,将 solidworks 质量工具中的文本复制到代码中的 const 字符串。然后将输出文本复制到原始 urdf 文件中。欢迎使用。

python 复制代码
# 原始字符串
raw_string = """
所选零部件 的质量属性
     坐标系: BCS

质量 = 5439.19 克

体积 = 2525851.14 立方毫米

表面积 = 979087.02  平方毫米

重心 : ( 毫米 )
	X = 0.00
	Y = 1.10
	Z = 7.33

惯性主轴和惯性主力矩: ( 克 *  平方毫米 )
由重心决定。
	 Ix = ( 0.00, -1.00, -0.01)   	Px = 45020646.47
	 Iy = ( 1.00,  0.00,  0.00)   	Py = 48410923.95
	 Iz = ( 0.00, -0.01,  1.00)   	Pz = 80241299.66

惯性张量: ( 克 *  平方毫米 )
由重心决定,并且对齐输出的坐标系。 (使用正张量记数法。)
	Lxx = 48410923.95	Lxy = 1.36	Lxz = -0.97
	Lyx = 1.36	Lyy = 45021610.36	Lyz = 184249.38
	Lzx = -0.97	Lzy = 184249.38	Lzz = 80240335.77

惯性张量: ( 克 *  平方毫米 )
由输出座标系决定。 (使用正张量记数法。)
	Ixx = 48709740.16	Ixy = 0.92	Ixz = -3.91
	Iyx = 0.92	Iyy = 45313794.64	Iyz = 228269.22
	Izx = -3.91	Izy = 228269.22	Izz = 80246967.70
"""

# 提取数值并除以10^9
mass = str(float(raw_string.split('质量 = ')[1].split()[0]) / 1e3)
cog_x = str(float(raw_string.split('X = ')[1].split()[0]) / 1e3)
cog_y = str(float(raw_string.split('Y = ')[1].split()[0]) / 1e3)
cog_z = str(float(raw_string.split('Z = ')[1].split()[0]) / 1e3)
ixx = str(float(raw_string.split('Lxx = ')[1].split()[0]) / 1e9)
ixy = str(-float(raw_string.split('Lxy = ')[1].split()[0]) / 1e9)
ixz = str(-float(raw_string.split('Lxz = ')[1].split()[0]) / 1e9)
iyy = str(float(raw_string.split('Lyy = ')[1].split()[0]) / 1e9)
iyz = str(-float(raw_string.split('Lyz = ')[1].split()[0]) / 1e9)
izz = str(float(raw_string.split('Lzz = ')[1].split()[0]) / 1e9)

# 输出格式
output_string = f"""
<inertial>
  <origin
    xyz="{cog_x} {cog_y} {cog_z}"
    rpy="0 0 0" />
  <mass
    value="{mass}" />
  <inertia
    ixx="{ixx}"
    ixy="{ixy}"
    ixz="{ixz}"
    iyy="{iyy}"
    iyz="{iyz}"
    izz="{izz}" />
</inertial>
"""

print(output_string)

jespersmith 于 Jun 19 - 发表评论

我们有一个编辑 URDF 的简单用户界面,可以解析来自 solidworks 质量工具的数据(将数据复制到剪贴板)。我们刚刚重新开始开发,可能会考虑将其开源。

我使用 chatgpt 在 python 中生成一个转换程序。使用时,将 solidworks 质量工具中的文本复制到代码中的 const 字符串。然后将输出文本复制到原始 urdf 文件中。请随意使用。

请注意,Solidworks 和 URDF 之间的非对角线项需要负值。

摘自我的个人文档

python 复制代码
WARNING: SolidWorks shows the moments of inertia, URDF expects the inertia tensor matrix.

The inertia tensor matrix is defined below from the moments of inertia:

![afbeelding](https://github.com/ros/solidworks_urdf_exporter/assets/8227626/70b210a0-026c-4544-9933-1491e382c23c)


Pretty much, make the off-diagonal values negative when exporting.

luoye2333 于 Jun 21 发表评论

谢谢 jespersmith。您说得没错。我编辑了代码 #117(评论),并在 ixy ixz 和 iyz 中添加了减号"-"。

Hi,

I'm a student and I'm trying to export the urdf using the plugin. There are many parts that have an overridden mass in my robot model. I get wrong mass and moments of ineria and I am trying to correcting them manually.

I notice that the centre of gravity coordinates are obtained in a global coordinate system.

**System Information**

  1. SolidWorks version and service pack: SolidWorks 2024

  2. Version of exporter 16.1

**Describe the bug**

相关推荐
封步宇AIGC19 分钟前
量化交易系统开发-实时行情自动化交易-4.2.1.简单移动平均线实现
人工智能·python·机器学习·数据挖掘
封步宇AIGC25 分钟前
量化交易系统开发-实时行情自动化交易-4.1.4.A股布林带(BOLL)实现
人工智能·python·机器学习·数据挖掘
HengCeResearch8827 分钟前
中国【食品检测实验室自动化】程度相对欧美等发达国家相对落后,并且技术层面存在明显的代差,未来有比较大的发展空间
人工智能·百度·自动化
sun_weitao31 分钟前
括号匹配算法
开发语言·python
飞起来fly呀42 分钟前
AI驱动电商新未来:提升销售效率与用户体验的创新实践
人工智能·ai
sky_smile_Allen1 小时前
[C#] 关于数组的详细解释以及使用注意点
开发语言·算法·c#
敲代码不忘补水1 小时前
Python Matplotlib 数据可视化全面解析:选择它的七大理由与入门简介
开发语言·python·信息可视化·numpy·pandas·matplotlib
易辰君1 小时前
【Python爬虫实战】深入解析 Scrapy 爬虫框架:高效抓取与实战搭建全指南
开发语言·爬虫·python
李歘歘1 小时前
Stable Diffusion经典应用场景
人工智能·深度学习·计算机视觉
huaqianzkh1 小时前
学习C#中的BackgroundWorker 组件
开发语言·学习·c#