English |  Español |  Français |  Italiano |  Português |  Русский |  Shqip

Developing a Clojure Edge

Motivating Problem

The code examples will illustrate language features.  To make the code more relevant, we will be applying the techniques to a real world problem which encounters the challenges you will find in non-trivial projects.  We will write a control system for Unmanned Aerial Vehicles (UAVs) delivering high value packages, which I will refer to as drones.

Much of the world population live in areas where there are no permanent roads, limiting their access to medicine.  UAVs can deliver 2kg packages over a distance of 10km at low cost.  This capability can be used for collecting blood samples, and delivering medicine.

Our solution will assume:

  1. There are several hospitals which have unlimited medicine and testing facilities.
  2. There are many remote recharge stations where the drone can swap batteries, drop a package, or pick up a package.
  3. A mission consists of collecting a package and delivering it.
  4. There are many drones to perform missions.
  5. Missions are created dynamically at a rate which is serviceable by the drones.
  6. Missions have an urgency associated with them for prioritization.

We will use the following design methodology:


  1. What will the data look like?
  2. How can we visualize it?
  3. What will we calculate?
  4. How will we deal with state?


Write it all out.  Write small experiments to test your assumptions, preserve these as tests.  Organize into namespaces.  Think about what is missing and add more detail to the solution.  Make subprograms and expand test sets.

We will build:

  • World state
  • Events that modify state
  • A simulation to test our software with map generation (hospitals and remotes), mission creation, drone emulator
  • Visualization of missions
  • Planning of drone activity
  • Optimization of drone activity
  • Monitoring of drone activity
  • Notification of changes

There has been error in communication with Booktype server. Not sure right now where is the problem.

You should refresh this page.