Source code for morse.sensors.barometer

import logging
logger = logging.getLogger("morse." + __name__)
from morse.core.sensor import Sensor
from morse.core import blenderapi
from morse.helpers.components import add_data, add_property

from math import pow

MOLAR_MASS = 0.0289644  # kg / mol
GAS_CONSTANT = 8.31447 # J/(mol•K)
TEMPERATURE_LAPSE_RATE = 0.0065 # K/m
SEA_LEVEL_TEMP = 288.15 # K:

[docs]class Barometer(Sensor): """ Sensor to compute the atmopsheric pressure, using the ISA model: - https://en.wikipedia.org/wiki/International_Standard_Atmosphere - http://en.wikipedia.org/wiki/Atmospheric_pressure The current implementation is only correct in the Troposphere, i.e. for an altitude less than 11000m """ _name = "Barometer" _short_desc = "Mesure the atmospheric pressure" add_data('pressure', 0.0, "float", 'Pressure in Pa') add_property('_ref_p', 101325, "ReferencePressure", "float", "Reference pressue, in Pascal. By default, the standard \ pressure at the sea level") def __init__(self, obj, parent=None): """ Constructor method. """ logger.info('%s initialization' % obj.name) # Call the constructor of the parent class Sensor.__init__(self, obj, parent) self._inv_exp = (- blenderapi.gravity()[2] * MOLAR_MASS) / \ (GAS_CONSTANT * TEMPERATURE_LAPSE_RATE) self._ref_z = self.position_3d.z logger.info('Component initialized, runs at %.2f Hz', self.frequency)
[docs] def default_action(self): dz = self.position_3d.z - self._ref_z tmp = 1 - (TEMPERATURE_LAPSE_RATE * dz / SEA_LEVEL_TEMP) self.local_data['pressure'] = self._ref_p * pow(tmp, self._inv_exp)