[Dprglist] Subsumption architecture
Thalanayar Muthukumar
tnkumar at gmail.com
Fri Oct 29 03:37:38 PDT 2021
Thanks David for such a clear explanation. No more questions. I will try to implement this shortly in an attempt to learn this capability as per (Robotics - CMM) 😀
Regards.
- Kumar
Sent from my iPhone
> On Oct 29, 2021, at 12:39 AM, David P. Anderson via DPRGlist <dprglist at lists.dprg.org> wrote:
>
> Hi Kumar,
>
> Following on from Rud and Murray's suggestions, let me take a stab at it. ;)
>
> First check out this subsumption stack, an example from the Flynn/Jones "Mobile robots" book that addresses your task:
>
> http://geology.heroy.smu.edu/dpa-www/robo/subsumption/Image6.gif
>
> There are four independent behaviors here, arranged from the highest priority Escape, a ballistic behavior, IR avoidance, a servoing behavior, Photo attraction, also a servoing behavior, and lowest priority Cruise, a behavior that just drives in a straight line.
>
> For our purposes, a servoing behavior is one that is active as long as it has sensor input (most subsumption behaviors act this way), and a ballistic behavior is one that is triggered and continues to execute after it's sensor input has ceased. In this case the Escape behavior, which is triggered by a bumper press and then does a backup-rotate-drive forward-release under control of a timer, is the only ballistic behavior.
>
> Each behavior runs once each time through the control loop, and generates velocity and rotation outputs, and each has a flag to indicate to the arbitrater if it wants to control the robot. The Arbitrate function runs at the bottom of the loop, after all behaviors have run, and passes the output of the highest priority behavior that is asserting its flag to the motors.
>
> Now look at the following scenario with a bright ceiling light, a low wall, and a hassock which can't be detected by the IR:
>
> http://geology.heroy.smu.edu/dpa-www/robo/subsumption/Image15.gif
>
> The behaviors are color-coded to show where/when each is in control of the robot.
>
> 1. The robot begins it's run in the lower left corner. At that point there are two behaviors asserting their subsumption flags, indicating they wish to control the robot. That is the Cruise behavior which wants to drive in a straight line and always asserts its flag, and the Photo behavior which wants to turn left, in this case, towards the light.
>
> 2. Since the Photo behavior is higher priority than the Cruise, it will "subsume" the Cruise behavior, and it's velocity & rotation outputs will control the robot as long as the light is brighter on the left than on the right, outputting that command at 20 Hz or whatever the control loop rate is. In the figure shown, that lasts for 5 yellow dots. Note that during that time, the Cruise control is still outputting the commands to go straight and it's subsumption flag is asserted. But it's outputs are ignored by the arbitrater, because it is not the highest priority.
>
> 3. At that point the bright light falls into the deadzone of the photo sensors (i.e. dead center or there abouts) and so the Photo behavior sets its subsumption flag to zero, indicating that it no longer wishes to control the robot. So the Cruise behavior is no longer subsumed and the arbitrater begins to send it's outputs to the motors, indicated by the black dots. Now the robot begins to drive in a straight line towards the light. Note that there is no timer or angle or other limits on the robot's turn. It turns as long as the light is brighter on the left. It is a servoing behavior.
>
> 4. After driving in a straight line for four black dots, the left-looking IR avoidance sensor detects the low wall. So it sets it's subsumption flag to true and outputs the velocity & rotation commands to turn right, away from the detection, indicated by the red dots. Note again that the robot did not drive in a straight line for a fixed period of time or fixed number of encoder ticks. It drove in a straight line until subsumed by some other behavior, in this case the IR. So now there are three behaviors that wish to control the robot, all three asserting their subsumption flags. The Cruise wants to drive in a straight line, the Photo now wants to turn left toward the light, and the IR wants to turn right, away from the wall. But only the highest priority, the IR avoidance, has it's outputs passed along to the motors. The other two are subsumed.
>
> 5. So for six red dots, the IR controls the robot and turns it right, away from the wall. After the sixth dot, the robot has turned right far enough that the IR no longer detects the wall on the left. So it sets its subsumption flag to zero indicating to the arbitrater that it no longer wishes to control the robot. At that point the Photo is now the highest priority behavior asserting it's flag, and so the arbitrater passes its outputs along to the motors and the robot begins to turn left, towards the light, indicated by the three yellow dots.
>
> 6. However, as the Photo behavior turns the robot left, the IR again detects the wall, and turns it back to the right, subsuming the Cruise and Photo behaviors, for five red dots. At which point it again releases it's flag and the Photo again turns the robot back toward the light. This is a simple example of an "emergent" behavior. The robot "swims" along, following the wall under control of the Photo and IR behaviors, without a specific "wall following" behavior.
>
> 7. Now however, the robot has reached the end of the wall and so can continue turning left without interruptions from the IR. It turns for 9 yellow dots, until the light is again directly in front of the robot and the Photo releases it's subsumption flag. Then the Cruise control is no longer subsumed and drives the robot in a straight line towards the light, for five black dots.
>
> 8. At this point the robot encounters a black leather hassock which the IR cannot see, and so there is a bumper collision with the hassock. So the ballistic Escape behavior, triggered by the bumper press, does a backup-turn right-drive straight-release sequence, subsuming all the other behaviors as it does, indicated by the four blue dots.
>
> 9. When the Escape ballistic behavior completes, it sets it's subsumption flag back to zero and the Photo behavior is at that point the highest priority behavior asserting it's flag. The Photo behavior turns the robot left again until the light is again in the deadzone, indicated by five yellow dots, at which point it sets its subsumption flag back to zero, releasing control of the robot.
>
> 10. Now with all higher priority behaviors having set their flags to zero, the Cruise behavior then drives the robot in a straight line towards to light. What happens at that point depends on how the behaviors are programmed and how the sensors are setup, but it will probably pass under the light and turn back towards it under control of the Photo behavior. It will then probably end up circling endlessly under the light.
>
> Hope this is helpful.
>
> cheers!
>
> David
>
>> On 10/28/21 9:04 PM, Thalanayar Muthukumar via DPRGlist wrote:
>> [EXTERNAL SENDER]
>>
>> Today, I saw many mails on this topic.
>>
>> I am a noob trying to wrap my head around this topic in a way that I can possibly implement reasonably quickly.
>>
>> This is the scenario I am considering.
>>
>> Robot is in a room with a light source at the opposite end of the room from where it starts. Overall robot objective - reach the light source. Robot has a light sensor and 3 ultrasonic sensors pointing front, right and left.
>>
>> Basic behavior a - move forward for 30 secs
>> Basic behavior b - if any of the ultrasonic sensors detect an obstacle one feet from the robot, turn right 60 degrees
>> Basic behavior c - if light sensor senses light of intensity X, stop
>>
>> Priority highest - Basic behavior c
>> Priority next - Basic behavior b
>> Priority lowest - Basic behavior a
>>
>> If the robot is programmed to in every cycle, do one of the basic behaviors based on priority, it will meet the goal without any complex things like SLAM, as an example.
>> I am aware that the above list of 3 basic behaviors may not meet the overall goal and needs to be tweaked.
>>
>> I am aware there are many books and videos by various people, but if I implement this on my robot, can I say I have implemented a behavior based robot (subsumption architecture)?
>>
>> Regards.
>> - Kumar
>>
>> Sent from my iPhone
>>
>>>> On Oct 28, 2021, at 4:09 PM, dprglist-request at lists.dprg.org wrote:
>>>
>>> Send DPRGlist mailing list submissions to
>>> dprglist at lists.dprg.org
>>>
>>> To subscribe or unsubscribe via the World Wide Web, visit
>>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>> or, via email, send a message with subject or body 'help' to
>>> dprglist-request at lists.dprg.org
>>>
>>> You can reach the person managing the list at
>>> dprglist-owner at lists.dprg.org
>>>
>>> When replying, please edit your Subject line so it is more specific
>>> than "Re: Contents of DPRGlist digest..."
>>>
>>>
>>> Today's Topics:
>>>
>>> 1. Re: Robotics "Capability Maturity Model" - Thoughts? (Pat Caron)
>>> 2. Re: self driving trucks and the desert (Rud Merriam)
>>> 3. On Behavior Trees [Was: self driving trucks and the desert]
>>> (Murray Altheim)
>>> 4. Re: self driving trucks and the desert (David P. Anderson)
>>> 5. Re: self driving trucks and the desert (secretary at dprg.org)
>>> 6. New Rpi zero 2 (Doug Paradis)
>>> 7. Re: Subsumption Discussion (Rud Merriam)
>>> 8. Re: On Behavior Trees [Was: self driving trucks and the
>>> desert] (Rud Merriam)
>>> 9. Re: On Behavior Trees [Was: self driving trucks and the
>>> desert] (Rud Merriam)
>>> 10. Re: Subsumption Discussion (David P. Anderson)
>>> 11. Re: On Behavior Trees [Was: self driving trucks and the
>>> desert] (Murray Altheim)
>>> 12. Re: On Behavior Trees [Was: self driving trucks and the
>>> desert] (Rud Merriam)
>>>
>>>
>>> ----------------------------------------------------------------------
>>>
>>> Message: 1
>>> Date: Wed, 27 Oct 2021 19:43:52 -0400
>>> From: Pat Caron <patcaron at mail.com>
>>> To: "dprglist at lists.dprg.org" <dprglist at lists.dprg.org>
>>> Subject: Re: [Dprglist] Robotics "Capability Maturity Model" -
>>> Thoughts?
>>> Message-ID:
>>> <CA+mr86dRL58x1digEdtWxDQn=PU+jzJFf12+AdYsuYrnA4baYw at mail.gmail.com>
>>> Content-Type: text/plain; charset="utf-8"
>>>
>>> I agree with Jim. DPRG has opened up a group of people with vast knowledge
>>> on all
>>> disciplines required to build robots. This is invaluable for us that are
>>> remotely located.
>>>
>>> Thank you DPRG!
>>> Pat Caron
>>> Ontario, Canada
>>>
>>>> On Wed, Oct 27, 2021 at 2:13 PM Jim Merkle via DPRGlist <
>>>> dprglist at lists.dprg.org> wrote:
>>>>
>>>> If any of you subscribe to Reddit - Arduino group, you'll see generic
>>>> questions all the time, many of which are from "tire kickers", folks just
>>>> thinking about purchasing something but haven't committed to anything yet.
>>>> I don't bother getting involved unless the user indicates they have actual
>>>> hardware they are working with.
>>>>
>>>> Since Kumar had already purchased an STM32 NUCLEO board, (I love the STM32
>>>> NUCLEO boards in general), I had to get involved.
>>>>
>>>> "Which development environment" is the 2nd most asked question when it
>>>> comes to STM32 boards. The most asked is "which STM32 board?".
>>>> Unfortunately, many folks begin STM32 exploration with a "Blue Pill". I
>>>> HATE that platform!!! Although it's cheap, they often have clone chips and
>>>> require plenty of additional hardware already provided with a NUCLEO board.
>>>>
>>>>
>>>> Much of the capability model involves the individual and their talent
>>>> set...
>>>>
>>>>
>>>> What DPRG provides is mentorship... Folks that are willing and able to
>>>> help others get from one *Level* to the next. Thanks GUYS !
>>>>
>>>>
>>>> The "Build More Robots" is an excellent tool / program to help bring
>>>> people (and their robots) from "Level 0.0.0" to "Level 5.0" (or so).
>>>>
>>>> https://www.dprg.org/build-more-robots-series/
>>>>
>>>>
>>>> I truly appreciate DPRG !
>>>>
>>>>
>>>> ---
>>>> Jim Merkle
>>>> Carrollton, TX 75007
>>>> jim at merkles.com
>>>>
>>>>
>>>> On 2021-10-27 10:03, Chris N via DPRGlist wrote:
>>>>
>>>> So in part because of questions along the line of "where do I get started"
>>>> from Kumar, and others before him, that we occasionally get, I thought it
>>>> might help to have some sort of capability model in mind that can be
>>>> referenced.
>>>>
>>>> That way one can ask "OK - what level are you at currently? What level
>>>> are you trying to reach in the near term?"
>>>>
>>>> Below is what I mean. For now this is focused on software and locomotion
>>>> (but starting with Level 8, perception comes into the picture)
>>>>
>>>> I have more explanation to go along with each item but wanted to keep it
>>>> brief in this e-mail.
>>>>
>>>> The idea is not to explain how to do these things. This just represents
>>>> milestones along the journey. This is really more about having an agreed
>>>> upon vocabulary.
>>>>
>>>> Thoughts? Is something like this helpful to have written down? Is it
>>>> already written down somewhere ? (I am sure that in some ways, this is
>>>> captured in some of the material that David Anderson has published over the
>>>> years)
>>>>
>>>> Level 0: I have an API through which I can control the speed and direction
>>>> of the individual wheels. My robot can move!
>>>>
>>>> Level 1: I have an API through which I can reliably get the incremental
>>>> encoder counts for each wheel. When motors are commanded with a certain
>>>> duty cycle, I can measure what that translates to in terms of encoder
>>>> counts per time unit.
>>>>
>>>> Level 2: I am keeping track of my Robot's X, Y and Theta via
>>>> dead-reckoning / odometry
>>>>
>>>> Level 3: I have taken at least basic steps to calibrate my robot's
>>>> odometry calculations.
>>>>
>>>> Level 4: I can command the robot to move, but using more abstract units
>>>> such as "meters/second" or at least "encoder ticks per time unit"
>>>>
>>>> Level 5: My robot actually moves at the linear and angular velocity I tell
>>>> it to, even when battery voltage is lower or surface friction is higher.
>>>> And because I have completed Level 3, it can go in a somewhat straight
>>>> line when I ask it to.
>>>>
>>>> Level 6: My robot moves in a fairly smooth fashion, i.e. it changes speed
>>>> and direction somewhat gradually. Movement is not "robotic"
>>>>
>>>> Level 7: I can command my robot to go to a certain X,Y coordinate aka
>>>> waypoint relative to its current location, and the robot more or less
>>>> reaches that location provided nothing is in the way
>>>>
>>>> Level 8: My robot can reach the target location, even if there are
>>>> obstacles in the way.
>>>>
>>>> Level 9: My robot can come back after reaching its destination.
>>>>
>>>> Level 10: My robot can do all this, even if the obstacles are moving
>>>> around quite a bit or if there are other sources of possible confusion
>>>>
>>>> _______________________________________________
>>>> DPRGlist mailing list
>>>> DPRGlist at lists.dprg.org
>>>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>>>
>>>> _______________________________________________
>>>> DPRGlist mailing list
>>>> DPRGlist at lists.dprg.org
>>>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>>>
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>> URL: <http://lists.dprg.org/pipermail/dprglist-dprg.org/attachments/20211027/a3455683/attachment-0001.html>
>>>
>>> ------------------------------
>>>
>>> Message: 2
>>> Date: Wed, 27 Oct 2021 22:23:45 -0500
>>> From: Rud Merriam <rudmerriam at gmail.com>
>>> To: dprglist at lists.dprg.org
>>> Subject: Re: [Dprglist] self driving trucks and the desert
>>> Message-ID: <01714593-ec67-c275-357e-46bf198b5680 at gmail.com>
>>> Content-Type: text/plain; charset="utf-8"; Format="flowed"
>>>
>>> I don't recall the details of what makes David's subsumption unique. In
>>> my first NASA competition I used subsumption with a unique twist. There
>>> was a behavior that would switch the subsumption list being used.
>>>
>>> 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.
>>>
>>> Since then I've moved to behavior trees (BT) which are used in robotics
>>> and for autonomous actors in games. That shooter coming after you is
>>> driven by a BT. Subsumption is actually subsumed (ha!) by BTs as one of
>>> the techniques used in the trees.
>>>
>>> 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.
>>>
>>> There is a lot written about BTs but not as logic gates as I've
>>> described them. I have code which does this but need to update it for
>>> C++20. Once I complete that revision I want to look at learning using
>>> BTs, i.e. adding new behaviors including expanding the trees. An
>>> advantage of treating them as logic gates is boolean algebra is
>>> applicable which allows simplifying trees using some well known
>>> techniques. After learning a larger tree can be trimmed to a more
>>> compact but logically equivalent representation.
>>>
>>>
>>>
>>> -73 -
>>> *Rud Merriam K5RUD*
>>> /Mystic Lake Software/ <http://secure-web.cisco.com/1cxT7UeRAE8zvO9oRtxCOQt45X4Tn7QEpHP2GKkcSVxjEo0vWuAiXldmUGfVKKg1qGL_jxwq6MkPZL6M2zfobxIp9Fc3JPMIksU_zdgE8Vw9cfr9sByBEUxyFrq6TkspE64GyS3u2dl8UUQ0uVLW8R1M8Og1klQM6s7Ohpi44JFS0LKEHaonlHnZfLePciJlBFZDLDLUPmWk1vHQ22b5GvUGScraHwVi9ceE6_Ez-EmKoqx9HJk7PVKBbZLb4p_JSuSH-yzZXGet74MIszF3borVHH4gT1c4UV8oH-dsqYxA/http%3A%2F%2Fmysticlakesoftware.com%2F>
>>>
>>>
>>>> Thanks for the reply.? I think that perhaps part of the reality is
>>>> that I have developed a subsumption based reactive navigation method
>>>> that I believe is fairly unique --- the only other people I've
>>>> encountered that do the same have learned it from me.
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>> URL: <http://lists.dprg.org/pipermail/dprglist-dprg.org/attachments/20211027/bbb20969/attachment-0001.html>
>>>
>>> ------------------------------
>>>
>>> Message: 3
>>> Date: Thu, 28 Oct 2021 20:19:15 +1300
>>> From: Murray Altheim <murray18 at altheim.com>
>>> To: dprglist at lists.dprg.org
>>> Subject: [Dprglist] On Behavior Trees [Was: self driving trucks and
>>> the desert]
>>> Message-ID: <7b1998a1-7bf6-e33a-9d1c-bc9ecc78d25a at altheim.com>
>>> Content-Type: text/plain; charset=utf-8; format=flowed
>>>
>>>> On 28/10/21 4:23 pm, Rud Merriam via DPRGlist wrote:
>>> [...]
>>>> Since then I've moved to behavior trees (BT) which are used in
>>>> robotics and for autonomous actors in games. That shooter coming
>>>> after you is driven by a BT. Subsumption is actually subsumed
>>>> (ha!) by BTs as one of the techniques used in the trees.
>>> Hi Rud,
>>>
>>> For those curious could you provide any academic (or non-academic) papers
>>> describing Behaviour Trees, any known implementations in existing online
>>> projects, code repositories, etc. that we might follow up on to learn more?
>>>
>>> Cheers,
>>>
>>> Murray
>>>
>>> ...........................................................................
>>> Murray Altheim <murray18 at altheim dot com> = = ===
>>> http://secure-web.cisco.com/1YO6vCp79dzQizXLJN8vHUGZauOamOVLuQl-jFDKdyXllhHiVPW1Qzd6oZNhdCNvrSSTOhdcPlcWKb4H-aefOWPjWguYtbBs_9dLOeW7qOrH80as_tmrYvpKHTutx4jqKJCcC4E6r-SECXHA3Rfp73g-CRoC4vzbt7lQFHrRbtIFyVnxf-Lx0PBhipBonRndZE5kRoPPUVSdwjJ28ZjMTOWQ4bMMAzdI22N0WANsl5b8rBAPAmocm3UYPxSgGirNUAlwNBNdXNkxuvSmoByrRgg6WQ5h1wqmoC7Tk5F4Aqr0/http%3A%2F%2Fwww.altheim.com%2Fmurray%2F === ===
>>> = = ===
>>> In the evening
>>> The rice leaves in the garden
>>> Rustle in the autumn wind
>>> That blows through my reed hut.
>>> -- Minamoto no Tsunenobu
>>>
>>>
>>>
>>> ------------------------------
>>>
>>> Message: 4
>>> Date: Thu, 28 Oct 2021 08:35:48 -0500
>>> From: "David P. Anderson" <davida at smu.edu>
>>> To: <dprglist at lists.dprg.org>
>>> Subject: Re: [Dprglist] self driving trucks and the desert
>>> Message-ID: <85af30b6-5045-9600-b756-bad65527cd9e at smu.edu>
>>> Content-Type: text/plain; charset="utf-8"; format=flowed
>>>
>>> Howdy DPRG
>>>
>>>> On 10/27/21 10:23 PM, Rud Merriam via DPRGlist wrote:
>>>
>>> [snip]
>>>> 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.
>>>>
>>>> [snip]
>>>>
>>>> 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.
>>>>
>>> If you're not familiar with subsumption,? the above is not an accurate
>>> description.? At all.?? ;)
>>>
>>> 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").
>>>
>>> cheers!
>>>
>>> David
>>>
>>>
>>>
>>>
>>> ------------------------------
>>>
>>> Message: 5
>>> Date: Thu, 28 Oct 2021 10:40:36 -0500
>>> From: "secretary at dprg.org" <secretary at dprg.org>
>>> To: "David P. Anderson" <davida at smu.edu>
>>> Cc: DPRG <dprglist at lists.dprg.org>
>>> Subject: Re: [Dprglist] self driving trucks and the desert
>>> Message-ID:
>>> <CAOdUW+bQqJOOb6m5URBq0FDajP+dRGiW97=iq8kvqHmrcCc4Qw at mail.gmail.com>
>>> Content-Type: text/plain; charset="utf-8"
>>>
>>> -All,
>>> David's video is actually titled "Implementing Robot Waypoint
>>> Navigation by David Anderson ? DPRG Virtual Monthly Meeting, 6/12/2021".
>>> However, the video introduction does list the date as May 12th. When
>>> searching for the video use the title above, do not search for May 12th.
>>> Excellent presentation.
>>>
>>> Regards,
>>> Doug P.
>>>
>>> On Thu, Oct 28, 2021 at 8:35 AM David P. Anderson via DPRGlist <
>>> dprglist at lists.dprg.org> wrote:
>>>
>>>> Howdy DPRG
>>>>
>>>> On 10/27/21 10:23 PM, Rud Merriam via DPRGlist wrote:
>>>>
>>>> [snip]
>>>>> 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.
>>>>>
>>>>> [snip]
>>>>>
>>>>> 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.
>>>>>
>>>> If you're not familiar with subsumption, the above is not an accurate
>>>> description. At all. ;)
>>>>
>>>> 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").
>>>>
>>>> cheers!
>>>>
>>>> David
>>>>
>>>>
>>>> _______________________________________________
>>>> DPRGlist mailing list
>>>> DPRGlist at lists.dprg.org
>>>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>>>
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>> URL: <http://lists.dprg.org/pipermail/dprglist-dprg.org/attachments/20211028/c7d87a3d/attachment-0001.html>
>>>
>>> ------------------------------
>>>
>>> Message: 6
>>> Date: Thu, 28 Oct 2021 10:49:34 -0500
>>> From: Doug Paradis <paradug at gmail.com>
>>> To: DPRG <dprglist at lists.dprg.org>
>>> Subject: [Dprglist] New Rpi zero 2
>>> Message-ID:
>>> <CAOdUW+YXcdSQ=cyFTG2VYahRHU9Kj_U=GgpAk0m25e0JdwWJMw at mail.gmail.com>
>>> Content-Type: text/plain; charset="utf-8"
>>>
>>> -All,
>>> Just in case you missed the announcement.
>>> https://makezine.com/2021/10/27/eben-upton-raspberry-pi-exciting-year-new-pi-zero-2-w/
>>>
>>> Regards,
>>> Doug P.
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>> URL: <http://lists.dprg.org/pipermail/dprglist-dprg.org/attachments/20211028/632e38e7/attachment-0001.html>
>>>
>>> ------------------------------
>>>
>>> Message: 7
>>> Date: Thu, 28 Oct 2021 13:13:34 -0500
>>> From: Rud Merriam <rudmerriam at gmail.com>
>>> To: dprglist at lists.dprg.org
>>> Subject: Re: [Dprglist] Subsumption Discussion
>>> Message-ID: <e0402033-8ce9-6e46-c8b1-d6f82aaca113 at gmail.com>
>>> Content-Type: text/plain; charset="utf-8"; Format="flowed"
>>>
>>> David,
>>>
>>> I'd like to discuss where we differ on the definition of subsumption.
>>> I'm looking at your page on subsumption
>>> https://www.dprg.org/articles/2007-03a/ since I don't have the books you
>>> are referencing. (Actually, I found a PDF of "Mobile Robots" at
>>> https://cs.au.dk/~ocaprani/legolab/DigitalControl.dir/NXT/Lesson9.dir/11128_Mobile_Robots_Inspiration_to_Implementation-Flynn_and_Jones.pdf"
>>>
>>>
>>> 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.
>>>
>>> You refer to layers which I call behaviors. Rodney Brooks original paper
>>> often conflated the two.
>>>
>>> Looking at your section III. Arbitration you say:
>>>
>>> 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.
>>>
>>> Low priority tasks can only control the robot when all higher
>>> priority tasks' flags are false.
>>>
>>> My description would be:
>>>
>>> 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.
>>>
>>> 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.
>>>
>>> You provide code from Flynn and Jones:
>>>
>>> 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);
>>> }
>>> }
>>>
>>> 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 /sequence/ in a BT. From
>>> https://secure-web.cisco.com/18iwi9L-jeNDxI5RsSENc65ieurCS2FSJzrH8NL5B49pMZ4y8qgoHKBBM8uO1XWb-Do61WqzM_k_A-verzy9MUNNTVzJiu_NcybC4d4ObYCbxIJfJfFovsYD_R2YTo_wLxnxT6E6ZlFBfqGbXWbumsY7CSd3vFQFoWLM_5W_Vu6pwQFB5KFkiv-gnER9eAslTdalc56uGAxPxBGkv65JEcMx3n51iCCtOQVkjIUSqQONInu6VzHPmDAHuLCvhqxXv4N5NReIXJUWM9FBsv65iSF4Dk7Dnc1ekwfs-aIn9tEM/https%3A%2F%2Fwww.gamedeveloper.com%2Fprogramming%2Fbehavior-trees-for-ai-how-they-work
>>>
>>> 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.
>>>
>>> We may simply have a difference in terminology, as above, and
>>> implementation details.
>>>
>>>
>>> -73 -
>>> *Rud Merriam K5RUD*
>>> /Mystic Lake Software/ <http://secure-web.cisco.com/1cxT7UeRAE8zvO9oRtxCOQt45X4Tn7QEpHP2GKkcSVxjEo0vWuAiXldmUGfVKKg1qGL_jxwq6MkPZL6M2zfobxIp9Fc3JPMIksU_zdgE8Vw9cfr9sByBEUxyFrq6TkspE64GyS3u2dl8UUQ0uVLW8R1M8Og1klQM6s7Ohpi44JFS0LKEHaonlHnZfLePciJlBFZDLDLUPmWk1vHQ22b5GvUGScraHwVi9ceE6_Ez-EmKoqx9HJk7PVKBbZLb4p_JSuSH-yzZXGet74MIszF3borVHH4gT1c4UV8oH-dsqYxA/http%3A%2F%2Fmysticlakesoftware.com%2F>
>>>
>>>> On 10/28/21 8:35 AM, David P. Anderson via DPRGlist wrote:
>>>> Howdy DPRG
>>>>
>>>> On 10/27/21 10:23 PM, Rud Merriam via DPRGlist wrote:
>>>>
>>>> [snip]
>>>>> 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.
>>>>>
>>>>> [snip]
>>>>>
>>>>> 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.
>>>>>
>>>> If you're not familiar with subsumption,? the above is not an accurate
>>>> description.? At all.?? ;)
>>>>
>>>> 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").
>>>>
>>>> cheers!
>>>>
>>>> David
>>>>
>>>>
>>>> _______________________________________________
>>>> DPRGlist mailing list
>>>> DPRGlist at lists.dprg.org
>>>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>> URL: <http://lists.dprg.org/pipermail/dprglist-dprg.org/attachments/20211028/49691922/attachment-0001.html>
>>>
>>> ------------------------------
>>>
>>> Message: 8
>>> Date: Thu, 28 Oct 2021 13:36:37 -0500
>>> From: Rud Merriam <rudmerriam at gmail.com>
>>> To: dprglist at lists.dprg.org
>>> Subject: Re: [Dprglist] On Behavior Trees [Was: self driving trucks
>>> and the desert]
>>> Message-ID: <4a2d258f-eedd-03a7-f21e-98eaea07721b at gmail.com>
>>> Content-Type: text/plain; charset="utf-8"; Format="flowed"
>>>
>>> I replied to David and included this link:
>>> https://secure-web.cisco.com/18iwi9L-jeNDxI5RsSENc65ieurCS2FSJzrH8NL5B49pMZ4y8qgoHKBBM8uO1XWb-Do61WqzM_k_A-verzy9MUNNTVzJiu_NcybC4d4ObYCbxIJfJfFovsYD_R2YTo_wLxnxT6E6ZlFBfqGbXWbumsY7CSd3vFQFoWLM_5W_Vu6pwQFB5KFkiv-gnER9eAslTdalc56uGAxPxBGkv65JEcMx3n51iCCtOQVkjIUSqQONInu6VzHPmDAHuLCvhqxXv4N5NReIXJUWM9FBsv65iSF4Dk7Dnc1ekwfs-aIn9tEM/https%3A%2F%2Fwww.gamedeveloper.com%2Fprogramming%2Fbehavior-trees-for-ai-how-they-work
>>>
>>> Here is a direct link to a C++ implementation I created:
>>> https://secure-web.cisco.com/1VjWMoSRvlJkLLh9h_oJprCGSjy5tJ9coeuBlIXtsZio4xWvEOuWjGvzb82goOtOOz68ANY90ISMAPcitt3gxR3XEkhJ24gXapXUYPKxvRZr_6a4a0ft7WUkdBHV-nX40ZSdxvYVkEGSYAguqbyo3Q5UYJ6z5aWPHhD-Ptin8va4m1vRJRd1sNgI4wjXkf0i4zBod0xaafK7W_LWtPFMTDEdJ4LDCxXe5-JnTCItc9iLG3Uwudc3dQTKVw5cJEV_MZPKc_12hl2eLyxan1bZXY-i6zmllVAH3geWQZogM2Ls/https%3A%2F%2Fbitbucket.org%2Frmerriam%2Fdevr%2Fsrc%2Fmaster%2Frobot%2Fmystic_bt%2Finclude%2F
>>>
>>> A python implementation:
>>> https://secure-web.cisco.com/1cQrPcwHfUS9wNbnXn3Lth4q1gFyRkAALKJ3_lzZk4RIIeLmcCQTxWR6AXldcXiJGrWt54kDgGG7zJf2Px772tYd1Cdq__OfAcGDqf46TN20YKte4eMaHGx24kwjUX6DqzGDgEqzB9XtYsjeo0nLDYqHTZeNB_uE1Yd6_RTK00cNhMtmF_02r5P5oL7dkAj9dk3MuL-dnEjrckVtYhM5XW3_Z4M_-sFFYTWhVgVrsCgUBbIerxv3Tky-EuL445VXgEBUPikqZFfTJfMNNOEem61C4wJhmgrssEcU52f2MVf8/https%3A%2F%2Fgithub.com%2FToyotaResearchInstitute%2Ftask_behavior_engine Haven't
>>> looked at this in detail so caveat emptor.
>>>
>>> Here is another more academic article which shows how subsumption is a
>>> /sequence/ in BTs:
>>> https://www.semanticscholar.org/paper/A-Survey-of-Behavior-Trees-in-Robotics-and-AI-Iovino-Scukins/595c7aeb6a9c9033a68aff1b25067ce967ea2a77
>>> You have to sign up for Research Gate but that is free.
>>>
>>>
>>> -73 -
>>> *Rud Merriam K5RUD*
>>> /Mystic Lake Software/ <http://secure-web.cisco.com/1cxT7UeRAE8zvO9oRtxCOQt45X4Tn7QEpHP2GKkcSVxjEo0vWuAiXldmUGfVKKg1qGL_jxwq6MkPZL6M2zfobxIp9Fc3JPMIksU_zdgE8Vw9cfr9sByBEUxyFrq6TkspE64GyS3u2dl8UUQ0uVLW8R1M8Og1klQM6s7Ohpi44JFS0LKEHaonlHnZfLePciJlBFZDLDLUPmWk1vHQ22b5GvUGScraHwVi9ceE6_Ez-EmKoqx9HJk7PVKBbZLb4p_JSuSH-yzZXGet74MIszF3borVHH4gT1c4UV8oH-dsqYxA/http%3A%2F%2Fmysticlakesoftware.com%2F>
>>>
>>>> On 10/28/21 2:19 AM, Murray Altheim via DPRGlist wrote:
>>>> On 28/10/21 4:23 pm, Rud Merriam via DPRGlist wrote:
>>>> [...]
>>>>> Since then I've moved to behavior trees (BT) which are used in
>>>>> robotics and for autonomous actors in games. That shooter coming
>>>>> after you is driven by a BT. Subsumption is actually subsumed (ha!)
>>>>> by BTs as one of the techniques used in the trees.
>>>> Hi Rud,
>>>>
>>>> For those curious could you provide any academic (or non-academic) papers
>>>> describing Behaviour Trees, any known implementations in existing online
>>>> projects, code repositories, etc. that we might follow up on to learn
>>>> more?
>>>>
>>>> Cheers,
>>>>
>>>> Murray
>>>>
>>>> ...........................................................................
>>>>
>>>> Murray Altheim <murray18 at altheim dot com>?????????????????????? =
>>>> =? ===
>>>> http://secure-web.cisco.com/1YO6vCp79dzQizXLJN8vHUGZauOamOVLuQl-jFDKdyXllhHiVPW1Qzd6oZNhdCNvrSSTOhdcPlcWKb4H-aefOWPjWguYtbBs_9dLOeW7qOrH80as_tmrYvpKHTutx4jqKJCcC4E6r-SECXHA3Rfp73g-CRoC4vzbt7lQFHrRbtIFyVnxf-Lx0PBhipBonRndZE5kRoPPUVSdwjJ28ZjMTOWQ4bMMAzdI22N0WANsl5b8rBAPAmocm3UYPxSgGirNUAlwNBNdXNkxuvSmoByrRgg6WQ5h1wqmoC7Tk5F4Aqr0/http%3A%2F%2Fwww.altheim.com%2Fmurray%2F ===? ===
>>>> = =? ===
>>>> ??? In the evening
>>>> ??? The rice leaves in the garden
>>>> ??? Rustle in the autumn wind
>>>> ??? That blows through my reed hut.
>>>> ?????????? -- Minamoto no Tsunenobu
>>>>
>>>> _______________________________________________
>>>> DPRGlist mailing list
>>>> DPRGlist at lists.dprg.org
>>>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>> URL: <http://lists.dprg.org/pipermail/dprglist-dprg.org/attachments/20211028/6d254639/attachment-0001.html>
>>>
>>> ------------------------------
>>>
>>> Message: 9
>>> Date: Thu, 28 Oct 2021 13:38:09 -0500
>>> From: Rud Merriam <rudmerriam at gmail.com>
>>> To: dprglist at lists.dprg.org
>>> Subject: Re: [Dprglist] On Behavior Trees [Was: self driving trucks
>>> and the desert]
>>> Message-ID: <f12819e9-eadf-e8fc-92af-a7155c82ccca at gmail.com>
>>> Content-Type: text/plain; charset="utf-8"; Format="flowed"
>>>
>>> Sorry, wrong link on the one article on Research Gate. It was the one
>>> that lead me to the correct one:
>>> https://www.researchgate.net/publication/309616544_How_Behavior_Trees_Modularize_Hybrid_Control_Systems_and_Generalize_Sequential_Behavior_Compositions_the_Subsumption_Architecture_and_Decision_Trees
>>>
>>>
>>> -73 -
>>> *Rud Merriam K5RUD*
>>> /Mystic Lake Software/ <http://secure-web.cisco.com/1cxT7UeRAE8zvO9oRtxCOQt45X4Tn7QEpHP2GKkcSVxjEo0vWuAiXldmUGfVKKg1qGL_jxwq6MkPZL6M2zfobxIp9Fc3JPMIksU_zdgE8Vw9cfr9sByBEUxyFrq6TkspE64GyS3u2dl8UUQ0uVLW8R1M8Og1klQM6s7Ohpi44JFS0LKEHaonlHnZfLePciJlBFZDLDLUPmWk1vHQ22b5GvUGScraHwVi9ceE6_Ez-EmKoqx9HJk7PVKBbZLb4p_JSuSH-yzZXGet74MIszF3borVHH4gT1c4UV8oH-dsqYxA/http%3A%2F%2Fmysticlakesoftware.com%2F>
>>>
>>>> On 10/28/21 2:19 AM, Murray Altheim via DPRGlist wrote:
>>>> On 28/10/21 4:23 pm, Rud Merriam via DPRGlist wrote:
>>>> [...]
>>>>> Since then I've moved to behavior trees (BT) which are used in
>>>>> robotics and for autonomous actors in games. That shooter coming
>>>>> after you is driven by a BT. Subsumption is actually subsumed (ha!)
>>>>> by BTs as one of the techniques used in the trees.
>>>> Hi Rud,
>>>>
>>>> For those curious could you provide any academic (or non-academic) papers
>>>> describing Behaviour Trees, any known implementations in existing online
>>>> projects, code repositories, etc. that we might follow up on to learn
>>>> more?
>>>>
>>>> Cheers,
>>>>
>>>> Murray
>>>>
>>>> ...........................................................................
>>>>
>>>> Murray Altheim <murray18 at altheim dot com>?????????????????????? =
>>>> =? ===
>>>> http://secure-web.cisco.com/1YO6vCp79dzQizXLJN8vHUGZauOamOVLuQl-jFDKdyXllhHiVPW1Qzd6oZNhdCNvrSSTOhdcPlcWKb4H-aefOWPjWguYtbBs_9dLOeW7qOrH80as_tmrYvpKHTutx4jqKJCcC4E6r-SECXHA3Rfp73g-CRoC4vzbt7lQFHrRbtIFyVnxf-Lx0PBhipBonRndZE5kRoPPUVSdwjJ28ZjMTOWQ4bMMAzdI22N0WANsl5b8rBAPAmocm3UYPxSgGirNUAlwNBNdXNkxuvSmoByrRgg6WQ5h1wqmoC7Tk5F4Aqr0/http%3A%2F%2Fwww.altheim.com%2Fmurray%2F ===? ===
>>>> = =? ===
>>>> ??? In the evening
>>>> ??? The rice leaves in the garden
>>>> ??? Rustle in the autumn wind
>>>> ??? That blows through my reed hut.
>>>> ?????????? -- Minamoto no Tsunenobu
>>>>
>>>> _______________________________________________
>>>> DPRGlist mailing list
>>>> DPRGlist at lists.dprg.org
>>>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>> URL: <http://lists.dprg.org/pipermail/dprglist-dprg.org/attachments/20211028/afc247bc/attachment-0001.html>
>>>
>>> ------------------------------
>>>
>>> Message: 10
>>> Date: Thu, 28 Oct 2021 13:50:04 -0500
>>> From: "David P. Anderson" <davida at smu.edu>
>>> To: <dprglist at lists.dprg.org>
>>> Subject: Re: [Dprglist] Subsumption Discussion
>>> Message-ID: <97ecf3de-12b3-6373-0b6c-5994edcf242c at smu.edu>
>>> Content-Type: text/plain; charset="utf-8"; Format="flowed"
>>>
>>> Hi Rud,
>>>
>>> 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.
>>>
>>> cheers!
>>>
>>> David
>>>
>>>
>>>> On 10/28/21 1:13 PM, Rud Merriam via DPRGlist wrote:
>>>>
>>>> */[EXTERNAL SENDER]/*
>>>>
>>>> David,
>>>>
>>>> I'd like to discuss where we differ on the definition of subsumption.
>>>> I'm looking at your page on subsumption
>>>> https://www.dprg.org/articles/2007-03a/ since I don't have the books
>>>> you are referencing. (Actually, I found a PDF of "Mobile Robots" at
>>>> https://cs.au.dk/~ocaprani/legolab/DigitalControl.dir/NXT/Lesson9.dir/11128_Mobile_Robots_Inspiration_to_Implementation-Flynn_and_Jones.pdf"
>>>>
>>>>
>>>> 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.
>>>>
>>>> You refer to layers which I call behaviors. Rodney Brooks original
>>>> paper often conflated the two.
>>>>
>>>> Looking at your section III. Arbitration you say:
>>>>
>>>> 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.
>>>>
>>>> Low priority tasks can only control the robot when all higher
>>>> priority tasks' flags are false.
>>>>
>>>> My description would be:
>>>>
>>>> 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.
>>>>
>>>> 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.
>>>>
>>>> You provide code from Flynn and Jones:
>>>>
>>>> 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);
>>>> }
>>>> }
>>>>
>>>> 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 /sequence/ in a BT. From
>>>> https://secure-web.cisco.com/18iwi9L-jeNDxI5RsSENc65ieurCS2FSJzrH8NL5B49pMZ4y8qgoHKBBM8uO1XWb-Do61WqzM_k_A-verzy9MUNNTVzJiu_NcybC4d4ObYCbxIJfJfFovsYD_R2YTo_wLxnxT6E6ZlFBfqGbXWbumsY7CSd3vFQFoWLM_5W_Vu6pwQFB5KFkiv-gnER9eAslTdalc56uGAxPxBGkv65JEcMx3n51iCCtOQVkjIUSqQONInu6VzHPmDAHuLCvhqxXv4N5NReIXJUWM9FBsv65iSF4Dk7Dnc1ekwfs-aIn9tEM/https%3A%2F%2Fwww.gamedeveloper.com%2Fprogramming%2Fbehavior-trees-for-ai-how-they-work
>>>>
>>>> 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.
>>>>
>>>> We may simply have a difference in terminology, as above, and
>>>> implementation details.
>>>>
>>>>
>>>> -73 -
>>>> *Rud Merriam K5RUD*
>>>> /Mystic Lake Software/
>>>> <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>
>>>>
>>>>
>>>>> On 10/28/21 8:35 AM, David P. Anderson via DPRGlist wrote:
>>>>> Howdy DPRG
>>>>>
>>>>>> On 10/27/21 10:23 PM, Rud Merriam via DPRGlist wrote:
>>>>> [snip]
>>>>>> 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.
>>>>>>
>>>>>> [snip]
>>>>>>
>>>>>> 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.
>>>>>>
>>>>> If you're not familiar with subsumption,? the above is not an
>>>>> accurate description.? At all.?? ;)
>>>>>
>>>>> 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").
>>>>>
>>>>> cheers!
>>>>>
>>>>> David
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> DPRGlist mailing list
>>>>> DPRGlist at lists.dprg.org
>>>>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>>> _______________________________________________
>>>> DPRGlist mailing list
>>>> DPRGlist at lists.dprg.org
>>>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>> URL: <http://lists.dprg.org/pipermail/dprglist-dprg.org/attachments/20211028/45203cb2/attachment-0001.html>
>>>
>>> ------------------------------
>>>
>>> Message: 11
>>> Date: Fri, 29 Oct 2021 08:52:54 +1300
>>> From: Murray Altheim <murray18 at altheim.com>
>>> To: dprglist at lists.dprg.org
>>> Subject: Re: [Dprglist] On Behavior Trees [Was: self driving trucks
>>> and the desert]
>>> Message-ID: <f4dc3f3b-18e9-0610-33af-1a932d41f40c at altheim.com>
>>> Content-Type: text/plain; charset=utf-8; format=flowed
>>>
>>>> On 29/10/21 7:36 am, Rud Merriam via DPRGlist wrote:
>>>> I replied to David and included this link: [...]
>>> Hi Rud,
>>>
>>> I'm doing my own robot OS in python so I'll check out the Python code,
>>> and I've got the link to the Italian/Swedish paper, thanks for that.
>>>
>>> My own exploration is inspired by my readings of Brooks, Jones, and what
>>> I've learned from David (who has been a great help), and is a based around
>>> an asynchronous (asyncio) message bus supporting a publish-subscribe model.
>>>
>>> There is the ability to enable/disable and suppress/release any of the
>>> Publishers or Subscribers, plus a class of Behaviour that combines both
>>> a Publisher and Subscriber, so the basic foundations of subsumption are
>>> there but not at the level of a single or BT loop, as all of the event-
>>> carrying messages sent around within the system are asynchronous. I
>>> maintain that it's still following the basic idea of a subsumption
>>> architecture but implemented quite differently than others I've seen.
>>>
>>> I'm still working through the details of it but so far things are working.
>>> A lot of effort...
>>>
>>> I'm curious about the Behaviour Tree idea because it suggests different
>>> patterns or sequences of behaviours for different contexts, which is
>>> something I've been investigating.
>>>
>>> Cheers,
>>>
>>> Murray
>>>
>>>
>>> ...........................................................................
>>> Murray Altheim <murray18 at altheim dot com> = = ===
>>> http://secure-web.cisco.com/1YO6vCp79dzQizXLJN8vHUGZauOamOVLuQl-jFDKdyXllhHiVPW1Qzd6oZNhdCNvrSSTOhdcPlcWKb4H-aefOWPjWguYtbBs_9dLOeW7qOrH80as_tmrYvpKHTutx4jqKJCcC4E6r-SECXHA3Rfp73g-CRoC4vzbt7lQFHrRbtIFyVnxf-Lx0PBhipBonRndZE5kRoPPUVSdwjJ28ZjMTOWQ4bMMAzdI22N0WANsl5b8rBAPAmocm3UYPxSgGirNUAlwNBNdXNkxuvSmoByrRgg6WQ5h1wqmoC7Tk5F4Aqr0/http%3A%2F%2Fwww.altheim.com%2Fmurray%2F === ===
>>> = = ===
>>> In the evening
>>> The rice leaves in the garden
>>> Rustle in the autumn wind
>>> That blows through my reed hut.
>>> -- Minamoto no Tsunenobu
>>>
>>>
>>>
>>> ------------------------------
>>>
>>> Message: 12
>>> Date: Thu, 28 Oct 2021 15:06:25 -0500
>>> From: Rud Merriam <rudmerriam at gmail.com>
>>> To: dprglist at lists.dprg.org
>>> Subject: Re: [Dprglist] On Behavior Trees [Was: self driving trucks
>>> and the desert]
>>> Message-ID: <065fd9e1-8f6b-e4d2-e406-879b976a8230 at gmail.com>
>>> Content-Type: text/plain; charset="utf-8"; Format="flowed"
>>>
>>> BTs provide the means of changing the overall behavior from a high
>>> level. In one competition there were 3 main task to be performed. At the
>>> highest level the BT allowed all three to be stated as a simple list of
>>> three items with sub-trees for their specific requirements.
>>>
>>>
>>> -73 -
>>> *Rud Merriam K5RUD*
>>> /Mystic Lake Software/ <http://secure-web.cisco.com/1cxT7UeRAE8zvO9oRtxCOQt45X4Tn7QEpHP2GKkcSVxjEo0vWuAiXldmUGfVKKg1qGL_jxwq6MkPZL6M2zfobxIp9Fc3JPMIksU_zdgE8Vw9cfr9sByBEUxyFrq6TkspE64GyS3u2dl8UUQ0uVLW8R1M8Og1klQM6s7Ohpi44JFS0LKEHaonlHnZfLePciJlBFZDLDLUPmWk1vHQ22b5GvUGScraHwVi9ceE6_Ez-EmKoqx9HJk7PVKBbZLb4p_JSuSH-yzZXGet74MIszF3borVHH4gT1c4UV8oH-dsqYxA/http%3A%2F%2Fmysticlakesoftware.com%2F>
>>>
>>>> On 10/28/21 2:52 PM, Murray Altheim via DPRGlist wrote:
>>>>> On 29/10/21 7:36 am, Rud Merriam via DPRGlist wrote:
>>>>> I replied to David and included this link: [...]
>>>> Hi Rud,
>>>>
>>>> I'm doing my own robot OS in python so I'll check out the Python code,
>>>> and I've got the link to the Italian/Swedish paper, thanks for that.
>>>>
>>>> My own exploration is inspired by my readings of Brooks, Jones, and what
>>>> I've learned from David (who has been a great help), and is a based
>>>> around
>>>> an asynchronous (asyncio) message bus supporting a publish-subscribe
>>>> model.
>>>>
>>>> There is the ability to enable/disable and suppress/release any of the
>>>> Publishers or Subscribers, plus a class of Behaviour that combines both
>>>> a Publisher and Subscriber, so the basic foundations of subsumption are
>>>> there but not at the level of a single or BT loop, as all of the event-
>>>> carrying messages sent around within the system are asynchronous. I
>>>> maintain that it's still following the basic idea of a subsumption
>>>> architecture but implemented quite differently than others I've seen.
>>>>
>>>> I'm still working through the details of it but so far things are
>>>> working.
>>>> A lot of effort...
>>>>
>>>> I'm curious about the Behaviour Tree idea because it suggests different
>>>> patterns or sequences of behaviours for different contexts, which is
>>>> something I've been investigating.
>>>>
>>>> Cheers,
>>>>
>>>> Murray
>>>>
>>>>
>>>> ...........................................................................
>>>>
>>>> Murray Altheim <murray18 at altheim dot com>?????????????????????? =
>>>> =? ===
>>>> http://secure-web.cisco.com/1YO6vCp79dzQizXLJN8vHUGZauOamOVLuQl-jFDKdyXllhHiVPW1Qzd6oZNhdCNvrSSTOhdcPlcWKb4H-aefOWPjWguYtbBs_9dLOeW7qOrH80as_tmrYvpKHTutx4jqKJCcC4E6r-SECXHA3Rfp73g-CRoC4vzbt7lQFHrRbtIFyVnxf-Lx0PBhipBonRndZE5kRoPPUVSdwjJ28ZjMTOWQ4bMMAzdI22N0WANsl5b8rBAPAmocm3UYPxSgGirNUAlwNBNdXNkxuvSmoByrRgg6WQ5h1wqmoC7Tk5F4Aqr0/http%3A%2F%2Fwww.altheim.com%2Fmurray%2F ===? ===
>>>> = =? ===
>>>> ??? In the evening
>>>> ??? The rice leaves in the garden
>>>> ??? Rustle in the autumn wind
>>>> ??? That blows through my reed hut.
>>>> ?????????? -- Minamoto no Tsunenobu
>>>>
>>>> _______________________________________________
>>>> DPRGlist mailing list
>>>> DPRGlist at lists.dprg.org
>>>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>> URL: <http://lists.dprg.org/pipermail/dprglist-dprg.org/attachments/20211028/a48e1fb8/attachment-0001.html>
>>>
>>> ------------------------------
>>>
>>> Subject: Digest Footer
>>>
>>> _______________________________________________
>>> DPRGlist mailing list
>>> DPRGlist at lists.dprg.org
>>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
>>>
>>>
>>> ------------------------------
>>>
>>> End of DPRGlist Digest, Vol 72, Issue 1
>>> ***************************************
>> _______________________________________________
>> DPRGlist mailing list
>> DPRGlist at lists.dprg.org
>> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
> _______________________________________________
> DPRGlist mailing list
> DPRGlist at lists.dprg.org
> http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org
More information about the DPRGlist
mailing list