3 #include <std_srvs/SetBool.h> 5 #include <std_msgs/String.h> 6 #include <move_base_msgs/MoveBaseAction.h> 7 #include <geometry_msgs/PointStamped.h> 8 #include <std_srvs/Trigger.h> 19 bool base_cmd(move_base_msgs::MoveBaseGoal goal);
31 move_base_msgs::MoveBaseGoal goal;
48 double yaw=atan2(v.
y(),v.
x());
67 goal.target_pose.header.frame_id =
"map";
69 goal.target_pose.pose.position.x=dest_transform.
getOrigin().
x();
70 goal.target_pose.pose.position.y=dest_transform.
getOrigin().
y();
71 goal.target_pose.pose.position.z=0;
72 goal.target_pose.pose.orientation.x=dest_transform.
getRotation().x();
73 goal.target_pose.pose.orientation.y=dest_transform.
getRotation().y();
74 goal.target_pose.pose.orientation.z=dest_transform.
getRotation().z();
75 goal.target_pose.pose.orientation.w=dest_transform.
getRotation().w();
82 std_srvs::Trigger::Response &res)
88 std_srvs::SetBool srv;
90 std::vector<std::string> ids;
92 std::map<std::string, moveit_msgs::CollisionObject> poses=planning_scene_interface_ptr->
getObjects(ids);
93 std::map<std::string, moveit_msgs::CollisionObject>::iterator it;
97 if (it != poses.end()) {
98 moveit_msgs::CollisionObject obj=it->second;
102 move_base_msgs::MoveBaseGoal goal=
get_pre_pick_pose(obj.primitive_poses[0].position);
106 srv.request.data=
false;
111 res.message=
"Reached pre-picking position";
116 res.message=
"move_base failed";
120 srv.request.data=
true;
126 res.message=
"No object found";
128 srv.request.data=
true;
155 int main(
int argc,
char **argv) {
157 ros::init(argc, argv,
"drive2object_node");
168 ROS_INFO(
"Waiting for the move_base action server to come up");
171 moveBaseClient_ptr=&moveBaseClient;
177 listener_ptr=&listener;
180 planning_scene_interface_ptr=&planning_scene_interface;
183 ROS_INFO(
"Waiting for update_collision service...");
185 ROS_INFO(
"Ready! run: 'rosservice call /drive2object_go' to initiate");
186 std_srvs::SetBool srv;
187 srv.request.data=
true;
ServiceClient serviceClient(const std::string &service_name, bool persistent=false, const M_string &header_values=M_string())
move_base_msgs::MoveBaseGoal get_pre_pick_pose()
actionlib::SimpleActionClient< move_base_msgs::MoveBaseAction > MoveBaseClient
bool waitForResult(const ros::Duration &timeout=ros::Duration(0, 0))
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
bool call(MReq &req, MRes &res)
ROSCPP_DECL const std::string & getName()
std::map< std::string, moveit_msgs::CollisionObject > getObjects(const std::vector< std::string > &object_ids=std::vector< std::string >())
ServiceServer advertiseService(const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T *obj)
ROSCPP_DECL void spin(Spinner &spinner)
bool drive_go_cb(std_srvs::Trigger::Request &req, std_srvs::Trigger::Response &res)
bool base_cmd(move_base_msgs::MoveBaseGoal goal)
TFSIMD_FORCE_INLINE const tfScalar & x() const
bool waitForExistence(ros::Duration timeout=ros::Duration(-1))
void setRPY(const tfScalar &roll, const tfScalar &pitch, const tfScalar &yaw)
bool param(const std::string ¶m_name, T ¶m_val, const T &default_val) const
TFSIMD_FORCE_INLINE const tfScalar & y() const
double base_distance_from_object
MoveBaseClient * moveBaseClient_ptr
tf::TransformListener * listener_ptr
void sendGoal(const Goal &goal, SimpleDoneCallback done_cb=SimpleDoneCallback(), SimpleActiveCallback active_cb=SimpleActiveCallback(), SimpleFeedbackCallback feedback_cb=SimpleFeedbackCallback())
SimpleClientGoalState getState() const
moveit::planning_interface::PlanningSceneInterface * planning_scene_interface_ptr
int main(int argc, char **argv)