Skip to main content

A package of reinforcement learning environments for flight control using the JSBSim flight dynamics model.

Project description

JSBGym

Python: 3.8+ PyPI Version PyPI downloads Code style: black

JSBGym provides reinforcement learning environments for the control of fixed-wing aircraft using the JSBSim flight dynamics model. The package's environments implement the Farama-Foundation's Gymnasium interface allowing environments to be created and interacted with.

Example

Pretrained models can be found here

Setup

Open a terminal and install jsbgym:

pip install jsbgym

For Linux systems, rendering with "human" mode will require an additional package:

sudo apt-get install python3-tk

To render the environment with FlightGear, dowloand and install it from here. Make sure the FlightGear bin directory is in PATH (Usually C:\Program Files\FlightGear 2020.3\bin) and if not already existant, add a system variable called FG_ROOT with the FG data folder as it's value (Usually C:\Program Files\FlightGear 2020.3\data). For Linux, rename the AppImage file to fgfs.AppImage and place it in /usr/local/bin/fgfs. The data file must also be downloaded from here (approximately 2 GB) then in terminal, enter

export FG_ROOT=/path/to/folder

If there are aircraft installed in a different location, add the folder to the FG_AIRCRAFT system variable. 3D visualisation requires installation of the FlightGear simulator. Confirm it is runnable from terminal with:

fgfs --version

Getting Started

import jsbgym
import gymnasium as gym

env = gym.make(ENV_ID)
env.reset()
observation, reward, terminated, truncated, info = env.step(action)

Environments

Environment ID strings are constructed as follows:

f"{aircraft}-{task}-{shaping}-{flightgear}-v0"

Aircraft

The environment can be configured to use one of seven aircraft:

  • Cessna172P Cessna 172P Skyhawk (Default FlightGear Aircraft)
  • PA28 Piper PA-28-161 Warrior II
  • J3 Piper J-3 Cub
  • F15 McDonnell Douglas F-15C Eagle (F-15C in FlightGear)
  • F16 General Dynamics F-16CJ Block 52
  • OV10 North American OV-10A USAFE Bronco
  • A320 Airbus A320 (A320 Familiy in Flightgear)
  • B747 Boeing 747-400
  • MD11 McDonnell Douglas MD-11

All aircraft except the Cessna 172P requires the aircraft to be downloaded via the launcher using the default FlightGear Hangar.

Task

JSBGym implements two tasks for controlling the altitude and heading of aircraft:

  • HeadingControlTask aircraft must fly in a straight line, maintaining its initial altitude and direction of travel (heading)
  • TurnHeadingControlTask aircraft must turn to face a random target heading while maintaining their initial altitude

Shaping

The environment can use three different shaping types:

  • Shaping.STANDARD
  • Shaping.EXTRA
  • Shaping.EXTRA_SEQUENTIAL

FlightGear

If using FlightGear as a render mode, use FG, if not, use NoFG

Environment ID

To fly a Cessna on the Heading Control task withoug using FlightGear,

env = gym.make("Cessna172P-HeadingControlTask-Shaping.STANDARD-NoFG-v0")

Visualisation

2D

A basic plot of agent actions and current state information can be using human render mode by calling env.render() after specifying the render mode in gym.make().

env = gym.make("Cessna172P-HeadingControlTask-Shaping.STANDARD-NoFG-v0", render_mode="human")
env.reset()
env.render()

3D

Visualising with FlightGear requires the Gymnasium environment to be created with a FlightGear-enabled environment ID by specifying the render_mode in gym.make() and changing the value after {shaping} to FG. Using this render mode while training is strongly discouraged due to an error occuring midway through the training (Could not connect to socket for output!).

env = gym.make("Cessna172P-HeadingControlTask-Shaping.STANDARD-FG-v0", render_mode="flightgear")
env.reset()
env.render()

State and Action Space

JSBGym's environments have a continuous state and action space. The state is a 17-tuple:

(name='position/h-sl-ft', description='altitude above mean sea level [ft]', min=-1400, max=85000)
(name='attitude/pitch-rad', description='pitch [rad]', min=-1.5707963267948966, max=1.5707963267948966)
(name='attitude/roll-rad', description='roll [rad]', min=-3.141592653589793, max=3.141592653589793)
(name='velocities/u-fps', description='body frame x-axis velocity [ft/s]', min=-2200, max=2200)
(name='velocities/v-fps', description='body frame y-axis velocity [ft/s]', min=-2200, max=2200)
(name='velocities/w-fps', description='body frame z-axis velocity [ft/s]', min=-2200, max=2200)
(name='velocities/p-rad_sec', description='roll rate [rad/s]', min=-6.283185307179586, max=6.283185307179586)
(name='velocities/q-rad_sec', description='pitch rate [rad/s]', min=-6.283185307179586, max=6.283185307179586)
(name='velocities/r-rad_sec', description='yaw rate [rad/s]', min=-6.283185307179586, max=6.283185307179586)
(name='fcs/left-aileron-pos-norm', description='left aileron position, normalised', min=-1, max=1)
(name='fcs/right-aileron-pos-norm', description='right aileron position, normalised', min=-1, max=1)
(name='fcs/elevator-pos-norm', description='elevator position, normalised', min=-1, max=1)
(name='fcs/rudder-pos-norm', description='rudder position, normalised', min=-1, max=1)
(name='error/altitude-error-ft', description='error to desired altitude [ft]', min=-1400, max=85000)
(name='aero/beta-deg', description='sideslip [deg]', min=-180, max=180)
(name='error/track-error-deg', description='error to desired track [deg]', min=-180, max=180)
(name='info/steps_left', description='steps remaining in episode', min=0, max=300)

Actions are 3-tuples of floats in the range [-1,+1] describing commands to move the aircraft's control surfaces (ailerons, elevator, rudder):

(name='fcs/aileron-cmd-norm', description='aileron commanded position, normalised', min=-1.0, max=1.0)
(name='fcs/elevator-cmd-norm', description='elevator commanded position, normalised', min=-1.0, max=1.0)
(name='fcs/rudder-cmd-norm', description='rudder commanded position, normalised', min=-1.0, max=1.0)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jsbgym-0.2.0.tar.gz (46.5 kB view details)

Uploaded Source

Built Distribution

jsbgym-0.2.0-py3-none-any.whl (52.4 kB view details)

Uploaded Python 3

File details

Details for the file jsbgym-0.2.0.tar.gz.

File metadata

  • Download URL: jsbgym-0.2.0.tar.gz
  • Upload date:
  • Size: 46.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for jsbgym-0.2.0.tar.gz
Algorithm Hash digest
SHA256 a450d657032667ae3209a4cd00e7467b879e3150c5a24cab1769b2d9345b9ac2
MD5 6672b58144178f9ccee528ebb6a58d26
BLAKE2b-256 bbd2f33475c58a8a1a60238c58c8687b0fb014307e4b24e4fb89215e89ad0e02

See more details on using hashes here.

File details

Details for the file jsbgym-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: jsbgym-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 52.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for jsbgym-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a377733b7343fd41c1f47dfa4a1670d29077f0b7133a39a1d10bfa05bc4991c1
MD5 98c500ab1329624927be3d3d374c2e8c
BLAKE2b-256 d15066752dc79059aa5547cde958c913b5085186b4ef6f5cf29084b053c2916f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page