Rosanswers logo

In ros_control what is "effort"? How is it different from acceleration? Can I use a value meant to be acceleration in place of effort?

For context I'm using moveit and ros_control with a stepper motor controller that moves the joint given a target position, a maximum velocity, and an acceleration. The controller accelerates the joint up to the given max velocity, travels a bit, and then decelerates until it stops at the target position.

I currently am using joint_trajectory_controller with just a PositionJointInterface, but the arm is very poor at travelling along a cartesian path. The end effector deviates from the path by several centimeters (it's a small arm about 15cm in length) My hope is that if I specify a PositionJointInterface, VelocityJointInterface, and EffortJointInterface (using acceleration) for each joint with joint_trajectory_controller I'll see the end-effector follow a cartesian path more closely.

Originally posted by sloretz on ROS Answers with karma: 3061 on 2015-09-01

Post score: 1


1 Answer 1


Rosanswers logo

Effort is the type of control of your joints where the commands that you specify for your joint are for example voltage or power. For example you could have a power controlled joint where the controller of joint motor can receive commands from 0 to 1000 (when controller receives 0 the motor would not move and when controller receives 1000 the motor of that joint would move at its maximal power).

If you had a stepper motor controller that can be only controlled using effort you would then need to specify a EffortJointInterface and the joint_trajectory_controller would internally run a PID loop to control the position of your joints using effort. Your case is different you already have a stepper controller that can be controlled using target position. You therefore have a PositionJointInterface and in this case the joint_trajectory_controller only works by forwarding the target positions directly to stepper motor controller. You can read more about different modes of joint_trajectory_controller here.

So specifying the VelocityJointInterface and EffortJointInterface in your case does not make sense.

Now in terms of trying to improve the cartesian path there are several things you could try doing. First would be to try tweaking the parameters of the stepper motor controller. This is highly dependent on the actual motor controller that you have. If this controller has a PID loop internaly you might have to tweak PID parameters etc.

Originally posted by JuliusGel with karma: 433 on 2015-09-02

This answer was ACCEPTED on the original site

Post score: 6

Original comments

Comment by sloretz on 2015-09-02:
That explains a lot. Thanks! I'll work on tuning the motor controller instead.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.