Source code for modi_plus.module.input_module.imu
"""Imu module."""
import struct
from typing import Tuple
from modi_plus.module.module import InputModule
[docs]
class Imu(InputModule):
PROPERTY_ANGLE_STATE = 2
PROPERTY_ACC_STATE = 3
PROPERTY_GYRO_STATE = 4
PROPERTY_VIBRATION_STATE = 5
PROPERTY_OFFSET_ROLL = 0
PROPERTY_OFFSET_PITCH = 4
PROPERTY_OFFSET_YAW = 8
PROPERTY_OFFSET_ACC_X = 0
PROPERTY_OFFSET_ACC_Y = 4
PROPERTY_OFFSET_ACC_Z = 8
PROPERTY_OFFSET_GYRO_X = 0
PROPERTY_OFFSET_GYRO_Y = 4
PROPERTY_OFFSET_GYRO_Z = 8
PROPERTY_OFFSET_VIBRATION = 0
@property
def angle_x(self) -> float:
"""Returns the angle_x angle of the imu
:return: The imu's angle_x angle.
:rtype: float
"""
offset = Imu.PROPERTY_OFFSET_ROLL
raw = self._get_property(Imu.PROPERTY_ANGLE_STATE)
data = struct.unpack("f", raw[offset:offset + 4])[0]
return data
@property
def angle_y(self) -> float:
"""Returns the angle_y angle of the imu
:return: The imu's angle_y angle.
:rtype: float
"""
offset = Imu.PROPERTY_OFFSET_PITCH
raw = self._get_property(Imu.PROPERTY_ANGLE_STATE)
data = struct.unpack("f", raw[offset:offset + 4])[0]
return data
@property
def angle_z(self) -> float:
"""Returns the angle_zle_z angle of the imu
:return: The imu's angle_z angle.
:rtype: float
"""
offset = Imu.PROPERTY_OFFSET_YAW
raw = self._get_property(Imu.PROPERTY_ANGLE_STATE)
data = struct.unpack("f", raw[offset:offset + 4])[0]
return data
@property
def angle(self) -> Tuple[float, float, float]:
"""Returns the angle_x, angle_y and angle_z angle of the imu
:return: The imu's angles of angle_x, angle_y and angle_z.
:rtype: tuple
"""
return self.angle_x, self.angle_y, self.angle_z
@property
def angular_vel_x(self) -> float:
"""Returns the angle_x angle of the imu
:return: The imu's angular velocity the about x-axis.
:rtype: float
"""
offset = Imu.PROPERTY_OFFSET_GYRO_X
raw = self._get_property(Imu.PROPERTY_GYRO_STATE)
data = struct.unpack("f", raw[offset:offset + 4])[0]
return data
@property
def angular_vel_y(self) -> float:
"""Returns the angular velocity about y-axis
:return: The imu's angular velocity the about y-axis.
:rtype: float
"""
offset = Imu.PROPERTY_OFFSET_GYRO_Y
raw = self._get_property(Imu.PROPERTY_GYRO_STATE)
data = struct.unpack("f", raw[offset:offset + 4])[0]
return data
@property
def angular_vel_z(self) -> float:
"""Returns the angular velocity about z-axis
:return: The imu's angular velocity the about z-axis.
:rtype: float
"""
offset = Imu.PROPERTY_OFFSET_GYRO_Z
raw = self._get_property(Imu.PROPERTY_GYRO_STATE)
data = struct.unpack("f", raw[offset:offset + 4])[0]
return data
@property
def angular_velocity(self) -> Tuple[float, float, float]:
"""Returns the angular velocity about x, y and z axis
:return: The imu's angular velocity the about x, y and z axis.
:rtype: tuple
"""
return self.angular_vel_x, self.angular_vel_y, self.angular_vel_z
@property
def acceleration_x(self) -> float:
"""Returns the x component of the acceleration
:return: The imu's x-axis acceleration.
:rtype: float
"""
offset = Imu.PROPERTY_OFFSET_ACC_X
raw = self._get_property(Imu.PROPERTY_ACC_STATE)
data = struct.unpack("f", raw[offset:offset + 4])[0]
return data
@property
def acceleration_y(self) -> float:
"""Returns the y component of the acceleration
:return: The imu's y-axis acceleration.
:rtype: float
"""
offset = Imu.PROPERTY_OFFSET_ACC_Y
raw = self._get_property(Imu.PROPERTY_ACC_STATE)
data = struct.unpack("f", raw[offset:offset + 4])[0]
return data
@property
def acceleration_z(self) -> float:
"""Returns the z component of the acceleration
:return: The imu's z-axis acceleration.
:rtype: float
"""
offset = Imu.PROPERTY_OFFSET_ACC_Z
raw = self._get_property(Imu.PROPERTY_ACC_STATE)
data = struct.unpack("f", raw[offset:offset + 4])[0]
return data
@property
def acceleration(self) -> Tuple[float, float, float]:
"""Returns the acceleration about x, y and z axis
:return: The imu's acceleration the about x, y and z axis.
:rtype: tuple
"""
return self.acceleration_x, self.acceleration_y, self.acceleration_z
@property
def vibration(self) -> float:
"""Returns the vibration value
:return: The imu's vibration.
:rtype: float
"""
offset = Imu.PROPERTY_OFFSET_VIBRATION
raw = self._get_property(Imu.PROPERTY_VIBRATION_STATE)
data = struct.unpack("f", raw[offset:offset + 4])[0]
return data