ブログパーツUL5

VS-C1(PS2コントローラ互換)対応のモーションプログラム作成

 本格的にモーションプログラムを組む前に、VS-C1(PS2コントローラ互換)対応は初めてなので、2つだけ動作テストの確認をしておく必要がありました。
・同時に2つのキーを押して、シフトキー機能が有効に動作するか
・ジョイスティックのアナログ値を活用してサーボをコントロールできるか
この2項目が確認できれば、今までと同じようにプログラムが組めます。

(1)シフトキーの実現
 ・L1、R1、L2、R2、L3、R3、SELECTはシフトキーに設定
 ・コマンド[A]とコマンド[B]で同時に送信して、データを取得
 ・但し、シフトキーを優先するので、コマンド[B]を先に実行
(2)ジョイスティックによるアナログコントロール
 ・上記のシフトキーを押して、ジョイスティックのアナログ値を取得する
 ・10〜190と56〜120の2種類の範囲を選択して取得する
 ・X方向、Y方向が操作感覚と合うように調整する
 ・各方向と範囲別にコマンドを送信してアナログ値を取得する

 頭を回すために首のサーボをジョイスティックでコントロールできるようになったプログラムの例です。さすがに、赤外線リモコンではできない動作ですね。同じようにして上半身のサーボはすべてコントロールできるようにできますが、操作は慣れるまではかなり難しいですよ。腕が本体に引っかかるトラブルにならないように、IF文で制限しておいた方が得策でしょう。

'------ Sample(SELECT Key) ------
key70:
' Round head motion
'---- LCD Display ----
PRINT 12 'CLS
PRINT "Select (Key70)"
PRINT 13 'CR
PRINT 10 'LF
'--

PRINT "RX="
TXD ="C"
ETX 19200, TXD
GETC_4:
ERX 19200, RXD, GETC_4
PRINT FORMAT(RXD,DEC,3)
A = RXD

SERVO 10,A ; Servo of neck

WAIT
GOTO MAIN
'--------------------------

SELECTキーを押しながら操作するので、右側のジョイスティックのX方向のみを使って、アナログ値を取得します。アナログ値はMR-C3024用にした10〜190の値なので、そのままservoの変数で動かすことができます。なお、動作確認のLCD表示用のPRINT文がありますが、LCDがなくても無視されます。
0

    フロントカバーの再製作

     PS2ワイヤレスコントローラのインターフェイス基板もできたので、VS-C1の受信モジュールをRZ-1本体に搭載しなければなりません。いろいろ検討した結果、重心のバランスから考えてフロント側に格納することにしました。しかし、フロント側にはLCDがあるため、その後ろ側に受信モジュールをいれらるように10mmほどフロントカバーを前側に大きくすることにしました。
     すでに、フロント側にはいろいろなモジュールがあるので、再配置を考える。
    ・無線受信モジュールをフロントカバー内に格納
    ・加速度センサーはMR-C3024ボードの裏側の穴に移動
    ・増設EEPROMと切り替えSWは左側から右側に移動
    ・赤外線測距モジュールはモールドが欠けるのでカバー内に格納
    ・音声認識モジュールを移動
    ・通信の切替えスイッチの流用
    など全面的に考えました。最大の難題は音声認識モジュールでした。
    フロントカバー切出し
     ここまで確認してからフロントカバーの製作に取り組むが、フロントカバーの製作はモジュールが変更になる毎にやっているので今度で4回目になる。まだ課題があり、インターフェイス回路基板と受信音声認識モジュールのどちらをフロントに取りつけるか配置がきまらない。

    基板を配置 結局、音声認識モジュールはバックカバーに格納しましたが、その格納方法も悩みましたが、無事解決して通信の切替えスイッチも流用して、音声認識と無線コントロールとを切り替えられるようにしました。

     そこで、赤外距測モジュールはフロントカバー内に入れて、出っ張りを無くしてクッション材も取り去り、マイクも隠して、フロントはすっきりさせました。

     いろいろなトラブルも発生して、補修しながらやっと今回の改造が完了しました。テストプログラムで無線コントローラが正常に動作するかテストしてほっとしたところです。それにしても、最近の車ようにRZ-1の内部が配線だらけになっています。受信モジュールを横に配置しており、そのモジュールのペアリング確認LEDとリセットボタンがそのまま見えているので、ペアリングの確認と操作ができます。
    今回の改造完成
     今後は、無線コントローラ用のモーションプログラムを作成していきます。
    0

      PS2ワイヤレスコントローラ対応の試作(6)

      試作基板と搭載基板 アナログモードのバグの修正もできたので、RZ-1本体の搭載用基板を製作しました。コントローラ系の回路が接触不良を起こすと思わぬトラブルになりますので、コネクタはしっかりしたものにしました。シフト回路も追加したことも加わり、試作回路基板より一回り大きくなりました。

       写真の左側が搭載基板と右側が試作基板

      搭載基板とケーブル PS2コネクタとのケーブルとMR-C3024とのケーブルを新規に作成したものを使う予定です。

       写真の左側がPS2コネクタとのケーブル、中央が搭載基板、右側がMR-C3024とのケーブル


       VS-C1(PSワイヤレスコントローラ)とMR-C3024のインターフェイス回路に使用した16F688のHEXファイルをダウンロードできるようにしておきます。シフト回路で論理反転しなければ、PICライターで書込んでそのまま利用できます。

       PS2_2.HEX

       製作した搭載用のインターフェイス基板はバックカバーの中に余裕で格納できますが、VS-C1の受信モジュールはどうしてもバックパネルの外に取り付けるしかない。他にもいろいろな搭載の可能性を検討しており、どのようにしてRZ-1の本体に搭載するかが難しい。
       フロントのLCDを諦めればすぐ解決するのですが、ここまで来るとなかなかLCDは便利ではずせない。フロントカバーを交換して搭載することも案として検討しています。また、VS-C1の受信モジュールのカバーを取ることも案としてありますが、これもVS-C1の流用を考えると余りやりたくない。思案中で悩んでいます。
      0

        PS2ワイヤレスコントローラ対応の試作(5)

        不要なコネクタを切断  RZ-1本体にどのように搭載するかの検討に入ります。試作ではインターフェイス回路基板とPS2コネクタを直結しましたが、どうも使いにくそうなので分離する方が良さそうなでケーブルを自作しました。コネクタ部分には不要になっていたコネクタ部分をカッターナイフで端から15mmのところで切断しました。内部のストッパーが外れて、きれいに取れ、樹脂も意外と軟くカッターナイフで何回も筋を入れると切れます。

        配線したケーブル しかし、ケーブルは流用しようとしましたが、圧着用なので半田付けには耐えられずすぐに断線するので、諦めて手持ちの半田耐熱の配線で作りました。基板側は新規に2.54mmピッチのコネクタにして、圧着ピンで処理して作ります。VS-C1接続用コネクタの両脇のプラスチックを少し削って、先ほど切ったコネクタカバーの中に入るようにして接続部の保護用に被せます。以外とフィットして小型で見栄えもいいものに出来上がりました。


         VS-C1(PS2コントローラ互換)のコネクタのピン配置
        VS-C1(PS2コネクタ)

        Pin 1 = DAT(オープンコレクタ)
        Pin 2 = CMD
        Pin 3 = −−
        Pin 4 = GND
        Pin 5 = +3.6V(+3.3V)
        Pin 6 = SEL
        Pin 7 = CLK
        Pin 8 = −−
        Pin 9 = ACK(オープンコレクタ)
        但し、インターフェイス側はPICマイコンとの配線がやり易いように入れ替えています。

         搭載用の本番の回路基板には3.3V/5Vのシフト回路を追加するのと、取り外しできても接続部は外れると困るのでコネクタにするため、一回り大きな基板になります。これでサイズが決まったので、RZ-1の格納場所を探すことになります。これが難関のようです。

        0

          PS2ワイヤレスコントローラ対応の試作(4)

           MR-C3024からVS-C1に送信するコマンドキャラクタは次の一覧表のようになっています。海外のHiTEC社のワイヤレスコントローラに準拠していますが、コマンドキャラクターは主に大文字にしており、小文字はサブセット的にしています。また、アナログ値はすべてRZ-1用に変換してMR-C3024に送信するので、roboBAISCで計算しないため反応は良くなるはずです。なお、「V」のバイブレータの許可/禁止にはまだ対応していませんが、RZ-1のコントロールには関係ないので当分はこのままでいいでしょう。
            アナログモードでの動作にはまだバグが残っているようで、PS2ワイヤレスコントローラと互換性はあると思いますが、機種ごとに違いがあります。

          【追記】
           VS-C1のバイブレータの許可/禁止が動作するようになりましたので、一覧表を修正しました。VS-C1のバイブレーションは短時間しか動作しませんから、「V」のバイブレータの許可だけで十分です。禁止の方は使うことはないでしょう。なお、動作モードはAnalogモードとDegitalモードは推奨しないで、起動時には必ずDSモードにすることにしました。

           VコントローラVS-C1のコントロールコマンド一覧表(修正版)
          キャラクタコマンド一覧表
          【使用方法】
           受信モジュールのインターフェイス回路をMR-C3024のETXとERXに繋いで、19200bpsで通信ができるようにします。左側のコマンドキャラクタをMR-C3024に送ると、それに対応したワイヤレスコントローラのキー情報が送られてきます。

           通信するroboBASICのプログラム例は次のようになります。押されたキーをサーチしてRZ-1の各動作への飛び先を指示します。
          (プログラム例1)
          '−−−−−−sample1−−−−−−
          txchar ="X"
          ETX 19200, txchar
          GETX:
          ERX 19200, rxchar, GETX
          IF rxchar > 0 AND rxchar < 17 THEN
          ON rxchar GOTO MAIN,K1,K2,K3,K4,K5,K6,K7,K8,K9,K10,K11,K12,K13,K14,K15,K16
          ENDIF
          '−−−−−−−−−−−−−−
          0

            PS2ワイヤレスコントローラ対応の試作(3)

             前回まで試作回路は5Vでマイコのデバッグをしていましたが、PS2ワイヤレスコントローラの受信モジュール対応にするために電源電圧を3.3Vへ変更します。当初はPS2コネクタで抵抗分割で簡易的にしようとも思いましたが、受信モジュールが壊れては困るので、マイコンを含めインターフェイス回路の電源電圧を3.3Vに変更します。
             三端子電源に3.6Vはないので48M033FというICで3.3Vにします。16F688は3.3Vでも8MHzの内部発振が出来きるので、何も変更しなくて済み、かつ通信速度も19200bpsに設定できますが、MR-C3024は5V動作なので通信する端子のRXとTXが問題となります。インターフェイス回路の受信側は抵抗分割で5Vを3.3V対応に出来ますが、送信側はそのままではMR-C3024が受信することが出来ませんでした。やはり、電圧ののシフト回路を入れなければならないので、Blutoothモジュールの時に検討した回路を挿入することにしました。専用のシフト回路のICでもいいのですが、有り合わせの部品で製作することにしました。

             下図は試作した3.3V電源に対応した回路
            3.3Vに変更した回路
             この回路をブレッドボードに組んで動作テストしてみたところ、最初は配線ミスして動かないので心配しましたが、正しく配線してうまく動作しました。序に、VS-C1のテストもしてみました。初めて電源を入れるので緊張の一瞬でしたが、ペアリングの完了した後にMR-C3024との接続も完了して基本動作の動くことも確認できました。

             VS-C1を繋いで動作テスト
            VS-C1のテスト
             16F688とMR-C3024との通信は19200bpsで行なっていますので、赤外線操作などの他の通信操作よりも操作感覚は向上するのではないでしょうか。
            VS-C1のテスト1 押されたキーを検出して、MR-C3024に通信できています。この基本動作ができるだけでも、かなりの動作を操作することが出来ます。
             写真では+字キーのLeftを押して、コード受取ってMR-C3024のテストプログラムでLCDに押されたキーが「left button」と表示しています。

            VS-C1のテスト2 DS2モードにして、押されたキーの圧力を検出できるので、その値を0〜15に変化するように変換しています。他のモードでは固定値となるのでモーションを作成する時には注意が必要です。
             左の写真では、L2のキーを押して、その圧力値が07であることがMR-C3024に送られています。

            VS-C1のテスト3 アナログモードにして、左右のジョイスティックのアナログ値を読み込んで、MR-C3024に通信できています。ここでは、アナログ値を00h〜FFhではなくMR-C3024用というかRZ-1に使用しているサーボに適した値になるように変換しますが、送信するコマンドキャラクタの大文字/小文字でサーボ全域の10〜190か狭い範囲(ハンドの範囲を想定)の58〜120になるように16F688で変換してMR-C3024に送信しています。

              VS-C1でROBOZAK(ROBONOVA)を操作可能に

             MR-C3024からVS-C1のバイブレーションを動作させることが出来ないこと以外はほぼ問題なく動作していることが確認できた。ここまでくれば万々歳で、残る課題はRZ-1にどのように搭載するかを決めて、正式な搭載基板を製作すればいいことになります。バックカバーの中に入れたいが、可能かどうかである。
            0

              PS2ワイヤレスコントローラ対応の試作(2)

              試作したI/F回路 PS2コントローラのインターフェイス回路を試作して、PICマイコンの16F688にプログラムを書き込んでいろいろテストしています。PIC用マイコンのライター(ソフトはPICProg4U)が16F688に対応しているか不明であり、書き込みの実績がなかったので、実績のある16F628もコンパイルしてどちらでも試作できるように準備しました。 結果的には16F688に書き込めたので、14pinと小型なので16F688に決めました。16F688は安く秋月電子で購入でき、テスト用と搭載用に2個購入しました。

               RZ-1に搭載する方法を考えると、PS2コネクタに直接インタフェイス基板を取付けるのは搭載が難しくなるので、試作基板はここままでいいですが、RZ-1に搭載する方法も検討しておく必要があります。フロント側にはLCD表示があるので、スペースがなくバックカバーに搭載するしかないないようです。

               デバッグは手元にある中古のPS2コントローラを活用しています。有線のコントローラなので、下図のような試作回路回路で3,3Vの電源は使わず5V電源電圧に変更しています。
              試作した回路
              PS2コントローラのテスト
               PICマイコンの書込んだプログラムの動作確認やデバッグをするために、MR-C3024にはroboBASICでPS2コントローラ用のテスト評価プログラムを作成しました。一応、基本動作について有線のPS2コントローラで動作確認ができましたので、参考に掲載しました。プログラムソースが長いので、「続きを読む>>」を見てください。

               但し、PICマイコンにどのようにプログラミングしたかで変り、マイコンの動作に依存していますので、汎用性はまったくありませんので、ご注意ください。アナログモードではコントローラにも依存するようで、キーを押した圧力度データがとれる場合ととれない場合があります。
              0

                PS2ワイヤレスコントローラ対応の試作(1)

                 まず、ロボットに適した通信方式をいろいろ調べていましたが、やはり、反応の良さでは2.4GHzのPS2ワイヤレスコントローラが一番のようです。また、世界中のホビーロボットだけでなく、移動する産業用ロボットでもPS2ワイヤレスコントローラを採用している例も多く、2.4GHzのPS2ワイヤレスコントローラ(互換機も含め)にしていれば、今後のロボット操作に統一性や一貫性を持たせることが出来ます。なお、反応の良さは搬送波だけでなく、MR-C3024との通信速度が19200bpsというのも効いているかもしれません。

                 インターネントでいろいろと調べていたら、Robonova用の 2.4Ghz Wireless PS2 Controllerというのを海外では発売されているのがわかりました。なぜ、日本では発売しないのでしょうかね。発売されていたら、今度は即購入していたのに残念です。海外のインタネットショッピングはトラブル時の対応を考えると手を出しにくい。でも海外に友達がいたら購入してもらって、送ってもらうのもいいですね。

                Robonova 2.4Ghz Wireless PS2 Controller (HITEC社)
                Robonova 2.4Ghz Wireless PS2 Controller
                下記のような説明書はありました。
                http://www.active-robots.com/products/robonova/accessories/Anleitung_136080.pdf
                また、ワイヤレス用のテンプレートもありました。参考にはなりますが、肝心のインターフェイスの情報は少ないですね。

                 一応、コード変換は同じようにしようと思いますが、バイブレータは当分の間はペンデングとする。説明書を見るとPS2コントローラのキーの検出がbit単位で見るのでわかりにくいように思えます。

                VS-C1とその接続コネクタ 日本のHITEC社ではPS2コントローラを発売していないので、そんなこんなで,受信モジュールの小ささとロボット専用という響に惹かれて、VS-C1とその接続コネクタを衝動買いしてしまいました。

                 さて、これからどうする、どうなるのか無駄にならないように真剣に取り組まなければまらないことになりました。
                 
                0

                  ワイヤレスコントローラの検討

                   ROBOZAKが発売されていた当時には、PS2ワイヤレスコントローラでRZ-1を操縦できるキットが発売されていましたが、すぐに完売してもう購入できません。当時は受信モジュールが大きく購入を躊躇っていたので、購入するタイミングを失ってしまいました。PS2本体もすでに発売中止となっているので、いつまでPS2ワイヤレスコントローラが入手できるのかちょっと心配で、そのうち入手できなくなるのでしょう。
                  VS-1C
                   PS2ワイヤレスコントローラはオークションを覗くとコピー品が安く購入できるようです。しかし、受信モジュールが大きく、コピー品を購入するのはどうも気が引けます。
                   また、ヴィストン株式会社からロボット専用コントローラーとしてVS−C1というのを発売しており、基本機能はPS2ワイヤレスコントローラのようなので、現在はこれをROBOSHOPや秋月電子などで購入することができる。


                      写真はVS−C1(秋月電子より引用)

                   RZ-1の改造とモーションプログラムの変更もひと段落したこともあり、以前のPS2ワイヤレスコントローラについてインターネットでいろいろ調べてみました。PS2コントローラ解析の情報はあるのですが、ROBONOVAやROBOZAKなどのMR-C3024マイコンボードに対応した情報が極端に少なくなります。受信側のモジュールは当然RZ-1本体に搭載するので小型で軽量なことが最大の要求事項で、以前に紹介した「赤外線通信とZigBee通信でロボット操縦ができる」のようにセットになっているものありますが、搭載実績がすくないようです。操作面ではPS2タイプで決まりですが、2.4GHz無線、Bluetooth、ZigBeeなどの通信方式も含め、通信データやその変換方法をどうするか総合評価が必要です。

                   VS-C1は対応マイコンボードが決まっており、Robovie-X/X Lite、Robovie-i、RB2000、RB300などのVS-RC003/HV搭載ロボットと、Hotproceed社開発の「REV-1(レボ-ワン)」で近藤科学社製の「RCB-3」「RCB-3J」などのマイコンボードでご利用できるだけです。残念ながら、MR-C3024のマイコンボードには対応するアダプタがありません。どうも出来合いのキットは、購入してもうまくいかない場合や改良したくてもできないことが不満です。

                   そこで、今回、勉強を兼ねてアダプタを自作してみようと思案しており、やはりデータ変換をするのは使い慣れたPICマイコンで製作したいと考えています。UARTを内蔵している16F688か16F628Aを使用して、元プログラムを参考にMR-C3024用プログラムとして改良できるようにしておくつもりです。
                  0

                    腕と肩の運動モーション

                     腕と肩のサーボのテスト用にちょっとおもしろモーションプログラムを作成してみました。RZ-1がこの腕と肩の運動モーションをしているのを見ながら、自分も真似てやって運動するのもいいかも知れません(脳の活性化にもなる)。難易度がレベル1からレベル3まで連続して変化します。このモーションは初心者でも簡単に作成できますので、チャレンジしてみてください。

                    上半身だけの動作(下半身はポーズに事前に設定)
                    レベル1:左右の腕を別々に下、横、上を繰返す。
                    レベル2:左右の腕を別々に下、横、上、前を繰返す。
                    レベル3:レベル2の動作に、首を左右に、手の動作を加える。

                    *肩のサーボは通常位置に戻してあります。

                    '=======================================================
                    taisou:
                    MOVE G6B, 100, 30, 85,100 , , ,
                    MOVE G6C, 100, 30, 85,100 , , ,
                    SPEED 10
                    HIGHSPEED SETON
                    '-- levei-1
                    FOR i=0 TO 3
                    MOVE G6B, 100, 30, 85, , , ,
                    MOVE G6C, 100, 30, 85, , , ,
                    DELAY 500
                    MOVE G6B, 100, 100, 100, , , ,
                    MOVE G6C, 100, 30, 85, , , ,
                    DELAY 500
                    MOVE G6B, 100, 170, 110, , , ,
                    MOVE G6C, 100, 100, 100, , , ,
                    DELAY 500
                    MOVE G6B, 100, 100, 100, , , ,
                    MOVE G6C, 100, 170, 110, , , ,
                    DELAY 500
                    MOVE G6B, 100, 30, 85, , , ,
                    MOVE G6C, 100, 100, 100, , , ,
                    DELAY 500
                    NEXT i
                    '-- level-2
                    FOR i=0 TO 1
                    MOVE G6B, 100, 30, 85, , , ,
                    MOVE G6C, 100, 30, 85, , , ,
                    DELAY 500
                    MOVE G6B, 100, 100, 100, , , ,
                    MOVE G6C, 185, 30, 85, , , ,
                    DELAY 500
                    MOVE G6B, 100, 170, 110, , , ,
                    MOVE G6C, 100, 100, 100, , , ,
                    DELAY 500
                    MOVE G6B, 100, 30, 85, , , ,
                    MOVE G6C, 100, 170, 110, , , ,
                    DELAY 500
                    MOVE G6B, 100, 170, 110, , , ,
                    MOVE G6C, 100, 100, 100, , , ,
                    DELAY 500
                    MOVE G6B, 185, 30, 85, , , ,
                    MOVE G6C, 100, 100, 100, , , ,
                    DELAY 500
                    MOVE G6B, 100, 100, 100, , , ,
                    MOVE G6C, 100, 170, 110, , , ,
                    DELAY 500
                    MOVE G6B, 100, 170, 110, , , ,
                    MOVE G6C, 100, 30, 85, , , ,
                    DELAY 500
                    MOVE G6B, 100, 100, 100, , , ,
                    MOVE G6C, 100, 170, 110, , , ,
                    DELAY 500
                    NEXT i
                    '-- level-3
                    FOR i=0 TO 1
                    MOVE G6B, 100, 30, 85,115, , ,
                    MOVE G6C, 100, 30, 85,115, , ,
                    DELAY 500
                    MOVE G6B, 100, 100, 100, 60, , ,
                    MOVE G6C, 185, 30, 85,110, , ,
                    DELAY 500
                    MOVE G6B, 100, 170, 110,110, 60, ,
                    MOVE G6C, 100, 100, 100, 60, , ,
                    DELAY 500
                    MOVE G6B, 100, 30, 85,115,100, ,
                    MOVE G6C, 100, 170, 110,110, , ,
                    DELAY 500
                    MOVE G6B, 100, 170, 110,110, , ,
                    MOVE G6C, 100, 100, 100, 60, , ,
                    DELAY 500
                    MOVE G6B, 185, 30, 85,115, , ,
                    MOVE G6C, 100, 100, 100, 60, , ,
                    DELAY 500
                    MOVE G6B, 100, 100, 100, 60,140, ,
                    MOVE G6C, 100, 170, 110,110, , ,
                    DELAY 500
                    MOVE G6B, 100, 170, 110,110,100, ,
                    MOVE G6C, 100, 30, 85,115, , ,
                    DELAY 500
                    MOVE G6B, 100, 100, 100, 60, , ,
                    MOVE G6C, 100, 170, 110,110, , ,
                    DELAY 500
                    NEXT i
                    HIGHSPEED SETOFF
                    MOVE G6B, 100, 30, 85,100 , , ,
                    MOVE G6C, 100, 30, 85,100 , , ,
                    RETURN
                    '=======================================================
                    0

                      1

                      カレンダ

                         1234
                      567891011
                      12131415161718
                      19202122232425
                      2627282930  
                      << June 2011 >>