Gazebo仿真踩坑系列-乱飞、抖动等

本文章记录机械臂、塔吊等仿真过程中遇到的各种问题。

塔吊建模

前言

gazebo机械臂等控制仿真最重要的是建模,也就是URDF的编写,而这里面有着特别多要注意的地方,否则会发生‘启动乱飞’、‘控制乱飞’、和‘启动姿态不对‘等问题。

gazebo仿真要解决的是控制问题,而控制分为位置控制、速度控制和力控等几种方式。

1、位置控制一般不会产生大问题,大多时候把重量和有一个差不多转动惯量设置就能跑

2、速度和力控则容易出问题,这时候需要非常准确的转动惯量,和重量设置,否则转不起来或者空有形式。

建模

gazebo的URDF模型里面关键的是Intertial竖向,visual和collision是可视化和规划的时候用的,而Intertial是仿真是否运行稳定的关键参数。

如下摘取URDF中LINK的建模过程,visual、collision、intertial等三个部分都有自己的origin,也就是参考坐标系,这个坐标原点和几何形状具有相关性,也就是geometry,这里面我们使用的是stl建好的模型mesh文件,而mesh文件在导出的时候就具备自己的坐标系,因此修改stl坐标原点也是URDF建模的必修课之一。

  <link name="forearm_link">
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://arm_moveit_config/urdf/meshes/wrist_link.stl"  />
      </geometry>
      <material name="blue"/>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <mesh filename="package://arm_moveit_config/urdf/meshes/wrist_link.stl"  />
      </geometry>
    </collision>
    <inertial>
      <mass value="6" />
      <inertia ixx="0.06" ixy="0.0" ixz="0.0" iyy="20" iyz="0.0" izz="20" />
      <origin xyz="0  0 0" rpy="0 0 0" />

    </inertial>
  </link>

geometry的坐标原点

geometry属性有几种建模方式,分别为标准形状(box/cylinder/)和自定义形状(mesh)等,而每种的坐标原点不一样。

标准形状

一般为高度的一半,比如定义一个box[1,2,3],他的坐标原点为

<origin xyz="0.5  1 1.5 0" rpy="0 0 0" />

自定义形状

这种一般需要自己建模,比如SolidWorks或者freeCAD等软件,导出到stl文件的之前,先建立坐标系,导出stl时候选择参考坐标系。

一般坐标原点建立在旋转轴上。

Intertial建立

Visual和Collision的坐标原点建好后,就来到Intertial部分,如果不做gazebo仿真,这一部分可以省略,比如世界用moveit做规划控制等,但是想要仿真,就必须把这部分完成。

这部分牵扯到运动稳定性和运动仿真的有效性,需要注意以下几点:

1)一定要确认坐标的x、y、z轴的方向,因为转动惯量I是根据坐标变换不一样的,如下所示,分别为Ixx,Ixy,Ixz,Iyy,Iyz,Izz这里面Ixx,Iyy,Izz一定要设置否则会发生无线加速的情况,而其余可以省略,但是为了整体仿真的有效性,不建议省略。

2)比如下面的设置是一个杆状物体,是本文第一个图的塔吊臂,其特点是一个细长的杆状近似物体,这时候,如果没有设置对坐标轴,那么转动惯量不对,会发生自己无限制旋转等问题。

其中Ixx和质量和旋转轴位置有关,大概公式为I = m*r^2。

一般情况下,如果visual的坐标原点就是旋转轴位置则,Intertial也是根据这个坐标原点计算即可,如果不是的话,则需要根据实际旋转位置重新计算,或者制定转动惯量的实际坐标原点即可。
 

    <inertial>
      <mass value="6" />
      <inertia ixx="0.06" ixy="0.0" ixz="0.0" iyy="20" iyz="0.0" izz="20" />
      <origin xyz="0 0 0" rpy="0 0 0" />
    </inertial>

Mesh的简化

一般来说建模软件导出的文件点数量过多,会导致规划的时候大量的计算和仿真的时候的大量占用计算资源,Mesh文件一般是为了显示和碰撞,那么我们只要具备其大概的轮廓即可。

因此就用到了Mesh优化,这里选择meshlab(具有Windows和Linux两个版本,都可)比较友好,具体过程参考:

降采样3D Mesh STL模型_皮皮#2500的博客-CSDN博客_meshlab降采样。

简化过程中注意有些细长的部分,如果存在较大的目标里面,会被简化掉,因此,建议讲重要的细长的物体单独简化,再从URDF中用fixed joint进行组装。

控制

利用Moveit无法虽然执行了整个规划过程,但是提示执行失败的问题

controller '/arm_controller' failed with error GOAL_TOLERANCE_VIOLATED:
[ WARN] [1652928004.667450201, 27.904000000]: Controller handle /arm_controller reports status ABORTED

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值