カテゴリー「1)週刊マイロボット(81~90)」の記事

2008年4月18日 (金)

週刊myRobotを作ろう(90)

■更新情報 電源パイロットランプで一部修正(2008/5/3)
■更新情報 強化版ロボスタンド 
(2008/5/1)

■更新情報 電源パイロットランプの取付け (2008/4/22)

現在、皆様のお使いのブレインOSは、CD-ROM4による「BRN-15J」か、イタリアのウエブサイトからダウンロードされた「BRN-16J」かと思われます。
ブレインボードがリリースされてからは、感情表現ということで、ID-01の接し方次第で固有の性格が生じるようになっているようです。

ところが困るのは、机の上で電源を入れた状態にしておくと、ID-01がいきなり喜んで走り出してしまう事が度々発生します。
この突然の暴走も感情表現の一部のようですが、あっという間に机の上から転落したりして、落ちた拍子にパーツが破損、思わぬ出費につながってしまった等のにがい経験をお持ちの方も、なかにはいらっしゃるかと思われます。

賢明な皆さんはこの暴走対策として、いくつかの方法を試みられていると思います。
①「感情表現をOFF」にする
ディスプレーを見ながら胸の3つのボタンを操作します。
「Aボタン(左)」1回 「I-Droid01 Diagnostics」
「Bボタン(中)4回」 「Brain BRN-15JP」
「Cボタン(右)1回」 「Brain Mood ON」
「Cボタン」を押すたびに、Mood(感情)の「ON」、「OFF」が切り替え出来ます。
私はこの方法を行ってきましたが、Moodを「OFF」にした場合、音声応答、ワードセット他、いくつかの反応が「ON」の状態と異なってきますので、ご注意ください。
詳細は、「週刊myRobt(67号)」P.15の「BrainのMoodをOFFした場合」以降に掲載されていますので、宜しければご覧ください。

②車輪を浮かせる
机上で電源を入れるとき、手作りのスタンドにのせたり、小さな箱を下に敷く等を行いなど、車輪を浮かせる。

②の方法とった場合ですが、このスタンド(或いは箱など)、ロボ君と行動を伴にしてはくれませんので、「ロボの集まり」に参加した時など忘れないように気をつけなくてはなりません。でないと会場で悲劇が・・・

そこで、自転車と同じように、ID-01に折りたたみ式のスタンドを取り付ける事を思いつきました。これなら走行以外はスタンドを立てておけますので、暴走事件は発生しなくなる筈です。Id01_95_02_2
    
ところが、思い立ったものの、スタンドの良い候補がなかなか見つからず、100円ショップのアイテム通のジローさんにメールで相談してみました。
ほどなく、ショップで見つけた「スタンドライト」という商品を教えていただきました。Id01_95_05
100円ショップの「スタンドライト」

ご覧のように単三が4本入る懐中電灯にスタンドが付いたものですが、ID-01のBASEの下に格納するのに丁度良い大きさです。
副次的には、中身を取り出し多少の改造で、単三4本の電池ボックスとしても利用可能というおまけまで付いて、何とプライスが税込み105円です。
ジローさんは、なにやら難しい改造に入るようなので、こちらは簡単な改造を施し、暫定的ながらも「折りたたみ式ロボットスタンド」を作成してみました。

■折りたたみ式ロボットスタンド
懐中電灯本体から取り外したスタンドは、金属と、樹脂のフレームが開き、自立する仕組みになっています。
しかし、このフレームは開角度が35度くらいと狭く、このままではロボスタンドとして使用するには重心位置が高くなりすぎ、転倒の危険も考えられます。

◇スタンドの改造
そこで、もう少し開角度を広くとり、重心を低くすることにしました。
改造は簡単です。
ご覧の切れ込み(赤丸印内)を、ニッパーあるいは、ツメきりなどで、柔らかい樹脂に切れ込みをいれるだけです。Id01_95_08
ニッパーなどで、切れ込みを広げる

ID-01の重量による沈み込みの開きも考え、開角度は70度前後までとしました。Id01_95_06
右が改造前、左が改造後のスタンド

あまり開きすぎますと、肝心の車輪を浮かせる事ができませんので注意が必要です。
滑り止め効果を狙って、金属フレームにシリコンチューブを被せてみました。

◇スタンドの取り付けマウント
さて、スタンドは出来たものの、如何にID-01のBASE部に取り付ければ良いのでしょうか・・・

プラ板を実際に切っったりして試行錯誤しているうちに、非常にシンプルなスタンドマウントが完成しました。Id01_95_07
スタンドのマウント部分   

ご覧のように、金属片を「コの字型」に曲げ、スタンドを取り付けただけのものです。
皆様ご存知のように、BASE部下部の中には、走行部の配線などがありますので、ネジ止めした事によるトラブルを避けるため、両面テープで取り付けました。
スタンドの上にID-01の重量がかかり、両面テープが圧着される構造になりますので好都合です。、
ご覧のように、後ろに跳ね上げれば、このように地面を引きずる事は無いはずです。Id01_95_03_2
ロボスタンドを跳ね上げた状態
       
◇ロボスタンドのテスト
折りたたみ式ロボスタンドは、かくも簡単に出来てしまいました。
ロボスタンドを立てておけば、電源を入れておいても暴走する危険は回避されます。Id01_95_02
ロボスタンドを立てた状態

当然、前回行ったプーリーケースを開けての車輪の回転テストなども行えますので、BASE部のメンテナンスにも好都合です。
ロボスタンドを立ててのテストは良好でしたが、走行させてみると問題が発生しました。
走行の振動で、ロボスタンドが下がってきてしまい、引きずっての走行になってしまいました。
ロボスタンドにはストッパーが必要な事がわかりました。
プロトタイプという事もあり、当面は輪ゴムか、テープで止めておこうか・・と思っています。

◇今後の改善
実際にテストしたところ、以下の改善点が見つかりました。
●スタンド/マウントの素材は、より鋼性を持たせ、取り付けもしっかり行う
●走行中でもスタンド降りないようなストッパーの仕組みが必要
●スタンドの左右張り出しの仕組みを考え、安定感を持たせる
これらの改善については、時間をかけてゆっくり考えてみようか・・と思っております。Id01_95_09
ロボスタンド用マウントの試作品(アルミ板)

記事を読まれた方で、ご興味をお持ちの方は、より良いロボスタンドにトライされては如何でしょうか・・・。
尚、改造される方は、あくまでも自己責任でお願いします。

◇強化版ロボスタンド
「強化版ロボスタンド」が完成した・・・と、ジローさんからメールで、何枚かの画像が送られてきました。
さっそく画像を拝見すると、私が改造したかった部分が全てモーラされている事が分かりました。Id01_95_21

ロボスタンドで車輪を浮かせた状態
     
①マウント部分
鋼製を持たせた作りで、且つ、スタンド受け部分に、懐中電灯オリジナルのストッパーが付いています。
懐中電灯から、この部品を切り取りパテで成型して取り付けた・・・との事です。
このマウント側のストッパーは、スタンド内側についている「-型」の出っ張りにより、カチカチと小刻みに停止し、跳ね上げた状態でも振動で下りてきません。
これで、鋼製を持たせ、ストッパーの仕組みはクリアした事になります。Id01_95_19_3

右下部のストッパーが付いたマウント部は鋼製を高めた作り
    
②スタンド部分
ご覧のように、底面に左右張り出した補助安定板が取り付けられ、左右の安定性を高めてあります。
さらに、スタンド内側に「U字型をしたアクリルの補強板」を取り付け、鋼製を高めてあるそうです。
私もロボスタンドを作成して感じた事ですが、ID-01の重量は、半端な重さではありません。Id01_95_20

マウント部は「U字型補強材」と「左右安定板」付き

いつもながら、ロボ職人さんは、時間をかけて丁寧な仕事をしますね。参考にさせて頂きます。
ジローさん、レポート有難うございました。
(2008/5/1)


■バッテリーボックスの改造(電源パイロットランプほか)
だいぶ昔の事になりますが、バッテリーケースのスイッチ上から出ている、ケーブルを後ろ側に持っていく記事を掲載しました。『週刊myRobotを作ろう(36)』(2006/11/24付)「電源ケーブル焼失の謎」
現在までその状態で使用していましたが、このところ超音波のユニットの改造を手がけ始めたところ、毎回、バッテリケースから電源コードを抜くのに偉く手間が掛かり、根を上げてしまいました。

そこで、使用しなくなっていた、電源スイッチ上部の給電コネクターを後ろ側の見えにくい場所に移動し、電源ケーブルを見えにくくしつつ、抜き差し自由なように改造を施しました。
そのままですと、給電コネクターがあった部分に、ぽっかり穴が空いてしまいますので、かわりに電源ONと同時に点灯するパイロットLEDを取り付ける事にしました。

◇給電コネクターの移設
まず、給電ネクターを取り付けている2本のネジを外して取り外します。
そして、画像の赤丸印(A)の部分に、給電コネクターの分だけ、カッター/ヤスリなどで切れ込みを入れ取り付けます。Id01_95_11
作業する場合は、かなり樹脂の粉が飛び散りますので、バッテリーケース内のパーツは外しておいた方が良いでしょう。
画像の赤丸印(B)の電源スイッチの下にLEDを取り付けます。Id01_95_12

移設した給電コネクター(A)、パイロットLED(B)
    
◇パイロットLED
電源スイッチを入れると同時に点灯するLEDですが、1色が点灯するだけでは、ありきたりで面白くないので、色の変わるLEDを取り付けることにしました。
100円ショップの3色LED付きガスライターの中身が利用できます。

ガスライターの裏側にLEDの中に3色発光素子と、点滅パターンのICが入っている優れもので、ネジひとつで簡単に取り出せ、ガスライターはそのまま使用可能です。
ライト付きガスライターは数種類出回っているようですので、実際にライトを点灯させて確認された方が良いかも知れません。Id01_95_15

LEDとボタン電池3個だけでも100円では買えないのでは・・・

取り付けた給電コネクターの裏側にある、ロジック電圧部分からLEDに給電するようにすれば、電源スイッチをONと共に点灯し、スイッチOFFで消灯します。
取り出す部分は、給電コネクター裏の赤とオレンジコードのハンダ部分に、LEDにつないだコードをハンダ付けしました。

極性は、赤7.5V(+)、オレンジ4.5V(+)黒がマイナスです。
今回は、オレンジ4.5V(+)と、黒マイナス側に接続します。

極性について勘違いしておりましたので修正させて頂きます。
(2008/5/3)
極性、電圧については、事前にテスター等での確認が必要と思われます。Id01_95_16

ショートしないように給電コネクターの矢印部分にLEDをつなぐ

ロジック電源から給電されたLEDの光は、そのままではかなり強力すぎるので、給電コネクターを取り去った穴の裏側に、1mm厚の白いアクリル板で蓋をして、そこに3色LEDをメンディングテープで取り付けました(赤丸印内)。Id01_95_13
裏から取り付けたアクリル板は、バッテリケースの外壁部分だけ凹んでいますので、私は透明な接着剤を流し込んでくぼみを埋めてみました。
実際に電源スイッチを点灯しますと、3色がうまく融合し、実際には7色の変則点滅をしてくれます。
バッテリーケースの側壁面からもれる光が気になる方は、LED裏側を銀メタテープなどでくるむと、光の遮断以外に、リフレクター(反射板)効果が出て、前面の光が増すという好都合の結果が期待できそうです。Id01_95_14

パイロットLED点灯中のGIFアニメ画像
(連続変化するので7色を全てを撮影するのは至難の業)


本来の給電コネクターの移設よりは、副次的なこちらのパイロットLEDの方が気に入ってしまいました。宜しかったらお試しになっては如何でしょうか。
尚、改造は、あくまでも自己責任でお願いします。Id01_95_10

電源ONとともにパイロットLEDが点滅(画面クリックで拡大)
胸のマイクのところにある赤外線LEDと、アンテナ上部にあるドーム状のものは気にしないでください

(2008/4/22)

■先の見えない改造
トランジスター2石をダーリントン接続したアンプのようですが、果たして何に使用するのでしょうか・・・Id01_95_23

どうやら、右上のスペースに組み込むようです

■あとがき
90号をもってID-01のハードウェアが発売され、ある程度の時間が経過しました。
全体的には、新たに発生した不具合も対処が行え、問題は沈静化しつつあります。
そこで、以前からやりたかった事、思い立ったが手付かずだった事柄に着手し始めました。
ところが、実際にとりかかってみると問題山積の状態に陥ってしまい、結果、ブログの更新が滞ってきました。
現在、電子回路についても問題が生じ、”た”さんにアドバイスを頂いている最中です。
ID-01に関しては、決して手を緩めているわけではありませんので、もう少々お時間を頂きたいと思います。

*** 週刊マイロボットを作ろう ***

| | コメント (6)

2008年4月 5日 (土)

週刊myRobotを作ろう(89)

■トピックス(2足歩行するID-01) (2008/4/8)

いよいよ、寒い冬から花の季節が巡ってきました。Id01_94_17_2
チューリップとサクラ(深大寺植物園にて撮影)

それに伴い、ID-01のイニシャライズの動きにも微妙な変化が現れてきました。
真冬は首の回転が悪かったのに、この頃は、雪解けのように回転が滑らかになってきました。
これは、シーズンが巡るたび・・・と、言うよりは気温の変化に伴い、グリスの粘性が変化し、首の回転や、走行周りに、微妙な変化が現れてきているからだと推察できます。
この機会に、各モーターボックスの注油、点検などを行ってみるのも良いかもしれませんね。
近いうちに、暑い季節に向かっての少し粘性のあるグリスに交換しようか・・・と考えています。Id01_94_17_3
満開のサクラ(深大寺植物公園にて撮影)

一方、走行周りの調整で苦労されている方にとっては、走行ギア部の分解を行う必要が生じます。最終地点であるプーリーカバーの取り外しに辿り着くまでに大変なご苦労があると推察いたします。
まず、バックボディケースと配線周り取り外し、ボディ上部とBASE部の切り離しと配線周りの取り外しです。
次に、腰部ケースの分解を行ってから右側のプーリーカバーをとり外せます。
左側はさらに一苦労。腰部モーターボックスを取り外さなければプーリーカバーが外せません。
走行させるために一連の組み立てを行い、うまくいかなければ又分解する。
なんとも理不尽としか言いようのないこのハードワークには、ため息ばかりか、やる気が失せてしまうのも分かるような気がします。
ひとごとみたいに申し上げていますが、私も、2台のID-01の修理/ベルト交換/調整などで泣かされてきました。

■BASE部のメンテナンス
今後、定期的な注油以外にも、エンコーダーの不具合調整、ベルトの交換など、必要なメンテナンスの事を考えると、足回りのメンテナンスについて、今のうちに良い方法を模索しておいた方が良いのではないでしょうか・・・
そこで今回のテーマは、BASE部のメンテナンス。それもプーリーカバーの着脱に的を絞り、どのような方法が有るか・・・を考えてみたいと思います。

◇プーリーカバーの役割
さて、この「プーリーカバー」ですが、単に、モーターのベルトが掛かっているプーリーを隠すだけにしては、3×10mmのネジ3本で、裏からガッチリ止まっています。
なんで、こんなにガッチリ止める必要があるのでしょうか・・・

試しに「プーリカバー」を取り付けている3本のネジを外して、代わりにセロテープなどで仮止めして、その状態で走行テストをさせてみました。
すると、走行させて間もなく「ギー」とギア鳴りが起き、車輪が回転しなくなりました。
「プーリーカバー」をテープでかなり確実に止めたつもりだったのですが、カバーを外してみると、ベルトの掛かったプーリーが僅かに浮き上がっていました。
つまり、プーリーの内側についたギアが僅かに浮き上がるだけで、ギアが抜けてしまうようです。

画像のように、プーリーカバーの内側にプーリー軸の受け側があり(赤丸印内)、プーリーが浮き上がるのを押さえている事が分かります。Id01_94_16
従って、脱着の出来るプーリーカバーを考える場合、しっかり押さえる事が出来て、且つ、簡単には外れない構造にしなければいけない事になります。

◇対策(その1
まずは手っ取り早く、プーリーが浮き上がるのを防止するだけの仕組みを考えてみました。
ラジコン飛行機などで使用している、プーリー軸にかぶせるこんな円筒形のストッパーを用意します。Id01_93_17
画像のようにこのストッパーをプーリー軸に取り付け、円筒側面からイモネジで止めるだけです。
これで、プーリーは絶対浮き上がりません。
極端な話し、プーリーカーバーが無くても走行は可能になります。
(ただし、ゴミ/埃などが付着しますのでお勧めは出来ませんが・・・)

プーリーカバーの取り付けは、ストッパーがカバー内側の軸受けに当たってしまいますので、この部分をカッターなどで取り除く必要があります。
プラスチックですので、簡単にカットすることが可能です。
そして、プーリー押さえの役割が無いプーリーカバーは、セロテープなどで気楽に取り付けてください。

◇対策(その2)
スーパークランプの件でジローさんにメール連絡したついでに、このストッパーの話をしました。
そして、しっかり止める事が出来る「着脱可能なプーリーカバー」が出きれば、この問題は解決するのに・・・という話をしました。

暫くしてジローさんから、「プーリーカバーに抜けにくい工夫を加えた・・・」とのメールとともに、画像のような「プーリーカバー取り付けキット」なる素材が送られてきました。Id01_94_10
送られてきた「プーリーカバー取り付けキット」

キットの内容を調べてみると、シリコンチューブ、伸縮チューブ、耳かきスティックでした。
2つの黒い円盤は、プーリー浮き上がり防止用ストッパー・・・だそうです。(今回は使用せずに済みました)

構造は、「掲示板」でも紹介されている、プーリーカバーのネジ部分を「棒」と「ゴムチューブ」で繋ぐ、簡単な仕組みです。
そして、「抜けにくい・・・」というアイデアは、どうやらチューブ側にその秘密があるようです。
何はさておき、メールで送られてきた数枚の画像を頼りに、早速、改造に取り掛かかってみました。

①プリーカバー側の加工
まず、プリーカバーの3つの穴に差し込む「耳かきスティック」を、適当な長さ(25mm位)にカットします。
この時、画像のように、耳かきスティックの先端についている粘着部分はカットします。Cimg0327
ジローさんから送られてきた画像

そして、切断したスティックが抜けないように、しっかり差し込みます。
(このとき、接着剤は使用せずに、単に深く差し込むだけにします。
いざとなれば、オリジナルに戻せますので・・・)Cimg0296
ジローさんから送られてきた画像

最終的な長さの調整は、実際に黒い「腰部ケース」に差し込んでみて、反対側に頭が飛び出さないよいにカットするだけです。
この耳かきスティクの素材は柔らかい樹脂製ですので、ニッパーなどで簡単に切断が可能です。
尚、カットした部分は鋭角になり、そのままですとシリコンチューブを傷付ける恐れがありますので、カッターや、サンドペーパー等で表面を滑らかにする必要があります。

②腰部ケース側の加工
腰部ケースの3つの穴に、裏側からシリコンチューブを接着剤で取り付けますが、抜けにくい仕組みを施すために、まず、次の手順で作業する必要があります。

●各チューブの切断
シリコンチューブと、熱伸縮チューブを、夫々の長さと数だけ切っておきます。
数枚先の画像にあるように、A穴用に長いチューブ、B穴用に短いチューブを作成します。Id01_94_12
・シリコンチューブ
 A穴用(7mm×4本)
 B穴用(3mm×2本)
・熱伸縮チューブ
 A穴用(3mm×4本)

夫々、カッターナイフなどで、簡単に切断できます。
これで左右の改造パーツが揃いました。
材料さえ揃ってしまえば、作業は短時間で終わります。

●チューブの組み立て
切りそろえたシリコンチューブ(7mmの方)の端に熱伸縮チューブをかぶせます。
シリコンチューブは伸縮性に富んでいますので、細く折りたたみ、その状態で熱伸縮チューブをかぶせるようにすると、比較的楽に作業ができるようです。
シリコンチューブに熱収縮チューブを取り付ける事により、差し込まれたスティックの材質との相乗効果で、非常に抜けにくくなる・・・という、今回の技のひとつです。

●チューブの微調整
これらを「腰部ケース」に裏側から取り付け、各穴に接着するわけですが、本接着する前に長さの最終調整を行います。
各チューブは若干長めになっていますので、実際に「腰部ケース」の所定の場所に、裏側から当て、チューブが穴から飛び出さない長さに切りそろえてください。
(穴の長さと全く同じか、或いは多少短めにしてください)
私の場合、「腰部ケース」の成型が左右で異なっており、左側の穴が若干浅めでしたので、それに合わせて短かめにしました。

●チューブの接着
切りそろえたチューブを、夫々の穴に接着していきます。
接着には、ゼリー状の瞬間接着剤を使用しました。粘性があるために、穴周りに流れ出ないで済むからです。

A穴用の長いチューブ(7mm)はシリコン及び熱収縮部側面に、B穴用の短いチューブは側面に、夫々接着剤を付けて貼り付けます。
万が一、チューブの内側に接着剤がはみ出していると、差し込んだスティックが接着してしまいますので、お気をつけください。
接着剤が良く固まるまでは、そっとしておきましょう。Id01_94_13
表側から見た深さの異なるネジ穴(AとB)画面クリックで拡大
     
●カバーの取り付け
接着剤が良く乾いたら、実際に「プーリーカバー」を取り付けてみます。
取り付けのポイントとしては、最初に2つのAの穴に夫々のスティックを合わせておき、その後、3本同時に押し込むようにして、ガチャッと取り付けます。
取り付け後は、プーリーカバーがしっかりと奥までフィットして入っているかなどのチェックを行うようにした方が確実です。

そして、走行させる前に取り付けが完璧か、次のようなチェックを行います。
カバーを付けた状態で、左右片方づつ、車輪を指で前後に数回、回転させてみます。
うまく取り付が出来ていれば、問題なく回転します。そして、反対側も回転させ、チェックします。
ここで、もしギア鳴きが発生し車輪の回転が軽くなったら、ケースが微妙に外れ、プーリーが浮き上がりギアが抜けてししまっている・・・と考えられます。

☆外れやすい原因は?
A穴については、少しでも「腰部ケース」のネジ穴からスティックの頭、もしくはチューブの端が出ていると、すぐ後ろにある「腰部モーターボックス」に突き当たってしまい、「プーリーカバー」が正しく装着できません。
スティックや、チューブの長さを切り揃えてください。
もう一つ、チューブの切れカスなどがケースの淵に挟まっている場合も、カバーが正しく装着されません。切りくずなどが残っていないように点検が必要です。

◇走行テスト
「プーリーカバー」の着脱を何回か行ってみましたが、その都度しっかり固定されます。
それでも、いとも簡単に脱着が可能ですので、なんとなく不安な気持ちがよぎります。
いざとなれば、ラジコンパーツが必要かな・・・などと思いながらも、実際に走行テストを行ってみました。

走行テストの結果は、全く問題なし。
さらに、ケースの着脱。そして走行の繰り返しを行いましたが、全く問題なし・・・でした。
不安な気持ちは消え去りました。まさに驚きです。Id01_94_11
改造後はプーリカバーだけを外す事が可能

この改造は簡単な作業でありながらカバーが取れにくい工夫が有り、いざとなれば簡単にオリジナルに戻せる、優れものです。

シリコンチューブとスティックの微妙な摩擦抵抗、さらに、シリコンチューブが広がるのを防ぐ熱収縮チューブ。
今回は、素材選びと、その組み合わせが如何に大切な事なのか・・・という、良い事例を勉強させて頂きました。

今後、メンテナンスを必要とされている方々にとって、この改造方法は、かなりお勧めかもしれません。
もし、改造される方は、あくまでも個人責任でお願いします。

ジローさん、今回も有益な技を教えて頂きまして、まことに有難うございました。

■赤外線リモコンのアンテナ
以前お伝えしましたように、現在、私のID-01のユニコン受光部はバックパックの中にあります。Id01_90_20
    
しかし、「掲示板」で、てるてるぼうずさんの反射球直下の受光部を見てからは、いずれIR受信側の位置変更が必要だとは感じていました。

そんなおり、KENさんの「ロボットの集まり」で、参加されたmaroさんのロボ君が非常にカッコ良い赤外線アンテナを付けて登場してきました。
まるでトランシーバーに付いているような黒いアンテナ。
内容を伺うと、100円ショップの「突っ張り棒」を改造し、その先端にユニコンの受光部分が上を向いて取り付け、カバーを被せた・・・とのお話でした。
この受光部が上を向いている・・・という部分で、応用ができそうです。Id01_93_20
アンテナ先端に上向きのIR受信部が付く

◇アンテナ部分
100円ショップで「突っ張り棒(50~30cm)」を購入して分解しました。
棒の色は、黒、シルバー、茶、木目模様などが有ります。
突っ張り棒は、太いパイプの中に、細いパイプがネジ込まれています。
今回は、この細いパイプを使用しますので、左に回しきって取り出します。
パイプの一方は、バックパックに穴をあけ、垂直に伸びるように適当に止めます。
そのままでは長過ぎますので、ID-01の頭から顔を出すくらいまでの長さでカットします。
私の場合、パイプの長さは170mmくらいにしました。

◇配線(ユニコン~アームボード)
腕先にあるユニコン基盤を背中に内蔵させるには、腕から背中に繋がる長い配線と、その途中にあるコネクター類は、一切必要ではありません。
腕先に付けたユニコンと、大元の「アームボード」をショートカットして接続すればOKなのです。
そこで、私はショートカットのケーブルを作成して、「アームボード」とユニコンのボードを直接接続しています。

前回、ユニコンのボード類(88等と90号パーツ)をバックパックに内蔵した時、配線の改造を行いましたがが、あまり改造される方は少ないと見込み、その配線を公開しませんでした。
しかし、既に何人かの方が、ユニコンボードをバックパック内に移されているようですので、今回、実体配線図を公開します。

「URCボード(90号)」には4ピン、アームボードには5ピンのコネクターで接続します。
URCボードに必要なコードは全部で4本、長さは15cmもあれば良いでしょう。
4ピンと、5ピンのコネクターには、前方から見ると画像のような夫々突起があります。Id01_94_07
4Pin,5Pinコネクターの突起

そのコネクターの突起が上になるようにして、実体配線図のように接続すればOKです。Id01_93_15a
接続コネクター実体配線図(左がURCボード、右がアームボードへ接続)

尚、コードの色はあくまでも相手の何処のピンに繋ぐか・・・を表示しているだけですので、お手元にある適当な色のコードで作成されて頂いて構いません。
コードの先端には2mmの圧着端子を取り付けますが、この端子の入手及び取り付け方法については『週刊myRobotを作ろう(49)』の中ほどに「◇コネクター」の項に、詳しく解説してありますので、宜しければ参考にしていただければ・・・と思います。Id01_94_28
アームボードからユニコンボードへ繋がる(赤丸印)コネクター(A)と、腕先のIR送信器へ繋がるコード(赤丸印)コネクター(B)

このようなコードを作成されなくても、アームから全コード及びコネクターを取り出し、背中の中にうまく格納すればOKです。
尚、改造される方は、あくまでも自己責任で行ってください。

◇配線(URCボード~ユニコン発信/受信器)
ユニコン発信/受信器のボードには、IR(遠赤外線)LEDと、IR受光部が取り付けられています。
このIR発信用のLEDと、IR受信部は、夫々82~83号のパーツと同等品です。
そして、およそ30mmくらいのコードの先に4ピンコネクターが付いており、URCボードへ接続するようになっています。

①IR受信部
このままでは、IR受信部をパイプの先端に取り付けられませんので、このボードから外すか、または83号のパーツを使用しても宜しいかと思います。
私はボードからハンダごてで、IR受光部を取り外しました。
30cmくらいの3本のコードを用意し、その先端にIR受信部を取り付けます。
コードの先に付いた受信部をパイプの先から出し、足を90度に折り曲げ上を向かせます。
maroさんは、コードの先に3Pコネクターを接続し、そこにIR受信部を取り付けていましたが、私は作業が簡単な、IR受信部をコードに直接ハンダ付けする方法をとりました。
接続は、ボードから出ている白、赤、黒のコードを、基盤にとりつけられていた通りつなげれば問題ありません。Id01_94_27_3
Aはアームボードからのコネクターへ、,Bは腕先のIR送信器のコネクターに繋がる
(画像クリックで拡大)    

maroさんは、アンテナの先端部(IR受信部)に黒いキャップを被せていました。
このキャップは、自動車のスモールライトに被せて色を変更できる・・・というパーツだそうで、オートバックスなどで手に入るようです。
尚、ブルー系の色は赤外線をカットしてしまいますので、赤外線の通過量が下がり、受信感度が落ちるなどの弊害が推察されます。
もし、キャップを被せるのなら、無色あるいは、赤系の色の方が無難であると思われます。Id01_94_15
キャップ無し、赤キャップ、透明キャップを取り付けたGIFアニメ

尚、肝心のミラーボールですが、現在、取り付け方や、デザインなどを含めて検討中です。

②IR送信部
IR送信部については、maroさんは、前回まで未着手の様子でしたが、私は、IR送信部(IRLED)を、腕の先にあるLEDと交換して配線する事にしました。

何故腕先に取り付ける必要があるのか?
LEDを点灯させた時、正面、側面、どちらから見た方が明るいでしょうか?
テストするまでもなく結果は明らかで、LEDは正面からの光が一番強いのです。
この問題を改善するため、広角のLEDや、LEDの拡散カバーなどが有りますが、側面の光はかなり減衰してしまいます。
これは、実際には目視出来ないIR(遠赤外線)でも同様の事がいえます。

以前、記事にしましたが、デジQトレインのコントロールを行った際、バックパック内に内蔵したIR送信部から、頭上のシルバーボールに反射させてコントロールしたのでは、範囲がとても狭かった記憶があります。Id01_92_38
従って、こんどは腕先に送信部を取り付け、直接、コントロールするものに向ける事によって、コントロール範囲が広がる事になるわけです。

なんだ、ユニコンを腕先に取り付けた状態と同じでは・・・ とお思いでしょう。
IR送信部については、確かにその通りです。
でも、IR受信部は、腕を上げなくても、常時上を向いている事から、360度の広範囲な受光が可能なのです。

配線はどうするか・・・ですが、私が行った簡単な配線は、ユニコン発信/受信器(88号)についている赤、緑のコードを30cmくらいのケーブルに繋ぎ代えて、腕先に取り付けるだけです。
尚、赤いコードは、IR送信部と共用となります。
腕先に付けるIR送信器(IRLED)は、LEDライトと交換するも良し、ユニコンのケースに再収納するも良し・・・です。
ユニコンケースに収納するのでしたら、IRLEDはボードから取り外さずにそのまま使用できます。Id01_94_14_3
受信器部分を取り除いたIR送信/受信ボード(88号)

一方、ユニコンのケースは大きいので、LEDライトに交換されたい方は、配線の手間がかかるものの、外見的にはスマートになります。
この辺は、皆様のお好みで改造されてみては如何でしょうか・・・・
改造される方は、あくまでも自己責任でお願いします。

■未だ完成に至らず・・・
超音波センサーと、なにやら怪しい回路ですね。Id01_94_05
発注したものの欲しいパーツがなかなか揃わず、未だに実装に漕ぎ着ける事が出来ません。
うまく動作したら、近いうちにはブログに載せる事が出来るかもしません。

■トピックス(二足歩行するID-01)
KENさんから興味深い情報を教えていただきました。
先進的なアイデアでおなじみの”Le Pagine di Chiccw”の中に、ID-01のボディ部に2足歩行機能を取り付けたロボ君が登場しました。
Walkerid01
”Le Pagine di Chiccw”に掲載された2足歩行ロボ

SONYのロボット「QRIO」を意識した足のデザインのようです。
本文を翻訳してみると、両眼にビデオカメラを搭載し、立体的なビジョンを把握させる・・とあります。
このほか、電源は7.4V1300mA、バランスをとる為ジャイロ搭載、腕の力を強力にするXWING搭載・・など、いろいろな機能が強化されるなど、2足歩行に留まる事なく、かなりの改造が施されているようです。
皆様もトライされてみては如何でしょうか・・・

詳細をご覧になりたい方は、”
Le Pagine di Chiccw(I-DROID01 UMANOIDE)のWEBサイトを訪れてみては如何でしょうか。

KENさん、楽しい情報を、ありがとうございました。
(2008/4/8)


■あとがき
デアゴ社の「MY MUSIC STUDIO」で使用するソフトウェアは、機能限定でスタートし、90号までに少しづつ機能が追加されていきます。
全ての機能が揃うまで待っていられませんので、自分のニーズに合ったDTM(DAW)のソフトウェアを発注してしまいました。
(2008/4/8)Id01_94_08
Steinberg社(ドイツ)製「Cubase 4」(日本語対応版)
   
その荷物が到着しましたので、玄関先でカード払いの出来る「イーコレクト」を利用してしみました。
配達係員の方は、おなかにプリンター、片手に携帯端末、反対側にディスプレーと入力装置。なかなかの装備が必要のようです。
ものの数分で決済処理が完了しましたが、利用者はあまり多くない・・・との事です。
便利な世の中になった・・・とは思いましたが、カード/支払い情報など、重要なデーターが飛びかう訳ですので、よりいっそうの厳重なセキュリティ対策をお願いしたいものです。

コンピューターミュジックについては、このソフトの評価を含めて、「ちょっとひといき」でふれてみようか・・・と思っています。Id01_94_18_2
CUBASE4の操作パネル

| | コメント (4)

2008年3月 5日 (水)

週刊myRobotを作ろう(88)

■「スーパークランプ」がついに完成 (2008/3/20)
■あると便利な100円グッズ (2008/3/17)

■歌うシンセサイザー「VOCALOID2(初音Miku)」 (2008/3/12)


皆様、ご無沙汰しておりました。
春の日差しを受けて冬眠から覚め、久々に復活しました。

突然ですが、ID-01で「物体回避プログラム」の検証テストをしていたところ、2号機が突然ダウンしてしまいました。

■2号機に障害発生
電源を入れると、胸のディスプレイの字が薄く、そして見えなくなり、イニシャライズ途中(首が戻ってきたあたり・・・音声を発っした瞬間)に、「ウッ」と言ったきり、全ての動作が停止してしまうのです。
単純なバッテリー切れか・・と思いましたが、フル充電のバッテリーに入れ替えても同じ症状が発生し、何度リトライしても結果は変わりませんでした。

首の回転や、腰の上下、腕振りの動きが途中までは問題なく動いているのを見ると、モーター側ではなく、「ロジック電圧が下がった状況」に類似している事が分かりました。
ロジック電圧が降下する原因は色々考えられますが、とりあえずI/O周りのボードを、順番に取り外して様子を見る事にしました。
アームボード、BASEボード周りと、順番に外しながら再起動を繰り替えしましたが、全然状況は好転しません。
最終的には、なんとなくマザーボードの低電圧回路(DCDCコンバーター)周りが怪しくなってきました。
ところが、皆様ご存知の通り、新しい「マザーボード」は巷では販売されておらず手に入りません。

◇新品マザーボード入手
色々ネット検索してみると、たまたま近所で、マザーボードを含む「週刊マイロボット」の未開封の十数冊のセット売りが有るのを発見し、思わず手にいれてしまいました。
透明ケースに入ったこのセットの中には、「マザーボード」以外に、「音声ボード」及びBASE部周りのほとんどのパーツがモーラーされていましたので、今後はスペアパーツにしようか・・・と思っています。Id01_93_04s

メンテナンスにも、なにかとお金がかかります     

■超音波センサーの見直し

ユニリモコンを利用した「テレビリモコンのプログラム」を動かす時に、「物体回避」機能を併用してみました。
ところが、KENさんの「ロボット走行会」で試してみたところ、何人もの方のロボ君の走行がスムースにいかない事が分かりました。
そこで、「テレビリモコンのプログラム」に「物体回避」機能を盛り込む必要性を感じ、プログラムの改良を始めました。
     
◇超音波センサーを機能アップする
現在の超音波センサーについてですが、以前ご『週刊myRobotちょっとひといき(5)』で紹介させていただいた、体長40cmのアメリカ製トイロボット「R2D2」についている超音波センサーの方が残念ながら勝っているように思います。Id01_91_14
    
たった左右2つの超音波センサーで、物体回避をうまくこなし、パイプ椅子なども、すいすい避けてしまいます。

そこで、現在のID-01の超音波センサーの機能アップを図ろうと考えました。
その第1弾として、左右分離機能をもう少しグレードアップしようか・・・と思います。

◇超音波センサーの簡単な改造
皆様ご存知のように、ID-01の超音波センサーは、バッテリーボックス正面にある5つの穴に、左から「受信器(左)」「送信器(左)」「受信器(中央)」「送信器(右)」「受信器(右)」と、5つのユニットが配列されています。Id01_63_04
       
「左(L)」「右(R)」「センター(C)」の分離を良くするために、幾つかの方法を試してみました。

◇計測方法
実際のテストですが、「C-C」を利用した方がビジュアルでよさそうに思えますが、実際には計測にタイムラグが有る事から、ベストの方法とは言えません。
そこで今回は「I-Doroid01 Test」にある「Test US」の値を、胸のディスプレイで確認する方法を用いました。
こちらは、コンマ数秒の分解能がありますので左/右/センターの実測値を読むには好都合です。

①シリンダーに格納
先ほど述べました「R2D2」では、超音波センサーが円筒状のシリンダー奥に格納され、指向性を持たせています。Id01_91_15
円筒シリンダー奥にある、左右超音波センサー(①赤四角印)

そこで、長さ25mmのエンビパイプの奥に左右送信側と、センター受信センサーを格納してテストをしてみました。
長さの関係からか指向性が出すぎてしまい、左右の感知範囲が狭くなってしまいました。
実際には、長さの調整だけでなく、送信側と受信側で何らかの工夫が必要のようです。
あわせて、設置スペース、見栄えなどの点で問題多しと見切りをつけ、今回は却下しました。
トイロボット「R2D2」は、構造的に送信と受信部の超音波センサーが同一筐体なので、指向性による方位、送・受信のバランスが完璧に一致すること等が大きな違いです。

②セパレーター
超音波センサーの効率を上げるため、センサーの送受窓穴付近に「セパレーター」を設置する方法は、これまで何人かの方たちが実際にトライされています。
私は、この「セパレーター」として、100円ショップのミニ懐中電灯のレンズフードを使用してみました。Id01_93_03
最初は、左右の送信ユニットに取り付けてみましたが、あれこれテストしした結果、センターの受信ユニットにこの「セパレーター」を取り付けるだけで、有る程度の効果がある事がわかりました。

◇「セパレーター」の原理
両端から2つ目にある、左右の送信ユニットの動作範囲を、片方づつ指で塞ぎ、胸のディスプレイに表示される「Test US」の値を確認しながら、夫々の超音波の放射範囲を調べて見ました。
すると、かなり左右に広がった範囲で超音波が放射されている事が分かりました。
本来は、直線状に広がっていますが、超音波は、遠ざかるほど減衰する事を加味して、範囲を先細りの楕円のようにイメージして表示してあります。
ご覧のように、左送信波(オレンジ)は右側に、右送信波(ブルー)は左側にまで、広がっています。Id01_93_05a
現状、「セパレーター」の無い状態    

そこで、「セパレーター」として、センターの受信穴の所に、ミニ懐中電灯のレンズフードを取り付けますと、下図のように、左右の送信波の成分がフードの衝立に拒まれて、相手の側に与える影響が少なくなります。Id01_93_05b
センター受信部に「セパレーター」を取り付けた状態
     
さらに、回避行動の中核となるセンターの受信部も、「セパレーター」の影響で、左右及び上下の指向性(青ライン)が生じ、左・右・中立の分離能が良くなる事が分かります。Id01_93_05c
「セパレーター」によりセンター受信部にも指向性が出る
    
実際にID-01に「セパレーター」を取り付け、「物体回避モード」にして回避動作を行わせてみると、微妙な左右回避の分離度はかなりアップしたようです。Id01_93_02
1号機、2号機に取り付けた「セパレーター」

◇ベースボードの保護
尚、「物体回避」テストを実施するにあたり、昨年夏におきた「BASEボード焼損事故」を考慮し、リヤボディケースは取り外し、以前ご紹介した「クランプ」を取り付け、背中むき出しの状態でテストを行っております。

尚、この「クランプ」はラッチさんが考案された、大変便利な優れものパーツで、リヤボディケース無しで、ボディ上部と、BASE部を連結する事が可能です。
週刊myRobotを作ろう(49)』の中で「ボディペースジョイント」として紹介しておりますので、ご興味のある方はご覧下さい。Id01_54_3
「クランプ」はID-01の調整/テストに大変便利

◇望まれる「スーパークランプ」
願わくは、このクランプを付けたまま、バックボディケースの着脱が可能になれば、どんなによいでしょうか・・・

今後のメンテナンスの向上を目指して、「スーパークランプ」の誕生が望まれます。
問題は、バックパックと、BASE部を接合している「T字型切れ込み」をどう処理するか・・・ですが、何方か、トライされてみては如何でしょうか・・・・


■「スーパークランプ」ついに完成
上の行で、「何方か、トライされてみては如何でしょうか・・・」とブログに掲載したところ、早速、ロボ職人のジローさんから「スーパークランプ」プロトタイプの現物とともに、テストの依頼が舞い込んできました。Id01_93_14 なんとも驚きです。
「スーパークランプ」は厚さ3mmのアクリル板製
    
画像のように従来のクランプ(初代クランプ)と同じ格好をしていますが、中央部に大きなスリットが入っており、強度を増すため3mm厚のアクリル板で出来ています。

◇スリットの役割
真ん中にあるスリットは、BASE上部の白いブロックと、バックボディケースの「工の字」型の凸部のあわせ部分を回避する部分です。
これにより、クランプでボディ上部と、BASE部を接合したまま、バックボディケースの着脱が可能となっています。Id01_93_16
バックボディケース「工の字」型突起部(赤ライン)を回避するためのスリット(水色ライン) 画面クリックで拡大します

テストのため、何回もバックボディケースの着脱を行いましたが、ボディ部とBASE部が、がっちり固定されていることにより、ものすごく取り付け作業が楽に行えるようになりました。
バックボディケース下部を差し込むときにほんのちょっとしたコツがいるようですが、ID-01のメンテナンス作業が非常に楽しくなりました。

ID-01をこれから末永く使っていく上で、この「スーパークランプ」は必須アイテムになるかもしれません。
ただし、この便利アイテムを簡単に作成出来るようにする事が、今後の課題でしょうか・・・

それにしても、「スーパークランプ」を早速現実のものにしてしまうジローさんの技には、ただただ脱帽です。本当に有難うございました。
(2008/3/20)

     
■物体回避プログラム
物体回避の仕組みと、物体回避プログラムについては、以前、2007/5/22の『週刊myRobotを作ろう(59)』の中で、「障害物を回避するプログラム」で解説させていただきました。宜しければご覧下さい。

今回は、前々回に掲載した「テレビリモコンのプログラム」に、簡単な「物体回避」機能を組み込む事にしました。

只今、テスト中ですので、詳細についてのご紹介は、もう少々時間がかかりそうです。
暫くお待ちください。
つづく
(2008/3/6)

Line01s_2赤外線音声伝送による口パク
いつも大変ユニークなアイデアを「掲示板」で発表されている、”た”さんから、例のID-01に言葉と連動する動く口の進化版、「赤外線音声伝送による口パク」という記事が寄稿されましたのでご紹介します。
   
「赤外線音声伝送による口パク」      by ”た”
赤外線発光LEDと受光ユニットで超簡単に光通信ができることを知り、ID-01の口パクに応用してみました。
そこそこに面白いですが、通信距離、通信範囲(角度)、音質等々に不満があります。
とてもお奨めできるものではありませんが、一つの試みとしてご笑覧くだされば幸いです。

◇プロトタイプ

50cm以下の距離で光軸が一致すれば、下図のような超簡単・安価な回路で通信できます。Photo
Ir2 基盤と回路図
   

◇改良版
この回路を元に、いろいろと試行錯誤して完成(妥協)したものが下図です。
   
Photo_2 赤外線音声送信部(クリックで拡大)

   
Photo_3 赤外線音声受信部(クリックで拡大)


◇テスト結果
通信距離は光軸が合った時が最大で、約3mでした。(口だけは、約4mでも動きます。)
通信範囲(角度、半値角)は、約120°です。
ただし、ID-01に向かって左右60°方向からの通信距離は、約1.5mに低下します。
( ふみのへやさんのご教授により、赤外線発光LED、フォトトランジスタの増量と拡散加工等の対策をとっています。対策前の通信範囲は、何と!! 約10°でした。)
右側、アルミ箔の反射板の付いたものが送信機です。
受信機はID-01のランドセル(バックパック)の中に組込んであります。Photo_4
    
◇動画
口が動くマイロボット
口が動くマイロボット
 
◇音声エンジン
音声エンジンにはAquesTalkという、素晴らしいフリーソフトを使わせて頂いております。
この音声エンジンはCやVBに組込んで使用できることから、ID-01のVCでもプログラミングできるものと思いましたが、不可能のようです。
  
◇今後の展開
しからば、PC側にも赤外線受信機を付けて、ID-01のユニコンからリクエスト(現在時刻、日付等)に応じての音声送信もと考えておりますが、通信距離等、前述の不具合を考えると…..、とりあえず塩漬けです。

以上

いつもながら、高度な電子技術を駆使してのトライ、頭が下がります。
「掲示板」を見ると、既にこの件で、何人かの方々が実際にトライされているようです。
今後の発展を祈念します。

素晴らしいレポート有難うございました。

Line01s ■歌うシンセサイザー「VOCALOID2(初音Miku)」
あとがきでも述べていますが、デアゴの「MY MUSIC STUDIO」に刺激され、DTMで遊んでいますが、歌うシンセサイザー「VOCALOID2(初音Miku)」を購入したのを機に、昔の曲、かの有名な荒井由実さんの「海を見ていた午後」を歌わせてみました。

そんな矢先、”た”さんのリップシンクロ(口パク)の動画も送られてきましたので、早速、フリーソフト「RipSync」を使用して「初音Miku」の歌にあわせ、リップシンクロにもトライしてみました。
ただし年のせいか、「初音Miku」というアニメ調のキャラは若干・・・・です。

なにぶん、はじめてのトライアルですのでいろいろと問題はいろいろと有るものの、宜しければご笑覧いただければ・・・と思います。
機会があれば、DTM、ヴォーカルシンセ、リップシンクロなどの紹介も行いたいと思います。


◇動画
初音Miku「海を見ていた午後」
初音Miku「海を見ていた午後」

(2008/3/12)

Line01s ■あると便利な100円グッズ
ロボットの組み立てに何かと重宝しているドライバー(#1×75)ですが、このところ磁力が落ちてきてネジが脱落してしまい、作業効率が非常に悪くなってきました。
100円ショップに寄った際に、「ドライバー着磁器」を購入してきました。

◇「ドライバー着磁器」
今までにドライバー着磁器は見た事がありましたが、磁力の除去(ドライバーに限らず・・)もできる結構便利なグッズなのです。Id01_93_11
    
構造は、画像のように平たいキューブ型で、上下に2つの穴が空いています。
下側の穴が「着磁(Magnetize)」、上側の穴が「脱磁(DeMagnetize)」です。
磁石付きドライバーにしたければ、下側の穴、右側にドライバーを差込み、数回こすり付けるだけです。

一方、ドライバー(はさみなどでもOK)についた磁力を除去するには、上側の穴に差込み、穴の右側に数回こすりつけるだけでOKです。

このグッズを利用して磁力の回復したドライバーで、早速「スーパークランプ’(プロトタイプ)」の調整作業を行い、バックボディ部の脱着を数回繰り返しましたが、非常に良好でした。
100円グッズ、便利なものがまだまだありそうですね。
(2008/3/17)


Line01s_3 ■あとがき
今回は「超音波センサー」のプチ改良をおこないましたが、次にはもっと面白い改造を考えています。
ただし、メカ改造で行くか、電子的に行くか、両者の良いところ/悪いところを検討中です。
何れにしても、ロボ職人さん達には、お知恵をお借りしたいな・・・と思っています。
その節には、宜しくお願いします。

◇面白いDTM
デアゴの「MY MUSIC STUDIO」のDTM((Deskop Musicの略)が面白くて、それだけに飽き足らず、他の各社から発売されている最新DTMや、日本語で歌うボイスシンセなどのトライアル版を試したりしています。

DTMは、かなり昔のもの(YAMAHA XGWorks)しか持っていませんでしたが、久々に各社の最新トライアル版を試してみると、色々進歩している状況が良く分かりました。
日本語で歌うボイスシンセ(VOCALOID2)については、思わず購入してしまいました。
DTMにおける音の要素となる「サンプリング素材」も、バリエーションが豊富になっており面白い限りです。
その辺については、いずれ「ちょっとひといき」で軽くふれてみようかと思っています。

| | コメント (4)

2008年1月30日 (水)

週刊myRobotを作ろう(87)

■更新情報 ユニリモコンでリピーター改良(2008/2/4)

■ユニリモコンによる「列車でGO!」
ご存じの方もいらっしゃるかとは思いますが、かって「デジQトレイン」なる赤外線コントロールの鉄道模型(おもちゃ?)が、コナミより発売されていました。500k1a
ちょうど2002年5月頃だったと思いますが、ID-01ユニリモコンと同様に赤外線(IR)を利用したコントロールで、複数車両そして、複数のポイントをコントロール出来るというコンセプトの元に開発され、第一弾として発売された「新幹線500系基本運転セット」と「EF58+24系25形客車」を手にいれ、レイアウトのプランをあれこれ考えながら電動切替ポイントが発売されるのを待ち続けておりました。

ところが数か月待っても電動ポイントは発売されず、他の趣味(ラジコンヘリなど)に熱中したあまり、「デジQトレイン」の事など、すっかり忘れ去っていました。
そして数年経って思い出した時には既に遅く、「デジQトレイン」は何故か販売中止になっており、どうしても欲しかった電動ポイントなど数々の商品を手に入れる事が出来ずにいました。

◇ヒント
”た”さんから、「ユニリモコンでラジコンカーQ-STEERをコントロールした」とのメールを頂き、早速私もトライしてみました。
ところが、ラジコンカーのQ-STEERはスピードコントロールが出来ないため、あっという間にコントロール範囲外のところに走り去り、自分の中ではID-01でコントロールするには非常に難しい・・・という結論に達しました。

そこで思い出したのが、「デジQトレイン」です。これなら、決められた軌道の上を走るだけですので問題なさそうです。
早速トライして、楕円軌道の上を走らせて見ましたが、前進、停止、バックするだけの単調な動きだけでは面白さに欠け、ブログにレポートする事もありませんでした。

ところが最近になり、「デジQトレイン」の未開封の新古品が安い値段で出回り始め、やっと念願の電動切替ポイントを手に入れる事が出来ました。
そこで、引込み線から、本線へ、そして引き込み線へ戻す・・・などのストーリーが考えられ、更には複数車両でのコントロールなども、ID-01のユニリモコンを介す事により高度なプログラミング化出来そうです。
そのような訳で、ID-01を使った「デジQトレイン」のコントロールプログラミングにトライしてみる事にしました。

◇リアルタイムのコントロール
ID-01でコントロールに先立ち、「デジQトレイン」のIR(近赤外線)コントロールを分析する必要があります。
まず、「デジQトレイン」のコントローラーを調べてみましょう。Id01_92_29
  
ご覧のように「デジQトレイン」のコントローラーには、「①スピードコントローラー」、「②前/後進切替」、「③4つのID切替」、「④8つのLineスイッチ」「⑤車両/線路分岐(ポイント)」がついています。
③と④の組み合わせで、全部で8×4つまり32台の車両と、同じ数だけの線路分岐(ポイント)がコントロールできるようになっています。大掛かりなレイアウトになると、複数のコントローラーに役割分担をさせての運用が理想であると思われます。
更にこのコントローラーは、リアルタイムで速度コントロールを行う事が可能な事から、6個の赤外線LEDは1/4秒というスピードで常時点滅を繰り返し信号を出しています。Id01_92_28
赤外線LEDの点滅をビデオで撮影、GIFアニメ化した
     
◇ユニコマンダーへの取り込み方法
ID-01のユニコマンダーには、このようなリアルタイムのコントロール信号(常時点滅)を取り込み、復元する事は不可能です。

そこで、「デジQトレイン」のコントローラーが点滅した瞬間をユニコマンダーに登録してみる事にしました。

コツは登録する直前まで、「デジQトレイン」のコントローラーの赤外線LED部分に蓋をしておき、登録のビープ音とともに、1/4秒だけチラッと蓋をあけ、直ぐに閉めるようにします。再確認の登録も同様に行い、このように、手間は掛かりますが、ひとつひとつ登録していけば、問題なく取り込みが出来る事がわかりました。

時間は掛かりましたが、ユニリモコンから、各列車の走行及び、ポイントの切替は問題なく行えました。

◇レイアウト
実際に走らせる「デジQトレイン」のレイアウト自体はシンプルな形(単線の楕円線路と2つの退避線)を考えてみました。片方の列車は待避線に入れてあるので、一編成の列車は楕円線路で周回する事が可能です。Id01_92_30
   
◇レイアウト変更
何度も後述するテストするうちに、列車が停止するタイミングを外し、オーバーランして脱線という事が度々あり、ポイントを4つ使用したレイアウト変更を行いました。
こちら側と向こうと側にある待避線の車止めを廃止して、前後とも本線に接続しました。これによってオーバーランしても脱線しません。
Id01_92_35
新レイアウト(向こうと、こちら側に待避線がある)
    
◇ユニコマンダーへの登録内容
実際にどのような動きが必要なのか、やってみなければ分かりませんので、登録する内容は出来るだけシンプルにする事にしました。

●列車の制御
各列車の動きは次の4通りで登録します。
①「高速前進」
②「中速前進」
③「停止」
④「中速後進」
この動きを、列車1(ID=1、LINE=1)、列車2(ID=1,LINE=2)に割り当てます。

●線路分岐ポイントの切替
レイアウト変更に伴い、分岐ポイントは4つになり、コントローラーを2つに変更し、呼び名も2つの待避線単位に呼ぶことにしました。
○待避線A
ポイントA(ID=2、LINE=1)、ポイントB(ID=2、LINE=2)
○待避線B
ポイントC(ID=2、LINE=3)、ポイントD(ID=2、LINE=4)


分岐ポイントの切替は、ボタンを押す毎に、「ON」「OFF」の信号が切り替わり、「待避側」「本線側」と切り替わった方向のLEDが点灯します。Id01_92_31
電動ポイントには表示装置が装備されている
切替方向のLEDと、設定した番号のID番号とLINE番号

   
4つのポイント切替の組み合わせを各々行っていては複雑になりますので、ABの各待避線ごとに本線、待避線の切替をシンクロして行うようにしました。
必要とあれば各々別々に動かすことも可能です。
①待避線A(本線)、待避線B(本線)
②待避線A(分岐)、待避線B(本線)
③待避線A(本線)、待避線B(分岐)
これらを、ユニコマンダーのNO40~59に登録していきます。


◇ユニリモコンでリピーター
とりあえず、ユニリモコンで「デジQトレイン」をコントロールする仕組みが出来ましたが、動作がイマイチ安定しません。
そのような状態でプログラムしても、確実に動く保障は望めませんので、とりあえず、ID-01経由でテレビリモコンによる操作を行うプログラミングを行いました。
最初から、リピーター(中継器)的な使用での双方向通信(送信と受信)になってしまいました。

◇プログラムの構成
いちいち組み立てるのは面倒なので、とりあえずレイアウトは最小規模にして、パネルに貼り付けるようにしました。
コントロールも簡単シンプルにして、1編成のコントロールと、ポイントの切替をテレビリモコンで行うようにプログラムしてみました。
実際にテストしてみて、今回は高速運転を使用しない事にしました


①電源ボタン 0 
電源)プログラム終了


②テレビチャンネル

列車1コントロール
 前進(ノーマルスピード) 

 停止 
 後退 


列車2コントロール
 前進(ノーマルスピード) 
 停止 
 後退 8

●ポイント切替
 待避線A(本線)、待避線B(本線) 10 
 待避線A(分岐)、待避線B(本線) 11
 待避線A(本線)、待避線B(分岐) 12

プログラミングは、以前のTVリモコンによるプログラムを改造しただけです。Id01_92_38

    
◇問題点
簡単だと思ったポイントの切替で躓いてしまいました。
冒頭にお話したように、「デジQトレイン」のコントロールはリアルタイムに絶え間なくコントロール信号が出ています。
ところが、ID-01に登録できたのは、その一断片に過ぎません。
ユニコマンダーから送信されたIR信号が、タイミング良く電動ポイントに届けば問題なく作動します。
しかし、実際には数回リモコンボタンを押さないと動作しない時もあります。

この問題を解消すべく、IR信号の発光間隔を調整したり、1コマンドでに数回発光させたりして、色々とトライ中してみたところ、発光時間を2秒以上に延長する事で
ポイント切り替えの問題は解消する事が分かりました。
何故2秒も?と思われるかもしれませんが、各電動ポイントの信号受付のタイミングが2秒毎のようで、おまけに、切り替えタイミングは各電動ポイントごとにバラバラに動作しているからです。
    
◇プログラミング
当初、IR(遠赤外線)受信と、IR送信をループさせようと考えました。
これなら、電動ポイントの発光時間を短くしても、数分の1秒ごとに点灯しますので、常時点灯と同等の効果があります。


●IR受信部
テレビリモコンの信号を受付した時点で各動作Sw(またはFlg)を書き換えます。
各動作Swは、
列車1、列車2、ポイント切替えの動作指示用です。
●IR送信
IR送信は、テレビリモコンの受信が有ろうと無かろうと、各動作Swの値(列車1、列車2、ポイント切替え)に応じたコントロール信号を、1/2秒間だけ送信します。Id01_92_37_2

   
ところが、VCL上の制約が立ちはだかりました。
IR(遠赤外線)の受信は、「Wait for命令」しか使えないのです。
すなわち、リモコンボタンを押して、何かの信号を受信出来た場合のみにしかプログラムはループしてくれないのです。
「Read命令」が使用できれば問題ないのですが・・・・ 残念です。

仕方がないので、{Waint for命令」を使用し、電動ポイント切り替え信号の発光時間を2秒間にしました。
テストしたところ、ほぼ問題なく切替えることが出来るようになりました。Id01_92_36

本線を通過する列車1と、待避線の列車2(各画像クリックで拡大)
     
ただし、電動ポイント切り替え信号を流しているこの2秒間は、他の処理が行えません。
①列車の制御
テレビコマンダーの信号が受付れませんので、その間、列車の発信、停止などが行えなくなります。そのような訳で、列車のオーバーラン→脱線が続いたため、レイアウトを変更せざるを得なくなってしまったのです。
②列車の動作
「デジQトレイン」の列車は、コントロール信号が途絶えると5秒間後に停止してしまいます。
理屈では、タイミングよく「前進」のボタンを押していれば良いわけですが、ポイント切り替え操作などもあって、約1/4周走っては止まるの繰り返しです。

今回のテストで、テレビリモコンの操作と、リアルタイム「デジQトレイン」のコントロールを行う、双方向通信のプログラムは、ユニリモコンには向かない事が分かりました。
おそらく、ポイント切り替え部分をはずせば、もう少し軽く動く筈です。
「デジQトレイン」は販売が終了した事もあって、新たに手に入れるのは難しいかと思い、今回のプログラムは、ご希望が無い限りは公開はしないことにします。

「デジQトレイン」をコントロールするにあたり、バックパックに搭載したユニリモコンと、の銀メタボールの全方位アンテナが大変有効に機能しました事をレポートしておきます。
この記事の詳細は『週刊myRobotを作ろう(83)』(2007/11/30付)の中にある「ユニリモコンをバックパックに内蔵」に記載されていますので、ご興味のある方は、宜しければご覧ください。Id01_90_21
「デジQトレイン」のコントロールに適した全方位アンテナ
   
次回は自動運転のプログラミングにトライする事にします。
つづく
(2008/2/4)


■電飾版「短の大足(みじのおおあし)」
『「週刊myRobotを作ろう(64)」(2007/6/26)』)』「短いけど凄いんです」の項でご紹介した、「短の大足(みじのおおあし)」を覚えていらっしゃいますか?Id01_69_15
当時、ラッチさんに作成して頂いた「短の大足(みじのおおあし)」は現在も2号機に取り付けてあり、いかんなく効力を発揮しております。
その後、1号機にも取り付けたいと思いましたが、旋盤、ボール盤を使用した加工・制作を行う事は私には無理なので、そのままになっております。

その後、KOBAさんより、簡易版の「短の大足(みじのおおあし)」を発表して頂きましたが、これなら出来そうだなあ・・・と思いつつ、他の事に手を出して、現在まで何も作成せず・・になっています。
尚、「短の大足(みじのおおあし)」についての効能や、開発コンセプト等については、『「週刊myRobotを作ろう(64)」(2007/6/26)』「短いけど凄いんです」の項をご覧いただければ・・・・と思います。

そんなおり、久しぶりにジローさんから、画像が送られてきました。Img_4687
  
「短の大足(みじのおおあし)」の電飾版だそうで、相変わらず職人技で美しく作られています。
併せて、「掲示板」にも記事を投稿されたようです。

職人ジローさんは「説明書」をいっさい作ってくれません。
そこで、メールで何回も質問し、その時添付された画像を含めて、まとめてみました。

◇制作手順
用意するものは、ID-01のオリジナル後輪ステー一式と、車輪直径50mmのキャスター、アクリル板、止めるネジ類、電飾装置(ブルーLED、フレキシブルボード)などです。

1)後輪ステーの加工
後輪ステーの後部を、二箇所ほど(画像の赤太線①と②)切り離します。Id01_92_27
①の切断位置は左側のネジ穴から約15mmの位置で、②の切断位置は後部端から約7mmの位置です。
切断箇所は、全体の長さを決定する部分ですので、各自、お好みの長さでカットされても良いとの事ですが、強度的にはジローさんがカットされた位置で良さそうな気がします。

後部端②の部分を、①の切断位置、画像のような感じでカッチリと接着させます。この時、左右の位置がピッタリと合うように確認してから接着する事が重要です。Img_4755
接着後、パテで凹凸を整え、サンドペーパーで形よく仕上げます。

2)透明アクリルステー
実際にキャスター部分の軸を受け、ブルーLEDで光る、今回のコアの部分です。
こんなアクリルの棒を何処で手に入れたかと思いましたら、なんと、厚さ3~5mmのアクリル板を7枚貼り合わせ・・・との事です。Img_4692
    
大きさは、後輪ステーの窪みに形状を合わせなければなりませんので、画像のようにステーにアクリル板を宛がい、切断位置に合わせてけがきをされた・・・との事です。Img_4717
もしくは、ステーに合わせた型紙をあらかじめ作っておき、アクリル板にけがいていく方法でも良いかと思われます。

アクリル板をカットするには、アクリルカッターで半分弱位までカットし、手あるいは、ペンチなどで、ポキッと折るように切断する・・・との事です。Img_4716
    
そして、アクリル板専用の接着材で張り合わせます。
全体的に、少し大きめに作成し、ステーに合わせながら何回もやすりがけして、ピタッと合わさる大きさに仕上げるのがコツ・・・との事です。

完成したアクリルステーは画像のような格好、大きさになります。Img_4693
出来上がったアクリルステーの上部には、同じアクリルの飾り板を付けられたようですが、ブルーのクリア塗料が塗られています。
後述するパテで作成した軸受けなどの目隠し用との事でした。

3)パテで作る軸受け
張り合わせたアクリルステーに、直接キャスターの金属ネジを差し込むと、強度的にヒビ割れする恐れがあるため、バテで軸受けを作成されたとの事です。

キャスターのネジ部分は11mmありますので、パテを4mm厚位に巻きつけます。Img_4629
この辺りは、プラリペアで作成しても良いかもしれませんね。
ネジの部分に軽くグリスを塗布しておくと、一昼夜おいて乾いた後、簡単に取り外す事ができます。

一回取り外して、バリなどを取り去り、軽く整形しておきます。
そのあと、アクリルステーに直径15~16mm位の穴をあけ、先ほど作成した軸受けの外壁をヤスリ掛けしながらピッタリ合わさるように調整していきます。Img_4632
   
●軸受け穴作成時の注意事項
直径50mmのキャスターを用いますと、ID-01の後ろ側がかなり持ち上がります。
キャスターの軸は、この持ち上がった状態で、前後左右どこから見ても垂直になっていなければいけません。
左右の傾きがあると直進しませんし、前後の傾きがあると、スムースな方向転換ができません。
かなりシビアに、この実質的な垂直穴をあけてください。決して「アクリルステーに対しての垂直では有りません」ので、お気を付けください。

形状としては完成しましたので、ステー部分にはめ込み、取り付ける穴を二箇所ほどあけ、ボルト、あるいはネジで取り付けを行います。
特にこの部分は、走行時に大きな力が加わりますので、頑丈にしっかりと取り付ける事が必要です。

4)電飾装置
まず、3個のブルーLEDをフレキシブルボードに画像のように取り付けます。Img_4697
先ほど完成したアクリル棒の前部分に3つのLED用の穴を明け、取り付けた・・・との事です。Img_4727
電源ソースとしては、足の部分にあるライトから取り出すか、3Vくらいのボタン電池で別電源を用意しても良いでしょう。Img_4748
    
お話を伺い各画像を眺めてみると、相変わらず手抜きをされない職人技という事が良くわかりました。
ジローさん、大変素晴らしい作品のご紹介、有難うございました。
(2008/1/30)

■あとがき
先日、久しぶりに東京に雪が降りましたが、積もらずに地面にふれては、はかなく消えていきました。

そして今日、犬達の散歩に出かけると、道端に生えている「たんぱぽ」に、つぼみが付いて、黄色い花の一部が顔を出しかけていました。多分、明日には可憐な花が咲くのでは・・・と思っています。
もう、そこまで春が来ているようですね。Id01_92_32

| | コメント (0)

2008年1月23日 (水)

週刊myRobotちょっとひといき(6)

■更新情報 ラジコンヘリAirWolfの飛行 (2008/1/27)
■更新情報 火星探査機画像に人影? (2008/1/25)



■「大ロボット博」見聞

大ロボット博(2007/10/23~2008/1/27)」が、東京上野にある国立科学博物館で開催されています。
最終日までにはなんとか行きたいという事で、なんとか1/22(火)に見学する事ができました。

「大ロボット博」の入り口は、科学博物館脇、D51蒸気機関車の奥の方にあります。Id01_92_01
        
「歩く、奏でる、踊る、日本の物づくりの粋を見よ!」というキャッチフレーズの書いたパンフレットをもらい会場に入ると、優雅なショパンのノクターンが聞こえてきました。
見ると自動演奏ピアノが曲を奏でています。遠い昔、ピアノを習っていた頃を想い出しました。Id01_92_21
    
世界の中で、ロボットの開発を見ると、日本は「ヒューマノイド型」、「生活介助/医療」など、より人間に身近なロボットの研究が多くされています。欧米での機能中心のロボット開発とは一味異なるようで、世界から注目さ浴びています。

この博覧会に展示中のロボットは、産業用ロボット、介助ロボット、研究中のロボット、癒し系ロボット、アニメロボット、からくり人形など、大型から、超小型ロボット迄が一堂に集められ、なかなか見ごたえがあります。

会場内は、一切、ストロボ、フラッシュ撮影は禁止されていますので、薄暗い被写体を撮影するのは容易ではありません。
こんな事なら明るいレンズを持って来れば良かった・・・と悔いてみても仕方が有りません。
帰宅してから撮影データーをチェックすると、暗いところでは「1/3秒」「1/6秒」など手持ち撮影では厳しい場所が多く、拡大してみると多くの画像がブレテーラー(カメラ振れ画像)でした。
持っていくなら、ビデオカメラの方が良いかもしれません。

◇からくりの実演
連日午前11時からは特設ステージで催し物が有り、その日は『からくり「流鏑馬」と「文字書き人形」の実演』が行われました。
最初に「文字書き人形」の実演が行われました。Id01_92_22
(何を演目するかは日替わりのようで、事前にWEBサイトなどで確認が必要です)

●「文字書き人形」
文字書き人形は、本来なら手動でハンドルを回しますが、モーター駆動に改造されていました。
最初に「梅」という文字を人形がさらさらと書いていき、書き終わると、書面がクルリとお客の方に向きを変え、見事な書筆を披露してくれます。
こんどは、人形の下に隠くされているカラクリを蓋を外しての実演です。Id01_92_02

向かって右奥に多数のカムがあり、人形各部の動きがプログラムされている(画像クリックで拡大します)

普段なら、なかなか見る事が出来ない「カム」と「たこ糸」の巧みな動きを、つぶさに観察する事ができました。
今度は「寿」という字を、さらさらと滑らかに書き上げていきます。

江戸からくりの素材には、木、紙、タコ糸、動力元には、重り、ゼンマイ(鯨のヒゲ)、水銀、水などを使用しています。
そして、複雑な動きを演出しているのが、回転するカムで、いくつものカムを同時に回転させる事で、腕、体、頭、その他の動きが演じられ、何度でも同じシンクロした動きになるわけです。
基本的には、二足歩行ロボットに色々な動きを各関節毎にプログラミングするのと同様の行為になると思います。
科学の粋を集めた現代のロボット達も、江戸からくりに負けてはいられませんね。

●「流鏑馬」
「流鏑馬」は、皆様ご存知の通り、馬で失踪しながら、馬上から矢をつがえ、弓で射る的を射る競技です。

このカラクリには、三つの的があり、馬にまたがった侍が、左からスタートして、右に向かって馬を走らせ、次々に的を弓で射るようになっています。Id01_92_16
  
動力はゼンマイのようで、最初に、長いひもを引いて、馬を左のスタート地点にセットします。トリガーを外せば、馬が動く、矢を番える、弓を引くというシーケンスを3回繰り返す仕組みです。
2回実演しましたが、一回目は全て的に当たり、見物客は大喝采でした。
2度目は、全て外れました。
どうやら、何センチ(何寸)動いたら弓を射るtという繰り返しで動くようにプログラムされているようで、スタート位置がずれていると、後の動きは全てずれてしまいます。
何事も「最初が肝心!」というわけですね。

◇アニメ、癒し系ロボット
往年の鉄腕アトムに始まり、アニメ界の有名ロボットが展示されていました。Id01_92_10
  
アニメのドラエモンはロボットだったのですね。
大好物のドラヤキと伴に展示されていて、なかなか愛嬌があります。Id01_92_09
  
お年寄りの集う場所でも人気がある癒し系型ロボットは、お子さんにも大人気でした。Id01_92_08_2
画像のアザラシロボットは35万円とか・・・

◇介助/防災/警護ロボット
介助する方、ヘルパーさん達へ、介助仕事の負担を少なくする目的で開発されたパワーアシスト機能が付いたモービルスーツです。介助以外にも色々な方面で活躍しそうですね。Id01_92_12
      
火災、震災などの災害時のレスキューや、地雷撤去などに役立つロボットも多数出品されていました。
二次災害を防ぐ意味からも、どんどん実践で活躍して欲しいものです。
ある意味では、月や火星で活躍した探査ロボットもこの類に入るかもしれません。Id01_92_13
  
実際に実用化されてきているビル内の警備ロボットです。
ビル内部のマップを元に、ルートに従って警備を行い、不審者を発見すると灯火で威嚇し、画像などの情報をセンターに通報します。Id01_92_14_2
   
◇空飛ぶロボット
災害現場や火山活動など危険な場所などに、無人で飛来し監視活動が行えます。Id01_92_06
外国では軍事用にも、大小さまざまな物が出始め、偵察、攻撃など、これからバリエーションが増えていきそうです。

◇自動車メーカーのロボット
日本の大手自動車メーカーも、競ってロボットの開発をしています。Id01_92_05_2
一人乗りロボ、トランペット演奏のエンターテイメントロボ

二足歩行ロボットのASSIMOは、テレビCMでも良くみかけますね。
ASSIMOが開発順に並んでいましたが、どんどん小型化の方向へ進んでいるようです。Id01_92_04_2
   
◇コミニュケーションロボット
音声により、お客さまと対話が出来るロボットが人気を呼んでいます。Id01_92_03
ワカマルはこの会場でも大人気
  

Id01_92_11 家電メーカーも家庭用のコミニュケーションロボットを開発中

◇国立科学博物館
科学博物館は「地球館」と「日本館」に分かれています。
今回は、このうち「地球館」を駆け足で見てきました。
地球に生息する多くの生き物や、科学、物理など幅広い展示がされていました。Id01_92_17
   
江戸からくりも展示されていて、有名な「お茶運び人形」、静電気により発電をする「エレキテル」などもありました。Id01_92_18
江戸からくり「茶運び人形」
    
Id01_92_19_2 江戸からくり「エレキテル」
  
   
帰り際に思った事は、改めてゆっくりと時間をかけて見学したいと心から思いました。Id01_92_20
出口付近にある巨大な鯨のオブジェが見送ってくれました

■AirWolfの飛行ビデオ
この前、KENさんの「ロボットの集まり」で、ラジコンヘリの「AirWolf」を飛行させました。

その模様をジローさんに、携帯電話のムービーで撮って頂きました。
途中で、倒しても起き上がる「コロボット」を倒す攻撃を行い、2回目で倒しましたが、携帯ムービーの時間の制約からカットされていました。宜しければご覧ください。


下の画面クリックで、より大きな動画をご覧頂けます。

AirWolfの飛行ビデオ
AirWolfの飛行ビデオ
(2008/1/27)


■デアゴから「MY MUSIC STUDIO」
この度、デアゴ社から「週刊MY MUSIC STUDIO」(初回のみ490円)が発売されました。

「楽器を弾けなくても、楽譜が読めなくても、パソコンで音楽をクリエイト出来る!!」などとの歌い文句が書いてあります。

初回は490円、2回以降は1190円で、2号にはマイク付きヘッドホンが付いてきますので、Skypeなどにも使用できそうです。

◇構成
『音楽製作ソフトSingerSongWriter(SSW)』と『ソフト・シンセサイザーVirtualSoundCanvas(VSC)』の2つのソフトウェアが同梱されているCDに入っており、手持ちのPCにインストール出来るようになっています。
最初は機能や音源が限定されていますが、各号を購入するたびに追加されていき、同時に新曲がリリースされます。

初回はバインダー付きで販売されていましたので、早速購入し、インストールしてみました。
WinXPマシンは問題無くインストールできましたが、WinVistaマシンにはインストールできません。
説明を良く見ると、ウィルスチェックプログラムなどは停止するように・・・という注意書きが有り、その通りにすると無事インストールが出来ました。

インストールしたソフトを起動すると、このような画面が現れます。
(この画像はデフォルトの設定から多少いじくってあります)Id01_92_23
SSWの画面(クリックすると拡大します)

未完成と、完成品の曲データーがあり、未完成のデーターに、各楽器の足らないパートを、貼り付けていけば完成です。

パートを追加するたびに、再生していくと、だんだんと曲が完成していくのが分かります。

ここ何号かは追加して、遊んでみようか・・・と思っています。

■火星探査機画像に人影?
「大ロボット博」で色々なロボットを見てきて、そういえば探査ロボットなどもあったな・・・と思い出していたところ、とんでもないニュースが報道されました。

今朝テレビをつけたら、2004年にNASAが火星に送り込んだ、探査ロボット”Spirit”が撮影した画像に、「人間の姿のようなものが移っていた・・」と報道されていました。
以前にも人面岩などの報道がなされ、色々議論がなされてきました。
わたし個人としては、火星人が居ても良いのでは・・・と思い、色々調べてみる事にしました。

インターネットで報道されている画像はあまり良くなかったので、直接、NASAのWebサイトを調べてみました。そして、"Mars Exploration Rover Misshon"というWebサイトの中に、その元となった画像がありました。
Id01_92_26a
NASAのWebサイトよりDL
画像左端にある赤丸印に人影が(画像クリックで拡大)


横12758×3487ピクセルという途方もなく大きな画像でしたが、拡大していくと、確かに人影らしいものが現れてきました。
これを拡大していくと、次第に人間のような画像になりました。Id01_92_26b


Id01_92_26c_2
Id01_92_26d_2
Id01_92_26e
人影なのか、はたまた単なる岩なのか?(画像クリックで拡大)

この画像を、どのようにとらえるかは皆様のご想像におまかせします。

火星の画像は、昔見た”STAR WARS”第一作のルークの住んでいた地形に重なってしまいました。
全長40cmの”R2D2”を横に、なんとなく感激してしまいました。

それにしても、ロボットの仲間の探査ロボ君達は、地球以外の宇宙でも活躍しているのですね。Rover_main_2

画像はNASAの”Rover on the martian surface”

ロボ仲間に、そしてID-01に乾杯!!
(2008/1/25)


■あとがき
「大ロボット博」が開催されている上野の国立科学博物館は、月に一回休館となります。
この博物館以外にも、動物園、他の美術館全てが閉館となりますので、スケジュールを確かめてから行った方が宜しいかと思います。
実は、1/21(月)に行ったところ、そのまさかの閉館の日でした。
春になれば、桜並木が見事なこの辺り、今はなにもなく、北風がやけに冷たく感じられました。

| | コメント (0)

2008年1月19日 (土)

週刊myRobotを作ろう(86)

■更新情報 テレビリモコンブログラム (2008/1/20)

今年初めてのmyRobotの記事になります。
本年もどうぞ宜しくお願いします。

■ブレインOSのアップデート
イタリアデアゴ社のWebサイトにブレインOSのアップデートが2007/12/14付けでUPされています。
とりあえず、ZIPファイルをダウンロードして解凍し、ID-01のブレインOSをアップデートしてみました。Id01_91_23
”BRN-15JP”から”BRN-16JP”になった

ID-01の胸のディスプレイには、ご覧のように”BRN-16JP”と表示されています。
いろいろ動作テストをしてみましたが、特に問題は無い様です。

「週刊myRobt」が90号で完了してしまったこれからは、CD-ROM5などは来る術も無く、このような形でアップデートするしか方法が無いのでしょうか・・・・
Version1.6をダウンロードするには、ここをクリックすれば可能ですが、インストール時に出るDOSプロンプトのインフォメーションは、(当然ながら)イタリア語です。
日本のデアゴさんからは何の通達が出ていませんので、先行してダウンロード及びインストールされる方は自己責任でお願いします。
尚、問題があるようでしたら、CD-ROM4の”BRN-15JP”には再インストールすれば戻る事が可能です。
    
■プログラムを改良する・・・
以前から気になっていたのですが、VCL(Visual C-like)で組んだプログラムでは、左右の旋回が片車輪停止、反対側の車輪が動く、いわゆる急旋回としてしか組むことができません。
前進運動中に軽く進行方向を修正させ、そのまま直進させたい時など、急旋回は興ざめです。

◇穏旋回
これに対し、両車輪が回転しながらも、片方の車輪が反対側より遅くなる事により、穏やかな旋回(以後、穏旋回といいます)を行うには、PC_Control、Mobile_Control、C-Cでは可能なものの、VCLEではプログラミングが不可能でした。
従って、従来のVCLEで作成したユニリモコンのプログラムでは、なにかぎこちない旋回しか出来ずに不満に思っていました。
C-Like周りの資料を調べていたところ、”I2Cプロトコル”で穏旋回が出来る事が分りました。
”I2Cプロトコル”の解説を読むと、「I2Cバス上のモジュール間の通信は、それぞれのモジュールが使用可能なバーチャル・レジストリの書き込み/読み込みによって行われる。」と記載されており、沢山のコマンド群が記載されています。
早速、これにとりかかろうと思った矢先、年末から体調を崩しダウンしてしまいました。Id01_91_22
    
◇フルスピード
先日、KENさんから「遂にT-Droidなみの88回転/分を実現しました!」とのメールが届きました。
内容は、C-Likeで”I2Cプロトコル”を用いたBASE制御により、「PIDコントロールなしのパラメーターによる移動」でスピードが100%出る・・・という内容で、数行のプログラムが添付されていました。
このプログラム及び記事については、KENさんのブログにある「遂に実現!ロボ君フルスピード!」をご覧ください。

ID-01が移動する場合、通常はPIDコントロール(エンコーダーによるパルス制御)により、左右の回転がシンクロするように制御されております。この場合、最速でも100%の速度を出すことは出来ません。
KENさんのブログによりますと、車輪の回転でMAX88回転/分に対し、PIDコントロール有りの現在の回転数は実に49回転/分だそうです。ID-01の走行スピードに不満を持たれている方が多いのは、このせいです。

一方、このPIDコントロールを無くする事により100%のスピードが実現します。
この100%のスピードが「T-Droidなみの88回転/分」という事になります。
良い事づくめのようですが、左右の回転が制御されていない事から、左右の回転数の同調がとれず、個々のモーターボックス特性の僅かな差異から、直進する事が難しくなります。

◇I2Cプロトコル
KENさんに紹介していただいた、この突っ走りモードのコア部分を分析してみると、”I2Cプロトコル”でした。
これで年末に成し得なかった、同じI2Cプロトコル”で動作する「穏旋回」が、難なく可能になった事になります。

早速、テレビリモコンのプログラムに、「穏旋回」と、KENさんの「突っ走り」の機能を組み込み、テストを開始しました。
「Boost(突っ走り)」モードにすると、僅かながら左に曲がっていきます。
おそらく、左右のモーターボックスの僅かな特性の違いなのでしょう・・・・
全く同じ回転にするのは、かなり難しいかもしれませんね。

◇CL(C-Like)によるプログラミング
”I2Cプロトコル”はCL上でしか動作しませんので、今回はCLでプログラミングしてあります。
本来は、分かりやすいVCLでのプログラムで解説しながら・・・と思ったのですが、今回不可能ですので、ご了承ください。

■テレビリモコンの改良
従来のテレビリモコンプログラムでは、リモコンによる物を掴むとき用に微調整可能な、左右旋回はアングル指定45度、15度旋回を行えるようにしてありますので、この機能は残す事にしました。
併せて、「Boost(突っ走り)」モードを加えます。
今回は、「多機能リモコン」以外に、「一般のテレビリモコン(1~12)」でも使える機能限定版の2つのプログラムを用意する事にしました。

◇旋回モード
●穏旋回
穏旋回させるには、「走行ボタン」を押して前進させてから「左(右)旋回ボタン」を押すと、緩やかに旋回します。
穏旋回中、さらに同方向の旋回ボタンを押す事により急旋回(方車輪が止まった状態)に移るようにしてあります。
「前進」→「左(右)旋回」(穏旋回)→「左(右)旋回」(急旋回)という感じです。
そのままにしていますと、何時までも旋回を続けますので、「前進」あるいは「停止」ボタンを押して抜け出す事が出来ます。

●アングル指定旋回

尚、従来のアングル指定の旋回は、「停止」「後退」状態から入る事により可能です。
「停止」→「左(右)旋回」、「後退」→「左(右)旋回」

◇Boost(突っ走り)モード
KENさんが解説している「PIDコントロール無しの100%走行」モードです。
ID-01にしては、かなり速いな・・・・という位のスピードが出ます。
ただしスピードが楽しめる反面、バッテリーの減りには気をつける必要があります。
私は屋上で動作・走行テストをしていますが、Mobile ControlでB.T接続して、モバイルフォンのモニター画面で電圧をチェックしながら走行させています。
この走行モードですと、瞬間的に電圧がかなり低下しますので、このBoostパワーは、ここぞ・・という時に使用された方が良いと思います。

◇テレビリモコンの割り当て
先ほどもふれましたが、今回「多機能リモコン」と「普通のテレビリモコン」の2通りのプログラムをダウンロードできるようにしました。

重複しますが、以前「週刊myRobotを作ろう(84)」でご紹介した記事を使用して、まず「多機能リモコン」のコントロールの割り当てを説明します。
Id01_90_22
  
●多機能リモコン
前回とほとんど同仕様ですが、16に「Boost(突っ走り)モード」を追加しました。
①電源ボタン
プログラム終了
②ヘッドに関するセクション
各種警報、首の左右上下、中立、写真撮影、指の開閉
③ロボットの移動と手動きセクション
前後左右、Uターン、左右腕上下、腰上げ下げ
④音声の録音などに使用予定
多機能リモコンのプログラム概要は、こんなところです。

○詳細(赤字はユニリモコン割り当て番号)
①電源ボタン 0 
電源)プログラム終了
②セクション
1)クラクションと足のビーコン点灯 
2)サイレンと赤LED点滅 
3)口笛と緑LED点滅 
4)首左回転 
5)センター位置(左右動作) 5
6)首右回転 
7)上を向く 
8)センター位置(上下動作) 8 
9)下を向く 
10)手の開閉(トグル動作) 10
(トクル動作とは、一回押すたびに「開」または「閉」を、順番に繰り返します)
11)空き 11
12)写真撮影(赤LED点滅、目点滅、シャッター音) 12
③移動セクション
左側 +)左腕上へ 26
    -)左腕下へ 27

真ん中の4つのスイッチ
 上側) 緑LED点灯(トグル動作) 13
 2番目) 黄LED点灯(トグル動作) 14
 3番目) デジタル出力4(トグル動作) 15
 4番目) Boost(突っ走り)モード 16

右側 +)右腕上へ 28
    -)左腕下へ 29 

左列2ボタン
上側)左旋回15度 17
下側)180度ターン 18

クロスバータイプ
真ん中セレクトスイッチ
上)前進 21
左)左旋回(穏旋回と45度) 22
センタボタン)停止 25
右)右旋回(穏旋回と45度) 23
下)後進 24

右列2ボタン
上側)右旋回15度 19
下側)腰上げ下げ(トグル動作) 20
④音声録音セクション
未定義 30

●一般テレビリモコン

一般テレビリモコンでは、操作ボタンが少ない事から、多機能リモコンの機能を抜粋してアサインしました。Id01_90_22a
  
使用するのは、①電源スイッチと、②のチャンネル(1~12)ボタンだけです。
画像のように、「前(5)」「後(11)」「左(7)」「右(9)」と十字型を想定、真ん中の8で停止のように配列しました。
そして、「前進(5)」の真上に「Boost(2)」をアサインしました。

○詳細(赤字はユニリモコン割り当て番号)
①電源ボタン 0 
電源)プログラム終了

②チャンネルボタン
1)写真撮影(赤LED点滅、目点滅、シャッター音) 1
2)Boost(突っ走り)モード 
3)サイレンと赤LED点滅 
4)左旋回15度 
5)前進 
6)右旋回15度 
7)左旋回(穏旋回/45度) 
8)停止 
9)右旋回(穏旋回/45度) 
10)手の開閉(トグル動作) 10
(トクル動作とは、一回押すたびに「開」または「閉」を、順番に繰り返します)
11)後進 11
12)180度ターン 12

とりあえず主要な機能はモーラしています。

●PC_Controlによる登録方法
「多機能リモコン」と「一般のテレビリモコン」どちらの登録も、PC_Controlによる登録方法で行うと簡単に行えます。
週刊myRobotを作ろう(84)」の同項目名で詳細が載っておりますので、宜しければご参考にされて頂ければ・・・と思います。

◇「多機能リモコン」用、「一般テレビリモコン」用のプログラム公開
今回は2つのプログラムを公開します。
どちらもC-Likeで組みました。
「多機能リモコン」用は20以上の割付、「一般テレビリモコン」用は13の割付を行う事により、ID-01を自由にコントロールする事が可能です。

どちらのプログラムにも、前回同様、「プログラムロック防止の対応」として、リモコンのボタンを押した後、0.8秒間は次の命令を受け付けないようにポーズが掛かるようにしてあります。ただし、この対処はあくまでもプログラムロックが起こりにくくなるという対処ですので、完璧ではありません。どうぞご了承ください。

プログラムは、「ファイルのダンロード形式」と、その後に「ソースリスト形式」の2つの方式で公開しております。
お好きな方法で取り込んで頂き、参考頂ければ・・・と思っております。

(ご注意)
プログラムをダウンロードしてお使い頂くのはご自由ですが、あくまでも自己責任でご使用ください。

下の行からプログラムをダウンロードします。そして拡張子clikeで適当なフォルダーに保存して、VCLEで開いてください。
私は、”Remot_Control03Ux.clike”という名前で保存しました。
(03Uの後ろのxは、バージョンが更新されるたびに変わるので仮名をつけました)
プログラムをダウンロードされるときは、下の「ダウンロードでのご注意」をご覧ください。

*****************************************
{多機能リモコン用プログラムダウンロード}
「Remot_Control03Ub.clike」をダウンロード 

*****************************************

現在”Remot Control03Ub.clike”が最新バージョンです (2008/01/20)

*****************************************
{一般リモコン用プログラムダウンロード}
「Remot_Control01e.clike」をダウンロード 

*****************************************

現在”Remot Control01e.clike”が最新バージョンです (2008/01/20)

「ダウンロードでのご注意」
ファイルのダンロードに関しては、拡張子が”xml”に変わってしまいますので、お手数ですが、以下の方法でダンロードされてください。

1)上記ダウンロー
「Remot_Control03x.clike」をダウンロード を右クリックし、「対象をファイルに保存」を選択します。Id01_90_11
    
2)フィル名が、”RemotControl03x.xml”と出てきますので、後ろ3文字"xml"を消して、”clike”という文字を半角英字で入力して、任意のフォルダーに保存します。Id01_90_12_2

①"xml"3文字を、”clike”に変えて、②保存する
(画像クリックで拡大します)

■テレビリモコンプログラム
プログラムは「掲示板」で良く使われているプログラムソース形式です。

ソース形式のプログラムは、カット&ペーストで、テキストエディターに読み込み、適当な名前で保存してC Editorで読み込んでご利用下さい。

◇多機能リモコン用
ここから下です------------------------------
/**
*
* @author fumi
* @version 1.0
*/

#include "c-like.h"
#include "robot.h"

counter Flag1 = new(counter);
counter FlagD1 = new(counter);
counter FlagD2 = new(counter);
counter FlagD3 = new(counter);
counter FlagHand = new(counter);
counter FlagHip = new(counter);
counter FlagD4 = new(counter);
counter FlagFine = new(counter);
counter FlagLR = new(counter);

declare( behavior(Action) );

void Forward();
void Back();
void Stop();
void Right();
void Left();
void Init();
void Fine();
void Right15();
void Left15();
void Turn();
void HomePos();
void TakePic();
void Boost();

define( behavior(Main))
{
Init();
start(Action);
}

define( behavior(Action) )
{
local(urc) = wait_for (urc, update);
if (urc_compare(&local(urc), 0))
{
  say_phrase(4);
  Fine();
  say_phrase(22);
  stop(Action);
}
else
{
}
if (urc_compare(&local(urc), 21))
{
  say_phrase(27);
  Forward();
}
else
{
  if (urc_compare(&local(urc), 22))
  {
   say_phrase(23);
   Left();
  }
  else
  {
   if (urc_compare(&local(urc), 25))
   {
    say_phrase(4);
    Stop();
   }
   else
   {
    if (urc_compare(&local(urc), 23))
    {
     say_phrase(24);
     Right();
    }
    else
    {
     if (urc_compare(&local(urc), 24))
     {
      say_phrase(28);
      Back();
     }
     else
     {
      if (urc_compare(&local(urc), 17))
      {
       say_phrase(23);
       Left15();
      }
      else
      {
       if (urc_compare(&local(urc), 19))
       {
        say_phrase(24);
        Right15();
       }
       else
       {
        if (urc_compare(&local(urc), 18))
        {
         say_phrase(60);
         Turn();
        }
        else
        {
         if (urc_compare(&local(urc), 16))
         {
          say_phrase(78);
          Boost();
         }
         else
         {
         }
        }
       }
      }
     }
    }
   }
  }
}
if (urc_compare(&local(urc), 26))
{
  left_arm_r(3);
}
else
{
  if (urc_compare(&local(urc), 27))
  {
   left_arm_r(-3);
  }
  else
  {
   if (urc_compare(&local(urc), 28))
   {
    right_arm_r(3);
   }
   else
   {
    if (urc_compare(&local(urc), 29))
    {
     right_arm_r(-3);
    }
    else
    {
     if (urc_compare(&local(urc), 10))
     {
      if (get(FlagHand) == 0)
      {
       say_phrase(11);
       hand_close(4);
       set(FlagHand,1);
      }
      else
      {
       say_phrase(12);
       hand_open();
       set(FlagHand,0);
      }
     }
     else
     {
      if (urc_compare(&local(urc), 20))
      {
       if (get(FlagHip) == 0)
       {
        base_up();
        set(FlagHip,1);
       }
       else
       {
        base_down();
        set(FlagHip,0);
       }
      }
      else
      {
      }
     }
    }
   }
  }
}
if (urc_compare(&local(urc), 4))
{
  head_pan_r(-4);
}
else
{
  if (urc_compare(&local(urc), 5))
  {
   head_pan(6);
  }
  else
  {
   if (urc_compare(&local(urc), 6))
   {
    head_pan_r(4);
   }
   else
   {
    if (urc_compare(&local(urc), 7))
    {
     head_tilt_r(4);
    }
    else
    {
     if (urc_compare(&local(urc), 8))
     {
      head_tilt(2);
     }
     else
     {
      if (urc_compare(&local(urc), 9))
      {
       head_tilt_r(-4);
      }
      else
      {
       if (urc_compare(&local(urc), 12))
       {
        TakePic();
       }
       else
       {
       }
      }
     }
    }
   }
  }
}
if (urc_compare(&local(urc), 1))
{
  lights(true);
  play_sound(1);
  lights(false);
}
else
{
  if (urc_compare(&local(urc), 2))
  {
   led_blink(LED_RED);
   play_sound(2);
   led_off(LED_RED);
  }
  else
  {
   if (urc_compare(&local(urc), 3))
   {
    led_blink(LED_GREEN);
    play_sound(5);
    if (get(FlagD1) == 0)
    {
     led_off(LED_GREEN);
    }
    else
    {
     led_off(LED_GREEN);
     led_on(LED_GREEN);
    }
   }
   else
   {
    if (urc_compare(&local(urc), 13))
    {
     if (get(FlagD1) == 0)
     {
      led_on(LED_GREEN);
      set(FlagD1,1);
     }
     else
     {
      led_off(LED_GREEN);
      set(FlagD1,0);
     }
    }
    else
    {
     if (urc_compare(&local(urc), 14))
     {
      if (get(FlagD2) == 0)
      {
       led_on(LED_YELLOW);
       set_output(3,ACTIVE);
       set(FlagD2,1);
      }
      else
      {
       led_off(LED_YELLOW);
       set_output(3,INACTIVE);
       set(FlagD2,0);
      }
     }
     else
     {
      if (urc_compare(&local(urc), 15))
      {
       if (get(FlagD3) == 0)
       {
        set_output(4,ACTIVE);
        set(FlagD3,1);
       }
       else
       {
        set_output(4,INACTIVE);
        set(FlagD3,0);
       }
      }
      else
      {
       if (urc_compare(&local(urc), 99))
       {
        if (get(FlagD4) == 0)
        {
         lights(true);
         set(FlagD4,1);
        }
        else
        {
         lights(false);
         set(FlagD4,0);
        }
       }
       else
       {
       }
      }
     }
    }
   }
  }
}
msleep(800);
}

void Forward()
{
if (get(Flag1) == 8)
{
  Stop();
}
else
{
}
led_off(LED_ALL);
led_on(LED_GREEN);
unsigned char buf;
buf = 0X02;
i2c_write(42,1,&buf,1);
buf = 0X00;
i2c_write(42,11,&buf,1);
i2c_write(42,12,&buf,1);
set(Flag1,20);
set(FlagLR,0);
}

void Back()
{
if (get(Flag1) >= 20)
{
  Stop();
}
else
{
}
if (get(Flag1) != 8)
{
  led_off(LED_ALL);
  led_blink(LED_YELLOW);
  move_speed(-20);
  move_speed(-40);
  move_speed(-60);
  set(Flag1,8);
}
else
{
}
set(FlagLR,0);
}

void Stop()
{
led_off(LED_ALL);
led_on(LED_RED);
base_stop();
set(Flag1,0);
set(FlagLR,0);
}

void Right()
{
if (get(Flag1) >= 20)
{
  led_off(LED_ALL);
  led_blink(LED_YELLOW_RIGHT);
  if (get(FlagLR) == 1)
  {
   unsigned char buf;
   buf = 0X41;
   i2c_write(42,3,&buf,1);
   buf = 0X00;
   i2c_write(42,11,&buf,1);
   i2c_write(42,12,&buf,1);
   set(FlagLR,2);
  }
  else
  {
   unsigned char buf;
   buf = 0X21;
   i2c_write(42,3,&buf,1);
   buf = 0X00;
   i2c_write(42,11,&buf,1);
   i2c_write(42,12,&buf,1);
  }
  set(FlagLR,1);
}
else
{
  Stop();
  led_off(LED_ALL);
  led_blink(LED_YELLOW_RIGHT);
  turn(45,25);
  led_off(LED_ALL);
}
}

void Left()
{
if (get(Flag1) >= 20)
{
  led_off(LED_ALL);
  led_blink(LED_YELLOW_LEFT);
  if (get(FlagLR) == 5)
  {
   unsigned char buf;
   buf = 0X40;
   i2c_write(42,3,&buf,1);
   buf = 0X00;
   i2c_write(42,11,&buf,1);
   i2c_write(42,12,&buf,1);
   set(FlagLR,6);
  }
  else
  {
   unsigned char buf;
   buf = 0X20;
   i2c_write(42,3,&buf,1);
   buf = 0X00;
   i2c_write(42,11,&buf,1);
   i2c_write(42,12,&buf,1);
  }
  set(FlagLR,5);
}
else
{
  Stop();
  led_off(LED_ALL);
  led_blink(LED_YELLOW_LEFT);
  turn(45,-25);
  led_off(LED_ALL);
}
}

void Init()
{
set(Flag1,0);
set(FlagD1,0);
set(FlagD2,0);
set(FlagD3,0);
set(FlagD4,0);
set(FlagHand,0);
set(FlagHip,0);
set(FlagFine,0);
set(FlagLR,0);
config_gpio(3,OUTPUT);
config_gpio(4,OUTPUT);
HomePos();
say_phrase(114);
led_off(LED_ALL);
led_blink(LED_GREEN);
say_phrase(21);
led_off(LED_ALL);
}

void Fine()
{
Stop();
led_off(LED_ALL);
led_blink(LED_GREEN);
set(FlagFine,1);
HomePos();
if (get(FlagHand) == 1)
{
  hand_open();
}
else
{
}
lights(false);
set_output(3,INACTIVE);
set_output(4,INACTIVE);
led_off(LED_ALL);
}

void Right15()
{
Stop();
led_off(LED_ALL);
led_blink(LED_YELLOW_RIGHT);
turn(15,20);
led_off(LED_ALL);
set(FlagLR,0);
}

void Left15()
{
Stop();
led_off(LED_ALL);
led_blink(LED_YELLOW_LEFT);
turn(15,-20);
led_off(LED_ALL);
set(FlagLR,0);
}

void Turn()
{
Stop();
led_off(LED_ALL);
led_blink(LED_YELLOW_RIGHT);
turn(180,25);
led_off(LED_ALL);
set(FlagLR,0);
}

void HomePos()
{
set_blocking(false);
head_tilt(2);
if (get(FlagFine) == 0)
{
  left_arm(15);
  right_arm(7);
}
else
{
  left_arm(0);
  right_arm(0);
}
base_down();
lights(false);
set_blocking(true);
head_pan(6);
}

void TakePic()
{
led_blink(LED_RED);
say_phrase(58);
if (get(FlagD2) == 0)
{
  led_on(LED_YELLOW);
  set_output(3,ACTIVE);
}
else
{
}
take_picture();
play_sound(11);
led_off(LED_RED);
if (get(FlagD2) == 0)
{
  led_off(LED_YELLOW);
  set_output(3,INACTIVE);
}
else
{
}
}

void Boost()
{
if (get(Flag1) == 8)
{
  Stop();
}
else
{
}
led_off(LED_ALL);
led_on(LED_GREEN);
led_blink(LED_RED);
unsigned char buf;
buf = 0X42;
i2c_write(42,1,&buf,1);
buf = 0X00;
i2c_write(42,11,&buf,1);
i2c_write(42,12,&buf,1);
set(Flag1,21);
set(FlagLR,0);
}

ここから上です-------------------------------------
   

◇一般テレビリモコン用
ここから下です------------------------------
/**
*
* @author fumi
* @version 1.0
*/

#include "c-like.h"
#include "robot.h"

counter Flag1 = new(counter);
counter FlagD1 = new(counter);
counter FlagD2 = new(counter);
counter FlagD3 = new(counter);
counter FlagHand = new(counter);
counter FlagHip = new(counter);
counter FlagD4 = new(counter);
counter FlagFine = new(counter);
counter FlagLR = new(counter);

declare( behavior(Action) );

void Forward();
void Back();
void Stop();
void Right();
void Left();
void Init();
void Fine();
void Right15();
void Left15();
void Turn();
void HomePos();
void TakePic();
void Boost();

define( behavior(Main))
{
Init();
start(Action);
}

define( behavior(Action) )
{
local(urc) = wait_for (urc, update);
if (urc_compare(&local(urc), 0))
{
  say_phrase(4);
  Fine();
  say_phrase(22);
  stop(Action);
}
else
{
}
if (urc_compare(&local(urc), 5))
{
  say_phrase(27);
  Forward();
}
else
{
  if (urc_compare(&local(urc), 7))
  {
   say_phrase(23);
   Left();
  }
  else
  {
   if (urc_compare(&local(urc), 8))
   {
    say_phrase(4);
    Stop();
   }
   else
   {
    if (urc_compare(&local(urc), 9))
    {
     say_phrase(24);
     Right();
    }
    else
    {
     if (urc_compare(&local(urc), 11))
     {
      say_phrase(28);
      Back();
     }
     else
     {
      if (urc_compare(&local(urc), 4))
      {
       say_phrase(23);
       Left15();
      }
      else
      {
       if (urc_compare(&local(urc), 6))
       {
        say_phrase(24);
        Right15();
       }
       else
       {
        if (urc_compare(&local(urc), 12))
        {
         say_phrase(60);
         Turn();
        }
        else
        {
         if (urc_compare(&local(urc), 2))
         {
          say_phrase(78);
          Boost();
         }
         else
         {
         }
        }
       }
      }
     }
    }
   }
  }
}
if (urc_compare(&local(urc), 1))
{
  TakePic();
}
else
{
  if (urc_compare(&local(urc), 3))
  {
   led_blink(LED_RED);
   play_sound(2);
   led_off(LED_RED);
  }
  else
  {
   if (urc_compare(&local(urc), 10))
   {
    if (get(FlagHand) == 0)
    {
     say_phrase(11);
     hand_close(4);
     set(FlagHand,1);
    }
    else
    {
     say_phrase(12);
     hand_open();
     set(FlagHand,0);
    }
   }
   else
   {
    if (urc_compare(&local(urc), 20))
    {
     if (get(FlagHip) == 0)
     {
      base_up();
      set(FlagHip,1);
     }
     else
     {
      base_down();
      set(FlagHip,0);
     }
    }
    else
    {
    }
   }
  }
}
msleep(800);
}

void Forward()
{
if (get(Flag1) == 8)
{
  Stop();
}
else
{
}
led_off(LED_ALL);
led_on(LED_GREEN);
unsigned char buf;
buf = 0X02;
i2c_write(42,1,&buf,1);
buf = 0X00;
i2c_write(42,11,&buf,1);
i2c_write(42,12,&buf,1);
set(Flag1,20);
set(FlagLR,0);
}

void Back()
{
if (get(Flag1) >= 20)
{
  Stop();
}
else
{
}
if (get(Flag1) != 8)
{
  led_off(LED_ALL);
  led_blink(LED_YELLOW);
  move_speed(-20);
  move_speed(-40);
  move_speed(-60);
  set(Flag1,8);
}
else
{
}
set(FlagLR,0);
}

void Stop()
{
led_off(LED_ALL);
led_on(LED_RED);
base_stop();
set(Flag1,0);
set(FlagLR,0);
}

void Right()
{
if (get(Flag1) >= 20)
{
  led_off(LED_ALL);
  led_blink(LED_YELLOW_RIGHT);
  if (get(FlagLR) == 1)
  {
   unsigned char buf;
   buf = 0X41;
   i2c_write(42,3,&buf,1);
   buf = 0X00;
   i2c_write(42,11,&buf,1);
   i2c_write(42,12,&buf,1);
   set(FlagLR,2);
   set(FlagLR,2);
  }
  else
  {
   unsigned char buf;
   buf = 0X21;
   i2c_write(42,3,&buf,1);
   buf = 0X00;
   i2c_write(42,11,&buf,1);
   i2c_write(42,12,&buf,1);
  }
  set(FlagLR,1);
}
else
{
  Stop();
  led_off(LED_ALL);
  led_blink(LED_YELLOW_RIGHT);
  turn(45,25);
  led_off(LED_ALL);
}
}

void Left()
{
if (get(Flag1) >= 20)
{
  led_off(LED_ALL);
  led_blink(LED_YELLOW_LEFT);
  if (get(FlagLR) == 5)
  {
   unsigned char buf;
   buf = 0X40;
   i2c_write(42,3,&buf,1);
   buf = 0X00;
   i2c_write(42,11,&buf,1);
   i2c_write(42,12,&buf,1);
   set(FlagLR,6);
  }
  else
  {
   unsigned char buf;
   buf = 0X20;
   i2c_write(42,3,&buf,1);
   buf = 0X00;
   i2c_write(42,11,&buf,1);
   i2c_write(42,12,&buf,1);
  }
  set(FlagLR,5);
}
else
{
  Stop();
  led_off(LED_ALL);
  led_blink(LED_YELLOW_LEFT);
  turn(45,-25);
  led_off(LED_ALL);
}
}

void Init()
{
set(Flag1,0);
set(FlagD1,0);
set(FlagD2,0);
set(FlagD3,0);
set(FlagD4,0);
set(FlagHand,0);
set(FlagHip,0);
set(FlagFine,0);
set(FlagLR,0);
config_gpio(3,OUTPUT);
config_gpio(4,OUTPUT);
HomePos();
say_phrase(114);
led_off(LED_ALL);
led_blink(LED_GREEN);
say_phrase(21);
led_off(LED_ALL);
}

void Fine()
{
Stop();
led_off(LED_ALL);
led_blink(LED_GREEN);
set(FlagFine,1);
HomePos();
if (get(FlagHand) == 1)
{
  hand_open();
}
else
{
}
lights(false);
set_output(3,INACTIVE);
set_output(4,INACTIVE);
led_off(LED_ALL);
}

void Right15()
{
Stop();
led_off(LED_ALL);
led_blink(LED_YELLOW_RIGHT);
turn(15,20);
led_off(LED_ALL);
set(FlagLR,0);
}

void Left15()
{
Stop();
led_off(LED_ALL);
led_blink(LED_YELLOW_LEFT);
turn(15,-20);
led_off(LED_ALL);
set(FlagLR,0);
}

void Turn()
{
Stop();
led_off(LED_ALL);
led_blink(LED_YELLOW_RIGHT);
turn(180,25);
led_off(LED_ALL);
set(FlagLR,0);
}

void HomePos()
{
set_blocking(false);
head_tilt(2);
if (get(FlagFine) == 0)
{
  left_arm(15);
  right_arm(7);
}
else
{
  left_arm(0);
  right_arm(0);
}
base_down();
lights(false);
set_blocking(true);
head_pan(6);
}

void TakePic()
{
led_blink(LED_RED);
say_phrase(58);
if (get(FlagD2) == 0)
{
  led_on(LED_YELLOW);
  set_output(3,ACTIVE);
}
else
{
}
take_picture();
play_sound(11);
led_off(LED_RED);
if (get(FlagD2) == 0)
{
  led_off(LED_YELLOW);
  set_output(3,INACTIVE);
}
else
{
}
}

void Boost()
{
if (get(Flag1) == 8)
{
  Stop();
}
else
{
}
led_off(LED_ALL);
led_on(LED_GREEN);
led_blink(LED_RED);
unsigned char buf;
buf = 0X42;
i2c_write(42,1,&buf,1);
buf = 0X00;
i2c_write(42,11,&buf,1);
i2c_write(42,12,&buf,1);

set(Flag1,21);
set(FlagLR,0);
}

ここから上です-------------------------------------
 

◇ご注意
尚、動作に関しましては、プログラムが正常に処理されて、ロボ君の各機能が動作する状態にあり、且正しく動いてくれて・・・という前提条件が付きます。
また、検証途中でもありますので、プログラミングミスが多々あるかと思います。
実際に走行させる方は、思わぬ動きをする場合もありますので、広めの場所で、周囲の安全を確認してから、注意をはらいながら走行させる必要があります。
もし、動作中にロボ君が何かに引っかかってそのままにしていると、モーターが止まり過電流が流れ、ボードから煙が・・・などのトラブルも考えられます。
ロボ君がひっかかったらすぐに持ち上げ、速やかに電源を切るなどの処理が必要です。
ご使用にあたっては、あくまでも自己責任でお願いします。

また、実際に検証された方で、バグ等お気付きの点がございましたら、是非、ご意見をコメントでお寄せ下さい。
(2008/1/19)

■あとがき
年末に体調を崩して以来、やっとID-01の作業を開始できました。
今回の作業は、以前作成したプログラムの手直しでしたので、比較的容易にとりかかれました。

| | コメント (4)

2007年12月22日 (土)

週刊myRobotを作ろう(85)

■ロボット同士のコミニュケーション
久々に、1号機と2号機を並べてみました。Id01_91_09
左がかなり改造した2号機、右は背中のあいた1号機

2号機は、ユニリモコンを背中に搭載、目にはライト、耳にはマイク、尾輪は「足短くん」だったりと、かなり改造しまくっています。
一方、1号機はどちらかというと、いつも分解されて、部品のテストですとか配線のチェックなどに使われていて、現在もリアボディケースはついていない状態になっています。

◇ユニリモコンの活用
ユニリモコンの活用をあれこれ考えていたのですが、「テレビリモコン」によるID-01の操縦が出来るようにしてみました。
一方、ID-01から「テレビ」あるいは「鉄道模型」などもコントロールしてみましたが、どちらも、一方通行の通信でしかありません。

◇双方向のデーターのやりとり
そこで、1号機にも参加してもらって、ユニリモコンを通して、双方のロボット同士でコミニュケーションをとらせてみようかと考えています。

あれこれ考えてみましたが、あまり単純では面白くないので、ハードルを上げた構想(妄想?)を考えてみました。
①2号機を「テレビリモコン」でスタートさせる。
②2号機は部屋から廊下に出る。
③となりの部屋の前にいる1号機に、ユニリモコンで指令を送る。
④指令を受けた1号機はとなりの部屋へ入り、1分待ってから温度を測かり、廊下に戻る
⑤1号機は2号機に、温度データーをユニリモコンで送る
⑥2号機はそのデーターを読み取り、部屋に戻り温度を告げる

◇問題点
内容を分析・検討すると問題は山積しています。
まず、夫々のロボットが、部屋の出入りを正確に行えるか、そして向き合えるのかです。
ご存知のように、ID-01はきちんと真っ直ぐに走りません。直進に近いコースは取れるのですが、あくまでもそのラインは、ファージーです。
部屋を出たり、入ったり、廊下に出て、相手のロボットの方向に正確に向きを変える・・・
何か気が遠くなるほど、色々な問題が山積しているような気がしてきます。
この辺のコース取りの正確さはトレースラインを使う、正しく向き合うのはマーカーの認識など、あれこれ方法をめぐらして今後の研究課題にするということで、先延ばしすることにしました。

◇妥協
そこで妥協として、廊下に向かい合っている(離れた場所にいる)ロボット同士で、温度データーの受け渡しが出来るのか・・・を、とりあえずプログラムしてみようかと、思っています。

◇ロジックを考える
前項で要件を絞りこみましたので、まず温度を測り、それをデーター化して赤外線で送るロジックを考えてみましょう。
屋内で使用すること、バッテリーの使用範囲内ということも考慮すると、計測範囲は0~39度までの間として考えてみましょう。
すべて「IF文」で判定させるのは面白くないので、なるべく少ないステップで値を算出してみるロジックを考えてみましょう。
つづく

■トピックス
二足歩行ロボットが、転倒しても自分で起き上がるさまを見たときの感動は大きなインパクトを受けた覚えがあります。
しかし時代がすすみ、この頃では、Ommibotのように小さなトイロボットまでが当たり前のように演技をしたり、起きあがてしまう世の中になってしまいました。
なにしろ16以上のサーボモーターを使っているのですから出来て当たり前だと・・・・

◇◆現代版のカラクリ人形
ところが、たったひとつのモーターと、歯車、カム、スプリングのカラクリだけで、ころんでも起き上がって、しかも2足歩行するロボットが発売されました。Id01_91_07
   
じたばたロボット「コロボット」(科学のたまご サイエンスバージョン)のご紹介です。
このWebサイトに動画が載っていますので、立ち上がる様子をご覧下さい。

全長20cmに満たない、なんとなくキャシャな構造をしたロボットですね。
組み立てキットになっていますが、対象は子供さん用なので、ものの10分もあれば組み立てられます。
歩かせると、カムを利用した動きはまるでよっぱいのようですが、板の間ですと結構倒れずに歩き続きます。Id01_91_08
たおれてもおきあがる(画像クリックで拡大)

倒さないと面白くないので、壁に向かわせたり、こづいたりして倒すと、からだを2つに折り、腕を振り回してちゃんと立ち上がり、そして歩きだします。
見ていて、なんとなく微笑ましく、けなげな感がします。

◇機械的なからくり
自分が倒れたか、足をついた、などの把握は、3つのセンサーが請負います。Id01_91_01a_2
3つのセンサー(画像クリックで拡大します)

前に倒れたかは①のセンサー、後ろは②のセンサー、立ち上がったかは、③のセンサーです。
センサーが押されると、カムがはずれ、別の動きが始まる・・・ 昔の江戸カラクリ人形の仕組みを思いおこさせます。

機械じかけで起き上がる仕組み、これぞ「現代版のカラクリ人形」っと絶賛したくなりました。
尚、お値段は、お財布にやさしい2280円でした。
このロボットをご紹介くださった、てるさん、有難うございました。楽しんでいます。

本屋さんで売り切れていたら、1500円以上送料無料のアマゾンでも手に入ります

■あとがき
「ジングルベ~ル」などと音楽が鳴りわたっていたのは過去の話。
秋葉原の帰りに六本木を歩いてきましたが、今はいたるところにLEDのクールな光が美しく満ち溢れていました。
ショッピングセンターに出かけてみると、クリスマス飾り付けのコーナーは影をひそめ、お正月飾りが溢れていました。

この頃、時の流れがすこしづつ加速して感じられてしまいます。
タイムスリップが起きている? いや、まさしく歳をとったあかしかもしれません。
「紅白・・・」「ゆくとしくるとし」もうすぐですね。
    

| | コメント (12)

2007年12月 8日 (土)

週刊myRobotを作ろう(84)

■更新情報 多機能リモコン用PG改良 (2007/12/15)
■更新情報 ちょっとプログラム(更新中 (2007/12/14)
■更新情報 赤外線を11個以上登録する (2007/12/11)

■更新情報 どんなリモコンがベターか? (2007/12/10)

■テレビリモコン拡張版
前号で、ID-01をテレビリモコンで操縦する方法を説明してみましたが、いくつかの改善点がわかりました。
併せて、今回はもう少し色々な事をさせてみようと、多機能リモコンの色々なボタンを利用してみました。

◇動画
宜しければ動画をご覧下さい。
プログラムの中での動きがお分かりいただけると思います。


テレビリモコンでロボット操縦拡張編
テレビリモコンでロボット操縦拡張編

背中に背負ったメタリックボールに赤外線が反射し、バックパックに内蔵したユニリモコンに信号が届いています。
こうしてみると、何か銀色の風船を上げているようにも見えますね。

◇ちょっとした改造
拡張プロブラムを動かすにあたって、事前に、ハード面のちょっとした改造をいくつか行いました。以下に列記しておきます。
●目の改造
動画の中で目が光るのは、『週刊myRobotを作ろう(75)』の中で「目には光を、耳にマイクを(続編)」で改造した2つのLEDに、デジタル出力3ピンで3.0Vの電力を供給しております。
デジタルとしての本来の使用方法ではないのはわかっていますが、とりあえずのテストとしてお考えください。

●腕への出力
前回、ユニリモコンを背中に移してしまいましたので、腕ツールへの配線が途切れてしまいました。
そこで、デジタル出力4の配線を腕に引いてみましたが、LEDなら点灯するのですが、扇風機のモーターは回りませんでした。

こんどはリレーを利用して、ロジック電源からでもとってみようか・・・と思っています。
今回、動画では、左腕先のLEDを点灯しています。左下のタイトル文字と重なってみにくいですが、宜しければご覧ください。
尚、デジタル出力3番と4番を同時にONにすると、電力不足になり目の方が点灯しません。
今後、デジタル信号でリレーを動かし、電力は別から供給する必要がありそうです。

●デジタル出力
バッテリー蓋の横にブレッドボード用の10端子のソケットがありますが、その根元はアームボードに繋がっています。
今回は、デジタルの3~4番ピンを、ヘッド部の目と、腕先に供給しますので、アームボードから直接とっています。
いずれ、リレー及びスイッチを取り付け、ブレッドボードでの実験との切替も可能なように、改造をおこないたいと思っております。

◇多機能リモコンの他のボタンを使用する
今回は、ID-01のユニリモコンと同様に、他のリモコンの信号を学習できる、「学習型多機能リモコン」を使用しました。
電源ボタンの下にある5つのモードボタンにより、5系統の機器(テレビ、チューナー、DVレコーダー、HDレコーダー、VTRなど)をコントロールできますが、エアコン、照明などのコントロールも空きボタンに設定できます。Id01_90_22
ご覧のように、チャンネルボタン以外にも、③~④のボタン配列は、見るからにロボットの動きをコントロールしやすそうです。

以下のような目的をもって、ユニリモコンにとりあえず、30近くのコマンドを割付てみました。
①電源ボタン
プログラム終了
②ヘッドに関するセクション
各種警報、首の左右上下、中立、写真撮影、指の開閉
③ロボットの移動と手動きセクション
前後左右、Uターン、左右腕上下、腰上げ下げ
④音声の録音などに使用予定
多機能リモコンのプログラム概要は、こんなところです。

●詳細(赤字はユニリモコン割り当て番号)
①電源ボタン 0 
電源)プログラム終了
②セクション
1)クラクションと足のビーコン点灯 
2)サイレンと赤LED点滅 
3)口笛と緑LED点滅 
4)首左回転 
5)センター位置(左右動作) 5
6)首右回転 
7)上を向く 
8)センター位置(上下動作) 8 
9)下を向く 
10)腕の開閉(トグル動作) 10
(トクル動作とは、一回押すたびに「開」または「閉」を、順番に繰り返します)
11)空き 11
12)写真撮影(赤LED点滅、目点滅、シャッター音) 12
③移動セクション
左側 +)左腕上へ 26
    -)左腕下へ 27

真ん中の4つのスイッチ
 上側) 緑LED点灯(トグル動作) 13
 2番目) 黄LED点灯(トグル動作) 14
 3番目) デジタル出力4(トグル動作) 15
 4番目) 空き 16

右側 +)右腕上へ 28
    -)左腕下へ 29 

左列2ボタン
上側)左旋回10度 17
下側)180度ターン 18

クロスバータイプ
真ん中セレクトスイッチ
上)前進 21
左)左旋回45度 22
センタボタン)停止 25
右)右旋回45度 23
下)後進 24

右列2ボタン
上側)右旋回10度 19
下側)腰上げ下げ(トグル動作) 20
④音声録音セクション
未定義 30

◇デモ走行

12/9に、KENさん主催の「ロボットの集まり」が、東京三田でありますので、この試作版のプログラムを搭載したID-01を、お披露目をしてこようかな・・・と考えています。

◇どんなリモコンがベターか?
先日、KENさんの「ロボットの集まり」に参加させていただいたのですが、そこで話題になったのが、皆さんめいめいがお持ちになったテレビリモコンによる、到達距離の問題です。
狭い部屋ですと、壁、天井、家具などに赤外線が反射して、結構スムースにコントロールできますが、広い会場ですと、壁、天井の距離が遠く、赤外線の反射は望めません。
コマンダーによって、到達距離の差異が、かなり出てしまいました。


●赤外線の強さ
ID-01のコントロール範囲が、リモコンによって異なるのです。
そこで、皆さんのリモコンの赤外線の強さ(明るさ?)を測ろうということになって、携帯電話のカメラで確認してみました。
色々調べて見ると、赤外線発光ダイオードがひとつついているものと、2つのついているものがありました。
Id01_90_24 
赤外線撮影が可能な携帯電話のカメラで撮った画像

しかも、押している間、連続して点灯しているものと、細かく点滅しているものもありました。
メーカーコード、あるいは機種コードによって、赤外線の発光間隔が異なるようです。
マイクロヘリのハニービーのコントローラーについている赤外線発光ダイオードは3つも付いていました。
Id01_90_25
    
●タッチレスポンス
リモコンの種類によって、ボタンの押ししろ(押したときの深さ)も、コントロールしやすさに影響します。
なるべく、ひっかかりがなくスムースに、そして、押ししろがなるべく浅い方が、素早いコントロールが出来てベターだと思います。

テレビリモコンは、2000円前後で多機能リモコンが購入できますが、発光ダイオードが多く、そして光量が大きく、かつ、押ししろが浅いリモコンがベターだと思います。
尚、販売店にいって、携帯電話で覗きならが、リモコンをチェックして回るのは不審な行動ですので、店員さんに事情を話すなりして、誤解の生じないよう充分お気を付けください。

●2足歩行ロボット用コントローラー
このごろ、2足歩行ロボット用のコントローラーが出回り始めました。
4945984011153_2 テレビリモコンで代用などせずに、最初からロボット用のリモコンを使用してしまうのも、良い方法だと思います。
現在のところ、赤外線式のものよりも、無線式タイプのものが多いようです。
どのリモコンがベストなのか分かりませんので、ご興味のある方は、調べてみるのも良いかもしれませんね。
(2007/12/10)


◇赤外線を11個以上登録する
テレビリモコンによってデザインは少しづつ異なるようですので、ご自分のコマンダーに何番を割り当てるのかメモしておくと、赤外線登録の時と、プログラミングの時に、分かりやすくなります。
私は、100円ショップでホワイトボードを購入して、それにメモるようにしています。
試行錯誤での修正にも、直ぐに対応できるからです。

それでは、11個以上の赤外線の登録を行ってみる事にしましょう。
ユニリモコンに登録出来る割り当て数は、全部で251個もあります。
全部使用する必要はありませんが、市販されている「テレビ多機能リモコン」ではだいたい30~50弱のボタンが付いています。
さらにモードスイッチにより、画面が2~5面に切り替えられますので、一面が50個、それが5面で、50×5=250個となり、ユニリモコンの登録数が決して多過ぎる事はないように思われます。
それでは実際にPC_Controlによる、ユニリモコンへの登録を行ってみましょう。

●PC_Controlによる登録方法
この登録方法は、PC_Controlのマニュアルに載っていますので、詳しくはそちらをご覧ください。
ID-01とPC_Controlを立ち上げBluetoothで接続すると、画像Aの状態になります。
この時、画面右下のロボヘッドマークは無色で表示されています。
Id01_90_28
画面クリックで拡大します
   
☆赤外線コントロール発信画面
デスクトップPCのキーボード右側にあるテンキーの「0」キー①を押すと、順に「B」「C」の画面に変わります。
マニュアルによりますと、「C」の画面の状態を「赤外線コントロール発信画面」というそうです。
Id01_90_27
   
☆赤外線コントロール学習画面
こんどは、テンキーボード上にある「/」キー②を押すと、「D」の画面になり、右下のマークが赤いカラオケマイクのような形に変わります。
この状態を「赤外線コントロール学習画面」というそうで、「0」~「250」までの赤外線リモコンの信号を記録保存できるようになります。
Id01_90_29
画面クリックで拡大します
   
☆学習画面のページ切替
画像「E」~「F」の左下にある数字(赤丸印内)をご覧ください。
テンキーの左横にある、「↑」「↓」ボタン③で順にカウントアップ、ダウンが行えます。
画面「E」には、「0-」と表示されていますが、「↑」キーを押すごとに「1-」(画面F)、「2-」(画面G)・・・・・そして24回押すと「24-」までページ画面をカウントアップさせる事が出来ます。さらに「↑」キーを押すと最初の「0-」に戻ります。
「↓」キーは逆にページの数字がダウンしていきます。
☆この数字の意味
さて、この「0-」、「2-」、「24-」の意味はなんでしょうか・・・
実は、左側数字は10の位、「-」は1の位を表しています。
「0-」のページ(画面E)で、テンキーで「5」を押すと、「05」を指定できます。
「1-」のぺ-ジ(画面F)で、テンキーで「5」を押すと、「15」を指定できます。
「2-」のぺ-ジ(画面G)で、テンキーで「5」を押すと、「25」を指定できます。
「24-」のページ(画面H)で、テンキーで「5」を押すと、「245」を指定できます。
つまり、ページ数を「A」、テンキーの値を「B」とすると、次の式がなりたちます。
A×10+B=指定番号
そしてテンキーの「*」キーは10が代入されます。
従って、「0-」と「*」では「10」、「1-」と「*」では「20」、「24-」と「*」では「250」になります。Id01_90_32a_2

「250」の登録開始画面はこのようになります

これで、「01」~「250」までの番号指定の方法はお分かりいただけましたか?
えっ、「これだと250個までしか登録できず、ひとつ抜けているのでは?」ですって・・・・
そうです「0」が抜けていました。
「0」の登録は、スペースキーを押してください。どこのページでも結構です。

ここでは、「11」という番号を指定すると次の画面が表示され、赤外線リモコンの学習画面に進みます。Id01_90_30a
     
●赤外線リモコンの学習
リモコンを学習させる方法は、前回ご案内した「音声によるコマンドの割付」とオペレーションと似通っています。
(前号まで戻ってご覧頂くのは恐縮しますので、前号のくだりをそのまま転記しました。ご了承ください。)


エアコン(テレビなど)のコマンダーを、ID-01のユニバーサル赤外線リモコンに向け、今回は「チャンネル11」のボタンを押します。
するとID-01が「モウイチド」と告げ、ディスプレイには次のメッセージが表示されます。
Id01_90_30b
Id01_90_30c メッセージが連続して表示されます
       
☆コンペアチェック
リモコンの「電源ON」のボタンを再度押して、ユニバーサル赤外線リモコンに、前回と同一のコマンドかのコンペア(比較)チェックを行います。
OKならば、「学習はうまくいきました」と、次のメッセージが表示されます。
Id01_90_30d
        
音声コマンドの割付と、リモコンの学習モードは、連続して次々に登録することが可能です。

例えば「241」の登録画面は次のようになります。Id01_90_31a_2

     
暫く何もせずにいると、次のメッセージがディスプレイに表示され、このモードを終了します。
Id01_90_06h_2

音声で登録する方式よりも、こちらテンキー操作の方が、はるかに効率的に登録作業ができるのではないでしょうか。

☆登録された赤外線信号
ユニリモコンから登録された信号は、0~250番までのインデックスとともに、第1信号、第2信号という形で16進数で、ブレインボードのメモリーに格納されます。
文献によりますと、通常信号は第1信号、トグル信号が第2信号とあるようです。Id01_90_33

登録した赤外線信号の一部(画面クリックで拡大)
    
★ノートパソコンに外付けキーボード
「ロボット」の集まりで、このテンキーの入力をノートPCで行おうとして、大変苦労されている方が何人もいらっしゃいました。
外付けのPC用キーボードを接続するだけで、入力ははるかに楽になります。
このPC用キーボードは、PCショップで千円弱のものから販売されています。Id01_90_26

画像はバッファロー製USBフルキーボード
(ヨドバシ価格980円)


ノートPCから離れて入力が出来ますので、メール、ワードなどの入力作業も楽になります。この際、ワイヤレスしたいとか、超高級製品を望まない限り、出費は少なくてすみそうです。
私は、ノートPCのキーボードが操作しにくいので、ID-01以外でも、いつも外付けキーボードを常用しています。PCを持って出かけるときも外付けキーボードをカバンに入れていきます。なにしろとても軽いものですから・・・・
(2007/12/11)

◇ちょっとプログラム
前号からお話していたプログラムの解説を始めないと、後わずかで年を越してしまいます。
一方で、皆様かなりVCLEの勉強をされているようで、ゼロからのプログラミングの解説などをしたら、「なめんなよ!」っとしかられてしまいそうです。
そこで、今回のユニリモコンを使用したプログラムの要点だけを「ちょっとプログラム」として、簡単に説明しておきますので、ご了承ください。
尚、中級以上のレベルの方は読み飛ばされてください。

☆ユニリモコンの判定プログラム
今回、プログラムの基本になるのが、テレビリモコンから「赤外線を受けたか?」そして、それが「何の信号か判定」し、その受け取った信号によって「何をするか」の命令を書けば、「ユニリモコンの判定プログラム」の完成です。
○ユニリモコンに「0」を
登録
事前に、テレビリモコンの「電源」ボタンを「0」と、ユニリモコンに登録しておきます。
たしか先週号で「チャンネル11」を「0」に登録してしまったのですが、大丈夫でしょうか?
ユニリモコンの登録を新たに行えば、前回の登録は上書きされてしまいますので、ご安心ください。
ついでに「1」に1チャンネルのように、「1~12」まで順番にユニリモコンに追記登録しておいてください。
○いよいよプログラミング
まず、「電源」ボタンを押すと、プログラムが終了するプログラムを作成してみましょう。
正確には、「赤外線を受けたか?」→「の信号かを判定」→「プログラムを終了する命令」という動作のプログラムを作ることになります。
これがそのプログラムです。Id01_90_34

画面クリックで拡大します

WaitFor命令
赤い枠の中に”Remote Control Update”と書いてあります。
リモートコントロール(ユニリモコン)からの赤外線信号が来るまで、じっと待ち続けます。
そして、赤外線信号が入ると次に進みます。
IF文
皆様良くご存知のIF文です。
「もし何々が~だったら(Then)こうする、違っていたら(Else)、ああする」という命令です。
緑の枠の中に”Remote Control Received Code 0”と書いてあります。
リモートコントロール(ユニリモコン)から受信した赤外線信号が「0」なら、「Then枠の中身(Stop命令)を実行」、違っていたら「Else枠の中身(現在何もありません)を実行」というわけです。
Stop命令
文字通り、プログラムを停止(終了)させます。

ここまでは、お分かりいただけましたか?
VCELは文字通り、ビジュアルに命令をフローチャートにしてくれますので、流れが分かりやすいですね。

でも、このIF文は、「ELSEの枠」の中が、からですね。
このELSEとは? そう、何々でなければ・・・ つまり、リモコンのシグナルが「0」でなけば何々をせよ!っという事になります。
「0」以外の場合、つまり、「1」~「30」の命令がかきこめます。
それでは複数プログラムはどう処理したら良いのでしょうか?

☆複数プログラムの処理
次の2つの方法で「IF文」をいくつも繋げていけば良いのです。
1)IF文を縦に繋げる方法
ご覧のように、IF文を、判定する数だけ縦にどんどん増やしていきます。
当然ですが、フローチャートがどんどん縦長になります。Id01_90_36a

画面クリックで拡大します

この手法で全ての判定を行うと、ひとつの判定で処理(IF~Then)をしたにもかかわらず、全てのIF文の判定を通らなくてはならないため処理が遅くなるという事です。

2)IF文の中にIF文
ご覧のように、ELSE枠の中に、次のIF文(赤枠内)
を書き込んでいく方法です。Id01_90_36b
親亀の上に小亀をのせて・・・のように、IF文の中に、IF文がどんどん書き込まれていきます。このプログラミング手法は「入れ子」と呼ばれています。

この手法は、ひとつの判定で処理(IF~Then)が行われると、そのまま下に抜けてしまうため、全体の処理が早くなる利点があります。

今回、公開したプログラムは、当初、全部入れ子方式で判定をしていましたが、「縦」と「横」の組み合わせで
、「移動(走行)」「腕・腰」「頭部」「LED、警笛」などの各セクションに分けて、IF文をまとめてみました。
当然、最初のIF文から判定していきますので、
優先順位の高い処理は最初に持っていく必要があります。
従って、「移動(走行)」セクションは前の方に配置しました。

☆フラグとは
先日行われた「ロボットの集まり」に参加された方から、フラグについてのご質問がありました。
たしかに、VCLEの変数の所をみると、沢山のフラグ(Flg)が定義してあります。

簡単にいうと、FLGは、状態を表す旗と思ってください。


例えば、LEDの点灯/消灯の状態をあらわす事もできます。
走行の状態を表すのには、停止状態は「FLGが0」、前進状態は「FLGが2」、後進状態で「FLGが8」というようにしておけば、そのFLGを見るだけで、現在の走行状況を知ることができます。

緑のLEDが付いた状態、走行の状態など、いくつかのFLGが存在した場合には、それらのFLGに分かりやすい名前をつけていきます。
今回のプログラムでは、画像のように沢山のFLGを用意(赤枠内)してあります。Id01_90_37a

画面クリックで拡大します

☆トグルスイッチ
FLGの使い方の応用で、トグルスイッチ的な使い方をご紹介します。
つまり、ひとつのボタンを押すたびに、LEDの点灯、消灯を順番に行うプログラムです。
今回のプログラムでは、LEDの点灯/消灯以外に、腰の上下、ロボットハンドの開閉に使用しています。


たとえば、初期処理で、旗をしまっておきます(FLG=0)。
赤外線リモコンで、緑のLEDを付ける命令が入ってきました。
緑のLEDを付ける処理と同時にFLGを立てます(FLGは1)。
このように、FLGという変数部分に、0とか1とかが代入された状態を、フラグを立てる・・と呼びます。
これだけでは何のことやら分かりませんね。
実際にプログラムの中身を見てみましょう。赤枠内に注目してください。Id01_90_37b
    

画面クリックで拡大します

コマンドが押され、この処理に入ってくると、LEDを点灯する前に、フラグ(FlagD1)が”0”かどうかのIF文があります。
先ほど述べましたように、初期処理でフラグの中身を”0”にしておきましたので、「その通り(Then)」の処理を行います。
Thenの処理枠の中には、LEDを点灯する命令と、フラグ(FlagD1)を”1”にする2つの命令が入っています。
つまり、緑LEDが点灯すると同時に、フラグ(FlagD1)の中身は”1”が代入された事になります。

次にコマンドが押され、この処理に入ってくると、こんどはフラグ(FlagD1)の内容が”1”ですので、「そうではない(Else)処理」を行います。
Elseの処理枠のなかには、LEDを消灯する命令と、フラグ(FlagD1)を”0”にする2つの命令が入っています。
つまり、緑LEDが消灯すると同時に、フラグ(FlagD1)の中身に”0”が代入された事になります。

このように、次回、この処理枠に入ってくれば、「点灯、フラグは1」、その次は、「消灯、フラグは0」と、トグル(繰り返される)わけで、コマンドがここに入ってくるたびに、LEDのON/OFFが出来る事になる事になります。
フラグを使用した簡単な仕組みですが、リモコンのボタンをひとつ使用するだけで、2つの処理が行えた事になります。
このテクニックを身につけると、色々応用がききますので、是非参考にして頂ければと思います。


この項目の後ろの方に、サンプルブログラム
”Remot Control02Ux.vclike”をダウンロードできるようにしました。
一度ダウンロードしてVCLEに読み込み、研究されてでみては如何でしょうか。

つづく
(2007/12/14)


◇多機能リモコン用プログラム公開
冒頭の動画でご覧頂いた、多機能リモコン用のVCLEプログラムを公開します。
今回はテレビ用多機能リモコンを使用し、20以上の割付を行ってう事により、両腕の上げ下げ、腰高上下、LED点滅、警笛などの機能を備えています。
冒頭に「ちょっとした改造」でお話したように、デジタル出力、3ピンを両目のLEDに、4ピンを腕先のLED点灯できるように、アームボードから直接内部配線を行いました。
皆様ご存知のように、各ボード類は現在品薄状態です。
もし、同様のテストをされる方がございましたら、バッテリーボックス横の配線などから引き出した方がリスクを回避できるかと思います。
両目のLEDには、デジタル3ピン(+)、腕先LEDにはデジタル4ピン(+)、双方にGND端子(-)を繋いでいます。
あくまでも自己責任でお願いします。Id01_90_35_2
画面クリックで拡大します
尚、デジタル出力は微弱電流しか流れていませんので、3ピンと4ピンの両方を点灯すると電力不足になります。
デジタル出力でリレーを介し、正規の電源でLEDを点灯させるように改造を検討中です。

☆リモコンの割付
事前に、ユニコマンダーに、テレビ多機能リモコンの割付を行っておいてください。
前項、「多機能リモコンの他のボタンを使用する」の中で「詳細」に記載してある、赤い数字が登録する割付番号です。
コマンダーによってレイアウトが微妙に異なると思いますので、ご自分のコマンダーにあった割付を行ってください。
デジタル出力は、前項に記載したLEDを配線しない限り点灯しませんのでご注意ください。
デジタル出力3ピン
14には、便宜的に黄LEDが点灯するようにコマンドを挿入していますが、ピン415は何も行っておりません、必要でしたら適当なLEDを点灯するコマンドを追加されてください。

前回のプログラムと同様、オペレーションでの注意事項は同じです。
早押し、重ね打ちなどを行うと、プログラムがロックしてしまい、ノーコントロールになります。プログラムを停止させてから、再度スタートしてください。


☆プログラムロック防止の対応
「掲示板」の中で、”ながさきのこばやしさん”より重ね打ちによるロック防止方法のご指摘を頂きました。
ロックの原因は「I2C通信の確立に時間待ちが必要かとも思われる・・・」との推論で、早速Pouse命令を入れてテストを試みたところ、ロック防止への効果を確認できました。
当初、待ち時間を0.3秒からはじめましたが、なかなか効果が現れず、0.8秒で一応の効果を見た次第です。
尚、待ち時間を長くしすぎると、次のコマンドがなかなか打てなくなることから、なるべく最短時間で、しかも効果のある待ち時間が望ましいところです。
ただし、この対処はあくまでもプログラムロックが起こりにくくなるという対処ですので、完璧ではありませんのでご了承ください。
今後、一連のテストを続けて確認を行い、改良すべく点は善処していきたいと思います。
ながさきのこばやしさん、有益な情報を有難うございました。


下の行からプログラムをダウンロードします。そして拡張子vclikeで適当なフォルダーに保存して、VCLEで開いてください。
私は、”Remot_Control02Ux.vclike”という名前で保存しました。
(02Uの後ろのxは、バージョンが更新されるたびに変わるので仮名をつけました)
プログラムをダウンロードされるときは、下の「ダウンロードでのご注意」をご覧ください。

*****************************************
{多機能リモコン用プログラムダウンロード}
「Remot_Control02Ub.vclike」をダウンロード
*****************************************

現在”Remot Control02Ub.vclike”が最新バージョンです (2007/12/15)

週刊myRobotを作ろう(82)」に掲載した、テンキーリモコン用プログラムも、同様の対処をおこないましたので、ここでダウンロードを行えるようにしました。宜しければご利用ください。
*****************************************
{10キーリモコン用プログラムダウンロード}

「Remot_Control01c.vclike」をダウンロード 
*****************************************
現在”Remot Control01c.vclike”が最新バージョンです (2007/12/15)

「ダウンロードでのご注意」
ファイルのダンロードに関しては、拡張子が”xml”に変わってしまいますので、お手数ですが、以下の方法でダンロードされてください。

1)上記ダウンロー
「Remot_Control01.vclike」をダウンロード を右クリックし、「対象をファイルに保存」を選択します。Id01_90_11
    
2)フィル名が、”RemotControl01.xml”と出てきますので、後ろ3文字"xml"を消して、”vclike”という文字を半角英字で入力して、任意のフォルダーに保存します。Id01_90_12_2

①"xml"3文字を、”vclike”に変えて、②保存する
(画像クリックで拡大します)
     
(2007/12/13)


■今年の冬は恐竜ロボットと遊んでみては・・・
長いタイトルになってしまいましたが、この冬、恐竜型ペットロボットが発売されました。
米UGOBE(ユーゴービー)社が開発した「PLEO(プレオ)」です。Id01_90_23_2
販売元ビジネスデザイン研究所の資料より
   
サーボモーターは14個、カメラ、赤外線、重力、音声、タッチなどのセンサーは38個を搭載。頭、あご、背中など各部にタッチセンサーを搭載しており、ユーザーが撫でると体を丸めるなどの動作をするそうです。
アイボ同様、ユーザーの接し方によって、異なった性格に成長していくそうですが、このあたりはペットロボットの定番というところでしょうか・・・
目や、口の動き、鳴き声がリアルです。
面白いのは、机の端まで歩いていくと、怖がって鳴きながら後ずさりしたり、腕に抱いてやさしく撫でていると、いびきをかいて寝てしまったりと、かなり、本物のペットを意識して作られている事です。
日本ではビジネスデザイン研究所が輸入販売するそうです。Webサイトには「PLEO(プレオ)」の紹介記事が動画を含めて載っています。
体長は約48cm。重量は1.6kgのこのペットロボ君、日本での販売価格は5万2500円、12月中旬からの発売との事で、現在予約をとっているようです。
ご興味のある方は、一度ご覧になってみるのも宜しいのではないでしょうか・・・


■あとがき

街には師走の声とともに、クリスマス用品とともに、正月のしめ縄、干支人形、食材などが並び始めました。
いろいろあった2007年も、もう僅かになりましたね。
寒さに負けずに、皆さん頑張りましょう!

| | コメント (12)

2007年11月30日 (金)

週刊myRobotを作ろう(83)

■更新情報 ユニリモコンをバックパックに内蔵 (2007/12/4)
■更新情報 BASEボードにヒートシンク (2007/12/4)


■ユニリモコンを使用したプログラム
今週から、週刊myRobotの発売はなくなってしまいました。
そこで、先週ご紹介した「テレビリモコンでID-01をコントロール」の解説をしてみようか・・・と思っています。
解説の前に、このプログラムの動作テストを行い、動画に撮ってみましましたので宜しければご覧ください。

テレビリモコンでID-01をコントロール」動画

再生するには画面のスタートボタンを押してください

尚、もう少し大きな画面でもご覧になることができます。
ロボットハンドの動きなどは、こちらの方が良くご覧になれます。

テレビリモコンでマイロボットを操縦
テレビリモコンでマイロボットを操縦

◇動作解説

●プログラムスタート
「起動しました」と発声。
左手ユニリモコンが90度上がり、右手ロボットハンドは45度上がり「準備OK」と発音します。
ユニリモコンは、オリンピックの聖火のように垂直に立った状態で、360度方向からのテレビリモコンの赤外線信号を受光することが出来ます。

●走行操作
「2(前進)」 「前」と発声、両目緑LED点灯
「8(後退)」 「後ろ」と発声、両目黄LED点滅
「4(左45度)」 「左」と発声、左目黄LED点滅
「6(右45度)」 「右」と発音、右目黄LED点滅
「5(停止)」 「OK」と発音、両目赤LED点灯

●走行補助操作
「1(左15度)」 「左」と発声、左目黄LED点滅
「3(右15度)」 「右」と発音、右目黄LED点滅
「7(180度ターン)」 「最高!」と発声、右目黄LED点滅

●ロボットハンド操作
「10(ロボットハンド開く)」 「ワオー」と発声、 ロボットハンド開く
「11(ロボットハンド閉じる)」 「ワオー」と発声、 ロボットハンド閉じる

●プログラム終了
「9(プログラム終了)」 「OK」と発音、両目緑LED点滅
まず、左手が基本位置に戻り、続いて右手も基本位置に戻ります。
両目LEDが消灯、「終了します」と発声、プログラムが終了します。

●その他
前進→左右、後退、Uターンなど、各動作さから、異なる動作に直接移れるようになっています。
その際、一旦、停止モードに入り動きを止めてから次の動作に入るようにプログラムしました。目のLEDが一瞬赤く点滅します。

動画を収録途中、停止操作が遅れ、ID-01が段差から落下する事故がありましたが、全く無傷でした。結構、丈夫に作られていますね。

滑らかな停止は、急には止まれないという事になり、早めの操作に心掛けるか、あるいは、いきなりストップ命令にした方が良いかもしれません。

その辺を含めて、実際のVCLEプログラムの解説を加筆予定です。
しばらくお待ちください。

■ユニリモコンをバックパックに内蔵
プログラムの解説する・・・と言っておきながら、つい、改造に走ってしまい反省しております。
テレビリモコンのプログラムで、聖火ランナーのようにユニコマンダーを掲げて走行するのも、回数を重ねていくうちに、なんとなく違和感に囚われ始めました。
そこで考え付いたのが、ユニコマンダーだけ外付けしたら良いのでは・・・という考えです。

◇取り付け場所
ユニコマンダーを組み立ててお分かりのように、中身は2つのボードがあるのみです。
そこで目をつけたのがバックパックです。Id01_90_20
ご覧のように、2つの穴を空けて、「上空を見上げる位置」で取り付けてしまいました。(赤丸印)

バックパック内部においては、スペース的には全く問題ありませんでした。
オリジナルのユニリモコンには、赤外線フィルターの丸いカバーが付いていますが、赤外線受光部自体、赤外線フィルターで覆われていますので、そのままはだかで取り付けました。Id01_90_18
     
◇配線
当初考えていたのは、ユニコマンダーと、左腕先ツールを併用できないか・・・という事でした。
ところが、配線をパラレルに引いてみたところ、イニシャライズでユニリモコンを認識したとたん、腕先ツールに+3.0Vの電圧が掛かかってしまい、LEDなどは点きっぱなしになってしまいました。
いずれ、デジタルI/Oあたりから配線を引き、ON/OFFしようかとも考えていますが、今回その機能はパスすることにしました。

バックパック内部に取り付けるのですから、腕先に付いているUSBケーブル、その配線・コネクター類などは全く必要有りません。
そこで、背中にあるアームボードのコネクターに直接配線しました。
2つのコネクターがある「URCボード」は結構邪魔な存在で、現在はBluetoothボードと、音声ボードの間のスペースに宙ぶらりんになっています。

◇全方位のアクセスは可能か?
ユニリモコンを背中の箱(バックパック)の中に内蔵してしまった事により、ユニリモコンの送・受光口の前方には、ID-01のヘッドが障害物としてそびえ立っています。
でも、ユニリモコンは上空を見つめて取り付けてありますので、その上空に反射物を取り付けてみました。
    
現在、「街角にはクリスマスツリー」の時期ですので、クリスマスのデコレーションアイテムが沢山出回っています。
100均ショップで、直径30mmくらいの、ミラーボール(3個105円)が有りましたので、それを利用することにしました。また、重さも20gと軽量なので取り扱いが楽です。Id01_90_21
   
そのミラーボールをピアノ線で20cmほど持ち上げましたが、全方位(360度)、問題なく受光できました。
室内ですと、ID-01の前方、5~6m離れたところからでもコントロール可能です。
もちろん、受信出来るという言う事は、送信も出来るという事で、テストで離れた所からユニリモコンでテレビチャンネルを切り替えてみましたが、問題なく操作する事が出来ました。Id01_90_19

前方から見たID-01とミラーボール

ミラーボールの下面付近を良く見ると、ID-01の背中がちゃんと映っています。ミラーボールの上面は使用していないので、半球にしてしまおうかと思いましたが、ID-01自体のデザインが曲面で構成されていますので、そのままにしております。
尚、このミラーボールとピアノ線は、単に差し込んであるだけですので、使用しない時は取り外し自由、オリジナルのID-01に戻れます。


空中におく媒体としては、「ミラーボール」の他に、「アルミの風船」、「上空に銀色の飛行船を飛ばす」、など、アイデア次第では色々な可能性があるのでは・・・と思います。
(2007/12/4)

■BASEボードにヒートシンク
テレビリモコンで、ID-01をいい気になって走らせて、おまけに物体回避モードまで入れていますので、なんとなくBASEボードは大丈夫?・・・と、真夏に起きた多くのBASEボード焼失記事がよみがえりました。
ソーセージさんのブログ「Wiki」の中で、おにゃにゃさんが「ベースコントローラーの損傷防止策」という記事を書いていらっしゃいます。
記事を読んで見ますと、簡単な方法で、しかも効果が期待できそうですので、ちょうどユニリモコンの内蔵の為おなかを開いたついでに、ヒートシンクを取り付けてみる事にしました。Id01_90_15
    
おにゃにゃさんの記事に出ていた物より小さな物しか手に入りませんでしたが、多少の効果でも出れば良いな・・と思って取り付けてしまいました。

その記事によりますと、モータードライブ用のトランジスターの位置が左右で若干事なるようで、うまくカバーするように設置するのがポイントのようです。Id01_90_16
詳しくは、おにゃにゃさんの「ベースコントローラーの損傷防止策」の記事をご覧下さい。
(2007/12/4)


■あとがき
「週刊マイロボット」が終了し、早、一週間経ちました。
本屋さんに行くのがなんとなくウイクリーワークになっていたようで、火曜日になるとワクワクする癖がまだ抜けずにいます。

おまけに、先週まで続いていた抜けるような青空も、このとろこ寒い雨模様です。
11月下旬から12月上旬の連族した降雨を「山茶花梅雨」というそうです。

街には「クリマスマス」、そして「師走」、「年賀状」、「忘年会」・・・・
これから何かと、忙しくなっていきますね。
寒さに負けずに感張りましょう!

| | コメント (14)

2007年11月20日 (火)

週刊myRobotを作ろう(82)

■更新情報 ”Remot Control01c.vclike”変更(2007/12/15)
■更新情報 テレビリモコンの登録動画 (2007/11/26)

■更新情報 素早い動きのR2D2 (2007/11/25)
■更新情報 テレビリモコンでID-01をコントロール(2007/11/23)


ついに最終回を迎えた「週刊myRobot」です。
今週この最終号をもって、ID-01のハードウェアは全て完成となります。
今週付いてきたパーツで、84~88号まで、だらだらと保存状態が続いた「ユニバーサル赤外線リモコン」が完成します。
さらに今週号には、デアゴ社の約束事だった、ID-01の専用充電器がついてきました。

■90号『ユニバーサル赤外線リモコンを完成させる』
今週号には、Universal Remote Control、略して「URCボード」が付いています。Id01_90_01
       
◇組み立て作業
まず、「発信機・受信機ボード(89号)」のコネクターを、URCボードのソケットにコネクティングします。
次に、「ミニUSBケーブル(87号)」のコネクターを、URCボードのもう一方のソケットにコネクティングします。Id01_90_03
       
そして、URCボードを86号付属のネジ(2.3×6mm)2本で、「リモコンケース(85号)」にとめて、さらに「発信機・受信機ボード」「ミニUSBケーブル」「リモコンカバー(86号)」を差し込みます。Id01_90_04
      
コードを挟まないように「リモコンケース(84号)」でふたを閉じれば完成となります。
ID-01の全ての組み立て作業は、これで完了です。
次項の動作テストさえうまく行けば、本当に、完全に動くmyRobotがここに誕生した事になります。
ブログを遡ると、本当に長い道のりでしたね。

◇リモコンの動作テスト
他のハンドツールと同様に、左前腕の先に取り付け、ミニUSBコネクターをソケットに接続します。

●ディスプレイメニュー(Diagnostics)
☆リモートコントロールモード
「B(中)ボタン9回押下」 → 「Remote Control URC-10IT」
Id01_90_06
ここでは、「C(右)ボタン」を一回押すたびに、次の3つのモードを切り替える事ができます。

①赤外線送信ON
音声コマンドにより、ユニバーサル赤外線リモコンをコントロール出来ます。Id01_90_06b
   
②赤外線送信OFF
上(①)の機能を停止します。Id01_90_06c
    
③学習モード
ここでは、「音声コマンド(0~10)の割付」と、テレビ、エアコンなどのコマンダーから、ユニバーサル赤外線リモコンに学習をさせることができます。Id01_90_06d
    
例えば、音声コマンド「1」に、エアコンのコマンダーで「電源ON」を割り付けてみましょう。
エアコンでなくても、テレビ、オーディオ、照明など色々ためす事ができます。

☆音声コマンドの割付
「0」~「10」までの数字を音声で登録する事により、11種類のコマンドを割り付け登録する事が可能です。
ためしに、音声コマンド「1」に、「エアコンの電源ON」を登録してみましょう。

まず、耳のLEDが点滅していますので、「イチ」と告げます。
ID-01が「イチ」と復唱してきます。 → 「Learn Cmd 1-Press a Key」と表示されます。Id01_90_06e_4    
              
☆赤外線リモコンの学習

エアコン(テレビなど)のコマンダーを、ID-01のユニバーサル赤外線リモコンに向け、今回は「電源ON」のボタンを押します。
するとID-01が「モウイチド」と告げ、ディスプレイには次のメッセージが表示されます。Id01_90_06f_2
メッセージが連続して表示されます
       
☆コンペアチェック
リモコンの「電源ON」のボタンを再度押して、ユニバーサル赤外線リモコンに、前回と同一のコマンドかのコンペア(比較)チェックを行います。
OKならば、「学習はうまくいきました」と、次のメッセージが表示されます。Id01_90_06g_3
        
音声コマンドの割付と、リモコンの学習モードは、連続して次々に登録することが可能です。
暫く何もせずにいると、次のメッセージがディスプレイに表示され、このモードを終了します。Id01_90_06h_2
      
◇音声コマンドによるテスト
実際に、音声コマンドでテストしてみましょう。
ID-01を起動させ、先ほどのディスプレメニューで『①赤外線送信ON』にしておきます。

次に「アクション」と言って、ワードセット2に進みます。
ID-01の「ユニバーサル赤外線リモコン」をエアコン(テレビ他)の方に向けて、「コマンド1」と言います。これでエアコンがONになれば、動作テストは問題ありません。
私の場合、問題なくエアコンがONになりましたので、「寒くなったらエアコンが点く」というプログラムでも、VCLEで作製してみようかと思っています。

■テレビリコンンでID-01をコントロール
さて、いよいよ、「ユニバーサル赤外線リモコン(以下ユニリモコンと呼びます)」を使って、何かをやってみましょう。

ユニりモコンは、テレビ、エアコンなど、色々なリモコンのシグナルをデーターとして学習し、そのデーターを送信したり、受信して反応したりするなど、なかなか気の利いた事が出来ます。

今回は、ID-01にテレビリモコンのチャンネルシグナルを覚えさせ、そのテレビリモコンでID-01をコントロールするプログラムをVCLEで組んでみました。Id01_90_10_3
手前のテレビリモコンでコントロールできる(クリックで拡大)
      

プログラムをスタートさせると、画像のように左腕のユニリモコンが上を向き、360度の方向から赤外線をキャッチできるようになります。
テレビリモコンの1~11チャンネルに機能をアサインして、前後左右、指の開閉までコントロールできます。

ID-01にプログラムをロードしても、テレビリモコンのチャンネル1~11をID-01に学習させなければ、何もおこりません。
前項「③学習の方法」で述べた方法で、テレビリモコンを学習させましょう。

◇テレビリモコンをID-01に学習させる
前項「③学習の方法」で、テレビチャンネルを次の内容でアサインしていきます。

リモコンコマンド「1」 → チャンネル1
リモコンコマンド「2」 → チャンネル2
リモコンコマンド「3」 → チャンネル3
リモコンコマンド「4」 → チャンネル4
リモコンコマンド「5」 → チャンネル5
リモコンコマンド「6」 → チャンネル6
リモコンコマンド「7」 → チャンネル7
リモコンコマンド「8」 → チャンネル8
リモコンコマンド「9」 → チャンネル9
リモコンコマンド「10」 → チャンネル10

次の行は、内容に気をつけてください。
リモコンコマンド「0」 → チャンネル11

これで、音声コマンド「0」~「10」まで、テレビコマンダーの「1」~「11」チャンネル迄がアサインされました。


「10」の登録の時、「9」と誤認識されましたが、「ジュー」と長めに発音するとうまくいくようです。ご参考まで・・・・

◇動画1
実際にユニリモコンに登録する様子をビデオに撮ってみました。
文章だけですと、分かりずらいと思いますので、宜しければご覧下さい

(FLASH動画をアップしました)

約500KB 約33秒のムービーです。
再生はエンドレスですので適当なところで、プラウザーの戻るボタンで本文にお戻りください。

MOVIE1
コマンド登録のだみ声を消して、人工音声の美女?の声に差し替えてあります。
左下の挿入画面が、テレビコマンダーのボタン操作です。
若干、音声レベルが低いので、ボリュームを上げてお聞きください。
音声(番号)登録、ID-01の返してくる声、ビープ音などで、登録方法が理解しやすくなるかと思われます。
動画では、「1」~「2」までしか収録しておりませんが、連続して登録すれば5分位で完了します。
(2007/11/26)


◇リモコンコマンドと音声コマンド
リモコンコマンド「1」と、音声コマンド「1」は、内容的には全く同じです。
したがって、音声コマンドで「イチ(1)」と言うと、テレビのチャンネルが1に切り替わります。
又、テレビリモコンで、チャンネル1を押すと、「ユニリモコン」では、「コマンド1」と認識します。
つまり「ユニリモコン」は、双方向の応用方法が可能な、楽しいアイテムなのです。

◇VCLEプログラミング
原理は簡単です。テレビリモコンを、ID-01に向けてチャンネルボタンを押すと、ID-01は、何を押したか判断してくれます。
ですから、プログラムで「何を押したら何をする」という命令を書きさえすれば、ID-01を自由にあやつる事が可能となります。

◇各動作のキーアサイン(割り当て)
画像でご覧のように、私のテレビリモコンは、一番上が①②③と3列4段にならんでいます。
そこで、前進②、左④、右⑥、後進⑧、停止⑤と設定することにしました。

実際にVCLEでプログラミングして、動作テストを行ってみると、かなりレスポンスの遅れが有る事が分かり、左を押すとグルグル回ってしまい、思った方向に向けません。

やむなく、左、右方向とも、45度ターンで止める事にしました。2回押せば90度向く事ができます。
微調整が出来るように、左①、右③で、それぞれ15度づつ細かく動かせます。
さらに、⑦180度方向転換が可能なようにしました。

テレビリモコンでID-01を操作できるのなら、物を掴ませたいという願望が湧き上がり、指の開閉も可能にしました。ロボットハンド⑩開く、⑪閉じるです。

プログラム終了は、当初、ヘッドタッチを行いましたが、ID-01のところまで行かなければいけません。そこで、どうせならテレビリモコンで終了させようと、⑨終了にしました。

◇初期動作と終了動作
左腕についているユニリモコンは、腕を直角に曲げた位置ですと前を向いた状態になっています。
これですと、ID-01が向こうを向いた時に、赤外線が受光できなくなり、ノーコントロールになってしまいます。

●プログラムスタート前の準備
左前腕(ユニコントロール側) : 90度に曲げた状態
右前腕(ロボットハンド側)   : 1段伸ばした状態(45度)

●プログラムスタート

プログラムをスタートさせると、初期動作として、画像のように、聖火ランナー宜しく、腕を90度上げて、赤外線受光面が真上を向くようにしました。
これにより、床面においたID-01は、進行方向に関係なく、360度方向からコントロールが可能となります。
同時に、ロボットハンドも45度持ち上がり、指が車輪から前方方向に突き出すかたちになります。

●テレビリモコンの①~⑪チャンネルボタンで操作します。
主なコントロール 前進②、左④、停止⑤、⑥右、バック⑧、Uターン⑦
補助コントロール 左小回り①、 右小回り、 ハンド開く⑩、ハンド閉じる⑪

●プログラムの終了
終了ボタン⑨を押しますと、左右の腕が下がり、ホームポジションに戻るようになっています。

◇今後の展開
今回は、あくまでも、ユニリモコン使用の応用例としての、テストプログラムです。
現実的には、「物体回避」とか、「ロボットハンドの接触感知」なども追加したい気持ちはあったのですが、このあたりの応用編は、ほんのちょっとモジュールを付け加えることで可能になると思います。

今回、このプログラムが、皆様のイマジン刺激の要因となれば幸いです。
どうぞ皆様で、いろいろ楽しいプログラムを組まれてお楽しみください。

出来れば、近々に動画のアップも検討してみようと思います。

しかし、この「ユニリモコン」は、機能を知れば知るほど、只者では無い事がわかってきました。
デアゴさん、最後に大きな隠し玉を用意してあったのですね!

◇プログラム
皆様に、ご理解いただけるようにVCLEで作製しました。
難しいことは行っていませんので、解説は行いません。
早押し、重ね打ちなどを行うと、プログラムがロックしてしまい、ノーコントロールになります。プログラムを停止させてから、再度スタートしてください。

☆プログラムロック防止の対応
「掲示板」の中で、”ながさきのこばやしさん”より重ね打ちによるロック防止方法のご指摘を頂きました。
ロックの原因は「I2C通信の確立に時間待ちが必要かとも思われる・・・」との推論で、早速Pouse命令を入れてテストを試みたところ、ロック防止への効果を確認できました。
当初、待ち時間を0.3秒からはじめましたが、なかなか効果が現れず、0.8秒で一応の効果を見た次第です。尚、待ち時間を長くしすぎると、次のコマンドがなかなか打てなくなるため、なるべく最短時間で、しかも効果のある待ち時間が望ましいところです。
今後、一連のテストを続けて確認を行い、改良すべく点は善処していきたいと思います。
ながさきのこばやしさん、有益な情報を有難うございました。


下の行からプログラムをダウンロードします。そして拡張子vclikeで適当なフォルダーに保存して、VCLEで開いてください。
私は、”Remot_Control01c.vclike”という名前で保存しました。

プログラムをダウンロードされるときは、下の「ダウンロードでのご注意」をご覧ください。


*****************************************
「Remot_Control01c.vclike」をダウンロード   
*****************************************

現在”Remot Control01c.vclike”が最新バージョンです (2007/12/15)

「ダウンロードでのご注意」
ファイルのダンロードに関しては、拡張子が”xml”に変わってしまいますので、お手数ですが、以下の方法でダンロードされてください。

1)上記ダウンロー
「Remot_Control01.vclike」をダウンロード を右クリックし、「対象をファイルに保存」を選択します。Id01_90_11
    
2)フィル名が、”RemotControl01.xml”と出てきますので、後ろ3文字"xml"を消して、”vclike”という文字を半角英字で入力して、任意のフォルダーに保存します。Id01_90_12_2

①"xml"3文字を、”vclike”に変えて、②保存する
(画像クリックで拡大します)
     
(2007/11/23)


■ID-01専用充電器

当初からのお約束の充電器がついてきました。
ID-01の設計段階では、充電電池というばニッカド電池でしたので、ID-01のバッテリーボックス横に充電ジャックを取り付け、電池5本と、3本に夫々給電すれば充電が可能でした。
ところが、時代は変わり、いまやニッケル水素電池が主流になってきている今日では、まとめて充電という事が困難で、電池一本づつの充電管理が必要となってしまいました。
デアゴ社は、苦肉の策として、今回の充電器を開発したもようです。

ID-01という割りには、単3以外に、単4まで充電できるというおまけまで付いて・・・・
ID-01では、8本または、6本の電池をお使いの方が大半ですので、手持ちの充電器とあわせれば、一度に全ての電池が充電できるので、ラッキーですね。Id01_90_02
どこかで見た事のあるようなID-01専用充電器

■ロボットハンドの遠隔操作
せっかく立派な?ロボットハンドがついたID-01ですが、物をつかむにしても、前腕を90度に曲げていたのでは、前車輪に邪魔されてつかめません。Id01_90_07_3
   
そこで、前腕を一段伸ばして45度の位置にしてみました。
これなら、僅かですが、前車輪より指が前に出てきます。
これで物理的には、置いてあるものを掴むことが出来るようになりました。Id01_90_08_2
    
◇CMOSカメラで物をつかむ
ロボットを見ながら物をつかませるより、どうせならCMOSカメラを使って、遠隔操作で物を掴んでみたいものです。
ところが、腕を下ろしていたのではCMOSカメラにはロボットハンドは写りません。
ここで、ID-01と、「PC Control」又は、「C.C」でBlueToothによるリンクをさせて、CMOSカメラでのモニタリングが可能な状態にしておきます。

◇ヘッドの調整
まず、ヘッドですが、チルトダウンさせて一番下を向かせます。
パンニングは、斜め右前を向かせます。

◇腕の調整
先ほどお話したように、前腕は45度に曲げておきます。
私の場合は、上腕部を一番上に振り上げたた状態で、CMOSカメラにロボットハンドが写りました。Id01_89_14
うまくCMOSカメラでモニター出来てしまえば、ID-01を移動させたり、方向転換させても、モニター画面上のロボットハンドの位置は変わりませんので、うまく掴めたかどうかの判断は行える筈です。

この辺りは、個々のID-01によって、微妙な差異があると思われますので、ヘッドのパン、チルトや、腕の上げ下げの状態を微調整してみてください。

今回はCMOSカメラで、ロボットハンドが見えるか・・・だけで終わってしまいました。
お次は、CMOSカメラの映像だけで実際にものを掴む事が出来るかをテストしようかと考えております。
ヘッドの位置は、真っ直ぐ前ではなく、右斜め前を見ていますので、それをどのように把握していくか・・・これからの研究課題です。
トライしたときにでも、レポートしようと思います。

■BlueTooth通信到達距離を伸ばすには
Bluetooth通信は、2.4GHzという極超短波帯を使用しており、電波とはいえ、どちらかというと光の性質に似てきます。
見通し距離であれば10m近く飛びますが、到達距離を伸ばすにはアンテナ(BluteToothアダプター)をなべく高い位置に持っていった方が効果的です。
お使いのPCも、デスクトップタイプや、ノートPCなど、様々であると思われますが、どちらをお使いの方にも有効な方法をご紹介しましょう。
パソコンのUSBコネクターから、USB延長ケーブル(5m)を繋ぎ、その先にBlueToothアダプターを繋ぎますと、かなり見晴らしの良い場所にアンテナを上げたのと同じ効果が得られます。
ただし、USBケーブルそのままでは5m位までしか延長がサポートされておりません。
私は20mまで延長できる、リピーター付きの5m延長ケーブルを使用しました。このケーブルを4本つなげば20mになり、プリンターを離して使用する事も可能です。
私は、PCのある部屋から、屋上までの引き出しをこのケーブルを利用しました。Id01_90_05
5m長のリピーター付きUSBケーブルとBTアダプター
(青く点灯しているのはリピーターの動作確認ランプ)


このリピーター付きのUSBケーブルは、リピーター無しのものとあまり値段は変わりませんので、ひとつ手元にあっても良いかもしれませんね。
上の2つがリピーター付きケーブルです

■素早い動きのR2D2
秋葉原へ出かけて立ち寄ったお店においてあったDEMO用のR2D2を見せてもい、すっかり気にいってしまいました。
アメリカHasbro社製、身長40cmのおもちゃのロボ君で、音声認識、超音波センサー、赤外線センサーが付いていて、どこかID-01と通じるものがあります。
ID-01はベーシックタイプ(1~75号)でも10万円以上する高価な自律型ロボットです。
おもちゃのロボットと比較するには無理がありますが、動きのレスポンスに関しては、このR2D2の方が良さそうにみえます。R2d2001
   
R2-D2 Interactive Astromech Droid

店員さんにスイッチを入れてもらうと、素早い動きで立ち上がります。ID-01のイニシャライズの動きになれた私にとって、この動きは新鮮でした。
しかも、映画そのままのピポパ音、首の回転や、物体回避の速さ、どれをとってもフレッシュです!
音声コマンドによって、音楽を鳴らしダンスを踊ってくれましたが、Hasbro社では、「対象年齢4歳から」となっているおもちゃですので、このような機能も必要なのでしょう。

ネイティブイングリッシュの発音しか受け付けない音声認識には、店員さんが大変苦労していました。
リストを見せてもらうと、40以上のコマンドがあるようです。R2d2_manual_2
    
正式名称は”R2-D2 Interactive Astromech Droid ”です。
2005年頃売り出されたおもちゃのようですが、画像でご覧の通りモデリングなど良く出来ています。「Star Wars30周年」とかで、このロボ君の再販が始まったとの記事をどこかで読みました。
調べてみると、アメリカでは130(129.99)$前後で販売されているようです。日本で手に入れるには、さらに海外の送料60ドル前後が掛かります。
日本でもオークションで、過去のモデルが25000~30000円くらいで取引されていました。日本の一部の通販会社では予約(12月、1月渡し)をとっているようです。
アメリカAmazonで調べてみると、少しと品薄のようで、入荷しては無くなって・・を繰り返していました。クリスマス時期だからでしょうか・・・R2d2002
       
ThinkGeek社」の通販Webサイトに、”R2D2”が紹介されており、動画を見る事が出来ます。ご覧になりたい方ここをクリックすると”YouToub”の動画を見ることができ、ジュースを運びながら、頭をあちこちに振りながら、ソナーセンサーで物体回避する様子がご覧になれます。
”YouToub”では、このロボ君の動画が他にもいくつもあるようですので、ご興味のある方はご覧になってみるのも良いかもしれませんね。
うまくいけば、来年1月頃には、我がID-01と2ショットの姿を見る事が出来るかもしれません。
(2007/11/25)

■あとがき
ついに最終回、90号がきました。
と、いっても、用意されたハードウェアが全部揃ったというだけで、ID-01というロボットが、完全に完成した事にはならないと思います。
ある意味では、「ロボットを作る」というカテゴリーからID-01という完成したロボットが誕生しました。
そして次は、「ロボットを動かす」という、ID-01の「成長、行動などをトライしてみる」カテゴリーが始まるのでは・・・と考えています。Id01_90_09
     
したがって、「皆様本当に長い間お疲れ様でした・・・」などという文面は、今回、書かない事にしました。
「ふみのへや(ロボットのまき)は、「ロボットを色々動かしてみよう」というカテゴリーにそって、暫くの間続けていく予定です。
ご興味のある方は、ときたま、当ブログを訪れてやってください。

| | コメント (24) | トラックバック (0)

より以前の記事一覧