[Dprglist] Odometry on Mecanum-wheeled robots?

Doug Paradis paradug at gmail.com
Wed Apr 15 15:35:33 PDT 2020


Murray,
   Magnetometers readings are influenced by random magnetic fields. They
can be tricky to calibrate and use in practice on small hobbyist robots.
DPRG has an infamous video of Eric, the member I mentioned before, who was
using a magnetometer to provide a true heading for a robot in a outdoor
contest. His robot had performed very well in his first run just barely
missing the end target, the orange ball seen in the video below. However on
his next runs, he hit the "circle of death". It was place in the sidewalk
that had a loop of rebar buried in the concrete. You can see the results at
about 0:51 of this video https://www.youtube.com/watch?v=LryN6zd_n6I. You
should keep iron away from the sensor. You may be surprised to find your
headers are magnetic, your screws and nuts are steel, etc... Motors can
also cause issues, so the sensor should be away from them. It is a general
good practice on motors to have a 0.1 uf capacitor between the motor leads,
and from each lead to the case of the motor. This mostly for electrical
noise, but can also influence your compass.  I have found magnetometers to
be heavily influenced by environment, especially indoors. They may work in
one room and not the next. In cement slab floor homes and buildings
unpredictable things happen. For these reasons, I depend on the IMU's gyro
reading for heading on my robots. Outdoors I would use GPS over an
magnetometer, unless I was trying to not use GPS for contest reasons.

I hate to be such a Debbie downer, but so far in my limited experience
these seem to be the results.

Regards,
Doug P.

On Wed, Apr 15, 2020 at 4:50 PM Murray Altheim via DPRGlist <
dprglist at lists.dprg.org> wrote:

> Hi Doug,
>
> No, I hadn't seen it, and it's exactly the kind of thing that will be
> helpful,
> with a nice, to-the-point algorithm. Thanks! I've ported Arduino sketches
> to
> Python on a couple of occasions so having a bit of a model is great.
>
> BTW, an update on waht I posted yesterday: my various attempts in Python at
> converting a magnetometer produces output, but not the *right* output. I've
> now written my LSM9DS1 tests into the one I have for the BNO055 (which
> produces
> headings that make sense, 0-360 degrees), but I can't even figure out what
> the
> three or four test functions I've created are doing, there seems to be no
> relationship between the BNO055's output and the function outputs.
>
> So I'll continue to work on that, but later. Yesterday evening was
> magnetometer
> stuff, which kept me away from working on my PID controller. That's more
> of a
> priority.
>
> [And a 4 hour robot! Wow! I've yet to see how long my 3Ah Makita batteries
> last,
> where I actually have implemented a digital switch to shut down the more
> power-
> intensive sensors when in "standby" mode, hopefully to help with battery
> life.]
>
> Cheers,
>
> Murray
>
> On 16/04/20 2:26 AM, secretary at dprg.org wrote:
> > Murray,
> >      In case you haven't found this tutorial by Brett Beauregard on PID,
> it is a really good one
> http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/
> .
> >
> > Regards,
> > Doug P.
> >
> > On Wed, Apr 15, 2020 at 9:17 AM secretary at dprg.org <mailto:
> secretary at dprg.org> <secretary at dprg.org <mailto:secretary at dprg.org>>
> wrote:
> >
> >     Murray,
> >          The rule of thumb with casters is that they can navigate bumps
> up to a maximum size of the radius of the wheel. The little ball casters
> usually have a really small radius.
> >     Regards,
> >     Doug P.
> >
> >     On Wed, Apr 15, 2020 at 12:58 AM Murray Altheim via DPRGlist <
> dprglist at lists.dprg.org <mailto:dprglist at lists.dprg.org>> wrote:
> >
> >         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
> >
> >         _______________________________________________
> >         DPRGlist mailing list
> >         DPRGlist at lists.dprg.org <mailto:DPRGlist at lists.dprg.org>
> >         http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
> >
>
> --
>
> ...........................................................................
> 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
>
> _______________________________________________
> DPRGlist mailing list
> DPRGlist at lists.dprg.org
> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.dprg.org/pipermail/dprglist-dprg.org/attachments/20200415/e6f649ad/attachment-0001.html>


More information about the DPRGlist mailing list