Skip to content
Harumo Sasatake edited this page Oct 19, 2018 · 8 revisions

ビューワー 点群を表示する

点群pcl::PointCloud<> を表示するために,ビューワーが存在します. このビューワーはとてもかんたんに利用することが可能です.

たとえば,pcl::PointCloud<pcl::PointXYZ> を表示したい場合は

pcl::visualization::PC:Visualizer viewer("viewer_name");
viewer.addPointCloud<pcl::PointXYZ>(point_cloud, "cloud_name");

というふうにたった2行で表示させることが可能です.

## 点群の設定を変更 例えば,この点群は赤色で表して,この点群は青色であらわしたいということはよくあることなので, もちろんそのしくみはpclに存在します.

点群の色を変えたい

使用している点群がpcl::PointXYZの場合を例に話をします. pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> を使用します.

pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_color_handler(cloud_ptr, 255, 255, 255);
viwer.addPointCloud(cloud_ptr, cloud_color_handler, "cloud_name");

こんな感じで,色はRGBの0〜255で表せます.最後に表示したい点群と一緒にビューワーに突っ込めば終了です.

点群の大きさを変えたい

点群の点の大きさを変えたいというのはよくある話なので,下記の関数を使用して変更してください.

viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "cloud_name");

ここで,2というのが点のサイズで,cloud_nameはviewer.addCloud関数のときに引数として与えた点群の名前と同じものを入れてください.

その他の設定

関数 説明
setPosition(int x, int y) ディスプレイ上のどこに表示するかを設定する.
initCameraParameters() カメラパラメータを初期値に設定する
addCoordinateSystem(double scale = 1.0, std::string id = "ref", int viewport = 0) 原点と基底の設定ですね,あまり使わないのではないでしょうか.すべての引数がオーバーロードされているので,使う場合もaddCoordinateSystem()だけでいい気がします
setBackGroundColor(int R, int G, int B, int id = 0) バックグラウンドの色を変更する関数.基本的に変更する気が起きないので使わない
wasStopped() キーボードのqが押されるまで,viewerを表示します.使い方は下記参照
spinOnce() while文の中で一度だけviewewを更新し,表示する.使い方は下記参照

wasStopped()とspinOnce()は組み合わせて下記のように使います.

while(!viewer.wasStopped()){
    //do something
    viewer.spinOnce();
}

箱を表示

点群を囲うようなバウンディングボックスを表示させたい場合は,バウンディングボックスを表示するために箱を使います. ビューワー上に箱を表示させることはとてもかんたんです.

このようにしてください.

//自分の設定したい箱の位置と姿勢をどこかから持ってきてください
float x, y, z;
Eigen::Matrix3f rotational_matrix;

//箱の位置を設定
Eigen::Vector3f cube_position(x, y, z);
//箱の姿勢を設定.回転行列からクォータニオンを生成している.
Eigen::Quaternionf quat(rotational_matrix);

//Cubeをビューワーに設定
viwer.addCube(position, quat, x_length, y_length, z_length, "cube_name");

ここで,double型のx_length,y_length,z_lengthは各辺の長さで,単位はmです.

この他にもaddCube関数は下記のようなバージョンもあります.

viewer.addCube(position, quat, x_max_point, x_min_point, y_max_point, y_min_point, z_max_point, z_min_point, "cube_name");

こちらのほうが引数の設定がわかりやすいかもしれませんね. x_max_pointなどの点の座標を表す引数はdouble型です.

しかし,実際に表示してみればわかりますが, 箱は面が塗りつぶされてしまっていて,中が見れません. 点群の表示において,みなさんが箱を使用するときはワイヤフレームをお望みだと思います. その場合は,下記の関数を使用することで可能です.

viewer.setRepresentationToWireFrameForAllActors();

線を引く

線を引きたいときは下記の関数を使用してください.

viewer.addLine(pcl::PointXYZ center, pcl::PointXYZ vector, double r, double g, double b, std::string id = "line", int viewport = 0)

centerは表示したいラインの根本,vectorは先端の点と考えてください.r,g,bはこれまで通り色です.ただ,0~1の値を取りますので注意してください.

Clone this wiki locally