第9回 ジャイロ大実験 その2 ジャイロでブランコ

 皆様、大変お待たせしました。今回のテーマは、「ブランコをジャイロで動かしてみましょう。」です。

ブランコは、一次元の運動なので、「動きの特性を習得するのに最適!」などと気楽なことをご紹介させていただきました。しかし、どうして、どうして、『たかがフランコ、されどフランコ!』 といった感じで、クマゲラの狙いは大いに外れ、長いことジャイロの迷宮をさまよってしまいました。もう~「クマゲラの限界」って感じでした。そして、やっとのことで、皆様にご紹介できるところまでたどり着きましたので、その結果をご紹介させて頂きたいと思います。

皆様のご期待に添えるようなスマートな結果をご紹介できる訳ではないですが、お時間がありましたら、覗いてやって下さい。

今回は、どうやらクマゲラの理解の限界を超えているようで、「うまくできない!」 「思ったように動かない!」 「なんでこうなるの?」 「これはどうかんがえたらいいの?」みたいな事象が続出してしまいました。、
なんとかクマゲラ流の独断と偏見と試行錯誤でくぐり抜け、結論づけてみました。多分に、予測はずれや、理解に苦しむような結果もあるかも知れませんが、それらも事実としてそれなりに掲載させて頂きました。

これらについては、それなりな見方で見て頂き、「それは違うよ」 「このように解釈するといいよ」など、ご意見をいただけると嬉しいです。

∞……∞……∞……∞……∞……∞……∞……∞……∞

今回は、コウヘイ君の大好きなブランコを、今までのブランコ、そして、このロジックの一部をジャイロに置き換えたブランコ、またこれをベースに発展させた方法によるプランコに挑戦してみました。



◆従来のブランコ


コウヘイ君の従来のブランコのプログラムをリスト9に載せました。第8回のクリスマスブレゼントで行った空中ブランコで用いたブログラムとほぼ同じものです。

 

◇ブランコのブログラムの基本的な考え方


コウヘイ君のプログラムも、第2回で『モーションは、[姿勢]と[時間]で構成されている。』とご紹介させて頂いたように、姿勢としての[振り]の動作と、時間としての[待ち]の状態で構成されています。

この姿勢と時間は、[前振り]と[前待ち]、[後振り]と[後待ち]で構成しました。
図をクリック下さい。図が拡大表示されます。
 

振りの動作を[振り]と[待ち]に分けて考えたのは、第2回でご紹介した[姿勢]と[時間]に分けるという考えに加え、「振りに勢いを付けて慣性力を大きくするために短時間で動作させ、残りの時間は、その姿勢を保持させる。」という考えによるものです。

この方法は、次にご紹介するジャイロを使用したブランコを行うにあたり、ジャイロの値を監視し、状態の変化に合わせて姿勢を対応するための時間が必要になる。という事情があります。[振り]の動作中は一つのコマンドMOVE関数の動作中であるため、この動作中に、ジャイロを用いた調整を行わせることはできません。

そこで、[振り]以外の、もう一つの動作である[待ち]の状態の時に、ジャイロを用いた制御を行うことにしました。[待ち]の状態の時はその姿勢を保持している状態なので、ジャイロを監視し、動作を制御させるには好都合でした。
図をクリック下さい。図が拡大表示されます。


 このブログラムの一部を以下に示します。

リスト9のブランコの漕ぎの部分のプログラム
 
図をクリック下さい。拡大表示されます。

◇ブランコの軌跡


従来のブランコ(リスト9)のログから、ブランコの値の変化をグラフにしてみました。

図における赤線は、[前振り(後ろから前への振り)]の動きで、ジャイロの値が低い値がら高い値への変化を表し、姿勢は後ろへの傾きを示しています。 また、赤点線は、[前待ち(足を前に出したまま保持)]の動きで、ジャイロの値か高い値から、低い値への変化を表し、姿勢は前への傾きを示しています。

この赤点線が、上から下へ急激な変化をしていたことは、ホント~!って感じです。グラフにしてみないと分からなかった現象です。

同様に、青線は、[後振り]、青点線は、[後待ち]の状態を表しています。

図において、赤線の開始から次の赤線の開始までが1周期ですが、その中に青の点線の山が一つ表れています。つまり、赤点線の開始から、青点線の終りまでが、もう一つの周期になって表れています。この2つ目の山は、前回の自由振り子の時にはありませんでした。ということは、ブランコで漕いた結果、現れた、ということでしょうか。 これは何を意味するのでしょうか? 

これは、ブランコから見た時には、赤線の開始から次の赤線の開始までが『一つの周期』となっていますが、ジャイロから見た時には、『一つの期間にもうひとつの周期(揺れ)』が起きているという事実であることを物語っているのかも知れません。

そこで、このブランコの動きをスローで再現してみました。(動画を参照下さい。)動画では、[前振り]の終りと[後振り]の直後に、細かく、しかも強く振れており、揺れ戻しが起きていることが分かります。この揺れ戻しの短く強い触れをジャイロが拾っていると考えるのが妥当かもしれません。

しかしこのように考えるのであれば、この揺れが2つ現われなくてはならないような気もします。

または、赤線で[前振り]した後、赤点線の[前待ち]のときに、揺れ戻しを記録し、青線で[後振り]を行い、青点線の[後待ち]でこの揺れ戻しが起きているのかもしれません。しかし揺れ戻しであれば、上下が逆方向に現われると思うのですが、青も同方向に振れています。(逆方向に振れているものもありますが・・・)

ここの動きについては、もう少し高度な頭脳での解釈(解析)が必要なのかも知れません。

図をクリック下さい。拡大表示されます。

図の下の部分に表示されいる水色のMODEは、[振り]の状態を表しています。MODEの1が[前振り]、3が[前待ち]、6が[後振り]、8が[後待ち]の状態です。プログラムで用いている21000や23000などの数値の千の位の値を加工して表示させています。(リスト10,11のV37の値)

また、[前振り]の前後に、「ピッ」、[後振り]の前後に、「ビッ」とBEEP音を発生させ、動作とプログラムの同期が運転中に目視と音により確認できるようにしました。(第8回の音による可視化処理です。) 
これにより、目視と音で、ブランコの状態と動作、プログラムの関係の確認を取ります。また、上記のグラフにより、プログラムとジャイロの値の関係についての確認が取れます。この2つの結果からブランコの状態とジャイロの値の関係が明らかにすることが狙いでした。
しかし、予測に反して、ジャイロの値が反対方向に動いたり、思わぬ周期の小さい山が現れたりして、当惑しているクマゲラです。

また、動画の編集により画像と音声のズレが生じてしまいました。動画の音ずれの修正に挑戦しましたが、クマゲラには音ずれの修復はできませんでした。その結果、今回の動画では、[振り]の状態とプログラムの同期の音による状態の確認ができません。悪しからずご了承下さい。(編集前の状態では、音ずれは起きていませんので確認は取れています。)

◇周期の設定


ブランコを実現させめための最も基本的な要素は、ブランコの周期です。ブランコの振りの周期がブランコの持つ固有の周期に合わないとその場でフリフリしているだけで、ブランコは動き出しません。

子供の頃、ブランコに乗るとまず行う動作は、「漕ぐ」ことでした。ブランコの揺れに合わせて、漕ぐごとでした。この漕ぐという動作は、ブランコの固有の周期に合わせるように漕ぐという動作を行うことでした。
ジャイロを使い、「なんとかブランコの周期に合わせて漕ぐためにはどのように考えれば(動作すれば)良いか?」が今回のテーマです。しかし、ジャイロを搭載していない従来の状態のコウヘイ君は、自分の状態の把握ができないので、ブランコの周期に合わせて漕ぐことはできませんでした。そこで、タイマでブランコの固有の周期に合わせて漕ぐことでブランコの動きを実現していました。

このブランコで用いるタイマ値の作成は、実際にコウヘイ君をプランコに乗せた状態で、10回の往復運動の時間を測定し、その値をプログラムで設定することから始めます。

今回のコウヘイ君の揺れの周期は、10回で約16秒(ブランコの長さ約66cm)でした。従って、1回の周期が1.6秒、片道が0.8秒の値が最適な値ということになります。ここから、プログラム内での動作する時間のパラメータは、1920が最適値、つまりMOVE変数の第25の動作時間のパラメータは、[振り](V26)と[待ち](V27)合わせて0.8秒(1900)前後のところに、このプランコの周期の最適な値があるということになります。

[MOVE変数の第25パラメータの合計の値]=([10回の合計時間]/(10秒×2回))×2400
V26+V27=(16/(10×2))×2,400≒1900

この1900はあくまで理論値なので、この値を目安として、実際にブランコを漕ぎ(漕がし)ながら、最適な値を探していきます。その結果、コウヘイ君の場合には、実験的に、[前振り]はV26=800、[待ち]はV27=800が最適な値(V26+V27=1,600)としました。
上記で求めた1900と実際に動作して求めた1,600の違いについては、ログ記録の処理が時間的に影響しているのだろうと勝手に解釈しています。

この時のコウヘイ君のプログラムの条件は、音による可視化処理(CALL(BEEP_FRONT))がコメントの状態で行いました。 (下記の ◇可視化処理を無効にしたときのブランコ の項を参照下さい)


音による可視化処理を有効にした場合には、、V26=800、V27=350)となりました。この可視化処理を有効にした時のV26=800、V27=350の値が、今回のジャイロによるブランコ大実験のプログラム上で基準とする値として使いました。

リスト9の初期設定の値
図をクリック下さい。拡大表示されます。

◇可視化処理を無効にしたときのブランコ


可視化処理を無効にした時のブランコのジャイログラブを示します。このときのブランコ周期のタイマの条件は、V26=800、V27=800です。ブランコの振りは、可視化処理を有効にしたときにくらべ、スムーズに動いていると思えました。V27の値が大きくなったことで、青線の[後振り]の速度が遅くなり、その結果、青点線の[後待ち]の急な上りがなくなり、これが安定した動きに貢献したのがもしれません。.

 
 
 それにしても、青線の[後振り]も低い位置から高い位置への動きは、赤点線の高い位置から低い位置への動きとともに、どうも理解に苦しむクマゲラです。
 

◇タイマによる終了の処理

今回は、ブランコの終了を時間で指定するようにしました。変数V40に20をセットすると起動してから20秒後に終了処理に入ります。
タイマによる終了の処理

図をクリック下さい。拡大表示されます。

 ◇終了時の脱力処理

ちよっと話が反れますが、コウヘイ君のサーボなんですが、だいぶ無理が祟ったようで、長く通電していると熱くなって、力が抜けたような状態になるようになってしまいました。(まだ右肩だけですが・・・)。原因も対策もよく分からないのですが、皆さんのロボゼロ君はいかがでしょうか?

 そこで、一回一回の動作の終了後や、調整中の時など動作をしないときには脱力させることにしました。
 今までのコウヘイ君は、動作を終了した時には、そのままの状態で(通電状態)で停止していました。このとき、脱力の処理をすることで、すべてのサーボが脱力の状態になり、プラデラの状態になります。
 この状態では、電流がほとんど流れていない状態となり、サーボが熱くなることもなくまります。 また、この状態は思わぬ効果がありました。脱力の状態にするとバッテリーが意外にも長もちしました。

 コウヘイ君は、エネループですが、この脱力処理を追加してからは、エネループの交換回数が格段に減りました。   そもそもロボゼロ君はバッテリーでの稼働時間が短いので、パラメータを変えながらテストを繰り返すような使い方や、休止時間が長い使い方をさけている方には、バッテリーでの稼働時間を伸ばす意味で有効ではないかと思います。

 バッテリーでの稼働時間が短いのにお悩みの方は、試したらいかがでしょうか? このコウヘイ君の脱力処理は、各プログラムリストの最後の終了処理に記載されています。
   
終了時の脱力の処理
図をクリック下さい。拡大表示されます。

◆ジャイロによる[待ち]の制御

いよいよお待ちかね、ジャイロを用いた制御のご紹介です。 ジャイロによる[待ち]の制御によるプログラムをリスト10に載せました。リスト10では、リスト9の[待ち]の部分をタイマでの処理に代わり、(簡単なロジックですが)ジャイロを使って自分の状態を監視させ、判断させる処理を実装しました(図の赤点線、青点線の部分です。)
図をクリック下さい。拡大表示されます。
 
このブログラムの一部を以下に示します。

図をクリック下さい。拡大表示されます。  

このブログラムによるジャイロの値の様子を以下に示します。 ここでもやはり、メインの周期の中に振幅の小さい周期を現れています。

また、[前振り](赤色)、[後ろ振り](青色)ともに、同じ方向を向いていることは、予想外でした。予想としては、[前振り]は上方向、[後振り]は下方向にふれるハズでした。 これも、どのように解釈したらよいか、理解に苦しみます。 単なるタイミングの問題なのかも知れませんが・・・・。
     
図をクリック下さい。拡大表示されます。
 

◆シャイロによる[前後・待ち]の制御

ジャイロによる[前後・待ち]の制御によるプログラムをリスト11に載せました。 リスト9、10では、前、後、[振り]、[待ち]の順序をプログラムで指定して(決めて)いましたが、リスト11では、[前後]である「前に振るか、後に振るか」の判断、[待ち]である「いつまで待つか」の判断をジャイロの値を用いて行います。
図をクリック下さい。拡大表示されます。

このブログラムの一部を以下に示します。
図をクリック下さい。拡大表示されます。
 
このブログラムによるジャイロの値の様子を以下に示します。 ここでは、周期の中のもう一つの周期は、現れませんでした。また、[前振り]と[後振り]の方向は、反対方向にも向いています。 さらに、そ向きも不規則に逆方向に振れていることも観察できます。 これは、あたかもジャイロロジックがブランコの周期の乱れを修正しているかのようにも見えます。
   
図をクリック下さい。拡大表示されます。

◆ブランコの周期を短くしてみる

今回は、従来のタイマによるブランコ、ジャイロを用いた[待ち]の制御を行ったブランコ、さらに[前後]の判断を加えた3つの方法をご紹介させて頂きました。
  動画で御覧頂いたとおり、ジャイロを用いた制御でもそれなりにブランコを振らすことができました。

 今回のご紹介は、3つのどの方法も[振り]はタイマで行い、その値は800(V26)で行いました。 次に、この3のブランコで、この[振り]であるV26の値だけをを600にしたときのブランコの動きを確認してみました。  
また、このときのジャイロ値の変化も記録しました。 (この3つのブランコのプログラムは、V26以外の値、ロジックは全く同じものです。) その結果はこんな感じでした。

◇従来のタイマによる制御

その場でフリフリするだけで、ブランコは動き出しませんでした。 V26の値が600としたとき(V27は350)では、先にご紹介したブランコの固有周期と、ブランコの周期か合わなかったために、ブランコとして動くことはありませんでした。    
 
 
ブランコが動かなかったためなのか、ジャイロの振幅の巾は、大きく振れていました。

  ◇[待ち]のジャイロ制御

それなりにブランコできました。(動きば多少乱れていました) 固有周期の合わないところをジャイロロジックが調整しました。(かも知れません。)
    

◇[前後・待ち]のジャイロ制御

それなりにブランコできました。(動きば気持ちスムーズに思えました) 固有周期の合わないところをジャイロロジックが調整しました。(と勝手に思っています。)
    
 .

 これらのジャイロのグラフから、ブランコの動きを、読み取れることができると、ジャイロのグラフの信頼性が上がり、かつ、グラフから改善の方向性が読み取れるようになると思いますが、これは、まだまだ先の話になりそうです。

 簡単ですがご報告に替えさせていただきました。 もし再現テストや追加テストなどできましたら、その結果を是非ご紹介頂ければ大変嬉しいです。

 長文にもかかわらず、お付き合い頂きましてありがとうございました。

◆次回はいよいよ鉄棒に挑戦

次回は、いよいよ鉄棒にジャイロを使ってみたいと思います。どこまでできるか分かりませんが、ご紹介できるレベルになりましたらねご案内させていただきたいと思っています。
 

 多少(たぶんたくさんの)時間がかかるかもしれません。途中で挫折するかも知れませんが、期待しないでお待ち頂ければ嬉しいです。

============= プログラムリスト ==============

 ◆ジャイロでブランコで使用したプログラム


 このプログラムは、ブランコに乗った状態で初めてください。

 下記のプログラムリストの [∞∞∞ この次の行から ∞∞∞∞∞∞] をから[∞∞∞∞∞ この前の行まで ∞∞∞∞∞]の間をコピーして、RXコントローラのプログラムに貼り付けてご利用下さい。 この手順は、以下を参考にして下さい。

◇ご利用の手順(前回と同じ内容です)


1.プログラムエディタでプログラム名を[新規登録]で登録する
 2.プログラム一覧にてそのプログラム名をクリックの後、[読出し]をクリックする
 3.以下のプログラムの中から実施したいリストをドラッグし、コピーする
 4.プログラムエディタのブログラム領域に張り付ける このとき、プログラムエディタは、半角モードで行って下さい。(漢字モードだと、コピー(CTL+C)や、貼り付け(CTL+V)が効かないのでご注意ください。)
 5.貼り付けた状態を確認し、異常がなければ、[保存][実行]を行う

 ◇掲載プログラムの内容


以下に、上記の本文で使用した3つブログラムのリストを下記に掲載します。
;===== リスト 9=========
;プログラムNo:9-130407 ;プログラム名:ブランコ FTBT-800-350
;プログラム機能:コウヘイ君の従来のブランコ(タイマ制御)

;===== リスト10 ========
;プログラムNo:9-130414
;プログラム名:FJBJe_800
;プログラム機能:ブランコ 待ちのジャイロ制御  .

;===== リスト11 ========
;プログラムNo:11-130414
;プログラム名JF0B1c_800
;プログラム機能:ブランコ 前・後・待ちのジャイロ制御 
;=====================

◆ジャイロでブランコで使用したプログラムのリスト


◇【リスト 9】 コウヘイ君の従来のブランコのプログラム


∞∞∞∞∞∞∞∞ この次の行から ∞∞∞∞∞∞∞∞∞∞∞∞∞∞
;===== リスト 9===============
;プログラムNo:9-130407
;プログラム名:ブランコ FTBT-800-350
;プログラム機能:コウヘイ君の従来のブランコ(タイマ制御)
;====================
V0=1
:LOOP_01
(V0=0
V0=V0+1
JUMPIF(V0,<,123,LOOP_01)
;-------------------
V25=0
V26=800   ;振り時間(MOVE変数)
V27=800   ;保持時間(MOVE変数)
V28=0     ;COUNTER LOCAL
V29=0     ;LOCAL
;-----JYRO LOG -----------
V30=0     ;
V31=0     ;今回ジャイロ値 V390
V32=0      ;前回のジャイロ
V33=0      ;ジャイロの変化量  V13=V12-V11
V34=0      ;今回の方向  1:V13>0 小さくなる   2: V13<0 大きくなる
V35=0      ;前回の方向
V36=0   ;LOGカウンタ
V37=0
V38=0
V39=0   
V40=20   ;実行時間(Sec)
V41=100   ;トルク%
;-------------------
MOTERSPEED(1)
WAIT(10)
V29=V41
CALL(SV_SET)
TORQUESET
WAIT(100)
V29=1
CALL(SV_SET)
POWER
MOTERSPEED(0)
WAIT(10)
CALL(OK03_BEEP)
WAITE(100)
CALL(OK03_BEEP)
WAITE(100)
CALL(OK03_BEEP)
V127=0     ;タイマリセット 
MOVE(1550,350,-100,-700,1500,-200,0,-100,0,200,0,0,0,0,-200,0,100,0,0,-1500,700,100,-350,-1550,2400)
WAITE(100)
WAITE(100)
WAITE(100)
;---START----------------------
V36=46
(V36=V127
V40=V40*200+(V36   ;終了時間セット
CALL(FRONT)
:LOOP
CALL(FRONT)
CALL(BACK)
JUMPIF(V36,<,110,V36_OK)
V36=46    ;LOGカウンタリセット
:V36_OK
JUMPIF(V127,<,V40,LOOP)   ;終了判断
JUMP(EXIT)
;====ブランコの漕ぎ=====================
:FRONT
CALL(BEEP_FRONT)
V36=V36+1
(V36=V127
V36=V36+1
(V36=(N390+21000
MOVE(1200,350,-100,-700,1500,-200,0,600,0,200,0,0,0,0,-200,0,-600,0,0,-1500,700,100,-350,-1200,V26)
V36=V36+1
(V36=V127
V36=V36+1
(V36=(N390+21000
CALL(BEEP_FRONT)
MOVE(X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,V27)
V36=V36+1
(V36=V127
V36=V36+1
(V36=(N390+23000
RETURN
;-------------------------------------
:BACK
CALL(BEEP_BACK)
V36=V36+1
(V36=V127
V36=V36+1
(V36=(N390+26000
MOVE(1800,350,-100,-700,1500,100,0,0,400,200,0,-100,100,0,-200,-400,0,0,0,-1500,700,100,-350,-1800,V26)
V36=V36+1
(V36=V127
V36=V36+1
(V36=(N390+26000
CALL(BEEP_BACK)
MOVE(X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,V27)
V36=V36+1
(V36=V127
V36=V36+1
(V36=(N390+28000
RETURN
;=== POWER ============
:SV_SET
V28=0
:SV_LOOP
(V28=V29
V28=V28+1
JUMPIF(V28,<,24,SV_LOOP)
RETURN
;===============================
:OK03_BEEP
V00=62
V01=194
V02=0
V03=2
V04=0
SOUND
WAIT(3)
RETURN
;----------------------
:BEEP_BACK
V00=62
V01=213
V02=0
V03=6
V04=0
SOUND
WAIT(5)
RETURN
;----------------------
:BEEP_FRONT
V00=62
V01=42
V02=0
V03=2
V04=0
SOUND
WAIT(3)
RETURN
;==== END =========
:EXIT
MOVE(1550,350,-100,-700,1500,-200,0,-100,0,200,0,0,0,0,-200,0,100,0,0,-1500,700,100,-350,-1550,2400)
V29=0
CALL(SV_SET)
POWER
CALL(OK03_BEEP)
WAITE(50)

∞∞∞∞∞∞∞∞ この前の行まで ∞∞∞∞∞∞∞∞∞∞∞∞∞∞

◇リスト 10】 ジャイロによる待ちの制御のブランコのプログラム


∞∞∞∞∞∞∞∞ この次の行から ∞∞∞∞∞∞∞∞∞∞∞∞∞∞
;===== リスト10 ===============
;プログラムNo:9-130414
;プログラム名:FJBJe_800
;プログラム機能:ブランコ 待ちのジャイロ制御 
;================================
;JUMP(EXIT)
;---Work Reset ----------------
V0=1
:LOOP_01
(V0=0
V0=V0+1
JUMPIF(V0,<,127,LOOP_01)
;-------------------
V25=0
V26=800   ;前振りカウンタ(MOVE変数)
V27=800   ;後振りカウンタ(MOVE変数)
V28=0     ;COUNTER LOCAL
V29=0     ;LOCAL
;-----JYRO LOG -----------
V30=0     ; 今回ジャイロ値のタイマ・カウンタ
V31=0     ;今回ジャイロ値 V390
V32=0      ;前回のジャイロ
V33=0      ;ジャイロの変化量  V13=V12-V11
V34=0      ;
V35=0     ;
V36=0     ;LOGカウンタ
V37=0     ;LOGモード
V38=0
V39=0     ;
V40=20    ;実行時間(Sec)
V41=100   ;トルク%
;-------------------------
MOTERSPEED(1)
WAITE(100)
V29=V41
CALL(SV_SET)
TORQUESET
WAITE(200)
V29=1
CALL(SV_SET)
POWER

MOTERSPEED(0)
WAITE(100)
CALL(OK03_BEEP)
WAITE(100)
CALL(OK03_BEEP)
WAITE(100)
CALL(OK03_BEEP)
V127=0     ;タイマリセット 
MOVE(1550,350,-100,-700,1500,-200,0,-100,0,200,0,0,0,0,-200,0,100,0,0,-1500,700,100,-350,-1550,2400)
;MOVE(X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,4800)
WAITE(100)
WAITE(100)
WAITE(100)
==============================================
;---START----------------------
V36=46
(V36=V127
V40=V40*200+(V36   ;終了時間セット
CALL(FRONT)
:LOOP
CALL(FRONT)
CALL(BACK)
JUMPIF(V127,<,V40,LOOP)  ;終了時間の判断
JUMP(EXIT)
;====ブランコの漕ぎ=====================
:FRONT
CALL(BEEP_FRONT)  ;音による可視化処理
V30=V127
V31=(N390
V37=21000
CALL(LOG)
MOVE(1200,350,-100,-700,1500,-200,0,600,0,200,0,0,0,0,-200,0,-600,0,0,-1500,700,100,-350,-1200,V26)
V30=V127
V31=(N390
V37=21000
CALL(LOG)
CALL(BEEP_FRONT)  ;音による可視化処理
CALL(JYRO_FRONT)  ;前待ちの処理
RETURN
;-------------------------------------
:BACK
CALL(BEEP_BACK)  ;音による可視化処理
V30=V127
V31=(N390
V37=26000
CALL(LOG)
MOVE(1800,350,-100,-700,1500,100,0,0,400,200,0,-100,100,0,-200,-400,0,0,0,-1500,700,100,-350,-1800,V27)
V30=V127
V31=(N390
V37=26000
CALL(LOG)
CALL(BEEP_BACK)  ;音による可視化処理
CALL(JYRO_BACK)  ;後待ちの処理
RETURN
;----前待ちの処理--------------
:JYRO_FRONT
V32=V31
V30=V127
V31=(N390
V37=23000
CALL(LOG)
V33=V32-V31
JUMPIF(V31,<,V32,JYRO_FRONT)
RETURN
;----後待ちの処理--------------
:JYRO_BACK
V32=V31
V30=V127
V31=(N390
V37=28000
CALL(LOG)
JUMPIF(V31,>,V32,JYRO_BACK)
RETURN
;=== LOG ============
:LOG
JUMPIF(V36,<,120,V36_OK)
V36=46      ;LOGカウンタリセット
:V36_OK
V36=V36+1
(V36=V30
V36=V36+1
(V36=V31+V37
.
RETURN
;=== POWER ============
:SV_SET
V28=0
:SV_LOOP
(V28=V29
V28=V28+1
JUMPIF(V28,<,24,SV_LOOP)
RETURN
;===============================
:OK03_BEEP
V00=62
V01=194
V02=0
V03=2
V04=0
SOUND
WAIT(3)
RETURN
----------------------
:BEEP_FRONT
V00=62
V01=42
V02=0
V03=2
V04=0
SOUND
WAIT(3)
RETURN
;----------------------
:BEEP_BACK
V00=62
V01=213
V02=0
V03=6
V04=0
SOUND
WAIT(5)
RETURN
;==== END =========
:EXIT
MOVE(1550,350,-100,-700,1500,-200,0,-100,0,200,0,0,0,0,-200,0,100,0,0,-1500,700,100,-350,-1550,2400)
V29=0
CALL(SV_SET)
POWER
CALL(OK03_BEEP)
WAITE(50)
CALL(OK03_BEEP)
∞∞∞∞∞∞∞∞ この前の行まで ∞∞∞∞∞∞∞∞∞∞∞∞∞∞

◇【リスト 11】 ジャイロによる前後・待ちの制御のブランコのプログラム


∞∞∞∞∞∞∞∞ この次の行から ∞∞∞∞∞∞∞∞∞∞∞∞∞∞
.;===== リスト11 ===============
;プログラムNo:11-130414
;プログラム名JF0B1c_800
;プログラム機能:ブランコ 前・後・待ちのジャイロ制御 
;============================
;JUMP(EXIT)
;---Work Reset ----------------
V0=1
:LOOP_01
(V0=0
V0=V0+1
JUMPIF(V0,<,123,LOOP_01)
;-------------------
V25=0
V26=800   ;前振りカウンタ
V27=800   ;後振りカウンタ
V28=0     ;COUNTER LOCAL
V29=0     ;LOCAL
;-----JYRO LOG -----------
;V30 =0-1   ;-1をセット
V30=0     ; 今回ジャイロ値のタイマ・カウンタ
V31=0     ;今回ジャイロ値 V390
V32=0      ;前回のジャイロ
V33=0      ;ジャイロの変化量  V13=V12-V11
V34=0      ;今回の方向  1:V32<V31 前へ(大きくなる) 2:V32>V31 後へ(小さくなる)   
V35=0      ;前回の方向
V36=46    ;LOGカウンタ
V37=0     ;LOGモード
V38=0     ;
V39=0      ジャイロ値のカウンタ
V40=20    ;実行時間(Sec)
V41=100     ;トルク%
V42=0     ;
V43=0     ;
V44=0     ;
V45=0     ;
;-------------------------
MOTERSPEED(1)
WAIT(10)
V29=V41
CALL(SV_SET)
TORQUESET
WAIT(100)
V29=1
CALL(SV_SET)
POWER
MOTERSPEED(0)
WAIT(10)
CALL(OK03_BEEP)
WAIT(100)
CALL(OK03_BEEP)
WAIT(100)
CALL(OK03_BEEP)
V127=0     ;タイマリセット 
MOVE(1550,350,-100,-700,1500,-200,0,-100,0,200,0,0,0,0,-200,0,100,0,0,-1500,700,100,-350,-1550,2400)
;MOVE(X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,4800)
WAITE(100)
WAITE(100)
WAITE(100)
==============================================
;---START----------------------
V36=46
(V36=V127
V40=V40*200+(V36   ;終了時間セット
MOVE(1200,350,-100,-700,1500,-200,0,600,0,200,0,0,0,0,-200,0,-600,0,0,-1500,700,100,-350,-1200,900)
WAIT(50)
MOVE(1800,350,-100,-700,1500,100,0,0,400,200,0,-100,100,0,-200,-400,0,0,0,-1500,700,100,-350,-1800,900)  ;後漕ぎ
CALL(JYRO_KOGI)
JUMP(EXIT)
;====ブランコの漕ぎ=====================
:JYRO_KOGI
V37=20000
V30=V127
V31=(N390
CALL(LOG)
WAIT(50)
V32=V31
V30=V127
V31=(N390
CALL(LOG)
V33=V32-V31
JUMPIF(V33,>,0,JYRO_V34)
V34=1
JUMP(JYRO_LooP)
:JYRO_V34
V34=2
:JYRO_LooP
JUMPIF(V127,>,V40,JYRO_KOGI_EXIT)
V32=V31
V35=V34
V30=V127
V31=(N390
V33=V32-V31
JUMPIF(V31,>,V32,JP_FRONT)
JUMPIF(V31,<,V32,JP_BACK)
V37=31000
JUMPIF(V34,=,2,JP_FRONT)
JUMPIF(V34,=,1,JP_BACK)
CALL(LOG)
JUMP(JYRO_LooP)
;===============================
;--方向(前へ移動の処理)-------
:JP_FRONT
V34=1
JUMPIF(V34,=,V35,FRONT_KEEP)
:FRONT_KOGI
CALL(BEEP_FRONT)  ;音による可視化処理
V37=21000
CALL(LOG)
MOVE(1200,350,-100,-700,1500,-200,0,600,0,200,0,0,0,0,-200,0,-600,0,0,-1500,700,100,-350,-1200,V26)  ;前漕ぎ
CALL(BEEP_FRONT)  ;音による可視化処理
V32=V31
V30=V127
V31=(N390
CALL(LOG)
JUMP(JYRO_LooP)
:FRONT_KEEP
V37=23000
CALL(LOG)
JUMP(JYRO_LooP)
;--方向(後へ振りの処理 )------
:JP_BACK
V34=2
JUMPIF(V31,>,74,BACK_KEEP)
:BACK_KOGI
CALL(BEEP_BACK)  ;音による可視化処理 
V37=26000
CALL(LOG)
MOVE(1800,350,-100,-700,1500,100,0,0,400,200,0,-100,100,0,-200,-400,0,0,0,-1500,700,100,-350,-1800,V27)  ;後漕ぎ
CALL(BEEP_BACK)  ;音による可視化処理  
V32=V31
V30=V127
V31=(N390
CALL(LOG)
JUMP(JYRO_LooP)
:BACK_KEEP
V37=28000
CALL(LOG)
JUMP(JYRO_LooP)
;--- KOGI END -------
:JYRO_KOGI_EXIT
RETURN
;=== LOG ============
:LOG
JUMPIF(V36,<,120,V36_OK)
V36=46
:V36_OK
V36=V36+1
(V36=V30
V36=V36+1
(V36=V31+V37
;V36=V36+1
;(V36=V34
RETURN
;=== POWER ============
:SV_SET
V28=0
:SV_LOOP
(V28=V29
V28=V28+1
JUMPIF(V28,<,24,SV_LOOP)
RETURN
;===============================
:OK03_BEEP
V00=62
V01=194
V02=0
V03=2
V04=0
SOUND
WAIT(3)
RETURN
----------------------
:BEEP_FRONT
V00=62
V01=42
V02=0
V03=2
V04=0
SOUND
WAIT(3)
RETURN
;----------------------
:BEEP_BACK
V00=62
V01=213
V02=0
V03=6
V04=0
SOUND
WAIT(5)
RETURN
;==== END =========
:EXIT
MOVE(1550,350,-100,-700,1500,-200,0,-100,0,200,0,0,0,0,-200,0,100,0,0,-1500,700,100,-350,-1550,2400)
V29=0
CALL(SV_SET)
POWER
CALL(OK03_BEEP)
WAITE(50)
∞∞∞∞∞∞∞∞ この前の行まで ∞∞∞∞∞∞∞∞∞∞∞∞∞∞

0 件のコメント:

コメントを投稿