ROSとWebカメラの接続と活用法:動かして学ぶ簡単ROS入門③

動かして学ぶ簡単ROS入門

2回目に続いて、3回目でも実際にROSを触りながら理解を深めていきたいと思います。今回はPCの内蔵カメラもしくはWebカメラの画像をROSを使って表示させることを行っていきます。
Webカメラの画像をROSで表示させるために、まずVirtualBoxでUSBカメラを使用するための設定を行います。
これらの設定の完了後、ROSでのカメラ画像表示を行います。

1.VirtualBoxでWebカメラを使用するための設定

VirtualBoxでWebカメラにアクセスするための設定を行っていきます。VirtualBoxの拡張パッケージをVirtualBoxのダウンロードページからダウンロードします。

VirtualBoxで拡張パッケージのインストールを行います。VirtualBoxのホームにある「ツール」をクリックし、「インストール」ボタンをクリックします。

先ほどダウンロードしたパッケージを選択します。選択したら画面の選択肢に沿ってインストールを進めてください。

インストールが完了すると拡張パッケージがリストに追加された状態になります。

次にUSBの設定を行います。対象の仮想マシンの「設定」ボタンをクリックします。
設定の中に「USB」という項目があるので、そこを開いて、USBデバイスを追加します。追加ボタンを押すといくつかデバイスが表示されると思うのですが、その中でカメラを示しているものを選んでください。

仮想マシンを立ち上げ、メニューバーのデバイスからUSBカメラを追加します。

これで、仮想マシン上のUbuntu内でWebカメラを使用できるようになりました。

2.ROSでWebカメラを表示する

今回もターミナルを3つ立ち上げて、それぞれプログラムを実行していきます。まず、Webカメラを動かす上で必要になるROSパッケージを追加でインストールします。

$ sudo apt install ros-noetic-usb-cam

3つのターミナルそれぞれで以下を順番に実行していきます。
ウィンドウ1

$ roscore

ウィンドウ2

$ rosrun usb_cam usb_cam_node 

ウィンドウ3

$ rosrun image_view image_view image:=/usb_cam/image_raw

3つ目のプログラムを実行すると、以下のようにWebカメラの画像が映ったウィンドウが表示されます。

3.ROSのWebカメラ表示の動作説明

ここで、先ほど動かしたプログラムについてどのようなプログラムが動いているのかを説明していきます。
roscoreは前回の記事でも説明したようにROSを動かす際の必須となるプログラムです。
次に「rosrun usb_cam usb_cam_node」についてですが、最初に出てくるrosrunがROSの基本的な実行コマンドの一つで、パッケージ内のノードを実行するためのコマンドとなっています。
ROSはノードというプログラムの単位で実行されるという話をしましたが、さらにこのノードを複数まとめてパッケージという単位でプログラムを管理しています。rosrunはパッケージとノードの名前を指定することで、ROSの中でインストールされているプログラムを実行することができます。

$ rosrun [パッケージ名] [ノード名]

つまり、今回実行した「rosrun usb_cam usb_cam_node」はROSのusb_camパッケージの中にあるusb_cam_nodeというノードを実行せよ、という指示を行っているということになります。
次にusb_camパッケージとusb_cam_nodeについてです。先ほども説明したようにusb_camはROSのパッケージの1つです。試しに以下のコマンドを実行してみてください。

$ rospack list

以下のようにターミナル上に現在インストールされているROSのパッケージリストが表示されます。

下にスクロールしてくとusb_camもパッケージのリストに含まれていることが分かります。このパッケージに含まれるusb_cam_nodeはWebカメラの画像を取得して、画像のトピックをパブリッシュするプログラムです。前回トピックについて説明しましたが、このノードから「/usb_cam/image_raw」という名前のトピックで画像データが配信されています。
そして最後の「rosrun image_view image_view image:=/usb_cam/image_raw」というコマンドですが、こちらも同様にimage_viewというパッケージのimage_viewというノードを実行するというコマンドになります。
image_viewは画像トピックを受信して、GUI上に表示を行います。どのトピックの画像を表示すべきかを指示するために、実行時に「image:=/usb_cam/image_raw」という記述を追加して、表示する画像のトピック名を指示しています。

4.まとめ

ロボットを扱う上で必須となるセンサをROSでどのように扱えるかを見るために、WebカメラをROSを用いて表示させるということを行ってきました。
カメラのような基本的なセンサに関してはROSで既に用意されているパッケージを使うことで簡単にカメラ表示を行うことができることが分かったと思います。
ROSにはこのようにロボットを扱う上で便利なパッケージがいくつも揃っており、それらを組み合わせるだけで、ある程度の機能を達成することが可能です。
次回は深度カメラというセンサを用いて、カメラでは取得できない3次元的な情報の取得と表示を行っていきたいと思います。

関連記事

特集記事

コメント

この記事へのコメントはありません。

TOP