gggggraziegrazie

graizegrazieさんのやったこと、学んだことを記録する雑記帳です

PCLの中のGeneralized ICPの使い方

GICPをテストコードを元に使ってみたのですが、うまく収束せず困っていました。そこでgithub上で何かいいサンプルはないかと思って探していたところ、ちょうどよいものがありましたので共有します!

ETH ZurichのAutonomous system labが公開しているrepositryに、robust_point_cloud_registrationというものがあり、GICPなどのwrapperや彼らのオリジナルのregistrationアルゴリズムが提供されています。このrepositryの中のgicp.ccで、GICPのwrapperクラスの実体が書かれています。この実体中の作法通りにパラメータや関数を使うことで、無事にGICPを収束させることができました。ご参考になりましたら幸いです。

上記パッケージの中で使われている一部パラメータについて軽く調べた結果を記載します。

  • gicp_transormation_espilon

GICPのループの中で、収束のしやすさを決めています。現在と一個前の間でTransformationの平行移動成分の差を取った時、それぞれの成分に対してこの値の逆数をかけたものが閾値を超えているかで収束判定を行います。* robust_point_cloud_registrationでは使われていないが、setTransformationRotationEpsilonで定める値は、回転成分で同様の役割を果たす。

  • gicp_maximum_correspondence_distance

source - target間で許容される最大距離。この値以上に離れている場合、その点は無視される

  • gicp_use_reciprocal_correspondence

通常はsource -> targetに合わせに行くが、この値がtrueの時、target -> sourceも合わせに行く(相互に, reciprocalにtransformationを確認する)

github.com

更新ログ

  • 2018/12/3 パラメータに関する技術を追加