Cambot-Raspberry Piのロボットカメラマン

昨年、Raspberry Piミニコンピューターが私の手に落ちました。 なぜなら 私はLinuxに出会ったことがなく、テーブルの引き出しを動かさずに長い間横たわっていましたが、最終的には嘘をつきました。ビデオと写真。

ロボットのタスク:









もちろん、ロボットは単にWebインターフェースの操作の例として取り上げられています。 カーテン、ライト、ヒーターなど、はるかに珍しいデバイスを制御できます。 たとえば、Raspberry Piから、Webインターフェイスを備えたスマートホームコントローラーを構築できます。



インターフェイスを構築するために、 webiopiを使用しました。 これにより、PHP、Apacheなどの知識がなくても、プロジェクトを非常に迅速に開始できます。 プログラム。

プロジェクトを繰り返すために知っておくべきこと:



続けましょう。 最初に、webiopiについてのいくつかの言葉:



WebIOPiは完全なRaspberry Pi I / Oフレームワークです



WebIOPiを使用すると、ブラウザーまたは任意のアプリケーションから、ローカルまたはリモートでステータスを監視し、すべてのGPIOポートを管理できます。

機能:

•マルチキャストをサポートするHTTPおよびCoAP経由のREST API

•サーバーはPythonで書かれています

•GPIO、シリアル、I2C、SPI、1-Wireと連携

•DAC、ADC、センサーなど、30以上のデバイスの組み込みサポート...

•Python 2および3との互換性

•ユーザー向けの優れたカスタマイズオプション

•パスワードログイン保護

•たくさんの例



WebIOPiをインストールする



インストールには、Python、2.7または3.2がRaspberry Piにインストールされている必要があります。 インストールは、ターミナルからのローカルまたはリモートの4つのコマンドによって実行されます。

$ wget http://webiopi.googlecode.com/files/WebIOPi-0.6.0.tar.gz $ tar xvzf WebIOPi-0.6.0.tar.gz $ cd WebIOPi-0.6.0 $ sudo ./setup.sh
      
      





これで、コマンドプロンプトでwebiopiを実行できます。

 $ sudo webiopi [-h] [-c config] [-l log] [-s script] [-d] [port] Options: -h, --help Display this help -c, --config file Load config from file -l, --log file Log to file -s, --script file Load script from file -d, --debug Enable DEBUG Arguments: port Port to bind the HTTP Server
      
      





確かに、Ctrl-Cコマンドでスクリプトを完了するか、ターミナルウィンドウを閉じるとすぐに、webiopiサーバーとGPIOポートの状態が失われます。 したがって、webiopiをサービスとして実行する価値があります。

 $ sudo /etc/init.d/webiopi start  $ sudo /etc/init.d/webiopi stop
      
      





RPIをロードしたときにwebiopiを自動的に起動するには、次のコマンドを使用できます。

 $ sudo update-rc.d webiopi defaults
      
      







お試しください



ローカルネットワーク上で、任意のコンピューターでhttp:// [IP]:8000をダイヤルして、RPIへのWebインターフェイスにアクセスできます。 [IP]はIP Raspberry Piに置き換える必要があります。 デフォルトのログインは「webiopi」で、パスワードは「raspberry」です。 確かに、プログラムの作成者は、コードがすべてのブラウザーで機能するとは限らないと述べています。 Chromeの使用をお勧めします。

たとえば、ここでは、すべてのI / Oポートのインターフェイスのように見えます。



任意のレッグの動作モードを設定し、出力で値を設定できます。



WebCamBot-ロボット写真家



このプロジェクトは、 Cambotプロジェクトに基づいており、いくつかの改善が加えられています。 モータードライバーはブレッドボード上では組み立てられませんでしたが、Raspirobotボードでは、ソフトウェアがこのボードに適合し、Webカメラを制御するためのWebボタンが追加されました。 Raspirobotボードでは、リニアレギュレータがパルスレギュレータに置き換えられています。



Raspirobotボードに接続された電気モーターを制御するために、4つのRPI出力が使用されます。 その目的は次のとおりです。

 # Left motor GPIOs LEFT_GO_PIN = 17 #PWM   LEFT_DIR_PIN = 4 #  # Right motor GPIOs RIGHT_GO_PIN = 10 #PWM RIGHT_DIR_PIN = 25 # 
      
      







ウェブカメラは、mjpg-streamerプログラムを使用して最小解像度でビデオをストリーミングするモードと、最大解像度で写真を撮影するモードの2つで動作します。 モードは、stream.sh、stream_stop.sh、photo.shのいずれかのスクリプトを実行して選択します。



おそらく、mjpg-streamerおよびfswebcamプログラムを使用してWebカメラを制御する方法を知っているので、スクリプトの内容についてはコメントしません。

撮影スクリプト:

 #!/bin/sh fswebcam -d /dev/video0 -p MJPEG -r 640x480 --jpeg 95 --shadow --title "cambot" --subtitle "Front camera" --info "" --save /usr/share/webiopi/htdocs/app/Raspirobot/ph.jpg -q
      
      







ウェブカメラ有効化スクリプト:

 #!/bin/sh STREAMER=mjpg_streamer DEVICE=/dev/video0 RESOLUTION=160x120 #320x240 FRAMERATE=25 HTTP_PORT=8001 # check for existing webcam device if [ ! -e "/dev/video0" ]; then echo "stream.sh: Error - NO /dev/video0 device" 2>&1 | logger exit 2 fi PLUGINPATH=/home/pi/mjpg-streamer-r63 "$PLUGINPATH/$STREAMER" -i "$PLUGINPATH/input_uvc.so -n -d $DEVICE -r $RESOLUTION -f $FRAMERATE" -o "$PLUGINPATH/output_http.so -n -p $HTTP_PORT" -b
      
      







カメラのシャットダウンスクリプト:

 #!/bin/sh kill -9 `pidof mjpg_streamer`
      
      







Webインターフェース



WebIOPiのWebインターフェイスの記述は、可能な限り簡単です。 実際、javascript webiopiから関数を呼び出してページを読み込んだ後、Pythonで記述されRPIに保存されたマクロを呼び出すコントロールを作成する必要があります。 次に、jQueryを使用してコントロールをページのHTMLコードに追加する必要があります。 これは次のように行われます。

 button = webiopi().createButton("bt_up", "/\\", go_forward, stop); //    id bt_up,  /\,   go_forward $("#up").append(button); //    div  id=up
      
      





go_forward関数は次のとおりです。

 function go_forward() { webiopi().callMacro("go_forward"); }
      
      





つまり go_forwardマクロを呼び出すだけです。



インターフェースのボタンをマウスで押すことは必ずしも便利ではないため、キーボードコントロールを複製できます。

 $(document).keydown(function(e) { switch(e.which) { case 37:turn_left(); break; //key Arroy left case 38:go_forward(); break; // key Arroy up case 39:turn_right(); break; //key Arroy right case 40:go_backward(); break; //key Arroy down case 32:stop(); break; //key Space case 75:camera(); break; ..//key K case 80:photo(); break; // key P } });
      
      







インターフェイスのビデオと写真は、マクロの実行後に対応するdivにロードされます。

  function camera() { $("#vid").html(''); webiopi().callMacro("camera"); $("#vid").html('<img width="320" height="240" src="http://raspberrypi.local:8001/?action=stream">'); } function photo() { $("#ph").html(''); webiopi().callMacro("photo"); $("#ph").html('<img src="Raspirobot/ph.jpg">'); }
      
      







WebIOPiの構成



構成ファイルは/ etc / webiopi /フォルダーにあります

ini windowsファイルのようないくつかのブロックで構成されています。まず、マクロを記述するブロックが重要です:

 [SCRIPTS] # Load custom scripts syntax : # name = sourcefile # each sourcefile may have setup, loop and destroy functions and macros cambot =/usr/share/webiopi/htdocs/app/Raspirobot/cambot.py
      
      







このブロックでは、マクロを含むpythonスクリプトを使用して、 name = sourcefileという形式の行を追加します。

そして、関心のある2番目のブロックはサーバー構成です。 その中で、サーバーが動作するポート番号、パスワードファイルへのパス、サーバーのルートディレクトリを指定できます。

 [HTTP] # HTTP Server configuration enabled = true port = 8000 # File containing sha256(base64("user:password")) # Use webiopi-passwd command to generate it passwd-file = /etc/webiopi/passwd # Use doc-root to change default HTML and resource files location #doc-root = /home/pi/webiopi/examples/scripts/macros # Use welcome-file to change the default "Welcome" file #welcome-file = index.html
      
      







Pythonスクリプト



WebIOPiの場合、スクリプトには、サーバーの起動およびシャットダウン時に呼び出されるセットアップおよび破棄機能が含まれている必要があります。 通常、これらの機能は、I / Oポートの動作モードとステータスを決定します。

Webインターフェースで使用できる機能の前には、識別子@ webiopi.macroを付ける必要があります。 たとえば、これは、ロボットを前進させるgo_forward関数の説明です。

 @webiopi.macro def go_forward(): left_forward() right_forward()
      
      





Webカメラを制御するには、対応するスクリプトを呼び出すcallコマンドを使用します。

 def camera_start(): return_code = call("/usr/share/webiopi/htdocs/app/Raspirobot/stream.sh", shell=True)
      
      







その結果、次のインターフェースが得られました。





アプリケーションのデバッグ



アプリケーションを使用するサーバー上のページが開かない場合、スクリプトコードにエラーがある可能性があります。 ローカライズするには、記述されたスクリプトを実行する必要があります(私の場合、たとえばsudo python ./cambot.pyコマンドを使用して、受信したエラーと警告を確認します。/var/フォルダーにあるwebiopiログファイルのエラーも確認する価値があります。 ログ/ webiopi

ページは読み込まれても、インターフェイス要素をクリックしても反応がない場合は、javascriptのエラーを調べる価値があります。



ビデオ-ロボットの仕事







ここからソースコード全体をダウンロードできます。



All Articles