$search
00001 #include <ros/ros.h> 00002 #include <arm_navigation_msgs/GetPlanningScene.h> 00003 #include <planning_environment/models/collision_models.h> 00004 00005 static const std::string SET_PLANNING_SCENE_DIFF_NAME = "/environment_server/set_planning_scene_diff"; 00006 00007 int main(int argc, char **argv){ 00008 ros::init (argc, argv, "get_state_validity_test"); 00009 ros::NodeHandle rh; 00010 00011 ros::Publisher vis_marker_publisher_; 00012 ros::Publisher vis_marker_array_publisher_; 00013 00014 vis_marker_publisher_ = rh.advertise<visualization_msgs::Marker>("state_validity_markers", 128); 00015 vis_marker_array_publisher_ = rh.advertise<visualization_msgs::MarkerArray>("state_validity_markers_array", 128); 00016 00017 ros::service::waitForService(SET_PLANNING_SCENE_DIFF_NAME); 00018 ros::ServiceClient get_planning_scene_client = 00019 rh.serviceClient<arm_navigation_msgs::GetPlanningScene>(SET_PLANNING_SCENE_DIFF_NAME); 00020 00021 arm_navigation_msgs::GetPlanningScene::Request planning_scene_req; 00022 arm_navigation_msgs::GetPlanningScene::Response planning_scene_res; 00023 00024 if(!get_planning_scene_client.call(planning_scene_req, planning_scene_res)) { 00025 ROS_WARN("Can't get planning scene"); 00026 return -1; 00027 } 00028 00029 planning_environment::CollisionModels collision_models("robot_description"); 00030 planning_models::KinematicState* state = 00031 collision_models.setPlanningScene(planning_scene_res.planning_scene); 00032 00033 std::vector<std::string> arm_names = 00034 collision_models.getKinematicModel()->getModelGroup("right_arm")->getUpdatedLinkModelNames(); 00035 std::vector<std::string> joint_names = 00036 collision_models.getKinematicModel()->getModelGroup("right_arm")->getJointModelNames(); 00037 00038 if(argc > 1) { 00039 std::stringstream s(argv[1]); 00040 double val; 00041 s >> val; 00042 std::map<std::string, double> nvalues; 00043 nvalues["r_shoulder_pan_joint"] = val; 00044 00045 state->setKinematicState(nvalues); 00046 } 00047 00048 std_msgs::ColorRGBA good_color, collision_color, joint_limits_color; 00049 good_color.a = collision_color.a = joint_limits_color.a = .8; 00050 00051 good_color.g = 1.0; 00052 collision_color.r = 1.0; 00053 joint_limits_color.b = 1.0; 00054 00055 std_msgs::ColorRGBA point_markers; 00056 point_markers.a = 1.0; 00057 point_markers.r = 1.0; 00058 point_markers.g = .8; 00059 00060 std_msgs::ColorRGBA color; 00061 visualization_msgs::MarkerArray arr; 00062 if(!state->areJointsWithinBounds(joint_names)) { 00063 color = joint_limits_color; 00064 } else if(collision_models.isKinematicStateInCollision(*state)) { 00065 color = collision_color; 00066 collision_models.getAllCollisionPointMarkers(*state, 00067 arr, 00068 point_markers, 00069 ros::Duration(0.2)); 00070 } else { 00071 color = good_color; 00072 } 00073 00074 collision_models.getRobotMarkersGivenState(*state, 00075 arr, 00076 color, 00077 "right_arm", 00078 ros::Duration(0.2), 00079 &arm_names); 00080 00081 while(ros::ok()) { 00082 vis_marker_array_publisher_.publish(arr); 00083 ros::spinOnce(); 00084 ros::Duration(.1).sleep(); 00085 } 00086 collision_models.revertPlanningScene(state); 00087 ros::shutdown(); 00088 }