ROSでPCLのチュートリアルを試せるパッケージ作った
ROS Advent Calendar 2019 の11日目の記事です。
PCLを勉強する際に生まれたROSパッケージを紹介します。
↓これ
事の発端
Point CloudどシロウトのわいはPCL(Point Cloud Library)を使おうと思ってチュートリアルページを見たんや。*1
ふむふむ。FilteringとかSegmentationとかいろんな処理があるんやな〜。 ほなとりあえずFilteringのチュートリアルでも見てみるか。
なんやこれ!
PCLわからんすぎわろた。このチュートリアルなんやねん。わいは手軽にチュートリアルしたいんや!!
PCL? ちっさいつぶつぶのデータが集まったやつやろ!?チュートリアルやるとええ感じに処理されるのが学べるんやろ???
せやけどなんだこれ!?
実行結果文字列やん!?
わかるかこないなもん!!!
ROSって知ってるかい?
ROS?
おおおー!!!ええのがあるやん!
これで解決や!
さっきのチュートリアルのコードをコピペして実行したらええやん!
これで楽勝・・・
わかるかぁあああああああああ!!!
pcl_tutorials_rosパッケージを作りました
茶番はほどほどにして、ここから本題です。
PCL公式のチュートリアルはコードブロックごとに説明が書かれてて良いのですが、 ページをパッと見ただけでは何をやってるのかよくわかりません。 (説明文を読んでもわかりません)
文字とか数字ではなく、画像 or 動画で結果を見たいものです。
また、せっかくならROSの環境で動かしたいです。 RVizでビジュアライズしたいし、欲を言えばGazebo(シミュレータ)でもPCLを使いたいです。
さらにいえば、そこらへんに転がっているRealSense(インテルのデプスカメラ)を使って PCLのチュートリアルを試したいです。
まとめるとこんな感じです。
- ROS環境でPCLのチュートリアルを進めたい
- チュートリアルの実行結果をRVizに描画したい
- Gazebo環境にカメラやモノを置いてチュートリアルを実行したい
- RealSenseを使ってチュートリアルを実行したい
さて、こんなパッケージがないかな〜とググりましたが、いいものが見つかりませんでした
コードの断片は色々落ちてるのですが、自分の要望を全て叶えてくれるものは見つかりませんでした。
ないなら作ればいい 〜車輪の再発明〜
ということでROSパッケージを作りました。
このパッケージの特徴は以下の通りです。
- PCLチュートリアルを実行するためのROSパッケージ
- 実行結果をRVizに描画できる
- Gazeboでチュートリアルを実行できる
- RealSenseを使ってチュートリアルを実行できる
- 2019/12/11時点ではD415のみサポート
- PCDファイルを使ってチュートリアルを実行できる
さっそく使ってみましょう。
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
の引数によって実行環境を変更できるようになってます。
チュートリアルの実行
それではTutorialsページに移動しましょう。
今はFiltering、 Segmentation、 KdTree の3項目が試せるようになってます。
これらの項目はPCLのチュートリアルページに沿うように構成されています。
今回はDownsampling a PointCloud using a VoxelGrid filter を実行してみます。 (茶番で実行結果が文字列やんけ!って言ってたやつです)
次のコマンドを実行します
roslaunch pcl_tutorials_ros example.launch example:=filtering number:=1 gazebo:=true
実行すると、GazeboとRVizが起動します。
RViz画面では左側に入力のPointCloudデータが、右側に加工後のPointCloudデータが表示されます。
ダウンサンプリングできてることが一目瞭然ですね!
また、Gazeboに置いてあるオブジェクトは動かすことができます。
ブログ用 pic.twitter.com/54z8XBUsWR
— と雷 (@chmod_x_akasit) 2019年12月10日
同じチュートリアルを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
pcl_tutorials_ros パッケージのこれから
もし、すでに似たようなパッケージがあるぞ!!!と言いたい方がいれば教えてください!!!
すぐにこのパッケージを放棄してそちらに移動します!!!
他に似たようなパッケージがなければ、チュートリアルのコンテンツを増やしていこうと思います(増やす。増やすとは言ったが…)。 コントリビューションも大歓迎です。
個人的にコマンドを一行叩くだけでチュートリアルを試せるというのが魅力的なので、この形を崩さないように 最終的にはPCLのチュートリアルを全て試せるようにしたいと思います。(何年後?)
まとめ
- PCLのチュートリアルよくわからない
- pcl_tutorials_rosパッケージを作りました
- パッケージを作ることでPCLちょっと理解できた
- pcl_tutorials_rosに似たパッケージがあれば教えてください
- これ以上の車輪は再発明したくない・・・