RoboTry

ROSを使ってロボットを動かすぞ

ROSでPCLのチュートリアルを試せるパッケージ作った

ROS Advent Calendar 2019 の11日目の記事です。

qiita.com

PCLを勉強する際に生まれたROSパッケージを紹介します。

↓これ

github.com

事の発端

Point CloudどシロウトのわいはPCL(Point Cloud Library)を使おうと思ってチュートリアルページを見たんや。*1

www.pointclouds.org

ふむふむ。FilteringとかSegmentationとかいろんな処理があるんやな〜。 ほなとりあえずFilteringのチュートリアルでも見てみるか。

www.pointclouds.org

なんやこれ!

PCLわからんすぎわろた。このチュートリアルなんやねん。わいは手軽にチュートリアルしたいんや!!

PCL? ちっさいつぶつぶのデータが集まったやつやろ!?チュートリアルやるとええ感じに処理されるのが学べるんやろ???

せやけどなんだこれ!?

実行結果文字列やん!?

わかるかこないなもん!!!

ROSって知ってるかい?

ROS?

wiki.ros.org

おおおー!!!ええのがあるやん!

これで解決や!

さっきのチュートリアルのコードをコピペして実行したらええやん!

これで楽勝・・・

f:id:macakasit:20191211081001p:plain

わかるかぁあああああああああ!!!

pcl_tutorials_rosパッケージを作りました

茶番はほどほどにして、ここから本題です。

PCL公式のチュートリアルコードブロックごとに説明が書かれてて良いのですが、 ページをパッと見ただけでは何をやってるのかよくわかりません。 (説明文を読んでもわかりません)

文字とか数字ではなく、画像 or 動画で結果を見たいものです。

また、せっかくならROSの環境で動かしたいです。 RVizでビジュアライズしたいし、欲を言えばGazebo(シミュレータ)でもPCLを使いたいです。

さらにいえば、そこらへんに転がっているRealSenseインテルのデプスカメラ)を使って PCLのチュートリアルを試したいです。

まとめるとこんな感じです。

さて、こんなパッケージがないかな〜とググりましたが、いいものが見つかりませんでした

コードの断片は色々落ちてるのですが、自分の要望を全て叶えてくれるものは見つかりませんでした。

ないなら作ればいい 〜車輪の再発明

ということでROSパッケージを作りました。

github.com

このパッケージの特徴は以下の通りです。

さっそく使ってみましょう。

Installation

READMEに従って作業します。

まずは、パッケージのクローンと依存関係のインストールです。

# Clone this package
cd ~/catkin_ws/src
git clone https://github.com/ShotaAk/pcl_tutorials_ros

# Install package dependencies
rosdep install -r -y --from-paths . --ignore-src

つづいて、パッケージのビルドです。

cd ~/catkin_ws
catkin_make

ビルドが終わったら環境変数をセットアップします。

# setupファイルは使用環境に合わせて変更してください
source devel/setup.zsh 

最後に、pointclouds.orgからPCDファイルをダウンロードします。

sudo apt install wget
cd ~/catkin_ws/src/pcl_tutorials_ros/samples
./download.sh

これで環境は整いました。

パッケージの使い方

READMEにはRealSense D415で実行する方法、Gazeboで実行する方法、PCDファイルで実行する方法の3つが書かれています。

# RealSense D415で実行
roslaunch pcl_tutorials_ros example.launch realsense:=true

# Gazeboで実行
roslaunch pcl_tutorials_ros example.launch gazebo:=true

# PCDファイルで実行
roslaunch pcl_tutorials_ros example.launch use_file:=true file:=pcl_logo.pcd

コマンドを見て分かるとおり、example.launch引数によって実行環境を変更できるようになってます。

f:id:macakasit:20191211083336p:plain
RealSenseの実行例

f:id:macakasit:20191211114233p:plain
Gazeboの実行例 テーブルとカメラと、3つのオブジェクトが置いてあります

f:id:macakasit:20191211083639p:plain
PCDファイルの実行例

チュートリアルの実行

それではTutorialsページに移動しましょう。

今はFilteringSegmentationKdTree の3項目が試せるようになってます。

これらの項目はPCLのチュートリアルページに沿うように構成されています。

今回はDownsampling a PointCloud using a VoxelGrid filter を実行してみます。 (茶番で実行結果が文字列やんけ!って言ってたやつです)

次のコマンドを実行します

roslaunch pcl_tutorials_ros example.launch example:=filtering number:=1 gazebo:=true

実行すると、GazeboとRVizが起動します。

f:id:macakasit:20191211084605p:plain

RViz画面では左側に入力のPointCloudデータが、右側に加工後のPointCloudデータが表示されます。

f:id:macakasit:20191211084851p:plain

ダウンサンプリングできてることが一目瞭然ですね!

また、Gazeboに置いてあるオブジェクトは動かすことができます。

同じチュートリアルPCDファイルで試したいときはlaunchファイルの引数を変えるだけでOKです。

# roslaunch pcl_tutorials_ros example.launch example:=filtering number:=1 gazebo:=true

roslaunch pcl_tutorials_ros example.launch example:=filtering number:=1 use_file:=true file:=pcl_logo.pcd 

f:id:macakasit:20191211085912p:plain

pcl_tutorials_ros パッケージのこれから

もし、すでに似たようなパッケージがあるぞ!!!と言いたい方がいれば教えてください!!!

すぐにこのパッケージを放棄してそちらに移動します!!!

他に似たようなパッケージがなければ、チュートリアルのコンテンツを増やしていこうと思います(増やす。増やすとは言ったが…)。 コントリビューションも大歓迎です。

個人的にコマンドを一行叩くだけでチュートリアルを試せるというのが魅力的なので、この形を崩さないように 最終的にはPCLのチュートリアル全て試せるようにしたいと思います。(何年後?)

まとめ

  • PCLのチュートリアルよくわからない
  • pcl_tutorials_rosパッケージを作りました
    • ROSでPCLのチュートリアルを動かせます
    • 実行するコマンドは1行だけです
    • 引数を変えることで、サンプルの種類、実行環境(RealSense、Gazebo、PCDファイル)を変更できます
  • パッケージを作ることでPCLちょっと理解できた
  • pcl_tutorials_rosに似たパッケージがあれば教えてください
    • これ以上の車輪は再発明したくない・・・