<div dir="ltr">Murray,<div>    In case you haven't found this tutorial by Brett Beauregard on PID, it is a really good one <a href="http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/">http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/</a>. </div><div><br></div><div>Regards,</div><div>Doug P.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Apr 15, 2020 at 9:17 AM <a href="mailto:secretary@dprg.org">secretary@dprg.org</a> <<a href="mailto:secretary@dprg.org">secretary@dprg.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Murray,<div>    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.</div><div>Regards,</div><div>Doug P.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Apr 15, 2020 at 12:58 AM Murray Altheim via DPRGlist <<a href="mailto:dprglist@lists.dprg.org" target="_blank">dprglist@lists.dprg.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I'm going to contradict myself. Regarding orientation sensors, I dug<br>
around a bit and found:<br>
<br>
    <a href="https://blog.digilentinc.com/how-to-convert-magnetometer-data-into-compass-heading/" rel="noreferrer" target="_blank">https://blog.digilentinc.com/how-to-convert-magnetometer-data-into-compass-heading/</a><br>
<br>
and am quite pleased to be getting a compass heading output from the<br>
magnetometer of an Adafruit LSM9DS1. I'm no mean Python programmer but<br>
in the interest of sharing, here goes:<br>
<br>
------------------------------------------------------------<br>
#!/usr/bin/env python3<br>
# -*- coding: utf-8 -*-<br>
#<br>
# reads an x,y,z value from the LSM9DS1 magnetometer and<br>
# displays a heading in degrees.<br>
<br>
import time, board, busio, math, adafruit_lsm9ds1<br>
<br>
LSB = 0.48828125 #mG<br>
<br>
def convert_to_direction(mag_x, mag_y, mag_z):<br>
     xGaussData = mag_x * LSB<br>
     yGaussData = mag_y * LSB<br>
     if xGaussData == 0.0:<br>
         return 90.0 if yGaussData < 0.0 else 0.0<br>
     else:<br>
         direction = math.atan( yGaussData / xGaussData ) * ( 180.0 / math.pi )<br>
     if direction > 360.0:<br>
         return direction - 360.0<br>
     elif direction < 0.0:<br>
         return direction + 360.0<br>
     else:<br>
         return direction<br>
<br>
try:<br>
     i2c = busio.I2C(board.SCL, board.SDA)<br>
     sensor = adafruit_lsm9ds1.LSM9DS1_I2C(i2c)<br>
     while True:<br>
         mag_x, mag_y, mag_z = sensor.magnetic<br>
         direction = convert_to_direction(mag_x, mag_y, mag_z)<br>
         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))<br>
         time.sleep(0.5)<br>
<br>
except KeyboardInterrupt:<br>
         print('\nlsm9ds1   : Ctrl-C caught: keyboard interrupt.')<br>
<br>
#EOF<br>
------------------------------------------------------------<br>
<br>
with output like:<br>
<br>
lsm9ds1   : direction: 31.17°;  magnetometer(G): (0.349, 0.211, 0.077)<br>
lsm9ds1   : direction: 21.02°;  magnetometer(G): (0.413, 0.159, 0.095)<br>
lsm9ds1   : direction: 18.88°;  magnetometer(G): (0.438, 0.150, 0.078)<br>
lsm9ds1   : direction: 8.52°;   magnetometer(G): (0.356, 0.053, 0.105)<br>
lsm9ds1   : direction: 0.81°;   magnetometer(G): (0.285, 0.004, 0.130)<br>
lsm9ds1   : direction: 2.04°;   magnetometer(G): (0.248, 0.009, 0.114)<br>
lsm9ds1   : direction: 4.20°;   magnetometer(G): (0.242, 0.018, 0.128)<br>
lsm9ds1   : direction: 6.50°;   magnetometer(G): (0.232, 0.026, 0.128)<br>
lsm9ds1   : direction: 3.05°;   magnetometer(G): (0.303, 0.016, 0.121)<br>
lsm9ds1   : direction: 346.79°; magnetometer(G): (0.308, -0.072, 0.258)<br>
<br>
On 15/04/20 3:50 PM, Murray Altheim via DPRGlist wrote:<br>
> [...] so the idea of taking a more "raw" output from a magnetometer and having to<br>
> process that for a value vs. an already-complete orientation value in radians or<br>
> degrees from the BNO055, well, that's pretty compelling. I'd both have to spend<br>
> a lot of time learning and debugging versus just getting a compass heading output<br>
> from the BNO055. While it might be somebody's cup of tea to work out that kind<br>
> of detail, it's not like there's not enough challenges in building a robot. And<br>
> time, hmm. Time.<br>
...........................................................................<br>
Murray Altheim <murray18 at altheim dot com>                       = =  ===<br>
<a href="http://www.altheim.com/murray/" rel="noreferrer" target="_blank">http://www.altheim.com/murray/</a>                                     ===  ===<br>
                                                                    = =  ===<br>
     In the evening<br>
     The rice leaves in the garden<br>
     Rustle in the autumn wind<br>
     That blows through my reed hut.<br>
            -- Minamoto no Tsunenobu<br>
<br>
_______________________________________________<br>
DPRGlist mailing list<br>
<a href="mailto:DPRGlist@lists.dprg.org" target="_blank">DPRGlist@lists.dprg.org</a><br>
<a href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org" rel="noreferrer" target="_blank">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a><br>
</blockquote></div>
</blockquote></div>