はじめに
連載の第2回に引き続き、Raspberry Piで動作する小型ロボット「GoPiGo」を使って、遠隔見守りロボットを作っていきます。
前回は、この連載を通じて利用するロボット用のフレームワークであるROS(Robot Operating System)の基本的な要素の説明や、新たな機能の組み込みを行いました。今回は、自宅などのローカルエリアネットワーク内で、GoPiGoをスマホで遠隔操作できるようにしたいと思います。
今回のゴール
完成イメージは下図のようになります。GoPiGoに搭載したUSBカメラから周辺の映像を取得し、ユーザがスマホでその映像を見ながらジョイスティックでGoPiGoを操作できるようにします。
なお、今回はローカルエリア内のみに制限されていますが、第1回の遠隔見守りロボットの概要の項でも解説した通り、最終的にクラウドを経由することで外出先など、どこにいてもロボットの遠隔操作ができるようにします。そちらは、本連載の第4回以降で詳しく解説します。
ではさっそくはじめましょう!
今回必要なROSパッケージのインストール
GoPiGoをスマホで遠隔操作できるようにするために、接続されているUSBカメラの画像を取得できるようにしたり、スマホ上に画像を表示できるようにしたりと、GoPiGoに新しい機能をいくつか追加していきます。それらの機能はROSにデフォルトでは入っていませんが、追加パッケージとして用意されているので、GoPiGoにそれらをインストールしましょう。
まず、手元のPCからGoPiGoにSSH接続します。パスワードはデフォルトでubuntuです。
$ ssh ubuntu@GoPiGoのIPアドレス
ログイン後、今回の遠隔操作で必要になるパッケージをすべてインストールしましょう。
$ sudo apt-get update $ sudo apt-get install ros-indigo-rosbridge-suite ros-indigo-roswww ros-indigo-libuvc-camera ros-indigo-web-video-server $ rospack profile
1. カメラ映像をブラウザで見てみる
インストールしたパッケージの機能を1つずつ理解するために、まずは簡単な構成を作って解説していきます。ここではまず、GoPiGoに接続されたUSBカメラ映像をブラウザに表示します。
USBカメラを使う準備
今回、USBカメラ画像の取得には、ROSのlibuvc_cameraパッケージを利用します。このパッケージは、多くのUSBカメラで使われているUSB Video Class(UVC)規格のROSインターフェースです。このパッケージにより、取得した画像をROSで扱うことができるようになります。
このノードの実行時にデバイスの読み込み・書き込みのパーミッションがないというエラーが出ます。chmodコマンドで毎回パーミッションを与えてあげるのは面倒なので、利用するUSBカメラのデバイス情報をカーネルに永続的に教えてパーミッション変更なしでカメラにアクセスできるようにしましょう。
まず、USBカメラをGoPiGoに接続し、USB接続された機器の情報を表示します。
$ lsusb
この中で、自身がお使いのUSBカメラを探し、ID以下の数値(ベンダID:プロダクトID)をメモしておきます。
例えば、著者が使っているUSBカメラ(Logicool HD Webcam C270)は次のようにベンダIDが046d、プロダクトIDが0825と表示されました。
$ lsusb Bus 001 Device 007: ID 046d:0825 Logitech, Inc. Webcam C270 Bus 001 Device 005: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter ~以下略~
次に、新規に/etc/udev/rules.d/99-uvc.rulesというファイルを作り、下記をコピペしてください。ここで、ATTRS{idVendor}とATTRS{idProduct}以下に、先ほどメモしたベンダIDとプロダクトIDを入力してください。例えば筆者のUSBカメラの場合は下記のようになります。
SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0825", MODE="0666"
保存後、USBカメラをいったん抜いて差し直してください。これで、パーミッション変更なしでカメラにアクセスできるようになりました。