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
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include <ros/ros.h>
00036 #include "jsk_footstep_planner/pointcloud_model_generator.h"
00037 #include <jsk_footstep_planner/PointCloudModelGeneratorConfig.h>
00038 #include <sensor_msgs/PointCloud2.h>
00039 #include <jsk_recognition_utils/pcl_conversion_util.h>
00040 #include <dynamic_reconfigure/server.h>
00041
00042 using namespace jsk_footstep_planner;
00043
00044 double hole_rate;
00045 std::string model;
00046 boost::mutex mutex;
00047 void reconfigureCallback(PointCloudModelGeneratorConfig &config, uint32_t level)
00048 {
00049 boost::mutex::scoped_lock lock(mutex);
00050 hole_rate = config.hole_rate;
00051 model = config.model;
00052 }
00053
00054
00055 int main(int argc, char** argv)
00056 {
00057 ros::init(argc, argv, "pointcloud_model_generator_node");
00058 ros::NodeHandle pnh("~");
00059 ros::Rate r(1);
00060 ros::Publisher pub_cloud = pnh.advertise<sensor_msgs::PointCloud2>("output", 1, true);
00061 dynamic_reconfigure::Server<PointCloudModelGeneratorConfig> server;
00062 server.setCallback(boost::bind(&reconfigureCallback, _1, _2));
00063 while (ros::ok()) {
00064 ros::spinOnce();
00065 r.sleep();
00066 {
00067 boost::mutex::scoped_lock lock(mutex);
00068 PointCloudModelGenerator gen;
00069 pcl::PointCloud<pcl::PointNormal> cloud;
00070 gen.generate(model, cloud, hole_rate);
00071 sensor_msgs::PointCloud2 ros_cloud;
00072 pcl::toROSMsg(cloud, ros_cloud);
00073 ros_cloud.header.frame_id = "odom";
00074 ros_cloud.header.stamp = ros::Time::now();
00075 pub_cloud.publish(ros_cloud);
00076 }
00077 }
00078 return 0;
00079 }