@Template

# Mars lander

Landing on Mars is hard.

One of the main difficulties is that the atmosphere isn't thick enough to stop a landing craft. It can slow the lander enough to deploy a parachute, and the parachute can slow the lander to a few tens of metres per second. But that isn't slow enough - the crash would be comparable to hitting a concrete block while breaking the speed limit on a motorway.

Another challenge is that the journey from leaving earth to deploying the solar panels has many steps, and testing them all accurately is very difficult. Each needs to succeed.

The simulation here is meant to show how some of the steps involved in landing a space probe on Mars would work.

The simulation is loosely based around the Schiaparelli Probe, but the details are slightly different. The suspected failure that lead to the loss of the Schiaparelli probe isn't replicated here because it's a 2-dimensional simulation.

The simulation here is made slightly easier by the lack of a requirement to ditch the parachute. The real probe had to ditch the parachute, and then fly to the ground, landing away from where the parachute might drift.

The simulation is below. Edit the javascript and press submit to control the spacecraft. An example script is there to show how the spacecraft can be controlled, but the example won't manage to land the probe.

## Instructions

Your aim is to touch the ground at a speed of 6 m/s or preferably less.
• A parachute, which will break if you open it going too fast at too high a pressure.
• A heat shield, which blocks the radars, but protects the ship from reentry heat.
• Two radars, each telling the distance to ground along a certain direction. The two radars are pointing at slightly different angles from the vertical.
• Other sensors.
• Two thrusters - a left thruster and a right thruster. In total, there are a hundred seconds of fuel.
The thrusters will be necessary both for hitting the planet at the right angle, and slowing for the final descent.
Your task is to write a javascript program to control the lander. The important part is the timestep function, which takes as input the timestep length (dt), the sensors object, the output object and a state object.
The sensors object looks like this:
        var sensors = {
pressure: pressure * factor,   // accuracy is limited at speed.
angle: angle,             // inaccurate in atmo
altitude: altitude,       // inaccurate in atmo
velocityVertical: vv,     // inaccurate in atmo unless radar working
velocityHorizontal: vh,   // inaccurate in atmo unless radar working
acceleration: magnitude(acceleration) // accurate, scalar
};

Angles are in radians. Velocities and acceleration are in m/s and m/s/s. Distances in m. Pressure in Pa.
The output object looks like this:
var output = {
parachuteDeploy: false,
parachuteCut: false,
releaseHeatShield: false,
retrosLeft: false,
retrosRight: false,
messages: []
};


The state object is persistent from timestep to timestep: If you create a field in it, the field will still be there next timestep.