<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Karim,</p>
    <p>How flattering! :)<br>
    </p>
    <p>Well, yes.   But this gets in deep.</p>
    <p>Most of the subsumption machine is reactive, even the
      navigation.   Ballistic behaviors are the exception.  They can of
      course be subsumed like any others.  The question becomes what
      happens to them while subsumed?  Remember from their point of view
      they are continuing to run and output controls to the robot.  They
      are ballistic.<br>
    </p>
    <p>So suppose you have a ballistic behavior to rotate in place some
      number of degrees.   Half way through the robot bumps into
      something.  So the ballistic bumper behavior subsumes the rotate
      behavior and moves the robot to a new position and angle, and
      releases control.  So what is the correct action for the ballistic
      rotate behavior at that point?  You really need to start over and
      recalculate the angle, you can't just complete the angle you have
      ballistically , or you'll be pointing in the wrong direction.<br>
    </p>
    <p> Further during the bump behavior the rotate continued to run and
      output it's commands, but it was subsumed.   So depending on how
      long the bumper behavior took, the ballistic maneuver may or may
      not have actually completed before the control is even returned to
      it..  <br>
    </p>
    <p>This is what is meant by "ballistic behaviors can't be
      interrupted," the source of so much confusion.    It's not that
      they can't be.  It's that it screws them up.   In that sense they
      break the subsumption paradigm.  Recalling that this is all in the
      context of subsumption, and not perhaps more generalized use of
      the terms.<br>
    </p>
    <p>I've found the best option is usually just to abort.  So the
      rotate aborts if subsumed.  Let higher levels start things over if
      they want.  <br>
    </p>
    <p>But this only re-enforces, I think, that ballistic behaviors in
      the context of subsumption are differentiated from servoing
      behaviors in that they continue executing after the signal that
      triggered them has ceased.  (and they should generally be
      avoided.)  <br>
    </p>
    <p>The subsumption of servoing behaviors does not have this problem</p>
    <p>cheers!</p>
    <p>dpa</p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 10/31/21 11:00 PM, Karim Virani
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAKtnkiztignb89pdUgiDg7aQJmtgA01XWg-2_WbM6dbaJJoRUg@mail.gmail.com">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <div dir="ltr">I agree, that's the problem. Crossover. Subsumption
        is not the only architecture in use. Behavior-based is a broad
        concept and there are many arbitration schemes that can be
        employed. I was trying to carefully constrain my comments to "my
        vote", in other words, just my own words, my own opinion - not
        trying to represent or denigrate any other point of view or
        approach. <br>
        <br>
        Maybe the term "ballistic behavior" belongs exclusively to
        subsumption architectures ... and I've mistakenly heard it
        applied more broadly.  I'm certainly no expert in subsumption.
        We use explicit state machines to control our double-digit DOF
        robots. So I try not to comment directly on subsumption.<br>
        <br>
        But It can be confusing. When you google:<br>
        <br>
        "ballistic behavior" robot subsumption<br>
        <br>
        The first thing that comes up is this excerpt from an expert in
        Dallas:<br>
        <br>
        <span
style="color:rgb(32,33,36);font-family:Roboto,arial,sans-serif;font-size:16px">Ballistic
          behaviors </span><b
style="color:rgb(32,33,36);font-family:Roboto,arial,sans-serif;font-size:16px">cannot
          be subsumed</b><span
style="color:rgb(32,33,36);font-family:Roboto,arial,sans-serif;font-size:16px">:
          they must run to completion. 2. Ballistic behaviors are
          therefore usually assigned highest priority.</span><br>
        <br>
        Yup, the excerpt stops right there even though you continue in
        your article:<br>
        <br>
        <span style="color:rgb(0,0,0);font-family:"Times New
          Roman";font-size:medium">3. Ballistic behaviors can,
          however, be aborted.</span><br
          style="color:rgb(0,0,0);font-family:"Times New
          Roman";font-size:medium">
        <br style="color:rgb(0,0,0);font-family:"Times New
          Roman";font-size:medium">
        <span style="color:rgb(0,0,0);font-family:"Times New
          Roman";font-size:medium">In fact, abort is really the
          only reasonable response of a ballistic task when subsumed.
          For the SR04 robot, the only task that can subsume a ballistic
          bumper behavior, which is the highest priority behavior, is
          another ballistic bumper behavior.</span>
        <div><font size="3" face="Times New Roman" color="#000000"><br>
          </font></div>
        <div><br>
        </div>
        <div>So can they be subsumed or not? The language is tricksy.</div>
        <div><br>
        </div>
        <div><a
href="http://www.geology.smu.edu/dpa-www/robo/subsumption/#:~:text=Ballistic%20behaviors%20cannot%20be%20subsumed,therefore%20usually%20assigned%20highest%20priority"
            moz-do-not-send="true">http://www.geology.smu.edu/dpa-www/robo/subsumption/#:~:text=Ballistic%20behaviors%20cannot%20be%20subsumed,therefore%20usually%20assigned%20highest%20priority</a>.<br>
        </div>
        <div><br>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Sun, Oct 31, 2021 at 9:59
          PM David P. Anderson via DPRGlist <<a
            href="mailto:dprglist@lists.dprg.org" 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>
            <p>Well, Karim, now that you mention it...</p>
            <p><br>
            </p>
            <div>On 10/31/21 5:26 PM, Karim Virani via DPRGlist wrote:<br>
            </div>
            <blockquote type="cite">
              <div dir="ltr">I agree with Doug, you should never have
                blocking code unless you can dedicate a separate thread
                to it apart from your main loop's thread.<br>
                <br>
                And not to start up the whole debate again, I personally
                vote that there is no use for ballistic behaviors. I
                treat them as an academic construct. There are plenty of
                uses of objective-oriented and terminating behaviors -
                including those where the objective is to last for a
                certain amount of time. But they should still be
                interruptible and cancellable by higher priority
                behaviors. <br>
              </div>
            </blockquote>
            <p>I believe this is a misunderstanding of what ballistic
              behaviors are in the context of subsumption.   For some
              reason the idea has taken root that what makes a behavior
              ballistic is that it for some reason cannot be
              interrupted.    That is a red herring.   What make a
              behavior a ballistic behavior <b><i><u>in the context of
                    subsumption</u></i></b> is that it continues to
              execute after the signal that triggered it has ceased.  <br>
            </p>
            <p>That's all.    <tt><br>
              </tt></p>
            <p>I don't understand why such a simple concept has turned
              out to be so hard to communicate.  I consider this a major
              failing on my part.<br>
            </p>
            <p>cheers!</p>
            <p>David</p>
            <p><br>
            </p>
            <p><br>
            </p>
            <blockquote type="cite"><br>
              <div class="gmail_quote">
                <div dir="ltr" class="gmail_attr">On Sun, Oct 31, 2021
                  at 5:08 PM Doug Paradis 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="auto">Kumar,
                    <div>    I always pass through the loop. So a 1 sec
                      backwards maneuver would use a loop counter with a
                      disengage value of 50 for a loop time of 20 mS. I
                      am not using a multitasking framework, which opens
                      up other possibilities. </div>
                    <div><br>
                    </div>
                    <div>Regards </div>
                    <div>Doug P.<br>
                      <br>
                      <div dir="ltr">Sent from my iPhone</div>
                      <div dir="ltr"><br>
                        <blockquote type="cite">On Oct 31, 2021, at 4:54
                          PM, Thalanayar Muthukumar via DPRGlist <<a
                            href="mailto:dprglist@lists.dprg.org"
                            target="_blank" moz-do-not-send="true">dprglist@lists.dprg.org</a>>
                          wrote:<br>
                          <br>
                        </blockquote>
                      </div>
                      <blockquote type="cite">
                        <div dir="ltr">
                          <div dir="ltr">
                            <div dir="ltr"><a
href="https://secure-web.cisco.com/12R-xW2iM6X1mtZ6lGWZ2cU_V7WhrcVFmrYppQ5_RFJAtuHcumxuYD4t8YW_aGm011_ipOLIKUMPmlNlXLKe0mDeZ5NILZd__YuRF_kKIzyxN8EiJErAuYE-OcebwmywmyJ7SoBG9yB3Oyna9Z9RUY7kwZdTuI-sO3UWkVWgVNhYiwT1_tphO9qAaoFdwYrgHVEynVcBz9QhIC_xYutA9B-8OhKAWWEGvh-8EqTFHmW8H5ZsvYDMLEZNwPag9e3p4bO7y-E8y4CehSNJJRVtWHgi8hUB2z2KYLDpQOUR9fxk/https%3A%2F%2Fyoutu.be%2FfuFamNWyXc4"
                                target="_blank" moz-do-not-send="true">https://youtu.be/fuFamNWyXc4</a> (~15
                              sec)</div>
                            <div dir="ltr"><br>
                            </div>
                            <div dir="ltr">20 times per sec</div>
                            <div dir="ltr">- default behavior - go
                              straight forward, green headlights</div>
                            <div dir="ltr">- higher priority behavior -
                              light sensed, turn left, red headlights</div>
                            <div dir="ltr"><br>
                            </div>
                            <div dir="ltr">My understanding of BBR is
                              that there should be no state maintained.</div>
                            <div dir="ltr"><br>
                            </div>
                            <div dir="ltr">Question - If we trigger a
                              ballistic behavior (e.g. go straight
                              backward for one sec), is it ok to not
                              return to the loop every 50 msec?</div>
                            <div dir="ltr"><br>
                            </div>
                            <div dir="ltr">Or is it preferable to
                              maintain state and count 20 times for
                              getting duration of 1 sec?</div>
                            <div dir="ltr"><br>
                            </div>
                            <div dir="ltr">Regards.</div>
                            <div dir="ltr">- Kumar<br>
                              <br>
                            </div>
                            <br>
                            <br>
                            <div dir="ltr">Sent from my iPhone</div>
                          </div>
                          <span>_______________________________________________</span><br>
                          <span>DPRGlist mailing list</span><br>
                          <span><a href="mailto:DPRGlist@lists.dprg.org"
                              target="_blank" moz-do-not-send="true">DPRGlist@lists.dprg.org</a></span><br>
                          <span><a
                              href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org"
                              target="_blank" moz-do-not-send="true">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a></span><br>
                        </div>
                      </blockquote>
                    </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>
              <br>
              <fieldset></fieldset>
              <pre>_______________________________________________
DPRGlist mailing list
<a href="mailto:DPRGlist@lists.dprg.org" target="_blank" moz-do-not-send="true">DPRGlist@lists.dprg.org</a>
<a href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org" target="_blank" moz-do-not-send="true">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a>
</pre>
            </blockquote>
          </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>
  </body>
</html>