## repository: https://code.ros.org/svn/wg-ros-pkg
<<PackageHeader(articulate_cart)>>
<<TOC(4)>>

This package contains two main ROS nodes and two supporting scripts..
 
== articulate_cart_server.py ==

This is the main node for performing articulation of a cart using both arms on the PR2.

=== Subscribed topics ===

`cart_pushing/ready_pose_achieved` (<<MsgLink(roslib/Header)>>)
  Once the base achieves a ready pose, in which the robot's arms are in the position corresponding to the cart being at its initial position, with grippers open, a message will be sent on this topic (at a fixed rate).

`~command_twist` (<<MsgLink(geometry_msgs/TwistStamped)>>)
  The desired twist for the reference point on the cart, relative to the `base_footprint` frame
  
=== Published topics ===

`/r_cart/command_pose`, `/l_cart/command_pose` (<<MsgLink(geometry_msgs/PoseStamped)>>)
  Desired poses for the left and right gripper tool frames are sent on these topics
`/r_cart/command_posture`, `/l_cart/command_posture` (<<MsgLink(std_msg/Float64MultiArray)>>)
  Since there is a degree of freedom remaining in the arm after specifying the gripper pose, we send a desired posture on this topic
`invalid_pose` (<<MsgLink(std_msgs/Empty)>>)
  This is a debugging topic, on which a message is sent on this topic whenever a pose is requested that is outside the workspace bounds for the cart

=== Expected services ===

`manipulation_transforms_server/LoadInitialTransforms` (<<SrvLink(manipulation_transforms/LoadInitialTransforms)>>)
  Used to tell the manipulation transforms server that the current pose is the one at which the cart is at its initial position
`manipulation_transforms_server/MapObjectPoseToEffectors` (<<SrvLink(manipulation_transforms/MapObjectPoseToEffectors)>>)
  Used to get the effector poses corresponding to a desired cart pose

=== TF frames used ===

`base_footprint` 
  Used as the base position and the reference for the cart
`l_gripper_tool_frame`, `r_gripper_tool_frame`
  Used as the locations of the grippers

=== Command line parameters ===

`-g` 
  If specified, the initial pose of the robot (once the `ready_pose_achieved` message is received) is used as the reference position.  If not, the reference position is read from the parameter server.  

=== ROS parameters ===

`cart_pushing/{x,y,t}_{min,max}`
  Workspace bounds for the cart pose
`cart_pushing/init_pose/position`
  The initial position of the cart relative to the base; specified as `[x, y, z]`
`cart_pushing/init_pose/orientation`
  The initial orientation of the cart relative to the base; specified as `[x, y, z, w]`


== fake_articulate_cart_server.py ==

This is for use in simulators in which gripper frames are not available.  It provides the interface of `articulate_cart_server.py`.  Additionally, it publishes transforms between `base_footprint` and `l_gripper_tool_frame`/`r_gripper_tool_frame` corresponding to the commands it receives on `~command_twist`.

== close_grippers.py ==

Once a message is received on `move_base/goal`, keeps the grippers closed by sending commands to `{l,r}_gripper_controller/gripper_action`.

== switch_controllers.py ==

Once a message is received on `cart_pushing/ready_pose_achieved`, disables the `{l,r}_arm_controller` controllers and enables `{l,r}_cart`.  Switches the controllers back before exiting.


## AUTOGENERATED DON'T DELETE
## CategoryPackage