ROS2 常见物体的仿真惯性参数
本文最后更新于 2024-10-31,文章内容可能已经过时。
惯性矩阵是什么
惯性矩阵描述的是物体的惯性张量在x,y,z三个坐标轴上的投影的矩阵形式
为什么要自定义
从solidworks中导出的urdf模型,惯量矩阵一般都是不对的,我们拿到的模型基本都是只有机械臂的外壳,减速机等都没有包含在内,质量和材料设置也都不对,生成关节的内参也是不对的。
如果内参已经有问题到影响我们仿真了,这个时候就需要我们来手动修改内参,如何手动修改呢?
常见三维几何物体张量矩阵
实心球体
半径为r,质量为m的是实心球体
<xacro:macro name="sphere_inertial_matrix" params="m r">
<inertial>
<mass value="${m}" />
<inertia ixx="${2*m*r*r/5}" ixy="0" ixz="0"
iyy="${2*m*r*r/5}" iyz="0"
izz="${2*m*r*r/5}" />
</inertial>
</xacro:macro>
空心球体
半径为r,质量为m的是空心球体
<xacro:macro name="hollow_sphere_inertial_matrix" params="m r">
<inertial>
<mass value="${m}" />
<inertia ixx="${2*m*r*r/3}" ixy="0" ixz="0"
iyy="${2*m*r*r/3}" iyz="0"
izz="${2*m*r*r/3}" />
</inertial>
</xacro:macro>
实心椭球
半轴长度为a , b , c,质量m的实心椭球
<xacro:macro name="solid_ellipsoid_inertial_matrix" params="m a b c">
<inertial>
<mass value="${m}" />
<inertia ixx="${1*m*(b*b+c*c)/5}" ixy="0" ixz="0"
iyy="${1*m*(a*a+c*c)/5}" iyz="0"
izz="${1*m*(a*a+b*b)/5}" />
</inertial>
</xacro:macro>
实心长方体
宽度为w,高度为h,深度为d,质量为m 的实心长方体
<xacro:macro name="solid_rectangle_inertial_matrix" params="m w h d">
<inertial>
<mass value="${m}" />
<inertia ixx="${1*m*(h*h+d*d)/12}" ixy="0" ixz="0"
iyy="${1*m*(w*w+d*d)/12}" iyz="0"
izz="${1*m*(w*w+h*h)/12}" />
</inertial>
</xacro:macro>
绕轴长杆末端
沿y轴长度为l,质量为m 的绕末端旋转的细长杆
<xacro:macro name="shaft_wound_end_inertial_matrix" params="m l">
<inertial>
<mass value="${m}" />
<inertia ixx="${1*m*l*l/3}" ixy="0" ixz="0"
iyy="0" iyz="0"
izz="${1*m*l*l/3}" />
</inertial>
</xacro:macro>
绕轴长杆中心
<xacro:macro name="shaft_wound_center_inertial_matrix" params="m l">
<inertial>
<mass value="${m}" />
<inertia ixx="${1*m*l*l/12}" ixy="0" ixz="0"
iyy="0" iyz="0"
izz="${1*m*l*l/12}" />
</inertial>
</xacro:macro>
实心圆柱体
半径为r,高度为h,质量为m 的实心圆柱体
<xacro:macro name="solid_cylinder_inertial_matrix" params="m r h">
<inertial>
<mass value="${m}" />
<inertia ixx="${1*m*(3*r*r+h*h)/12}" ixy="0" ixz="0"
iyy="${1*m*(3*r*r+h*h)/12}" iyz="0"
izz="${1*m*r*r/2}" />
</inertial>
</xacro:macro>
圆柱管
内径为r1,外径为r2,长度为h,质量为m 的带有开口端的厚壁圆柱管
<xacro:macro name="cylindrical_tube_inertial_matrix" params="m r1 r2 h">
<inertial>
<mass value="${m}" />
<inertia ixx="${1*m*(3*(r1*r1+r2*r2)+h*h)/12}" ixy="0" ixz="0"
iyy="${1*m*(3*(r1*r1+r2*r2)+h*h)/12}" iyz="0"
izz="${1*m*(r1*r1+r2*r2)/2}" />
</inertial>
</xacro:macro>
正圆锥
半径为r,高度为h,质量为m 的正圆锥
<xacro:macro name="tapering_inertial_matrix" params="m r h">
<inertial>
<mass value="${m}" />
<inertia ixx="${3*m*h*h/5+3*m*r*r/20}" ixy="0" ixz="0"
iyy="${3*m*h*h/5+3*m*r*r/20}" iyz="0"
izz="${3*m*r*r/10}" />
</inertial>
</xacro:macro>
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Moon
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果