日記

フリーページ

2014年03月04日
XML
カテゴリ:SH7786
前回、プロトタイプの開発中は、歩行周期が0.5秒固定となっていたが、
今回は、歩行周期を好きな時に任意(0.25~3秒)に変更できる仕様です。

この時、ポイントとなるのが、マトリクス中のΔtを可変する機能。
例えば、Δtを0.01秒に固定すると、歩行周期0.25秒なら、3歩分のマトリクスはN=75。
これが、歩行周期3.0秒だと、3歩分のマトリクスはN=900と、無茶苦茶な大きさに・・・。

そこで、マトリクスの途中でΔtを切り替えることができれば、歩行周期が変わっても
計算量は常に一定となるわけです。

計算結果と、サンプルコードを示しておきます。

可変Δt


float TraP[151];
float TraU[151];
float TraL[151];
float TraZ[151];
float TraX[151];

float TraT1 = 0.5;
float TraT2 = 3.0;
float TraW = 0.080;
float TraZC = 0.250;
float TraDT1;
float TraDT2;
float TraDT12;

float TraA1;
float TraA2;
float TraB1;
float TraB2;

TraDT1 = TraT1/50.0;
TraDT2 = TraT2/50.0;
TraDT12 = (TraDT1 + TraDT2)/2.0;

TraA1 = -TraZC/(g*TraDT1*TraDT1);
TraB1 = 2.0*TraZC/(g*TraDT1*TraDT1) + 1.0;
TraA2 = -TraZC/(g*TraDT2*TraDT2);
TraB2 = 2.0*TraZC/(g*TraDT2*TraDT2) + 1.0;

TraL[0] = TraA1 + TraB1;
TraU[0] = TraA1 / TraL[0];

for (i = 1; i < 75; i++ ) {
TraL[i] = TraB1 - TraA1 * TraU[i-1];
TraU[i] = TraA1 / TraL[i];
}

TraL[i] = (2.0*TraZC/(g*TraDT1*TraDT2) + 1.0) + TraZC/(g*TraDT1*TraDT12) * TraU[i-1];
TraU[i] = -TraZC/(g*TraDT2*TraDT12) / TraL[i];

for (i = 76; i < 150; i++ ) {
TraL[i] = TraB2 - TraA2 * TraU[i-1];
TraU[i] = TraA2 / TraL[i];
}

TraL[i] = TraA2 + TraB2 - TraA2 * TraU[i-1];
TraU[i] = 0.0;

for (i = 0; i < 26; i++ ) {
TraP[i] = -TraW / 2.0;
}

for (i = 26; i < 76; i++ ) {
TraP[i] = TraW / 2.0;
}

for (i = 76; i < 126; i++ ) {
TraP[i] = -TraW / 2.0;
}

for (i = 126; i < 151; i++ ) {
TraP[i] = TraW / 2.0;
}

TraZ[0] = TraP[0] / TraL[0];

for (i = 1; i < 75; i++ ) {
TraZ[i] = (TraP[i] - TraA1 * TraZ[i-1]) / TraL[i];
}

TraZ[i] = (TraP[i] + TraZC/(g*TraDT1*TraDT12) * TraZ[i-1]) / TraL[i];


for (i = 76; i < 151; i++ ) {
TraZ[i] = (TraP[i] - TraA2 * TraZ[i-1]) / TraL[i];
}

TraX[150] = TraZ[150];

for (i = 149; i > -1; i-- ) {
TraX[i] = TraZ[i] - TraU[i] * TraX[i+1];
}






最終更新日  2014年03月04日 22時51分40秒

PR

キーワードサーチ

▼キーワード検索

楽天プロフィール

設定されていません

お気に入りブログ

まだ登録されていません

Copyright (c) 1997-2017 Rakuten, Inc. All Rights Reserved.