2017年6月
        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  

カテゴリー

ブログパーツ

無料ブログはココログ

リモートブレインの夏休み

光ケーブルを捨て、街に出よう。夏休みに楽しむiPhone搭載のアウトドア知能ロボット。現在休止中

2011年8月21日 (日)

周回遅れのiPhone開発

リモートブレインの夏休み:

この夏休みは、新iRoverのアプリ開発に着手しました。ようやくiOS4でのソフトの製作です。巷ではiOS5の噂がかまびすしい昨今ですが、ようやく4のとっかかりです。まさに周回遅れの感アリです。

iOS4では、カメラ画像の取り扱いがやり易くなりました。こんな風に、画面にカメラからのリアルタイムの画像を任意の位置に、任意のサイズで表示しながら、タイミング良くキャプチャするようなアプリも簡単に作れます。

Dscn1801

試作中のアプリは、webサーバにあるテキストファイルを読み込み、更新されていたらそのままFSKで外部に送信するようになっています。また、外部機器からFSKで送信されたデータを、テキストファイルとしてそのままサーバにアップする機能も持っています。

これは、専用webサイトとロボットとの間に入るインテリジェントブリッジで、ロボットをwebページからコントロールすることを目的にしています。前のIRoverアプリは、ツイッターで命令を出しますが、今回のものはカメロ同様に、WEBのAPI経由でロボットにアクセスする仕様になっています。

モチロン、カメラ画像のアップロードも可能です。今回のシステムは、WEB APIからでも外部機器(ロボット)からのFSKによるコマンドでも写真撮影が可能で、ロボットのセンサーが反応したら、iPhoneで写真を撮ってサーバにあげるような使い方も出来るようになっています。

ロボタやiRoverのアプリは、iPhoneをロボットのコントローラとするもので、ロボット側のマイコンはモーター制御などの低レベル制御を行うだけでした。今回のアプリではiPhoneは「カメラ付き通信機」の役割に甘んじ、webサイトからのコマンドを解析し、ロボットのアクションを組み立てるのは、ロボットに搭載したマイコンにゆだねることにしました。

このようにすると。同じアプリで複数のロボットに対応することが出来、その都度新しいアプリを作る必要が無くなり、開発工数を倹約できます。いろいろなロボットを作って楽しみたいホビースト向けの仕様と言えるでしょう。

2010年10月21日 (木)

簡単にできる!インターネットリモコンロボの製作(1)

花岡ちゃんのウィークエンド

新しいカテゴリです。
ちょっと試してみたい技術やアイデアを、土日で完成できる程度の、簡単な作品にまとめてみようという企画です。基本的に回路図やソースコードを公開し、追試が出来るようにしたいと思います。

今回は「リモートブレインの夏休み」のスピンアウトで、iPhoneとのFSK通信を使った、インターネットリモコンロボを作ってみました。前に書いたように、FSKモデムの性能評価の意味合いもあります。

これが完成したロボットです。

Dscn1127  Dscn1131

ベースになっているキャタピラ車はこれです。キャタピラはツルツルのプラ製で、踏破力はいまいちですが、付属のギアードモーターは見かけによらず高性能です。100mAくらいの電流で十分なトルクが出ますし、静かです。
これにiPhone用のFSKインターフェイスを改造し、モータードライブの機能などを追加した回路を載せました。このブレットボードを2つ使っています。
iPhoneのホルダーは2mmのプラ板で製作し、両面テープでシャーシに固定しました。手動で角度を変えられるような構造になっています。その下には測距センサGP2Y0A21YKを取付け、進行方向の障害物を検出できるようになっています。

Robot+TankなのでRoboTa(ロボタ)と命名しました。

コントロールシステムはこのようになっています。(このブログの写真はクリックで拡大します)

Photo

簡単に言えば、専用のHPにアクセスし、入力フォームにコマンドを打ち込むと、ロボタが動き、動き終わったところで写真をアップロードすると言うわけです。静止画ですが、ロボタからの画像を見ながら操縦できます。

ネットワークはiPhoneの3G回線を使うので、(圏内なら)どこでも使え、ルーターへの接続などの面倒がありません。オーディオケーブルを接続し、アプリを起動するだけです。ネットタンサーなどの無線LANロボットに比べると、セットアップがとても簡単です。
また、ロボット側は単なるwebクライアントですから、サーバ型のネットロボットのように、グローバルIPアドレスは必要ありません。マンションやオフィスビルの共同型インターネット接続サービスのような、グローバルIPの取得できない環境でも問題なく働きます。

詳しい説明は今後の投稿にて。まずは動画をごらんください。

障害物のところがちょっとわかり難いですね。ロボタは前進中障害物を見つけると、自動停止し、画面上部に赤帯でSENSORという表示を出します。画像をよーく見るとわかると思います。

2010年10月19日 (火)

softModemの試験運用は謎のマシーンで!

リモートブレインの夏休み:iPhoneロボット

iRoverは大型で騒音も大きいので、室内でのテストには向きません。目の前に立派な庭園でもないと、これでFSKインターフェイスの試験運用は大変です。

そこで、先週末、インターフェィスのソフトを手直しして、こんなマシーンを製作しました。

Dscn1031

むむむ、月面のモノリス運搬マシーンでしょうか。傍らにたたずんでいるのは、アストロノーツかはたまた宇宙ロボットか? 

この謎のマシーンについては、近日中に投稿するとして… ともあれ、このマシーンのおかげでソフトの単純なミスを発見することが出来、iPhoneからの受信の安定度がよくなりました。
このページのソースコードは改訂版(v11)に訂正してあります。

2010年10月12日 (火)

Modem版への改造終了です

リモートブレインの夏休み:iPhoneロボット

製作したiPhone用モデムをiRoverに組込み、アプリとの通信を光カプラからオーディオFSKに変更しました。改造後の写真がこれです。よく見ると頭部のiPhoneのオーディオポートに、プラグが差し込んであるのがわかると思います。

Dscn0998

モデムの基板は裏返してアビオニクスボックス内に取り付けました。左の写真で配線面が見えている細長い基板がそれです。サイズの関係で、モニタ用のLEDは切り離してしまいました。右の写真はオーディオケーブルの様子です。これは2芯シールド線で引き出しています。入出力ともインピーダンスを低く設計しているので、モーターノイズの影響は全くありません。

Dscn0990  Dscn0991

iPhoneアプリとボディ側のcoronのソフトも、とりあえず通信部分だけを変更しました。が、いままでのテストの結果から、抜本的変更の必要性も強く感じています。

特にツィッターの使い方については、考え直さないといけません。

とにかく、スタートしたときには「チャットみたいなもの」という認識だったのですが、これは大分間違いだということがわかってきました。新聞などでは「ミニブログ」という言い方がされるように、ある程度まとまった発言をするためのツールなんだな、ということです。

だから現在のような、リアルタイム性の高い使い方ではいけない、ロボット側に「人格」とは言いませんが、もっと高度な自律性を持たせて、
「草むらに入り込んでしまったけど、このまま進んでいいのかな?」
なんて感じのツィートをさせないと、座りの悪い感じです。
ネットタンサー流の「テキストによるリモコン」は、ツィッターのシステムには向いていないようです。

幸い、iPhoneとボディの通信が密になったので、可能性はあります。

2010年10月 5日 (火)

SoftModem用インターフェイスのまとめ

リモートブレインの夏休み:iPhoneロボット

いつのまにかロボットネタからずいぶん離れてしまいましたが、今回で終わりにしたいです。

まずは、前回で出来上がったモデムを、coronとインターフェィスするにあたって、問題になったもろもろのこと。


■coronでは315bpsは使えない
このプロジェクトでは、昔の電話用モデムのようにPICマイコンは変調・復調機能のみ、という方針でした。そのためには315bipでモデムと通信する必要があります。

coronではシリアルポートのボーレートをconf.hのUART_BAUDRATEの値を書き換えることで設定できますが、残念ながら600bpsより遅いボーレートの設定は出来ないようです。エラーにはなりませんが、通信速度がおかしなことになります。モチロン、各種レジスタを適正にセットすれば遅い方も大丈夫なんでしょうが、ちょっと大変そうです。

そこで、PICのUARTを使ってcoronとの通信はデフォルトの9600bpsで行い、iPhoneとの通信はPICが自力で行うようにしました。
通信速度に差があるので、PIC側に100バイトほどの送信データ用FIFOバッファを設けました。


■iPhoneとのFSK通信は負論理!
SoftModem TerminalからPICに送られるFSK信号は、リーダーとしてスペース(3150Hz)が送られ、スタートビットのマーク(1575Hz)に続いてデータ、最後にストップビットのスペースから構成されています。
最初はそのままマーク1、スペース0として受信したところ文字化けで受信できませんでした。コードを調べると反転しています。つまり、負論理で送られてきているわけですね。もちろん、送る方も負論理です。

モデムってそうだったけ、と改めて思いました。
インターフェイスを自作する人は気をつけないといけません。なお、今回製作したインターフェイスではソフトで対応済みなので、普通にシリアルで送受信できます。


■ボーレートは控えめに
この回路で1225bpsでの通信実験も行いましたが、多少エラーが出ます。マイコンから同じ文字を画面いっぱいになるまで(600字くらい?)送信すると、1〜2回の文字化けが出ることがあります。波形をチェックしましたが原因は不明です。みたところきれいな波形でした。原因追及には手間ひまかかりそうです。

まあ、これまた懐かしいXmodemとかのプロトコルを実装すればこれでも使い物になりそうですが、アマチュアのソフト工作向きではないですね。315bpsなら、普通に通信している限り文字化けは確認できませんでした。あとあとのことを考えるとボーレートは欲張らない方がいいみたいです。


回路図とPIC16F886用のCCSCのソースコードとオブジェクトです。
この回路は3Vから5Vの電源電圧で動作します。uCPUシリアルにMAX232などのレベルコンバータをつなげば、9600bpsのRS232CでPCと接続することも出来ます。僕も開発中はTeraTermでやってました。

「modem_mono.pdf」をダウンロード(回路図)
 2010/10/18更新・安定度向上のためプログラム修正しました。↓
「fsk_V11.zip」をダウンロード(CCSCのソースコードとオブジェクトファイル)

動作の様子はこんな感じです。
iRoverのcoronからSoftModem Terminalに'A'を連続送信している様子です。100mS周期で送信しています。100バイトほどのバッファをもっているので、それ以内ならいっぺんに送っても大丈夫ですが、FSKでは1バイト送るのに30msかかるので、送りすぎには要注意です。

2010年10月 4日 (月)

iPhoneとのオーディオインターフェイスを再検討

リモートブレインの夏休み:iPhoneロボ

PICで作ったモデムからiPhoneへのオーディオインターフェイスを再設計します。
はじめはちゃんと考えて作ったのですが、なぜかうまくいかなくて、いじっているうちにコンデンサ1個になってしまいました。

これではダメでしょう。理不尽な回路です。もう一度、最初に設計した回路を試してみたいと思います。

まず、iPhoneの入力回路の模式図はこうなっていると思われます。

Modem

コンデンサマイクを接続するので、図のようにRで電圧を掛けています。開放電圧は2.7V、これが2.2Kの抵抗をマイク端子に入れると1.3Vほどに下がるので、抵抗Rは約2Kということになります。
さらに音声信号(交流)について言えば、ECを通してRはGNDに接続になるので、(アンプの入力インピーダンスは、おそらくこれに比べて十分に大きいので)これが入力抵抗になります。

これを踏まえて、設計した回路がこれです。FSK OUT側の回路です。

Modem

FSK OUTからはマイコンで作ったFSK信号(3KHz-1.5KHz)が入ってきます。10uFのコンデンサは交流的にはきわめて低い抵抗になりますから、iPhoneをつなげないときには、R6とR7で分圧された信号がマイク入力に入ると考えて良いでしょう。本来のマイク出力が数十mVPPくらいなので、iPhoneを接続して100mVPPくらいになるようにします。この値だとiPhoneを接続しない状態で147mVPPになります。

この回路がiPhoneにつながると、iPhone内部の2KとR7の2.2Kで分圧され、入力部の直流電圧オフセットは1.3Vほどになります。これに150mVPPほどの交流信号を重畳することになります。

ただし、先に書いたように、交流に対するiPhoneの入力抵抗が2Kあるので、iPhone接続時のFSK信号の分圧比は
 R6 : R7とiPhone内部のRの合成抵抗
になるはずです。
R7とRは同じくらいにしたので、iPhoneへの入力信号レベルは半分の約73mVPPになります。

こんな風な考え方で、回路を設計、作ってみたらダメだったのですが… 今回は何の問題も無く動きました。どうも前回の試作ではなにか間違っていたみたいです。オーディオFSKは大変、というアタマがあったので、深く追求しないでボツにしていたようです。

ともあれ、これでOKです。オシロでの測定結果も70mVPPほどで、まあまあ計算通りです。こちらも受信同様、電源電圧の影響をあまりうけません。マイコンが3.3Vでも5Vでも無調整でいけるのは有難いところです。
あーすっきりしました。

この回路はきわめて安定で、部品の値をかなり変えても動作します。コンデンサは1uFから47uFくらいまで変えても問題ありません。ジャンク箱の部品を活用できます。

2010年10月 1日 (金)

SoftModemへ信号を送る…のですが

リモートブレインの夏休み:iPhoneロボット

今回のような可聴帯域のFSKの身近な応用には、ファクスがありますね。会社勤めをしている人なら、ピーヒョロヒョロヒョロ… という音に聞き覚えがあるでしょう。あれは音声用の電話線を使って、デジタル化した画像をFSKで送っている音です。

でも、僕にとってもっと身近だったのは、前に書いたようにカセットテープへのプログラムの記録でした。80年代のパソコンには、最も安価な外部記憶媒体として、ラジカセが使えるよう、FSKのオーディオインターフェイスが付いていました。懐かしい人も多いと思います。

僕はもう少し前の70年代後半に、ようやく出回り始めた8080で作ったコンピュータで、オーディオ記録を使いました。もっともFSKでは無く、単一周波数のトーンバーストでボーレートはテレタイプと同じ110bps、256バイトのセーブになんと25秒もかかりました。

その時の経験から言うと、再生より録音のレベル合わせがたいへんです。
なぜなら、再生はイヤホンなりヘッドホンなりを接続するので、どのテレコでも出力電圧やインピーダンスは似たようなものです。ですから、前回のようなレベルを固定した回路で、テレコの音量調整だけであわせ込みが出来ました。デジタル側にLEDを入れて、点滅具合を見て調整したのを覚えています。それくらい「だいたい」でよかったのですね。

しかし、録音の方はそうはいきません。当時のテレコは音の大小に関わらずうまく録音できるように、録音時に自動レベル調整が働くようになっていました。ところがこの特性がわからないので、ものすごく小さな音で録音されてしまったり、途中で音量が変わったりすることが「なんとなく」発生しました。このためちょうどいい信号レベルの設定がシビアで、回路設計や調整で苦労した人も多かったと思います。
そんなわけで、80年代に販売された「パソコン専用テレコ」には、録音レベルの手動調整が出来るものもありました。

SoftModemでは外部→iPhoneの関係がこの「録音」に相当します。iPhoneのマイク入力には当然、そういった自動レベル調整機能があるのでは?

ということで、アッテネータでマイクレベル(数十mVPP)に落としてみたりしたんですが、結果これでした。

Modem

下半分は前回の受信回路です。送信回路の部品は、なんとC1だけです。C1を挟んでiPhoneのマイク入力とPICの出力ポートが接続されているというわけです。この定数がデリケートで、5Vのときは1uF、3.3Vの時は0.1uFでないとうまく行きません。
しかも、波形を見てもうまく行く時と、ダメな時の違いがわからないときてます。だから、他の人がこの定数で作って、無調整で再現できるかどうかも不明です。困ったもんです。

あとで、もっとしっかり実験をしてみないといけません。

ともかく、ここまでの情報でPIC16F886を使ってモデムをこしらえました。マイコンはオーバースペックですが、190円ですからよしとしましょう。電源はcoronにあわせて3.3V(実験は電池2本)にしてあります。
例によって、マイコンで「HANAOKA 」という文字列を連続的に送り出しています。315bpsだとこのくらいのスピードです。

暫定の回路とPICのソースコード(ccsc)は近いうちに公開します。

2010年9月29日 (水)

SoftModemからの信号を受信する

リモートブレインの夏休み:iPhoneロボット

まず、SoftModemTerminalのボーレートを変更します。デフォルトでは1225bpsですが、モデムに使う予定のクロック8MHzのPICでなので、安全を見て315bpsに変更します。(あとで試したら1225bpsでも十分対応できました)

ダウンロードしたSoftModemTerminalのプロジェクトファイルから、FSKModemConfig.hを開き、315bpsのパラメータセットのコメントを外し、現在のパラメータセットをコメントアウトします。

これでビルドすればOK。試しに何か送信してみると、ジーという感じだった音が、ピロロという感じになっています。

さて、入力回路ですが、オーソドックスにこんな風にしてみました。iPhoneのヘッドホン出力をロジックレベルの矩形波に変換します。

Fskinput_2

ヘッドホン出力から47uFで直流遮断して、負荷抵抗100オームで終端します。これがヘッドホン代わりの負荷になります。ここ(A点)での信号はこんな感じ。濃いところがスペース(周波数の高い信号)で薄いところがマーク(周波数の低い信号)です。

Dscn0915

±1.2Vくらい振幅がとれてますから、トランジスタのベースに加えれば簡単に矩形波になります。これだと、ベースにマイナスの電圧がかかりますが、これくらいの電圧なら何の問題もありません。信号のスレショルドは、トランジスタの物理特性から電源電圧に関わらす約0,7Vになります。電源電圧に依存しないので使い易い回路だと思います。

もう昔のハナシになりますが、カセットテレコにデータを読み書きしたり、電話の受話器経由でデータを送ったりするには、こんな回路が大活躍したものでした。
いろいろ工夫しても、やっぱりシンプルなのが一番だったりしてですねえ。まさか21世紀にもなってこんなことをするとは思わなかったですが。

で、こんな風に矩形波になります。下がA点の波形、上がFSK-INの波形です。これがPICへ行きます。

Dscn0916

おなじみPicKit2のオマケ基板をプログラムして、モデムとして動作させてみます。上が復調結果です。FSKの信号がロジックレベルのシリアルデータに復調されているのがわかると思います。

Dscn0922

というわけで、シリアル受信のプログラムを追加して、SoftModemTerminalからのASCIIデータを、LEDに表示させてみました。
iPhoneの数字をタップし、右下(見切れてます)の送信ボタンをタップすると、基板のLEDのパターンが変わります。ASCIIコードで0x3n(n = 0-9)が数字コードです。よく見ると読めると思います。
一応受信は成功です。文字化けもありませんでした。意外と安定です。まあ、FSKジェネレータはへろへろのカセットテレコではなく、デジタルオーディオなんだから当たり前ですが。

2010年9月27日 (月)

ソフトモデムは一筋縄じゃあいかないね

リモートブレインの夏休み:iPhoneロボット

件の書籍のHPはここで、オーディオ端子からFSKで外部機器と通信できる、Serial Modemのソースコードもダウンロードできます。

とりあえずこれをXcodeでビルドしてみましたが… 残念ながらうまく行きません。Xcodeのバージョンが違うためか、日本語環境のためなのかわかりませんが、iOS2用にビルドしてみると、シミュレータでは何となく動きますが、実機ではダメでした。
この本を読むような本物のハッカーなら、なんとかできるのでしょうが… 

ということで他を探してみたら、このSirial Modemのソースを元に、ちゃんと動くiPhoneのシリアルターミナルを作っている方がいらっしゃいました。こちらです。

この方はすごいですね。iPhoneのターミナルだけでなく、Arduinoの通信ドライバやアナログ部分の基板まで作っちゃってますからね。Arduinoを使っているヒトは、簡単にiPhoneとの連携ハードが作れちゃうというわけです。こちらのブログに開発記があります。
(ところでArduinoってなんて読むんでしょう?アウヂューノ?アルディーノ?)

今回はこの方のSoftModemTerminalのソースコードを使わせていただいて、PICマイコンでFSKモデムを作り、coronのシリアルポートと通信をさせてみようと思います。

iPhoneとロボットボディの通信を見直す

リモートブレインの夏休み:iPhoneロボット

最初のフィールドテストを終えて、いろいろと問題が見えてきました。

一番の問題は、野外を自律移動することの難しさです。

現在のiRoverは、とても臆病なので、わずかな障害物にも反応して、移動を停止してしまいます。このまま進むべきかどうかは、オペレータなりネット上の人工知能なりが判断しなければなりません。
そのためには情報が必要です。ロボットボディに搭載したセンサの情報は、最も欲しいものの一つです。でも、現在のiRoverのシステムでは、ロボットボディからの情報をiPhoneにあげるチャネルはほとんどありません。唯一出来るのは、iPhoneを前に傾けることで、指示されたアクションの終了を知らせることだけです。

以前書いたように、iPhoneのSDKは頑に外部インタフェースへのアクセスを拒んでおり、正式に内蔵のシリアルポートを使うためには、僕がオバマ大統領に面会するほどの困難を伴います。

そこでこの本の出番です。この洋書には、iPhoneのサウンド機能を使った、FSKモデムの解説があります。これを使うべき時が来たのでしょうか。

Dscn0926

僕は、喋るロボットが作りたかったので、iPhoneの音声チャネルは通信に使わない計画でした。アクエストークのSDKも購入し、ぼちぼちとおしゃべりのテストも進めていました。

でも、そうも言っていられないですね。光カプラ方式は、室内などの、もっと単純で、人間とのインタラクションの必要な環境で働くロボットで使うことにして、今回は音響モデムで行くことにしましょう。

より以前の記事一覧