本文最后更新于 2024-10-31,文章内容可能已经过时。

URDF仿真惯性参数不知道怎么配?快收藏,常见几何物体URDF分享

惯性矩阵是什么

惯性矩阵描述的是物体的惯性张量在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>