24 #include "Eigen/Dense" 33 namespace perception {
36 template <
class Po
intT>
39 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
64 inline const PointT*
at(
size_t col,
size_t row)
const {
67 inline PointT*
at(
size_t col,
size_t row) {
70 inline const PointT*
operator()(
size_t col,
size_t row)
const {
99 inline const PointT&
at(
size_t n)
const {
return points_[n]; }
119 inline virtual bool SwapPoint(
size_t source_id,
size_t target_id) {
142 template <
typename IndexType>
144 const std::vector<IndexType>& indices) {
147 points_.resize(indices.size());
148 for (
size_t i = 0; i < indices.size(); ++i) {
152 template <
typename IndexType>
154 const std::vector<IndexType>& indices) {
158 std::vector<bool> mask(
false, rhs.
size());
159 for (
size_t i = 0; i < indices.size(); ++i) {
160 mask[indices[i]] =
true;
162 for (
size_t i = 0; i < rhs.
size(); ++i) {
177 typedef typename std::vector<PointT>::iterator
iterator;
204 if (!check_nan || (!std::isnan(point.x) && !std::isnan(point.y) &&
205 !std::isnan(point.z))) {
206 point3d << point.x, point.y, point.z;
207 point3d = rotation * point3d;
208 point.x =
static_cast<typename PointT::Type
>(point3d(0));
209 point.y =
static_cast<typename PointT::Type
>(point3d(1));
210 point.z =
static_cast<typename PointT::Type
>(point3d(2));
219 if (!check_nan || (!std::isnan(point.x) && !std::isnan(point.y) &&
220 !std::isnan(point.z))) {
221 point3d << point.x, point.y, point.z;
223 point.x =
static_cast<typename PointT::Type
>(point3d(0));
224 point.y =
static_cast<typename PointT::Type
>(point3d(1));
225 point.z =
static_cast<typename PointT::Type
>(point3d(2));
234 bool check_nan =
false)
const {
238 if (!check_nan || (!std::isnan(point.x) && !std::isnan(point.y) &&
239 !std::isnan(point.z))) {
240 point3f << point.x, point.y, point.z;
241 point3f = transform * point3f;
242 pt.x =
static_cast<typename PointT::Type
>(point3f(0));
243 pt.y =
static_cast<typename PointT::Type
>(point3f(1));
244 pt.z =
static_cast<typename PointT::Type
>(point3f(2));
263 template <
class Po
intT>
281 const std::vector<int>& indices) {
286 const PointT point = PointT()) {
291 points_timestamp_.assign(size, 0.0);
292 points_height_.assign(size, std::numeric_limits<float>::max());
293 points_beam_id_.assign(size, -1);
294 points_label_.assign(size, 0);
302 points_timestamp_.insert(points_timestamp_.end(),
305 points_height_.insert(points_height_.end(), rhs.
points_height_.begin(),
307 points_beam_id_.insert(points_beam_id_.end(), rhs.
points_beam_id_.begin(),
309 points_label_.insert(points_label_.end(), rhs.
points_label_.begin(),
318 points_timestamp_.reserve(size);
319 points_height_.reserve(size);
320 points_beam_id_.reserve(size);
321 points_label_.reserve(size);
326 points_timestamp_.resize(size, 0.0);
327 points_height_.resize(size, std::numeric_limits<float>::max());
328 points_beam_id_.resize(size, -1);
329 points_label_.resize(size, 0);
338 points_timestamp_.push_back(0.0);
339 points_height_.push_back(std::numeric_limits<float>::max());
340 points_beam_id_.push_back(-1);
341 points_label_.push_back(0);
345 inline void push_back(
const PointT& point,
double timestamp,
346 float height = std::numeric_limits<float>::max(),
347 int32_t beam_id = -1, uint8_t label = 0) {
349 points_timestamp_.push_back(timestamp);
350 points_height_.push_back(height);
351 points_beam_id_.push_back(beam_id);
352 points_label_.push_back(label);
359 points_timestamp_.clear();
360 points_height_.clear();
361 points_beam_id_.clear();
362 points_label_.clear();
367 const size_t target_id)
override {
370 std::swap(points_timestamp_[source_id], points_timestamp_[target_id]);
371 std::swap(points_height_[source_id], points_height_[target_id]);
372 std::swap(points_beam_id_[source_id], points_beam_id_[target_id]);
373 std::swap(points_label_[source_id], points_label_[target_id]);
381 inline bool CopyPoint(
const size_t id,
const size_t rhs_id,
398 template <
typename IndexType>
400 const std::vector<IndexType>& indices) {
403 points_.resize(indices.size());
404 points_timestamp_.resize(indices.size());
405 points_height_.resize(indices.size());
406 points_beam_id_.resize(indices.size());
407 points_label_.resize(indices.size());
408 for (
size_t i = 0; i < indices.size(); ++i) {
431 return ((
points_.size() == points_timestamp_.size()) &&
432 (
points_.size() == points_height_.size()) &&
433 (
points_.size() == points_beam_id_.size()) &&
434 (
points_.size() == points_label_.size()));
438 return row *
width_ + col;
442 return points_timestamp_;
461 const std::vector<uint8_t>&
points_label()
const {
return points_label_; }
465 const uint8_t&
points_label(
size_t i)
const {
return points_label_[i]; }
void resize(const size_t size) override
Definition: point_cloud.h:324
AttributePointCloud & operator+=(const AttributePointCloud< PointT > &rhs)
Definition: point_cloud.h:299
const std::vector< PointT > & points() const
Definition: point_cloud.h:185
float & points_height(size_t i)
Definition: point_cloud.h:448
std::vector< uint8_t > points_label_
Definition: point_cloud.h:471
const std::vector< double > & points_timestamp() const
Definition: point_cloud.h:441
void push_back(const PointT &point, double timestamp, float height=std::numeric_limits< float >::max(), int32_t beam_id=-1, uint8_t label=0)
Definition: point_cloud.h:345
std::vector< EigenType, Eigen::aligned_allocator< EigenType > > EigenVector
Definition: eigen_defs.h:32
const PointT & back() const
Definition: point_cloud.h:105
bool empty() const
Definition: point_cloud.h:87
PointT & back()
Definition: point_cloud.h:106
double points_timestamp(size_t i) const
Definition: point_cloud.h:444
PointCloud< PointD > PolygonDType
Definition: point_cloud.h:490
std::shared_ptr< PolygonFType > PolygonFTypePtr
Definition: point_cloud.h:492
void SwapPointCloud(PointCloud< PointT > *rhs)
Definition: point_cloud.h:170
Eigen::Vector3f Vector3f
Definition: base_map_fwd.h:29
std::vector< int > indices
Definition: point.h:75
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
bool IsOrganized() const
Definition: point_cloud.h:77
std::vector< int32_t > * mutable_points_beam_id()
Definition: point_cloud.h:457
std::shared_ptr< PointIndices > PointIndicesPtr
Definition: point_cloud.h:475
PointCloud< PointF > PolygonFType
Definition: point_cloud.h:489
void clear() override
Definition: point_cloud.h:357
virtual void clear()
Definition: point_cloud.h:114
void CopyPointCloud(const AttributePointCloud< PointT > &rhs, const std::vector< IndexType > &indices)
Definition: point_cloud.h:399
virtual void push_back(const PointT &point)
Definition: point_cloud.h:108
const Eigen::Affine3d & sensor_to_world_pose()
Definition: point_cloud.h:196
AttributePointCloud(const AttributePointCloud< PointT > &pc, const std::vector< int > &indices)
Definition: point_cloud.h:280
AttributePointCloud(const size_t width, const size_t height, const PointT point=PointT())
Definition: point_cloud.h:285
void CopyPointCloud(const AttributePointCloud< PointT > &rhs, const PointIndices &indices)
Definition: point_cloud.h:394
Eigen::Vector3d Vector3d
Definition: frame_transform.h:27
bool CopyPoint(size_t id, size_t rhs_id, const PointCloud< PointT > &rhs)
Definition: point_cloud.h:129
std::map< T, EigenType, std::less< T >, Eigen::aligned_allocator< std::pair< const T, EigenType > >> EigenMap
Definition: eigen_defs.h:36
AttributePointCloud< PointD > PointDCloud
Definition: point_cloud.h:480
const std::vector< int32_t > & points_beam_id() const
Definition: point_cloud.h:456
bool CopyPoint(const size_t id, const size_t rhs_id, const AttributePointCloud< PointT > &rhs)
Definition: point_cloud.h:381
size_t size() const
Definition: point_cloud.h:83
std::vector< float > * mutable_points_height()
Definition: point_cloud.h:454
std::vector< PointT > points_
Definition: point_cloud.h:253
iterator end()
Definition: point_cloud.h:181
Eigen::Affine3f Affine3f
Definition: base_map_fwd.h:28
Definition: point_cloud.h:37
void set_sensor_to_world_pose(const Eigen::Affine3d &sensor_to_world_pose)
Definition: point_cloud.h:192
virtual ~PointCloud()=default
std::vector< int32_t > points_beam_id_
Definition: point_cloud.h:470
void CopyPointCloud(const PointCloud< PointT > &rhs, const std::vector< IndexType > &indices)
Definition: point_cloud.h:143
void CopyPointCloudExclude(const PointCloud< PointT > &rhs, const std::vector< IndexType > &indices)
Definition: point_cloud.h:153
Definition: point_cloud.h:264
PointCloud(const PointCloud< PointT > &pc, const PointIndices &indices)
Definition: point_cloud.h:47
std::vector< uint8_t > * mutable_points_label()
Definition: point_cloud.h:462
void SetPointHeight(size_t i, size_t j, float height)
Definition: point_cloud.h:450
void TransformPointCloud(bool check_nan=false)
Definition: point_cloud.h:216
AttributePointCloud(const AttributePointCloud< PointT > &pc, const PointIndices &indices)
Definition: point_cloud.h:276
size_t height_
Definition: point_cloud.h:255
std::shared_ptr< const PointFCloud > PointFCloudConstPtr
Definition: point_cloud.h:483
PointT * operator()(size_t col, size_t row)
Definition: point_cloud.h:73
PointCloud(size_t width, size_t height, PointT point=PointT())
Definition: point_cloud.h:54
std::vector< PointT > * mutable_points()
Definition: point_cloud.h:184
uint8_t & points_label(size_t i)
Definition: point_cloud.h:464
const PointT & operator[](size_t n) const
Definition: point_cloud.h:97
PointCloud(const PointCloud< PointT > &pc, const std::vector< int > &indices)
Definition: point_cloud.h:50
PointT & front()
Definition: point_cloud.h:103
size_t TransferToIndex(const size_t col, const size_t row) const
Definition: point_cloud.h:437
void SetPointHeight(size_t i, float height)
Definition: point_cloud.h:453
size_t height() const
Definition: point_cloud.h:79
std::shared_ptr< const PointDCloud > PointDCloudConstPtr
Definition: point_cloud.h:486
bool CheckConsistency() const override
Definition: point_cloud.h:430
std::vector< double > * mutable_points_timestamp()
Definition: point_cloud.h:445
double timestamp_
Definition: point_cloud.h:258
void CopyPointCloud(const PointCloud< PointT > &rhs, const PointIndices &indices)
Definition: point_cloud.h:138
size_t width() const
Definition: point_cloud.h:81
PointT & at(size_t n)
Definition: point_cloud.h:100
virtual void resize(size_t size)
Definition: point_cloud.h:89
PointT & operator[](size_t n)
Definition: point_cloud.h:98
const_iterator end() const
Definition: point_cloud.h:183
bool SwapPoint(const size_t source_id, const size_t target_id) override
Definition: point_cloud.h:366
std::shared_ptr< const PointIndices > PointIndicesConstPtr
Definition: point_cloud.h:476
std::shared_ptr< PointFCloud > PointFCloudPtr
Definition: point_cloud.h:482
const uint8_t & points_label(size_t i) const
Definition: point_cloud.h:465
double get_timestamp()
Definition: point_cloud.h:190
Eigen::Affine3d sensor_to_world_pose_
Definition: point_cloud.h:257
std::vector< PointT >::iterator iterator
Definition: point_cloud.h:177
const PointT & at(size_t n) const
Definition: point_cloud.h:99
void RotatePointCloud(bool check_nan=false)
Definition: point_cloud.h:200
std::shared_ptr< const PolygonFType > PolygonFTypeConstPtr
Definition: point_cloud.h:493
const_iterator begin() const
Definition: point_cloud.h:182
const std::vector< uint8_t > & points_label() const
Definition: point_cloud.h:461
const float & points_height(size_t i) const
Definition: point_cloud.h:449
void reserve(const size_t size) override
Definition: point_cloud.h:316
void set_timestamp(const double timestamp)
Definition: point_cloud.h:188
const PointT & front() const
Definition: point_cloud.h:102
const PointT * operator()(size_t col, size_t row) const
Definition: point_cloud.h:70
Eigen::Affine3d Affine3d
Definition: base_map_fwd.h:34
size_t width_
Definition: point_cloud.h:254
iterator begin()
Definition: point_cloud.h:180
void SwapPointCloud(AttributePointCloud< PointT > *rhs)
Definition: point_cloud.h:418
virtual bool SwapPoint(size_t source_id, size_t target_id)
Definition: point_cloud.h:119
Eigen::Matrix3d Matrix3d
Definition: base_map_fwd.h:33
const int32_t & points_beam_id(size_t i) const
Definition: point_cloud.h:459
std::vector< float > points_height_
Definition: point_cloud.h:469
virtual void reserve(size_t size)
Definition: point_cloud.h:85
virtual bool CheckConsistency() const
Definition: point_cloud.h:250
std::vector< PointT >::const_iterator const_iterator
Definition: point_cloud.h:178
std::shared_ptr< PointDCloud > PointDCloudPtr
Definition: point_cloud.h:485
std::shared_ptr< PolygonDType > PolygonDTypePtr
Definition: point_cloud.h:495
int32_t & points_beam_id(size_t i)
Definition: point_cloud.h:458
void TransformPointCloud(const Eigen::Affine3f &transform, PointCloud< PointT > *out, bool check_nan=false) const
Definition: point_cloud.h:232
std::shared_ptr< const PolygonDType > PolygonDTypeConstPtr
Definition: point_cloud.h:496
void push_back(const PointT &point) override
Definition: point_cloud.h:336
std::vector< double > points_timestamp_
Definition: point_cloud.h:468
const PointT * at(size_t col, size_t row) const
Definition: point_cloud.h:64
const std::vector< float > & points_height() const
Definition: point_cloud.h:447
AttributePointCloud< PointF > PointFCloud
Definition: point_cloud.h:479
PointT * at(size_t col, size_t row)
Definition: point_cloud.h:67