
AIミサイルに位置座標を与えるNasalプログラム
未解決のまま放置していて気になっているもののひとつが、コンピュータまかせで自動的に発射されるAIミサイルをつくることです。
Flightearでは、ballisticがsubmodels.xmlに記述する以外は使えなくなり、またtranslateが動かないというかtranslate用のpropertyが効かなくなって、コンピュータにプログラムを実行させて地上からAIロケットを打ち上げることができなくなっていたものです。
###########################################################
# rocket_launch.nas by virt_fly
# 2014/04/03
#
###########################################################
var rocket_speed = 70;
var rocket_pitch =30;
var rocket_dir =70;
print ("rocket_speed:" , rocket_speed);
print ("rocket_pitch:" , rocket_pitch);
var vertical_change =math.sin(rocket_pitch*math.pi / 180.0)*rocket_speed;
var horizontal_change =math.cos(rocket_pitch*math.pi / 180.0)*rocket_speed;
print ("vertical_change:" , vertical_change);
print ("horizontal_change:" , horizontal_change);
print ("rocket_dir:" , rocket_dir);
var latche = math.cos(rocket_dir*math.pi / 180.0)*horizontal_change;
var lonche = math.sin(rocket_dir*math.pi / 180.0)*horizontal_change;
var rocket_launch = func {
var sec = getprop("/sim/time/elapsed-sec");
var property_alt=getprop("/ai/models/tanker[0]/position/altitude-ft");
if (property_alt==nil){
var oldalt=0;
}else{
var oldalt=getprop("/ai/models/tanker[0]/position/altitude-ft");
}
var newalt = vertical_change*3.2808+oldalt;
var property_lat=getprop("/ai/models/tanker[0]/position/latitude-deg");
if (property_lat==nil){
var oldlat=0;
}else{
var oldlat=getprop("/ai/models/tanker[0]/position/latitude-deg");
}
var newlat = latche*360.0/40000000+oldlat;
var property_lon=getprop("/ai/models/tanker[0]/position/longitude-deg");
if (property_lon==nil){
var oldlon=0;
}else{
var oldlon=getprop("/ai/models/tanker[0]/position/longitude-deg");
}
var newlon = lonche*360.0/(math.cos(newlat*math.pi / 180.0)*40000000)+oldlon;
print ("newalt:" , newalt," newlat:" , newlat," newlon:" , newlon);
interpolate("/ai/models/tanker[0]/position/altitude-ft", newalt, 1);
interpolate("/ai/models/tanker[0]/position/latitude-deg", newlat, 1);
interpolate("/ai/models/tanker[0]/position/longitude-deg", newlon, 1);
settimer(func { rocket_launch(); }, 0.1 );
}
_setlistener("/sim/signals/fdm-initialized", func { rocket_launch(); });


