Git Product home page Git Product logo

pengupilot's Introduction

NOTE: This the Next-Generation Work-In-Progress Branch of PenguPilot. For a stable release, check the master branch!

PenguPilot

Build Status

What is PenguPilot?

PenguPilot is a GNU/Linux based Multi-Rotor UAV Autopilot.

Unlike other platforms, PenguPilot does not require a dedicated low-level microcontroller for real-time

  • sensor data acquisition,
  • data fusion / filtering, and
  • motor control.

The whole flight infrastructure is based on Linux (PREEMPT/PREEMPT_RT) user-space tasks.

Some highlights of the PenguPilot software are:

  • component based software architecture allows to run code on demand (power savings in standby)
  • memory protection among critical and non-critical components
  • message-passing among components via ZeroMQ/MessagePack/Protobuf
  • process/priority management and dependency tracking
  • online parameter configuration usable for in-flight parameter updates
  • SSH based user interfaces for parameters, calibration, ...
  • blackbox functionality to log sensor values at each control step to sdcard
  • sensor data replay capabilitiy for offline PC-based optimization, filter tuning, ...
  • quick integration of new hardware through Linux HAL
  • platform-neutral code without low-level interrupt and timer programming

What's different compared to other Approaches?

The three main factors that make PenguPilot based systems different, compared to microcontroller-based autopilots, are the

  • Linux operating system, the
  • powerful underlying computer-on-module (COM), and
  • PenguPilot's component-based software architecture.

These factors generate a lot of possibilities and benefits for UAV software development, summarized as follows:

  • Powerful Hardware and OS:

    • no microcontroller-like flash/RAM memory restrictions
    • high memory bandwidth allows to log every sensor value per control step
    • memory protection for improved task safety
    • USB host support (Cameras, WiFi and UMTS sticks, FTDI's, ...)
    • symmetric multi-processing (e.g. ODROID U3)
  • Advanced Programming Possibilities:

    • high-level programming languages and libraries (Bash, Python/numpy)
    • rich networking and routing functionality
    • file system abstractions instead of raw memory access
    • debugging via GDB and code profiling without extra effort
    • myriads of open source device drivers and software libraries
  • Advanced Field Software Development:

    • software development on the UAV via SSH from virtually any device
    • native source code compilation (no cross-compiler required)
    • on-device software version control via Git

Filesystem Contents

Flight Infrastructure:

  • autopilot: automatic flight code with/without remote control based safery
  • i2c_sensors: ready gyro, acc, mag, baro, and ultrasonic sensors
  • gyro_cal: gyroscope calibration
  • acc_cal: accelerometer calibration
  • mag_adc_cal: magnetometer calibration
  • cmc: current magnetometer calibration
  • rs_ctrl: rotation speed control for stabilizing the UAV
  • rp_ctrl: rotation position control
  • vs_ctrl: vertical speed control using barometer
  • vp_ctrl: vertical position control using barometer/ultrasonic/elevation map
  • hs_ctrl: horizontal speed control
  • hp_ctrl: horizontal position control
  • battmon: battery monitor; warns the user when the battery is low
  • gpsp: gps publisher, similar to gpsd but much simpler; uses NMEALib
  • remote: remote control channels publisher
  • rc_cal: remote control channel calibration service
  • geomag: subscribes to gps position and date/time; publishes magnetic declination in degrees
  • elevmap: subscribes to gps position; publishes SRTM3 elevation data
  • ads1x15: Raspberry PI I2C ADC voltage/current publisher
  • arduino: ODROID U3 Arduino R/C, ADC voltage/current publisher; reads from ttySAC0
  • twl4030_madc: Gumstix Overo ADC voltage/current publisher

Support Infrastructure:

Additional Features:

  • aircomm: encrypted aerial communication daemon, using NRF24L01+
  • display: shows battery, mem, cpu, satellite status via I2C SSD1307 128x64 display from Adafruit
  • wifi_sensor: publishes wireless network data acquired via iwlist
  • wifi_loc: combines gps measurements and wifi scan results and publishes it

Build System and Environment:

Software Dependencies:

  • Gentoo: app-admin/sudo app-misc/screen dev-lang/python dev-lang/swig dev-libs/glib dev-libs/libyaml dev-libs/msgpack dev-libs/protobuf dev-libs/protobuf-c dev-python/imaging dev-python/msgpack dev-python/numpy dev-python/psutil dev-python/python-daemon dev-python/pyyaml dev-python/pyzmq dev-util/scons sys-power/cpufrequtils dev-python/pyproj sci-libs/gdal
  • Ubuntu: realpath scons swig python-msgpack protobuf-compiler python-protobuf libmsgpack-dev libprotobuf-dev python-yaml protobuf-c-compiler libprotobuf-c0-dev libzmq-dev python-zmq libyaml-dev libglib2.0-dev python-daemon python-dev

Service Dependencies

The service dependencies of PenguPilot are depicted in the figure below:

Services Dependency Graph

Services indicated in yellow are platform-specific, as specified in file config/services.yaml.

Example UAV System

Here's an example of a Gumstix Overo Air based PenguCopter with GPS receiver and I2C OLED display:

PenguCopter

PenguCopter Video

Flying Penguins from BBC :)

pengupilot's People

Contributors

tobiassimon avatar ghostplus avatar

Watchers

James Cloos avatar reneX avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.