最近、OSS・Linux界隈を騒がせている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週間前にプルリクを投げ、今日マージしてもらいました。
基本的な使いかた
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でフレームを追加したり前処理で閾値を決めてフィルタしちゃうと良いでしょう。
楽しい点群ライフを👋