[Dprglist] Odometry on Mecanum-wheeled robots?

secretary at dprg.org secretary at dprg.org
Wed Apr 15 07:26:26 PDT 2020


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 <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> 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
>> 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/249c75e7/attachment.html>


More information about the DPRGlist mailing list