libgazebo_ros_control joints behaviour
Hello,
I am simulation an arm and i am using the libgazeboroscobntrol plugin for gazebo.
For the tranmssion acturators I use a tag like this
<transmission name="arm_joint_5_joint_transmssion">
<type>transmission_interface/SimpleTransmission</type>
<joint name="arm_joint_5">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="arm_joint_5_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
What I have noticed is that no matter the mu/mu2 and dampening values the actuator has a behaviour as if the gear is self-locking. Even if throw an object at it and unload the trajectory controller the arm will stay in the same position after bouncing a little bit.
I would like a behaviour that the arm gives in if it is not actuated. Is this possible?
BR
Asked by Eisenhorn on 2019-08-29 09:41:34 UTC
Answers
You want to use PositionJointInterface exactly when you need the arm to stay at the given position no matter what. Maybe consider using EffortJointInterface instead.
Asked by kumpakri on 2019-08-29 09:56:22 UTC
Comments
Ok, so that is intended behaviour. With the EffortJointInterface I could trigger the arm to collapse, but only if I unload the controller. Unfortunately thats not what I want. I would like to test the joint_tracetroy hold mode (see https://answers.ros.org/question/331016/joint_trajectory_controller-position-hold-mode/)
Asked by Eisenhorn on 2019-08-30 04:08:53 UTC
My experience with that plugin tells me that Position interface doesn't work very well with the laws of physics. Imagine if your robot instead of "moving" it makes micro teleports. It ignores the laws of physics. I tried that interface with a robotic arm, the robot moves perfectly but it cannot interact with other objects, even if they have minimum mass and infinite surface friction. With EffortJointInterfaces the arm can grab objects and move it around.
To interact with the world you need an EffortJointInterface for ALL the joints of your robot. The behavior you need (that the arm gives in if it is not actuated), needs to be made with a controller. You need a controller that listens the joints effort and "give in" when it has no actual objectives. I have no idea how you do that. But i believe its possible because i have seen colaborative robots with that kind of behavior, like UR5 for example.
Asked by Ricardo Pinto on 2020-11-04 11:23:28 UTC
Comments