2016-08

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Interfaceで記事を書きました

書こうと思っていたのですが、
Interface 2012/12月号でRaspberry Piでロボットを作る記事を書かせて頂きました。



ブログが切っ掛けとなり、記事を書くことになったとは驚きです。
これからも継続的にアウトプットをしていきます。

次は mbed にROSでも実装しようかな。
スポンサーサイト

Raspberry Piでロボットを作る

概要:
最終更新日から1ヶ月弱。
更新する気が起こらない時期ってありますよね。
さて、今回はRaspberry Piでモーターを制御する方法についてです。

無線LANを導入する記事
GPIO制御の記事
ブラウザからLEDを制御する記事
Mjpg-streamerを使って動画配信をする記事
を組み合わせてブラウザから動かせるロボットを作ります。


使用機器:

ハードウェア:
・Raspberry Pi
・セルフパワーのUSBハブ
・無線LANアダプタ
・Webカメラ
・モータドライバ(後ほど説明)
・モーター
・ 電源回路(エネループ6本から降圧)

ソフトウェア:
・mjpg-streamer → Mjpg-streamerを使って動画配信をする記事
・python-dev → GPIO制御の記事
・pythonのgpioライブラリ → GPIO制御の記事

だいたい今までの記事の構成と同じですね。


ハード作成:
今回使用するモータドライバは、定番のTA7291です。
GPIOにバッファIC(TD6004APG)をつなげ、
このモータドライバにつなげることでモータの制御を行います。

回路図は以下のようになっています。
かなり適当に引いているので、正直微妙です。
robot_curcuit


今回、RaspberryPiへの電源供給はGPIOのピンから行ないます。
理由は、Raspberry PiのマイクロUSBポートにはポリスイッチが入っており、
電流を流しすぎると安全のために電源を遮断するためです。
そのため、Raspberry Piとモータドライバ回路への電源供給はGPIOピンから行うことにしています。

これをユニバーサル基板上に作成したものがこちらになります。
circuit_pict
これをGPIOソケットにつなげて使用します。


ソフトウェア作成:
ソフトウェアについては、
ブラウザからLEDを制御する記事を応用して作成します。
作成した回路にあった出力をGPIOから出力するだけで、モーターを動かすことができます。

前回のソースに少し修正を加えただけなので、
こちらからダウンロードして参考にしてください。
また、画像表示用のindex.htmlで使用されている画像のIPとポート番号は、
自身で立てたmjpg-streamerのものに変更してください。
:::Download:::


実行:
ソフトウェアの実行では、以下のソフトを同時に起動します。
・ mjpg-streamer (動画配信用)
・ モータ制御用ソフト

ダウンロードしたソフト内にあるものを同時に起動します。
sudo sh stream.sh &
sudo server_motor.py


この後、指定したRaspberryPiのIPアドレスにアクセスすることで、
ロボットの操作画面を開くことができます。
control_screen


実行結果:
この動画のようにロボットを動かすことができました。



所感:
成果物はできてたのに記事を書くのが遅くなってしまいました。
定期的に記事を書くのは難しいですね。

次はRaspberry Piとネットを繋げた回路でも作ってみましょうか。
そろそろソース管理が面倒になってきたのでGitでも使おうかな。

Raspberry Pi につないだLEDをブラウザから制御する

概要:
Raspberry Pi にWebカメラを接続し、
さて,先月中にロボットの作り方を公開すると言いながら,
まだ公開できていない状態になりました.

今回はロボットのの記事の公開の序盤として,
GPIOにつないだLEDをブラウザから制御する方法を紹介します.


使用機器:
今回は以下の機器を使用しました。

ハードウェア:
・LEDドライブ用基板
・Raspberry Pi がつながれたネットワークにつながっているPC

* LEDを点滅させる基板については,以下のページを参考にしてください.
Raspberry Pi の GPIO でLEDを点滅させてみる


ソフトウェア:
・python-dev
・pythonのGPIOライブラリ

* PythonのGPIOライブラリの導入については,以下の記事を参考にしてください.
Raspberry Pi の GPIO でLEDを点滅させてみる


ソフトウェア作成:
今回,ブラウザからアクセスをするために,
Pythonに標準ライブラリであるCGI実行機能機能付きのHTTPサーバークラスを使用します.

ブラウザからボタンが押されることで,
Raspberry Pi上に立てたGCIサーバーにPOSTメッセージが飛ぶような仕組みを使用しています.

今回のプログラムは,LEDの点滅を制御とサーバーの役割をこなすもの(サーバープログラム)と,
サーバーに対してメッセージを飛ばすためのもの(クライアントプログラム)に分けられます.

それぞれのプログラムは以下のとおりになります.

サーバー側(server_led.py):

# -*- coding:utf-8 -*-
import cgi
import RPi.GPIO as GPIO
from BaseHTTPServer import HTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler

class MyHandler(SimpleHTTPRequestHandler):
def do_POST(self):
if self.path == '/serial':
# 飛ばされてきたリクエストを受け取る
form = cgi.FieldStorage(fp=self.rfile, headers=self.headers,
environ={'REQUEST_METHOD':'POST'})
code = form['code'].value

# 受け取ったクエリに応じて点灯させるLEDを設定する
if code == "led1":
GPIO.output( 17, True )
elif code == "led2":
GPIO.output( 21, True )
elif code == "led3":
GPIO.output( 22, True )
elif code == "reset":
GPIO.output( 17, False )
GPIO.output( 21, False )
GPIO.output( 22, False )

self.send_response(100)
self.send_header('Content-type', 'text/html')
return
return self.do_GET()

# GPIOの初期設定
GPIO.setmode( GPIO.BCM )
GPIO.setup(17, GPIO.OUT)
GPIO.setup(21, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)
GPIO.output( 17, False )
GPIO.output( 21, False )
GPIO.output( 22, False )

# サーバーの起動
server = HTTPServer(('', 8081), MyHandler).serve_forever()


クライアント側 (index.html):
HTMLのソースを貼ると正常に表示されないため,
以下の場所にソースコードをおいておきます.
LEDを点灯させるサンプルプログラム


起動と動作テスト:
これらのプログラムを同じディレクトリに保存し,次のように起動します.
sudo python server_led.py


この後,Raspberry Piの「RaspberyPiのIP:8081」にアクセスすると,
次のような画面を見ることができます.
ブラウザ
表示されているボタンを押すことで,LEDを点灯させることができます.

実際にブラウザからLEDの制御を行った結果が次の動画になります.


所感:
これを応用してロボットを動かしていきます.
次こそはカメラ画像取得とGPIOプグラムを連携させ,ロボットを動作させます.

Raspberry Pi に Webカメラを接続して動画を配信してみる

概要:
Raspberry Pi にWebカメラを接続し、
ストリーミングで動画を配信してみました。
今回はRaspian導入済みのSDを使用するため、
Webカメラのドライバを導入する必要はありません。

使用機器:
今回は以下の機器を使用しました。
無線は使用する必要はありません。
WiFiアダプタのドライバを導入するには、以下の記事を参照してください。
Raspberry Pi に Wifiアダプタを使用する

ハードウェア:
 ・ Raspberry Pi (Raspian 導入済み)
 ・ WiFiアダプタ( GW-USValue-EZ
 ・ セルフパワー対応のUSBハブ(BSH4A01BK)
 ・ UVC対応のWebカメラ(C250h

ソフトウェア:
 ・ mjpg-streamer


導入:
定番のストリーミングアプリとして、
・ mjpg-streamer
・ motion
・ ffmpeg
があります。
今回は導入が容易なmjpg-streamerを使用します。

以下の手順で導入を行います。

sudo apt-get install subversion
sudo apt-get install libjpeg-dev imagemagick
svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
cd mjpg-streamer/mjpg-streamer
make


コンパイルには時間がかかります(10分ぐらい)。


検証:
検証として、実際にmjpg-streamerを起動し、動作の確認を行います。

以下の写真のように使用機器を接続します。
Web Camera


sudo ./mjpg_streamer -i "./input_uvc.so -f 20 -r 320x240 -d /dev/video0 -y" -o "./output_http.so -w ./www -p 8080"
*Webカメラにアクセするには管理者権限が必要です

この後、ブラウザで以下のアドレスにアクセスすると、
配信されている画像を確認することができます。
http://(Raspberry PiのIPアドレス):8080

mjpg-streamer


まとめ:
このように簡単にWebカメラによって取得した画像を配信することができました。
やはり、通常の電子工作と違い、
豊富なCPUリソースを使用して様々なソフトウェアを容易に使用出来ることが
Raspberry Piの良いところなのかなと考えています。

次はRaspberry Pi でモーターを制御します。


参考サイト:
・ Raspberry Pi に Wifiアダプタを使用する
・ UVC対応Webカメラを使用してストリーミング配信をおこなう

Raspberry Pi に WiFiアダプタを接続する

概要:
Raspberry Pi をWifi接続するために、
無線LAN用ドライバを導入してみました。
今回、無線LANを直接Raspbeery Piに接続しますが、
Raspberry Pi のUSBポートは140mAまでの出力がないため、
安定動作させるには、セルフパワーのUSBハブを接続することをおすすめします。


使用機器:
使用機器は以下になります。
 ・ Raspberry Pi (Raspian導入済み)
 ・ WiFiアダプタ( GW-USValue-EZ
 ・ インターネット環境


導入:
以下の手法で導入を行います。

wget http://dl.dropbox.com/u/80256631/install-rtl8188cus.sh
sudo mv install-rtl8188cus.sh /boot
sudo ./boot/install-rtl8188cus.sh


Raspberry Pi がインターネットに接続されていれば、
これだけで無線LANドライバの導入が完了します。

あとは、メッセージに従って接続の設定を行うだけです。


動作確認:
導入完了後、アダプタのLEDが点滅するようになります。
ifconfig 等でルーターにつながっていることを確認してください。


まとめ:
導入がだいぶ簡単になりました。
次はWebカメラをつなげる方法についてです。


参考サイト:
Edimax Wifi EW-7811UN setup

NEW ENTRY «  | BLOG TOP |  » OLD ENTRY

カレンダー

07 | 2016/08 | 09
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

FC2カウンター

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

未分類 (7)
日記 (7)
wiiremote (1)
google (1)
回路 (3)
psp (1)
programing (15)
linux (0)
OpenWRT (3)
kinect (1)
Raspberry Pi (8)

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

google adsense

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。