[Dprglist] Odometry on Mecanum-wheeled robots?

Karim Virani pondersome64 at gmail.com
Wed Apr 15 18:02:04 PDT 2020


I'll double down on that recommendation. I had a robot run into the Gulf of
Mexico because of a magnetic anomaly on the beach in South Padre.

On Wed, Apr 15, 2020 at 5:35 PM Doug Paradis via DPRGlist <
dprglist at lists.dprg.org> wrote:

> 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
>>
> _______________________________________________
> 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/130407f0/attachment.html>


More information about the DPRGlist mailing list