@@ -630,15 +630,24 @@ <h2 id="example-an-action-with-the-parameter-message">Example: an action with th
630
630
The string "default message" is the default value.</ p >
631
631
</ li >
632
632
< 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 >
634
635
</ li >
635
636
</ ul >
636
637
< 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 >
637
638
< span class ="p "> {</ span >
638
639
< span class ="k "> public</ span > < span class ="o "> :</ span >
640
+ < span class ="c1 "> // There must be a constructor with this signature</ span >
639
641
< 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 "> &</ span > < span class ="n "> name</ span > < span class ="p "> ,</ span > < span class ="k "> const</ span > < span class ="n "> NodeParameters</ span > < span class ="o "> &</ span > < span class ="n "> params</ span > < span class ="p "> )</ span > < span class ="o "> :</ span >
640
642
</ 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 >
641
643
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 "> &</ 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 "> "message"</ span > < span class ="p "> ,</ span > < span class ="s "> "default message"</ 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
+
642
651
< span class ="k "> virtual</ span > < span class ="n "> NodeStatus</ span > < span class ="n "> tick</ span > < span class ="p "> ()</ span > < span class ="k "> override</ span >
643
652
< span class ="p "> {</ span >
644
653
< 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
650
659
< span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> cout</ span > < span class ="o "> <<</ span > < span class ="s "> "Robot says: "</ span > < span class ="o "> <<</ span > < span class ="n "> msg</ span > < span class ="o "> <<</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> endl</ span > < span class ="p "> ;</ span >
651
660
< 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 >
652
661
< span class ="p "> }</ span >
653
-
654
662
< 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 "> &</ 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 "> "message"</ span > < span class ="p "> ,</ span > < span class ="s "> "default message"</ 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 >
662
663
< span class ="p "> };</ span >
663
664
</ pre > </ div >
664
665
@@ -672,16 +673,18 @@ <h2 id="example-conversion-to-user-defined-c-types">Example: conversion to user
672
673
673
674
< p > If we want the method < code > getParam()</ code > to be able to parse a string
674
675
and store its value into a Pose2D, we must provide our own specialization
675
- of < code > convertFromString<>()</ code > .</ p >
676
+ of < code > convertFromString<T >()</ code > .</ p >
676
677
< p > In this case, we want to represent Pose2D as three real numbers separated by
677
678
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 >
679
681
680
682
< span class ="c1 "> // This template specialization is needed if you want</ span >
681
683
< span class ="c1 "> // to AUTOMATICALLY convert a NodeParameter into a Pose2D</ span >
682
- < span class ="hll "> < span class ="k "> template</ span > < span class ="o "> <></ 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 "> &</ span > < span class ="n "> key</ span > < span class ="p "> )</ span >
684
+ < span class ="hll "> < span class ="k "> template</ span > < span class ="o "> <></ 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 "> &</ span > < span class ="n "> key</ span > < span class ="p "> )</ span >
683
685
</ 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 <boost/algorithm/string/split.hpp> if you prefer</ span >
685
688
< 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 "> ';'</ span > < span class ="p "> );</ span >
686
689
< 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 >
687
690
< span class ="p "> {</ span >
@@ -695,9 +698,11 @@ <h2 id="example-conversion-to-user-defined-c-types">Example: conversion to user
695
698
< span class ="k "> return</ span > < span class ="n "> output</ span > < span class ="p "> ;</ span >
696
699
< span class ="p "> }</ span >
697
700
< span class ="p "> }</ span >
701
+
702
+ < span class ="p "> }</ span > < span class ="c1 "> // end naespace</ span >
698
703
</ pre > </ div >
699
704
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 >
701
706
< p > The method < code > getParam()</ code > will call the function < code > convertFromString<Pose2D>()</ code > under the hood;
702
707
alternatively, we can use the latter directly, for instance to convert the default
703
708
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
722
727
< span class ="n "> Pose2D</ span > < span class ="n "> goal</ span > < span class ="p "> ;</ span >
723
728
< span class ="hll "> < span class ="k "> if</ span > < span class ="p "> (</ span > < span class ="n "> getParam</ span > < span class ="o "> <</ span > < span class ="n "> Pose2D</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="s "> "goal"</ 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 >
724
729
</ 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 "> "goal"</ 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 "> "goal"</ span > < span class ="p "> );</ span >
726
731
</ 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 "> <</ span > < span class ="n "> Pose2D</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="n "> default_goal_value</ span > < span class ="p "> );</ span >
727
732
</ span > < span class ="hll "> < span class ="p "> }</ span >
728
733
</ span >
@@ -732,14 +737,15 @@ <h2 id="example-conversion-to-user-defined-c-types">Example: conversion to user
732
737
< span class ="n "> halt_requested_</ span > < span class ="o "> =</ span > < span class ="nb "> false</ span > < span class ="p "> ;</ span >
733
738
734
739
< 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 "> // "compute" for 250 milliseconds or until halt_requested_ is true </ span >
740
+ < span class ="c1 "> // "compute" for 250 milliseconds or until halt_requested_</ span >
736
741
< span class ="k "> while</ span > < span class ="p "> (</ span > < span class ="o "> !</ span > < span class ="n "> halt_requested_</ span > < span class ="o "> &&</ span > < span class ="n "> count</ span > < span class ="o "> ++</ span > < span class ="o "> <</ span > < span class ="mi "> 25</ span > < span class ="p "> )</ span >
737
742
< span class ="p "> {</ span >
738
743
< span class ="n "> SleepMilliseconds</ span > < span class ="p "> (</ span > < span class ="mi "> 10</ span > < span class ="p "> );</ span >
739
744
< span class ="p "> }</ span >
740
745
741
746
< span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> cout</ span > < span class ="o "> <<</ span > < span class ="s "> "[ MoveBase: FINISHED ]"</ span > < span class ="o "> <<</ 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 >
743
749
< span class ="p "> }</ span >
744
750
745
751
< span class ="k "> virtual</ span > < span class ="kt "> void</ span > < span class ="n "> halt</ span > < span class ="p "> ()</ span > < span class ="k "> override</ span >
0 commit comments