Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a89e1db

Browse files
author
Davide Faconti
committed
Deployed 654177a with MkDocs version: 1.0.4
1 parent c979857 commit a89e1db

File tree

7 files changed

+343
-33
lines changed

7 files changed

+343
-33
lines changed

images/CrossDoorSubtree.png

20.8 KB
Loading

search/search_index.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

sitemap.xml.gz

0 Bytes
Binary file not shown.

tutorial_A_create_trees/index.html

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -444,15 +444,15 @@
444444
</li>
445445

446446
<li class="md-nav__item">
447-
<a href="#tutorial-01-a-statically-created-tree" title="Tutorial 01: a statically created Tree" class="md-nav__link">
448-
Tutorial 01: a statically created Tree
447+
<a href="#a-static-tree" title="A static Tree" class="md-nav__link">
448+
A static Tree
449449
</a>
450450

451451
</li>
452452

453453
<li class="md-nav__item">
454-
<a href="#tutorial-02-a-dynamically-created-tree" title="Tutorial 02: a dynamically created Tree" class="md-nav__link">
455-
Tutorial 02: a dynamically created Tree
454+
<a href="#a-dynamically-created-tree" title="A dynamically created Tree" class="md-nav__link">
455+
A dynamically created Tree
456456
</a>
457457

458458
</li>
@@ -561,15 +561,15 @@
561561
</li>
562562

563563
<li class="md-nav__item">
564-
<a href="#tutorial-01-a-statically-created-tree" title="Tutorial 01: a statically created Tree" class="md-nav__link">
565-
Tutorial 01: a statically created Tree
564+
<a href="#a-static-tree" title="A static Tree" class="md-nav__link">
565+
A static Tree
566566
</a>
567567

568568
</li>
569569

570570
<li class="md-nav__item">
571-
<a href="#tutorial-02-a-dynamically-created-tree" title="Tutorial 02: a dynamically created Tree" class="md-nav__link">
572-
Tutorial 02: a dynamically created Tree
571+
<a href="#a-dynamically-created-tree" title="A dynamically created Tree" class="md-nav__link">
572+
A dynamically created Tree
573573
</a>
574574

575575
</li>
@@ -602,7 +602,7 @@ <h1 id="how-to-create-a-behaviortree">How to create a BehaviorTree</h1>
602602
<p>You are <strong>strongly encourage to use the latter approach</strong>, but we will describe
603603
the former for the sake of completeness.</p>
604604
<h2 id="how-to-create-your-own-actionnodes">How to create your own ActionNodes</h2>
605-
<p>You can find the source code here: <a href="../sample_nodes/ dummy_nodes.h">dummy_nodes.h</a></p>
605+
<p>You can find the source code here: <a href="../sample_nodes/dummy_nodes.h">dummy_nodes.h</a></p>
606606
<p>The default (and recommended) way to create a TreeNode is by inheritance.</p>
607607
<div class="codehilite"><pre><span></span><span class="c1">// Example of custom ActionNodeBase (synchronous Action)</span>
608608
<span class="k">class</span> <span class="nc">ApproachObject</span><span class="o">:</span> <span class="k">public</span> <span class="n">BT</span><span class="o">::</span><span class="n">ActionNodeBase</span>
@@ -682,7 +682,7 @@ <h2 id="how-to-create-your-own-actionnodes">How to create your own ActionNodes</
682682
<li>GripperInterface::open()</li>
683683
<li>GripperInterface::close()</li>
684684
</ul>
685-
<h2 id="tutorial-01-a-statically-created-tree">Tutorial 01: a statically created Tree</h2>
685+
<h2 id="a-static-tree">A static Tree</h2>
686686
<div class="codehilite"><pre><span></span><span class="cp">#include</span> <span class="cpf">&quot;dummy_nodes.h&quot;</span><span class="cp"></span>
687687

688688
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
@@ -720,7 +720,7 @@ <h2 id="tutorial-01-a-statically-created-tree">Tutorial 01: a statically created
720720
<span class="cm">*/</span>
721721
</pre></div>
722722

723-
<h2 id="tutorial-02-a-dynamically-created-tree">Tutorial 02: a dynamically created Tree</h2>
723+
<h2 id="a-dynamically-created-tree">A dynamically created Tree</h2>
724724
<p>Give the following XML stored in the file <strong>my_tree.xml</strong></p>
725725
<div class="codehilite"><pre><span></span> <span class="nt">&lt;root</span> <span class="na">main_tree_to_execute =</span> <span class="s">&quot;MainTree&quot;</span> <span class="nt">&gt;</span>
726726
<span class="nt">&lt;BehaviorTree</span> <span class="na">ID=</span><span class="s">&quot;MainTree&quot;</span><span class="nt">&gt;</span>

tutorial_B_node_parameters/index.html

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -630,15 +630,24 @@ <h2 id="example-an-action-with-the-parameter-message">Example: an action with th
630630
The string "default message" is the default value.</p>
631631
</li>
632632
<li>
633-
<p>Parameters MUST be accessed using the method <strong>getParam()</strong>. </p>
633+
<p>Parameters MUST be accessed using the method <code>getParam()</code>, preferably in the
634+
<code>tick()</code> method, since this value may change over time. </p>
634635
</li>
635636
</ul>
636637
<div class="codehilite"><pre><span></span><span class="k">class</span> <span class="nc">SaySomething</span><span class="o">:</span> <span class="k">public</span> <span class="n">ActionNodeBase</span>
637638
<span class="p">{</span>
638639
<span class="k">public</span><span class="o">:</span>
640+
<span class="c1">// There must be a constructor with this signature</span>
639641
<span class="hll"> <span class="n">SaySomething</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&amp;</span> <span class="n">name</span><span class="p">,</span> <span class="k">const</span> <span class="n">NodeParameters</span><span class="o">&amp;</span> <span class="n">params</span><span class="p">)</span><span class="o">:</span>
640642
</span> <span class="n">ActionNodeBase</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span> <span class="p">{}</span>
641643

644+
<span class="c1">// It is mandatory to define this static method.</span>
645+
<span class="hll"> <span class="k">static</span> <span class="k">const</span> <span class="n">NodeParameters</span><span class="o">&amp;</span> <span class="n">requiredNodeParameters</span><span class="p">()</span>
646+
</span> <span class="p">{</span>
647+
<span class="k">static</span> <span class="n">NodeParameters</span> <span class="n">params</span> <span class="o">=</span> <span class="p">{{</span><span class="s">&quot;message&quot;</span><span class="p">,</span><span class="s">&quot;default message&quot;</span><span class="p">}};</span>
648+
<span class="k">return</span> <span class="n">params</span><span class="p">;</span>
649+
<span class="p">}</span>
650+
642651
<span class="k">virtual</span> <span class="n">NodeStatus</span> <span class="n">tick</span><span class="p">()</span> <span class="k">override</span>
643652
<span class="p">{</span>
644653
<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">msg</span><span class="p">;</span>
@@ -650,15 +659,7 @@ <h2 id="example-an-action-with-the-parameter-message">Example: an action with th
650659
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">&quot;Robot says: &quot;</span> <span class="o">&lt;&lt;</span> <span class="n">msg</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
651660
<span class="k">return</span> <span class="n">BT</span><span class="o">::</span><span class="n">NodeStatus</span><span class="o">::</span><span class="n">SUCCESS</span><span class="p">;</span>
652661
<span class="p">}</span>
653-
654662
<span class="k">virtual</span> <span class="kt">void</span> <span class="n">halt</span><span class="p">()</span> <span class="k">override</span> <span class="p">{}</span>
655-
656-
<span class="c1">// It is mandatory to define this static method.</span>
657-
<span class="hll"> <span class="k">static</span> <span class="k">const</span> <span class="n">NodeParameters</span><span class="o">&amp;</span> <span class="n">requiredNodeParameters</span><span class="p">()</span>
658-
</span> <span class="p">{</span>
659-
<span class="k">static</span> <span class="n">NodeParameters</span> <span class="n">params</span> <span class="o">=</span> <span class="p">{{</span><span class="s">&quot;message&quot;</span><span class="p">,</span><span class="s">&quot;default message&quot;</span><span class="p">}};</span>
660-
<span class="k">return</span> <span class="n">params</span><span class="p">;</span>
661-
<span class="p">}</span>
662663
<span class="p">};</span>
663664
</pre></div>
664665

@@ -672,16 +673,18 @@ <h2 id="example-conversion-to-user-defined-c-types">Example: conversion to user
672673

673674
<p>If we want the method <code>getParam()</code> to be able to parse a string
674675
and store its value into a Pose2D, we must provide our own specialization
675-
of <code>convertFromString&lt;&gt;()</code>.</p>
676+
of <code>convertFromString&lt;T&gt;()</code>.</p>
676677
<p>In this case, we want to represent Pose2D as three real numbers separated by
677678
semicolons.</p>
678-
<div class="codehilite"><pre><span></span><span class="k">namespace</span> <span class="n">BT</span><span class="p">{</span>
679+
<div class="codehilite"><pre><span></span><span class="c1">// use this namespace</span>
680+
<span class="k">namespace</span> <span class="n">BT</span><span class="p">{</span>
679681

680682
<span class="c1">// This template specialization is needed if you want</span>
681683
<span class="c1">// to AUTOMATICALLY convert a NodeParameter into a Pose2D</span>
682-
<span class="hll"><span class="k">template</span> <span class="o">&lt;&gt;</span> <span class="n">Pose2D</span> <span class="n">convertFromString</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&amp;</span> <span class="n">key</span><span class="p">)</span>
684+
<span class="hll"><span class="k">template</span> <span class="o">&lt;&gt;</span> <span class="n">Pose2D</span> <span class="n">BT</span><span class="o">::</span><span class="n">convertFromString</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&amp;</span> <span class="n">key</span><span class="p">)</span>
683685
</span><span class="p">{</span>
684-
<span class="c1">// Three real numbers separated by semicolons</span>
686+
<span class="c1">// Three real numbers separated by semicolons.</span>
687+
<span class="c1">// You may use &lt;boost/algorithm/string/split.hpp&gt; if you prefer</span>
685688
<span class="k">auto</span> <span class="n">parts</span> <span class="o">=</span> <span class="n">BT</span><span class="o">::</span><span class="n">splitString</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="sc">&#39;;&#39;</span><span class="p">);</span>
686689
<span class="k">if</span><span class="p">(</span> <span class="n">parts</span><span class="p">.</span><span class="n">size</span><span class="p">()</span> <span class="o">!=</span> <span class="mi">3</span><span class="p">)</span>
687690
<span class="p">{</span>
@@ -695,9 +698,11 @@ <h2 id="example-conversion-to-user-defined-c-types">Example: conversion to user
695698
<span class="k">return</span> <span class="n">output</span><span class="p">;</span>
696699
<span class="p">}</span>
697700
<span class="p">}</span>
701+
702+
<span class="p">}</span> <span class="c1">// end naespace</span>
698703
</pre></div>
699704

700-
<p>We now define a synchronous ActionNode called <strong>MoveBaseAction</strong>.</p>
705+
<p>We now define a <strong>asynchronous</strong> ActionNode called <strong>MoveBaseAction</strong>.</p>
701706
<p>The method <code>getParam()</code> will call the function <code>convertFromString&lt;Pose2D&gt;()</code> under the hood;
702707
alternatively, we can use the latter directly, for instance to convert the default
703708
string "0;0;0" into a Pose2D.</p>
@@ -722,7 +727,7 @@ <h2 id="example-conversion-to-user-defined-c-types">Example: conversion to user
722727
<span class="n">Pose2D</span> <span class="n">goal</span><span class="p">;</span>
723728
<span class="hll"> <span class="k">if</span><span class="p">(</span> <span class="n">getParam</span><span class="o">&lt;</span><span class="n">Pose2D</span><span class="o">&gt;</span><span class="p">(</span><span class="s">&quot;goal&quot;</span><span class="p">,</span> <span class="n">goal</span><span class="p">)</span> <span class="o">==</span> <span class="nb">false</span> <span class="p">)</span>
724729
</span><span class="hll"> <span class="p">{</span>
725-
</span><span class="hll"> <span class="k">auto</span> <span class="n">default_goal_value</span> <span class="o">=</span> <span class="n">requiredNodeParameters</span><span class="p">().</span><span class="n">at</span><span class="p">(</span><span class="s">&quot;goal&quot;</span><span class="p">);</span>
730+
</span><span class="hll"> <span class="k">auto</span> <span class="n">default_goal</span> <span class="o">=</span> <span class="n">requiredNodeParameters</span><span class="p">().</span><span class="n">at</span><span class="p">(</span><span class="s">&quot;goal&quot;</span><span class="p">);</span>
726731
</span><span class="hll"> <span class="n">goal</span> <span class="o">=</span> <span class="n">BT</span><span class="o">::</span><span class="n">convertFromString</span><span class="o">&lt;</span><span class="n">Pose2D</span><span class="o">&gt;</span><span class="p">(</span> <span class="n">default_goal_value</span> <span class="p">);</span>
727732
</span><span class="hll"> <span class="p">}</span>
728733
</span>
@@ -732,14 +737,15 @@ <h2 id="example-conversion-to-user-defined-c-types">Example: conversion to user
732737
<span class="n">halt_requested_</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span>
733738

734739
<span class="kt">int</span> <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
735-
<span class="c1">// &quot;compute&quot; for 250 milliseconds or until halt_requested_ is true</span>
740+
<span class="c1">// &quot;compute&quot; for 250 milliseconds or until halt_requested_</span>
736741
<span class="k">while</span><span class="p">(</span> <span class="o">!</span><span class="n">halt_requested_</span> <span class="o">&amp;&amp;</span> <span class="n">count</span><span class="o">++</span> <span class="o">&lt;</span> <span class="mi">25</span><span class="p">)</span>
737742
<span class="p">{</span>
738743
<span class="n">SleepMilliseconds</span><span class="p">(</span><span class="mi">10</span><span class="p">);</span>
739744
<span class="p">}</span>
740745

741746
<span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">&quot;[ MoveBase: FINISHED ]&quot;</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
742-
<span class="k">return</span> <span class="n">halt_requested_</span> <span class="o">?</span> <span class="n">NodeStatus</span><span class="o">::</span><span class="nl">SUCCESS</span> <span class="p">:</span> <span class="n">NodeStatus</span><span class="o">::</span><span class="n">SUCCESS</span><span class="p">;</span>
747+
<span class="k">return</span> <span class="n">halt_requested_</span> <span class="o">?</span> <span class="n">NodeStatus</span><span class="o">::</span><span class="nl">FAILURE</span> <span class="p">:</span>
748+
<span class="n">NodeStatus</span><span class="o">::</span><span class="n">SUCCESS</span><span class="p">;</span>
743749
<span class="p">}</span>
744750

745751
<span class="k">virtual</span> <span class="kt">void</span> <span class="n">halt</span><span class="p">()</span> <span class="k">override</span>

tutorial_D_subtrees/index.html

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -572,18 +572,20 @@ <h1>Compose with Subtrees</h1>
572572
<p>BehaviorTree.CPP provides a way to create reusable and composable Subtrees
573573
that can be included as nodes of a larger and more complex tree.</p>
574574
<h2 id="example-subtrees-in-xml">Example: subtrees in XML</h2>
575+
<p>To use the Subtree funtionality, you <strong>don't</strong> need to modify your
576+
<strong>cpp</strong> code, nor your existing TreeNodes.</p>
577+
<p>Multiple BehaviorTrees can be created and composed in the XML itself.</p>
575578
<div class="codehilite"><pre><span></span><span class="nt">&lt;root</span> <span class="na">main_tree_to_execute =</span> <span class="s">&quot;MainTree&quot;</span><span class="nt">&gt;</span>
576579
<span class="c">&lt;!---------------------------------------&gt;</span>
577580
<span class="nt">&lt;BehaviorTree</span> <span class="na">ID=</span><span class="s">&quot;DoorClosed&quot;</span><span class="nt">&gt;</span>
578581
<span class="nt">&lt;Sequence</span> <span class="na">name=</span><span class="s">&quot;door_closed_sequence&quot;</span><span class="nt">&gt;</span>
579582
<span class="nt">&lt;Negation&gt;</span>
580-
<span class="nt">&lt;Condition</span> <span class="na">ID=</span><span class="s">&quot;IsDoorOpen&quot;</span><span class="nt">/&gt;</span>
583+
<span class="nt">&lt;IsDoorOpen/&gt;</span>
581584
<span class="nt">&lt;/Negation&gt;</span>
582585
<span class="nt">&lt;RetryUntilSuccesful</span> <span class="na">num_attempts=</span><span class="s">&quot;4&quot;</span><span class="nt">&gt;</span>
583586
<span class="nt">&lt;OpenDoor/&gt;</span>
584587
<span class="nt">&lt;/RetryUntilSuccesful&gt;</span>
585588
<span class="nt">&lt;PassThroughDoor/&gt;</span>
586-
<span class="nt">&lt;CloseDoor/&gt;</span>
587589
<span class="nt">&lt;/Sequence&gt;</span>
588590
<span class="nt">&lt;/BehaviorTree&gt;</span>
589591
<span class="c">&lt;!---------------------------------------&gt;</span>
@@ -593,13 +595,16 @@ <h2 id="example-subtrees-in-xml">Example: subtrees in XML</h2>
593595
<span class="nt">&lt;IsDoorOpen/&gt;</span>
594596
<span class="nt">&lt;PassThroughDoor/&gt;</span>
595597
<span class="nt">&lt;/Sequence&gt;</span>
596-
<span class="nt">&lt;SubTree</span> <span class="na">ID=</span><span class="s">&quot;DoorClosed&quot;</span><span class="nt">/&gt;</span>
597-
<span class="nt">&lt;PassThroughWindow/&gt;</span>
598+
<span class="hll"> <span class="nt">&lt;SubTree</span> <span class="na">ID=</span><span class="s">&quot;DoorClosed&quot;</span><span class="nt">/&gt;</span>
599+
</span> <span class="nt">&lt;PassThroughWindow/&gt;</span>
598600
<span class="nt">&lt;/Fallback&gt;</span>
599601
<span class="nt">&lt;/BehaviorTree&gt;</span>
600602
<span class="c">&lt;!---------------------------------------&gt;</span>
601603
<span class="nt">&lt;/root&gt;</span>
602604
</pre></div>
605+
606+
<p>The corresponding graphical representation is:</p>
607+
<p><img alt="CrossDoorSubtree" src="../images/CrossDoorSubtree.png" /> </p>
603608

604609

605610

0 commit comments

Comments
 (0)