Skip to content

Commit d3e90c5

Browse files
Merge pull request #60 from pavelmachek/m_4_magn
magn: Start magnetometer support
2 parents 72ab7f2 + bc4611b commit d3e90c5

3 files changed

Lines changed: 26 additions & 1 deletion

File tree

internal_filesystem/lib/mpos/imu/drivers/base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ def read_gyroscope(self):
1818
"""Returns (x, y, z) in deg/s"""
1919
raise NotImplementedError
2020

21+
def read_magnetometer(self):
22+
"""Returns (x, y, z) in uT"""
23+
raise NotImplementedError
24+
2125
def read_temperature(self):
2226
"""Returns temperature in °C"""
2327
raise NotImplementedError

internal_filesystem/lib/mpos/imu/drivers/iio.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ class IIODriver(IMUDriverBase):
1212
"""
1313

1414
accel_path: str
15+
mag_path: str
1516

1617
def __init__(self):
1718
super().__init__()
1819
self.accel_path = self.find_iio_device_with_file("in_accel_x_raw")
19-
print("path:", self.accel_path)
20+
self.mag_path = self.find_iio_device_with_file("in_magn_x_raw")
2021

2122
def _p(self, name: str):
2223
return self.accel_path + "/" + name
@@ -138,3 +139,10 @@ def read_gyroscope(self):
138139
gy - self.gyro_offset[1],
139140
gz - self.gyro_offset[2],
140141
)
142+
143+
def read_magnetometer(self) -> tuple[float, float, float]:
144+
gx = self._read_raw_scaled(self.mag_path + "/" + "in_magn_x_raw", self.mag_path + "/" + "in_magn_x_scale")
145+
gy = self._read_raw_scaled(self.mag_path + "/" + "in_magn_y_raw", self.mag_path + "/" + "in_magn_y_scale")
146+
gz = self._read_raw_scaled(self.mag_path + "/" + "in_magn_z_raw", self.mag_path + "/" + "in_magn_z_scale")
147+
148+
return (gx, gy, gz)

internal_filesystem/lib/mpos/imu/manager.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from mpos.imu.constants import (
44
TYPE_ACCELEROMETER,
55
TYPE_GYROSCOPE,
6+
TYPE_MAGNETIC_FIELD,
67
TYPE_IMU_TEMPERATURE,
78
TYPE_SOC_TEMPERATURE,
89
TYPE_TEMPERATURE,
@@ -50,6 +51,15 @@ def init(self, i2c_bus, address=0x6B, mounted_position=FACING_SKY):
5051
def init_iio(self):
5152
self._imu_driver = IIODriver()
5253
self._sensor_list = [
54+
Sensor(
55+
name="Magnetometer",
56+
sensor_type=TYPE_MAGNETIC_FIELD,
57+
vendor="Linux IIO",
58+
version=1,
59+
max_range="?",
60+
resolution="?",
61+
power_ma=0.2
62+
),
5363
Sensor(
5464
name="Accelerometer",
5565
sensor_type=TYPE_ACCELEROMETER,
@@ -156,6 +166,9 @@ def read_sensor_once(self, sensor):
156166
elif sensor.type == TYPE_GYROSCOPE:
157167
if self._imu_driver:
158168
return self._imu_driver.read_gyroscope()
169+
elif sensor.type == TYPE_MAGNETIC_FIELD:
170+
if self._imu_driver:
171+
return self._imu_driver.read_magnetometer()
159172
elif sensor.type == TYPE_IMU_TEMPERATURE:
160173
if self._imu_driver:
161174
return self._imu_driver.read_temperature()

0 commit comments

Comments
 (0)