Skip to content

Sensors

Sensor data access modules.

Overview

PILS supports five sensor types:

Sensor Module Data Type Description
GPS pils.sensors.GPS Position GNSS receiver
IMU pils.sensors.IMU Motion Inertial measurement
Camera pils.sensors.Camera Video/Image Visual data
ADC pils.sensors.ADC Voltage Analog signals
Inclinometer pils.sensors.Inclinometer Attitude Tilt sensor

Import

# Individual
from pils.sensors import GPS
from pils.sensors import IMU
from pils.sensors import Camera
from pils.sensors import ADC
from pils.sensors import Inclinometer

# All
from pils.sensors import GPS, IMU, Camera, ADC, Inclinometer

Common Pattern

All sensors follow the same pattern:

# Via Flight container (recommended)
flight.add_sensor_data(['gps', 'imu'])
gps = flight['gps']
gps_df = gps.data

# Direct instantiation
from pils.sensors import GPS
gps = GPS(path="/path/to/sensors/gps.bin")
gps.load_data()
gps_df = gps.data

Sensor Registry

Sensors are registered in pils/sensors/sensors.py:

sensor_config = {
    'gps': {'class': GPS, 'load_method': 'load_data'},
    'imu': {'class': IMU, 'load_method': 'load_data'},
    'camera': {'class': Camera, 'load_method': None},
    'adc': {'class': ADC, 'load_method': 'load_data'},
    'inclinometer': {'class': Inclinometer, 'load_method': 'load_data'},
}

Data Access

All sensors provide data as Polars DataFrames:

import polars as pl

# GPS
gps_df = flight['gps'].data
rtk_fixes = gps_df.filter(pl.col('fix_quality') == 4)

# IMU (multiple sub-sensors)
accel_df = flight['imu'].accelerometer
gyro_df = flight['imu'].gyroscope

# ADC
adc_df = flight['adc'].data

# Inclinometer
inclino_df = flight['inclinometer'].data

Detailed Documentation

  • GPS - Position and velocity
  • IMU - Accelerometer, gyroscope, magnetometer, barometer
  • Camera - Video and images
  • ADC - Voltage channels
  • Inclinometer - Attitude (Kernel-100, IMX-5)