behaviortree / behaviortree.cpp Goto Github PK
View Code? Open in Web Editor NEWBehavior Trees Library in C++. Batteries included.
Home Page: https://www.behaviortree.dev
License: MIT License
Behavior Trees Library in C++. Batteries included.
Home Page: https://www.behaviortree.dev
License: MIT License
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!
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
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.
basic tutorials cover simple cases of registration.
Add an advanced tutorial showing hot to use Behaviortreefactory::registerBuilder
When a child of a BlackboardPreconditionNode is running, the precondition changes. Then the BlackboardPreconditionNode will return failure without halt the child.
Can you integrate support for colcon in the CMakeLists.txt? Here's what I have:
https://github.com/mjeronimo/BehaviorTree.CPP/commit/c489ce52dbdf81b5d4c3ffadd9605f49ffd3ab12
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?
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.
I am not happy with the fact that ActionNode has its own thread.
A MUCH better approach would be to use coroutine and yield in a loop from the tick().
The use case is simple, if I create a BehaviorTree that implements a funcionality in an xml, I'd like to be able to include it from multiple XML's without having to duplicate it.
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.
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?
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
When compiling under msvc, tiny xml symbols are exported which is conflicting for me because I'm already using tinyxml on my own.
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.
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
try_index_
need to be reset in halt
function. But RepeatNode and RetryNode do not override the halt
function.
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)
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;
Improve and extend this:
https://behaviortree.github.io/BehaviorTree.CPP/tutorial_A_create_trees/
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?
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.
In this code there are 2 tests.
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.
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
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.
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.
@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?
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.
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.
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.
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?
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
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.
It looks like the tree construction and internal to external mapping is not working 100% well.
See the attached tree:
sibling_subtrees.txt
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.
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
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?
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)
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?
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?
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.
In commit 9d74d40 a serious error in Retry and Repeat nodes has been corrected, but the unit test did not test those nodes.
Improve the unit tests.
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.
@facontidavide
We'd like to coordinate with you on release timing. Do you have plans for a follow-up release of the latest code?
convertFromString should be used primarily with TreeNode::getParam, not BlackBoard itself.
Thanks @mjeronimo for pointing this out :)
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
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
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
It is stated here that it is desirable to have a proper XML schema.
https://github.com/ros-planning/navigation2/tree/master/nav2_mission_executor
Other users expressed the same desire.
Don't fail compilation, send a warning instead
When a tree contains more than 255 nodes, getUID() will overflow. This could cause log replay and monitor in Groot crash.
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.
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.