00001 
00004 
00005 
00006 
00007 
00008 #include <atomic>
00009 #include <ros/common.h>
00010 #include <ros/node_handle.h>
00011 #include <ros/subscriber.h>
00012 #include <ros/publisher.h>
00013 
00014 #include <costmap_2d/costmap_2d.h>
00015 #include <costmap_2d/cost_values.h>
00016 #include <nav_msgs/OccupancyGrid.h>
00017 
00018 #include <cost_map_ros/converter.hpp>
00019 
00020 #include "../../include/cost_map_demos/from_ros_costmaps.hpp"
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 int main(int argc, char** argv)
00029 {
00030   ros::init(argc, argv, "converter"); 
00031 
00032   
00033 
00034 
00035   cost_map_demos::TransformBroadcaster broadcaster;
00036   cost_map_demos::broadcastCostmap2DROSTestSuiteTransforms(broadcaster);
00037 
00038   
00039 
00040 
00041   
00042   
00043   
00044   cost_map_demos::ROSCostmapServer ros_costmap_5x5("five_by_five", "base_link_5x5", cost_map::Position(0.0, 0.0), 5.0, 5.0);
00045   cost_map_demos::ROSCostmapServer ros_costmap_4x4("four_by_four", "base_link_4x4", cost_map::Position(0.0, -5.0), 4.0, 4.0);
00046   cost_map_demos::ROSCostmapServer ros_costmap_5x5_3x3_offset("five_by_five_three_by_three_offset", "base_link_5x5_3x3_offset", cost_map::Position(-6.0, 0.0), 5.0, 5.0);
00047   cost_map_demos::ROSCostmapServer ros_costmap_5x5_3x3_centre("five_by_five_three_by_three_centre", "base_link_5x5_3x3_centre", cost_map::Position(-6.0, -6.0), 5.0, 5.0);
00048   cost_map_demos::ROSCostmapServer ros_costmap_5x5_2_5x2_5_offset("five_by_five_twohalf_by_twohalf_offset", "base_link_5x5_2_5x2_5_offset", cost_map::Position(-12.0, 0.0), 5.0, 5.0);
00049 
00050   
00051 
00052 
00053   
00054   cost_map::CostMap cost_map_5x5, cost_map_4x4, cost_map_5x5_3x3_offset, cost_map_5x5_3x3_centre, cost_map_5x5_2_5x2_5_offset;
00055   cost_map::fromCostmap2DROS(*(ros_costmap_5x5.getROSCostmap()), "obstacle_costs", cost_map_5x5);
00056   cost_map::fromCostmap2DROS(*(ros_costmap_4x4.getROSCostmap()), "obstacle_costs", cost_map_4x4);
00057   cost_map::Length geometry_3x3(3.0, 3.0);
00058   cost_map::fromCostmap2DROSAtRobotPose(*(ros_costmap_5x5_3x3_offset.getROSCostmap()), geometry_3x3, "obstacle_costs", cost_map_5x5_3x3_offset);
00059   cost_map::fromCostmap2DROSAtRobotPose(*(ros_costmap_5x5_3x3_centre.getROSCostmap()), geometry_3x3, "obstacle_costs", cost_map_5x5_3x3_centre);
00060   cost_map::Length geometry_2_5x2_5(2.5, 2.5);
00061   cost_map::fromCostmap2DROSAtRobotPose(*(ros_costmap_5x5_2_5x2_5_offset.getROSCostmap()), geometry_2_5x2_5, "obstacle_costs", cost_map_5x5_2_5x2_5_offset);
00062 
00063   
00064 
00065 
00066   ros::NodeHandle node_handle;
00067   ros::Publisher pub_5x5 = node_handle.advertise<nav_msgs::OccupancyGrid>("converted_5x5", 1, true);
00068   ros::Publisher pub_4x4 = node_handle.advertise<nav_msgs::OccupancyGrid>("converted_4x4", 1, true);
00069   ros::Publisher pub_5x5_3x3_offset = node_handle.advertise<nav_msgs::OccupancyGrid>("converted_5x5_3x3_offset", 1, true);
00070   ros::Publisher pub_5x5_3x3_centre = node_handle.advertise<nav_msgs::OccupancyGrid>("converted_5x5_3x3_centre", 1, true);
00071   ros::Publisher pub_5x5_2_5x2_5_offset = node_handle.advertise<nav_msgs::OccupancyGrid>("converted_5x5_2_5x2_5_offset", 1, true);
00072 
00073   nav_msgs::OccupancyGrid occupancy_msg;
00074   cost_map::toOccupancyGrid(cost_map_5x5, cost_map_5x5.getLayers()[0], occupancy_msg);
00075   pub_5x5.publish(occupancy_msg);
00076   cost_map::toOccupancyGrid(cost_map_4x4, cost_map_4x4.getLayers()[0], occupancy_msg);
00077   pub_4x4.publish(occupancy_msg);
00078   cost_map::toOccupancyGrid(cost_map_5x5_3x3_offset, cost_map_5x5_3x3_offset.getLayers()[0], occupancy_msg);
00079   pub_5x5_3x3_offset.publish(occupancy_msg);
00080   cost_map::toOccupancyGrid(cost_map_5x5_3x3_centre, cost_map_5x5_3x3_centre.getLayers()[0], occupancy_msg);
00081   pub_5x5_3x3_centre.publish(occupancy_msg);
00082   cost_map::toOccupancyGrid(cost_map_5x5_2_5x2_5_offset, cost_map_5x5_2_5x2_5_offset.getLayers()[0], occupancy_msg);
00083   pub_5x5_2_5x2_5_offset.publish(occupancy_msg);
00084 
00085   
00086 
00087 
00088   ros::spin();
00089 
00090   return 0;
00091 }