<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hi Rud,</p>
    <p>Ok, that sounds good to me.  Different descriptions of basically
      the same thing.   I'd be more inclined to emphasize the "subsume"
      nature of subsumption and it's ramifications, which are pretty
      deep once you scratch the surface.</p>
    <p>cheers!</p>
    <p>David</p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 10/28/21 1:13 PM, Rud Merriam via
      DPRGlist wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:e0402033-8ce9-6e46-c8b1-d6f82aaca113@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>
      <p>David,</p>
      <p>I'd like to discuss where we differ on the definition of
        subsumption. I'm looking at your page on subsumption <a
          class="moz-txt-link-freetext"
          href="https://www.dprg.org/articles/2007-03a/"
          moz-do-not-send="true">https://www.dprg.org/articles/2007-03a/</a>
        since I don't have the books you are referencing. (Actually, I
        found a PDF of "Mobile Robots" at <a
          class="moz-txt-link-freetext"
href="https://cs.au.dk/~ocaprani/legolab/DigitalControl.dir/NXT/Lesson9.dir/11128_Mobile_Robots_Inspiration_to_Implementation-Flynn_and_Jones.pdf"
          moz-do-not-send="true">https://cs.au.dk/~ocaprani/legolab/DigitalControl.dir/NXT/Lesson9.dir/11128_Mobile_Robots_Inspiration_to_Implementation-Flynn_and_Jones.pdf</a>"
        <br>
      </p>
      <p> The book I started from was elementary and I disposed of it
        during a recent move. I have read much on the web about
        subsumption and BTs, and have implemented BTs for robotics work.
        <br>
      </p>
      <p>You refer to layers which I call behaviors. Rodney Brooks
        original paper often conflated the two. <br>
      </p>
      <p>Looking at your section III. Arbitration you say:</p>
      <blockquote>
        <p>Subsumption tasks are arranged by priority, from lowest to
          highest, as determined by the robot builder for a particular
          problem set.  An arbitrator() selects the output of the
          highest priority task whose flag is true to pass on to the
          physical subsystem (motors or whatever) for this pass through
          the loop, this 20th of a second.<br>
          <br>
          Low priority tasks can only control the robot when all higher
          priority tasks' flags are false.</p>
      </blockquote>
      <p>My description would be:</p>
      <blockquote>
        <p>Behaviors are listed in order of priority from highest to
          lowest. Once the list is processed the highest priority task
          that 'fires' is given control of the system. The default
          behavior is the last on the list. <br>
        </p>
      </blockquote>
      <p>Although my original reading of subsumption was that the entire
        list was not processed but control passed once a behavior fired.
        I modified this to process the entire list. Thus, my original
        understanding may have been incorrect but I in inadvertently
        changed to the correct processing. <br>
      </p>
      <p>You provide code from Flynn and Jones: <br>
      </p>
      <pre>void arbitrate()
{
    while (1) {
        if (cruise_output_flag == 1)
            {motor_input = cruise_output; }
        if (follow_output_flag == 1)
            {motor_input = follow_output; }
        if (avoid_output_flag == 1)
            {motor_input = avoid_output; }
        if (escape_output_flag == 1)
            {motor_input = escape_output; }
        sleep(tick);
    }
}
</pre>
      <p>I assert that this is an OR process with the caveat that the
        default behavior always results in a true condition so it has
        control. BTs are more complex having multiple lists to process
        so a given set of behaviors (layer) is not likely to have a
        default behavior. Subsumption is a <i>sequence</i> in a BT.
        From <a class="moz-txt-link-freetext"
href="https://secure-web.cisco.com/1HXrCYXElnauuP1wfG6OxvXrlL-J-d3OrUFTMKM96QobUddG2ojoZCrHp-ZZNkzoJhYQ4tvpZZ36MdJQnmpEBLTXCN3RWyvl20Si2uOnbizEobwRRwcIMLZl8CJPVEblm7PtbjZW6-u9hegWLaYbsqkMSXlGH2gaVSHmQhzSOxEJ7TR7FmX1lZMFWjAMQFWB209jGfKezZPIFR3JQN5C-WeoUGYuWPT3yHWP2K46iyAXfRnW7XKXeUOMyX_7YlKEDgnDaOgnt7mcdk6dyQhd6NxW9FiK6DySJ95Lb866o1Jw/https%3A%2F%2Fwww.gamedeveloper.com%2Fprogramming%2Fbehavior-trees-for-ai-how-they-work"
          moz-do-not-send="true">https://www.gamedeveloper.com/programming/behavior-trees-for-ai-how-they-work</a><br>
      </p>
      <blockquote>
        <p>Their main power comes from their ability to represent
          multiple different courses of action, in order of priority
          from most favorable to least favorable, and to return success
          if it managed to succeed at any course of action. <br>
        </p>
      </blockquote>
      <p>We may simply have a difference in terminology, as above, and
        implementation details. <br>
      </p>
      <blockquote> </blockquote>
      <div class="moz-signature"><font face="Comic Sans MS"
          color="#000080"> <br>
          -73 - <br>
          <b>Rud Merriam K5RUD</b> <br>
          <a
href="http://secure-web.cisco.com/1FKz_X0Ge1ie37k5LHDucUXiDVc-D1xvohLqcTDESE8BjeMVz7ksqQwfV3iUyqpDovtR-0-tn_yo8xt3L2xqvqvv1McOdn6AJOJQ-sFHYPgpnyZbMrjcS1zL51KTf7SbGRDPmH40a1teuLnvGDFDeNOk23sIq4YNsSUIGc-VZkskk0UV7LZfvdcOt95nBziNnV4YwBopI_dF6oloKbUyhiVLmT4A_2qMkmYYIVGNbo_menDPskLCcvqr7VqB-Q-sN4obSw-KecZ1m1TTzyy0Hz9W-oraDa2B2qGphSnHGPY4/http%3A%2F%2Fmysticlakesoftware.com%2F"
            moz-do-not-send="true"> <i>Mystic Lake Software</i> </a> <br>
          <br>
        </font> </div>
      <div class="moz-cite-prefix">On 10/28/21 8:35 AM, David P.
        Anderson via DPRGlist wrote:<br>
      </div>
      <blockquote type="cite"
        cite="mid:85af30b6-5045-9600-b756-bad65527cd9e@smu.edu">Howdy
        DPRG <br>
        <br>
        On 10/27/21 10:23 PM, Rud Merriam via DPRGlist wrote: <br>
        <br>
        [snip] <br>
        <blockquote type="cite"> <br>
          If you're not familiar with subsumption is is a list of
          behaviors or actions. Every cycle the list begins again until
          one of the behaviors "fires". The processing starts again at
          the beginning of the list. That's simplified but gives the
          idea. I actually found that setting a flag and letting the
          list finish processing also worked. Once the flag was any
          following behavior would not "fire" but it could record
          information. That was useful for handling behaviors that did a
          timing function. <br>
          <br>
          [snip] <br>
          <br>
          Subsumption is basically an OR operation, just like a logic
          gate. If one behavior fires the overall  gate becomes true and
          returns to a higher level in the tree. There is also an AND
          operation where all the behaviors must fire before returning
          true. If one fails to fire a false is returned. The other main
          operation is NOT which is an inverter of the output of a list.
          <br>
          <br>
        </blockquote>
        If you're not familiar with subsumption,  the above is not an
        accurate description.  At all.   ;) <br>
        <br>
        For those who might be interested, the Joseph Jones books
        "Mobile Robots" and "Behavior Based Robotics" provide sort of
        the canonical definitions for subsumption and how it works.  If
        you don't want to read that much then I think I did a pretty
        good job of describing it in the DPRG talk from last June, for
        which there is a YouTube video on the club web page,
        (miss-labeled "May 12" rather than "June 12"). <br>
        <br>
        cheers! <br>
        <br>
        David <br>
        <br>
        <br>
        _______________________________________________ <br>
        DPRGlist mailing list <br>
        <a class="moz-txt-link-abbreviated"
          href="mailto:DPRGlist@lists.dprg.org" moz-do-not-send="true">DPRGlist@lists.dprg.org</a>
        <br>
        <a class="moz-txt-link-freetext"
          href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org"
          moz-do-not-send="true">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a>
        <br>
      </blockquote>
      <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>