<html><head></head><body><div class="ydpb5cee56byahoo-style-wrap" style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:16px;"><div></div>
        <div dir="ltr" data-setdir="false"><span> Re: Odometry on Mecanum-wheeled robots My Experiences (Steve Alaniz)</span></div><div dir="ltr" data-setdir="false"><span><br></span></div><div dir="ltr" data-setdir="false"><span>Doug,</span></div><div dir="ltr" data-setdir="false"><span><br></span></div><div dir="ltr" data-setdir="false"><span>        I  would love to know if you have tried the computer mouse method of navigation. I worked with FRC team 1884 back in 2007 and tried to do exactly what you described. I first tried an optical mouse but after a few feet in a simple out and back test I got unacceptable errors. I decided it was lost counts from the optics either not seeing the correct pattern or that they did not detect movement because the surface material. So I tried an old mechanical ball mouse. Same problem happened. I think errors in a computer mouse are not seen because humans don't care about the count, they care about the position and use their own vision and correct for any errors without ever knowing they occurred. <br></span></div><div dir="ltr" data-setdir="false"><span>   In the end I settled on attaching encoders on two 6" omni wheels that would be positioned at 90 degrees to each other; one for the X direction and one for the Y. (I believe this is exactly what Pm used with his FTC robot team.) The wheels needed to be spring loaded to ensure reliable contact with the ground. I only got as far as testing forwards and backwards and had really good results with that. However, that project was shelved because of the fear that Mecanums can't push well in a competition; A very common myth I have since determined to be a co-efficient issue.<br></span></div><div dir="ltr" data-setdir="false"><span>   As you may remember, I still have my base Mecanum platform and I had decided to restart my projects, that's when the tornado hit.... and now this virus thing. Anyway, at some point I will be adding real navigation, at least, that's the plan.</span></div><div dir="ltr" data-setdir="false"><span><br></span></div><div dir="ltr" data-setdir="false"><span>Steve</span><br></div><div><br></div>
        
        </div><div id="yahoo_quoted_7303700744" class="yahoo_quoted">
            <div style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;color:#26282a;">
                
                <div>
                    On Tuesday, April 14, 2020, 3:45:53 PM CDT, dprglist-request@lists.dprg.org <dprglist-request@lists.dprg.org> wrote:
                </div>
                <div><br></div>
                <div><br></div>
                <div><div dir="ltr">Send DPRGlist mailing list submissions to<br></div><div dir="ltr">    <a ymailto="mailto:dprglist@lists.dprg.org" href="mailto:dprglist@lists.dprg.org">dprglist@lists.dprg.org</a><br></div><div dir="ltr"><br></div><div dir="ltr">To subscribe or unsubscribe via the World Wide Web, visit<br></div><div dir="ltr">    <a href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org" target="_blank">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a><br></div><div dir="ltr">or, via email, send a message with subject or body 'help' to<br></div><div dir="ltr">    <a ymailto="mailto:dprglist-request@lists.dprg.org" href="mailto:dprglist-request@lists.dprg.org">dprglist-request@lists.dprg.org</a><br></div><div dir="ltr"><br></div><div dir="ltr">You can reach the person managing the list at<br></div><div dir="ltr">    <a ymailto="mailto:dprglist-owner@lists.dprg.org" href="mailto:dprglist-owner@lists.dprg.org">dprglist-owner@lists.dprg.org</a><br></div><div dir="ltr"><br></div><div dir="ltr">When replying, please edit your Subject line so it is more specific<br></div><div dir="ltr">than "Re: Contents of DPRGlist digest..."<br></div><div dir="ltr"><br></div><div dir="ltr"><br></div><div dir="ltr">Today's Topics:<br></div><div dir="ltr"><br></div><div dir="ltr">   1. Re: Odometry on Mecanum-wheeled robots? (Doug Paradis)<br></div><div dir="ltr"><br></div><div dir="ltr"><br></div><div dir="ltr">----------------------------------------------------------------------<br></div><div dir="ltr"><br></div><div dir="ltr">Message: 1<br></div><div dir="ltr">Date: Tue, 14 Apr 2020 11:41:50 -0500<br></div><div dir="ltr">From: Doug Paradis <<a ymailto="mailto:paradug@gmail.com" href="mailto:paradug@gmail.com">paradug@gmail.com</a>><br></div><div dir="ltr">To: "Patrick R. Michaud" <<a ymailto="mailto:pmichaud@pobox.com" href="mailto:pmichaud@pobox.com">pmichaud@pobox.com</a>><br></div><div dir="ltr">Cc: Carl Ott <<a ymailto="mailto:carl.ott.jr@gmail.com" href="mailto:carl.ott.jr@gmail.com">carl.ott.jr@gmail.com</a>>, DPRG <<a ymailto="mailto:dprglist@lists.dprg.org" href="mailto:dprglist@lists.dprg.org">dprglist@lists.dprg.org</a>><br></div><div dir="ltr">Subject: Re: [Dprglist] Odometry on Mecanum-wheeled robots?<br></div><div dir="ltr">Message-ID:<br></div><div dir="ltr">    <CAOdUW+<a ymailto="mailto:ZPZ7YOhkTo26OnnwL4nei7_K8KCBBhKRG95oBZE8km6Q@mail.gmail.com" href="mailto:ZPZ7YOhkTo26OnnwL4nei7_K8KCBBhKRG95oBZE8km6Q@mail.gmail.com">ZPZ7YOhkTo26OnnwL4nei7_K8KCBBhKRG95oBZE8km6Q@mail.gmail.com</a>><br></div><div dir="ltr">Content-Type: text/plain; charset="utf-8"<br></div><div dir="ltr"><br></div><div dir="ltr">Murray,<br></div><div dir="ltr">     Another approach of using an external sensor to get position is<br></div><div dir="ltr">optical flow. When used with small hobby robots, the robot usually uses one<br></div><div dir="ltr">or more re-purposed optical mouse camera/DSP chips. These are getting<br></div><div dir="ltr">harder to source as, newer mouse incorporate the USB bus functions into the<br></div><div dir="ltr">same chip. Older optical mice had a separate chip which contained the<br></div><div dir="ltr">camera and DSP and another chip that did the USB. You could tap into the<br></div><div dir="ltr">serial output of the DSP. A web search will uncover chips that you can<br></div><div dir="ltr">use.<br></div><div dir="ltr">Regards,<br></div><div dir="ltr">Doug P.<br></div><div dir="ltr"><br></div><div dir="ltr">On Tue, Apr 14, 2020 at 11:21 AM Doug Paradis <<a ymailto="mailto:paradug@gmail.com" href="mailto:paradug@gmail.com">paradug@gmail.com</a>> wrote:<br></div><div dir="ltr"><br></div><div dir="ltr">> Patrick,<br></div><div dir="ltr">>      Really cool!<br></div><div dir="ltr">> Regards,<br></div><div dir="ltr">> Doug P.<br></div><div dir="ltr">><br></div><div dir="ltr">> On Tue, Apr 14, 2020 at 11:07 AM Patrick R. Michaud via DPRGlist <<br></div><div dir="ltr">> <a ymailto="mailto:dprglist@lists.dprg.org" href="mailto:dprglist@lists.dprg.org">dprglist@lists.dprg.org</a>> wrote:<br></div><div dir="ltr">><br></div><div dir="ltr">>> Hello Murray and Carl,<br></div><div dir="ltr">>><br></div><div dir="ltr">>> This may not be directly relevant to the original query, but this season<br></div><div dir="ltr">>> my FTC 7172 team did odometry on their competition robot with mecanum<br></div><div dir="ltr">>> wheels.  In addition to using encoders on the wheels themselves (for motion<br></div><div dir="ltr">>> profiling similar to what Carl is doing), they also have a separate set of<br></div><div dir="ltr">>> "tracking" omni-wheels which are passive and serve only to keep track of<br></div><div dir="ltr">>> robot position and orientation.<br></div><div dir="ltr">>><br></div><div dir="ltr">>> This ended up working extremely well -- in at least one match, the robot<br></div><div dir="ltr">>> ended up in a spot other than the one it was programmed to be in, but was<br></div><div dir="ltr">>> able to self-correct to avoid obstacles and continue scoring points.  You<br></div><div dir="ltr">>> can really see it about 11 seconds into this video:<br></div><div dir="ltr">>> <a href="https://photos.app.goo.gl/vuDCL7kFBaw8j6Gz8" target="_blank">https://photos.app.goo.gl/vuDCL7kFBaw8j6Gz8</a><br></div><div dir="ltr">>><br></div><div dir="ltr">>> At t=11, the 7172 robot is grabbing the red platform and attempting to<br></div><div dir="ltr">>> turn it 90 degrees.  But the platform gets caught on the field wall, and<br></div><div dir="ltr">>> it's unable to complete the turn/motion.  When the robot lets go of the<br></div><div dir="ltr">>> platform (t=14) the robot is completely in the wrong orientation/position<br></div><div dir="ltr">>> -- it's supposed to be directly facing the camera, and about a foot to the<br></div><div dir="ltr">>> right of where it ended up.  But with the tracking odometry the robot<br></div><div dir="ltr">>> self-corrects and is able to correctly navigate under the bars and back to<br></div><div dir="ltr">>> pick up the remaining blocks.<br></div><div dir="ltr">>><br></div><div dir="ltr">>> Here's a video of a complete (and higher-scoring) match from the regional<br></div><div dir="ltr">>> championship:<br></div><div dir="ltr">>> <a href="https://drive.google.com/file/d/1RY8RPWrEfyWJZ2GvFSIuuGkY4KMUXLAS/view?usp=sharing" target="_blank">https://drive.google.com/file/d/1RY8RPWrEfyWJZ2GvFSIuuGkY4KMUXLAS/view?usp=sharing</a><br></div><div dir="ltr">>><br></div><div dir="ltr">>> I'll be happy to forward any questions to the team if anyone is curious<br></div><div dir="ltr">>> about other items.<br></div><div dir="ltr">>><br></div><div dir="ltr">>> Pm<br></div><div dir="ltr">>><br></div><div dir="ltr">>><br></div><div dir="ltr">>> On Tue, Apr 14, 2020 at 09:16:47AM -0500, Carl Ott via DPRGlist wrote:<br></div><div dir="ltr">>> > Hi Murray,<br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> > Yes that video you saw was mine.<br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> > 'HoverSim'  has odometers on all 4 mecanum wheels.<br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> > Currently, I only use a velocity loop for speed control. So far, I make<br></div><div dir="ltr">>> no<br></div><div dir="ltr">>> > attempt to close any loop around position.<br></div><div dir="ltr">>> > Hence, the video you saw was simply time and speed.<br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> > My next step for HoverSim will be to calibrate encoder ticks to distance<br></div><div dir="ltr">>> > traveled for<br></div><div dir="ltr">>> > - forward<br></div><div dir="ltr">>> > - sideways<br></div><div dir="ltr">>> > - 45 degree diagonal<br></div><div dir="ltr">>> > - rotate in place<br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> > and to try that on different surfaces. Empirical observation hints that<br></div><div dir="ltr">>> > distance traveled might vary by surface.<br></div><div dir="ltr">>> > Also, I suspect that floor flatness could have a significant impact.<br></div><div dir="ltr">>> You'll<br></div><div dir="ltr">>> > recall my video was on a tiled floor, which is anything but<br></div><div dir="ltr">>> 'ultra-flat'.<br></div><div dir="ltr">>> > HoverSim has a flat aluminum plate as base. And we've found spots in the<br></div><div dir="ltr">>> > Dallas Makerspace Interactive Classroom where two wheels do not have<br></div><div dir="ltr">>> enough<br></div><div dir="ltr">>> > grab to overcome the third and fourth when they're adding drag.<br></div><div dir="ltr">>> > To overcome that, I've seen at least one suspension design which has the<br></div><div dir="ltr">>> > front wheels and rear wheels on separate beams, connected by a<br></div><div dir="ltr">>> > front-to-back pivot, to ensure that all 4 wheels touch on uneven<br></div><div dir="ltr">>> surfaces.<br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> > At quick glance, the motors on HoverSim themselves seem well matched and<br></div><div dir="ltr">>> > pretty repeatable. They accumulate pretty similar values after running<br></div><div dir="ltr">>> one<br></div><div dir="ltr">>> > of those timed velocity loop patterns...<br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> > It seems that repeatability varies the most for 45 degree diagonal. That<br></div><div dir="ltr">>> > may not be surprising, considering that in such case, only two wheels<br></div><div dir="ltr">>> are<br></div><div dir="ltr">>> > active and the other two just drag...<br></div><div dir="ltr">>> > In contrast, forward and sideways travel seems to have remarkable<br></div><div dir="ltr">>> > consistency - those seem to return to start pretty well, even with timed<br></div><div dir="ltr">>> > velocity loops, even on an uneven tiled surface.<br></div><div dir="ltr">>> > Amusingly, we also discovered what happens when a wheel falls off. Yes -<br></div><div dir="ltr">>> > that was an unexpected experiment. Remarkably, the robot still<br></div><div dir="ltr">>> responded to<br></div><div dir="ltr">>> > controls quite well -it was almost as if the 4th wheel didn't matter.<br></div><div dir="ltr">>> I'm<br></div><div dir="ltr">>> > still trying to wrap my brain around that one - but...<br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> > The fun will really start after calibrating encoder ticks to distance,<br></div><div dir="ltr">>> to<br></div><div dir="ltr">>> > see how well simple encoders can work.<br></div><div dir="ltr">>> > However, no matter how good simple encoders work, I fully expect to get<br></div><div dir="ltr">>> a<br></div><div dir="ltr">>> > pair or triplet of optical flow sensors, and dabble with pointing at<br></div><div dir="ltr">>> floor<br></div><div dir="ltr">>> > or ceiling...<br></div><div dir="ltr">>> > And then there's another even more fun branch to explore - adding an<br></div><div dir="ltr">>> > adapter layer that makes control response mimic hovercraft motion ;-)<br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> > - Carl<br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> > On Tue, Apr 14, 2020 at 3:42 AM Murray Altheim via DPRGlist <<br></div><div dir="ltr">>> > <a ymailto="mailto:dprglist@lists.dprg.org" href="mailto:dprglist@lists.dprg.org">dprglist@lists.dprg.org</a>> wrote:<br></div><div dir="ltr">>> ><br></div><div dir="ltr">>> > > Hi everyone,<br></div><div dir="ltr">>> > ><br></div><div dir="ltr">>> > > I've just been corresponding with Gareth over at 4Tronix and<br></div><div dir="ltr">>> discussing<br></div><div dir="ltr">>> > > the firmware changes necessary to run a second Picon Zero motor<br></div><div dir="ltr">>> controller,<br></div><div dir="ltr">>> > > which is not trivial but doable. Not that I need another project (!)<br></div><div dir="ltr">>> but<br></div><div dir="ltr">>> > > I've been thinking about adding a second pair of motors and a<br></div><div dir="ltr">>> controller<br></div><div dir="ltr">>> > > to my tiny KRZ01 robot and using Pimoroni's tiny Mecanum wheels that<br></div><div dir="ltr">>> fit<br></div><div dir="ltr">>> > > onto the micro gear motors. It'd certainly be one of the smaller four-<br></div><div dir="ltr">>> > > wheeled Mecanum robots.<br></div><div dir="ltr">>> > ><br></div><div dir="ltr">>> > > The big question is: does anyone bother to do odometry on a<br></div><div dir="ltr">>> Mecanum-wheeled<br></div><div dir="ltr">>> > > robot? There's so much slippage it seems I could get away with not<br></div><div dir="ltr">>> using<br></div><div dir="ltr">>> > > encoders on the motors, which would simplify at least one part of the<br></div><div dir="ltr">>> > > programming. I did remember seeing the video somebody in the group<br></div><div dir="ltr">>> showed<br></div><div dir="ltr">>> > > recently where his robot was navigating the kitchen floor (Carl or<br></div><div dir="ltr">>> Doug?)<br></div><div dir="ltr">>> > > and coming back to the same location after a complicated maneuver.<br></div><div dir="ltr">>> Which<br></div><div dir="ltr">>> > > I *think* requires odometry...<br></div><div dir="ltr">>> > ><br></div><div dir="ltr">>> > > Any advice welcome.<br></div><div dir="ltr">>> > ><br></div><div dir="ltr">>> > > Cheers,<br></div><div dir="ltr">>> > ><br></div><div dir="ltr">>> > > Murray<br></div><div dir="ltr">>> > ><br></div><div dir="ltr">>> > ><br></div><div dir="ltr">>> ...........................................................................<br></div><div dir="ltr">>> > > Murray Altheim <murray18 at altheim dot com>                       =<br></div><div dir="ltr">>> =  ===<br></div><div dir="ltr">>> > > <a href="http://www.altheim.com/murray/" target="_blank">http://www.altheim.com/murray/</a><br></div><div dir="ltr">>>  ===<br></div><div dir="ltr">>> > > ===<br></div><div dir="ltr">>> > >                                                                     =<br></div><div dir="ltr">>> =<br></div><div dir="ltr">>> > > ===<br></div><div dir="ltr">>> > >      In the evening<br></div><div dir="ltr">>> > >      The rice leaves in the garden<br></div><div dir="ltr">>> > >      Rustle in the autumn wind<br></div><div dir="ltr">>> > >      That blows through my reed hut.<br></div><div dir="ltr">>> > >             -- Minamoto no Tsunenobu<br></div><div dir="ltr">>> > ><br></div><div dir="ltr">>> > > _______________________________________________<br></div><div dir="ltr">>> > > DPRGlist mailing list<br></div><div dir="ltr">>> > > <a ymailto="mailto:DPRGlist@lists.dprg.org" href="mailto:DPRGlist@lists.dprg.org">DPRGlist@lists.dprg.org</a><br></div><div dir="ltr">>> > > <a href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org" target="_blank">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a><br></div><div dir="ltr">>> > ><br></div><div dir="ltr">>><br></div><div dir="ltr">>> > _______________________________________________<br></div><div dir="ltr">>> > DPRGlist mailing list<br></div><div dir="ltr">>> > <a ymailto="mailto:DPRGlist@lists.dprg.org" href="mailto:DPRGlist@lists.dprg.org">DPRGlist@lists.dprg.org</a><br></div><div dir="ltr">>> > <a href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org" target="_blank">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a><br></div><div dir="ltr">>><br></div><div dir="ltr">>> _______________________________________________<br></div><div dir="ltr">>> DPRGlist mailing list<br></div><div dir="ltr">>> <a ymailto="mailto:DPRGlist@lists.dprg.org" href="mailto:DPRGlist@lists.dprg.org">DPRGlist@lists.dprg.org</a><br></div><div dir="ltr">>> <a href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org" target="_blank">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a><br></div><div dir="ltr">>><br></div><div dir="ltr">><br></div><div dir="ltr">-------------- next part --------------<br></div><div dir="ltr">An HTML attachment was scrubbed...<br></div><div dir="ltr">URL: <<a href="http://lists.dprg.org/pipermail/dprglist-dprg.org/attachments/20200414/7158e2f5/attachment-0001.html" target="_blank">http://lists.dprg.org/pipermail/dprglist-dprg.org/attachments/20200414/7158e2f5/attachment-0001.html</a>><br></div><div dir="ltr"><br></div><div dir="ltr">------------------------------<br></div><div dir="ltr"><br></div><div dir="ltr">Subject: Digest Footer<br></div><div dir="ltr"><br></div><div dir="ltr">_______________________________________________<br></div><div dir="ltr">DPRGlist mailing list<br></div><div dir="ltr"><a ymailto="mailto:DPRGlist@lists.dprg.org" href="mailto:DPRGlist@lists.dprg.org">DPRGlist@lists.dprg.org</a><br></div><div dir="ltr"><a href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org" target="_blank">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a><br></div><div dir="ltr"><br></div><div dir="ltr"><br></div><div dir="ltr">------------------------------<br></div><div dir="ltr"><br></div><div dir="ltr">End of DPRGlist Digest, Vol 43, Issue 8<br></div><div dir="ltr">***************************************<br></div></div>
            </div>
        </div></body></html>