ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

What is the difference between acceleration and effort? [closed]

asked 2015-09-01 20:58:52 -0500

sloretz gravatar image

updated 2015-09-01 20:59:39 -0500

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.

edit retag flag offensive reopen merge delete

Closed for the following reason the question is answered, right answer was accepted by sloretz
close date 2015-09-02 09:05:21.099485

1 Answer

Sort by ยป oldest newest most voted

answered 2015-09-02 03:25:44 -0500

JuliusGel gravatar image

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.

edit flag offensive delete link more


That explains a lot. Thanks! I'll work on tuning the motor controller instead.

sloretz gravatar image sloretz  ( 2015-09-02 09:04:43 -0500 )edit

Question Tools



Asked: 2015-09-01 20:58:52 -0500

Seen: 2,124 times

Last updated: Sep 02 '15