ブログパーツUL5

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

                RZ-1の肩の軽量化は断念(回転角を変更)

                 脚の直交化に伴うモーションの見直しをしておりましたが、今までのモーションを整理をしながら全モーションの見直しがやっと完了しました。
                 次のテーマである肩のサーボを交換して軽量化を検討していましたが、こちらはRS306MDのギア欠けとトルク不足という問題があり、置換えによる軽量化は断念しました。
                U字型ブラケット再設定
                 そこで、肩のサーボは今まで前後に±90°の回転角でしたが、サーボはそのままで回転角をシフトして−45°〜135°になるようにU字型ブラケットを設定しなおしました。
                 但し、この変更を行なうとモーションプログラムの互換性が全くなくなります。また、ゼロポイントの調整がやりにくくなります。


                    前側の回転角の最大角135°         後側の回転角の最大角45°
                前の回転角後の回転角
                 これでまた全モーションを見直ししなければなりませんが、MOVEの値を45を引けばいいのでRS306MDの置換えて回転角を変更した場合よりも変更は簡単である。
                 問題点が2つ発生しました。1つはゼロポイント調整で肩のサーボだけやりにくくなる。もう1つは後転と仰向けの起上がりなどの後ろ側のモーションの大幅見直しが必要となる。
                (1)ゼロポイント調整では立ちポーズでの誤差を見ながら、数値を修正することとで対処できる。
                (2)後転と仰向けの起上がりのモーションでは、腕を外側に向ければ真後ろにできるので、脚のMOVEは余り変更せずに肩と腕のMOVEを見直して実現できる。
                以上の対策で、基本モーションのプログラムは修正できました。

                 回転角の設定で何が出来るようになったかは、これからモーションを考えます。例として、ナチス式敬礼ができるようになりますが、それだけではあまり意味はありません。
                0

                  RS306MDが早くもギア欠け

                   RZ-1の軽量化の改造に伴いすべてのモーションプログラムを修正していた時の出来事でした。ROBOZAKで提供されていた側転のモーションを修正していて、腕からカリカリと異様な音がしはじめて次第に脱力したようになってコントロールできなくぶらぶらになりました。側転のモーションはRZ-1の全重量が両腕にかかるので、負荷が非常に大きいためのようです。脚の直交化のRS306MDへの負荷はあまり大きくないようですが、こちらはネジが緩みやすいという問題がありそうです。

                  RS306MDのギア欠け 問題のRS306MDで発生した歯の欠けたギアは最終段ギアではなく、中間ギアの別の2つ(2回も発生)でした。HSR-9848HBでは最終段ギアだけが壊れやすい特徴がありましたが、ギアの材質の違いか負荷のかかり方の違いか壊れるギアの場所が違いました。壊れるギアはケーブルの長さの関係で肩の軽量化で利用しようとしたサーボのギアと交換して即日修理しました。ギアを入手するまでは肩の軽量化の検討とモーションの変更は中断せざるを得ない状況となりました。

                   写真は1回目の時のもので、ピンボケですが右側にあるのが、歯が欠けて壊れたギアです。2回目はその隣のギアでした。因みに一番大きなギアが最終段ギアでベアリングが上下に2つ入っています。

                   従って、RZ-1の腕に使用するRS306MDは金属ギアに交換しないと危ないということになります。それにしてもギアが小さいのにはびっくりで外形が小さいので当たり前といえば当たり前ですが、大きな負荷にはプラスチックギアのままでは弱いですね。RZ-1の腕のサーボを元のHSR-9848HBに戻して、肩の軽量化にRS306MDをまわすということも検討しています。思わぬところに伏兵がいて、とりあえず側転モーションは封印することになります。

                   ところで、ロボゼロでは大丈夫なのでしょうか?軽量だから大丈夫だと思っても過激なモーションは注意が必要でしょう。
                  0

                    RZ-1の肩の軽量化

                    試作ボディーにRS306MDを取り付ける RS306MD対応のU字型ブラケットを製作して、RZ-1の肩の部分を置き換えることを検討しています。試作したボディーフレームにRS306MDを取り付け、予備のマイコンボードも取り付けてテスト動作をさせて状況を見ています。サーボを置き換える前に動作方向をプログラムで指定するかRS306MDの設定で変えるかを決めて、設定後にゼロポイント調整で微妙なズレを合せ込みします。
                     roboBASICのMOVEで10〜190でサーボを動作させますが、RS306MDは回転角範囲が±144°と広くなるので、従来は±90°ですからどうしてもモーションの修正は必須となる。モーション用のシミュレータ(?)を製作して実際に動作させながら検討しています。
                    実際に回転角の確認 写真の左側が今までの角度で、右側はRS306MDに置き換えるとここまで上りる。今までのモーションではモータ6と12の回転だけでは、腕が真前か真後までしか行かず真上にはいきませんでした。しかし、置換えただけで斜め前まで上がるようになります。後側もムダにいくことが出来てしまいので、そのモーションとしては気持ち悪いものになります。さらに、プログラムの互換性はすでにあきらめているのだから、サーボホーンを45°前にずらしてセッティングすることも検討としてみる。

                     RS306MDのサーボホーンを45°ずらすと、roboBASICのMOVEの範囲で下記のような回転角になる。
                    190 →  190°(真上)
                    127 →   90°(前の中間) 
                     70 →    0°(真下)
                     10 → − 95°(後の中間)
                     この設定で検討すると、旧サーボのMOVE値による回転角を実現するために、RS306MDでのMOVE値の換算表を作成しないと全てのモーションプログラムを変更するのが大変そうである。
                    0


                      カレンダ

                        12345
                      6789101112
                      13141516171819
                      20212223242526
                      2728293031  
                      << May 2018 >>