Beispiel #1
0
def makePlane(line):
    # Eliminiate white space and separate values
    line = line.strip().split()
    # Create instance of Airplane with values
    thisPlane = Airplane(line[0], line[1])

    return thisPlane
def SpawnAirplanes(name, A1, A2, pMut=1.0/25.0):
    Genome = (name,)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].Engine,)
    else: Genome += (random.choice(Engines),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].Airfoil,)
    else: Genome += (random.choice(Airfoils),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].Chord,)
    else: Genome += (random.uniform(*GeoLims['Chord']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].Span,)
    else: Genome += (random.uniform(*GeoLims['Span']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].FlapX,)
    else: Genome += (random.uniform(*GeoLims['FlapX']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].FlapAngle,)
    else: Genome += (random.uniform(*GeoLims['FlapAngle']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].FuseBoxLen,)
    else: Genome += (random.uniform(*GeoLims['FuseBoxLen']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].FusePyramidLen,)
    else: Genome += (random.uniform(*GeoLims['FusePyramidLen']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].FuseWidth,)
    else: Genome += (random.uniform(*GeoLims['FuseWidth']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].FuseHeight,)
    else: Genome += (random.uniform(*GeoLims['FuseHeight']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].TailFoil,)
    else: Genome += (random.choice(TailFoils),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].HTailChord,)
    else: Genome += (random.uniform(*GeoLims['HTailChord']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].VTailChord,)
    else: Genome += (random.uniform(*GeoLims['VTailChord']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].HTailSpan,)
    else: Genome += (random.uniform(*GeoLims['HTailSpan']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].VTailSpan,)
    else: Genome += (random.uniform(*GeoLims['VTailSpan']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].MGTW,)
    else: Genome += (random.uniform(*GeoLims['MGTW']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].Sheet,)
    else: Genome += (random.choice(Sheets),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].Payload,)
    else: Genome += (random.uniform(*GeoLims['Payload']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].CruiseAlt,)
    else: Genome += (random.uniform(*GeoLims['CruiseAlt']),)
    if random.random() > pMut: Genome += (random.choice([A1, A2])[1].ExtrasWeight,)
    else: Genome += (random.uniform(*GeoLims['ExtrasWeight']),)
    
    A = Airplane.Airplane(*Genome)    
    return (FitnessFunction(A), A)
def MakeRandomAirplane(name):
    A = Airplane.Airplane(name,\
        random.choice(Engines),\
        random.choice(Airfoils),\
        random.uniform(*GeoLims['Chord']),\
        random.uniform(*GeoLims['Span']),\
        random.uniform(*GeoLims['FlapX']),\
        random.uniform(*GeoLims['FlapAngle']),\
        random.uniform(*GeoLims['FuseBoxLen']),\
        random.uniform(*GeoLims['FusePyramidLen']),\
        random.uniform(*GeoLims['FuseWidth']),\
        random.uniform(*GeoLims['FuseHeight']),\
        random.choice(TailFoils),\
        random.uniform(*GeoLims['HTailChord']),\
        random.uniform(*GeoLims['VTailChord']),\
        random.uniform(*GeoLims['HTailSpan']),\
        random.uniform(*GeoLims['VTailSpan']),\
        random.uniform(*GeoLims['MGTW']),\
        random.choice(Sheets),\
        random.uniform(*GeoLims['Payload']),\
        random.uniform(*GeoLims['CruiseAlt']),\
        random.uniform(*GeoLims['ExtrasWeight']))
        
    return (FitnessFunction(A), A)
Beispiel #4
0
def start(airplane_config, snd_bk_snsrs=True):
    global fms_thread, craft, magnetic_declination_db, send_back_sensors
    send_back_sensors = snd_bk_snsrs
    rcfg = open(airplane_config, 'r')
    rlines = rcfg.readlines()
    rcfg.close()
    if not rlines:
        raise RuntimeError('Empty config file: %s' % sys.argv[1])

    craft = Airplane.Airplane()
    craft.initialize(rlines)

    pitchdb = fix.db.get_item(Globals.FD_PITCH_KEY, True)
    pitchdb.min = -90
    pitchdb.max = 90
    rolldb = fix.db.get_item(Globals.FD_ROLL_KEY, True)
    rolldb.min = -90
    rolldb.max = 90

    altitude_source_db = fix.db.get_item(Globals.ALTITUDE_SOURCE_KEY, True)
    altitude_source_db.dtype = 'int'
    altitude_source = altitude_source_db.value
    altitude_source_db.valueChanged[int].connect(ALTITUDE_SOURCE_changed)
    selected_altitude_db = fix.db.get_item(Globals.SELECTED_ALTITUDE_KEY, True)
    selected_altitude_db.dtype = 'int'
    selected_altitude_db.min = -1000
    selected_altitude_db.max = 60000
    selected_altitude_db.value = 10000
    selected_altitude = selected_altitude_db.value
    selected_altitude_db.valueChanged[int].connect(SELECTED_ALTITUDE_changed)
    selected_airspeed_db = fix.db.get_item(Globals.SELECTED_AIRSPEED_KEY, True)
    selected_airspeed_db.dtype = 'int'
    selected_airspeed_db.min = 10
    selected_airspeed_db.max = 1000
    selected_airspeed_db.value = 120
    selected_airspeed = selected_airspeed_db.value
    selected_airspeed_db.valueChanged[int].connect(SELECTED_AIRSPEED_changed)
    selected_heading_db = fix.db.get_item(Globals.SELECTED_HEADING_KEY, True)
    selected_heading_db.dtype = 'int'
    selected_heading_db.min = 0
    selected_heading_db.max = 359
    selected_heading = selected_heading_db.value
    selected_heading_db.valueChanged[int].connect(SELECTED_HEADING_changed)
    selected_climb_rate_db = fix.db.get_item(Globals.SELECTED_CLIMB_RATE_KEY,
                                             True)
    selected_climb_rate_db.dtype = 'int'
    selected_climb_rate_db.min = -10000
    selected_climb_rate_db.max = 10000
    selected_climb_rate_db.value = 500
    selected_climb_rate = selected_climb_rate_db.value
    selected_climb_rate_db.valueChanged[int].connect(
        SELECTED_CLIMB_RATE_changed)
    magnetic_declination_db = fix.db.get_item(Globals.MAGNETIC_DECLINATION_KEY)
    ap_on_db = fix.db.get_item(Globals.AP_ON_KEY, True)
    ap_on_db.dtype = 'bool'
    fd_on_db = fix.db.get_item(Globals.FD_ON_KEY, True)
    fd_on_db.dtype = 'bool'
    ap_on_db.valueChanged[bool].connect(AP_ON_changed)
    hnav_mode_db = fix.db.get_item(Globals.HNAV_MODE_KEY, True)
    hnav_mode_db.dtype = 'int'
    hnav_mode = hnav_mode_db.value
    hnav_mode_db.valueChanged[int].connect(HNAV_MODE_changed)
    vnav_mode_db = fix.db.get_item(Globals.VNAV_MODE_KEY, True)
    vnav_mode_db.dtype = 'int'
    vnav_mode = vnav_mode_db.value
    vnav_mode_db.valueChanged[int].connect(VNAV_MODE_changed)
    start_strategy_db = fix.db.get_item(Globals.START_STRATEGY_KEY, True)
    start_strategy_db.dtype = 'int'
    start_strategy = start_strategy_db.value
    start_strategy_db.valueChanged[int].connect(START_STRATEGY_changed)
    selected_turn_rate_db = fix.db.get_item(Globals.SELECTED_TURN_RATE_KEY,
                                            True)
    selected_turn_rate = selected_turn_rate_db.value
    selected_pitch_db = fix.db.get_item(Globals.SELECTED_PITCH_KEY, True)
    selected_pitch_db.dtype = 'int'
    selected_pitch_db.min = 0
    selected_pitch_db.max = 40
    selected_pitch_db.value = 5
    selected_pitch = selected_pitch_db.value
    selected_pitch_db.valueChanged[int].connect(SELECTED_PITCH_changed)
    selected_glideslope_db = fix.db.get_item(Globals.SELECTED_GLIDESLOPE_KEY,
                                             True)
    selected_glideslope = selected_glideslope_db.value
    selected_waypoint_db = fix.db.get_item(Globals.SELECTED_WAYPOINT_KEY, True)
    selected_waypoint_db.dtype = 'int'
    selected_waypoint_db.min = 0
    selected_waypoint_db.max = 256
    selected_waypoint_db.value = 0
    selected_waypoint_db.valueChanged[int].connect(SELECTED_WAYPOINT_changed)

    CreateWaypoints()
    waypoints, WP_altitudes = ReadWaypoints()
    ConnectWaypoints()

    craft.initialize_input(selected_altitude, selected_airspeed,
                           selected_heading - magnetic_declination_db.value,
                           selected_climb_rate, hnav_mode, vnav_mode,
                           altitude_source, start_strategy, waypoints,
                           WP_altitudes, selected_turn_rate, selected_pitch,
                           selected_glideslope)

    fms_thread = threading.Thread(target=thread_run)
    fms_thread.start()
Beispiel #5
0
class FlightSimulator():
    def __init__(self, width, height):
        self.width = width
        self.height = height
        self.delay = 30

        self.wX = 0
        self.wY = 0
        self.wZ = 0

        self.zoom = 1
        self.deltaZoom = 0.1

        self.previousMouseX = 0
        self.previousMouseY = 0

        self.cameraDistance = 25
        self.cameraHeight = 4

        self.cameraX = 0 + self.cameraDistance
        self.cameraY = 4
        self.cameraZ = 0

        self.cameraXRot = 0
        self.cameraZRot = 0

        self.cameraRotSpeed = 1.5

        self.debug = False

        self.flyingSpeed = 1

        glutInit(sys.argv)
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH
                            | GLUT_MULTISAMPLE)

        glutInitWindowSize(self.width, self.height)
        self.window = glutCreateWindow("Flight Simulator")

        glutDisplayFunc(self.draw)

        self.initGL()

        glutTimerFunc(self.delay, self.timer, self.delay)
        glutMouseFunc(self.mouse)
        glutSpecialFunc(self.specialKeys)
        glutMotionFunc(self.mouseDrag)
        glutKeyboardFunc(self.keys)

        self.a = 0

    def initGL(self):
        # self.loadTextures()
        # glEnable(GL_TEXTURE_2D)

        # glShadeModel(GL_FLAT)

        mat_ambient = (0.6, 0.0, 0.0, 1.0)
        mat_diffuse = (0, 0.0, 1.0, 1.0)
        mat_specular = (1.0, 1.0, 1.0, 1.0)
        mat_shininess = (10, )

        glClearColor(69 / 255, 160 / 255, 200 / 255, 1.0)
        glShadeModel(GL_SMOOTH)

        glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient)
        glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse)
        glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular)
        glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess)

        glEnable(GL_LIGHTING)
        self.light_position = (0, 10, 0, .4)
        glEnable(GL_LIGHT0)

        glClearDepth(1.0)
        glMatrixMode(GL_PROJECTION)
        gluPerspective(45, self.width / self.height, 0.1, 100000.0)
        # glMatrixMode(GL_MODELVIEW)

        glEnable(GL_DEPTH_TEST)
        glEnable(GL_MULTISAMPLE)

        self.loadObjects()

    def loadObjects(self):
        self.airplane = Airplane()
        self.terrain = Terrain(self.width, self.height)

    def loadTextures(self):
        self.textures = glGenTextures(2)

        ################################################################################
        glBindTexture(GL_TEXTURE_2D, self.textures[0])
        reader = png.Reader(filename='textures/sky.png')
        w, h, pixels, metadata = reader.read_flat()
        if (metadata['alpha']):
            modo = GL_RGBA
        else:
            modo = GL_RGB
        glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
        glTexImage2D(GL_TEXTURE_2D, 0, modo, w, h, 0, modo, GL_UNSIGNED_BYTE,
                     pixels.tolist())
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT)
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)
        ################################################################################

        glBindTexture(GL_TEXTURE_2D, self.textures[1])
        reader = png.Reader(filename='textures/PicknGO.png')
        w, h, pixels, metadata = reader.read_flat()
        if (metadata['alpha']):
            modo = GL_RGBA
        else:
            modo = GL_RGB
        glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
        glTexImage2D(GL_TEXTURE_2D, 0, modo, w, h, 0, modo, GL_UNSIGNED_BYTE,
                     pixels.tolist())
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT)
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)

    def timer(self, i):
        glutPostRedisplay()
        value = i + self.delay

        self.airplane.timer(self.delay, value)
        self.terrain.timer(self.delay, value)

        glutTimerFunc(self.delay, self.timer, value)

    def run(self):
        glutMainLoop()

    def mouse(self, btn, state, mouseX, mouseY):
        # btn -> 0 == botao esquerdo; 1 == botao rolagem; 2 == botao direito; 3 == rolagem para cima; 4 == rolagem para baixo
        if btn == 3:
            # self.zoom -= self.deltaZoom
            self.zoomCamera(0.8)
        if btn == 4:
            # self.zoom += self.deltaZoom
            self.zoomCamera(1.1)

        if btn == 0 and state == 0:
            self.previousMouseX = mouseX
            self.previousMouseY = mouseY
            self.isDragging = True
        if btn == 0 and state == 1:
            self.isDragging = False
        # if btn == 2 and state == 0:
        #     pause_rotation = not pause_rotation

        print(mouseX, mouseY)

    def mouseDrag(self, x, y):
        if self.isDragging:

            self.terrain.mouse(x, y, self.previousMouseX, self.previousMouseY)

            # self.rotateCameraHorizontal((x-self.previousMouseX))
            # self.rotateCameraVertical((y-self.previousMouseY))
            self.previousMouseX = x
            self.previousMouseY = y

    def specialKeys(self, key, x, y):
        # self.airplane.command(key)
        self.terrain.command(key)

        glutPostRedisplay()

    def keys(self, key, x, y):
        # self.airplane.command(key)
        self.terrain.command(key)

        if key == b'p':
            self.debug != self.debug
        if key == b'r':
            del self.airplane
            del self.terrain
            self.loadObjects()

        if key == b'i':
            self.rotateCameraHorizontal(self.cameraRotSpeed)
            # self.cameraXRot += 0.1
            # self.cameraZRot += 0.1
        if key == b't':
            self.a += 1

        if key == b'o':
            self.rotateCameraHorizontal(-self.cameraRotSpeed)
            # self.cameraXRot -= 0.1
            # self.cameraZRot -= 0.1

        glutPostRedisplay()

    def calculateCameraPos(self):
        # self.cameraX = self.airplane.x
        # self.cameraY = self.airplane.y + self.cameraHeight
        # # (+self.airplane.zRot * .2)
        # self.cameraZ = (self.airplane.z + self.zoom + self.cameraDistance) * \
        #     self.airplane.zRot

        # self.cameraX = self.cameraX + self.zoom
        # self.cameraY = 20 + self.zoom
        # self.cameraZ = (-20 - self.zoom)

        self.camLookX = 0
        self.camLookY = 0
        self.camLookZ = 0
        pass

    def rotateCameraHorizontal(self, rad):
        self.cameraX = self.cameraX * \
            math.cos(Utils.radToDegrees(rad)) - self.cameraZ * \
            math.sin(Utils.radToDegrees(rad))

        self.cameraZ = self.cameraX * \
            math.sin(Utils.radToDegrees(rad)) + self.cameraZ * \
            math.cos(Utils.radToDegrees(rad))

    def rotateCameraVertical(self, rad):
        normalizedPosition = Utils.normalize(
            (self.cameraX, self.cameraY, self.cameraZ))

        if normalizedPosition[1] >= 0.98 and rad > 0:
            return
        if normalizedPosition[1] <= -0.98 and rad < 0:
            return

        proj = Utils.project_onto_plane(normalizedPosition, (0, 1, 0))

        proj = Utils.normalize(proj)

        perpendicular = Utils.perpendicular_vector(proj)

        rotMat = Utils.rotation_matrix(perpendicular, Utils.radToDegrees(rad))

        self.cameraX, self.cameraY, self.cameraZ = Utils.rotate(
            rotMat, [self.cameraX, self.cameraY, self.cameraZ])

    def zoomCamera(self, delta):
        # self.zoom += delta
        self.cameraX *= delta
        self.cameraY *= delta
        self.cameraZ *= delta

    def draw(self):
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

        self.calculateCameraPos()
        # print(self.cameraXRot)
        # print(self.cameraZRot)
        glPushMatrix()
        glLightfv(GL_LIGHT0, GL_POSITION, self.light_position)

        gluLookAt(self.cameraX, self.cameraY, self.cameraZ, self.camLookX,
                  self.camLookY, self.camLookZ, 0, 1, 0)

        self.airplane.updatePos()

        self.airplane.draw()
        self.terrain.draw()
        # glPushMatrix()
        # glTranslatef(0, 0, 6)
        # glRotatef(self.a, 1, 0, 0)
        # Cubo()
        # glPopMatrix()

        # ESFERA NO CENTRO DO MUNDO
        # glutWireSphere(2, 30, 30)

        # CUBO NA DIREITA DO CENTRO
        # glTranslatef(0, 0, 7)
        # glutSolidCube(4)

        if self.debug:
            # print('Zoom', self.zoom)
            # print('Delta Zoom', self.deltaZoom)
            glTranslatef(0, 0, 0)
            Materials.GeneralMaterial((1, 1, 1, 1))
            glutSolidSphere(.1, 30, 30)
            # X
            Materials.GeneralMaterial((1, 0, 0, 1))
            glLineWidth(3.0)
            glBegin(GL_LINES)
            glVertex3f(0, 0, 0)
            glVertex3f(10, 0, 0)
            glEnd()
            # Y
            Materials.GeneralMaterial((0, 1, 0, 1))
            glLineWidth(3.0)
            glBegin(GL_LINES)
            glVertex3f(0, 0, 0)
            glVertex3f(0, 10, 0)
            glEnd()
            # Z
            Materials.GeneralMaterial((0, 0, 1, 1))
            glLineWidth(3.0)
            glBegin(GL_LINES)
            glVertex3f(0, 0, 0)
            glVertex3f(0, 0, 10)
            glEnd()
        glPopMatrix()

        glutSwapBuffers()
Beispiel #6
0
 def loadObjects(self):
     self.airplane = Airplane()
     self.terrain = Terrain(self.width, self.height)
Beispiel #7
0
    except:
        pass
    rootlogger.addHandler(
        logging.FileHandler(os.path.join(Globals.LoggingPrefix, 'info.log')))
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setLevel(logging.DEBUG)
    rootlogger.addHandler(console_handler)
    rootlogger.log(99, log_start)

    rcfg = open(args.airplane_config, 'r')
    rlines = rcfg.readlines()
    rcfg.close()
    if not rlines:
        raise RuntimeError('Empty config file: %s' % sys.argv[1])

    craft = Airplane.Airplane()
    craft.initialize(rlines, args.altitude, args.barometer,
                     (args.wind_heading, args.wind_speed))
    if args.magnetic_variation != None:
        craft.KnownMagneticVariation(args.magnetic_variation)
    if args.altitude != None:
        craft.KnownAltitude(args.altitude)

    ffp = open(args.flight_plan, 'r')
    craft.FlightPlan = ffp.readlines()
    ffp.close()

    if args.way_points:
        wps = open(args.way_points, 'r')
        way_points = wps.readlines()
        wps.close()