- Follow the setup instructions for HLPR repositories. If you have the workspace setup, make sure you pull the latest version of
hlpr_manipulation,hlpr_simulatorandrail_manipulation_msgs(NOTE: there have been some recent changes!!). - Follow the setup instructions for Pick and Place.
- Clone robotiq_gripper_actions in your workspace.
- To get segmented object transforms in map frame instead of base frame (useful for if you move your base after segmentation call), set
segmentation_frame_id: "map"in the filerail_segmentation/config/zones.yaml. WARNING: Dont do this if you are not adjusting base after search state. - For the map, copy the two map files named
simulation_roomin themapfolder to the folder<catkin_ws_path>/src/vector_v1/vector_common/vector_navigation/vector_navigation_apps/maps/and then edit the parameterimageinsimulation_room.yamlto<catkin_ws_path>/src/vector_v1/vector_common/vector_navigation/vector_navigation_apps/maps/simulation_room.pgm. Alternatively, you can create a new map by following the instructions in Vector Navigation. - For simulation, Clone the
hlpr_nri_demopackage in your workspace. This is in develop stage, so make sure you have the latest version. - For simulation (segmentation), set the point_cloud_topic in
rail_segmentation/src/Segmenter.cppto/kinect/depth_registered/points - For simulation (octomap), set the point_cloud_topic in
hlpr_manipulation/hlpr_wpi_jaco_moveit_config/config/sensors_kinect.yamlto/kinect/depth_registered/points - For simulation, set
moveit_launch,wpi_jaco_launch,use_wpi_jaco_exectotrueinhlpr_nri_demo/launch/vector_ycb.launch. If you want manipulation to integrate kinect output, setuse_octomaptotrueas well. - For actual robot, clone the
hlpr_nri_demo_robotpackage in your workspace. This is in develop stage, so make sure you have the latest version. - For actual robot (segmentation), set the point_cloud_topic in
rail_segmentation/src/Segmenter.cppto/kinect/qhd/points - For actual robot (octomap), set the point_cloud_topic in
hlpr_manipulation/hlpr_wpi_jaco_moveit_config/config/sensors_kinect.yamlto/kinect/qhd/points - For acutal robot (correction), setup HLPR Speech
- For actual robot (correction), setup HLPR Kinesthetic Teaching
- Do
catkin_makeand sourcedevel/setup.bash.
- For simulation,
roslaunch hlpr_nri_demo vector_ycb.launch. (Note: before running this, comment/uncomment the objects you want to spawn in the filehlpr_nri_demo/launch/spawn_ycb.launch). - For simulation, If you dont see all the objects on the table, delete the object model from gazebo and do
roslaunch hlpr_nri_demo spawn_ycb.launch. roslaunch vector_remote_teleop vector_remote_teleop.launch.rosrun rail_segmentation rail_segmentation.- (Optional: to see object recognition output)
roslaunch rail_recognition rail_recognition_listener.launch. roslaunch rail_pick_and_place_tools rail_pick_and_place_backend.launch.roslaunch rail_pick_and_place_tools rail_pick_and_place_frontend.launch.- Now train it on the objects you want to pick in the demo. Follow the instructions in Pick and Place tutorials for this.
roslaunch hlpr_nri_demo vector_ycb.launch.- If you dont see all the objects on the table, delete the object model from gazebo and do
roslaunch hlpr_nri_demo spawn_ycb.launch. rosrun rail_segmentation rail_segmentation.roslaunch rail_recognition object_recognition_listener.launch.roslaunch hlpr_nri_demo gripper_actions_launcher.launch.rosrun hlpr_manipulation_actions hlpr_moveit_wrapper.rosrun hlpr_manipulation_actions common_actions.rosrun hlpr_manipulation_actions primitive_actions.roslaunch vector_viz view_robot.launch function:=map_nav.roslaunch vector_navigation_apps 2d_map_nav_demo.launch map_file:=simulation_room sim:=true.- Give a 2d pose estimate using RVIZ. The robot will localize by driving in a circle. (Your FSM later would get stuck while waiting for move_base action client if you dont do this)
rosrun hlpr_nri_demo fsm_main.py
- Sometimes the controller fails in executing a plan for no apparent reason. Might be a simulation thing only.
- The octomap integration in simulator and
recognizedObjectsCallbackinhlpr_moveit_wrappercauses collision detection with the object and the table. Hence, the grasp fails if its near any of these two these. Look more into this. Temporary cure, switch off octomap and recognizeObjectCallback. - The object slips out of the gripper in simulation even if the grasp is on the centroid. This does not happen on the actual robot.
- Error while calling IK. The number of joint positions and names in different in JointState message. Does not effect anything.
grasp_frametoodomlookup error. Does not effect anything.
- Time extrapolation error in
CommonActions::executePickupwhile looking up tranform frombase_linktograsp_frame. This happens because IK call fails since the transform forgrasp_frameis not being published when IK service is called to move toapproachAnglePose. Resolved by transforming theapproachAnglePoseback tobase_linkbefore IK call. HlprMoveitWrapper::moveToJointPosedid not work as expected in simulation. This is because the publishedjoint_statesin simulation are in a different order than the actual robot. Fixed by explicitly indexing each Joint.HlpMoveitWrapper::moveToPose, joint_names not consistent with the vector. Fixed, NOT PUSHED YET!- Arm motion planning failure is its too far from the object. Solved by adding another states which moves the base at a fixed distance to the object. WARNING: Table collision hasnt been taken care of here, but OCTOMAP might help? This can fail if the object is too far on the table.
- Unable to find object if the base is too close. Solved by searching at a distance from the table (to increase the search area) and then moving closer once the object is found.
- Changed
longest_valid_segment_fractionfrom0.05to0.02in/hlpr_wpi_jaco_moveit_config/config/ompl_planning.yaml. Reason: unknown :P hlpr_moveit_wrappersometimes prints "Timeout reached, stopping trajectory execution". This does not really effect anything, so dont worry about it. Solution, changed timeout in CartesionPathCallback from1.5to5.0.hlpr_moveit_wrapper/cartesian_paththrows the error "Lookup would require extrapolation into the past" when it plans a longer path (which may collide with table) to the object. This causes failure of "Motion Planning". Solution, added a tf.waitforTransform inHlprMoveitWrapper::cartesianPathCallback.- The
HlprMoveitWarpper::prepareGraspdid not work as expected. That is, the allowed collision matrix did not really allow collision with the object to be grasped. Solution, gripper names inhlpr_moveit_wrapperwere not consistent with vector. Added the prefixright_.
- ssh in to the robot, run
roslaunch wpi_jaco_wrapper arm.launch - On the local machine, run
roslaunch hlpr_wpi_jaco_moveit_config hlpr_wpi_jaco_simple_moveit.launch roslaunch vector_remote_teleop vector_remote_teleop.launch- For navigation,
roslaunch vector_viz view_robot.launch function:=map_nav - For navigation,
roslaunch vector_navigation_apps 2d_map_nav_demo.launch map_file:=rail_lab3(give a 2D pose estimate to localize) - For pick_place and hlpr_manipulation,
roslaunch hlpr_nri_demo_robot demo_bringup.launch - For GC mode,
roslaunch hlpr_speech_recognition speech_rec.launch - For GC mode,
roslaunch hlpr_kinesthetic_interaction basic_kinesthetic_interaction.launch - For pick_place training,
roslaunch rail_pick_and_place_tools rail_pick_and_place_backend.launch - For pick_place training,
roslaunch rail_pick_and_place_tools rail_pick_and_place_frontend.launch rosrun hlpr_nri_demo fsm_with_navigation.py(Make sure to set the correct table and person pose in navigation_states.py)
(NOTE: Simulation issues apply to actual robot as well)
- Motion Planning fails if the object is not placed in the right place. This might be just due to arm structure itself.
- CommonAction sometimes outputs exceeded maximum threshold for execution. Does not seem to effect anything.
- Recgnizes the object at random places in the presence of noise. Might be fixed by defining a search boundary.
- Navigation is jerky. Getting rid of it for now.
- Training should not be dependent on the user interface.
- Add speech
- Train robustly on a bunch of other objects. New objects.
-
Octomap has a lot of noise. motion planning fails way too often. Fix, switched octomap topic to
/kinect/qhd/points insteadof/kinect/sd/points -
Motion planning fails while moving to tuck position. Fix, upperTuck position works fine.
-
Motion planning fails while moving to aprroachAnglePose. Less noise now so probably works.
-
Time extrapolation error in CartesianPathCallback might be solved with ros::Time(0) instead of ros::Time::now. Needs to be checked.
-
Motion is very slow sometimes even when the plan is there. Increase time out?
-
Centroid pick up is a bit off
-
RGB and depth for
kinect/qhd/pointsandkinect/hd/pointsare offset, need calibration!. Update: Calibration done. calib_path was not setup correctly. Changed the calib_path in vector2.launch in vector1 to point to the correct folder while looking for files on vector2. Calibration has also improved segmentation results. TODO: upload the calibration parameters somewhere on the repo. -
PointCloud and URDF offset. Update: Found that the pan_base_link transform wrt base_chassis_link was not correct. Changed $KINECT_PAN_TILT_XYZ in vector_config/vector_config.sh after trail and error. Current parameter values: KINECT_PAN_TILT_XYZ="0.17888476 0 1.00505" KINECT_PAN_TILT_RPY="0 0 0"
-
The robot would collide with the object while moving to the approachAnglePose. Fixed by moving the approachAnglePose further up (changes -0.05 to -0.1 in CommonActions::executePickup)