objects_handler.cpp
Go to the documentation of this file.
1 
2 
3 #include <ros/ros.h>
4 #include <std_srvs/SetBool.h>
5 #include <geometry_msgs/PoseStamped.h>
6 #include <geometry_msgs/Pose.h>
7 #include <ar_track_alvar_msgs/AlvarMarkers.h>
9 #include <moveit_msgs/CollisionObject.h>
10 #include <iostream>
11 #include <sstream>
12 #include <kdl/chainfksolver.hpp>
13 #include <kdl/chain.hpp>
14 #include <kdl/chainjnttojacsolver.hpp>
15 #include <kdl/frames.hpp>
16 #include "kdl/chainfksolverpos_recursive.hpp"
18 
19 #include "tf_conversions/tf_kdl.h"
21 #include <tf/message_filter.h>
22 #include <tf/transform_datatypes.h>
23 #include <tf/transform_listener.h>
24 
25 
26 bool update_cb(std_srvs::SetBool::Request &req,std_srvs::SetBool::Response &res);
27 void handle_objects(const ar_track_alvar_msgs::AlvarMarkers::ConstPtr& markers);
28 std::string get_obj_id(int id);
29 shape_msgs::SolidPrimitive get_obj_shape(int id);
30 geometry_msgs::Pose get_obj_position(int id,geometry_msgs::Pose pose);
31 
32 bool update=false;
33 
34 
35 
37 
38 //listening to alvar msgs, that are sent througth find object node
39 
40 
41 int main(int argc, char **argv) {
42  ros::init(argc, argv, "objects_handler");
44  ros::NodeHandle pn("~");
45 
46  //TODO: READ OBJECTS DB
47  std::string db_path;
48  pn.param<std::string>("db_path", db_path, "??");
49 
50  ros::Subscriber ar_sub = n.subscribe("ar_pose_marker", 10, handle_objects);
51  ros::Subscriber color_sub = n.subscribe("detected_objects", 10, handle_objects);
52 
53  //
54  ros::ServiceServer service = n.advertiseService("update_collision_objects", update_cb);
55 
56 
58  planning_scene_interface_ptr=&planning_scene_interface;
59 
60 while (ros::ok()){
61  //TODO: RATE+TIMEOUT
62  //if (update) planning_scene_interface.removeCollisionObjects();
63 
64  ros::spinOnce();
65 }
66  return 0;
67 }
68 
69 std::string get_obj_id(int id) { //TODO: FROM DB
70 
71  /* std::ostringstream os;
72  os<<"object_";
73  os << id;
74  return os.str();
75  */
76  if (id==1) return "can";
77  else return "table";
78 
79 }
80 
81 shape_msgs::SolidPrimitive get_obj_shape(int id) { //TODO: FROM DB
82 
83 shape_msgs::SolidPrimitive object_primitive;
84 if (id==1) {
85 object_primitive.type = object_primitive.CYLINDER;
86 object_primitive.dimensions.resize(2);
87 object_primitive.dimensions[0] = 0.17;
88 object_primitive.dimensions[1] = 0.03;
89 }
90 else {
91  object_primitive.type = object_primitive.BOX;
92  object_primitive.dimensions.resize(3);
93  object_primitive.dimensions[0] = 0.3;
94  object_primitive.dimensions[1] = 0.3;
95  object_primitive.dimensions[2] = 0.01;
96 }
97  return object_primitive;
98 }
99 
100 geometry_msgs::Pose get_obj_position(int id,geometry_msgs::Pose pose){ //TODO: FROM DB
101 
102  //if (id==1) pose.position.x+=0.015;
103  return pose;
104  }
105 
106 void handle_objects(const ar_track_alvar_msgs::AlvarMarkers::ConstPtr& markers)
107 {
108  //build collisions for moveit
109  std::vector<moveit_msgs::CollisionObject> col_objects;
110 
111  for (int i=0;i<markers->markers.size();i++) {
112 
113  ar_track_alvar_msgs::AlvarMarker m=markers->markers[i];
114 
115  moveit_msgs::CollisionObject obj;
116  obj.header.frame_id = m.header.frame_id;
117  obj.id = get_obj_id(m.id);
118  obj.primitives.push_back(get_obj_shape(m.id));
119 
120  obj.primitive_poses.push_back(get_obj_position(m.id,m.pose.pose));
121  obj.operation=obj.ADD;
122 
123  col_objects.push_back(obj);
124 
125  if (update) planning_scene_interface_ptr->addCollisionObjects(col_objects);
126 
127  }
128 }
129 
130 
131 bool update_cb(std_srvs::SetBool::Request &req,
132  std_srvs::SetBool::Response &res) {
133 
134  update=req.data;
135  res.success=true;
136  if (update) res.message="update collision is ON";
137  else res.message="update collision is OFF";
138  return true;
139 }
bool update
shape_msgs::SolidPrimitive get_obj_shape(int id)
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
void addCollisionObjects(const std::vector< moveit_msgs::CollisionObject > &collision_objects, const std::vector< moveit_msgs::ObjectColor > &object_colors=std::vector< moveit_msgs::ObjectColor >()) const
ServiceServer advertiseService(const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T *obj)
geometry_msgs::Pose get_obj_position(int id, geometry_msgs::Pose pose)
int main(int argc, char **argv)
bool param(const std::string &param_name, T &param_val, const T &default_val) const
std::string get_obj_id(int id)
ROSCPP_DECL bool ok()
void handle_objects(const ar_track_alvar_msgs::AlvarMarkers::ConstPtr &markers)
moveit::planning_interface::PlanningSceneInterface * planning_scene_interface_ptr
bool update_cb(std_srvs::SetBool::Request &req, std_srvs::SetBool::Response &res)
ROSCPP_DECL void spinOnce()


robotican_common
Author(s):
autogenerated on Wed Jan 3 2018 03:48:33