えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

perception_pclにpointcloud_to_pcdのROS 2実装を追加しました

最近、OSSLinux界隈を騒がせているxz-utilsの問題(CVE-2024-3094)がありました。手口の地道さ・巧妙さなども相まって信頼性等に大きな疑念を生じさせている事態になっています。

OSSは含まれていないものを探す方が大変なくらいにはソフトウェア構築で必要不可欠な存在となっています。

使用する側も「よくわからんけど動いた」ではダメですね。


…ということで(?)、私もOSSのどこにどんなことをしたのかというのは逐次報告していきます!🫡

(別に高度なことをしているわけではないですが…)


pointcoud_to_pcdのros2ブランチにpcd保存プログラムを作成

ROS 2の点群処理用ライブラリ "ros-perception/perception_pcl" にはROS 1の時代から使用されてきた点群処理ツールが揃っていますが、ROS 2に移植されていないものも多いです。

pointcloud_to_pcd(pointcloudトピックをpcdに保存するやつ)もその一つで、個人的にRealSenseのデータをもうちょっと扱いやすいフォーマットで保存したいなぁと探していたところ、このツールを見つけたのですが、ROS 1のみだったので移植しました。

1週間前にプルリクを投げ、今日マージしてもらいました。

github.com

基本的な使いかた

pointcloudを.pcdに保存するプログラムなので、もちろんpointcloudトピックが出ていることが前提です。

RealSenseとかは比較的入手性がよく精度の良い点群を出してくれるのでおすすめです。


点群(sensor_msgs/msg/PointCloud2)をsubscribeできるようになったら、pointcloud_to_pclの出番です。

ros2 run pcl_ros pointcloud_to_pcd --ros-args -r input:=/cloud_in \
    -p prefix:=abc_ \
    -p rgb:=false

オプションは次のとおりです。

オプション名 役割 デフォルト
prefix ファイルの先頭に付く名称(パスにしてもよい) '' abc_
fixed_frame 別視点で点群を保存したい場合に使用される基準フレーム '' base_link
rgb RGBの点群を保存できるオプション false
binary ASCIIの代わりにバイナリを使用します false
compressed 圧縮します。binary=trueを前提とします。 false

点群の入力は 'input' なので、remapしてください。

実行すると、中断されるまでタイムスタンプを末尾につけてずっとpcdファイルを生成し続けるので、生成し終わったらCtrl + Cで中断します。


生成されたファイルを見たい場合はPCD Viewerで確認します。

pcl_viewer <path to pcd file>

素晴らしい👏👺🐢


Velodyne (32 line) だと1秒に10枚くらい出してくれました。

RealSenseだと結構遅めだったり、よく分からない角度を正面とするので、static_transform_publisherでフレームを追加したり前処理で閾値を決めてフィルタしちゃうと良いでしょう。

楽しい点群ライフを👋