概要
メタバースを使った、ドローン自動運転シュミレーターを提供します。
詳細
エージェント(ドローン)が環境で、自動運転するシュミレータを作り、結果をwebsocketに出力、neosvrで受け取り、BOXを移動させる。
websocketサーバーは、elixirで準備します。
エージェントと環境は、Plunkerで提供します。
設定は、ドローンが、8の字飛行運転を続けるシュミレーターです。
各ポイントは、以下です。
var point1 = {
'x': 50,
'y': 100
};
var point3 = {
'x': 50,
'y': 200
};
var point2 = {
'x': 250,
'y': 100
};
var point4 = {
'x': 250,
'y': 200
};
ドローンは、ステートマシンを持っていて、ポイントをクリアすれば、次のポイントに向かいます。
ドローンは、X,Yを得て、自分で判断します。
環境は、60fpsで更新し、ドローンを移動し、位置を更新します。
環境は、Box2dです。2軸しかありません。
環境には、重力をかけています。
ドローンは、位置を受け取り、方向量ベクトルを出力します。
ドローンは、PID制御されています。
2個使っています。
var Agent3 = function() {
this.err2 = 0;
this.err = 0;
this.P = 0;
this.I = 0;
this.D = 0;
};
Agent3.prototype.get_action = function(setPoint, input) {
var Kp = 100;
var Ki = 22;
var Kd = 22;
var dt = 0.01;
this.P = setPoint - input;
this.I += this.P * dt;
this.D = (this.P - this.err2) / dt;
var u = Kp * this.P + Ki * this.I + Kd * this.D;
this.err2 = this.err;
this.err = this.P;
return u;
}
さらに、ドローンの位置情報をwebsocketで、垂れ流しします。
neosvrは、ドローンの位置情報をwebsocketで受け取り、BOXを移動させます。
写真
成果物
以上。