1 #include <move_base_msgs/MoveBaseAction.h> 4 #include <multipoint_navigation_receiver/obstacle_srv.h> 5 #include <multipoint_navigation_receiver/set_goal_srv.h> 23 bool goalsCB(multipoint_navigation_receiver::set_goal_srv::Request &req,multipoint_navigation_receiver::set_goal_srv::Response &res)
25 if (req.positions.size() == 0)
37 res.result =
"cancel received";
40 queue<move_base_msgs::MoveBaseGoal>* goals =
new queue<move_base_msgs::MoveBaseGoal>();
41 for (
size_t i = 0; i < req.positions.size(); i++)
43 move_base_msgs::MoveBaseGoal goal;
44 goal.target_pose.header.frame_id =
"map";
45 goal.target_pose.pose.position.x = req.positions[i].x;
46 goal.target_pose.pose.position.y = req.positions[i].y;
47 goal.target_pose.pose.position.z = req.positions[i].z;
48 goal.target_pose.pose.orientation.x = req.quaternions[i].x;
49 goal.target_pose.pose.orientation.y = req.quaternions[i].y;
50 goal.target_pose.pose.orientation.z = req.quaternions[i].z;
51 goal.target_pose.pose.orientation.w = req.quaternions[i].w;
52 ROS_INFO(
"mapdata:px=%lf,py=%lf,pz=%lf,qx=%lf,qy=%lf,pz=%lf,pw=%lf",goal.target_pose.pose.position.x,goal.target_pose.pose.position.y,goal.target_pose.pose.position.z,
53 goal.target_pose.pose.orientation.x,goal.target_pose.pose.orientation.y,goal.target_pose.pose.orientation.z,goal.target_pose.pose.orientation.w);
56 res.result =
"goals received";
72 int main(
int argc,
char** argv)
75 ros::init(argc, argv,
"multipoint_navigation_receiver");
80 client =
new Client(
"move_base",
true);
89 queue<move_base_msgs::MoveBaseGoal>* goals;
90 goals =(queue<move_base_msgs::MoveBaseGoal>*) data;
101 multipoint_navigation_receiver::obstacle_srv obstacle;
102 obstacle.request.positionx = goals->front().target_pose.pose.position.x;
103 obstacle.request.positiony = goals->front().target_pose.pose.position.y;
104 obstacle_client.
call(obstacle);
105 int8_t obstacle_probability = obstacle.response.obstacle_probability;
106 printf(
"obstacle is %d \n",obstacle_probability);
107 if(obstacle_probability > 0)
109 printf(
"Goal have obatacle! \n");
114 printf(
"You got all goals \n");
122 printf(
"Timed out achieving goal, go next \n");
124 else if(obstacle_probability == 0)
128 printf(
"You resent one goal\n");
136 printf(
"Yay! One goal OK!\n");
140 printf(
"You got all goals\n");
154 printf(
"You resent one goal\n");
ServiceClient serviceClient(const std::string &service_name, bool persistent=false, const M_string &header_values=M_string())
bool goalsCB(multipoint_navigation_receiver::set_goal_srv::Request &req, multipoint_navigation_receiver::set_goal_srv::Response &res)
bool waitForServer(const ros::Duration &timeout=ros::Duration(0, 0)) const
void MySigintHandler(int sig)
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)
actionlib::SimpleActionClient< move_base_msgs::MoveBaseAction > Client
ServiceServer advertiseService(const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T *obj)
ROSCPP_DECL void spin(Spinner &spinner)
std::string toString() const
int main(int argc, char **argv)
void sendGoal(const Goal &goal, SimpleDoneCallback done_cb=SimpleDoneCallback(), SimpleActiveCallback active_cb=SimpleActiveCallback(), SimpleFeedbackCallback feedback_cb=SimpleFeedbackCallback())
ROSCPP_DECL void shutdown()
SimpleClientGoalState getState() const
void * send_goals(void *goals)
ROSCPP_DECL bool waitForService(const std::string &service_name, int32_t timeout)