検索
AND検索
OR検索
トップ
|
リロード
|
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
ETロボコン シミュレータ 制作日記 (by T.Misawa)
トップ
シミュレータダウンロード
日記
日記
日記/20070406
日記/20070409
日記/20070412
日記/20070413
日記/20070414
日記/20070417
日記/20070420
日記/20070421
日記/20070422
日記/20070423
日記/20070425
日記/20070426
日記/20070427
日記/20070428
日記/20070429
日記/20070502
日記/20070504
日記/20070505
日記/20070506
日記/20070507
日記/20070510
日記/20070517
日記/20070519
日記/20070520
日記/20070521
日記/20070523
日記/20070526
日記/20070527
日記/20070529
日記/20070601
日記/20070610
日記/20070611
日記/20070616
日記/20070617
日記/20070618
日記/20070624
日記/20070628
日記/20070629
日記/20070630
日記/20070701
日記/20070702
日記/20070504 をテンプレートにして作成
開始行:
|[[''前の日記''>日記/20070502]]|[[''次の日記''>日記/20070505]]|
~
*20070504 設計実装中 [#j6f71131]
**Genericは便利です。[#i6f1cd0b]
C#でもGenericタイプが使えるようになりました。Javaよりやや遅れて。コレクションでは、わかりやすく、その恩恵にあやかることができます。~
private List<M2DVertex> _lstVertex;
型パラメータとしてM2DVertexを指定しますので、このListはM2DVertex用のリストということになります。いちいちキャストしなくて済むのでとっても便利な機能。~
ただ非ジェネリックなリストが''ArrayList''で、ジェネリックなリストが''List''っていうのがしっくこない。
Javaでは''List''は''ArrayList''のインタフェースクラスなので。''GenericArrayList''というネーミングにすればよかったのでは?
~
**クラス設計 [#c253d9ee]
***パッケージEtrobo.Simulator [#ue97f90e]
パスファインダー、コース、論理的なモーターなどを設計します。~
#ref(class_sim1.png,nolink);
と最初はこうしましたが、~
無意味に一般化してもしょうがないので、下のような''現実案''とすることにします。またSensorは分け合って独立事象にしました。~
#ref(class_sim2.png,nolink);
あとでC++用にさらにWrapperをかぶせる予定なので、あまりしつこい設計にしたくないというのが今回の''現実案''の理由です。~
~
***パッケージEtrobo.Kinematics [#k0b4a923]
さらに、パスファインダーの動作を計算する運動学用(切り替え可能)のクラスを追加しました。切り替え可能ですが現状ではAggregateではなくNavigate扱いにしておきます。設計をややこしくしたくないので、物理計算を切り替えたいときはこのクラスのサブクラスをつくっていって、PathFinderからつかうときは、クラス名そのものを書き換えることにします。~
ModelBaseの''Model''は物理モデルを意識しています。
#ref(class_sim3.png,nolink);
**実装 [#ab702ca6]
***親のコンストラクタでdelegate使うのはあり? [#o481f310]
delegateを使って。トリッキーな継承をやってみました。~
従来のC++とかだと、オブジェクトを作ってから、メソッドの関数ポインタを取得してきて、それを使用側であてがって使ったりしたところが、''delegate''と親クラスをあらわす''base''の柔軟性により1つにまとめて書くことができました。なんとなく地雷を踏んでいるようで怪しげなコードかも。。~
''Motor.cs''~
using System;
using System.Collections.Generic;
using System.Text;
namespace Misawat.Etrobo.Simulator
{
public class Motor
{
//SetMotorSpeedメソッドのデリゲート変数
SetMotorSpeed _func_SetMotorSpeed;
//回転方向 1:正転 -1:逆転
int _direction = 1;
//回転速度
int _speed = 0;
public Motor(SetMotorSpeed func_SetMotorSpeed)
{
_func_SetMotorSpeed = func_SetMotorSpeed;
}
public void Foward(int speed)
{
_speed = speed;
_direction = 1;
_func_SetMotorSpeed((double)(_direction * _speed));
}
public void Reverse(int speed)
{
_speed = speed;
_direction = -1;
_func_SetMotorSpeed((double)(_direction * _speed));
}
public void Speed(int speed)
{
_speed = speed;
_func_SetMotorSpeed((double)(_direction * _speed));
}
public void Brake()
{
//TBD
}
public void Off()
{
//TBD
}
}
}
''SteeringMotor.cs''~
using System;
using System.Collections.Generic;
using System.Text;
namespace Misawat.Etrobo.Simulator
{
public class SteeringMotor : Motor
{
public SteeringMotor(PathFinder pathFinder)
: base(pathFinder.SetSteeringMotorSpeed)
{
}
}
}
~
~
***Graphic.Misawa2D.Partsを振り返る [#uf125374]
昨日実装したところの修正をかけていて、クラス図の修正をしてみました。~
#ref(class_parts2.png,nolink);
グラフィックパーツはそれぞれ子要素をもっています。1つのモデルをくみ上げるときには複数のグラフィックパーツの親子関係を設定してツリーを作っていきます。~
つまり、再帰的にツリーを構成していく部分(''build()'')を''compositeパターン''として実現しているので、昨日のクラス図に少し補足をいれておきました。~
**実行イメージ [#zeb40298]
赤い点が旋回中心、円が定常円旋回軌道です。~
ステアリングの角度に対して定常円旋回計算式は正常に動作したようです。~
最後はステアリングの限界舵角を超えているので、旋回円は無効です。~
#ref(ani_radius.gif,nolink);
~
明日は、コースとのインタラクションをやります。おやすみなさい。~
~
|[[''前の日記''>日記/20070502]]|[[''次の日記''>日記/20070505]]|
~
終了行:
|[[''前の日記''>日記/20070502]]|[[''次の日記''>日記/20070505]]|
~
*20070504 設計実装中 [#j6f71131]
**Genericは便利です。[#i6f1cd0b]
C#でもGenericタイプが使えるようになりました。Javaよりやや遅れて。コレクションでは、わかりやすく、その恩恵にあやかることができます。~
private List<M2DVertex> _lstVertex;
型パラメータとしてM2DVertexを指定しますので、このListはM2DVertex用のリストということになります。いちいちキャストしなくて済むのでとっても便利な機能。~
ただ非ジェネリックなリストが''ArrayList''で、ジェネリックなリストが''List''っていうのがしっくこない。
Javaでは''List''は''ArrayList''のインタフェースクラスなので。''GenericArrayList''というネーミングにすればよかったのでは?
~
**クラス設計 [#c253d9ee]
***パッケージEtrobo.Simulator [#ue97f90e]
パスファインダー、コース、論理的なモーターなどを設計します。~
#ref(class_sim1.png,nolink);
と最初はこうしましたが、~
無意味に一般化してもしょうがないので、下のような''現実案''とすることにします。またSensorは分け合って独立事象にしました。~
#ref(class_sim2.png,nolink);
あとでC++用にさらにWrapperをかぶせる予定なので、あまりしつこい設計にしたくないというのが今回の''現実案''の理由です。~
~
***パッケージEtrobo.Kinematics [#k0b4a923]
さらに、パスファインダーの動作を計算する運動学用(切り替え可能)のクラスを追加しました。切り替え可能ですが現状ではAggregateではなくNavigate扱いにしておきます。設計をややこしくしたくないので、物理計算を切り替えたいときはこのクラスのサブクラスをつくっていって、PathFinderからつかうときは、クラス名そのものを書き換えることにします。~
ModelBaseの''Model''は物理モデルを意識しています。
#ref(class_sim3.png,nolink);
**実装 [#ab702ca6]
***親のコンストラクタでdelegate使うのはあり? [#o481f310]
delegateを使って。トリッキーな継承をやってみました。~
従来のC++とかだと、オブジェクトを作ってから、メソッドの関数ポインタを取得してきて、それを使用側であてがって使ったりしたところが、''delegate''と親クラスをあらわす''base''の柔軟性により1つにまとめて書くことができました。なんとなく地雷を踏んでいるようで怪しげなコードかも。。~
''Motor.cs''~
using System;
using System.Collections.Generic;
using System.Text;
namespace Misawat.Etrobo.Simulator
{
public class Motor
{
//SetMotorSpeedメソッドのデリゲート変数
SetMotorSpeed _func_SetMotorSpeed;
//回転方向 1:正転 -1:逆転
int _direction = 1;
//回転速度
int _speed = 0;
public Motor(SetMotorSpeed func_SetMotorSpeed)
{
_func_SetMotorSpeed = func_SetMotorSpeed;
}
public void Foward(int speed)
{
_speed = speed;
_direction = 1;
_func_SetMotorSpeed((double)(_direction * _speed));
}
public void Reverse(int speed)
{
_speed = speed;
_direction = -1;
_func_SetMotorSpeed((double)(_direction * _speed));
}
public void Speed(int speed)
{
_speed = speed;
_func_SetMotorSpeed((double)(_direction * _speed));
}
public void Brake()
{
//TBD
}
public void Off()
{
//TBD
}
}
}
''SteeringMotor.cs''~
using System;
using System.Collections.Generic;
using System.Text;
namespace Misawat.Etrobo.Simulator
{
public class SteeringMotor : Motor
{
public SteeringMotor(PathFinder pathFinder)
: base(pathFinder.SetSteeringMotorSpeed)
{
}
}
}
~
~
***Graphic.Misawa2D.Partsを振り返る [#uf125374]
昨日実装したところの修正をかけていて、クラス図の修正をしてみました。~
#ref(class_parts2.png,nolink);
グラフィックパーツはそれぞれ子要素をもっています。1つのモデルをくみ上げるときには複数のグラフィックパーツの親子関係を設定してツリーを作っていきます。~
つまり、再帰的にツリーを構成していく部分(''build()'')を''compositeパターン''として実現しているので、昨日のクラス図に少し補足をいれておきました。~
**実行イメージ [#zeb40298]
赤い点が旋回中心、円が定常円旋回軌道です。~
ステアリングの角度に対して定常円旋回計算式は正常に動作したようです。~
最後はステアリングの限界舵角を超えているので、旋回円は無効です。~
#ref(ani_radius.gif,nolink);
~
明日は、コースとのインタラクションをやります。おやすみなさい。~
~
|[[''前の日記''>日記/20070502]]|[[''次の日記''>日記/20070505]]|
~
ページ名: