第10回 ジャイロ大実験 その3 ジャイロで鉄棒・・・・というよりは、鉄棒でジャイロする

 
 皆様、大変のご無沙汰です。今回は(大変お待たせしましたが)、ジャイロで鉄棒です。ジャイロで鉄棒というよりは、その一歩手前である「鉄棒で回転したときのジャイロの値」の内容となりましたので、[鉄棒でジャイロする]って感じになりました。

 (だいぶ昔になっちゃいましたが、)5月、6月と関東ロボット練習会に参加させて頂きました。ここでは、ロボット好きの素晴らしい皆さん方とお会いすることができました。また、ネットでしか拝見したことのなかったMiconoさんを始めとして、ぱぱっちさん、YUKIさん、T.Braianさん、クラフト親父さんとロボゼロの諸先輩方ともお知り合いになることができました。そして様々な情報をご教授いただきました。ありがとうございました。

 また、皆様方のご指導のおかげて、我が家のコウヘイ君も大奮闘し、大成長(?)を遂げることがてきました。

 今回は、順手での逆上がりと蹴上がりにおけるジャイロをご紹介したいと思います。ジャイロと同時に加速度センサーも装備して、その特性の違いにも挑戦してみました。(そんな大それた結果は、結局取れませんでしたが・・・・)

 皆様は、逆上がりにおけるジャイロの値の挙動はどのような軌跡を描くと思いますか?
クマゲラには、全く想像できませんでした。

・・・ということで、お時間がありましたら、しばらくお付き合い頂ければ嬉しいです。

 尚、今回もコウヘイ君の動作からのクマゲラが観察した結果のご紹介となります。ジャイロや加速度センサーの特性や理論についてはクマゲラの理解の範囲をとっくに超えていますので、間違った解釈があるかも知れません。あくまでもクマゲラの理解の範囲内での考察ということで、結果につはご検証の上、ご利用頂きたいと思います。

 また、「ここはそうではなく、こういうふうに考えるとよりスッキリするよ。」 「これは間違い、こう考えると理解できるよ」など、ご意見やご教授いただけるとさらに嬉しいです。

 さらに、大変長くなりましたが、ジャイロの解説の後に、ログ収集についてもご紹介させて頂きました。お時間がありましたら、こちらもお付き合い頂ければ嬉しく思います。

∞……∞……∞……∞……∞……∞……∞……∞……∞
 
 実は、先日、執筆が終わって公開前の最終の見直しをしていましたら、執筆の内容に大きなな誤りを見つけてしまいました。
 それもたいへん大きな間違いでした。クマゲラには天と地がひっくり返るような、これまで築きあげてきた理屈がひっくり返るような大きな間違いでした。(大げさな・・・・)独断と先入観、思い込みによる間違いでした。執筆することにより考えが整理されたのでしょう。間違いに気づくことがでました。
 公開前だったので新たに執筆し直すことも考えましたが、今回は、「ジャイロで鉄棒」ではなく、「鉄棒でジャイロ」なのでそのまま掲載させて頂くことにしました。そして間違いも掲載した上で、その経過も掲載させて頂き、正しい(クマゲラが正しいと思っている)考えを合わせて紹介させて頂きました。ここにもまだ間違いが隠れているかもしれません。また、間違いが皆さんのお役に立つこともあるかも知れません。(と考えました。 
 
 
 
 そんな訳で、さらに長文になってしまいましたが、途中飛ばしなからでも(すこしややこしいところがあるので)、最後までお付き合いいたければ嬉しいです。そして、さらに不可解な事象が見受けられましたら、是非、ご指摘頂ければ、大変嬉しく思います。
 
 前文まで、長文になってしまいました。

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


◆順手で逆上がりと蹴上がり

 

 ジャイロの特性を把握するためのモデルとして、足から上がる逆上り(前から上る)と、頭から上がる蹴上り(後から上がる)を用いることにしました。両方とも単純な回転であり、同時に、この二つは、互いに逆に回転するので、この二つの動きがジャイロの記録として可視化でき、ジャイロと運動の関係を確認することができるかも知れません。そしてその先には、ジャイロを使った制御への道も開けてくるかナ。と考えたわけです。

 また、以前にnetwingさんから質問のあった「順手でもOKですか?」の問いにも挑戦してみました。
 関節の構造からヒトのように肘を引いて鉄棒を引き付けることが出来ないので多少の無理のある姿勢ですが、なんとかできるようになりましたので、合わせてご紹介させて頂きました。今回は、この動きを用いて、ジャイロの値の変化を記録してみました。

 先ずは、順手による逆上りと、蹴上りの様子を動画でご確認下さい。

 

 また、順手による逆上りと蹴上がりのブログラムをいつものようにリスト12、リスト13として本稿の最後に掲載しましたので、合わせて参考にして下さい。

 今回は、この二つプログラムを用いた動作から、その動きについていくつかの角度から比較してみたいと思います。

◆順手による逆上りのジャイロの値の変化


 順手による逆上りのジャイロの値の変化を下図に示します。このジャイロは、標準のジャイロ(オプションで購入したもの)で標準の位置(腰部)に取り付けたものです。値は、いわゆるピッチの値(ここでは、前後の動きとも表現させて頂きます。)で変数のV390(G1)の値です。


グラフ1 逆上がりにおける標準ジャイロ(V390)のグラフ
(クリックすると拡大表示されます)

 前回はブランコでしたので、前後の運動でした。ジャイロの値の変化は、前後の運動とグラフの上下の軌跡がのイメージとして一致していましたので、比較的素直に理解できました。
 つまり、前へ触れたとき値は大きく、後へ触れたとき値は小さく(とクマゲラは考えると)、クマゲラのイメージと値の変化は合致していました。

 しかし、今回のこのジャイロ値の変化を見た時には、クマゲラは、「あっ!」と唖然としてしまいました。
 上記のクラフを見てみると、逆上がりで回転しているときのジャイロの値の変化から回転していることを読み取ことは難しそうです。多少周期は長くなっていることは確認できますが、回って上がれたのか、失敗して振り戻しているのかは、このジャイロの値から判断することは難しそうです。

 考えてみれば当然の話で、ジャイロ(G1)のセンサーでは、前後の動きを測っているだけなのです。回転しているかどうかを判断するためには、前後の動きとともに、上下の動きを掴む必要がありそうです。
---------------------------------------------------------------------
 そもそもが、いろいろやっててやっと分かってきたのですが、ジャイロの値は、その物体(今回の場合はコウヘイ君)の重心に対しての傾きを角速度で表しているのですね。クマゲラには、この概念が極最近まで、理解できていませんでした。

 クマゲラは、鉄棒を通して運動を見てましたので、常に鉄棒を回転の中心として、コウヘイ君の角度を見ていました。(今でもほとんど鉄棒を回転の中心としてジャイロの動きを見ています。)そのため、世間一般のジャイロの概念とずれる説明をしているところがあるかも知れません。例えば、「ピッチ」を「前後の動き」として表現しています。このため、重心に対する回転角が、鉄棒に対する回転角として見て(解釈)いるところがあります。

 どうも、クマゲラには、難し過ぎる世界なので、世間一般の概念である「ヒッチ」という言葉を使って考えていくと、クマゲラの頭はゴチャゴチャになっちゃうみたいです。ここのところは(このようなところについては)、クマゲラ流ということで、解釈して頂けるとうれしいです。

 また、クマゲラ流のところは、「こう考えると世間一般と合うよ」等のご指導を頂けると嬉しいです。
---------------------------------------------------------------------

◆新たなジャイロを設置


 クマゲラは、回転の状態を掴むためにもう一つのセンサーが必要であると考えました。腰のジャイロを取り外し、上下方向の動きを検出するために縦方向に取り付けることも検討しましたが、Miconoさんの400円で作るジャイロの記事(ROBOMIC週刊 ロボゼロ セレクト商品のジャイロセンサーはサイズ1/4お値段1/10の後継機が秋月で入手できる?(その2) )を思い出し、もう一つジャイロを追加することにしました。

 [そもそも、ここのところで大きな間違いを犯していました。この時点では、前後の動きと上下の動きは、別な動きとして捉えていました。つまり、ジャイロから見た時には、双方ともに、重心を通る左右を軸とする回転の動きですが、前後の動きも、上下の動きもピッチの動きであることに気がついていませんでした。]([]は、あとから気がついてクマゲラが追記したものです。)

 さらに、5月のロボット練習会でぱぱっちさんに加速度センサーについてのお話を伺っていましたので、加速度センサーも取り付け、ジャイロと加速度センサーの特性の違いについても今回の大実験で観察してみることにしました。

 鉄棒や、つり輪、空中ブランコで自分の姿勢を把握するセンサーとしては、ジャイロと加速度センサーのどちらが使いやすいか、についても検討課題として魅力的でした。
 

 二つ目のジャイロや加速度センサーの使い方や配線については、Miconoさんや、ぱぱっちさんのHPが大変参考になりました。ありがとうごさいました。この場を借りてお礼を述べさせて頂きます。

 加速度センサーは、3軸でしたので水平設置でも上下方向の計測はできますが、ジャイロは、2軸なので水平設置では、上下方向は測定できないだろうと考えました。

 [このころのクマゲラは、このジャイロは、長手方向に測定するものとばかり考えていました。(2つ目の間違い) そのため、ジャイロを垂直設置(縦付け)すれば、上下方向の動きが検出できると考えました。] そこで、センサーのG1を上下、G2を前後方向に測定できるように設置場所を検討しました。ここでも設置方法については、ぱぱっちさんのアイデアが参考になり、頭部に組み込むことにしました。重ね重ねありがとうございました。[長手方向に測定すると考えたのは、ぱぱっちさんのアドバイスではありません。クマゲラの独断と、偏見と勝手な思い込みです。]



図1 ロボゼロの頭部にジャイロと加速度センサーを取り付けた様子

 ということで、コウヘイ君は、大手術(?)の結果、無事にジャイロと加速度センサーを頭部に移植することができました。なんとジャイロが2基、加速度センサーを1基搭載したスーパーロボゼロに変身することができました。(アナログの入力チャンネルが4つしかないのに、こんなに装備してどぉ~しましょ!)

このときの入力チャンネルと信号の関係を以下に示します。

([]の記述は、改めて後になって考えたときの考えや、後になって気がついた改めて考えた時の測定項目を述べています。ちょっとややこしい話ですが、ご容赦下さい。詳細は、後ほど説明させて頂きます。)

 
  チャンネル    思い込んでいたときの設定         最近(理解した)設定
 CH‐1(赤-V390)  頭部ジャイロG2(前後の動き):赤色 [ローリング:前から見た左右の動き]
 CH‐2(紺-V391)  頭部ジャイロG1(上下の動き):紺色 [ヨーイング:上から見た左右の動き]
 CH‐3(茶-V392)  加速度センサーX(上下の動き):茶色
 CH‐4(緑-INPUTADI(7)) 加速度センサーY(前後の動き):緑色 
 

◆頭部のジャイロと加速度センサー


 逆上がりを行ったときの頭部に設置したジャイロと加速度センサーの出力と時間軸(秒)の関係を
グラフで表したものを下図に掲載しました。


 グラフ2 逆上がりにおける頭部のジャイロと加速度センサーの記録
(クリックすると拡大表示されます)

このグラフは、3つのゾーンで構成されています。

 一番上の第一のゾーンは、ステータスのゾーンで、青色の階段状のグラフです。MOVE命令の実行時の状態を表しています。プログラムの工程識別ステータスであるV30の値(スケールの関係で1/10にしたもの)を表しいています。このステータスには細かな縦のヒゲのような短い線が表示されていますが、これはログの取得を行った位置(ログのサンプル時刻)を示しています。

 今回は1回のサンプリングで4チャンネルのデータ収集を行い、その1回のログ収集が約0.1秒で行われていることが記録より読み取れます。ちなみに、前回のブランコでは、1チャンネルの収集で0.04~0.05秒の周期でログの収集が行われていました。

 また、ところどころにこの縦の短い線が表示されていないところがありますが、この時間帯は、MOVE命令が実行されているところです。(この間は、ジャイロの測定ができません。)

 2つ目の第二のゾーンは、赤(CH-1:V390)と紺(CH-2:V391)のグラフです。ジャイロの値の変化を表示し、赤は前後の動き[本当はローリング]、紺は上下の動き[本当はヨーイング]の値を表しています。

 3つ目の第三のゾーンは、茶(CH-3:V391)と緑(CH-4:INPUTADC(7)))のグラフです。加速度センサーの値の変化を表示し、茶はX:上下の動き、緑はY:前後の動きの値を表しています。

時間軸は、変数V127(0.005秒で1の値)を200倍して秒表示させています。(ほぼ実時間と見てよさそうです。)

◇頭部に設置したジャイロの感度

 
 ここで、ジャイロ値の変化幅が、加速度センサーの変化幅に比べ狭い(感度が低い)ことが気になりました。頭部に付けたジャイロの値の変化幅は、冒頭に示したの標準の位置(腰部)に設置してあるジャイロの変化幅(グラフ1)に比べても小さい(感度が低い)ことが分かります。

 [クマゲラは、上下、左右の動きを計測しているつもりでしたが、実際には、横方向の動き(ローリングとヨーイング)を測定していました。出力が出ないはずです。しかし、少し出ていたので、間違いに気づかず深みにハマっていきました。]

 ここで[この時点では]、この頭部に設置したジャイロの感度が低い理由として、クマゲラは以下の4つの理由を考えました。

1)秋月電子で購入した400円のジャイロと、標準の5,000円のジャイロでは、そもそも仕様が違う
2)ジャイロが故障している。故障しかけている。
3)頭部は、腰部に比べ、中心軸からの距離(回転半径)が小さいので、そもそも出力が小さく出る。
4)水平に設置すべきジャイロを垂直に設置したので、正常に機能していない。(水平に設置すれば、ちゃんと出力するかも・・・・。)

 [5番目の理由(ジャイロの考え方が間違っている)については全く気づいていませんでした。]

◇頭部に設置した加速度センサーの感度


 また、加速度センサーは、感度(振れ幅)は、ジャイロに比べ十分にでていますが、冒頭の標準ジャイロの波形と比べると細かな波が表れていることがわかります。グラフ1の標準センサーのグラフとは、時間軸が違う面を考慮しても、細かい波が拾われています。

 このことは、センサーの違いによる感度の違いが表れていると理解しました。
また、どっかで、「加速度センサーは、正確な値を取得するには、0.1秒の時間が必要・・・・」とか、「INPUTADCは値を安定させるためには0.1秒の時間が必要・・・」云々の文章を読んだことがあります。
 このため、出力が安定する前に測定(サンプリング)しているためかも知れません。

 今回は、連続動作の中で使用している(このことを無視している)ので、加速度センサーの出力が安定していないのかも知れません。

 クマゲラの目的は、鉄棒運動中の姿勢情報の取得です。そもそもが鉄棒の回転中に0.1秒の静止状態を作り出すことは不可能です。また、ボードの性能からも、0.1秒間隔で何らかの平均値を取得することも難しそうなので、この件は、現状をそのまま受け入れて、もう少しデータを集めながら、「使用に耐えるかどうか」、「この特性でどのように考えれば使用できるか」、の視点で、考えてみたいと考えています。

◆頭部に設置したジャイロの「感度が低い」を検証


 頭部に設置したジャイロの感度が低い事象に関して、上記で考えた4つの理由について検証してみることにしました。

1)400円のジャイロは、仕様が違う


 練習会でご指導頂いた諸先輩の皆様のご意見も頂いた結果、標準のジャイロと形も同じですし、型番の同じ(?)なので、仕様が違うことはないだろう。との結論に達しました。

 検証としては、標準と400円のジャイロを同じ環境で動作させれば確認できると思いますが、それも手間ですし、もしそうだとすると、その先の対策が取れないので、ここでは、この件は、このまま、保留とし、継続観察としました。

2)ジャイロが故障している・故障しかけている


 これは、最も起こりそうな結論です。不器用でズボラなクマゲラの組立、配線作業ですから、配線時のハンダ付けによる熱破壊や、誤配線、ショートによる破損が起きていても不思議ではありません。

 この件は、「壊れていれば、出力が出ない。」との勝手な判断で、検証としては、代替センサーを準備して交換してみることが確実である。との結論になり、今回は保留ということで、他の可能性についての判断を優先し、故障以外の理由が考えられないとき、改めて検討することにしました。

3)頭部は、腰部に比べ、中心軸からの半径が小さいので、そもそも出力が小さい


本件については、考えていても結論が出ないので、実際にジャイロを移設して試して見ることにしました。
 その方法は、頭部のセンサーをそのまま取り外し、背中に垂直方向に仮設で設置しました。

 

 
図2 ジャイロを背面に垂直設置した様子


そして、同じプログラムで逆上がりを行い、その記録をとりました。

 設置の関係でセンサーの方向が変わってしまいました。このときの入力チャンネルと信号の関係を以下に示します。

  チャンネル    思い込んでいたときの設定         (最近理解した)チャンネル設定
 CH‐1(赤-V390) 頭部ジャイロG2(上下の動き):赤 [上から見た時の左右の動き:ヨーイング]
 CH‐2(紺-V391) 頭部ジャイロG1(前後の動き):紺 [前から見た時の左右の動き:ローリング]
 CH‐3(茶-V392)  加速度センサーX(前後の動き):茶
 CH‐4(緑-INPUTADI(7)) 加速度センサーY(上下の動き):緑 

この結果をグラフ3に示します。


グラフ3 ジャイロを背中に垂直設置したときの値の逆上がりの記録
(クリックすると拡大表示されます)
 
 グラフ3のように、ジャイロの位置を頭部から、背部に移動させ、回転半径を大きくしても記録のパターンは、頭部に設置したときと変わりませんでした。ということは、半径の影響は受けていないと考えられそうです。

 考えてみれば、このジャイロは、角速度を計測しているとのことなので、角速度は、時間当たりの回転角の変化ということと理解すると、角速度は、先端部分の移動距離とは違うため回転半径には影響しないということで理解しました。
 

4)水平に設置すべきジャイロを垂直に設置したので、正常に機能していない。(水平に設置すれば、ちゃんと出力する。)


 最後に、ジャイロの位置を背面のまま、標準と同じように水平に仮設設置してみました。水平設置すると前後方向と左右方向の動きを計測することになります。ジャイロの水平設置の様子を図3に示します。


図3 ジャイロを背面に水平設置した様子
 

 設置の関係でセンサーの方向が変わってしまいました。このときの入力チャンネルと信号の関係を以下に示します。

 チャンネル    思い込んでいたときの設定         (最近理解した)チャンネル設定
 CH‐1(赤-V390) 頭部ジャイロG2(左右の動き):赤 [前後の動き:ビッチング]
 CH‐2(紺-V391) 頭部ジャイロG1(前後の動き):紺 [前から見た時の左右の動き:ローリング]
 CH‐3(茶-V392)  加速度センサーX(前後の動き):茶
 CH‐4(緑-INPUTADI(7)) 加速度センサーY(左右の動き):緑 

このときのグラフをグラフ4に示します。


グラフ4 ジャイロを背中に水平設置したときの逆上がりの記録
(クリックすると拡大表示されます) 

 水平設置では、2つ目のゾーンで赤色のチャンネルが冒頭のグラフ(クラフ1)と同じ程度の振れ幅で記録されました。ということは、紺色は横方向の動きを表していることになります。[勝手に理論を展開している。まだ、間違いに全く気づいていない。思い込みは恐ろしいです。このところは間違っています。申し訳ありません。]([]は後からの感想です。)
 
 加速度センサーも茶色が大きく変化し、垂直に設置したときの上下方向(X方向)なので、今回の前後方向の振れ幅を示しています。緑色はここでは、左右方向になるので、小さな変化をしていることも理解できます。
 
 また、この結果から、このジャイロは、水平に設置すれば、ちゃんと出力することが確認できました。出力の振れ幅(感度)の様子も、リスト1の標準の腰部に設置されているジャイロと遜色がないと思います。
 
 これらを総合すると、1)ジャイロの仕様は同じ。2)追加したジャイロは壊れていない。 3)このジャイロは垂直に設置すると感度が鈍くなる。 従って、4)水平に設置して使用することが原則である。ということになりそうです。

??ん。だけど少しへん?
[ここで初めて自分の考えがどっかで間違えていることに気付きました。]

 加速度センサーは、垂直に設置したときの上下方向のチャンネルが、水平に設置したときには前後方向の振れを表しています。これは理にかなっています。
 
 しかし、ジャイロは、垂直に設置したときの前後方向(G2)のチャンネル(赤色)が、水平に設置したときの前後方向の振れを表しています。ジャイロも、垂直に設置したときの上下方向(G1)のチャンネル(紺色)が振れなければなりません。振れているのは、赤のチャンネル(G2)です。これは理にかなっていません。
 
 新たな疑問が生じてしまいました。
 

 この設置方法で出力が正常にでているということは、この設置方法では、ジャイロのG2が働いて いる。または、配線ミスをしている。ということなになります。
 

◇頭部でG2を回転方向にセットする

 
  配線については、ディバイスまで戻って、再三調べましたが間違いは見つかりませんでした。ということは、頭部に、G2の長手方向が回転軸の方向に設置すれば、正常な出力が得られるということになりました。そこで、図4のように設置してみました。

 


図4 頭部のジャイロG2の長手方向が回転軸の方向になるように設置

 設置の関係でセンサーの方向が変わってしまいました。このときの入力チャンネルと信号の関係を以下に示します。

 チャンネル    思い込んでいたときの設定         (最近理解した)設定
 CH‐1(赤-V390) 頭部ジャイロG2(??の動き):赤 [前後の動き]
 CH‐2(紺-V391) 頭部ジャイロG1(??の動き):紺 [上から見た時の左右の動き:ヨーイング]
 CH‐3(茶-V392)  加速度センサーX(上下の動き):茶
 CH‐4(緑-INPUTADI(7)) 加速度センサーY(左右の動き):緑 

この状態で、逆上がりを行ったときのグラフを以下に示します。
 

グラフ5 頭部に回転軸の方向にジャイロG2(CH-1)を設置したとき逆上がりのグラフ
(クリックすると拡大表示されます)
 
 頭部のジャロ(G2:赤)もきれいに出力できました。しかし、この出力は、結局、グラフ1の標準の腰に設置したジャイロと同じ機能になってしまいました。違うのは、回転半径だけなので、回転半径の違いを検証してみたいと思います。
 

 ということで、配線を標準ジャイロのコネクタに戻して、空いている3チャンネル目に、頭部ジャイロのG2を接続して、逆上がりを行い、その出力を記録しました。

このときの入力チャンネルと信号の関係を以下に示します。

 チャンネル       (最近理解した)チャンネル設定
 
 CH‐1(赤-V390)  腰部ジャイロG1(前後の動き)
 CH‐2(紺-V391)  腰部ジャイロG2(左右の動き)
 CH‐3(茶-V392)  頭部ジャイロG2(前後の動き)
 CH‐4(緑-INPUTADI(7)) 加速度センサーY(左右の動き) 


グラフ6 標準ジャイロと頭部ジャイロの逆上がりの出力(前向き設置)
(クリックすると拡大表示されます)

 グラフ6において、標準ジャイロの前後の動き(G1:赤色)と頭部ジャイロの前後の動き(G2:茶色)とは、方向こそ反対ですが、同じような動きをしていることが分かります。

それならということで、頭部ジャイロの前後を、裏返して設置し直しました。

 
図5 頭部に最終的に設置したジャイロ

そして、同様に出力を記録しました。 
 

グラフ7 標準ジャイロと頭部ジャイロの逆上がりの出力(後ろ向き設置) 
(クリックすると拡大表示されます)
 
 ジャイロの設置を後ろ向きにすることで、標準(腰部)ジャイロの前後の動き(G1:赤色)と頭部ジャイロの前後の動き(G2:茶色)が。ほとんど同じ動きをしていることが分かります。若干の違いがてるのは、やはり設置場所の違いによるものと考えて良いかも知れません。特に、標準のジャイロは腰部の裏についているため腰の振りをつかさどるV8サーボの影響が反映されていると考えることができます。このことが両者の違いに影響されているのかも知れません。

 しかし、グラフのパターンで見る限り、わざわざ頭部に設置する必要がないくらいに酷似したパターンを示しています。逆に考えれば、前後の動きに関しては、頭部に設置することは、標準の腰部に設置するのと同じ効果を期待することができるということでしょう。
 

 鉄棒では使いませんが、両者の[左右の動き](紺と緑のパターン)もほとんど同じパターンといって良いかもしれません。この[左右の動き]は、どちらかというと、ジャイロの出力のほうが、加速度センサーの出力よりはっきりとした変化のパターンを表していることがわかります。 
 

◆頭部に設置したジャイロの感度がでなかったのはクマゲラの理解の間違いだった!

 

 そんわけで、クマゲラの無知がとんでもない間違いをしていました。このジャイロは、長手方向を回転の軸として、その回転角を計測していたんですね。ここまで来て、やっと少し理解できたみたいです。
 
と いうことで、改めて、冒頭に図1で示した頭部にジャイロを縦方向に設置したときの正しい出力は以下の通りとなりました。

 CH‐1(赤-V390)  頭部ジャイロG2(前から見た時の左右の動き:ローリング)
 CH‐2(紺-V391)  頭部ジャイロG1(上から見た時の左右の動き:ヨーイング)
 CH‐3(茶-V392)  加速度センサーX(上下の動き)
 CH‐4(緑-INPUTADI(7)) 加速度センサーY(前後の動き) 

図6 図1で示した頭部にジャイロを縦方向に設置したときの正しい出力

◆改めて頭部にジャイロを設置したときの出力

 大変な遠回りをしてしまいましたが、改めて図5に示すように、頭部にジャイロを後ろ向きに横方向に設置したときの、逆上がりと蹴上がりについての出力を記録してみました。

この時のチャンネルとセンサーの組み合わせは次の通りです。

 CH-1(赤-V390)  頭部ジャイロG2     前後の動き(ピッチング)
 CH‐2(紺-V391)  頭部ジャイロG1    上から見た時の左右の動き(ヨーイング)
 CH‐3(茶-V392)  頭部加速度センサーX  上下の動き(垂直方向)
 CH‐4(緑-INPUTADI(7)) 頭部加速度センサーZ 前後の動き(水平方向
※接続変更した

 クラフ8に、逆上がりの時の頭部センサーの出力を、グラフ9に蹴上がりの時の頭部センサーの出力を示します。 
 
 
 ジャイロの出力である上の段の赤と、加速度センサーの出力である下の段の緑は、出力の方向は逆ですが、とちらも前後の動きを表しています。やはり、こうしてみると、この2つの信号は、グラフ6のように、お互いに対象の変化を示さなければなりませんが、グラフ6のようなきれいな対象のグラフにはなっていません。ジャイロの出力は、加速度センサーの出力よりもきれいな(?)変化を示しているように見えます。制御に用いる信号として見た時には、ジャイロの出力のほうが使いやすそうです。(どちらが実際の運動を表しているかは、このグラフだけではわかりませんが・・・・)
 

 また、加速度センサー(下のグラフ)の茶は、上下の動きを表していますが、運動と合わせて説明を行うには、難しい曲線となっています。(どのように解釈すればよいかが、いまいち分かりません)

  クラフ中の黄色の時間帯がそれぞれ、逆上がり、蹴上がりの回転の動作を表しています。二つのグラフにおいて、赤のジャイロの出力は、逆上がり時は、右下がり、蹴上がりのときは、右上がりを示しています。それぞれ逆の変化を示していますが、加速度センサーの上下方向を示す茶や、緑からは、顕著な動きを把握することはできなさそうです。

 また、ジャイロのヨーイングである紺の動きが、それなりに変化しています。これは本来のヨーイングの動きではない動きを拾っているようですが、変化幅も小さいので、制御に使うのは少し難しいかもしれません。
 

 グラフ8 逆上がりによる頭部センサーの出力
(クリックすると拡大表示されます)
 
 
 
クラフ9 蹴上がりによる頭部センサーの出力
(クリックすると拡大表示されます)
 

  ◆腰部と頭部のジャイロの特性の比較

 
 最後に、標準の腰部に設置したジャイロと頭部に設置したジャイロの信号の比較を、逆上がりと蹴上がりついて、検証していみました。

この時のチャンネルとセンサーの組み合わせは次の通りです。

 CH-1(赤-V390)  腰部ジャイロG1   前後の動き(ピッチング)
 CH‐2(紺-V391)  腰部ジャイロG2  前から見た時の左右の動き(ローリンング)
 CH‐3(茶-V392)  頭部ジャイロG2  前後の動き(ピッチング)
 CH‐4(緑-INPUTADI(7)) 頭部加速度センサーX 上下の動き
※接続変更した

 



グラフ10 逆上がりによる腰部と腰部のシャイロ出力(前後)の比較
 (クリックすると拡大表示されます)
  
 

グラフ11 蹴上がりによる腰部と腰部のシャイロ出力(前後)の比較
(クリックすると拡大表示されます)

   この二つのグラフは、足から回る逆上がりと、頭から回る蹴上がりにおけるグラフを下記に示します。

 逆上がりは、頭の位置(腰の位置であっても)は、上がり始めの時は、前方の位置、かつ頭が下の逆さの低い姿勢に位置し、ここから後方へ異動しながら、上がり切ると頭が高い位置となります。 その後、さらに後方の位置で、下がり始めます。多少の揺れ戻しはありますが、停止状態へ移行します。回り始めでは、この状態が表れているようですが、回転の終りのころは、よくわかりません。
 加速度計の値は上下方向も激しく上下しており、この解釈は、難しそうです。

 一方、蹴上がりは、頭の位置(腰の位置であっても)は、回り始めは、、前方の位置で、倒立状態から始まり、後方へ異動しながら、下がり、低い位置となり、その後、さらに後方の位置で、一度上がり、停止に向かい下がり方向になります。グラブでは、この状態がきれいに表れているようです。
 加速度計の値も上から下、下から上ときれいに描かれています。

 また、頭部のジャイロの値と、腰部のジャイロの値は、逆上がりも蹴上がりもほぼ同じパターンを示しています。このことは、標準の腰部のジャイロがあれば、頭部にジャイロを設置する必要が無いことを示唆しています。

 さらに、腰部のジャイロG2は、そもそも左右(ローリング)を表していいますが、変化幅こそ小さいですが、その変化の方向は、上下運動を表していると解釈することができます。測定レンジを広げて使うことで、上下の変化を検出できるかも知れません。(少し乱暴ですが・・・)

 次に、緑の加速度センサーXの値については、ロボの姿勢に敏感に反応してその値を表示しているようにも見えますし、逆に、値の安定にもう少し時間が必要なのかもしれません。鉄棒でも、安定した大きな動きにつしては、正確性が増し、周期の早い振動のような動きには、対応の遅れが出ているのかも知れません。逆に、ロボの小刻みな動きを表しているのかも知れません。

 このように考えると、鉄棒運動については、標準のジャイロを使うことで、これまでの時間だけの制御に比べ、より安定した動きが実現できるかも知れません。しかし、今回の鉄棒は、ピッチングの動きだけでしたが、つり輪や、空中ブランコになると、ローリングや、ヨーイングの検出が重要になる場面もありそうです。このような場面では、腰部につけたジャイロのG2(ローリング)や、頭部に付けたジャイロのG1(ヨーイング)の指標が役に立つかも知れません。
 
今回は、非常に大雑把なレポートになってしまいました。ジャイロや加速度センサーの値と姿勢との関係が今ひとつすっきりとした形で皆様にご報告することができませんでした。正直、どのうよにも解釈できるような事象しかつかめていません。ここでは、いくつかの再現の結果、比較的傾向の有りそうなグラフを用いたつもりですが、スパっとこうです。とは言い切れませんでした。
 
今後も、折に連れデータを取りなから、これが真実た!というものがとれましたら、また、ご紹介したいと考えています。
 長々と、クマゲラの道楽にお付き合い頂き、本当にありがとうございました。

今回は、もう一つテーマがありましたので、よろしければ、もう少しお付き合い下さい。
 
∞……∞……∞……∞ ログ収集について ∞……∞……∞……∞



ログ収集について、クマゲラ の経験を、ご参考までに紹介させて頂きます。

◆ログの記録


 前回(ジャイロでブランコ)では、ログを記録させるための変数領域は、汎用領域のV46~V120を使っていました。この領域は約60個の変数しか格納できないため、サンプリングレートにもよりますが、1チャンネルで5~10秒程度しかログの記録ができませんでした。今回は4チャンネルのログを記録する必要があったため頭の痛いところでした。

 この問題も、ロボット練習会の諸先輩の「他に空いているところを使えばいいよ。」の一言で、解決してくれました。(皆さんありがとうございました。)
というわけで、使えるところを探してみました。

◇SDカードバッファ 133~388


 まず試したのは、SDカードバッファの133~388の255個でした。これは魅力的ですね。
「SDカードは特に使っていないし、使っちゃえ~。」ということで 、[実行]をクリック。
・・・・・コンパイル(無事通過)・・・・起動の合図音(無事通過)・・・逆上がり(無事通過)・・・・終了の合図音(・・・・・・) ???ありゃっ。ダンマリ・・・・

 「??そっか。音出すのにSDカードから読み込んでいるんだ。」 ということで、SDカードバッファの最初のほうをステータスチェツクで確認すると、ログデータで埋めつぶされていました。

 「そっか、起動時にダミーデータを書き込み、終了したときの状態をステータスチェツクで確認すればいいんだ。」 実行中に、ダミーデータが書き換わっていないところを確認すれば、ロクの記録エリアとして使える。と理解することができました。

 この方法で確認すると、逆上がりの場合は、170~380の210個エリアがログの記録エリアとして使えることが確認できました。

◇PCとの通信バッファ 349~720


 PCとの通信バッファもコウヘイ君の場合はPCと通信していないので、使えると思います。ただ、71個なので、汎用領域と変わらいなので、まだ使っていません。汎用領域が別の形で利用している場合には、有効かもしれませんね。

◇ワーク 721~1000


 仕様書には書かれていない721~1000の領域もダミーデータの書出しとステータスチェツクを行った結果、記録できることが確認できました。1000以上の領域は、ダミーデータの書き出しを行なってみましたが、そのデータは読み出せませんでした。よって、このエリアは、そもそもメモリがないのかもしれませんね。使えないようです。

 しかし、この721~1000の領域もダミー書出しと実行後のステータスチェツクによる読み出し確認では、ある程度使用されていることが確認できました。たぶん、ファームのワークエリアとして使われているのだと思います。

 コウヘイ君の逆上がりの動作では、800~1000の領域では、ログの記録用に使うことができました。

 このような確認の結果。現在は、SDカードバッファの170~380の範囲をログの記録エリアとして使用しています。
本件については、以上のような考え方に基づいて、クマゲラは使用できた。ということで、ご理解下さい。皆様方が検証、実施する場合には、自己責任においてお願いします。

 また、クマゲラの認識に誤り等ございましたら、ご指摘頂ければ嬉しいです。

◇ログの収集プログラム


今回の[鉄棒でシャイロする]で用いたログ収集プログラムを以下に掲載しました。

ログ収集のプログラム(抜粋)

図の番号こどに簡単に説明させて頂きます。
(以下の’1)’について:’まる文字’は、機種依存文字ということらしいので片カッコを使わせてもらいました。図中の丸文字として読み替えて下さい。  例:’1)’=>’まるいち’:①)

1)変数 V39、V40 について


 変数V39、V40はログを収納する変数の番号を開始と終了で指定します。
 開始のV39は、タイマ変数V127がセットされ、最初に使われた時の値が入り、保存されます。以降、エンドレスで書き込みが行われますが、V39+1の番号より更新されます。
終了のV40は、V40の値より最大で4つ後まで記録しますので、多少余裕のある数値を指定して下さい。

2)変数 V30 について


 変数V30は、MOVEコマンドの識別に用いるステータスの値をセットして下さい。また、この値を1/10にしたものが、ロググラフの一番上のゾーンの青色の階段状のクラフとして用いています。
10,000から32,000までの値を使用して下さい。クマゲラは今回は20,000から29,000を用いています。

 変数の節約から図の’7)’のようにジャイロの値として保存していますので、下3桁は、000で使用しています。

3)関数 CALL(LOG) について



 関数CALL(LOG)は、ログの記録処理を呼んでいます。先にも記述しましたが、CALL(LOG)ルーチンの処理時間は約0.1秒でした。

 また、以前(第2回 元気な日、調子のいい日、疲れた日)で、「動作は、[動き]と[(待ち)時間」と書きましたが、この[待ち時間]にログ記録処理を実行させることで、ログを記録させています。

 従って、下記(リスト12)のプログラムには、MOVEコマンドの下にやたらとCALL(LOG)が多いのは、その待ち時間に使っているからです。(0.1秒だったので丁度使い安かったのです。)

 ちなみに、1チヤンネルのログ収集の場合には、0.05秒でした。

4)MOVEコマンド


 MOVEコマンドをCALL(LOG)をで挟むことでグラフを書いています。

5)ログの記録処理です


 ここで、取得した4つログデータを変数に書き出しています。最初データは、時間データ(V127)2つ目から4つデータがログテータです。

6)エンドレス処理



 変数V41のカウンタがV40の最後番号より大きくなったら、V39の開始番号にリセットすることで、エンドレスにログを記録しています。
 従って動作の終りは記録出来ますが、最初の動作は記録できないことがあります。その場合には、途中で終了させることで、最初のところの記録をとって下さい。

7)ログデータ(ジャイロの値)とステータスの値を一つの変数に記録しています。


 

 使用する変数の数を節約するために、ログデータにステータスデータを加算した形で一つの変数として書きだしています。変数データをExcelで読みだした後、ログデータの変数データを分けて、それそれの処理を行なっています。
   [変数に記録するログデータ] = [ログデータ] + [ステータスデータ]

◇ログデータの回収とグラフの作成


 ログデータの回収には、4つの方法について試してみました。
その結果、今は、Xcontrollerを用いてログデータをコピペでExcelに渡しています。

1)画面キャプチャーとOCRする方法


 前回のジャイロとブランコでは、「RXコントローラのステータスチェツク画面をキャプチャーし、Excelに貼り付け、OCRをかけて数値に直し、OCRミスを修正してグラフを書く。」というダサダサの前世紀の遺物みたいな手順で行なっていました。

ご参考(?)までにこんな感じです。

ステータスチェクの画面をキャプチャーして貼った図(Excel)

 RXコントローラの画面はCtrl+Aの選択ができないので、数値を手で転記するか、この方法しか(クマゲラには)できませんでした。

 しかし、この方法でも慣れると30分くらいでグラフが書けるようになりました。

2)SDカードに書き出して、PCで読み込む方法


 鉄棒でジャイロを行うようになるとデータ量が4チャンネルと増えてきたことから、とても30分では終わらなくなり、SDカードに書き出して、そのデータをPCで読み込むことに挑戦しました。
(経過は、省略しますが・・・)

 練習会でぱぱっちさんや、YUKIさん等、諸先輩方にアドバイスを頂きなから、なんとか、ロボ上でプログラム上では、SDカードに書出しと、書き出したデータの読込まではできるようになりました。
ここでも皆さんにお世話になりました。その節は、いろいろとありがとうございました。

 これで、キャプチャーとOCR地獄がら開放されると思ったのですが、甘々でした。どういう訳か、SDカードから直にPCで読み出すことができませんでした。読み出すことがてぎないというよりは、物理的には、SDカードに書かれていないようでした。???原因と対策がわからず頓挫してしまいました。

 SDカードについて、プログラム上で、書き込みがてきたけど、物理的に書かれていなかった経験をお持ちの方がいらっしゃいましたら、アドハイス頂ければ嬉しいです。

3)RS232Cからデータを転送させる方法


 そんなこんなで、あっちこっちをWEB上を探していましたら、なんとMiconoさんのサイトにRXコントローラーを解析してみるぞ!(2)通信コマンド2ってのがあって、ここに変数を読み出す通信コマンドが紹介されていました。感謝!感謝!のMiconoさんです。すっげぇ~です。こんなことまで調べているんでね。ありがとうございます。

 ってなわけで、これでできる。と意気込んで・・・・ところでRS232Cってどう使うんだ???
(ここには、長ぁ~い汗と涙の奮戦記が・・・・ここも省略しますが・・・・)

・・・・という訳で、なんとか232Cでデータが回収できるようになって・・・・さらに、何ヶ月経て(オーバーな!)思い通りのデータが回収できたように見えたのですが、回収されたデータを精査すると、正しいデータと正しくないデータの混在している(クマゲラとしては摩訶不思議な)現象が見つかりまして・・・・。

 これも手詰まりとなり頓挫してしまいました。

4)Xcontroller を使ってデータが回収できた


 ログデータの回収も八方塞がりで落ち込んでいたころ、またまた、ロボット練習会でYUKIさんがMiconoさんのXcontroller の話をしていたのを思い出しました。何気なしに、Xcontroller でロボゼロを動かしてみました。そんしたら、あるじゃん♪♪、アルジャン♪♪♪♪。ステータスチェクの機能が。そんなら、ついでにCtrl+Aエイっ。反転する。反転する。そんなら、Ctrl+C、そしてExcelで、Ctrl+V。やった~ぁ~ぁ♪♪。貼れたぁ~♪♪♪♪。

 し、しかもワンクリックで、すべての変数がコピペでExcelに来ちゃうんですね。すっげえ~。これ。
感謝!感謝!のMiconoさんです。本当に素晴らしいソフトを公開してくれました。ありがとうございました。紹介してくれたYUKIさんありがとうございました。チャレンジするきっかけをくれたぱぱっちさんありがとうございました。

 しかし、MiconoさんのXcontroller はすぐれものです。RXコントローラとは全く出来が違う。よくできています。ちなみに、MiconoさんのXcontroller はこちら

5)グラフを書く

 おかげさまで、MiconoさんのXcontroller からステータスチェックの値をすべてコピーして、Excelに貼り付けて、エイ・ヤっで、なんとかグラフが書けるようになりました。完全な自動化とはいかず、数工程の手作業が入りますが、それでも1~2分足らずで、今回ご紹介したようなグラフが書けるようになりました。

 いろいろとありがとうございました。

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

 今回作成した逆上がりと蹴上がりのプログラムは、逆上がりを作成し、それをアレンジして蹴上がりを作りました。その関係で、両者は、ほとんど同じプログラムです。蹴上がりは、回り過ぎないように最後の振り上げを戻す処理が入っているに過ぎません。

 
 作った当時は(ある条件下では、)逆上がりと蹴上がりの再現率は高く、逆上がりと蹴上がりの切り分けができていました。
 
 しかし、たくさんの回数で再現テスト(データ取り)をしていると、そのうち、まさにある時には、逆上がりのプログラムで逆上がりができなくなり、蹴上がりができるようになりますまた、別の時には、蹴上がりのプログラムで蹴上がりができなくなり、逆上がりをするようになります。。(いわゆるまぼろしの自由演技を勝手にやり出します。)

 経験的に、逆上がりで疲れてくると蹴上がりになります。また、蹴上がりで、元気な時には逆上がりになってしまいます。これは理にかなっています。

しかし、この逆も起きることがあります。これは理にかなっていないんです。(クマゲラには理解できていません。)

 このあたりの謎が、シャイロのグラフから読み取れるようになると、それぞれの成功率が格段に上がるようになるかも知れません。
 

長文にも係わらず、最後までお読み頂きありがとうございました。
 
 
  まだまだコウヘイ君の挑戦は続きそうです。
 いつの日になるかは分かりませんが、またお会いできる日を楽しみにしてます。期待せずにお待ち頂ければ嬉しいです。
 
では、また。
============= プログラムリスト ==============

◆ジャイロで鉄棒で使用したプログラム


このプログラムは、鉄棒にぶら下がった状態で初めてください。

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

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


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

◇掲載プログラムの内容


以下に、上記の本文で使用した2つブログラムのリストを下記に掲載します。
===== リスト 12===============
;プログラムNo:12-130629
;プログラム名:ログ収集_逆上がり_4ch_130629.TXT
;プログラム機能:ログ収集 逆上がり

===== リスト 13===============
;プログラムNo:13-130629
;プログラム名:ログ収集_蹴上がり_4ch_130629.TXT
;プログラム機能:ログ収集 蹴上がり
;====================

◆ジャイロで鉄棒で使用したプログラムのリスト



◇【リスト 12】 ログ収集 逆上がり(4CH版)のプログラム


∞∞∞∞∞∞∞∞ この次の行から ∞∞∞∞∞∞∞∞∞∞∞∞∞∞
;===== リスト 12===============
;プログラムNo:12-130629
;プログラム名:ログ収集_逆上がり_4ch_130629.TXT
;プログラム機能:ログ収集 逆上がり
;====================
CALL(BEEP_BACK)
V29=0
CALL(SV_SET)
POWER
CALL(BEEP_BACK)
;-------------------
V0=1
:LOOP_ZERO
(V0=0
V0=V0+1
JUMPIF(V0,<,123,LOOP_ZERO)
V0=0
;-------------------
V25=0
V26=600 ;振上げ時間(MOVE変数)
V27=600 ;振降し時間(MOVE変数)
V28=0 ;LOCAL
V29=0 ;LOCAL
;-----JYRO LOG -----------
V30=0 ;工程識別ステータ  旧V37 
V31=0 ;今回のジャイロ値-1  V390
V32=0 ;前回のジャイロ値-1
V33=0 ; 今回のジャイロ値-2 V391
V34=0 ;前回のジャイロ値-2

V35=0 ; 今回のジャイロ値-3 V392
V36=0 ;前回のジャイロ値-3
V37=0 ; 今回のジャイロ値-4 INPUTAI-7
V38=0 ;前回のジャイロ値-4
V39=170 ;ログ開始アドレス 46 200 800    旧V38
V40=380 ;ログ終了アドレス 120 380 1000    旧V39
V41=V39 ;ログアドレスのカウンタ 旧V36
V42=10 ;ログ記録タイマ     旧V40 10:1SEC
V44=100 ;トルク%
;-------------------
CALL(OK03_BEEP)
WAIT(200)
CALL(OK03_BEEP)
WAIT(200)
WAIT(200)
WAIT(200)
WAIT(200)
CALL(BEEP_FRONT)
V0=V39
:LOOP_LOG_CLS
(V0=0
V0=V0+1
JUMPIF(V0,<,V40+8,LOOP_LOG_CLS)
V0=0

CALL(BEEP_FRONT)
WAIT(50)
CALL(BEEP_FRONT)
WAIT(50)
CALL(BEEP_FRONT)
WAIT(50)
;-------------------
MOTERSPEED(1)
WAIT(10)
V29=100
CALL(SV_SET)
TORQUESETA
WAIT(100)
V29=1
CALL(SV_SET)
POWER
MOTERSPEED(0)
WAIT(10)
;---START----------------------
V127=0 ;タイマリセット
V41=V39
(V41=V127
V42=V42*200+(V41 ;終了時間セット
;--------------------
;鉄棒つかむ
MOVE(1800,-500,-900,400,1100,0,0,0,0,200,0,0,0,0,-200,0,0,0,0,-1000,-400,900,500,-1800,3600) ;順手 ぶら下がり
WAIT(200)
WAIT(200)
WAIT(200)
CALL(BEEP_BACK)
WAIT(200)
CALL(BEEP_BACK)
WAIT(200)
CALL(BEEP_BACK)
;========================
:FRONT
V30=20000
CALL(LOG)
CALL(BEEP_FRONT) ;音による可視化処理
WAITE(200)
CALL(OK03_BEEP)
WAITE(200)
CALL(OK03_BEEP)
WAITE(200)
CALL(LOG)
MOVE(1800,-500,-900,400,1100,0,0,0,0,200,0,0,0,0,-200,0,0,0,0,-1100,-400,900,500,-1800,3600) ;順手 ぶら下がり
CALL(LOG)
;----------BACK-1------------
V30=21000
CALL(LOG)
MOVE(2200,X,X,X,X,100,X,-100,300,200,X,-300,300,X,-200,-300,100,X,X,X,X,X,X,-2200,2400) ;順手 Back
CALL(LOG)
CALL(LOG)
;---------Front 1-------------
V30=22000
CALL(LOG)
MOVE(1400,X,X,X,X,0,X,500,0,200,X,0,0,X,-0200,0,-500,X,X,X,X,X,X,-1400,1440) ;順手 Front
CALL(LOG)
CALL(LOG)
;---------BACK-2-1-----------
V30=23000
CALL(LOG)
MOVE(2200,X,X,X,X,0,X,-200,200,X,X,-200,200,X,X,-200,200,X,X,X,X,X,X,-2200,V27) ;後振り
CALL(LOG)
CALL(LOG)
;---------Front 2-1-------------
V30=24000
CALL(LOG)
MOVE(1400,X,X,X,X,0,X,600,0,-200,X,0,0,X,200,0,-600,X,X,X,X,X,X,-1400,V26) ;前振り
CALL(LOG)
CALL(LOG)
;---------BACK-2-2-----------
V30=25000
CALL(LOG)
MOVE(2200,X,X,X,X,0,X,-200,200,X,X,-200,200,X,X,-200,200,X,X,X,X,X,X,-2200,V27) ;後振り
CALL(LOG)
CALL(LOG)
;---------FFront 3-------------
V30=20000
CALL(LOG)
MOVE(1400,X,X,-900,X,0,X,600,0,-200,X,0,0,X,200,0,-600,X,X,X,900,X,X,-1400,V26) ;前振り
CALL(LOG)
CALL(LOG)
;----------FBACK-3--------------
V30=21000
CALL(LOG)
MOVE(2200,X,X,-900,X,0,X,-200,200,X,X,-200,200,X,X,-200,200,X,X,X,900,X,X,-2200,500) ;後振り
CALL(LOG)
CALL(LOG)
;--------FFront 3-2----回転 上がる------------
V30=22000
CALL(LOG)
MOVE(1200,X,X,-1000,X,-600,X,800,0,200,X,0,0,X,-200,0,-800,X,X,X,1000,X,X,-1200,500) ;前振り
CALL(LOG)
CALL(LOG)
CALL(LOG)
CALL(LOG)
CALL(LOG)
CALL(LOG)
CALL(LOG)
CALL(LOG)
CALL(LOG)
CALL(LOG)

;----------WAIT 51 ---上体起こし---BACK--------
V30=23000
CALL(LOG)
MOVE(1200,X,X,-950,X,0,X,0,0,200,X,0,0,X,-200,0,0,X,X,X,950,X,X,-1200,800) ;上体
;上体起こし
CALL(LOG)
CALL(LOG)
CALL(LOG)
CALL(LOG)
CALL(LOG)
CALL(LOG)
;----------WAIT 52 ---上体起こし---FRONT--------
V30=25000
CALL(LOG)
MOVE(900,X,X,-950,X,0,X,600,X,X,X,X,X,X,X,X,-600,X,X,X,950,X,X,-900,1200) ;上体
V42=16 ;終了時間セット 1.0sec
V30=25000
CALL(LOG_TIME)
JUMP(EXIT)

;=== LOG ============
:LOG
JUMPIF(V41,>,V40,LOG_V41)
V41=V41+1
(V41=V127
V31=V390
V41=V41+1
(V41=V31+V30
V33=V391
V41=V41+1
(V41=V33+V30
V35=V392
V41=V41+1
(V41=V35+V30
V37=INPUTADC(7)
V41=V41+1
(V41=V37+V30
RETURN
;---LOGカウンタリセット---
:LOG_V41
V41=V39
JUMP(LOG)
;=== LOG TIME ============
:LOG_TIME
V42=V42*10+V127 ;終了時間セット
:LOOP_LOG_TIME
CALL(LOG)
JUMPIF(V127,<,V42,LOOP_LOG_TIME) ;終了時間の判断
RETURN
;=== POWER ============
:SV_SET
V28=0
:SV_LOOP
(V28=V29
V28=V28+1
JUMPIF(V28,<,24,SV_LOOP)
RETURN
;=== BEEP =============
: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
V30=20000
CALL(LOG)
CALL(OK03_BEEP)
WAITE(50)
CALL(LOG)
CALL(OK03_BEEP)
WAITE(50)
CALL(LOG)
:END
V29=0
CALL(SV_SET)
POWER
CALL(OK03_BEEP)
WAITE(100)

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

◇リスト 13】 ログ収集 蹴上がり(4CH版)のプログラム


∞∞∞∞∞∞∞∞ この次の行から ∞∞∞∞∞∞∞∞∞∞∞∞∞∞
===== リスト 13===============
;プログラムNo:13-130629
;プログラム名:ログ収集_蹴上がり_4ch_130629.TXT
;プログラム機能:ログ収集 蹴上がり
;====================
CALL(BEEP_BACK)
V29=0
CALL(SV_SET)
POWER
CALL(BEEP_BACK)
;-------------------
V0=1
:LOOP_ZERO
(V0=0
V0=V0+1
JUMPIF(V0,<,123,LOOP_ZERO)
V0=0
;-------------------
V25=0
V26=600 ;振上げ時間(MOVE変数)
V27=600 ;振降し時間(MOVE変数)
V28=0 ;LOCAL
V29=0 ;LOCAL
;-----JYRO LOG -----------
V30=0 ;工程識別ステータ  旧V37 
V31=0 ;今回のジャイロ値-1  V390
V32=0 ;前回のジャイロ値-1
V33=0 ; 今回のジャイロ値-2 V391
V34=0 ;前回のジャイロ値-2

V35=0 ; 今回のジャイロ値-3 V392
V36=0 ;前回のジャイロ値-3
V37=0 ; 今回のジャイロ値-4 INPUTAI-7
V38=0 ;前回のジャイロ値-4
V39=170 ;ログ開始アドレス 46 200 800    旧V38
V40=380 ;ログ終了アドレス 120 380 1000    旧V39
V41=V39 ;ログアドレスのカウンタ 旧V36
V42=10 ;ログ記録タイマ     旧V40 10:1SEC
V44=100 ;トルク%
;-------------------
CALL(OK03_BEEP)
WAIT(200)
CALL(OK03_BEEP)
WAIT(200)
WAIT(200)
WAIT(200)
V0=V39
:LOOP_LOG_CLS
(V0=0
V0=V0+1
JUMPIF(V0,<,V40+8,LOOP_LOG_CLS)
V0=0

CALL(BEEP_FRONT)
WAIT(200)
CALL(BEEP_FRONT)
WAIT(200)
CALL(BEEP_FRONT)
WAIT(200)
;-------------------
MOTERSPEED(1)
WAIT(10)
V29=100
CALL(SV_SET)
TORQUESETA
WAIT(100)
V29=1
CALL(SV_SET)
POWER
MOTERSPEED(0)
WAIT(10)
;---START----------------------
CALL(BEEP_FRONT)
V127=0 ;タイマリセット
V41=V39
(V41=V127
V42=V42*200+(V41 ;終了時間セット
;--------------------
;鉄棒つかむ
MOVE(1800,-500,-900,400,1100,0,0,0,0,200,0,0,0,0,-200,0,0,0,0,-1000,-400,900,500,-1800,3600) ;順手 ぶら下がり
WAIT(200)
WAIT(200)
WAIT(200)

;========================
:FRONT
V30=20000
CALL(LOG)
CALL(BEEP_FRONT) ;音による可視化処理
WAITE(200)
CALL(OK03_BEEP)
WAITE(200)
CALL(OK03_BEEP)
WAITE(200)
CALL(LOG)
MOVE(1800,-500,-900,400,1100,0,0,0,0,200,0,0,0,0,-200,0,0,0,0,-1100,-400,900,500,-1800,3600) ;順手 ぶら下がり
CALL(LOG)
;----------BACK-1------------
V30=21000
CALL(LOG)
MOVE(2200,X,X,X,X,100,X,-100,300,200,X,-300,300,X,-200,-300,100,X,X,X,X,X,X,-2200,2400) ;順手 Back
CALL(LOG)
CALL(LOG)
;---------Front 1-------------
V30=22000
CALL(LOG)
MOVE(1400,X,X,X,X,0,X,500,0,200,X,0,0,X,-0200,0,-500,X,X,X,X,X,X,-1400,1440) ;順手 Front
CALL(LOG)
CALL(LOG)
;---------BACK-2-1-----------
V30=23000
CALL(LOG)
MOVE(2200,X,X,X,X,0,X,-200,200,X,X,-200,200,X,X,-200,200,X,X,X,X,X,X,-2200,V27) ;後振り
CALL(LOG)
CALL(LOG)
;---------Front 2-1-------------
V30=24000
CALL(LOG)
MOVE(1400,X,X,X,X,0,X,600,0,-200,X,0,0,X,200,0,-600,X,X,X,X,X,X,-1400,V26) ;前振り
CALL(LOG)
CALL(LOG)
;---------BACK-2-2-----------
V30=25000
CALL(LOG)
MOVE(2200,X,X,X,X,0,X,-200,200,X,X,-200,200,X,X,-200,200,X,X,X,X,X,X,-2200,V27) ;後振り
CALL(LOG)
CALL(LOG)
;---------FFront 3-------------
V30=20000
CALL(LOG)
MOVE(1400,X,X,X,X,0,X,600,0,-200,X,0,0,X,200,0,-600,X,X,X,X,X,X,-1400,V26) ;前振り
CALL(LOG)
CALL(LOG)
;----------FBACK-3--------------
V30=21000
CALL(LOG)
MOVE(2200,X,X,-900,X,0,X,-200,200,X,X,-200,200,X,X,-200,200,X,X,X,900,X,X,-2200,700) ;後振り
CALL(LOG)
CALL(LOG)
;--------FFront 3-2----回転 上がる------------
V30=22000
CALL(LOG)
MOVE(1200,X,X,-1000,X,-600,X,800,0,200,X,0,0,X,-200,0,-800,X,X,X,1000,X,X,-1200,800) ;前振り
CALL(LOG)
CALL(LOG)
CALL(LOG)
V30=23000
CALL(LOG)
MOVE(X,X,X,X,X,X,X,500,X,X,X,X,X,X,X,X,-500,X,X,X,X,X,X,X,300) ;前振り FFront 3-3
CALL(LOG)

;----------WAIT 51 ---上体起こし---BACK--------
V30=24000
CALL(LOG)
MOVE(1200,X,X,-950,X,200,X,-200,0,200,X,0,0,X,-200,0,200,X,X,X,950,X,X,-1200,500) ;上体
;上体起こし
CALL(LOG)
CALL(LOG)
CALL(LOG)
CALL(LOG)
CALL(LOG)
CALL(LOG)
;----------WAIT 52 ---上体起こし---FRONT--------
V30=25000
CALL(LOG)
MOVE(900,X,X,-950,X,0,X,600,X,X,X,X,X,X,X,X,-600,X,X,X,950,X,X,-900,1200) ;上体
V42=16 ;終了時間セット 1.0sec
V30=25000
CALL(LOG_TIME)
JUMP(EXIT)

;=== LOG ============
:LOG
JUMPIF(V41,>,V40,LOG_V41)
V41=V41+1
(V41=V127
V31=V390
V41=V41+1
(V41=V31+V30
V33=V391
V41=V41+1
(V41=V33+V30
V35=V392
V41=V41+1
(V41=V35+V30
V37=INPUTADC(7)
V41=V41+1
(V41=V37+V30
RETURN
;---LOGカウンタリセット---
:LOG_V41
V41=V39
JUMP(LOG)

;=== LOG TIME ============
:LOG_TIME
V42=V42*10+V127 ;終了時間セット
:LOOP_LOG_TIME
CALL(LOG)
JUMPIF(V127,<,V42,LOOP_LOG_TIME) ;終了時間の判断
RETURN

;=== POWER ============
:SV_SET
V28=0
:SV_LOOP
(V28=V29
V28=V28+1
JUMPIF(V28,<,24,SV_LOOP)
RETURN

;=== BEEP =============
: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
V30=20000
CALL(LOG)
CALL(OK03_BEEP)
WAITE(50)
CALL(LOG)
CALL(OK03_BEEP)
WAITE(50)
CALL(LOG)

:END
V29=0
CALL(SV_SET)
POWER
CALL(OK03_BEEP)
WAITE(100)

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












 

0 件のコメント:

コメントを投稿