Как правильно добавить элемент torsional_spring в RigidBodyTree в Drake - PullRequest
0 голосов
/ 11 января 2019

Я использую симулятор Дрейка и пытаюсь добавить жесткость сустава к демонстрации Acrobot, найденной в репродукции робототехники с недостаточной активностью , и до сих пор не смог успешно интегрировать такую ​​жесткость в симуляцию.

Я запускаю сценарий moment_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? Нужно ли делать какие-то другие настройки, чтобы сказать симулятору учитывать жесткость сустава?

1 Ответ

0 голосов
/ 11 января 2019

Похоже, у нас есть поддержка крутильных пружин, но на самом деле не загружаем их из URDF (и не предоставляем интерфейс в python): https://github.com/RobotLocomotion/drake/blob/master/attic/multibody/test/rigid_body_tree/rigid_body_tree_spring_test.cc

Нетрудно добавить, и мы приветствуем этот вклад, если вы хотите добавить несколько строк в анализатор. Разработчики Drake теперь сосредоточены на мультиблок-установке (которая заменит жёсткий корпус).

...