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

how to decrease move_arm speed during execution

asked 2011-04-25 07:30:12 -0600

updated 2011-04-26 16:56:29 -0600

When I tell the PR2 to perform some tabletop manipulation, it moves its arm to the side very fast - beyond the speed I consider safe.

I looked at the info here which describes how to set up the joint limits ( through a global YAML file )

However, I'm sharing the use of the robot with a lot of people and would not like to mess with the global config file. Is there any way to set these joint limits during execution? Maybe through a ROS message or setting a constant in the ROS Core?

Also, any ideas of what are good joint limits will be really appreciated.

The safety speed I'm looking for is for handling household objects.

Edit: I am using a high-level function for moving the arm. From pr2_pick_and_place_demo the python class PickAndPlaceManager (papm) I am using papm.move_arm_to_side(). Some people in the lab mentioned that this looks like a zero-time movement - the robot is trying to move the arm as fast as it can, moving the object too fast. I'd prefer not to mess with the internals of that for portability reasons.

edit retag flag offensive close merge delete

3 Answers

Sort by ยป oldest newest most voted

answered 2011-04-26 12:25:02 -0600

Sachin Chitta gravatar image

(1) If you want a separate set of limits for your work, the best option might be to overlay the appropriate package locally and change the limits in the file there. This way, you will not be affecting anyone else. (2) The trajectory filter server currently is setup in the following manner: (a) use the limits from the urdf (b) overwrite these limits with any limits that might exist on the param server. It reads in the limits only once on startup currently and caches them internally. If (1) above does not satisfy your use case, we can implement the interface that lets you specify the parameters separately for every request. Please open a ticket against me - the interface exists but was not implemented fully.

edit flag offensive delete link more


Thanks a lot, Sachin, I don't think (1) will work for my case in the long run - (2) seems much more convenient. Do you think I can set these parameters in a launch file? I updated my question to explain the specific function that I am calling.
Dimitar Simeonov gravatar image Dimitar Simeonov  ( 2011-04-26 17:02:07 -0600 )edit

answered 2011-04-26 17:20:06 -0600

hsiao gravatar image

If you're using the PickAndPlaceManager's move_arm_to_side function, it tries to use move_arm first, which would use the limits Sachin described. It also, however, currently moves open-loop if move_arm fails, which, if you're concerned about safety, you probably really don't want to do. (The speed in that case is based on the default in the function 'command_joint_trajectory' in (in pr2_gripper_reactive_approach/src/pr2_gripper_reactive_approach), which sets the trajectory times and velocities based on a max joint velocity of 0.2 m/s.) I would suggest writing your own move_arm_to_side function (if you want everything else in the PickAndPlaceManager, just inherit from it and overload that function) and setting the trajectory filter limits on the param server (look at

edit flag offensive delete link more

answered 2011-04-25 09:36:22 -0600

pbrook gravatar image

Depending on how you are telling the arm to move, you could increase the duration of the movement. The JointTrajectoryPoint message has options for specifying the desired velocities, as well as the time_from_start parameter to control how long the path motion will take.

edit flag offensive delete link more

Question Tools


Asked: 2011-04-25 07:30:12 -0600

Seen: 342 times

Last updated: Apr 26 '11