Software Survival: Building an Autopilot

Due to some medical BS the last couple months, I haven’t had much energy outside of work. So, this is postponed for the moment, until I catch up.

I was driving most of the night last night. It was a random Sunday night, so there wasn’t much traffic at all. There were several hours on the interstate where I didn’t see a single car. It was eerie and pleasant all at the same time. I had a lot of time to think and let my mind wander a bit…

I started thinking about the evolution of this blog and I came to a strange question, the kind that you only think about at 2am… If you had to build an airplane autopilot with a website framework, which one would it be and why? The answer I came up with, made me smile. Maybe it will for you too…

The Challenge:

To build an autopilot powered by a web framework, such as Laravel, WordPress, Express, Django, etc. It must be flexible and able to accept readings in degrees or radians; knots, mps, and mph; meters and feet; and “heat” (I’ll get to that in a second).

The “aircraft” will call various endpoints in almost realtime, approximately every 500ms but might be less. Your site must be able to keep track of the current state because also, no more than every 500ms, the “aircraft” will poll what to set the controls to.

Your site’s objective is to fly through a target, but the only indication that you’re flying in the right direction is a “heat” target. It will tell you “cold”, “cool”, “warm”, “hot” or “perfect”. It may be above you, or below you. It might even be behind you. Your task is to locate the proper direction and fly towards it.

You can stall, spin, crash or fly to reach the objective, it’s up to you, as long as you reach it. Upon reaching the target, you will enter the leaderboard. There will be 5 scenarios and the score will be the time taken. Lower times, results in a higher placement on the leaderboard.

Your solution must be licensed under the GPL or compatible license and freely inspectable by the public. A fork of another solution is not allowed to be submitted.


00:00 GMT August 31, 2017 goes live with $1 pre-registration

00:00 GMT November 1, 2017

Enrollment Starts: $5 at

00:00 GMT November 14, 2017

Practice Session 1

08:00 GMT November 14, 2017

Practice Session 2

22:00 GMT November 14, 2017

Practice Session 3

00:00 GMT November 15, 2017

Session 1 – Grasslands

12:00 GMT November 15, 2017

Session 2 – Desert

00:00 GMT November 16, 2017

Session 3 – Mountains

12:00 GMT November 16, 2017

Session 4 – Grasslands

00:00 GMT November 17, 2017

Session 5 – Beach

00:00 GMT November 18, 2017

Winners announced

00:00 GMT December 1, 2017

Release of game source code.


You’ll receive telemetry every 500ms at the following endpoints:

POST /telemetry/heading

"heading": "90",
"measurement": "degrees"

POST /telemetry/airspeed

"airspeed": "120",
"measurement": "knots"

POST /telemetry/altitude

"altitude": "120",
"measurement": "meters"

POST /telemetry/pitch

"pitch": "0",
"measurement": "degrees"

POST /telemetry/yaw

"yaw": "0",
"measurement": "degrees"

POST /telemetry/roll

"roll": "0",
"measurement": "degrees"

POST /telemetry/target

"target": "cold",
"measurement": "heat"

Controlling the Craft

Approximately every 500ms, the aircraft will poll your autopilot.

GET /control/thrust

It will accept any value, but only respond from 0-100

GET /control/stick

It will accept any value, but only respond to a triple tuple in the range -100, 100. The first value in the tuple represents pushing the stick left (-100) and right (100). The second value in the tuple represents pushing the stick forward and backward (-100 to 100, respectively). The final value represents pushing the left pedal (-100) and the right pedal (100).

Preliminary Rules

  1. Solution must be open source and available to the public, licensed under GPL or compatible.
  2. Solution must be hosted by participant.
  3. Any response other than a 200 is considered fatal.
  4. Crashing effectively results in a score of your current time + a two hour penalty.
  5. A session is limited to two hours.
  6. Once altitude reaches 0, it is considered a crash.
  7. Depending on the mood of the aircraft, it may report measurements in various ways. Expect the unexpected.
  8. One of the practice scenarios will be one of the actual scenarios, reused.

Be resilient. Be robust. Fly to the sun.

Preliminary Prizes

1st Place: $1000USD
2nd Place: $200USD
3rd Place: $50USD

Does this sound like fun to you?

Let me know in the comments below!