ブログトップ

電子工作やってみたよ

ジャイロボーイをいじっていて、いままでに解ったこといくつか書いて見ます。
アフレルに聞いたことや、私がいじってみて類推したことです。
正解である保証はありません。

デバッグでの問題点
1.ジャイロボーイのEV3ソフトには、ブレークポイントがありません。
2.変数の内容(数値)をパソコンで見ることが出来ません。
3.変数の内容を見るのはEV3の顔に表示して確認します。これはリアルタイムで変化が見えるのでいいですね。
  テキストのグリッドモードで10行表示できます。変数10個表示できるわけですね。
4.センサーの内容(数値)はデーターロギングのオシロスコープモードで見える。
  これは値の変化がチャートに残るので動きがわかります。

ジャイロボーイのEV3ソフトで解ったこと
1.自立制御のループは1回転10mSec位の時間で回っている。
  動作処理時間は8.5mSecで1.5mSecの無駄時間が加算されているようです。
  タイマー割り込みは使用せずに時間処理しているようです。
2. ジャイロセンサーを角度モードで使用するとゼロ点のドリフトが大きい、20度くらいずれる。
  このため角速度モードで使用しているのかな。
3.変数 gAng  角度データ(ジャイロセンサーの角速度を積分して作っている)
4.変数 gSpd  角速度データ(ジャイロセンサーの角速度をちょっと加工して使用)
5.変数 mSum モーターの回転角度を読み取り積分してスタート地点からの移動距離
6.変数 mSpd  モーターの回転角度から計算した移動速度。



c0335218_20420525.jpg







by telmic-gunma | 2017-07-01 20:56 | レゴ マインドストーム | Trackback | Comments(2)

マインドストームのジャイロボーイのプログラム EV3ソフトからC言語(もどき)に書き換えが済んで、おぼろげながら少し分かってきました。
変数の内容については、アフレルで教えてもらった方法でひとつづつ変数の値をジャイロボーイの顔に表示して調べ始めたところです。
変数を一つ表示すると前に表示していた変数が消されてしまうので効率わるいです。 何か考えないと。

画面を見やすくするためにジャイロボーイの形をかえました。 重心が高くなりモーメントが変わったためでしょうか、少し不安定になりました。
ソフトの定数はもとのままです。

c0335218_18161801.jpg

以下が、2輪自立動作をする部分のフィードバックプログラムのところです。
最初の方は、イニシャライズの部分ですので、実際の自立動作をするところは意外とコンパクトという感じをもちました。
8個あるマイブロックはみな一回しか使われずかつネスティングは1段なので メイン1本の形にして見やすくしました。

変数の内容が解ってきたら、細かなコメントをこれに書き込みますね。

「引用元)EV3 model program descriptionsGyroBoy Program Descriptions」

→リンク先
https://le-www-live-s.legocdn.com/sc/media/files/ev3-program-descriptions/ev3-program-description-gyroboy-8f351eb6ca8c99121f27be9cb2b12ad6.pdf

ジャイロボーイの全プログラムリスト

[M] ループヘッド

(RTS) マイブロックの先頭
Lモーター(右足)PortA イニシャライズ
Lモーター(左足)PortD イニシャライズ
ジャイロセンサー Port1 リセット
タイマー2リセット

mSum = mPos = mD = mDP1 = mDP2 = mDP3 = cDrv = 0;
cLo = gAng = pwr = st = Cstr = Cdrv = 0;
ok = X

Sleeping


( gOS )
Do
gMn = 1000;
gMx = -100;
gSum = 0;

For ( i = 0; i<200; i++ )
{
gyro = [ ジャイロセンサーの角速度値];
gSum = gSum + gyro;
if ( gyro > gMx ) gMx = gyro;
if ( gyro < gMn ) gMn = gyro;
wait(0.004) // 4mSec wait
}
while(( gMx - gMn ) >= 2 )
gOS = gSum / 200;

gAng = -0.25;
speed_up( );
Awake( );
st = 1;

// ここ迄が自立動作初期化ルーチン
// **********************************************
// ここ以後が二本足自立動作を行うところ。

[BAL] // 二本足自立のバランス処理ループヘッド

if ( cLo == 0 ) // ( GT head )
{
tInt = 0.014;
Timer1 = 0; // タイマー1をリセット
}
else
{
tInt = Timer1の経過時間 / cLo;
}
cLo = cLo + 1; // ( GT end )

タイマー1の経過時間測定;

a = 0.005; // ( GG head )
gOS = (ジャイロ角速度 × a ) + ( 1 - a ) × gOS;
gSpd = ジャイロ角速度 - gOS;
gAng = gAng + ( gSpd × tInt ); // ( GG end )


buff = mSum // ( GM head )
mSum = ( モーターAの回転角度測定値) + ( モーターDの回転角度測定値)
Diff = ( モーターAの回転角度測定値) - ( モーターDの回転角度測定値)
mD = mSum - buff;
mPos = mPos - mD;
mSpd = (( mD + mDP1 + mDP2 + mDP3 ) / 4 ) / tInt; //( GM end )
mDP3 = mDP2;
mDP2 = mDP1;
mDP1 = mD;

mPos = mPos - ( tInt × Cdrv ); // ( EQ head )
buff2 = ( 0.8 * gSpd ) + ( 15 * gAng );
pwr = ( -0.02 * Cdrv ) + buff3 - buff2;
if ( pwr > 100 ) pwr = 100;
if ( pwr < -100 ) pwr = -100; // ( EQ end )

mPos = mPos - ( Cdrv * tInt ); //(cntrl head)
右駆動 = pwr + ( Cstr * 0.1 );
左駆動 = pwr - ( Cstr * 0.1 ); //( cntrl end )


if ( | pwr | ) < 100 ) Timer2をリセット // ( CHK head )
if ( Timer2 > 1 ) ok = 真; // ( CHK end )

b = GGの直前の時刻; Timer1使用
a = 現在の時刻; Timer1使用
待機時間の値 = 0.005 - ( a - b );
wait( 待機時間 );

while( ok <> 真 )
{ ; );

GOTO BAL




この前 教えていただいた アルストロメリアの花です。
だいぶ数が増えたのでまたのせます。

c0335218_18181931.jpg
この調子でいくと、ブログごとに新しい花を乗せられるかも。









by telmic-gunma | 2017-06-18 19:48 | レゴ マインドストーム | Trackback(11) | Comments(4)

ジャイロボーイ マイブロック GG 調べました
機械的にBASIC言語もどきには、すぐできたのですが、ではここで何をしているのと、言葉で説明するところまで理解できていません。
また 使われている変数の意味、内容も分かりません。
まずは、全体をこんな感じで流してみて、それから相関関係など調べながら理解を進めるということでしょうか。
こつこつ行くしかないでしょうね。


c0335218_20413527.jpg

位置的に対応するところの下にBASIC言語もどきで書いてみます。
昔の象形文字を翻訳しているようなものですか。
ロゼッタストーンでしたか、歴史で習いましたね。

「引用元)EV3 model program descriptionsGyroBoy Program Descriptions」

→リンク先
https://le-www-live-s.legocdn.com/sc/media/files/ev3-program-descriptions/ev3-program-description-gyroboy-8f351eb6ca8c99121f27be9cb2b12ad6.pdf

c0335218_20111562.jpg
こちらは まとめて書いてます。
まだ 変数や個別の動作など分かりません。
理解できたら書き直します。



c0335218_20112738.jpg



今日も採れたイチゴです。 孫に食べさせてあげたいけど、宅急便では送れないよね。

c0335218_20120671.jpg





by telmic-gunma | 2017-06-03 20:42 | レゴ マインドストーム | Trackback | Comments(0)

ジャイロボーイの基本的な数値を計ってみました。

全重量(充電式バッテリー搭載して)   817g
身長(高さ 接地部からてっぺんまで)  235mm
幅(タイヤ接地部外側)         130mm
ジャイロセンサーの中心の高さ(接地部より)75mm
重心の高さ(接地部より)        125mm
車輪の直径                55mm


ジャイロセンサーのプログラム上の使われ方について

プログラム上の使用箇所  3か所
   マイブロック RST   リセット
   マイブロック gOS  測定ー角速度
   マイブロック GG   測定ー角速度

とりあえず 上記のものを調べました。 忘れないうちに書いておきます。

疑問点は、ジャイロセンサーで「角度」を測るのではなくて、「角速度」を計っていることですね。(角度の測定モードは付いているにもかかわらず。)
累積誤差が出ないのかしら。
前回のジャイロボーイの動画では誤差の累積は見受けられませんね。
まあ 1時間とか動作させていれば、そのうちやってみます。




c0335218_20413527.jpg

庭に咲いたはなです。  名前はちょっとわかりません。
c0335218_10011358.jpg


by telmic-gunma | 2017-05-31 10:11 | レゴ マインドストーム | Trackback | Comments(2)