29 namespace perception {
34 template <
typename Po
intT>
38 point3d = pose * point3d;
39 point_out->x =
static_cast<typename PointT::Type
>(point3d.x());
40 point_out->y =
static_cast<typename PointT::Type
>(point3d.y());
41 point_out->z =
static_cast<typename PointT::Type
>(point3d.z());
46 template <
typename Po
intT>
50 if (cloud_out->
size() < cloud_in.
size()) {
53 for (
size_t i = 0; i < cloud_in.
size(); ++i) {
54 TransformPoint<PointT>(cloud_in.
at(i), pose, &(cloud_out->
at(i)));
60 template <
typename Po
intT>
63 TransformPointCloud<PointT>(*cloud_in_out, pose, cloud_in_out);
68 template <
typename Po
intCloudT>
70 const std::vector<int> &indices,
71 std::shared_ptr<PointCloudT> trans_cloud) {
72 if (trans_cloud->size() != indices.size()) {
73 trans_cloud->resize(indices.size());
75 for (
size_t i = 0; i < indices.size(); ++i) {
76 const auto &p = cloud->at(indices[i]);
77 auto &tp = trans_cloud->at(i);
81 tp.intensity = p.intensity;
87 template <
typename Po
intT>
90 Eigen::Matrix<typename PointT::Type, 4, 1> *min_p,
91 Eigen::Matrix<typename PointT::Type, 4, 1> *max_p) {
92 using T =
typename PointT::Type;
93 (*min_p)[0] = (*min_p)[1] = (*min_p)[2] = std::numeric_limits<T>::max();
94 (*max_p)[0] = (*max_p)[1] = (*max_p)[2] = -std::numeric_limits<T>::max();
97 for (
size_t i = 0; i < range; ++i) {
98 const auto &pt = cloud.
at(i);
99 if (std::isnan(pt.x) || std::isnan(pt.y) || std::isnan(pt.z)) {
102 (*min_p)[0] = std::min((*min_p)[0], static_cast<T>(pt.x));
103 (*max_p)[0] = std::max((*max_p)[0], static_cast<T>(pt.x));
104 (*min_p)[1] = std::min((*min_p)[1], static_cast<T>(pt.y));
105 (*max_p)[1] = std::max((*max_p)[1], static_cast<T>(pt.y));
106 (*min_p)[2] = std::min((*min_p)[2], static_cast<T>(pt.z));
107 (*max_p)[2] = std::max((*max_p)[2], static_cast<T>(pt.z));
113 template <
typename Po
intT>
116 Eigen::Matrix<typename PointT::Type, 4, 1> *min_p,
117 Eigen::Matrix<typename PointT::Type, 4, 1> *max_p) {
118 GetMinMaxIn3DWithRange<PointT>(cloud, indices.
indices.size(), min_p, max_p);
123 template <
typename Po
intT>
125 Eigen::Matrix<typename PointT::Type, 4, 1> *min_p,
126 Eigen::Matrix<typename PointT::Type, 4, 1> *max_p) {
127 GetMinMaxIn3DWithRange<PointT>(cloud, cloud.
size(), min_p, max_p);
132 template <
typename T>
135 size_t point_num = cloud.size();
136 Eigen::Matrix<T, 3, 1> centroid(0.0, 0.0, 0.0);
137 for (
const auto &pt : cloud.points()) {
143 centroid[0] /=
static_cast<T
>(point_num);
144 centroid[1] /=
static_cast<T
>(point_num);
145 centroid[2] /=
static_cast<T
>(point_num);
void TransformPoint(const PointT &point_in, const Eigen::Affine3d &pose, PointT *point_out)
Definition: common.h:35
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
Eigen::Vector3d Vector3d
Definition: frame_transform.h:27
size_t size() const
Definition: point_cloud.h:83
void TransformPointCloud(const base::PointCloud< PointT > &cloud_in, const Eigen::Affine3d &pose, base::PointCloud< PointT > *cloud_out)
Definition: common.h:47
Definition: point_cloud.h:37
Definition: point_cloud.h:264
void GetMinMaxIn3DWithRange(const base::AttributePointCloud< PointT > &cloud, const size_t range, Eigen::Matrix< typename PointT::Type, 4, 1 > *min_p, Eigen::Matrix< typename PointT::Type, 4, 1 > *max_p)
Definition: common.h:88
virtual void resize(size_t size)
Definition: point_cloud.h:89
Eigen::Matrix< T, 3, 1 > CalculateCentroid(const base::AttributePointCloud< base::Point< T >> &cloud)
Definition: common.h:133
void ExtractIndicedCloud(const std::shared_ptr< const PointCloudT > cloud, const std::vector< int > &indices, std::shared_ptr< PointCloudT > trans_cloud)
Definition: common.h:69
void GetMinMaxIn3D(const base::AttributePointCloud< PointT > &cloud, const base::PointIndices &indices, Eigen::Matrix< typename PointT::Type, 4, 1 > *min_p, Eigen::Matrix< typename PointT::Type, 4, 1 > *max_p)
Definition: common.h:114
Eigen::Affine3d Affine3d
Definition: base_map_fwd.h:34
const PointT * at(size_t col, size_t row) const
Definition: point_cloud.h:64