Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <ros/ros.h>
00019
00020
00021
00022
00023
00024
00025
00026 #include <cob_map_accessibility_analysis/CheckPointAccessibility.h>
00027 #include <cob_map_accessibility_analysis/CheckPerimeterAccessibility.h>
00028 #include <cob_3d_mapping_msgs/GetApproachPoseForPolygon.h>
00029
00030 int main(int argc, char** argv)
00031 {
00032 ros::init(argc, argv, "map_point_accessibility_check_client");
00033
00034 ros::NodeHandle n;
00035
00036 std::string points_service_name = "/map_accessibility_analysis/map_points_accessibility_check";
00037 std::string perimeter_service_name = "/map_accessibility_analysis/map_perimeter_accessibility_check";
00038 std::string polygon_service_name = "/map_accessibility_analysis/map_polygon_accessibility_check";
00039
00040
00041
00042 ROS_INFO("Waiting for service server to become available...");
00043 bool serviceAvailable = ros::service::waitForService(points_service_name, 5000);
00044 serviceAvailable &= ros::service::waitForService(perimeter_service_name, 5000);
00045 serviceAvailable &= ros::service::waitForService(polygon_service_name, 5000);
00046
00047
00048 if (serviceAvailable == false)
00049 {
00050 ROS_ERROR("The services could not be found.");
00051 return -1;
00052 }
00053 ROS_INFO("The service servers are advertised.");
00054
00055
00056 cob_map_accessibility_analysis::CheckPointAccessibility::Request req_points;
00057 cob_map_accessibility_analysis::CheckPointAccessibility::Response res_points;
00058
00059 geometry_msgs::Pose2D point;
00060 point.x = 1.;
00061 point.y = 0;
00062 req_points.points_to_check.push_back(point);
00063 point.x = -2.;
00064 point.y = 0;
00065 req_points.points_to_check.push_back(point);
00066
00067
00068
00069 bool success = ros::service::call(points_service_name, req_points, res_points);
00070
00071 if (success == true)
00072 {
00073 ROS_INFO("Points request successful, results: ");
00074 for (unsigned int i = 0; i < res_points.accessibility_flags.size(); ++i)
00075 ROS_INFO(" - (xy)=(%f, %f), accessible=%d",
00076 req_points.points_to_check[i].x,
00077 req_points.points_to_check[i].y,
00078 res_points.accessibility_flags[i]);
00079 }
00080 else
00081 ROS_WARN("The service call for points was not successful.");
00082
00083
00084 cob_map_accessibility_analysis::CheckPerimeterAccessibility::Request req_perimeter;
00085 cob_map_accessibility_analysis::CheckPerimeterAccessibility::Response res_perimeter;
00086
00087 req_perimeter.center.x = 2.5;
00088 req_perimeter.center.y = 0.5;
00089 req_perimeter.center.theta = 0.;
00090 req_perimeter.radius = 1.0;
00091 req_perimeter.rotational_sampling_step = 10. / 180. * M_PI;
00092
00093
00094
00095 success = ros::service::call(perimeter_service_name, req_perimeter, res_perimeter);
00096
00097 if (success == true)
00098 {
00099 ROS_INFO("Accessible points on perimeter:");
00100 for (unsigned int i = 0; i < res_perimeter.accessible_poses_on_perimeter.size(); ++i)
00101 ROS_INFO(" - (xyt)=(%f, %f, %f)",
00102 res_perimeter.accessible_poses_on_perimeter[i].x,
00103 res_perimeter.accessible_poses_on_perimeter[i].y,
00104 res_perimeter.accessible_poses_on_perimeter[i].theta);
00105 }
00106 else
00107 ROS_WARN("The service call for perimeter points was not successful.");
00108
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151 return 0;
00152 }