如何正确地将 torsional_spring 元素添加到 Drake 中的 RigidBodyTree
How to properly add a torsional_spring element to a RigidBodyTree in Drake
我正在使用 Drake 模拟器,并试图将关节刚度添加到 underactuated robotics repo 中的 Acrobot 演示中,但到目前为止无法成功地将这种刚度集成到模拟中。
我是运行脚本torque_slider_demo.py,它引用了URDF文件acrobot.urdf。我修改了这个 URDF 以包含一个扭转 spring 条目,如下所示:
<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>
有了这个高得离谱的刚度值,我希望手臂能够稳定在 spring 的静止角附近并表现出明显的朝向静止角的拉力,但是我没有在脚本生成的可视化效果。
我是否在 URDF 中不正确地定义了扭转 spring?我是否需要做一些其他设置来告诉模拟器考虑关节刚度?
看起来我们支持扭力弹簧,但实际上并没有从 URDF 加载它们(也没有在 python 中公开接口):
https://github.com/RobotLocomotion/drake/blob/master/attic/multibody/test/rigid_body_tree/rigid_body_tree_spring_test.cc
添加起来并不难,如果您想将几行代码添加到解析器,我们欢迎您的贡献。 drake 开发人员现在专注于 multibodyplant(它将取代 rigidbodyplant)。
我正在使用 Drake 模拟器,并试图将关节刚度添加到 underactuated robotics repo 中的 Acrobot 演示中,但到目前为止无法成功地将这种刚度集成到模拟中。
我是运行脚本torque_slider_demo.py,它引用了URDF文件acrobot.urdf。我修改了这个 URDF 以包含一个扭转 spring 条目,如下所示:
<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>
有了这个高得离谱的刚度值,我希望手臂能够稳定在 spring 的静止角附近并表现出明显的朝向静止角的拉力,但是我没有在脚本生成的可视化效果。
我是否在 URDF 中不正确地定义了扭转 spring?我是否需要做一些其他设置来告诉模拟器考虑关节刚度?
看起来我们支持扭力弹簧,但实际上并没有从 URDF 加载它们(也没有在 python 中公开接口): https://github.com/RobotLocomotion/drake/blob/master/attic/multibody/test/rigid_body_tree/rigid_body_tree_spring_test.cc
添加起来并不难,如果您想将几行代码添加到解析器,我们欢迎您的贡献。 drake 开发人员现在专注于 multibodyplant(它将取代 rigidbodyplant)。