Skip to content

pawarsp/PenguPilot

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 :)

About

GNU/Linux based Multi-Rotor UAV Autopilot

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 61.9%
  • Python 35.9%
  • Other 1.1%
  • C++ 0.5%
  • Shell 0.4%
  • Vim Script 0.1%
  • Other 0.1%