EdisonにてWebカメラを有効にし、mjpg-streamerで映像を配信してみました。Edisonを使ったデモとして、そのWebカメラにサーボモーターを2つ取り付け、Web経由でパン・チルト(水平方向と垂直方向)を制御してみました。全体像は下図のようになります。Pro6本)が見えます。コントローラーはPC、タブレット、スマートフォンなどのブラウザです。動作状況の動画はこちらになります。pcDuinoを用いました。この組み立て方は公式の解説にあります。必要なネジが全然足りない(と思う)2つのサーボSG-90の品質が悪く、最初から正常動作しないことがあるのように、なかなか骨のあるキットです。ちなみにサーボSG-90は秋月やamazonなどでも追加注文できますが、店によってはバージョン違いなのかサーボのケースサイズやサーボホーンの径が異なり、さらに加工が必要になったりします。私の場合、SG-90を計12個入手して、正常動作したものは10個でした。」で紹介した方法では映像配信できません。C210を加工して取り付けました。Logicoolのものなら大抵大丈夫だと思います(今にして思えば、もっと画質の良いものにすれば良かったかも)。Edisonと接続します。いくつかコメントします。USBカメラを使うため、電源は7V~15VをJ21に入力します。バッテリーを用いたかったので、Enelooop6本を用いることにしました。Proにしましたが、これはお好みで。サーボモーターは5Vで駆動するため、レギュレータTA4805Sで5Vを作ります。これは手元にあったものをそのまま用いました。Edisonからは下記の5つの信号を引っ張りだしました。Boardにケーブルを直接半田づけしました。J17-1:サーボ用PWMJ18-1:サーボ用PWMJ18-2:GPIO。プルアップされた入力として用いて、シャットダウンスイッチに利用します。GuideのPDFファイルを参考にしてください。サーボモータ用に出力するPWM信号は1.8Vなので、サーボモータに与えるために5Vにレベル変換します。これも手元にあった「8ビット双方向ロジックレベル変換モジュール」を用いました。PCとの接続は、J3のシリアルコンソールにより行います。Edison上での作業になります。EdisonでWebカメラを有効にしmjpg-streamerで映像を配信してみた」に基づいてWebカメラの映像配信を有効にしておいてください。エントリ作成当時はポート8080を用いていましたが、ポート9000を用いるように変更しましたので、ご注意ください。opkgのフィードを設定する」および「libmraaを使ってC++で開発する」を参考に、GPIOにアクセスするためのlibmraaライブラリをインストールします。/etc/opkg/myfeeds.confこのファイルに下記の内容を記述して保存します。http://iotdk.intel.com/repos/1.1/iotdk/x86書けたら、下記のコマンドを実行します。libmraa0これでlibmraaのインストールが完了しました。node.jsで用いるモジュールの準備node.jsによるWeb連携で用いるconnectモジュールとsocket.ioモジュールをインストールします。socket.io@0.9.17使っているスクリプトの関係上、バージョンを指定して最新のものではないファイルをインストールしました。これらのモジュールは/home/root/node_modules以下にインストールされます。libmraaライブラリに対応するmraaモジュールは/usr/lib/node_modules/mraaとしてインストールされていますが、これを/home/root/node_modulesにリンクしておかないと、自作のnodeスクリプトを/etc/rc.localから起動するときに失敗します。そのため、下記を実行しておきます。/home/root/node_modules/mraaソースのダウンロードソースのダウンロードのために、gitをインストールします。git次に、ソースをダウンロードし、pantiltという名前のディレクトリに保存します。pantilt以下、いくつか解説を加えていきます。シャットダウンスイッチシャットダウンスイッチを有効にするためには、下記のコマンドを実行します。&この状態で、回路上のタクトスイッチを2~3秒程度長押しすると、poweroffコマンドが実行され、シャットダウンが始まります。中身は下記のようなPythonプログラムになっています。GPIO15はJ18-2のことであり、プルアップ抵抗つきの入力として設定しています。GPIO番号とピン番号の対応はこちらを参照。time.sleep(0.5)このshutdown.pyスクリプトを起動時に有効にするには、mjpg-streamerの自動起動の際に作成した/etc/rc.localに上記のコマンドを追記してください。サーバーの起動サーバーを起動するには、下記のコマンドを実行してください。EdisonのIPアドレス):8080/にアクセスすると、操作用のアプリが開きます。使用されているポートは下記の通りです。8080:ページの閲覧8888:socket.ioによるソケット通信9000:mjpg-streamerによる映像配信JavaScriptで記述したpantiltserver.jsの中では、下記のようにJ17-1およびJ18-1ピンに対してPWM信号を出力しています。duty1max)/2;p0.write(duty0);p1.write(duty1);サーボモータに50Hzの信号を与えるのですが、細かな周期やパルス幅はオシロスコープの波形を見たりサーボモーターの振る舞いを見ながら微調整しました。Duty比は0~1の実数で指定します。Edison起動時に自動実行する場合は、やはり/etc/rc.localに上記コマンドを追記してください。UIによるスライダを配置してサーボモーターへの指令をJavaScriptで送るようにしています。iOSのSafari/ChromeやAndroidのChrome/Firefoxなどで動作を確認しています。画面の回転にも対応しています。このアプリは、主に下記のファイルで構成されています。UI用ファイルcss/pantilt.cssjs/pantilt.js内で、映像の取得と命令の送信を行っています。Winterで展示しました(週アスPLUSさんにも写真があります)。Wear」から操作できるデモとしました。カメラからの映像を見ながら三輪ロボットを操作してみた」が関連します。沢山の方にお越しいただき、ありがとうございました。Edisonを用いた簡単なデモということで、カメラのパンチルトを制御してみました。mraaモジュールを用いるとJavaScriptで直接GPIOにアクセスできるので、Web連携が容易であるという印象を持ちました。ドキュメントがあまり充実していないように思われるのが残念なところです(Pythonの入力ピンのプルアップ抵抗を有効にする方法を調べるために、mraaのソースをgrepしたりしました)。そのあたりは今後に期待でしょうか。あとは、7V以上の電源の確保と1.8VのGPIO入出力のレベルシフトがやや面倒、というところです。Pi用のカメラモジュールを用いる必要があります。PiではハードウェアPWMが一つしか使えないので、全く同じことをするのは少し面倒です。BlackでのGPIOプログラミングは未経験なのでノーコメントです。(MFTバージョン)」を購入したことをきっかけに、試してみることにしました。目指すのは、いつもやっている「Webカメラを接続してmjpg-streamerで映像を配信する」こととします。結果を先にお見せすると下図のような感じでです。Edisonで配信した映像がAndroidタブレットに表示されていることがわかります。Kit」を指していますのでご了承ください。EdisonでWebカメラを使うために、OSのイメージを自分でビルドする必要がありました。2015年1月に公開されたバージョンでは、デフォルトでWebカメラを利用可能になっています。そこで、ここではまずその方法を解説します。EdisonでのOSのイメージをビルドする方法が知りたい方は、このページの末尾に記録を残しておきますのでご覧ください。EdisonのアップデートをUbuntuで行うことにします。dfu-utilを実行してdfu-utilをインストールしておきます。imageをダウンロードします。2015年2月27日の時点ではedison-image-ww05-15.zipがダウンロードされました。その後、edison-image-ww05-15.zipと同じディレクトリにいるとして、下記のコマンドで書き込みます。Edisonに電源を投入すると、アップデートが始まります。J3コネクタにてシリアルコンソールに接続しておくと、進行状況がわかって安心です。Edisonをリブートすると、起動時に更新が始まります。EdisonのJ16コネクタにUSBカメラ(要変換コネクタ)、J21ピンに7V~15Vの電源を接続します。J3コネクタのシリアルコンソールでログインすると、/dev/video0ができていることがわかります。Edisonを再起動すると、カメラが認識されなくなります。一度電源を切ってから再投入することで認識されるようです。EdisonをWifi接続しておきます。詳細はスイッチサイエンスさんのページが詳しいです。Ubuntuマシンでmjpg-streamerのソースをダウンロードしておきます。Edison用のSubversionのパッケージが見当たらず、ソースからインストールするのは面倒だったため、Ubuntuであらかじめダウンロードしておく、というわけです。Edisonへ移動しておきます。Edisonでの作業です。opkgのフィードを設定する」を参考に、myfeeds.confというファイルを作成して編集を開始します。/etc/opkg/myfeeds.confこのファイルに下記の内容を記述して保存します。http://iotdk.intel.com/repos/1.1/iotdk/x86書けたら、下記のコマンドを実行します。Makefileここで、Makefileの39行目でinput_testpicture.soをビルド対象に含めている部分を下記のようにコメントアウトします。Edison用のパッケージがなく、またその名前の通り、input_testpicture.soはテスト時以外なくても困らないためです。以上のもと、ビルドします。makeビルドが完了したら、下記のコマンドにより、mjpg-streamerを起動します。EdisonのIPアドレス:9000/にアクセスすると、映像が配信されていることがわかります(2014.12.11追記。後に追加するエントリとの整合性をとるため、ポート番号を8080から9000に変更しました)。Androidの場合は簡単MJPEGビューアを使ってもよいです。ポート番号はソフトウェアキーボードで9000と変更してください。Edisonに電源を入れた際にmjpg-streamerが自動で起動するようにしておきます。mjpg-streamerディレクトリにstart_mine.shファイルを作成します。mjpg-streamer/start_mine.sh中には例えば以下の内容を記します。./www"次に、このスクリプトを/etc/rc.localに記述して、起動時に自動的に呼び出されるようにします。/etc/rc.local内容は下記の通りです。&最後に、/etc/rc.localのパーミッションを755にしておきます。Edisonの電源を切り、電源再投入してください(リブートでは駄目)。mjpg-streamerが自動で起動していることがわかるはずです。Blackと比べた場合のメリットは、5GHz帯のネットワークにデフォルトで接続できることでしょうか。Blackで5GHz帯のネットワークにつなぐにはGW-450Dを使う方法がありますが、kernelの再構築が必要であるなど、やや面倒です。Edisonの方でも、7V~15Vの電源が必要な点など使いにくいところはあります。こちらもどうぞこのページの話の続きです。(UVC)が有効になっていなかったので、それを有効にしたkernelと、それを含むOSイメージを作成する方法を解説しました。現在はUVCがデフォルトで有効になっていますのでこの作業は必要ないのですが、記録としてその方法を以下に残しておきます。この作業はUbuntuで行いました。Guideにまとめられています。Ubuntuに必要なパッケージをインストールします。filesをダウンロードします。2015年2月27日の時点ではedison-src-ww05-15.tgzでした。edison-src-ww05-15.tgzにより解凍します。edison-srcというディレクトリができますので、以下の順でまずはデフォルトのイメージを作成してみます。この際環境変数PATHにカレントディレクトリ「.」が含まれているとエラーが出ますので、あらかじめPATHから「.」を削除しておきます。edison-imageなお、最後のコマンドを実行すると、途中で様々なファイルのダウンロードが行われますが、環境やタイミングによりダウンロードエラーが起こることがありますので、エラー出ずにビルドが終了するまで繰り返します。私の場合、成功時に下記のようなメッセージが現れてビルドが完了しました。shown.ビルドが完了した後、以下のコマンドにより、書き込み用のファイル群をまとめます。./edison-src/device-software/utils/flash/postBuild.sh以上により、書き込み用のファイルがディレクトリedison-src/build/toFlashにまとめられます。このイメージを上で行ったようにflashall.shを用いて書き込めます。kernelの設定を変更したい場合は下記のようにして再ビルドしてください。kernelの設定ファイルはedison-src/device-software/meta-edison/recipes-kernel/linux/files/defconfigですので、手作業で変更する場合はこちらを編集します。menuconfigにより設定を行う場合は以下のようにします。Webカメラを有効にする場合は下記の操作を行ったのですが、既にこれはデフォルトで有効になっています。(複数回)と辿ることで設定ファイルがedison-src/build/tmp/work/edison-poky-linux/linux-yocto/3.10.17+gitAUTOINC+6ad20f049a_c03195ed6e-r0/linux-edison-standard-build/.configとして書き込まれます。これをkernelの設定ファイルの格納場所にコピーします。ディレクトリにて下記コマンドによりイメージの作成を行います。./edison-src/device-software/utils/flash/postBuild.sh以上で、edison-src/build/toFlashに書き込み用のファイルができました。