Timing Improvements Complete (233 Miliseconds down to 9 Milliseconds -- 224 Milliseconds Saved)
This commit is contained in:
@@ -13,26 +13,25 @@ class scaleFactor():
|
|||||||
class AircraftLandingModel(pyactr.ACTRModel):
|
class AircraftLandingModel(pyactr.ACTRModel):
|
||||||
def __init__(self,client):
|
def __init__(self,client):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
# Initialize the declarative memory (DM)
|
|
||||||
# self.decmem.add(
|
|
||||||
# [
|
|
||||||
# ("airspeed", 100), # Current airspeed (e.g., 100 knots)
|
|
||||||
# ("roll", 0), # Current roll (0 for wings level)
|
|
||||||
# ("heading", 0), # Current heading
|
|
||||||
# ("descent_rate", 500), # Current descent rate in fpm
|
|
||||||
# ("target_airspeed", 80), # Target airspeed during descent
|
|
||||||
# ("target_roll", 0), # Target roll (wings level)
|
|
||||||
# ("target_heading", 90), # Target heading (runway heading)
|
|
||||||
# ("target_descent_rate", 500) # Target descent rate (fpm)
|
|
||||||
# ]
|
|
||||||
# )
|
|
||||||
|
|
||||||
self.client = client
|
self.client = client
|
||||||
# TODO: CHANGE TO GETDREFS, respect the runtime calculations.....didnt you learn your lesson on the algorithms midterm
|
|
||||||
# TODO: Change sendDref to send DREFS
|
|
||||||
# TODO: look for any rouge get/sendCTRL methods
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
Setting DREF variables and loading into drefs array
|
||||||
|
"""
|
||||||
|
airspeedDREF = "sim/cockpit2/gauges/indicators/airspeed_kts_pilot"
|
||||||
|
rollDREF = "sim/cockpit2/gauges/indicators/roll_AHARS_deg_pilot"
|
||||||
|
magneticHeadingDREF = "sim/cockpit2/gauges/indicators/heading_AHARS_deg_mag_pilot"
|
||||||
|
verticalSpeedDREF = "sim/flightmodel/position/vh_ind_fpm"
|
||||||
|
altitudeAGLDREF = "sim/flightmodel/position/y_agl"
|
||||||
|
pitchDREF = "sim/flightmodel/position/true_theta"
|
||||||
|
brakeDREF = "sim/cockpit2/controls/parking_brake_ratio"
|
||||||
|
wheelSpeedDREF = "sim/flightmodel2/gear/tire_rotation_speed_rad_sec"
|
||||||
|
wheelWeightDREF = "sim/flightmodel/parts/tire_vrt_def_veh"
|
||||||
|
self.sources = [airspeedDREF,rollDREF,magneticHeadingDREF,verticalSpeedDREF,altitudeAGLDREF,pitchDREF,brakeDREF,wheelSpeedDREF,wheelWeightDREF]
|
||||||
|
|
||||||
|
"""
|
||||||
|
Initial Initialization of destination Variables and loading into destinations array
|
||||||
|
"""
|
||||||
airspeed = self.client.getDREF("sim/cockpit2/gauges/indicators/airspeed_kts_pilot")
|
airspeed = self.client.getDREF("sim/cockpit2/gauges/indicators/airspeed_kts_pilot")
|
||||||
roll = self.client.getDREF("sim/cockpit2/gauges/indicators/roll_AHARS_deg_pilot")
|
roll = self.client.getDREF("sim/cockpit2/gauges/indicators/roll_AHARS_deg_pilot")
|
||||||
heading = self.client.getDREF("sim/cockpit2/gauges/indicators/heading_AHARS_deg_mag_pilot")
|
heading = self.client.getDREF("sim/cockpit2/gauges/indicators/heading_AHARS_deg_mag_pilot")
|
||||||
@@ -44,48 +43,37 @@ class AircraftLandingModel(pyactr.ACTRModel):
|
|||||||
wheelW = self.client.getDREF("sim/flightmodel/parts/tire_vrt_def_veh")
|
wheelW = self.client.getDREF("sim/flightmodel/parts/tire_vrt_def_veh")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Update the model's declarative memory
|
|
||||||
# model.declarative_memory["airspeed"] = airspeed
|
|
||||||
# model.declarative_memory["roll"] = roll
|
|
||||||
# model.declarative_memory["heading"] = heading
|
|
||||||
# model.declarative_memory["descent_rate"] = descent_rate
|
|
||||||
|
|
||||||
self.airspeed = airspeed[0]
|
self.airspeed = airspeed[0]
|
||||||
self.roll = roll[0]
|
self.roll = roll[0]
|
||||||
self.heading = heading[0]
|
self.heading = heading[0]
|
||||||
self.descent_rate = descent_rate[0]
|
self.descent_rate = descent_rate[0]
|
||||||
self.altitude = altitude[0]
|
self.altitude = altitude[0]
|
||||||
self.brakes = brake[0]
|
|
||||||
# print(wheelS)
|
|
||||||
self.wheelSpeed = wheelS[0]
|
|
||||||
|
|
||||||
self.wheelWeight = wheelW[0]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#Flare Specific Parameters
|
|
||||||
self.flare = False
|
|
||||||
self.pitch = pitch[0]
|
self.pitch = pitch[0]
|
||||||
|
self.brakes = brake[0]
|
||||||
#Rollout Specific Parameters
|
self.wheelSpeed = wheelS[0]
|
||||||
self.rollOut = False
|
self.wheelWeight = wheelW[0]
|
||||||
|
self.destinations = [self.airspeed,self.roll,self.heading,self.descent_rate,self.altitude,self.pitch,self.brakes,self.wheelSpeed,self.wheelWeight]
|
||||||
|
|
||||||
|
"""
|
||||||
|
Initial Initialization of target Values
|
||||||
|
"""
|
||||||
|
|
||||||
self.target_airspeed = 80
|
self.target_airspeed = 80
|
||||||
self.target_roll = 0
|
self.target_roll = 0
|
||||||
self.target_heading = self.heading #Track heading from initialization
|
self.target_heading = self.heading #Track heading from initialization
|
||||||
self.target_descent_rate = 500
|
self.target_descent_rate = 500
|
||||||
|
self.target_altitude = -998
|
||||||
self.target_pitch = 20
|
self.target_pitch = 20
|
||||||
|
self.targets = [self.target_airspeed,self.target_roll,self.target_heading,self.target_descent_rate,self.target_altitude,self.target_pitch]
|
||||||
|
|
||||||
|
|
||||||
|
#State Flags (Boolean) & Current State (Integer)
|
||||||
|
self.descent = False
|
||||||
|
self.flare = False
|
||||||
|
self.rollOut = False
|
||||||
|
self.currentState = 0
|
||||||
|
self.stateFlags = [self.descent,self.flare,self.rollOut]
|
||||||
|
|
||||||
|
|
||||||
# Declare the state for previous values
|
# Declare the state for previous values
|
||||||
self.previous_airspeed = None
|
self.previous_airspeed = None
|
||||||
self.previous_roll = None
|
self.previous_roll = None
|
||||||
@@ -107,6 +95,23 @@ class AircraftLandingModel(pyactr.ACTRModel):
|
|||||||
# self.Ki = 2 # Integral gain
|
# self.Ki = 2 # Integral gain
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
Variable Atlas Schema: source => destination => target
|
||||||
|
"""
|
||||||
|
# self.variableAtlas = list(xrange(1000))
|
||||||
|
# idx = 0
|
||||||
|
# while(idx < len(self.sources) - 1):
|
||||||
|
# self.variableAtlas[0] = [self.sources[idx],self.destinations[idx],self.targets[idx]]
|
||||||
|
# idx += 1
|
||||||
|
|
||||||
|
|
||||||
|
def getAndLoadDREFS(self):
|
||||||
|
results = self.client.getDREFs(self.sources)
|
||||||
|
idx = 0
|
||||||
|
while(idx < len(results) - 2):
|
||||||
|
self.destinations[idx] = results[idx][0]
|
||||||
|
idx += 1
|
||||||
|
|
||||||
|
|
||||||
def printControls(self,calculated,errors,yokePull,yokeSteer,rudder,throttle):
|
def printControls(self,calculated,errors,yokePull,yokeSteer,rudder,throttle):
|
||||||
print("In print controls")
|
print("In print controls")
|
||||||
@@ -287,6 +292,9 @@ class AircraftLandingModel(pyactr.ACTRModel):
|
|||||||
|
|
||||||
# Update the model's DM based on X-Plane data
|
# Update the model's DM based on X-Plane data
|
||||||
def update_aircraft_state(self):
|
def update_aircraft_state(self):
|
||||||
|
"""
|
||||||
|
Slower Method
|
||||||
|
"""
|
||||||
# print("In aircraft state")
|
# print("In aircraft state")
|
||||||
# print("Entered Update Aircraft State")
|
# print("Entered Update Aircraft State")
|
||||||
# Retrieve current data from X-Plane
|
# Retrieve current data from X-Plane
|
||||||
@@ -294,7 +302,6 @@ class AircraftLandingModel(pyactr.ACTRModel):
|
|||||||
roll = self.client.getDREF("sim/cockpit2/gauges/indicators/roll_AHARS_deg_pilot")
|
roll = self.client.getDREF("sim/cockpit2/gauges/indicators/roll_AHARS_deg_pilot")
|
||||||
heading = self.client.getDREF("sim/cockpit2/gauges/indicators/heading_AHARS_deg_mag_pilot")
|
heading = self.client.getDREF("sim/cockpit2/gauges/indicators/heading_AHARS_deg_mag_pilot")
|
||||||
descent_rate = self.client.getDREF("sim/flightmodel/position/vh_ind_fpm")
|
descent_rate = self.client.getDREF("sim/flightmodel/position/vh_ind_fpm")
|
||||||
# altitudeMSL = self.client.getDREF("sim/cockpit2/gauges/indicators/altitude_ft_pilot")
|
|
||||||
altitudeAGL = self.client.getDREF("sim/flightmodel/position/y_agl")
|
altitudeAGL = self.client.getDREF("sim/flightmodel/position/y_agl")
|
||||||
|
|
||||||
pitch = self.client.getDREF("sim/flightmodel/position/true_theta")
|
pitch = self.client.getDREF("sim/flightmodel/position/true_theta")
|
||||||
@@ -303,13 +310,7 @@ class AircraftLandingModel(pyactr.ACTRModel):
|
|||||||
wheelS = self.client.getDREF("sim/flightmodel2/gear/tire_rotation_speed_rad_sec")
|
wheelS = self.client.getDREF("sim/flightmodel2/gear/tire_rotation_speed_rad_sec")
|
||||||
wheelW = self.client.getDREF("sim/flightmodel/parts/tire_vrt_def_veh")
|
wheelW = self.client.getDREF("sim/flightmodel/parts/tire_vrt_def_veh")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Update the model's declarative memory
|
|
||||||
# model.declarative_memory["airspeed"] = airspeed
|
|
||||||
# model.declarative_memory["roll"] = roll
|
|
||||||
# model.declarative_memory["heading"] = heading
|
|
||||||
# model.declarative_memory["descent_rate"] = descent_rate
|
|
||||||
|
|
||||||
self.airspeed = airspeed[0]
|
self.airspeed = airspeed[0]
|
||||||
self.roll = roll[0]
|
self.roll = roll[0]
|
||||||
@@ -321,9 +322,14 @@ class AircraftLandingModel(pyactr.ACTRModel):
|
|||||||
self.wheelWeight = wheelW[0]
|
self.wheelWeight = wheelW[0]
|
||||||
self.brakes = brake[0]
|
self.brakes = brake[0]
|
||||||
|
|
||||||
##Phase Change Indicator
|
#Phase Change Indicator
|
||||||
# wheelWeight = self.client.getDREF("sim/flightmodel/parts/tire_vrt_def_veh") #Strut deflection, Weight on the wheels
|
wheelWeight = self.client.getDREF("sim/flightmodel/parts/tire_vrt_def_veh") #Strut deflection, Weight on the wheels
|
||||||
# wheelRate = self.client.getDREF("sim/flightmodel2/gear/tire_rotation_speed_rad_sec") #Wheel Rotation Rate
|
wheelRate = self.client.getDREF("sim/flightmodel2/gear/tire_rotation_speed_rad_sec") #Wheel Rotation Rate
|
||||||
|
|
||||||
|
"""
|
||||||
|
Faster Method
|
||||||
|
"""
|
||||||
|
# self.getAndLoadDREFS()
|
||||||
|
|
||||||
if(self.altitude <= 20):
|
if(self.altitude <= 20):
|
||||||
self.flare = True
|
self.flare = True
|
||||||
|
|||||||
@@ -5,11 +5,10 @@ from cognitiveModel import AircraftLandingModel
|
|||||||
|
|
||||||
def ex():
|
def ex():
|
||||||
|
|
||||||
print("X-Plane Connect example script")
|
print("Model Test: Xplane setting up connection")
|
||||||
print("Setting up simulation")
|
print("Setting up simulation")
|
||||||
with xpc.XPlaneConnect() as client:
|
with xpc.XPlaneConnect() as client:
|
||||||
# Verify connection
|
# Verify connection
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# If X-Plane does not respond to the request, a timeout error
|
# If X-Plane does not respond to the request, a timeout error
|
||||||
# will beff raised.
|
# will beff raised.
|
||||||
@@ -19,8 +18,7 @@ def ex():
|
|||||||
print("Exiting...")
|
print("Exiting...")
|
||||||
return
|
return
|
||||||
cogModel = AircraftLandingModel(client)
|
cogModel = AircraftLandingModel(client)
|
||||||
|
# # Set position of the player aircraft
|
||||||
# # Set position of the player aircraft
|
|
||||||
# print("Setting position")
|
# print("Setting position")
|
||||||
# # Lat Lon Alt Pitch Roll Yaw Gear
|
# # Lat Lon Alt Pitch Roll Yaw Gear
|
||||||
# posi = [37.524, -122.06899, 2500, 0, 0, 0, 1]
|
# posi = [37.524, -122.06899, 2500, 0, 0, 0, 1]
|
||||||
@@ -66,6 +64,24 @@ def ex():
|
|||||||
# ]
|
# ]
|
||||||
# client.sendDATA(data)
|
# client.sendDATA(data)
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
Set orientation and Position
|
||||||
|
16 - Angular Velocities
|
||||||
|
17 - PitchRoll and Headings
|
||||||
|
18 - Angle of Attack
|
||||||
|
20 - Latitude and Longitude
|
||||||
|
"""
|
||||||
|
print("Setting orientation for test")
|
||||||
|
data = [\
|
||||||
|
[16, -998, -998, -998, -998, -998, -998, -998, -998],
|
||||||
|
[17, -998, -998, -998, -998, -998, -998, -998, -998],\
|
||||||
|
[18, -998, -998, -998, -998, -998, -998, -998, -998],\
|
||||||
|
[19, -998, -998, -998, -998, -998, -998, -998, -998],\
|
||||||
|
[20, -998, -998, -998, -998, -998, -998, -998, -998]\
|
||||||
|
]
|
||||||
|
client.sendDATA(data)
|
||||||
|
|
||||||
# Set control surfaces and throttle of the player aircraft using sendCTRL
|
# Set control surfaces and throttle of the player aircraft using sendCTRL
|
||||||
print("Setting controls")
|
print("Setting controls")
|
||||||
ctrl = [0.0, 0.0, 0.0, 0.0]
|
ctrl = [0.0, 0.0, 0.0, 0.0]
|
||||||
@@ -78,28 +94,21 @@ def ex():
|
|||||||
clockStart = time.time()
|
clockStart = time.time()
|
||||||
#Doing stuff In between Test SECOND INCREMENTS
|
#Doing stuff In between Test SECOND INCREMENTS
|
||||||
while(count < 1000000):
|
while(count < 1000000):
|
||||||
clockStart = time.time()
|
clockStart = time.time() #START TIMER
|
||||||
|
|
||||||
|
|
||||||
client.pauseSim(True) # Pause Simulator
|
client.pauseSim(True) # Pause Simulator
|
||||||
#Run Model (Send commands to simulator within this process)
|
|
||||||
|
#Run Model
|
||||||
cogModel.update_aircraft_state()
|
cogModel.update_aircraft_state()
|
||||||
cogModel.update_controls_simultaneously()
|
cogModel.update_controls_simultaneously()
|
||||||
client.pauseSim(False) #Unpause
|
|
||||||
|
|
||||||
clockEnd = time.time()
|
client.pauseSim(False) #Unpause Simulator
|
||||||
|
clockEnd = time.time() # STOP TIMER
|
||||||
count+=1
|
count+=1
|
||||||
print("Clock Time: " + str(clockEnd - clockStart))
|
print("Clock Time: " + str(clockEnd - clockStart)) ## LOG TIME TAKEN
|
||||||
sleep(0.05) # Run 50 Milliseconds
|
sleep(0.05) # LET Simulator Run 50 Milliseconds
|
||||||
##Would need to be logging data during the sleep time......but the code is "sleeping"....multithread?
|
|
||||||
#Repeat
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
print("End of Python client example")
|
print("Model has finished running")
|
||||||
#Copy data.txt to the cloudddddd using python magic and accurate filepaths
|
#Copy data.txt to the cloudddddd using python magic and accurate filepaths
|
||||||
|
|
||||||
input("Press any key to exit...")
|
input("Press any key to exit...")
|
||||||
|
|||||||
Reference in New Issue
Block a user