[Dprglist] Odometry on Mecanum-wheeled robots?
Murray Altheim
murray18 at altheim.com
Tue Apr 14 22:58:12 PDT 2020
I'm going to contradict myself. Regarding orientation sensors, I dug
around a bit and found:
https://blog.digilentinc.com/how-to-convert-magnetometer-data-into-compass-heading/
and am quite pleased to be getting a compass heading output from the
magnetometer of an Adafruit LSM9DS1. I'm no mean Python programmer but
in the interest of sharing, here goes:
------------------------------------------------------------
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# reads an x,y,z value from the LSM9DS1 magnetometer and
# displays a heading in degrees.
import time, board, busio, math, adafruit_lsm9ds1
LSB = 0.48828125 #mG
def convert_to_direction(mag_x, mag_y, mag_z):
xGaussData = mag_x * LSB
yGaussData = mag_y * LSB
if xGaussData == 0.0:
return 90.0 if yGaussData < 0.0 else 0.0
else:
direction = math.atan( yGaussData / xGaussData ) * ( 180.0 / math.pi )
if direction > 360.0:
return direction - 360.0
elif direction < 0.0:
return direction + 360.0
else:
return direction
try:
i2c = busio.I2C(board.SCL, board.SDA)
sensor = adafruit_lsm9ds1.LSM9DS1_I2C(i2c)
while True:
mag_x, mag_y, mag_z = sensor.magnetic
direction = convert_to_direction(mag_x, mag_y, mag_z)
print('lsm9ds1 : direction: {0:0.2f}°;\tmagnetometer(G): ({1:0.3f}, {2:0.3f}, {3:0.3f})'.format(direction, mag_x, mag_y, mag_z))
time.sleep(0.5)
except KeyboardInterrupt:
print('\nlsm9ds1 : Ctrl-C caught: keyboard interrupt.')
#EOF
------------------------------------------------------------
with output like:
lsm9ds1 : direction: 31.17°; magnetometer(G): (0.349, 0.211, 0.077)
lsm9ds1 : direction: 21.02°; magnetometer(G): (0.413, 0.159, 0.095)
lsm9ds1 : direction: 18.88°; magnetometer(G): (0.438, 0.150, 0.078)
lsm9ds1 : direction: 8.52°; magnetometer(G): (0.356, 0.053, 0.105)
lsm9ds1 : direction: 0.81°; magnetometer(G): (0.285, 0.004, 0.130)
lsm9ds1 : direction: 2.04°; magnetometer(G): (0.248, 0.009, 0.114)
lsm9ds1 : direction: 4.20°; magnetometer(G): (0.242, 0.018, 0.128)
lsm9ds1 : direction: 6.50°; magnetometer(G): (0.232, 0.026, 0.128)
lsm9ds1 : direction: 3.05°; magnetometer(G): (0.303, 0.016, 0.121)
lsm9ds1 : direction: 346.79°; magnetometer(G): (0.308, -0.072, 0.258)
On 15/04/20 3:50 PM, Murray Altheim via DPRGlist wrote:
> [...] so the idea of taking a more "raw" output from a magnetometer and having to
> process that for a value vs. an already-complete orientation value in radians or
> degrees from the BNO055, well, that's pretty compelling. I'd both have to spend
> a lot of time learning and debugging versus just getting a compass heading output
> from the BNO055. While it might be somebody's cup of tea to work out that kind
> of detail, it's not like there's not enough challenges in building a robot. And
> time, hmm. Time.
...........................................................................
Murray Altheim <murray18 at altheim dot com> = = ===
http://www.altheim.com/murray/ === ===
= = ===
In the evening
The rice leaves in the garden
Rustle in the autumn wind
That blows through my reed hut.
-- Minamoto no Tsunenobu
More information about the DPRGlist
mailing list