btMultiBodyJointMotor interaction and control problem.
Posted: Fri Feb 15, 2019 6:11 pm
Hello,
I'm playing around MultiBody in order to overcome a constraint stability problem for a robotic arm chain in my framework.
I wrote a simple urdf file (at the end of this message) loaded by the standard urdf multibody example. There are 3 links. The blue link is the fixed base, then we have a white link connected to the base via a revolute joint and then the red one connected to the white link with another revolute joint.
I apply a velocity on motorized revolute joint in order to move the white link, but at the end of its superior and inferior limit the red link move itself. Conversely, I've applied a velocity on motorized revolute joint in order to move the red link and, at end of its inferior limit, the white link start to move itself as side effect.
In general this is an unwanted behavior: if I move a motor I don't want to move another motor in any condition, unless applying an explicit velocity on that motor.
You can look at the behavior in the video attached:
https://drive.google.com/open?id=1aMHtX ... cRoP11DRlI
Can I control this behavior?
Thanks, bye
<?xml version="1.0"?>
<robot name="physics">
<link name="DOF_ArmRotate">
<visual>
<geometry>
<box size="0.42 0.11 0.22"/>
</geometry>
<origin rpy="0 0 0" xyz="0.21 0 0"/>
<material name="blue">
<color rgba="0 0 0.8 1"/>
</material>
</visual>
<collision>
<geometry>
<box size="0.42 0.11 0.22"/>
</geometry>
<origin rpy="0 0 0" xyz="0.21 0 0"/>
</collision>
<inertial>
<mass value="0"/>
<origin rpy="0 0 0" xyz="0.21 0 0 "/>
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
</inertial>
</link>
<link name="DOF_Snodo1">
<visual>
<geometry>
<box size="0.68 0.23 0.64"/>
</geometry>
<origin rpy="0 0 0" xyz="0.34 0 0.32"/>
<material name="white">
<color rgba="1 1 1 1"/>
</material>
</visual>
<collision>
<geometry>
<box size="0.68 0.23 0.64"/>
</geometry>
<origin rpy="0 0 0" xyz="0.34 0 0.32"/>
</collision>
<inertial>
<mass value="2"/>
<origin rpy="0 0 0" xyz="0.34 0 0.32"/>
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
</inertial>
</link>
<joint name="Rotate_White_Joint" type="revolute">
<axis xyz="0 1 0"/>
<limit effort="1000.0" lower="-0.785" upper="0.785" velocity="0.5"/>
<origin rpy="0 0 0" xyz="0.42 0.0 0.0"/>
<parent link="DOF_ArmRotate"/>
<child link="DOF_Snodo1"/>
</joint>
<link name="DOF_Snodo2">
<visual>
<geometry>
<box size="0.42 0.12 0.20"/>
</geometry>
<origin rpy="0 0 0" xyz="0.21 0 0.10"/>
<material name="red">
<color rgba="1 0 0 1"/>
</material>
</visual>
<collision>
<geometry>
<box size="0.42 0.12 0.20"/>
</geometry>
<origin rpy="0 0 0" xyz="0.21 0 0.10"/>
</collision>
<inertial>
<mass value="1"/>
<origin rpy="0 0 0" xyz="0.21 0 0.10"/>
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
</inertial>
</link>
<joint name="Rotate_Red_Joint" type="revolute">
<axis xyz="0 1 0"/>
<limit effort="1000.0" lower="-0.785" upper="0.785" velocity="0.5"/>
<origin rpy="0 0 0" xyz="0.68 0.0 0.64"/>
<parent link="DOF_Snodo1"/>
<child link="DOF_Snodo2"/>
</joint>
</robot>
I'm playing around MultiBody in order to overcome a constraint stability problem for a robotic arm chain in my framework.
I wrote a simple urdf file (at the end of this message) loaded by the standard urdf multibody example. There are 3 links. The blue link is the fixed base, then we have a white link connected to the base via a revolute joint and then the red one connected to the white link with another revolute joint.
I apply a velocity on motorized revolute joint in order to move the white link, but at the end of its superior and inferior limit the red link move itself. Conversely, I've applied a velocity on motorized revolute joint in order to move the red link and, at end of its inferior limit, the white link start to move itself as side effect.
In general this is an unwanted behavior: if I move a motor I don't want to move another motor in any condition, unless applying an explicit velocity on that motor.
You can look at the behavior in the video attached:
https://drive.google.com/open?id=1aMHtX ... cRoP11DRlI
Can I control this behavior?
Thanks, bye
<?xml version="1.0"?>
<robot name="physics">
<link name="DOF_ArmRotate">
<visual>
<geometry>
<box size="0.42 0.11 0.22"/>
</geometry>
<origin rpy="0 0 0" xyz="0.21 0 0"/>
<material name="blue">
<color rgba="0 0 0.8 1"/>
</material>
</visual>
<collision>
<geometry>
<box size="0.42 0.11 0.22"/>
</geometry>
<origin rpy="0 0 0" xyz="0.21 0 0"/>
</collision>
<inertial>
<mass value="0"/>
<origin rpy="0 0 0" xyz="0.21 0 0 "/>
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
</inertial>
</link>
<link name="DOF_Snodo1">
<visual>
<geometry>
<box size="0.68 0.23 0.64"/>
</geometry>
<origin rpy="0 0 0" xyz="0.34 0 0.32"/>
<material name="white">
<color rgba="1 1 1 1"/>
</material>
</visual>
<collision>
<geometry>
<box size="0.68 0.23 0.64"/>
</geometry>
<origin rpy="0 0 0" xyz="0.34 0 0.32"/>
</collision>
<inertial>
<mass value="2"/>
<origin rpy="0 0 0" xyz="0.34 0 0.32"/>
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
</inertial>
</link>
<joint name="Rotate_White_Joint" type="revolute">
<axis xyz="0 1 0"/>
<limit effort="1000.0" lower="-0.785" upper="0.785" velocity="0.5"/>
<origin rpy="0 0 0" xyz="0.42 0.0 0.0"/>
<parent link="DOF_ArmRotate"/>
<child link="DOF_Snodo1"/>
</joint>
<link name="DOF_Snodo2">
<visual>
<geometry>
<box size="0.42 0.12 0.20"/>
</geometry>
<origin rpy="0 0 0" xyz="0.21 0 0.10"/>
<material name="red">
<color rgba="1 0 0 1"/>
</material>
</visual>
<collision>
<geometry>
<box size="0.42 0.12 0.20"/>
</geometry>
<origin rpy="0 0 0" xyz="0.21 0 0.10"/>
</collision>
<inertial>
<mass value="1"/>
<origin rpy="0 0 0" xyz="0.21 0 0.10"/>
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
</inertial>
</link>
<joint name="Rotate_Red_Joint" type="revolute">
<axis xyz="0 1 0"/>
<limit effort="1000.0" lower="-0.785" upper="0.785" velocity="0.5"/>
<origin rpy="0 0 0" xyz="0.68 0.0 0.64"/>
<parent link="DOF_Snodo1"/>
<child link="DOF_Snodo2"/>
</joint>
</robot>