Find out inertial parameters

对于该模型的物理上合理的行为,你需要去正确的设置惯性矩阵,质量中心和所有链接links的重量。如果你没有他们(3D模型的链接),本教程将通过获得和填写信息来引导你。

本教程将展示怎样通过MeshLab(假设君子体)来获取惯性数据。你也可以用商业软件solidworks来计算他们的信息。如何使用soildworks,请参考this question on answers.ros.org

Preparation

Installing MeshLab

从官网上下载MeshLab软件,安装到你的电脑上,安装应该是很简单。

当安装上之后,你可以查看MeshLab(DAE和STL格式都支持,Gazebo/ROS也支持)。

Computing the inertial parameters

First try in MeshLab

为了计算惯量参数,你首先需要显示 图层对话框View->ShowLayer Dialog,窗口右侧有一个小组被打开,我们对其下册的部分感兴趣。

接下来,计算惯性参数。选择Filters->QualityMeasure andComputations->ComputeGeometric Measures。从图形对话框的下部应该看到关于惯性测量的一些数据。

Mesh Bounding Box Size 0.044000 0.221000 0.388410
Mesh Bounding Box Diag 0.449043 
Mesh Volume is 0.001576
Mesh Surface is 0.136169
Thin shell barycenter -0.021954 0.008976 0.012835
Center of Mass is -0.021993 0.001259 0.001489
Inertia Tensor is :
| 0.000008 -0.000000 -0.000000 |
| -0.000000 0.000001 -0.000000 |
| -0.000000 -0.000000 0.000007 |
Principal axes are :
| 0.999999 0.000166 0.001241 |
| -0.000113 0.999104 -0.042310 |
| -0.001247 0.042310 0.999104 |
axis momenta are :
| 0.000008 0.000001 0.000007 |
好像我们得到了想要的东西。但是,当你仔细看的时候,你会看到一个错误的东西--输出的最多只是六位小数。其结果是我们失去了惯性张量的有价值的信息。

现在,来解释MeshLab输出的意义。在MeshLab中,无法告诉模型的质量。因此MeshLab不得不用其他地方的质量来代替。在这种情况下,模型的体积大小(假设材料的单元密度)是十分有意义的。Mesh Volume存在于text output。

Getting the Center of Mass

MeshLab并不是用相同的长度单元。然而,你可以通过查看 Mesh Bounding Box Size,很容易的告诉MeshLab你所需要的MeshLab分辨。你可以以你自己的单元来计算边界框的尺寸,和MeshLab的进行比较。

Getting the Inertia Tensor

在text output中,如何解决惯性张量精度低的问题?你可以扩展模型,以使它数字增长足够大,而不会被裁剪。该模型可以用Filters->Normals, Curvatures and Orientation->Transform: Scale来标定。

Filling in the tags in URDF/SDF

下一步是记录包含你的机器人的URDF/SDF文件的计算值。

在每个链接中,你应该有标记。SDF将如下形式:


  
    -0.022 0.0203 0.02917 0 -0 0
    0.56
    
      0.004878
      -6.2341e-07
      -7.4538e-07
      0.00090164
      -0.00014394
      0.0042946
    
  
  
    ...
  
  
    ...
  
  ...
 

或者在URDF中:


  
    
    
    
  
  
    ...
  
  
    ...
  

以千克为单位。

或者用于质量中心位置。旋转单元将被忽略。如果你已经找到质心,填写值;否则,填写MeshLab计算的正确值。

 标记包含在上部你你计算的惯性张量。因为矩阵是对称的,紧要6个数字来表示。从MeshLab中获得的输出映射如下:

| ixx ixy ixz |
| ixy iyy iyz |
| ixz iyz izz |

Checking in Gazebo

查看是否正确,你可以用gazebo中的界面。我们运行:

roslaunch gazebo_ros empty_world.launch



你可能感兴趣的:(※【Gazebo】)