freedom-man.com

ブログは俺のセーブポイント

Tag: arduino

Rapiroで遊ぶ【Chatterで操作編】

前回はRapiroをカスタマイズして無線LAN対応させたので

今回は実際にWebと接続して任意のクライアントからRapiroを操作できるようにします!

 

方法としてはRapiro(Raspberry Pi)を起点にPush型にするか(RapiroをWebサーバ化する)

Pull型でRapiro側からWebにデータを取りに行くかの2パターンがありますが、

今回はPull型でデータ取得先にコマンド入力のデータがあれば

シリアル経由でRapiroを操作するフローで構築してみます。

 

cron使えば言語/フレームワーク問わないのですが

入出力がプラガブルで拡張性の高いhubot使えば色々便利そうだったので今回はコレを使います。

 

hubotと言えば以前にhubot-chatterを作ったのでChatter使ってRapiroを操作してみます!

Chatterに命令文書いたらrapiroが動く感じです。

1. Node.jsをRaspberry Piにインストール

Raspberry Piでapt-getでパッケージインストールしたら、yaomanインストールあたりの

エラーでハマったのでPi用のバイナリを使ってインストールします。

2. hubotのインストール&ボット作成

まずはhubotのインストール

hubotの作成

3. hubotスクリプトの作成

こんな感じのスクリプトをscripts/test.coffeeに設置

さらに起動用のシェルファイルも作成

serialportもインストール

4. Salesforce側の設定を行う

Rapiroを動かすということで即時性が求められる為、StreamingAPIを使う方式にしました。

FeedItemは相変わらずStreamingAPIに対応していないので

FeedItemのInsertのDMLでカスタムオブジェクト(Message__c)を作成するようなトリガを組みました。

この作成先であるMessage__cをPushTopicに登録してあげればStreamingAPIへの準備はOKです。

ChatterとStreamingAPIの連携に関しては以下の記事が詳しいです↓

Force.com Streaming APIでChatterへの投稿を通知 – Appirio Japan

5. 実行

Rapiroに通電して、Raspberry Piにsshでログインし、3で作成したシェルファイルを起動します。

その後、”hubot rapiro green”とFeedに投稿すると、こんな感じでhubotが動き出します!

“hubot rapiro stop”で止まります。

余談

hubotじゃなくてCylon.jsを使っても面白いかも

Rapiroで遊ぶ【カスタマイズ編】

今回はRapiroをRaspberry Piでさらにカスタマイズしていきます!

 

Rapiroの拡張というよりは、機能拡張したRaspberry PiをRapiroに載せる感じです。

 

今回の参考サイトは以下になります↓

[Raspberry Pi搭載系]

RAPIRO に Raspberry Pi を搭載する | アンドロイドな日々

RAPIRO: The Humanoid Robot Kit for your Raspberry Pi by Shota Ishiwatari — Kickstarter

[Bluetooth&PS3コントローラで遠隔操作系]

RapiroをPS3のDUALSHOCK3で動かしてみる | Makuake(マクアケ)NOTE クラウドファンディングブログ

シリコンハウスへようこそ:RAPIRO製作日誌 ~無線化への道~ Raspberry pi 搭載編 続章 bluetooth設定

工作と小物のがらくた部屋: Raspberry Pi で Dualshock3 (Bluetooth接続ゲームコントローラ)

[カメラモジュール系]

How to install / use the Raspberry Pi Camera | The Pi Hut

Raspberry Pi メモ (23) – カメラモジュールの使い方

無線LAN対応

Webに接続できるようにしないと、外部から遠隔操作したり

Webサービスとつないだりできないので、まずは無線LANに対応させます。

Raspberry PiにUSBの無線LANのドングルを繋いで色々と設定すればOKです。

詳細忘れちゃったので、「RaspberryPi LAN」とかで調べてもらえばハマること無く設定出来ると思いますw

Raspberry Piからのシリアル通信&Rapiro操作

Raspberry PiとRapiroは6極ケーブルを使って接続します。

rapiro-raspberrypi

あとは単純にシリアル通信すればOKでPythonだとpyserialを使って通信可能です。

pip経由でインストールするとこんな感じ

コードはこんな感じでOK

Raspberry Piに既にssh経由でログインできるようにしている場合は

sudo pythonから上記コードを実行して遠隔操作が出来るようになります。

 

ただし、このままだとシリアル接続をしてしばらく経つと、”input/output error”と表示されて

シリアル通信が出来なくなります。

これを防ぐにはRaspberry Pi側のシリアルコンソールを止める必要があるらしく

以下のコマンドで対応できます。詳細はこちらを参照してください。

Bluetooth対応

Bluetoothに対応するとPS3のコントローラで接続できたり

iBeaconを検知できたり発信できたり遠隔操作の幅が広がります。

BluetoothのアダプタはBSHSBD04BKを使いました。

 

PS3のコントローラでRapiroを操作する設定に関しては以下の記事通りにやればOK。

シリコンハウスへようこそ:RAPIRO製作日誌 ~無線化への道~ Raspberry pi 搭載編 続章 bluetooth設定

工作と小物のがらくた部屋: Raspberry Pi で Dualshock3 (Bluetooth接続ゲームコントローラ)

 

BluetoothアダプタとPS3のペアリングをするために

一時的にお互いをUSBで接続する必要があり、PS3コントローラを接続するポート

無線LANのポート、Bluetoothのポートの3つが必要になるので

Raspberry Piに搭載されているUSBポートでは足りなくなります

USBハブ(電力不足を防ぐためにセルフパワータイプが良い)を使ってポートを増やすか

Raspberry Piの有線LANを使うようにして無線LANのアダプタを使わないようにするか

いずれかの方法を取る必要があります。

カメラモジュール

専用のカメラモジュールをRaspberry PIに取り付けて、rapiro視点で静画/動画を撮影できます。

設定に関してはこちらのサイトが詳しいです。

raspberry側はraspi-configコマンドを実行してcameraをenableにすればOK。

あとはraspistillコマンドで静画を撮れます。

 

Rapiroに取り付けるときは天地が逆になるので

とすれば正しく静画を撮ることが出来ます。

動画も取ることができるので、ちょっとした監視ロボも作れちゃいます。

その他

Rapiroに搭載する場合はRaspberry PiはArduinoから電力を供給してもらうことになります。

よってカスタマイズすればするほど、Raspberry Pi自体の電力も下がってくるので

電力低下によりRaspberry Pi自体がうまく動かなくなることもあるらしいです。

USB経由のカスタマイズであればセルフパワータイプのUSBハブを使って電力をカバーするとか

無線LANは有線LAN+無線LANコンバータにして消費電力を減らす等の工夫が必要です。

据え置き型ロボであれば有線LANでも良いですね。

 

無線LAN、Bluetooth、カメラモジュール搭載のRapiroはこんな感じ↓

rapiro-equipment

USB部分が後頭部から飛び出します↑

額部分にカメラが埋め込まれます↓

rapiro-camera

Rapiroで遊ぶ【組み立て編】

RapiroというArduino互換の基板が搭載されたロボットを購入したので組み立ててみました!

rapiro-complete

Rapiroは、Arduino互換の基板とRaspberry piに接続できるインタフェースを持つため

拡張性が高く、組み立てもドライバーだけで出来るお手軽なロボットキットです。

 

組み立て方に関しては公式のドキュメントを参考にしましたが、

個人的にここは注意したほうが良い!という点を備忘録として記載します。

準備

Rapiro自体は45,000円で手に入りますが、

動力源となる単三型のニッケル水素充電池やACアダプタは別途用意する必要があります。

公式ドキュメントではeneloopやEnergizer Rechargeを利用するように記載されていますが

evoltaでも一応動きました。

 

色んなところ歩かせたいとかの機動力重視の場合は乾電池一択になるんですが

電池の消費が激しく(満充電状態で45-90分稼働)、充電もそれなりに時間がかかるので

ACアダプタの方が手軽で良いです。

Raspberry Pi + カメラモジュールで監視するとか、音声読み上げたり音声認識させたり等の

据え置き系重量級ロボにする場合は、ACアダプタ一択ですかね。

 

また、組み立てにはドライバが必要です。

ドライバは軸が長く(全長15cmくらい?)トルクをかけやすい(=グリップが太い)ものを使ってください。

Rapiroのネジは全てプラスのネジになるので

それなりに精密なドライバを利用したほうが良いと思います。

サーボモータのキャリブレーション

公式マニュアルの工程53でサーボモータの位置を初期位置にしますが、

こちらの作業は必ず満充電での乾電池 or ACアダプタで行ってください。

 

購入した直後の電池でも”充電済み”と一応書いてありますが

満充電状態ではなく、そのままでは正しく動かない可能性が有るので、充電する必要があります。

 

満充電状態であれば、工程53で軸がしっかり動いてサーバモータの初期位置が決まります。

私は満充電状態じゃない電池で動かしてしまったのですが

その状態でも一応モーターの駆動音がしたので

てっきり初期位置が決まったものだと勘違いしてました(実は軸が全く回っていなかったっぽい)。

初期位置決めがうまく行っていなくても、工程209のキャリブレーションで無理矢理調整できますが

大きな調整(例えば180度軸を回転させて初期位置を調整する等)はできません。

 

53以降の取り付け時には極力軸を回さないように組み立てていきますが

後で10-20度くらいの初期位置調整は可能なので

ちょっとぐらい軸が回ってもあまり気にしなくても良いです。

特に脚(2箇所)や指あたりは組み立て終わった後に、再度組み直すのが容易な箇所だったりするので。

 

ちなみに初期位置調整がうまくいってないと、以下のような残念な状態になりますw

rapiro-nejire

頭が…。

電池が足りなくなってくるとRapiroが捻れる

乾電池の場合は電池が足りなくなってくると、電源を入れた瞬間にRapiroが急に捻れ始めます。

キャリブレーション中に電池不足で捻れると、調整がうまくいっていないのか

電池に問題があるのか切り分けづらいので、キャリブレーション中も満充電の状態で行ってください。

Rapiroの操作方法

キャリブレーション時に標準ファームウェアをインストールしますが、

このファームウェアに前進、後退、旋回、目を光らせる等の基本動作が入っているので

ファームウェアを書き換えることなくRapiroを操作することが可能です。

 

Arduino互換なのでArduino IDEで独自のファームウェアを書いてインストールすることも可能です。

 

標準ファームウェアを利用した操作では、シリアル通信でRapiroに命令(コマンド)を送って

操作するのが基本になります。

Rapiro単体の場合(Raspberry Piなし)はPCとRapiroをUSBでつないでシリアル通信を行います。

rapiro-serial

Rapiroのカスタマイズ

Raspberry PiとRapiroのArduino互換の基板をシリアル接続できるように設計されているので

Raspberry Piを使った拡張が容易です。

 

例えば、Rapiroを遠隔操作をしたい場合は

Raspberry Piに何らかの形で命令を送る(例えば無線LANとかBluetooth)

→Raspberry PiからRapiroにシリアル通信を行う

→Rapiroが動く

というように、Raspberry Pi経由での遠隔操作が可能になります。

 

また、Raspberry Piに専用のカメラモジュールを接続できるので

Rapiro目線でカメラ(静画/動画)を撮ることも出来ます。

消費電力&USBポート数に問題なければ、Raspberry Piで出来る事は何でもできるので

可能性は無限大!

感想

組み立てには3~5時間くらいかかりますが、作り終わった後はかなり愛着わきます。

Rapiroの値段45,000円はロボット業界では”安価”らしいですが、やっぱりちょっとお高いですね…。

これから価格帯も下がって色んな種類のロボットが出てきたら

一家に一台ロボットの時代が来るのかも!?

ArduinoからChatter投稿してみる【Web proxy編】

今回は、Arduino使ってWebにデータ飛ばしてみます!

 

ArduinoでWebにデータ飛ばす、となるとだいたいfluentdに投げて

elastic searchkibanaでビジュアライゼーションみたいな感じの構成を取ることが多いと思いますが

今回はSalesforceに直接投げます。

 

直接投げると言っても、Arduino自体はSSLサポートしていないので

1. Web経由でプロキシを介して通信をする

2. シリアル通信経由でArduinoと直接つないでいるPCから通信をする

3. Arduino yunを使ってyunのLinux側のcurlで通信をする(ことが出来るらしい)

 

といった手段を取る必要があります。

 

今回は1の方法で”ボタンを押すとArduinoからChatterに投稿する”というモノを作ります。

 

参考サイト:

 Qoosky – 電子工作でインターネットに無線接続して通信を行う (Arduino)

 

 

0. 準備

必要な物は以下になります。

・Arduino Uno R3

Ethernet Shield

ちびファイ(無線LANコンバータ)

・タクトスイッチ

・ジャンプワイヤとか抵抗とかブレッドボード

 

Arduino単体ではWebに飛ばせないのでEthenet Shieldを装着してください。

ちびファイは無くてもOKですが、無いとLANケーブルをArduinoに繋げるハメになり

配線がもどかしいので無線LANコンバータがあると非常に便利です。

電子回路関連はArduinoのスターターキットを買うと一式まとめて買えるのでオススメ。

 

1. 回路等の組み立て

回路は以下のようになります。スイッチ押したら電気通るだけの超シンプル構造です。

arduino-fig

ちなみに、この図はfritzingを使ってます。回路図とか書くときは便利らしい。

 

実際はこんな感じになります。上のLANケーブルはちびファイに繋がってて、下はPCと繋がってます。

arduino-sample

 

2. Arduinoにプログラムを書き込む

Arduinoのマイコンボードに以下のプログラムを書き込みます。

スイッチ押すとWeb ProxyにGETリクエストが飛びます。

 

3. ArduinoとSalesforceをつなぐWeb proxyサーバの設定

適当なローカルネットワーク上のPCにWebサーバをインストールして、phpが動くように設定。

ファイアーウォールの80番を開けるのもお忘れなく。

参考URL:ja:zoo:window7firewall [McNeel Wiki]

 

phpは以下を設置。

接続アプリ作るの面倒だったのでSOAPでログインしてSessionIDを拝借するスタイルで書いてます。

 

これで、スイッチを押すとWeb Proxyを介してChatterにフィードが投稿されます。

今回はスイッチでしたが、センサ等でも基本構造は同じです。

例えば、センサである閾値を越えたらSalesforceにデータを格納みたいなことも出来ます。

© 2017 freedom-man.com

Theme by Anders NorenUp ↑