ros_control behaves differently for continuous joint robot between hydro and indigo
I am trying to upgrade from ros hydro to ros indigo; and everything has been going fine aside from ros_control
. It seems there has been some change that breaks the velocity trajectory controller for my continuous joint robot. The velocity controller seems to go the wrong direction when trying to execute a simple trajectory. I have verified that the problem does not exist in hydro by setting my ros master to an external machine that is running ros_control
in hydro, and sending the command from my indigo machine.
Here's a screenshot of the joint errors reported by the joint_trajectory_controller
shooting off. For joint 3, you see desired and actual starting out the same, then a small control error of ~0.3 is applied to make it follow a trajectory. The controller just shoots off to infinity. Note the same controller works in hydro
, but not in indigo
.
And here's the state of the controller manager:
I tried downgrading my ros_control
, and ros_controllers
to the versions found in the ros-hydro-ros-control
debian, but this did not fix the issue. I had to build these from source, and it required changing the urdfdom
version referenced by ros_control
to the one locally installed by indigo (which could be a clue).
Here are the contents of my URDF.
Has anything changed in the parsing of URDF
files, or in joint_trajectory_controller
that might have caused this issue?
Asked by mklingen on 2015-03-13 12:17:49 UTC
Answers
check the usage for the transmission elements in Indigo I had to make changes to something like the following when I went to Indigo.
<transmission name="tran2">
<type>transmission_interface/SimpleTransmission</type>
<joint name="joint2">
<hardwareInterface>EffortJointInterface</hardwareInterface>
</joint>
<actuator name="motor2">
<mechanicalReduction>1</mechanicalReduction>
<motorTorqueConstant>10</motorTorqueConstant>
</actuator>
</transmission>
Asked by rnunziata on 2015-03-13 21:54:11 UTC
Comments
Are transmissions now required? As in, you added a transmission interface where there wasn't one before?
Asked by mklingen on 2015-03-16 09:08:02 UTC
no....the format changed. The hardwareInterface is now directly under the joint element. But please validate this with the documentation. http://wiki.ros.org/urdf/XML/Transmission. I am also running in simulation on Gazebo. This may or may not solve your problem...good luck.
Asked by rnunziata on 2015-03-16 10:50:14 UTC
Thank you. I updated my URDF to contain this, but unfortunately it did not help. The issue appears to be something along the lines of, the robot will oscillate around the target, the oscillations get bigger and bigger, rather than smaller and smaller. It's almost like the goal conditions are wrong.
Asked by mklingen on 2015-03-16 11:46:39 UTC
What are you setting for trajectory planner
# Goal tolerance parameters in meters (lower means closer and harder/slower to achieve)
# Check: stay outside footprint
yaw_goal_tolerance: 0.3
xy_goal_tolerance: 0.4
latch_xy_goal_tolerance: false # do not rotate on finding goal
Asked by rnunziata on 2015-03-16 11:58:32 UTC
I am not using MoveIt to construct trajectories. I am sending a hard-coded trajectory message. The problem isn't in trajectory construction but in controlling the robot.
Asked by mklingen on 2015-03-16 13:05:21 UTC
Comments