ここからは,PCLで役に立つ関数たちを紹介
- pcl_common
- pcl::getMinMax3D
- pcl::compute3DCentroid
- NearestNeighborSearch
- K nearest neighbor search
- Neighbors within radius search
- pcl::fromROSMsg/pcl::toROSMsg
- pcl::fromROSMsg
- pcl::toROSMsg
- transformLaserScanToPointCloud
PCLのライブラリの大半で使用される一般的なデータ構造とメソッドたち
pcl_commonの中からいくつか紹介
指定された点群の3つの(xyz)次元それぞれの最小値と最大値を取得します.
void pcl::getMinMax3D ( const pcl::PointCloud< PointT > & cloud,
const std::vector< int > & indices,
Eigen::Vector4f & min_pt,
Eigen::Vector4f & max_pt
)
[ Parameters ]
cloud: 点群データメッセージ
indices: クラウドから使用するポイントインデックスのベクトル
min_pt: 結果の最小値
max_pt: 結果の最大値
- Documentationはこちら
※ 引数の取り方には複数あるので上を参考にすること
PointCloudの重心を計算します.
unsigned int pcl::compute3DCentroid ( const pcl::PointCloud< PointT > & cloud,
Eigen::Matrix< Scalar, 4, 1 > & centroid
)
[ Parameters ]
cloud: 点群データメッセージ
centroid: 結果の重心
- Documentationはこちら
※ 引数の取り方には複数あるので上を参考にすること
最近傍探索をする関数たち
K nearest neighbor search
指定されたポイントのk個の最近傍点を検索します.
virtual int pcl::KdTree< PointT >::nearestKSearch (
const PointT & p_q,
int k,
std::vector< int > & k_indices,
std::vector< float > & k_sqr_distances
)
[ Parameters ]
p_q: 指定されたポイント
k: 検索する最近傍点の数
k_indices: 隣接するポイントの結果のインデックス(事前にkにサイズ変更する必要があります!)
k_sqr_distances: 隣接するポイントまでの結果の平方距離(事前にkにサイズ変更する必要があります!)
[ Return ]
見つかった最近傍点の数
Neighbors within radius search
指定されたポイントから指定された半径内にあるすべての最近傍点を検索します.
virtual int pcl::KdTree< PointT >::radiusSearch (
const PointT & p_q,
double radius,
std::vector< int > & k_indices,
std::vector< float > & k_sqr_distances,
unsigned int max_nn = 0
)
[ Parameters ]
p_q: 指定されたポイント
radius: p_qのすべての近傍を囲む球体の半径
k_indices: 隣接する点の結果のインデックス
k_sqr_distances: 結果として得られる隣接点までの距離の平方
max_nn: 与えられた場合,返される隣接の最大値をこの値に制限します.max_nnが0または入力クラウド内のポイントの数よりも大きい数に設定されている場合,半径内のすべての近隣が返されます.
[ Return ]
radiusで見つかった最近傍点の数
sensor_msgs :: PointCloud2 を pcl :: PointCloud < T >に変換する関数
void pcl :: fromROSMsg(
const sensor_msgs :: PointCloud2& cloud,
pcl :: PointCloud < T >& pcl_cloud
)
pcl :: PointCloud < T > を sensor_msgs :: PointCloud2に変換する関数
void pcl::moveFromROSMsg(
sensor_msgs::PointCloud2 & cloud,
pcl::PointCloud< T > & pcl_cloud
)
URGなどのLaserScan型をPointCloud2型に変換する関数.これによりLaserScan型のデータもPCLで扱うことができる.
void laser_geometry::LaserProjection::transformLaserScanToPointCloud(
const std::string & target_frame,
const sensor_msgs::LaserScan & scan_in,
sensor_msgs::PointCloud & cloud_out,
tf::Transformer & tf
)
[ Parameters ]
target_frame: 結果の点群のフレーム
scan_in: 入力レーザースキャン
cloud_out: 出力点群
tf: 変換の実行に使用するtf :: Transformerオブジェクト