Skip to content
Snippets Groups Projects
Select Git revision
  • 52f9d78ae445d1dda29b29e55d6390e95ebe2d7f
  • master default protected
  • noetic/main
  • feature/chem-feature-integration
  • feature/tests
5 results

grasp_service.cpp

Blame
  • grasp_service.cpp 2.25 KiB
    //
    // Created by sebastian on 13.05.20.
    //
    #include "ros/ros.h"
    #include <geometry_msgs/Pose.h>
    
    #include <moveit/planning_scene_interface/planning_scene_interface.h>
    #include <moveit/move_group_interface/move_group_interface.h>
    
    #include <tf2_geometry_msgs/tf2_geometry_msgs.h>
    
    #include "panda_grasping/PickObject.h"
    #include "panda_grasping/PlaceObject.h"
    #include "environment_util.h"
    
    
    bool pickObject(panda_grasping::PickObject::Request &req,
                           panda_grasping::PickObject::Response &res, ros::NodeHandle &n,
                           moveit::planning_interface::PlanningSceneInterface &planning_scene_interface,
                           moveit::planning_interface::MoveGroupInterface &group) {
    
        std::cout << "received new pick-request: " << req << std::endl;
    
        group.setPlanningTime(45.0);
    
        EnvironmentUtil env_util;
        std::vector<moveit_msgs::CollisionObject> collision_objects;
    
        ROS_INFO("Adding plate.");
        env_util.constructPlate(collision_objects, 3.0, 3.0);
    
        ROS_INFO("Adding support.");
        env_util.constructSupport(collision_objects, "pick_support", req.dimensions.x, req.dimensions.y, req.dimensions.z, req.pose);
    
        ROS_INFO("Applying to scene.");
        planning_scene_interface.applyCollisionObjects(collision_objects);
    
        res.success = true;
        return true;
    }
    
    bool placeObject(panda_grasping::PlaceObject::Request &req,
                           panda_grasping::PlaceObject::Response &res) {
    
        std::cout << "received: " << req << std::endl;
        return true;
    }
    
    
    int main(int argc, char **argv) {
    
        ros::init(argc, argv, "grasp_service");
        ros::NodeHandle n("panda_grasping");
       // ros::AsyncSpinner spinner(2);
       // spinner.start();
    
        moveit::planning_interface::PlanningSceneInterface planning_scene_interface;
        moveit::planning_interface::MoveGroupInterface group("panda_arm");
    
        ros::ServiceServer pick_object_service = n.advertiseService<panda_grasping::PickObject::Request, panda_grasping::PickObject::Response>("PickObjectService",
                boost::bind(&pickObject, _1, _2, boost::ref(n), boost::ref(planning_scene_interface), boost::ref(group)));
    
        //ros::ServiceServer place_object_service = n.advertiseService("PlaceObjectService", placeObject);
    
        ROS_INFO("Ready to grasp.");
        ros::spin();
    
        return 0;
    }