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

Skip to content

Commit 3d22c6f

Browse files
authored
Adding ForceRunningNode Decorator (BehaviorTree#192)
1 parent 4d055f2 commit 3d22c6f

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

include/behaviortree_cpp_v3/behavior_tree.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939

4040
#include "behaviortree_cpp_v3/decorators/force_success_node.h"
4141
#include "behaviortree_cpp_v3/decorators/force_failure_node.h"
42+
#include "behaviortree_cpp_v3/decorators/keep_running_until_failure_node.h"
4243
#include "behaviortree_cpp_v3/decorators/blackboard_precondition.h"
4344
#include "behaviortree_cpp_v3/decorators/timeout_node.h"
4445

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/* Copyright (C) 2018-2020 Davide Faconti, Eurecat - All Rights Reserved
2+
* Copyright (C) 2020 Francisco Martin, Intelligent Robotics Lab (URJC) <[email protected]>
3+
*
4+
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
5+
* to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
6+
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
7+
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8+
*
9+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
11+
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12+
*/
13+
14+
#ifndef DECORATOR_KEEP_RUNNING_UNTIL_FAILURE_H
15+
#define DECORATOR_KEEP_RUNNING_UNTIL_FAILURE_H
16+
17+
#include "behaviortree_cpp_v3/decorator_node.h"
18+
19+
namespace BT
20+
{
21+
/**
22+
* @brief The KeepRunningUntilFailureNode returns always FAILURE or RUNNING.
23+
*/
24+
class KeepRunningUntilFailureNode : public DecoratorNode
25+
{
26+
public:
27+
KeepRunningUntilFailureNode(const std::string& name) :
28+
DecoratorNode(name, {} )
29+
{
30+
setRegistrationID("KeepRunningUntilFailure");
31+
}
32+
33+
private:
34+
virtual BT::NodeStatus tick() override;
35+
};
36+
37+
//------------ implementation ----------------------------
38+
39+
inline NodeStatus KeepRunningUntilFailureNode::tick()
40+
{
41+
setStatus(NodeStatus::RUNNING);
42+
43+
const NodeStatus child_state = child_node_->executeTick();
44+
45+
switch (child_state)
46+
{
47+
case NodeStatus::FAILURE:
48+
{
49+
return NodeStatus::FAILURE;
50+
}
51+
case NodeStatus::SUCCESS:
52+
case NodeStatus::RUNNING:
53+
{
54+
return NodeStatus::RUNNING;
55+
}
56+
57+
default:
58+
{
59+
// TODO throw?
60+
}
61+
}
62+
return status();
63+
}
64+
}
65+
66+
#endif

src/bt_factory.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ BehaviorTreeFactory::BehaviorTreeFactory()
3434

3535
registerNodeType<InverterNode>("Inverter");
3636
registerNodeType<RetryNode>("RetryUntilSuccesful");
37+
registerNodeType<KeepRunningUntilFailureNode>("KeepRunningUntilFailure");
3738
registerNodeType<RepeatNode>("Repeat");
3839
registerNodeType<TimeoutNode>("Timeout");
3940

0 commit comments

Comments
 (0)