This package functions as a helper to the package for interactive segmentation of textured objects. It uses Gazebo simulations to analyze the relationship between the contact point for a push sequence and the success of the push. In the simulation, a group of objects are pushed at by the PR2 gripper starting at several points along the bounding box of the objects. The duration of each push, length of the push sequence, velocity of the gripper, friction between objects, friction between an object and the table, etc. can all be set to desired values. A push sequence is considered successful if it results in segmenting all the objects accurately. You can visualize the successful contact points and the push directions in RViz.
You need to install ROS Fuerte with Gazebo.
$ svn co https://sourceforge.net/p/bosch-ros-pkg/code/1634/tree/trunk/stacks/bosch_interactive_segmentation/contact_point_estimation/
For setting up the environment you need to modify the gazebo plugin parameters in the worlds/empty.world and models/gripper.sdf files. After setting the parameters the simulation can be started running the following from the terminal:
$ roslaunch contact_point_estimation empty_world.launch
This will create a log file 'gripper_log.txt' containing all simulation parameters as well as the logged object and gripper poses after every push. The PushEvaluator node can now use this log file to evaluate how successful any push was.
$ rosrun contact_point_estimation push_evaluator gripper_log.txt
In the empty.world file starting from line 60 we have a plugin that loads parameters in order to spawn up to 4 objects (cylinder or box) of a given size at a given position in the world.
<mu1> and <mu2> are friction coefficients. e.g <mu1>1</mu1>
<typeNr> can be 'box' or 'cylinder'. e.g <type1>box</type1>
<xyzNr> gives positions of the object. e.g <xyz1>-0.08 0.09 0.1</xyz1>
<RPYNr> gives rotation of the object. e.g <RPY1>1.57 0.0 0.0</RPY1>
<sizeNr> gives the size of the object. e.g <size1>0.2 0.1 0.1</size1>
where 'Nr' is the number of the object (1 - 4)
In the gripper.sdf file starting from line 327 the the gripper plugin starts. Which also has a number of parameters which influence the simulation.
<filePath> path where the log file will be saved e.g. '/home/user/ros/gripper_log.txt'
<contact_check_time> number of seconds after which if no contact was found the gripper jumps to the next pose, and resets the objects position
<total_push_nr> number of pushes
<angle> the angle differences between poses
<pose_step_size> linear differences between poses on the bounding box lines
<gripper_height> height of the gripper position
<updateRate> gazebo plugin update rate (calculating lin/rot velocities)
<posUpdateRate> update rate of the new desired pose on the grippers moving direction (that is given to the PID, and returnes the lin/rot velocities)
<pushRate> duration of each push
<PIDStepSize> a damping value so the desired position doesn't grow very fast
<PIDValues> the P, I, D values for the controller