freedom-man.com

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

Category: その他開発 (page 2 of 3)

技術ブログあれこれ

祝200記事!ということで技術ブログに関する考えをざっくばらんに。伝えたい、というよりは自分の考えを整理したいっていうモチベーションで書いているので、あんまり参考にならないかもですが…。

Continue reading

Perlド初心者がYAPC gihyoレポーターをやってみた話

僭越ながら、YAPC::Asia Tokyo 2015gihyoレポーターとして8/20, 21の2日間だけ参加させていただきました。「ブログを書くまでがYAPC」ということなので、ブログに書かせていただきます!

Continue reading

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という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円はロボット業界では”安価”らしいですが、やっぱりちょっとお高いですね…。

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

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

fiddler使ってSOAPとお友達になる。

時代はRESTですがSalesforceはSOAPでメタデータとか弄ったりするんで、

作成したいモノによってはSOAPとお友達にならないといけません。

 

がしかし

「SOAPってHTTPでXMLやりとりして、仕様拡張出来たりするやつっしょ?」

「C#でWebサービス参照して追加すると勝手にクラスとか追加されて簡単に使えるやつだよね?」

程度の理解であるSOAPレベル1のスライムな私としてはお友達になるまでちょっと時間がかかりそうなので

fiddlerというHTTP通信を監視できるストーキングスーパープログラムを使って

SOAPメッセージを見てみることにしましたとさ。

 

今回はSalesforceのMetadataAPIのSOAPメッセージを見てみました。

1. fiddlerのインストール

ここからダウンロードして、インストール。

 

2. C#とか使って提供されているWSDLからスタブクラスを作成

C#の場合は以下のようにしてWebサービス参照を追加してスタブクラスを作成します。

 

2-1. ソリューションエクスプローラーの参照設定を右クリックして[サービス参照の追加]をクリック

CSharp-ref

2-2. 詳細設定をクリック

CSharp-ref2

2-3. [Web参照の追加]をクリック

CSharp-ref3

2-4. URLにWSDLファイルが置いてある場所を指定してWeb参照名を入力後、[参照の追加]をクリック

CSharp-ref4

これでWSDLからのスタブ作成は完了。

 

実際にC#で使う場合はこんな感じ(partner.wsdlもインポート済み)

 

3. スタブクラスのProxyとしてfiddlerのエンドポイントを設定

プログラムからのHTTP通信をトラッキングしたい場合はfiddlerのエンドポイントである

127.0.0.1:8888をプロキシとして利用すればOK。

 

ということで上記プログラムの例だと、MetadataService周りを以下のように変更する。

 

ちなみにブラウザからのリクエストに関しては無設定でトラッキングできちゃう。

fiddler立ち上げるとOSのインターネット接続のプロキシが自動的に127.0.0.1:8888に変更されるみたいっす。

 

4. Let’s go fiddler

fiddlerを立ち上げて、C#のスタブクラスからSOAP叩いてリクエストとレスポンスをfiddlerで見てみる。

loginはこんな感じ。

[request]

soap-login

[response]

soap-login-response

 

カスタムオブジェクトの作成はこんな感じ。

[request]

soap-createco

[response]

soap-createco-response

 

ということで、SOAPと少しだけお友達になれました。

XMLがわかっちゃえば、あとはパラメータ変えていくだけ良いので

どんな言語だろうがHTTPリクエストが出来ればSOAPなんて簡単です(多分)。

WS-*とか出てきたら各言語のライブラリに任せるしかない…。

 

この方法だとJavaやらC#やらでWSDLからスタブ作ってくれないとどうしようもないので

WSDL解読できないとダメだな~と思いつつ時代はRESTだと思うのであまり気にしていないw

Older posts Newer posts

© 2017 freedom-man.com

Theme by Anders NorenUp ↑