<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Paul et al,</p>
    <p>This is not correct.  What I  attempted to make "very clear" is
      that the STEERING of the robot does not use a proportional
      controller, but rather a linear controller with a deadzone.  That
      all happens above the level of the two PID controllers, which
      obviously DO incorporate a proportional term, the "P" in "PID."  
      <br>
    </p>
    <p>I obviously need to think about my communication skills, as I
      "very clearly" did not explain this well.</p>
    <p>cheers!</p>
    <p>dpa</p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 1/15/22 11:08 AM, Paul Bouchier via
      DPRGlist wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CABfe6oSMOgVojq=Pt8Q5=XA=Xf0Lortkeu=Qx6bkC+DBfNMYJg@mail.gmail.com">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <p style="background-color: #f4eaa5;color: #000000
        ;margin:5px;padding: 2px;text-align: left !important;
        align-content: center; display: block; border: 1px solid
        #000000; font-size: large; font-family: sans-serif;"><strong><em
            style="font-size: 11px;"> [EXTERNAL SENDER]</em></strong></p>
      <div dir="ltr">
        <div>Doug, Re your statement about David probably using a P
          controller with Kp=1, he made it very clear at last RBNV that
          he is not using a proportional controller; that he adds &
          subtracts a speed offset from each wheel's setpoint that is a
          constant, irregardless of the magnitude of angular error. i.e.
          Kp=0. He mentioned the amount of offset as being around 10-15%
          of full speed, though I imagine it's adjustable. The point is
          it has constant magnitude, regardless of the magnitude of the
          angular error.</div>
        <div>Cheers</div>
        <div>Paul<br>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Sat, Jan 15, 2022 at 9:22
          AM Doug Paradis <<a href="mailto:paradug@gmail.com"
            moz-do-not-send="true">paradug@gmail.com</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">Paul,
            <div>    Regarding the method of reading encoders. I suggest
              that you try pulse timing instead of pulse counting for
              low encoder ticks per period.  The following is a quote
              from the article at <a
href="https://www.motioncontroltips.com/how-are-encoders-used-for-speed-measurement/"
                target="_blank" moz-do-not-send="true">https://www.motioncontroltips.com/how-are-encoders-used-for-speed-measurement/</a>,
              "<span
                style="color:rgb(102,102,102);font-family:Raleway,sans-serif">With
                the pulse timing method, a high-frequency clock signal </span><span
                style="font-family:Raleway,sans-serif"><font
                  color="#000000">(like the system clock)</font></span><span
style="color:rgb(102,102,102);font-family:Raleway,sans-serif"> is
                counted during one encoder period (the pitch, or
                interval between two adjacent lines or windows). The
                number of cycles of the clock signal (m), divided by the
                clock frequency (f), gives the time for the encoder
                period (the time for the encoder to rotate through one
                pitch)."</span></div>
            <div><font color="#000000"><br>
              </font></div>
            <div><font face="Raleway, sans-serif" color="#000000">  I
                suspect that if you look into the details of David 's
                code, he is actually using a P controller to correct the
                heading error with a Kp of 1 (or a scaled value) but
                doesn't call it a P controller. In other words, the
                "rotation" is something like rotation = delta encoder
                counts (i.e., rotation = Kp (delta encoder counts, where
                Kp = 1).</font></div>
            <div><font face="Raleway, sans-serif" color="#000000"><br>
              </font></div>
            <div><font face="Raleway, sans-serif" color="#000000">Regards,</font></div>
            <div><font face="Raleway, sans-serif" color="#000000">Doug
                P. </font></div>
          </div>
          <br>
          <div class="gmail_quote">
            <div dir="ltr" class="gmail_attr">On Sat, Jan 15, 2022 at
              5:32 AM Paul Bouchier via DPRGlist <<a
                href="mailto:dprglist@lists.dprg.org" target="_blank"
                moz-do-not-send="true">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">
              <div dir="ltr">
                <div>David - going back to your description of how you
                  manually turned the wheel a little bit when the speed
                  was supposed to be zero, and the integral of speed
                  error built up until it overpowered you and drove the
                  wheel back to where it started - I'm confused because
                  I don't understand how you must be calculating speed
                  for that to be true. A naive implementation of
                  speed-measurement would be to count the number of
                  encoder counts in each 40ms tick. So when you manually
                  moved the wheel, let's imagine there were a few ticks
                  when a few counts were detected, then no more counts
                  in any subsequent ticks. Speed should be zero after
                  motion stops, so where's the error to integrate and
                  cause corrective force to build up over time? Put
                  another way, there was a speed error a few seconds ago
                  but now there's no speed error; when does that error
                  "go away", and when does the PID loop stop remembering
                  it and trying to fight against it?</div>
                <div><br>
                </div>
                <div>This is relevant to my current concerns with
                  Mowbot, since it was discovered at Tuesday's meeting
                  that the low rate of encoder ticks on Mowbot means
                  I'll only see 2 or 3 counts per tick (hard to
                  control), so I'm thinking about adopting Pat's
                  approach (which he gave up on) of measuring the period
                  between count incrementing. Pat - I'm also wondering
                  why you gave up on that approach and changed encoders
                  to one that has more counts - was there some basic
                  flaw in the approach?<br>
                </div>
                <div><br>
                </div>
                <div>Thanks</div>
                <div><br>
                </div>
                <div>Paul<br>
                </div>
              </div>
              _______________________________________________<br>
              DPRGlist mailing list<br>
              <a href="mailto:DPRGlist@lists.dprg.org" target="_blank"
                moz-do-not-send="true">DPRGlist@lists.dprg.org</a><br>
              <a
                href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org"
                rel="noreferrer" target="_blank" moz-do-not-send="true">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a><br>
            </blockquote>
          </div>
        </blockquote>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
DPRGlist mailing list
<a class="moz-txt-link-abbreviated" href="mailto:DPRGlist@lists.dprg.org">DPRGlist@lists.dprg.org</a>
<a class="moz-txt-link-freetext" href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a>
</pre>
    </blockquote>
  </body>
</html>