0

我正在使用 Drake 模拟器,并尝试将关节刚度添加到欠驱动机器人 repo中的 Acrobot 演示中,但到目前为止还无法成功地将这种刚度集成到模拟中。

我正在运行脚本 torque_slider_demo.py,它引用了 URDF 文件 acrobot.urdf。我修改了这个 URDF 以包括一个扭转弹簧条目,如下所示:

<torsional_spring stiffness = "100000000" rest_angle = ".75">
   <joint name = "shoulder"/>
 </torsional_spring>

这个元素是在定义关节后添加的(完整的 XML 如下所示),我增加了两个关节的阻尼以更快地看到稳态行为。

<?xml version="1.0"?>

<robot xmlns="http://drake.mit.edu"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 name="Acrobot">

  <link name="base_link">
    <visual>
      <geometry>
        <box size="0.2 0.2 0.2" />
      </geometry>
      <material name="green">
        <color rgba="0 1 0 1" />
      </material>
    </visual>
  </link>

  <link name="upper_link">
    <inertial>
      <origin xyz="0 0 -.5" rpy="0 0 0" />
      <mass value="1" />
      <inertia ixx="1" ixy="0" ixz="0" iyy="0.083" iyz="0" izz="1" />
    </inertial>
    <visual>
      <origin xyz="0 0 -0.5" rpy="0 0 0" />
      <geometry>
        <cylinder length="1.1" radius="0.05" />
      </geometry>
      <material name="red">
        <color rgba="1 0 0 1" />
      </material>
    </visual>
  </link>

  <link name="lower_link">
    <inertial>
      <origin xyz="0 0 -1" rpy="0 0 0" />
      <mass value="1" />
      <inertia ixx="1" ixy="0" ixz="0" iyy="0.33" iyz="0" izz="1" />
    </inertial>
    <visual>
      <origin xyz="0 0 -1" rpy="0 0 0" />
      <geometry>
         <cylinder length="2.1" radius=".05" />
      </geometry>
      <material name="blue">
        <color rgba="0 0 1 1" />
      </material>
    </visual>
  </link>

  <joint name="shoulder" type="continuous">
    <parent link="base_link" />
    <child link="upper_link" />
    <origin xyz="0 0.15 0" />
    <axis xyz="0 1 0" />
    <dynamics damping="1" />
  </joint>

  <joint name="elbow" type="continuous">
    <parent link="upper_link" />
    <child link="lower_link" />
    <origin xyz="0 0.1 -1" />
    <axis xyz="0 1 0" />
    <dynamics damping="1" />
  </joint>

  <torsional_spring stiffness = "100000000" rest_angle = ".75">
    <joint name = "shoulder"/>
  </torsional_spring>

  <transmission type="SimpleTransmission" name="elbow_trans">
    <actuator name="elbow" />
    <joint name="elbow" />
    <mechanicalReduction>1</mechanicalReduction>
  </transmission>


</robot>

有了这个高得离谱的刚度值,我希望手臂能稳定在弹簧的静止角附近,并表现出明显的向静止角的拉力,但是我在脚本生成的可视化中看不到这些效果。

我是否不正确地定义了 URDF 中的扭转弹簧?我是否需要做一些其他设置来告诉模拟器考虑关节刚度?

4

1 回答 1

0

看起来我们支持扭转弹簧,但实际上并没有从 URDF 加载它们(也没有在 python 中公开接口): https ://github.com/RobotLocomotion/drake/blob/master/attic/multibody/test/刚体树/刚体树弹簧测试.cc

添加起来并不难,如果您想将几行添加到解析器,我们欢迎您的贡献。德雷克开发人员现在专注于多体植物(它将取代刚体植物)。

于 2019-01-11T10:37:22.073 回答