0
$\begingroup$

Rosanswers logo

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 http://answers.ros.org/question/641/how-to-increase-move_arm-action-speed 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.


Originally posted by Dimitar Simeonov on ROS Answers with karma: 535 on 2011-04-25

Post score: 1

$\endgroup$

2 Answers 2

0
$\begingroup$

Rosanswers logo

(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.


Originally posted by Sachin Chitta with karma: 1304 on 2011-04-26

This answer was ACCEPTED on the original site

Post score: 2


Original comments

Comment by Dimitar Simeonov on 2011-04-26:
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.

$\endgroup$
0
$\begingroup$

Rosanswers logo

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 controller_manager.py (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 http://www.ros.org/wiki/roslaunch/Tutorials/Roslaunch%20tips%20for%20larger%20projects).


Originally posted by hsiao with karma: 741 on 2011-04-26

This answer was NOT ACCEPTED on the original site

Post score: 1

$\endgroup$

Your Answer

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