Robotics StackExchange | Archived questions

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.

image description

And here's the state of the controller manager:

image description

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

Comments

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