## For instruction on writing tutorials
## http://www.ros.org/wiki/WritingTutorials
####################################
##FILL ME IN
####################################
## for a custom note with links:
## note = This tutorial assumes you already understand the [[pr2_robot/Tutorials/Diagnostics|PR2 diagnostics system]]
## for the canned note of "This tutorial assumes that you have completed the previous tutorials:" just add the links 
## note.0= 
## descriptive title for the tutorial
## title = PR2 safety system
## multi-line description to be displayed in search 
## description = This tutorial teaches you about the PR2 safety system.
## the next tutorial description (optional)
## next =
## links to next tutorial (optional)
## next.0.link=[[pr2_robot/Tutorials/Logging system|Understanding the PR2 logger]]
## next.1.link=
## what level user is this tutorial for 
## level= BeginnerCategory
## keywords =
####################################

<<IncludeCSTemplate(TutorialCSHeaderTemplate)>>

<<TableOfContents(4)>>


=== Safety limits ===

'''Position limits'''

To get a good feel of the position limits, you want to turn off on of the controllers that are controlling the arms. The dashboard will give you a list of controllers in the "Realtime Controllers" tab:
<<BR>> <<BR>>
 {{http://www.ros.org/wiki/pr2_robot/Tutorials/Safety%20system?action=AttachFile&do=get&target=controllers.png}}
<<BR>><<BR>>
You can also get access to the same list on the command line:
{{{
 $ rosrun pr2_controller_manager pr2_controller_manager list
}}}
{{{
  base_controller ( running )
  base_odometry ( running )
  head_camera_trigger ( running )
  head_traj_controller ( running )
  l_arm_controller ( running )
  l_forearm_cam_trigger ( running )
  l_gripper_controller ( running )
  laser_tilt_controller ( running )
  projector_controller ( running )
  projector_trigger ( running )
  prosilica_inhibit_projector_controller ( running )
  r_arm_controller ( running )
  r_forearm_cam_trigger ( running )
  r_gripper_controller ( running )
  torso_controller ( running )
}}}

To stop the right arm controller, type:
{{{
 $ rosrun pr2_controller_manager pr2_controller_manager stop r_arm_controller
}}}
Now you'll see that the right arm is not controlled any more. Move it manually towards the end of its reach. You'll feel a "spring" close to its joint limits. That spring force is created by the software safety controllers, that prevent the arm from hitting the hardware joint limits.


To start the right arm controller up again, use:
{{{
 $ rosrun pr2_controller_manager pr2_controller_manager start r_arm_controller
}}}

## AUTOGENERATED DO NOT DELETE 
## TutorialCategory
## FILL IN THE STACK TUTORIAL CATEGORY HERE