• Stars
    star
    168
  • Rank 225,507 (Top 5 %)
  • Language
    Python
  • License
    MIT License
  • Created over 12 years ago
  • Updated about 10 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

multi-platform ground station for drones that speak the MAVLink protocol

Mavelous

Mavelous is an open source browser-based ground control station (GCS) for drones/UAVs/micro air vehicles.

Try the online demo.

Mavelous can be used with any vehicle that speaks the MAVLink 1.0 protocol. It has been tested with Arducopter and ArduPlane.

Here's a screenshot of Mavelous running in a desktop web browser:

Screenshot of Mavelous running in a desktop browser

Mavelous running on an iPhone:

Screenshot of Mavelous running on an iPhone browser

Here's a video of Mavelous being used in the field with an iPad to fly an ArduCopter:

Mavelous Youtube Demo Video

http://www.youtube.com/watch?v=QNql3n4C8iA

Features

  • Situational awareness. Mavelous will show you a vehicle's current position on a map. It also has a primary flight display that displays attitude, speed and altitude.

  • Tap-the-map navigation. You can double tap on the map, and the vehicle will switch to GUIDED mode and fly to that position.

  • Flight mode. You can arm and disarm the vehicle, and you can put it into LOITER, RTL, or LAND mode.

Installation

Mavelous is written in Python, and it depends on mavlink, CherryPy and Flask.

First clone the mavelous and mavlink repositories:

$ cd src
$ git clone https://github.com/wiseman/mavlink  # Fork required to fix bugs
$ git clone [email protected]:wiseman/mavelous.git

Then install CherryPy, Flask and pyserial. The easiest way is with pip:

$ pip install cherrypy flask pyserial

How to run it

Online Demo

The online demo of Mavelous runs completely within the browser. The simulated drone is very low fidelity and simply follows a fixed path. It will not respond to navigation commands such as guided mode.

You can also run the demo on your own machine by cloning the repository and opening the html page in your browser via the filesystem. The index.html file can be found at:

mavelous/modules/lib/mavelous_web/index.html

With a real drone

  1. Connect your ArduCopter or ArduPlane to your computer with an Xbee or 3DR Radio. Power on the vehicle.

  2. Start mavproxy, specifying the serial port and data rate. On Linux, the serial port is probably named something like /dev/ttyUSB0 or /dev/ttyUSB1. For 3DR Radios, the data rate is usually 57600. For example:

    $ cd src/mavelous
    $ python mavproxy.py --module mavelous --master=/dev/ttyUSB0 --baud=57600
    

You can then point at browser at http://localhost:9999.

You'll be able to use the Mavelous interface to control Guided mode once in flight. Find out more about guided mode on ArduCopter.

Software in the loop simulation ArduCopter

  1. Compile the ArduCopter firmware for Software in the loop similation (SITL). You'll need to use the ardupilot-mega project's Makefile build system: see details on the ardupilot-mega wiki.

    $ make sitl
    
  2. Run the ArduCopter executable in desktop mode. For example:

    $ ~/ardupilot-mega/tmp/ArduCopter.build/ArduCopter.elf -H 20
    

    On some systems, this directory will be found at /tmp/ArduCopter.build/

  3. Start the simulated multicopter. For example:

    $ python ~/ardupilot-mega/Tools/autotest/pysim/sim_multicopter.py \
      --frame=+ --rate=400 --home=34.092047,-118.267136,20,0 --wind=6,45,.3
    
  4. Start mavproxy:

    $ python mavproxy.py --master=tcp:127.0.0.1:5760 --out=127.0.0.1:14550 \
      --aircraft=test.ArduCopter --sitl=127.0.0.1:5501 --out=127.0.0.1:19550 \
      --quadcopter --streamrate=5 --module mavelous
    

    A web browser will open showing you the Mavelous interface, or you can point a browser to http://localhost:9999.

  5. Take off. Soon, arducopter may support automated take-off. Until then:

    GUIDED> switch 6   # Stabilize mode
    GUIDED> rc 3 1510  # Take-off throttle
    

Architecture

    *  Drone
    |
*---+---*
    |
    *

    ^
    |
    | Radio link
    |
    V

.............................................
.  Mavelous                                 .
.                                           .
.  +--------+          +-----------------+  .
.  |        |   HTTP   | Front end, runs |  .
.  | Server |<-------->| in browser      |  .
.  |        |          |                 |  .
.  +--------+          +-----------------+  .
.............................................

Mavelous has two main parts:

  1. Front end. This is the HTML application that runs in a browser. It uses many HTML5 features, so you'll need a reasonably modern browser.

  2. Server. The server manages communication between the front end and the drone. It has a web server that talks to the front end, and it sends and receives drone commands using a wireless modem (like an XBee radio or a 3D Robotics radio).

The front end and the server can run on the same computer, or on two different computers.

The server is written in Python, and probably requires a laptop or netbook. The front end is written in HTML/CSS/Javascript, and can run on anything with a web browser, including phones and tablets.

Why

Portability. Controlling a drone with an iPad is kind of awesome, and there are currently no open-source ground control stations that can run on an iPhone or iPad--Mavelous can (at least the front end can).

The most popular ArduCopter GCS, APM Mission Planner, is primarily a Windows application. It can run under OS X and Linux with Mono, but the experience is not always smooth.

The goal of Mavelous is to have a highly portable GCS that can talk to anything that speaks the MAVLink protocol (and hopefully ROS devices, too, some day).

Feature status

Currently Mavelous is capable of monitoring and guiding a drone in flight.

  • You can see basic flight data (speed, altitude, attitude) on the primary flight display.
  • You can double click/tap on the map to send the drone to that location.
  • Multiple users can control the same drone.
  • Arm/Disarm, loiter, and land an ArduCopter (or other drones that obey Mavlink Navigation Commands).

We're working to add the following features soon:

  • Control auto takeoff
  • Mission creation and editing
  • Offline support (map caching)

I'd like to add these features:

  • Multi-vehicle control

Mailing list

There is a public mailing list for Mavelous users and developers.

Development

To generate HTML files from templates, generate javascript dependencies (mavelous-deps.js) and minify/compile javascript:

$ make

To lint the code:

$ make lint

To fix some lint issues automatically:

$ make lintfix

To regenerate mavelous-deps.js:

$ make deps

Acknowledgments

The Mavelous backend is based on Mavproxy,a command line ground station by Andrew Tridgell.

Mavelous uses open source code from the following projects: Leaflet.js, Backbone.js, Bootstrap, jQuery, Underscore.js, Kinetic.js, Google Closure tools and others.

License

Mavelous is covered by the MIT license, see the accompanying file LICENSE.md for details.

This repository contains additional code that may be covered by other licenses, including MAVProxy, which uses the GPL license.

More Repositories

1

py-webrtcvad

Python interface to the WebRTC Voice Activity Detector
C
2,053
star
2

coole-radar

A very cool semi-real terminal radar app. Written in Clojurescript targeting Node using shadow-cljs.
Clojure
82
star
3

node-sbs1

Node.js parsing code for SBS-1 ADS-B messages
JavaScript
77
star
4

arduino-serial

Python port of Tod E. Kurt's arduino-serial.c for communicating with an Arduino over a serial port..
Python
67
star
5

foursquare-python

Python module to interface with the foursquare API.
Python
61
star
6

turboshrimp

Clojure API for the Parrot AR.Drone.
Clojure
44
star
7

leaflet-gorilla

Leaflet renderer for gorilla-repl
Clojure
41
star
8

sift

Library for doing SIFT-based image matching. Based on Rob Hess' SIFT code.
C
38
star
9

droneklv

Clojure code for handling metadata embedded in drone video with KLV
Java
28
star
10

orbital-detector

Detect and map orbiting helicopters.
Clojure
26
star
11

clj-pronouncing

A simple interface to the CMU Pronouncing Dictionary.
Clojure
24
star
12

webflight-traffic

Air traffic overlay plugin for ardrone-webflight that uses ADS-B data.
JavaScript
24
star
13

initialisms

Guess sentences from initial letters of each word
Clojure
22
star
14

ardrone-browser-3d

JavaScript
17
star
15

energid_nlp

Natural language parsers and conceptual memory
Python
15
star
16

gpsjam.org

EJS
14
star
17

cl-zeroconf

A Common Lisp interface to Apple's open source implementation of the Zeroconf service discovery protocol (Bonjour).
Common Lisp
13
star
18

webflight-gamepad

A plugin for ardrone-webflight that lets you control a drone with a gamepad in the browser.
JavaScript
11
star
19

virtual-radar-server

Virtual radar server, an aircraft tracker that uses SBS-compatible data (ADS-B, mode S, etc.)
C#
10
star
20

ar-drone-rest

A node.js REST server for controlling the AR.Drone 2.0.
JavaScript
9
star
21

pyluis

Python interface to Microsoft LUIS (Language Understanding Intelligent Service)
Python
8
star
22

4mapper

Maps Foursquare checkins. Powers http://4mapper.appspot.com/
JavaScript
8
star
23

clj-pid

PID controller in Clojure.
Clojure
8
star
24

node-planefinder

A node.js module that can get aircraft location information from planefinder.net.
JavaScript
8
star
25

sirc

IRC indexer and search engine that runs on Google AppEngine.
Python
6
star
26

cl-difflib

A Common Lisp library for computing differences between sequences based on the Python difflib module.
Common Lisp
6
star
27

docker-rpi-vrs

Docker image for running Virtual Radar Server on Raspberry Pi
Dockerfile
5
star
28

braitenberg-vehicles

A simulator for Braitenberg vehicles, as described by A. K. Dewdney.
Scheme
4
star
29

shrimpdroid

Android app in Clojure to control an AR.Drone.
Clojure
4
star
30

clj-opencv-examples

Examples of using OpenCV from Clojure
Clojure
3
star
31

chernoff-faces

Lisp & Java code to draw Chernoff faces, a technique for displaying multivariate data in the shape of a human face.
Java
3
star
32

tracon

Detects aircraft interceptions, in real-time or after the fact.
Rust
3
star
33

java-mode-s-beast

Java library that decodes Mode-S Beast messages containing Mode S/ADS-B information.
Java
3
star
34

ac-statevec

Build aircraft state vectors from pings
JavaScript
3
star
35

foolseye

Protecting journalistic integrity with image processing & crowd-sourcing.
Python
3
star
36

mefingram

Metafilter infodump n-gram tools
Python
3
star
37

faa-registration-data

TypeScript
3
star
38

word-freqs

A simple Ajax demo; Uses web.py, dojo, matplotlib & simplejson.
Python
3
star
39

threadless-corpus

Collections of images for testing & evaluating object recognition algorithms.
3
star
40

clj-viterbi

Viterbi search in clojure.
Clojure
3
star
41

cl-html-diff

A Common Lisp library for generating a human-readable diff of two HTML documents.
Common Lisp
3
star
42

rid

Regressive imagery dictionary, a content analysis coding scheme designed to measure primordial vs. conceptual thinking.
Python
3
star
43

secretmetafilter

Web app that highlights metafilter.com discussions that are still active on older posts (runs in Google AppEngine).
Python
3
star
44

lsp

Lisp Server Pages, a simple Common Lisp version of JSP.
Common Lisp
2
star
45

node-ar-pnav

Experiments with potential field-based navigation techniques for the AR.Drone.
JavaScript
2
star
46

fireflysync

"Firefly Synchronization in Ad Hoc Networks"
Java
2
star
47

lisp-spotlight-indexer

Plugin that indexes Common Lisp code in Mac OS X Spotlight.
C
2
star
48

wischk

A Unix and DOS checkers-playing program.
C++
2
star
49

clj-gflags

Google flags/gflags for clojure
Clojure
2
star
50

turboshrimp-tracker

Ground control station for AR.Drone with OpenCV object tracking.
Clojure
2
star
51

whatsoverhead-in-space

Python
2
star
52

ten90

Packaging the guts of dump1090 into a library.
Shell
2
star
53

r4

Wrapper around p4 command-line client to add extra functionality and ease-of-use.
Python
2
star
54

blubber_bot

Firmware for Jed Berk's Blubber Bot (a robot blimp).
Java
2
star
55

sane-cliki

Fixes HTML encoding bugs in CLiki, the Common Lisp wiki
JavaScript
1
star
56

sklounst

Stores streaming SBS-1 messages in a database.
Python
1
star
57

morning-improv-scraper

Code to scrape Scott McCloud's Morning Improv blog and convert to RSS for LiveJournal.
Common Lisp
1
star
58

better-ning-feeds

Adds content to content-free ning RSS/Atom feeds.
Python
1
star
59

commoncrawl_cdx

API and utilities for accessing the Common Crawl CDX index.
Python
1
star
60

civileyesmesite

Drones deterring police misconduct. See http://www.civileyes.me/
Python
1
star
61

claim

A Common Lisp library for interfacing to AOL Instant Messenger (AIM) using the TOC protocol.
Common Lisp
1
star
62

darpa-gc-forum-scraper

Lisp code to scrape the DARPA Grand Challenge discussion forum and convert it to RSS.
Common Lisp
1
star
63

ground-stop-anomalies

Code to detect certain anomalies that may have occurred during the FAA ground stop of 1/10/2022
Rust
1
star
64

familiar

Python
1
star
65

closure-externs-generator

1
star
66

honeybee

Bot to play Travian.
Python
1
star
67

lml

Lisp Markup Language, an s-expression based markup language.
Common Lisp
1
star
68

socialaircraft

What if every aircraft had a twitter account?
Clojure
1
star
69

aircraft_icao_country

JavaScript
1
star
70

lein-awsuberwar

Patches lein ring uberwar to not discard .ebextensions.
Clojure
1
star