Random effort peaks added between Trajectory controller and Hardware Interface

asked 2019-07-31 04:02:24 -0500

bvaningen gravatar image

updated 2019-07-31 04:25:36 -0500

We are controlling a physical electro mechanical joint with an effort_controllers/JointTrajectoryController. For safety we are using the joint_limits_interface::EffortJointSoftLimitsInterface. Using ROS kinetic, ROS control and ubuntu 16.04.

When the joint is experiencing a high load, the joint began to tick. We deduced that some very high effort commands are sent towards our motorcontroller. However the output of the effort trajectory controller does not reflect these high effort commands. The situation is visualized in the plot shown below.

As can be seen in the image:

  • upper left = output of the controller. Note: the controller output unit on the y-axis is 1000 effort units, where as the other plots are 1 effort unit.
  • upper right = the commands before the limits
  • lower left = commands after the limits
  • lower right = effort that is produced by our motor controller

From the image can be seen that between the output of the controller and somewhere before the limits, large negative effort peaks occur.

image description

We suspect that there is a discrepancy between the reading and the writing of the memory location of the respective effort command. This is therefore between the command write by the trajectory controller and the command read by the hardware interface. We have not yet found a way to prove or prevent it.

What ways are there to debug such a problem and prevent the effort peaks?

edit retag flag offensive close merge delete