upside down imu option

This commit is contained in:
apirrone 2025-03-17 09:58:39 +01:00
parent ad359847dd
commit 4682eaf581
2 changed files with 20 additions and 17 deletions

View file

@ -15,7 +15,9 @@ from scipy.spatial.transform import Rotation as R
# TODO filter spikes # TODO filter spikes
class Imu: class Imu:
def __init__(self, sampling_freq, user_pitch_bias=0, calibrate=False): def __init__(
self, sampling_freq, user_pitch_bias=0, calibrate=False, upside_down=True
):
self.sampling_freq = sampling_freq self.sampling_freq = sampling_freq
self.user_pitch_bias = user_pitch_bias self.user_pitch_bias = user_pitch_bias
self.nominal_pitch_bias = 25 self.nominal_pitch_bias = 25
@ -33,13 +35,14 @@ class Imu:
# self.imu.mode = adafruit_bno055.NDOF_MODE # self.imu.mode = adafruit_bno055.NDOF_MODE
# self.imu.mode = adafruit_bno055.NDOF_FMC_OFF_MODE # self.imu.mode = adafruit_bno055.NDOF_FMC_OFF_MODE
self.imu.axis_remap = ( if upside_down:
self.imu.axis_remap = (
adafruit_bno055.AXIS_REMAP_Y, adafruit_bno055.AXIS_REMAP_Y,
adafruit_bno055.AXIS_REMAP_X, adafruit_bno055.AXIS_REMAP_X,
adafruit_bno055.AXIS_REMAP_Z, adafruit_bno055.AXIS_REMAP_Z,
adafruit_bno055.AXIS_REMAP_NEGATIVE, adafruit_bno055.AXIS_REMAP_NEGATIVE,
adafruit_bno055.AXIS_REMAP_NEGATIVE, adafruit_bno055.AXIS_REMAP_NEGATIVE,
adafruit_bno055.AXIS_REMAP_NEGATIVE adafruit_bno055.AXIS_REMAP_NEGATIVE,
) )
self.pitch_bias = self.nominal_pitch_bias + self.user_pitch_bias self.pitch_bias = self.nominal_pitch_bias + self.user_pitch_bias
@ -79,7 +82,6 @@ class Imu:
print("imu_calib_data.pkl not found") print("imu_calib_data.pkl not found")
print("Imu is running uncalibrated") print("Imu is running uncalibrated")
self.last_imu_data = [0, 0, 0, 0] self.last_imu_data = [0, 0, 0, 0]
self.imu_queue = Queue(maxsize=1) self.imu_queue = Queue(maxsize=1)
Thread(target=self.imu_worker, daemon=True).start() Thread(target=self.imu_worker, daemon=True).start()
@ -134,10 +136,9 @@ class Imu:
return None return None
if __name__ == "__main__": if __name__ == "__main__":
# imu = Imu(50, calibrate=True) imu = Imu(50, calibrate=True, upside_down=False)
imu = Imu(50) # imu = Imu(50, upside_down=False)
while True: while True:
data = imu.get_data() data = imu.get_data()
# print(data) # print(data)

View file

@ -12,7 +12,7 @@ import time
# TODO filter spikes # TODO filter spikes
class Imu: class Imu:
def __init__(self, sampling_freq, user_pitch_bias=0, calibrate=False): def __init__(self, sampling_freq, user_pitch_bias=0, calibrate=False, upside_down=True):
self.sampling_freq = sampling_freq self.sampling_freq = sampling_freq
self.calibrate = calibrate self.calibrate = calibrate
@ -25,14 +25,16 @@ class Imu:
# self.imu.mode = adafruit_bno055.NDOF_MODE # self.imu.mode = adafruit_bno055.NDOF_MODE
# self.imu.mode = adafruit_bno055.NDOF_FMC_OFF_MODE # self.imu.mode = adafruit_bno055.NDOF_FMC_OFF_MODE
self.imu.axis_remap = (
adafruit_bno055.AXIS_REMAP_Y, if upside_down:
adafruit_bno055.AXIS_REMAP_X, self.imu.axis_remap = (
adafruit_bno055.AXIS_REMAP_Z, adafruit_bno055.AXIS_REMAP_Y,
adafruit_bno055.AXIS_REMAP_NEGATIVE, adafruit_bno055.AXIS_REMAP_X,
adafruit_bno055.AXIS_REMAP_NEGATIVE, adafruit_bno055.AXIS_REMAP_Z,
adafruit_bno055.AXIS_REMAP_NEGATIVE adafruit_bno055.AXIS_REMAP_NEGATIVE,
) adafruit_bno055.AXIS_REMAP_NEGATIVE,
adafruit_bno055.AXIS_REMAP_NEGATIVE
)
if self.calibrate: if self.calibrate:
self.imu.mode = adafruit_bno055.NDOF_MODE self.imu.mode = adafruit_bno055.NDOF_MODE
@ -140,7 +142,7 @@ class Imu:
if __name__ == "__main__": if __name__ == "__main__":
imu = Imu(50) imu = Imu(50, upside_down=False)
while True: while True:
data = imu.get_data() data = imu.get_data()
# print(data) # print(data)