画像認識によって検出をしたBoundingBoxを元に点群を重ね合わせることで3次元座標(TF)化するパッケージです.
基本的にRGB-Dカメラによって検出したBoundingBox(sobits_msgs/BoundingBoxes)と,その画像(sensor_msgs/Image),そのカメラの点群(sensor_msgs/PointCloud2)を用いて3次元化します.
Note
このパッケージは基本的に画像処理・物体認識をしたあとに使うものなので,そのパッケージのinstall.shによってインストールされます. 例えばYOLOによって検出した物体を3次元座標にするため,YOLOのパッケージのinstall.shによってインストールされます.
(上に戻る)
ここで,本リポジトリのセットアップ方法について説明します.
これを依存しているパッケージのinstall.shに書き込んでください.
まず,以下の環境を整えてから,次のインストール段階に進んでください.
System | Version |
---|---|
Ubuntu | 20.04 (Focal Fossa) |
ROS | Noetic Ninjemys |
Python | 3.8 |
Note
Ubuntu
やROS
のインストール方法に関しては,SOBITS Manualを参照してください.
(上に戻る)
- ROSの
src
フォルダに移動します.$ cd ~/catkin_ws/src
- 本レポジトリをcloneします.
$ git clone https://github.com/TeamSOBITS/bbox_to_tf.git
- パッケージをコンパイルします.
$ cd ~/catkin_ws/ $ catkin_make
(上に戻る)
このパッケージは基本的に単体では起動せず,bbox_to_tf.launchを必用な画像処理パッケージのlaunchからincludeして使用します.
そのため,ここではbbox_to_tf.launchの中身や構成に関して説明します.
-
node_name
node_nameは,3次元化するノードの名前です.
3次元化したい画像認識ノードが1つとは限らないので,複数でもノード名が競合しないようにノード名を指定できるようになっています. 例えばyolov8とssdによる画像認識からそれぞれTF化したいとき,yolov8_to_tf_nodeとssd_to_tf_nodeのように競合しないようにすることができます. -
base_frame_name
base_frame_nameは3次元化する上で何を基準フレームとして座標を得るかです.
ロボットの座標を基準にする場合,base_footprintとなる.
ロボットの足元の中心を原点(0,0,0)として各認識した物体の3次元座標を生成します. -
bbox_topic_name
bbox_topic_nameはBoundingBoxのトピック名です. 具体的には,sobits_msgs/BoundingBoxes型のメッセージが飛んでいるトピック名を指定する.
これはSOBITSが独自に作ったカスタムROSメッセージであるためsobits_msgsをgit cloneしてある必用があります.
しかし,このパッケージに依存しているパッケージのinstall.shで既にgit cloneされているはずです. -
cloud_topic_name
cloud_topic_nameは点群のトピック名です. 具体的には,sensor_msgs/PointCloud2型のメッセージが飛んでいるトピック名を指定する.
BoundingBoxの情報から,その領域に点群を飛ばします. そのとき,物体の距離感とともに点群のクラス分けを行い位置を取得します. -
img_topic_name
img_topic_nameはこの画像認識をしている画像のトピック名です.
具体的には,sensor_msgs/Image型のメッセージが飛んでいるトピック名を指定する.
画像と点群の関係を見るために参照している. -
execute_default
execute_defaultはデフォルトでTFを出すかどうかです.
OFF(False)にしていても,使うときにrun_ctrでON(True)にすることもできる. -
cluster_tolerance
どの程度離れた点群までは同一の物体とみなすかのしきい値です.
BoundingBox内に点群を飛ばした場合に,対象物に点群があたり,しきい値いないにある点群を1物体とみなしクラス分けを行います. そのため,あまり大きくすると点群1つ1つの探索範囲が広がり処理が遅くなってしまいます. -
min_clusterSize
どの程度の数以下の点群の集まりは対象物の点群から棄却するかのしきい値です.
点群をクラス分けした際に,この数以下の点群数だったらノイズとみなし棄却します. -
max_lusterSize
どの程度の数以上の点群の集まりは対象物の点群から棄却するかのしきい値です.
点群をクラス分けした際に,この数以上の点群数だったら全く別の対象物(物体だったら床の点群など)を捉えてしまったとみなし棄却します. -
noise_point_cloud_range
対象の物体の点群からノイズ面を除去し,中心座標に近づけるため除去量です.
クラス分けした点群から物体を抽出した後,床や背後の壁,左右の壁などx,y,z方向に点群をこの値分,更にカットします. こうすることで,より物体の部分のみにかかる点群に絞ることができます. しかし値を大きくしすぎると,物体分の点群まで多く削いでしまうため注意が必用です.
Note
基本的にbbox_to_tf.launchを修正するのではなく,このパッケージに依存しているパッケージのlaunchファイルにincludeで呼び出すようにして,競合をさけてください.
(上に戻る)
run_ctrとしてTF化するかしないかのON/OFF(True/False)を切り替えることができます. 基本的に,競合しないようにnode_nameに依存した命名となる.
- ON/OFF切り替え
node_name + "/run_ctr" (Service: sobits_msgs/RunCtrl)
TF化する他に,base_frame_nameから見た座標や各物体にかかる点群をPublishしています. 基本的に,競合しないようにnode_nameに依存した命名となる.
-
座標
node_name + "/object_poses" (Topic: sobits_msgs::ObjectPoseArray)
-
点群
node_name + "/object_poses" (Topic: pcl/PointCloud(pcl/PointXYZ))
(上に戻る)
現時点のバッグや新規機能の依頼を確認するためにIssueページ をご覧ください.
(上に戻る)