物体検出で取得したBoundingBoxをROSでpublishする方法

物体検出で取得したBoundingBoxをROSでpublishする方法

今回は物体検出で取得したBoundingBoxをROSでpublishする方法について記載していきます。

物体検出した場合、その結果のBoundingBoxなどをどのように連携して利用するかというところが課題になってくると思います。今回はROSのpublishでデータを送信し、それを受信してモーターを動作させるようなプログラムを作成しましたので、それの一部を抜粋して紹介します。

publishまでできればモーター側としてはデータを利用するだけとなります。よって、物体検出をするプログラムのほうでBoundingBoxのデータを作成してpublishしていきたいと思います。

前提

・ROSの環境が構築されている

・物体検出のプログラムが用意されていること

メッセージファイルの作成

まず、今回送信するメッセージファイル(BoundingBox.msg)をフォルダを作成して格納しておきます。

物体検出で検出したものは複数である可能性が高いため、上記をさらに配列にして送信できるファイル(BoundingBoxes.msg)も用意しておきます。今回ヘッダーは含めていません。

メッセージファイルを利用できるようにビルドする

上記で用意したメッセージファイルはそのままでは利用することができません。なので以下のファイルを編集して利用可能な状態にしていきます。

まずはパッケージファイル(package.xml)の以下の箇所のコメントアウトを外して保存します。編集後が右となります。

次にビルドファイル(CMakeLists.txt)のほうも編集して保存します。編集後が右となります。

追加したメッセージファイルに合わせて以下は変更します。今回は「BoundingBox.msg」と「BoundingBoxes.msg」を追加しています。

上記までの準備が完了したらCatkinのワークフォルダまで戻ってから「catkin_make」でビルドを実行します。

ビルドが正常に完了したらメッセージファイルを利用できる状態になっています。試しに以下を実行してみます。

このように表示されれば正しくビルドできています。

 

追加したメッセージファイルを利用する(例)

次に追加したメッセージファイルを利用する方法について記載していきます。メッセージファイルを送信する側のプログラムの例は以下のようになります。なお、以下はプログラムの一部を抜粋しただけの内容となっておりますので、そのままコピペしても動きません。BoundingBoxの送信部分だけ参考にしていただければと思います。

物体検出したら「boundingbox = BoundingBox~」の部分でバウンディングボックスのインスタンスを作成し、「Boxes.append(boundingbox)」で配列に追加していきます。

すべてのバウンディングボックスを追加し終わったらループを抜け、「motor.publish(array_forPublish)」の部分でバウンディングボックスの配列をまとめてパブリッシュしています。

上記を実行してパブリッシュされていることを確認したい場合はこちらを実行します。

次にサブスクライブ側で受信したデータを利用するには例えば次のように行います。

参考にした記事

独自のメッセージファイルの作り方

Pythonのインスタンスの基礎を現役エンジニアが解説【初心者向け】

1つ星 この記事が役に立ったらいいねをお願いします!
読み込み中...



AIカテゴリの最新記事