46 const double& observation_keep_time, \
47 const double& expected_update_rate, \
48 const double& min_obstacle_height, \
49 const double& max_obstacle_height, \
50 const double& obstacle_range, \
52 const std::string& global_frame, \
53 const std::string& sensor_frame, \
54 const double& tf_tolerance, \
55 const double& min_d, \
56 const double& max_d, \
58 const double& vFOVPadding, \
60 const double& decay_acceleration, \
61 const bool& marking, \
62 const bool& clearing, \
63 const double& voxel_size, \
64 const bool& voxel_filter, \
65 const int& voxel_min_points, \
66 const bool& enabled, \
67 const bool& clear_buffer_after_reading, \
70 _buffer(tf), _observation_keep_time(observation_keep_time),
71 _expected_update_rate(expected_update_rate),_last_updated(
ros::Time::now()),
72 _global_frame(global_frame), _sensor_frame(sensor_frame),
73 _topic_name(topic_name), _min_obstacle_height(min_obstacle_height),
74 _max_obstacle_height(max_obstacle_height), _obstacle_range(obstacle_range),
75 _tf_tolerance(tf_tolerance), _min_z(min_d), _max_z(max_d),
76 _vertical_fov(vFOV), _vertical_fov_padding(vFOVPadding),
77 _horizontal_fov(hFOV), _decay_acceleration(decay_acceleration),
78 _marking(marking), _clearing(clearing), _voxel_size(voxel_size),
79 _voxel_filter(voxel_filter), _voxel_min_points(voxel_min_points),
80 _enabled(enabled), _clear_buffer_after_reading(clear_buffer_after_reading),
81 _model_type(model_type)
98 const std::string origin_frame = \
104 geometry_msgs::PoseStamped local_pose, global_pose;
105 local_pose.pose.position.x=0;
106 local_pose.pose.position.y=0;
107 local_pose.pose.position.z=0;
108 local_pose.pose.orientation.x=0;
109 local_pose.pose.orientation.y=0;
110 local_pose.pose.orientation.z=0;
111 local_pose.pose.orientation.w=1;
112 local_pose.header.stamp = cloud.header.stamp;
113 local_pose.header.frame_id = origin_frame;
147 pcl::PCLPointCloud2::Ptr cloud_pcl (
new pcl::PCLPointCloud2 ());
148 pcl::PCLPointCloud2::Ptr cloud_filtered (
new pcl::PCLPointCloud2 ());
156 pcl::VoxelGrid<pcl::PCLPointCloud2> sor;
157 sor.setInputCloud (cloud_pcl);
158 sor.setFilterFieldName(
"z");
160 sor.setDownsampleAllData(
false);
164 sor.setMinimumPointsNumberPerVoxel(static_cast<unsigned int>(
_voxel_min_points));
165 sor.filter(*cloud_filtered);
169 pcl::PassThrough<pcl::PCLPointCloud2> pass_through_filter;
170 pass_through_filter.setInputCloud(cloud_pcl);
171 pass_through_filter.setKeepOrganized(
false);
172 pass_through_filter.setFilterFieldName(
"z");
173 pass_through_filter.setFilterLimits( \
175 pass_through_filter.filter(*cloud_filtered);
186 "TF Exception for sensor frame: %s, cloud frame: %s, %s", \
187 _sensor_frame.c_str(), cloud.header.frame_id.c_str(), ex.what());
197 std::vector<observation::MeasurementReading>& observations)
205 observations.push_back(*it);
266 "%s buffer updated in %.2fs, it should be updated every %.2fs.",
void GetReadings(std::vector< observation::MeasurementReading > &observations)
T & transform(const T &in, T &out, const std::string &target_frame, ros::Duration timeout=ros::Duration(0.0)) const
void RemoveStaleObservations(void)
bool IsEnabled(void) const
double _vertical_fov_padding
void SetEnabled(const bool &enabled)
const ros::Duration _observation_keep_time
void doTransform(const T &data_in, T &data_out, const geometry_msgs::TransformStamped &transform)
std::list< observation::MeasurementReading > _observation_list
bool UpdatedAtExpectedRate(void) const
sensor_msgs::PointCloud2::Ptr point_cloud_ptr
virtual bool canTransform(const std::string &target_frame, const std::string &source_frame, const ros::Time &target_time, const ros::Duration timeout, std::string *errstr=NULL) const
MeasurementBuffer(const std::string &topic_name, const double &observation_keep_time, const double &expected_update_rate, const double &min_obstacle_height, const double &max_obstacle_height, const double &obstacle_range, tf2_ros::Buffer &tf, const std::string &global_frame, const std::string &sensor_frame, const double &tf_tolerance, const double &min_d, const double &max_d, const double &vFOV, const double &vFOVPadding, const double &hFOV, const double &decay_acceleration, const bool &marking, const bool &clearing, const double &voxel_size, const bool &voxel_filter, const int &voxel_min_points, const bool &enabled, const bool &clear_buffer_after_reading, const ModelType &model_type)
void ResetLastUpdatedTime(void)
virtual geometry_msgs::TransformStamped lookupTransform(const std::string &target_frame, const std::string &source_frame, const ros::Time &time, const ros::Duration timeout) const
tf2_ros::Buffer & _buffer
#define ROS_WARN_THROTTLE(period,...)
boost::recursive_mutex _lock
bool ClearAfterReading(void)
double _min_obstacle_height
void ResetAllMeasurements(void)
std::string _global_frame
void toPCL(const ros::Time &stamp, std::uint64_t &pcl_stamp)
bool _clear_buffer_after_reading
double _decay_acceleration
double _max_obstacle_height
sensor_msgs::PointCloud2::Ptr _cloud
const ros::Duration _expected_update_rate
std::string _sensor_frame
void fromPCL(const std::uint64_t &pcl_stamp, ros::Time &stamp)
void BufferROSCloud(const sensor_msgs::PointCloud2 &cloud)
std::list< observation::MeasurementReading >::iterator readings_iter