Git Product home page Git Product logo

behaviortree.cpp's People

Contributors

alsora avatar asasine avatar benjinne avatar cmcghan avatar ewerlopes avatar fabianschurig avatar facontidavide avatar fmros avatar fultoncjb avatar galou avatar goekce avatar griswaldbrooks avatar hansrobo avatar imgbot[bot] avatar imgbotapp avatar jesus05 avatar keenanjohnson avatar loyvanbeek avatar masadow avatar miccol avatar operepadia avatar renan028 avatar sarcasticnature avatar schornakj avatar seanyen avatar subaruarai avatar tony-p avatar tradias avatar uilianries avatar unvestigate avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

behaviortree.cpp's Issues

Conan Package Support

Hello,

Do you know about Conan?

Conan is modern dependency and package manager for C/C++ and would be great if your library would be available via package manager for other developers.

All Conan packages are available on Conan Center, where is possible search, install and upload any official Conan package.

As your project uses zmq, we already have such dependency solved by Conan. So you are able to run BehaviorTree with zmq pre-built.

We could support you writing a recipe and publishing your packages on Bintray.

If you have any questions, just ask :-)

Regards!

profiling tools request

Hi Davide,
Is there a way to profiling the tree, i.e., how much a step take? I know there is a jason log and I can parse that. I am just wondering if you have that already. Also, is there a way to make the time stamp accurate to micro second?

Best Regards,
Xin

Crash on BT load

GRoot crashes when loading the following BT xml:

<root>
    <!--------------------------------------->
    <BehaviorTree ID="ReceiveGuest">
    </BehaviorTree>
    <!--------------------------------------->
    <TreeNodesModel>

        <SubTree ID="ReceiveGuest"/>

        <Control ID="Fallback"/>
        <Control ID="Sequence"/>
        <Control ID="SequenceStar"/>
    </TreeNodesModel>
    <!--------------------------------------->
</root>

It looks like it is trying to dereference a null pointer:

registered  "SequenceStar"
AddressSanitizer:DEADLYSIGNAL
=================================================================
==15032==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x5606027bf02b bp 0x7ffd2cc13ff0 sp 0x7ffd2cc13fe0 T0)                                                                                
==15032==The signal is caused by a READ memory access.
==15032==Hint: address points to the zero page.

Race condition in timeout decorator node?

Hi,
Sorry if this explanation sounds a bit convoluted, but we have been running into this intermittent issue for a while now. A sequence followed by a timeout connected to a retry node would sometimes fail with an exception stating that "This shouldn't happen". The timeout node was somehow returning IDLE to its parent.
I took a look, and it seems the timer runs in its own thread, halting its child and setting a flag if the timeout ever kicks in. This flag is later checked in the tick function.
On the other hand, the retry node returns its own status by calling status() if its child returns FAILURE and there are still tries left.
I think what's happening is that the timer kicks in and halts the retry node at the same time its tick function is being called, thus making it return IDLE at the end.
What do you think? Is this possible?

Default Input port values

Talking about ver_3

InputPort could be easily extended to have an optional default value (in the same sense as Groot custom node has).

When calling getInput, if nothing is found, and a default value is specified, it is returned.

For BidirectionalPorts, I guess it would only be used for the "input" part of the port. Although is debatable.

I can make a PR with this if you are interested.

Parallel node not able to be registered and used in an XML description

To implement runing planning and control in parallel, I'd like to be able to use the ParallelNode in an XML description, something like this:

<root main_tree_to_execute="MainTree">
  <BehaviorTree ID="MainTree">
    <SequenceStar name="root">
      <ComputePathToPose endpoints="${endpoints}" path="${path}"/>
      <Parallel threshold_M="1">
        <FollowPath path="${path}"/>
        <Sequence>
          <RateController hz="2">
            <ComputePathToPose endpoints="${endpoints}" path="${path}"/>
          </RateController>
          <UpdatePath/>
        </Sequence>
      </Parallel>
    </SequenceStar>
  </BehaviorTree>
</root>

However, because the ParallelNode has the following signature:

BT::ParallelNode::ParallelNode(const std::string& name, int threshold_M)

it can't be registered and used in an XML description of the tree. I've worked around this for now by making the threshold value have a default value.

blackboard set function takes 2 copy constructs

test code

        class MyClass {
        public:
            MyClass() {
                TRACE("Constructor");
                PRINTVAR(sptr_.use_count());
            }
            MyClass(const MyClass &from) : sptr_(from.sptr_) {
                TRACE("copy");
                PRINTVAR(sptr_.use_count());
            }
            virtual ~MyClass() {
                TRACE("Destructor");
                PRINTVAR(sptr_.use_count());
            }
            std::shared_ptr<std::vector<int> > sptr_;
        };
        {
            MyClass testv;
            testv.sptr_.reset(new std::vector<int>);
            testv.sptr_->push_back(1);
            testv.sptr_->push_back(2);
            TRACE("before set");
            blackboard->set("testmove", testv);
            TRACE("after set");
        }

The result is

[TRACE] Constructor
[TRACE]sptr_.use_count()=0
[TRACE] before set
[TRACE] copy
[TRACE]sptr_.use_count()=2
[TRACE] copy
[TRACE]sptr_.use_count()=3
[TRACE] Destructor
[TRACE]sptr_.use_count()=3
[TRACE] after set
[TRACE] Destructor
[TRACE]sptr_.use_count()=2

I guess there could be a method to avoid one of the 2 copy constructs. Or we should not set a object that contains too many data?

TinyXML2 symbols still exported from library

In the tinyxml2 header file embedded in the BehaviorTree.CPP library, there is the macro:

// Do NOT export. This version is meant to be linked statically only.
#define TINYXML2_LIB

Using gcc, the default behavior is to export the tinyxml2 symbols from the BehaviorTree.CPP library, so the problem remains that this embedded version of the library can be picked up when linking if the application uses (another version of) tinyxml2.

Therefore, this should be used in the gcc case:

#define TINYXML2_LIB __attribute__((visibility("hidden")))

This prevents the symbols from being exported (you can confirm this with the nm utility).

So, I recommend the following:

#ifdef _WIN32
#   ifdef TINYXML2_EXPORT
#       define TINYXML2_LIB __declspec(dllexport)
#   elif defined(TINYXML2_IMPORT)
#       define TINYXML2_LIB __declspec(dllimport)
#   else
#       define TINYXML2_LIB
#   endif
#elif __GNUC__ >= 4
#   ifdef TINYXML2_EXPORT
#     define TINYXML2_LIB __attribute__((visibility("default")))
#   else
#     define TINYXML2_LIB __attribute__((visibility("hidden")))
#   endif
#else
#   define TINYXML2_LIB
#endif

TinyXML symbols exported on VC++

When compiling under msvc, tiny xml symbols are exported which is conflicting for me because I'm already using tinyxml on my own.

RetryUntilSuccesful fail to get parameter from blackboard

Hi,
Recently I am trying to set a blackboard parameter, then ask retryuntilsuccessful to retry this num of times. However, it keeps core dumpt and says stol, invalid argument.
This error is easy to reproduce with t05_crossdoor.cpp. Here is my version of code which will error out.
I tried to give a unsigned int, I am not sure what the type this num_attempts should be.

t05_crossdoor.cpp.tar.gz

Error compiling in release mode under VC++

Hi,

When I try to compile my project under debug against debug library of BT.CPP, it works. If I try to compile under debug against release BT.CPP, it works too. But if I try to compile under release against release BT.CPP. I've got the following error during linking :

Error LNK2038 mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in main.obj

Subtree parameters

If there is, then I'm unaware (and it's not possible to add some in Groot) but that would be pretty neat to add the possibility to give parameters to subtree.

For instance, I have a subtree called Walk that is a sequence of nodes FaceTo and MoveTo.

Actually, I have to specify the target in both FaceTo and MoveTo while I would like to specify it at Walk level. Then FaceTo and MoveTo would just have to read Walk target value.

(In fact, I have to make a new subtree each time I want to face a different target).

I know I can use a blackboard value called target but it's not the desired result as in a more complex graph, I want to keep track of multiple targets (For example, in strategy game where the player orders a unit to harvest a resource, I will have two targets, the resource and the nearest storage to make the trip between the two)

Blackboard precondition decorator throws std::invalid_argument

Hi,
It seems there's an issue with the BlackboardPreconditionNode decorator, or it may be a misunderstanding on my part on how it's supposed to work. Setting the "expected" field with the wildcard value "*" throws a std::invalid_argument from std::stod. I went ahead and check what's going on, and the problem seems to come from how the checks are arranged in the tick() function of the decorator:

        if (blackboard() &&                     //blackboard not null
            getParam("key", key) &&             // parameter key provided
            getParam("expected", expected) &&   // parameter expected provided
            blackboard()->get(key, value) &&    // value found in blackboard
            (value == expected ||
             initializationParameters().at("expected") == "*"))   // is expected value or "*"
        {
            return child_node_->executeTick();
        }
        else
        {
            return NodeStatus::FAILURE;
        }

The getParam("expected", expected) gets called even if the value is "*" and it ends up calling convertFromString<double>("*") in tree_node.h.
Rearranging the conditions a bit fixes this. Something like this:

        if (blackboard() && getParam("key", key) && blackboard()->get(key, value))
        {
            if (initializationParameters().at("expected") == "*" || (getParam("expected", expected) && value == expected))
            {
                return child_node_->executeTick();
            }
        }
        return NodeStatus::FAILURE;

Aborting async nodes when not being ticked

I have a scenario, where an async node needs to be stopped when a condition in the behaviour-tree some levels above re-evaluates to a different value. Right now it just finishes its execution. The only possible way I see to achieve this is to call "haltAllActions" on the root node to cancel all active nodes.
Is there a cleaner solution? Should the behaviour-tree not automatically abort running nodes if the node is not ticked any more?

Additional info on node failure

Hi,
As far as I'm aware (correct me if I'm wrong) there's currently no standard way to report back the reason a node has failed. This is somehow exasperating when using a logger, where all the info provided is that it returned FAILURE as status. It would be nice to get some hints on why it has failed.
I'm willing to propose a pull request if you think it's worth it.

ver_3 coroutines segfault and other issues

In this code there are 2 tests.

  1. do_action which will execute a CoRoutine several times, it is there to illustrate the need to manually perform node.setStatus(BT::NodeStatus::IDLE); if we want the action to be evaluated again. I'm not sure what is the proper way of executing a test similar to this without having to include this hard coded fix.

  2. do_action_timeout Same action but with a timeout, when halt is called there's a segfault.

Here's the callstack for the segfault:

Stack trace (most recent call last) in thread 8354:
#15   Object "", at 0xffffffffffffffff, in 
#14   Source "../sysdeps/unix/sysv/linux/x86_64/clone.S", line 109, in __clone [0x7f8ea758d41c]
#13   Source "/build/glibc-Cl5G7W/glibc-2.23/nptl/pthread_create.c", line 333, in start_thread [0x7f8ea72706b9]
#12   Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21", at 0x7f8ea7b1ec7f, in 
#11   Source "/usr/include/c++/5/thread", line 115, in _M_run [0x7f8ea81858d7]
        112: 	{ }
        113: 
        114: 	void
      > 115: 	_M_run() { _M_func(); }
        116:       };
        117: 
        118:   private:
#10   Source "/usr/include/c++/5/functional", line 1520, in operator() [0x7f8ea8185947]
       1517:       operator()()
       1518:       {
       1519:         typedef typename _Build_index_tuple<sizeof...(_Args)>::__type _Indices;
      >1520:         return _M_invoke(_Indices());
       1521:       }
       1522: 
       1523:     private:
#9    Source "/usr/include/c++/5/functional", line 1531, in _M_invoke<> [0x7f8ea81859f1]
       1528: 	  // std::bind always forwards bound arguments as lvalues,
       1529: 	  // but this type can call functions which only accept rvalues.
       1530:           return std::forward<_Callable>(std::get<0>(_M_bound))(
      >1531:               std::forward<_Args>(std::get<_Indices+1>(_M_bound))...);
       1532:         }
       1533: 
       1534:       std::tuple<_Callable, _Args...> _M_bound;
#8    Source "/home/victor/other_ws/grasping_pipeline_minimal/src/BehaviorTree.CPP/include/behaviortree_cpp/decorators/timer_queue.h", line 70, in TimerQueue [0x7f8ea8180d04]
         67:   public:
         68:     TimerQueue()
         69:     {
      >  70:         m_th = std::thread([this] { run(); });
         71:     }
         72: 
         73:     ~TimerQueue()
#7    Source "/home/victor/other_ws/grasping_pipeline_minimal/src/BehaviorTree.CPP/include/behaviortree_cpp/decorators/timer_queue.h", line 188, in run [0x7f8ea8181713]
        186:             // Check and execute as much work as possible, such as, all expired
        187:             // timers
      > 188:             checkWork();
        189:         }
        190: 
        191:         // If we are shutting down, we should not have any items left,
#6    Source "/home/victor/other_ws/grasping_pipeline_minimal/src/BehaviorTree.CPP/include/behaviortree_cpp/decorators/timer_queue.h", line 228, in checkWork [0x7f8ea8181c39]
        226:             lk.unlock();
        227:             if (item.handler)
      > 228:                 item.handler(item.id == 0);
        229:             lk.lock();
        230:         }
        231:     }
#5    Source "/usr/include/c++/5/functional", line 2267, in operator() [0x7f8ea81825fd]
       2264:     {
       2265:       if (_M_empty())
       2266: 	__throw_bad_function_call();
      >2267:       return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...);
       2268:     }
       2269: 
       2270: #if __cpp_rtti
#4    Source "/usr/include/c++/5/functional", line 1871, in _M_invoke [0x7f8ea8180592]
       1868:       static void
       1869:       _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
       1870:       {
      >1871: 	(*_Base::_M_get_pointer(__functor))(
       1872: 	    std::forward<_ArgTypes>(__args)...);
       1873:       }
       1874:     };
#3    Source "/home/victor/other_ws/grasping_pipeline_minimal/src/BehaviorTree.CPP/src/decorators/timeout_node.cpp", line 55, in operator() [0x7f8ea8180159]
         52:             timer_id_ = timer().add(std::chrono::milliseconds(msec_), [this](bool aborted) {
         53:                 if (!aborted && child()->status() == NodeStatus::RUNNING)
         54:                 {
      >  55:                     child()->halt();
         56:                     child_halted_ = true;
         57:                 }
         58:             });
#2    Source "/home/victor/other_ws/grasping_pipeline_minimal/src/behaviortree_ros_actions/test/simple_coro_test.cpp", line 22, in halt [0x422fa9]
         19:   virtual void halt() override
         20:   {
         21:     std::cout << "Action was halted" << std::endl;
      >  22:     BT::CoroActionNode::halt();
         23:   }
         24: 
         25: protected:
#1    Source "/home/victor/other_ws/grasping_pipeline_minimal/src/BehaviorTree.CPP/src/action_node.cpp", line 202, in halt [0x7f8ea8137b55]
        199: {
        200:     if( _p->coro != 0 )
        201:     {
      > 202:         coroutine::destroy(_p->coro);
        203:         _p->coro = 0;
        204:     }
        205: }
#0    Source "/home/victor/other_ws/grasping_pipeline_minimal/src/BehaviorTree.CPP/3rdparty/coroutine/coroutine.h", line 296, in destroy [0x7f8ea8138f4c]
        294: inline void destroy(routine_t id)
        295: {
      > 296: 	Routine *routine = ordinator.routines[id-1];
        297: 	assert(routine != nullptr);
        298: 
        299: 	delete routine;
Segmentation fault (Address not mapped to object [(nil)])
Segmentation fault

Recommended behavior tree editor?

I see on your site that you have a screenshot of a Behavior Tree editor. Do you happen to have a recommendation of which to use? I'd like to output XML that can be used w/ the BehaviorTree.CPP library to automatically construct the tree. Also, of course, I'd have to be able to add custom nodes to the editor so that they can be placed in the tree and parameters for each action specified. It would be nice, too, to be able to actually run the BTs from the UI.

Open discussion: Ports and Subtrees

This issue is about adding input/output ports to Subtrees.
Unfortunately, to do it right, we need to think carefully about the impact in terms of composition and scope. The BB model itself struggle to deal with this.

image

@Thordreck @miccol @v-lopez

@Thordreck suggested to have internal/external ports.
Even if that might look as a solution, it feels to me "wrong".

My gut feeling is telling me that the solution is "scoped blackboards".

Consider this C++ code:

int value = 69;
int num = 11;
{
    int value = 42;
    std::cout << num << " " << value <<std::endl; // will print: 11 42
}
std::cout << num << " " << value <<std::endl; // will print: 11 69

My feeling is that, to address composition using Subtrees, each subtree must have it's scoped Blackboard. Similarly to the C++ example, unless it is remapped, there should be a "priority stack" of blackboards, rather than a single one.

By default, the "local" blackboard is accessed first and then the following ones.

Now I have to think how to implement this and how make it look simple in the XML representation ;)

Any other idea or different direction you would like to propose?

Void as port type

Hi, I guess this is more of a question than an actual issue, but I was not sure where else I could ask.
I'm working in the migration to v3, and I was running into some issues porting some functionality to the new typed port system. Some of the blocks in my library do not know on compilation time the type of its result/input. I'm aware of the benefits of enforcing a strict type check, but I think some applications may benefit of a more relaxed port policy sometimes. Taking a look at the code it seems setting the type to void when declaring the port disables type checking, if I'm not mistaken.
Can users rely on this feature? If so, wouldn't make more sense to set a type-erasure container as the "wildcard type" (for example BT::Any)?
Sorry if this was already discussed/documented. I couldn't find anything about it in the repo/docs.

Accessing the blackboard in the Constructor of TreeNode

I'm using generation of the BT from an XML document. Also using the blackboard to share some data between nodes. When BT nodes are created with buildTreeFromText, the blackboard is not yet available to nodes in their constructor (since it is not set yet on the node). Therefore, in the tick() override, I have to check if this is the first time tick() has been called so I can get/set data intializing data from the blackboard after construction. Perhaps the library itself should have an onInit() function, in addition to tick() and halt(). The derived classes could override this method and know that the blackboard is available.

TinyXML symbols exported from behavior tree library

With the current build scripts, the tinyxml2 symbols are exported from the behavior_tree_core shared object. The ROS2 middleware also embeds the tinyxml2 library and exports the symbols as well. The ROS2 build will use the tinyxml2 library installed on the target platform, while BehaviorTree.CPP will use its own version (the tinyxml2 source is with the BT library code). If these libraries are different versions only one tinyxml2 version will be found when linking a ROS2 executable. Therefore, one the ROS2 middleware or BT library will be using the wrong version.

TinyXML2 supports the gcc's visibility attribute. I made the following change to work around this:

https://github.com/mjeronimo/BehaviorTree.CPP/commit/f059c2035eda28a9688bf063a428fa2d44cfa9e7

With this, by default, the tinyxml2 symbols will not be exported and will therefore, not conflict.

Desired Behavior RetryUntilSuccessful Node

When describing the RetryUntilSuccesful Node on the BehaviorTree.CPP page it is stated that the Retry node will repeat ticking the child up to N times if the child returns FAILURE. Currently however, if the child returns FAILURE the whole tree starts again from root. This could cause problems or at least be inefficient e.g. if a robot first moves back to an old position before going to the current position and trying an action again. So, I was wondering if the latter is the desired behavior of RetryUntilSuccessful or if in fact only the child should be ticked N times?

Building BehaviorTree.CPP (Visual Studio 2017/Windows 10 x64)

Hi! Thank you for your fantastic contribution, and congrats for your new shiny version 3.0!

I am a great fan of crossplatform, minimal dependencies and header-only gems in modern c++.

Well; BehaviourTree.cpp is not header-only :-). So i am trying to compile/build the library from source code, in Visual Studio 2017(15.9.7) for Windows 10 x64. No success. :-/. At the moment i have omitted GTEST amd ZMQ because i only want the core/logic functionality. Is it possible?

Any guide/hints about how to compile/build/configure BehaviorTree.CPP for using in new proyects? Thanks in advance!!

I have enabled the _CRT_SECURE_NO_WARNINGS flag.

I get this output :-(:

1>------ Rebuild All started: Project: ZERO_CHECK, Configuration: Debug x64 ------
1>Checking Build System
1>CMake does not need to re-run because P:/Compilados/x32-x64/TRABAJO_MSVC2017_x64/BehaviorTree.CPP/builds/debug/CMakeFiles/generate.stamp is up-to-date.
2>------ Rebuild All started: Project: behaviortree_cpp_v3, Configuration: Debug x64 ------
2>Building Custom Rule P:/Compilados/x32-x64/TRABAJO_MSVC2017_x64/BehaviorTree.CPP/CMakeLists.txt
2>CMake does not need to re-run because P:/Compilados/x32-x64/TRABAJO_MSVC2017_x64/BehaviorTree.CPP/builds/debug/CMakeFiles/generate.stamp is up-to-date.
2>action_node.cpp
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\coroutine/coroutine.h(115): error C2220: warning treated as error - no 'object' file generated
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\coroutine/coroutine.h(115): warning C4267: 'return': conversion from 'size_t' to 'coroutine::routine_t', possible loss of data
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\coroutine/coroutine.h(137): warning C4100: 'lpParameter': unreferenced formal parameter
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(788): error C2059: syntax error: '('
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(788): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(788): error C2059: syntax error: ')'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(789): warning C4183: '__attribute__': missing return type; assumed to be a member function returning 'int'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(795): error C3861: 'backtrace': identifier not found
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2589: '(': illegal token on right side of '::'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2144: syntax error: 'unknown-type' should be preceded by ')'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2661: 'std::vector<void *,std::allocator<_Ty>>::resize': no overloaded function takes 0 arguments
2>        with
2>        [
2>            _Ty=void *
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2144: syntax error: 'unknown-type' should be preceded by ';'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2143: syntax error: missing ')' before '.'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C3928: '->': trailing return type is not allowed after a parenthesized declarator
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C3484: syntax error: expected '->' before the return type
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C3613: missing return type after '->' ('int' assumed)
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): warning C4458: declaration of '_stacktrace' hides class member
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(679): note: see declaration of 'backward::StackTraceImplHolder::_stacktrace'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2146: syntax error: missing ';' before identifier 'size'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\backward-cpp/backward.hpp(812): error C2059: syntax error: ')'
2>basic_types.cpp
2>behavior_tree.cpp
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(210): error C2220: warning treated as error - no 'object' file generated
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(210): warning C4127: conditional expression is constant
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(211): note: consider using 'if constexpr' statement instead
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(49): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<std::string>(const std::string &,T &) const' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *const ' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(258): note: see reference to function template instantiation 'void BT::Blackboard::set<T>(const std::string &,const T &)' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(57): note: see reference to function template instantiation 'BT::Result BT::TreeNode::setOutput<std::string>(const std::string &,const T &)' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
2>blackboard.cpp
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\blackboard.cpp(28): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\blackboard.cpp(28): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\blackboard.cpp(29): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\blackboard.cpp(29): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\blackboard.cpp(60): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\blackboard.cpp(60): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2>bt_factory.cpp
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\bt_factory.cpp(143): error C2220: warning treated as error - no 'object' file generated
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\bt_factory.cpp(143): warning C4456: declaration of 'it' hides previous local declaration
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\bt_factory.cpp(139): note: see declaration of 'it'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(210): warning C4127: conditional expression is constant
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(211): note: consider using 'if constexpr' statement instead
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(49): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<std::string>(const std::string &,T &) const' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *const ' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(258): note: see reference to function template instantiation 'void BT::Blackboard::set<T>(const std::string &,const T &)' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(57): note: see reference to function template instantiation 'BT::Result BT::TreeNode::setOutput<std::string>(const std::string &,const T &)' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
2>decorator_node.cpp
2>condition_node.cpp
2>control_node.cpp
2>shared_library.cpp
2>shared_library_UNIX.cpp
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\shared_library_UNIX.cpp(3): fatal error C1083: Cannot open include file: 'dlfcn.h': No such file or directory
2>tree_node.cpp
2>xml_parsing.cpp
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(16): error C2220: warning treated as error - no 'object' file generated
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(16): warning C4068: unknown pragma
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(17): warning C4068: unknown pragma
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(44): error C2872: 'XMLDocument': ambiguous symbol
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(46): error C2872: 'XMLDocument': ambiguous symbol
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(70): warning C4068: unknown pragma
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(84): error C2872: 'XMLDocument': ambiguous symbol
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(84): error C2027: use of undefined type 'XMLDocument'
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(84): error C2672: 'std::list<std::unique_ptr<XMLDocument,std::default_delete<_Ty>>,std::allocator<std::unique_ptr<_Ty,std::default_delete<_Ty>>>>::emplace_back': no matching overloaded function found
2>        with
2>        [
2>            _Ty=XMLDocument
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(86): error C2872: 'XMLDocument': ambiguous symbol
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(87): error C2027: use of undefined type 'XMLDocument'
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(97): error C2872: 'XMLDocument': ambiguous symbol
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(97): error C2027: use of undefined type 'XMLDocument'
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(97): error C2672: 'std::list<std::unique_ptr<XMLDocument,std::default_delete<_Ty>>,std::allocator<std::unique_ptr<_Ty,std::default_delete<_Ty>>>>::emplace_back': no matching overloaded function found
2>        with
2>        [
2>            _Ty=XMLDocument
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(99): error C2872: 'XMLDocument': ambiguous symbol
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(100): error C2027: use of undefined type 'XMLDocument'
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(105): error C2872: 'XMLDocument': ambiguous symbol
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(107): error C2027: use of undefined type 'XMLDocument'
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(110): error C2027: use of undefined type 'XMLDocument'
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(110): warning C4473: 'sprintf' : not enough arguments passed for format string
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(110): note: placeholders and their parameters expect 1 variadic arguments, but 0 were provided
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(110): note: the missing variadic argument 1 is required by format string '%s'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(114): error C2027: use of undefined type 'XMLDocument'
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(147): error C2872: 'XMLDocument': ambiguous symbol
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(147): error C2027: use of undefined type 'XMLDocument'
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(147): error C2672: 'std::list<std::unique_ptr<XMLDocument,std::default_delete<_Ty>>,std::allocator<std::unique_ptr<_Ty,std::default_delete<_Ty>>>>::emplace_back': no matching overloaded function found
2>        with
2>        [
2>            _Ty=XMLDocument
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(148): error C2872: 'XMLDocument': ambiguous symbol
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(148): warning C4457: declaration of 'doc' hides function parameter
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(105): note: see declaration of 'doc'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(149): error C2027: use of undefined type 'XMLDocument'
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(170): error C2027: use of undefined type 'XMLDocument'
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(189): error C2872: 'XMLDocument': ambiguous symbol
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(189): error C2079: 'doc' uses undefined class 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(191): error C3536: 'xml_error': cannot be used before it is initialized
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(194): warning C4473: 'sprintf' : not enough arguments passed for format string
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(194): note: placeholders and their parameters expect 1 variadic arguments, but 0 were provided
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(194): note: the missing variadic argument 1 is required by format string '%s'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(395): error C2027: use of undefined type 'XMLDocument'
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: see declaration of 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(395): error C2039: 'RootElement': is not a member of 'std::unique_ptr<XMLDocument,std::default_delete<_Ty>>'
2>        with
2>        [
2>            _Ty=XMLDocument
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(46): note: see declaration of 'std::unique_ptr<XMLDocument,std::default_delete<_Ty>>'
2>        with
2>        [
2>            _Ty=XMLDocument
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(527): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(527): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(528): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(528): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(644): error C2872: 'XMLDocument': ambiguous symbol
2>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.h(10095): note: could be 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\tinyXML2/tinyxml2.h(1650): note: or       'tinyxml2::XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(644): error C2079: 'doc' uses undefined class 'XMLDocument'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(685): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(685): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\xml_parsing.cpp(685): error C2661: 'tinyxml2::XMLElement::SetAttribute': no overloaded function takes 1 arguments
2>inverter_node.cpp
2>repeat_node.cpp
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(183): note: see reference to function template instantiation 'std::string BT::Any::errorMsg<DST>(void) const' being compiled
2>        with
2>        [
2>            DST=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(131): note: see reference to function template instantiation 'nonstd::expected_lite::expected<T,std::string> BT::Any::convert<T>(void *) const' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(213): note: see reference to function template instantiation 'T BT::Any::cast<std::string>(void) const' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\decorators\repeat_node.cpp(42): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<unsigned int>(const std::string &,T &) const' being compiled
2>        with
2>        [
2>            T=unsigned int
2>        ]
2>retry_node.cpp
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(183): note: see reference to function template instantiation 'std::string BT::Any::errorMsg<DST>(void) const' being compiled
2>        with
2>        [
2>            DST=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(131): note: see reference to function template instantiation 'nonstd::expected_lite::expected<T,std::string> BT::Any::convert<T>(void *) const' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(213): note: see reference to function template instantiation 'T BT::Any::cast<std::string>(void) const' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\decorators\retry_node.cpp(47): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<unsigned int>(const std::string &,T &) const' being compiled
2>        with
2>        [
2>            T=unsigned int
2>        ]
2>subtree_node.cpp
2>timeout_node.cpp
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(183): note: see reference to function template instantiation 'std::string BT::Any::errorMsg<DST>(void) const' being compiled
2>        with
2>        [
2>            DST=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(131): note: see reference to function template instantiation 'nonstd::expected_lite::expected<T,std::string> BT::Any::convert<T>(void *) const' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(213): note: see reference to function template instantiation 'T BT::Any::cast<std::string>(void) const' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\decorators\timeout_node.cpp(43): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<unsigned int>(const std::string &,T &) const' being compiled
2>        with
2>        [
2>            T=unsigned int
2>        ]
2>fallback_node.cpp
2>parallel_node.cpp
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(243): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(183): note: see reference to function template instantiation 'std::string BT::Any::errorMsg<DST>(void) const' being compiled
2>        with
2>        [
2>            DST=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/utils/safe_any.hpp(131): note: see reference to function template instantiation 'nonstd::expected_lite::expected<T,std::string> BT::Any::convert<T>(void *) const' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(213): note: see reference to function template instantiation 'T BT::Any::cast<std::string>(void) const' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\controls\parallel_node.cpp(41): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<unsigned int>(const std::string &,T &) const' being compiled
2>        with
2>        [
2>            T=unsigned int
2>        ]
2>reactive_sequence.cpp
2>Generating Code...
2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\src\decorators\inverter_node.cpp(52): error C2220: warning treated as error - no 'object' file generated
2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\src\decorators\inverter_node.cpp(52): warning C4702: unreachable code
2>Compiling...
2>reactive_fallback.cpp
2>sequence_node.cpp
2>sequence_star_node.cpp
2>bt_cout_logger.cpp
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(210): error C2220: warning treated as error - no 'object' file generated
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(210): warning C4127: conditional expression is constant
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(211): note: consider using 'if constexpr' statement instead
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(49): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<std::string>(const std::string &,T &) const' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *const ' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(258): note: see reference to function template instantiation 'void BT::Blackboard::set<T>(const std::string &,const T &)' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(57): note: see reference to function template instantiation 'BT::Result BT::TreeNode::setOutput<std::string>(const std::string &,const T &)' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
2>bt_file_logger.cpp
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/loggers/bt_flatbuffer_helper.h(120): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/loggers/bt_flatbuffer_helper.h(120): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/loggers/bt_flatbuffer_helper.h(153): warning C4244: 'initializing': conversion from '_Rep' to 'uint32_t', possible loss of data
2>        with
2>        [
2>            _Rep=__int64
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\src\loggers\bt_file_logger.cpp(50): warning C4804: '>=': unsafe use of type 'bool' in operation
2>bt_minitrace_logger.cpp
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace/minitrace.h(232): error C2220: warning treated as error - no 'object' file generated
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace/minitrace.h(232): warning C4244: '=': conversion from 'int64_t' to 'double', possible loss of data
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(210): warning C4127: conditional expression is constant
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(211): note: consider using 'if constexpr' statement instead
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(49): note: see reference to function template instantiation 'BT::Result BT::TreeNode::getInput<std::string>(const std::string &,T &) const' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info *const ' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(170): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/tree_node.h(258): note: see reference to function template instantiation 'void BT::Blackboard::set<T>(const std::string &,const T &)' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/actions/set_blackboard_node.h(57): note: see reference to function template instantiation 'BT::Result BT::TreeNode::setOutput<std::string>(const std::string &,const T &)' being compiled
2>        with
2>        [
2>            T=std::string
2>        ]
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): error C2664: 'std::string BT::demangle(const char *)': cannot convert argument 1 from 'const type_info' to 'const char *'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\include\behaviortree_cpp/blackboard.h(171): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
2>tinyxml2.cpp
2>minitrace.cpp
2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\minitrace\minitrace.h(232): error C2220: warning treated as error - no 'object' file generated
2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\minitrace\minitrace.h(232): warning C4244: '=': conversion from 'int64_t' to 'double', possible loss of data
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace\minitrace.cpp(87): warning C4244: 'initializing': conversion from 'double' to 'int64_t', possible loss of data
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace\minitrace.cpp(280): warning C4456: declaration of 'len' hides previous local declaration
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace\minitrace.cpp(241): note: see declaration of 'len'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace\minitrace.cpp(281): warning C4456: declaration of 'i' hides previous local declaration
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace\minitrace.cpp(228): note: see declaration of 'i'
2>P:\Compilados\x32-x64\TRABAJO_MSVC2017_x64\BehaviorTree.CPP\3rdparty\minitrace\minitrace.cpp(332): warning C4244: '=': conversion from 'int64_t' to 'double', possible loss of data
2>backward.cpp
2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\backward-cpp\backward.hpp(788): error C2059: syntax error: '('
2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\backward-cpp\backward.hpp(788): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\backward-cpp\backward.hpp(788): error C2059: syntax error: ')'
2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\backward-cpp\backward.hpp(789): warning C4183: '__attribute__': missing return type; assumed to be a member function returning 'int'
2>p:\compilados\x32-x64\trabajo_msvc2017_x64\behaviortree.cpp\3rdparty\backward-cpp\backward.hpp(795): error C3861: 'backtrace': identifier not found
2>Generating Code...
2>Done building project "behaviortree_cpp_v3.vcxproj" -- FAILED.
3>------ Rebuild All started: Project: ALL_BUILD, Configuration: Debug x64 ------
3>Building Custom Rule P:/Compilados/x32-x64/TRABAJO_MSVC2017_x64/BehaviorTree.CPP/CMakeLists.txt
3>CMake does not need to re-run because P:/Compilados/x32-x64/TRABAJO_MSVC2017_x64/BehaviorTree.CPP/builds/debug/CMakeFiles/generate.stamp is up-to-date.
4>------ Skipped Rebuild All: Project: INSTALL, Configuration: Debug x64 ------
4>Project not selected to build for this solution configuration 
========== Rebuild All: 2 succeeded, 1 failed, 1 skipped ==========

DJuego

MinitraceLogger throws std::logic_error

Hi,
I just noticed that the MinitraceLogger throws an exception complaining that only one instance is allowed, even if all the previous instances were deleted. I think the reference variable should be set to false in the destructor. From bt_minitrace_logger.cpp file (the exception message seems to be a bit off too):

MinitraceLogger::MinitraceLogger(TreeNode* root_node, const char* filename_json)
  : StatusChangeLogger(root_node)
{
    bool expected = false;
    if (!ref_count.compare_exchange_strong(expected, true))
    {
        throw std::logic_error("Only one instance of StdCoutLogger shall be created");
    }

    minitrace::mtr_register_sigint_handler();
    minitrace::mtr_init(filename_json);
    this->enableTransitionToIdle(true);
}

MinitraceLogger::~MinitraceLogger()
{
    minitrace::mtr_flush();
    minitrace::mtr_shutdown();
}

Cheers.

Port mismatch between sibling subtrees

It looks like the tree construction and internal to external mapping is not working 100% well.

See the attached tree:
sibling_subtrees.txt

image

It's fairly simple, it executes twice the subtree "Subtree1", which checks that a param is 1.

The problem is that the second Subtree execution fails, because it can't read the input port of param.

I started digging and got up to the point where the blackboards are created, and it looks like the parent of the blackboard of the second subtree, is the first subtree's blackboard, not the root node's blackboard.

Compile-time error referencing M_PI when building on Ubuntu 18.04

examples/t04_blackboard.cpp uses the macro M_PI, which is not defined, resulting in:

src/behavior_tree_core/examples/t04_blackboard.cpp:44:34: error: ‘M_PI’ was not declared in this scope
     const Pose2D mygoal = {1, 2, M_PI};
                                  ^~~~

Perhaps add the following:

#ifndef M_PI
#define M_PI <value>
#endif

Dynamically finding a tree node to halt a sub-tree

I have a tree like this:

<root main_tree_to_execute="MainTree">
  <BehaviorTree ID="MainTree">
    <Sequence name="root">
      <FallbackStar name="check_motion">
        <Inverter name="is_not_stuck">
          <IsStuck/>
        </Inverter>
        <SequenceStar name="stuck_recovery">
          <!-- Needs a halt/cancel of the navigation sub-tree here -->
          <BackUp/>
          <Spin/>
        </SequenceStar>
      </FallbackStar>
      <SequenceStar name="navigate">
        <ComputePathToPose endpoints="${endpoints}" path="${path}"/>
        <FollowPath path="${path}"/>
      </SequenceStar>
    </Sequence>
  </BehaviorTree>
</root>

Where there is a condition node to detect if the robot is stuck. At the point that the condition detects the stuck robot, the "navigate" sub-tree is running (FollowPath, in particular). What I'd like to do is: after detecting that the robot is stuck, halt the 'navigate' portion of the sub-tree so that I can execute recovery operations and then continue again with the navigation. I'm thinking of registering an operation ("CancelNavigation", for example) that would dynamically find the "navigate" node to halt it, thereby halting its children. However, I don't see a way to do that. Is that a reasonable thing to consider? Any alternative ways to go about this?

Renaming of Sequence and Fallback node in version 3

I think users will have a hard time with the renaming of Sequence to Reactive Sequence (see e.g. #74) shall we name the two nodes as Static Sequence and Reactive Sequence (or Persistent Sequence) to make the difference super clear? Unfortunately, in the BT literature, there is a bit of confusion of what a Sequence node is (if reactive or static)

ROS package folder layout levels

I am trying to use the ROS package installed using apt-get install ros-kinetic-behaviortree-cpp,
and I am having issues with the includes. In my CMakeLists i have:

find_package(catkin REQUIRED COMPONENTS behaviortree_cpp)
add_executable(bt_test test/bt_test.cpp )
target_link_libraries(bt_test ${BEHAVIOR_TREE_LIBRARY} )
include_directories(bt_test ${behaviortree_cpp_INCLUDE_DIRS})

To compile my files i need in my cpp:

#include "behaviortree_cpp/behaviortree_cpp/behavior_tree.h"
#include "behaviortree_cpp/behaviortree_cpp/bt_factory.h"
#include "behaviortree_cpp/behaviortree_cpp/basic_types.h"

Since also the files are installed in the path /opt/ros/kinetic/include/behaviortree_cpp/behaviortree_cpp
However, i get:

/opt/ros/kinetic/include/behaviortree_cpp/behaviortree_cpp/behavior_tree.h:17:53: fatal error: behaviortree_cpp/controls/parallel_node.h: No such file or directory

It appears that the includes in the library headers are missing a folder level of behaviortree_cpp.
prefixing with behaviortree_cpp in the library includes appears to solve the problem.
Or am I doing something wrong in my CMakeLists here?

Should nodes loop internally or not?

I noticed that all nodes with multiple children (sequence, fallback, reactive*, retry, repeat, etc.) loop over children internally with while's and for's in their implementation of tick(). I wonder if this is a design decision, and if yes, why is this the case? Due to perceived efficiency?

I would argue that for each executeTick() on the root node, only one leaf should have their tick() method called. This would imply descending into the tree from the root every executeTick(), but I believe this cost would be negligible. However, tick()-ing only one leaf per executeTick() iteration would be more in line with the conceptual behavior tree model and it would help scheduling/preempting a lot.

What do you think?

Identifier name clashing

As initially commented here: https://discourse.ros.org/t/introducting-behaviortrees-cpp-who-needs-finite-state-machines-anymore/6899/7?u=v-lopez

Once you are reusing components (ideally even components you have not developed yourself), there will be some name clashing, which can be potentially dangerous (ie: mix the targetPose for foot placement with the targetPose for grasping).

We have developed a FSM implementation and faced this issues, and approached them in the same way ROS1 does (remapping and namespaces).

When a FSM includes another FSM, it can remap some of its identifiers (targetPose:=walkingTargetPose), or the sub state machine can be put inside a namespace, and the one including it can perform the required remappings.

Better CMake Support

Hi!

I have few questions again:

  • Is there any idea supporting shared library?
    I found add_library(behavior_tree_core STATIC ${BT_Source} ). The library is forced to be static ever.

  • Could fPIC be more relaxed?
    I found target_compile_options(behavior_tree_core PRIVATE "-fPIC"). However cmake provides POSITION_INDEPENDENT_CODE which is possible to be used as fPIC but as optional.

  • Is there any idea supporting install target?
    I didn't find intall section in your cmake file. It could help all customers.

  • Do you want export BehaviorTree using cmake config file?
    CMake provides helpers to exports all paths and libraries names in a single file.

  • Is BehaviorTree supported on Windows and Macos?
    I found set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -Werror=return-type -Wall -Wpedantic -Wattributes") that is related to Linux (clang, gcc)

As I have some experience with CMake, I would be happy helping this project updating your cmake as well. I could create a separated PR introducing all changes.

question about integration legacy code with behavior tree

Hi Davide,

I currently have some legacy code which I want to use together with BehaviorTree, one of them is a class which provides some methods that I want to wrap into the action nodes. However, these member functions take some input parameters.

From my understanding, if I did not use the inheritance, I could not use parameters, right? If I use inheritance, it seems there is only one action can be defined by each class. Is this correct?
Is there a way to define multiple actions for one class, as well as using node or blackboard parameters?

Best Regards,

Xin

Open Discussion: input/output ports to abstract blackboards

Hi everyone.

I want to open a discussion about the future of the library.
The more I think about issue #18 , more I realize (thanks @v-lopez) that the model of ports in SMACH is better to deal with name clashing.

Looking at examples from the people involved in ROS2/Navigation2, I have the feeling that they have their own "work around".

The only conclusion I have is that accessing TreeNode::blackboard() in an implicit way is a recipe for disaster.

I try to summarize my thoughts here: https://github.com/BehaviorTree/BehaviorTree.CPP/blob/output_ports/RoadmapDiscussion.md

Please feel free to add your own two cents, since... most of the solutions I am thinking about will break the API and you will profoundly hate me :(

I am pinging people that showed some interest in the past, since this will affect them.

@mjeronimo @miccol @liuxin00738 @Thordreck @StefanoSoffiaUTRC @orduno

set priority of sequence node's children

Hi, I am planning to use the behavior tree, and I find the great work you have done. I have one question about dynamically changing the priority of the child of a sequence node. Is this possible to do in this framework?

In the readme I saw that "It allows the creation of trees at run-time, using a textual representation (XML)." I did not see where in the tutorial to do this. If we cant set the priority of the child, maybe I can use this do realize it.
Thanks in advance!

Best regards,
Xin Liu

Release to ROS2 build farm?

Could we a version of the library released to the ROS2 build farm? As I understand it, this requires rosdep keys and preparing a bloom release. This would allow us to reference the BT library in our official Navigation2 software for the Crystal release of ROS2.

writeXML function is obsolate

I didn't update this function is a while and currently, it seems that it doesn't support SubTrees and other stuff.

Add some unit test too.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.