Writing a HelloWorld ActionNode
Overview
This tutorial shows the classical HelloWorld example. It is the simplest possible starting point to learn careBT.
Create the HelloWorldAction ActionNode
Create a file named helloworld.py with following content.
Or use the provided file: helloworld.py
1from carebt import ActionNode
2from carebt import NodeStatus
3
4
5class HelloWorldAction(ActionNode):
6 """The `HelloWorldAction` example node.
7
8 The `HelloWorldAction` provides a classical Hello World example.
9 It demonstrates a simple implementation of a careBT `ActionNode`.
10
11 When running the `HelloWorldAction`,
12 'HelloWorldAction: Hello World !!!' is printed on standard output.
13 """
14
15 def __init__(self, bt_runner):
16 super().__init__(bt_runner)
17
18 def on_tick(self) -> None:
19 print('HelloWorldAction: Hello World !!!')
20 self.set_status(NodeStatus.SUCCESS)
The code explained
The first two statements are the includes for the ActionNode and the NodeStatus.
from carebt import ActionNode
from carebt import NodeStatus
The HelloWorldAction node is implemented as a Python class which inherits from ActionNode.
class HelloWorldAction(ActionNode):
The class definition is followed by the Docstring documentation of the node.
"""The `HelloWorldAction` example node.
The `HelloWorldAction` provides a classical Hello World example.
It demonstrates a simple implementation of a careBT `ActionNode`.
When running the `HelloWorldAction`,
'HelloWorldAction: Hello World !!!' is printed on standard output.
"""
The constructor (__init__) of the HelloWorldAction needs to call the constructor (super().__init__)
of the ActionNode and passes the bt_runner as an argument. This is required by the careBT execution engine to work
properly. The constructor is also the place to register the input/output parameters of the node and will be explained
in further tutorials.
def __init__(self, bt_runner):
super().__init__(bt_runner)
In the on_tick function the code has to be placed which is executed every time the node is ticked. In this example
this is a simple print statemant which shows the text “HelloWorldAction: Hello World !!!” on the standard output. The
following line puts the node into the status SUCCESS, which indicates that the execution of the node has completed
and the execution was succesful. Thus, the HelloWorldAction node is not ticked again.
def on_tick(self) -> None:
print('HelloWorldAction: Hello World !!!')
self.set_status(NodeStatus.SUCCESS)
Run the example
Start the Python interpreter and run the HelloWorldAction node:
>>> import carebt
>>> from carebt.examples.helloworld import HelloWorldAction
>>> bt_runner = carebt.BehaviorTreeRunner()
>>> bt_runner.run(HelloWorldAction)
HelloWorldAction: Hello World !!!
Or run it with log-level set to INFO:
>>> import carebt
>>> from carebt import LogLevel
>>> from carebt.examples.helloworld import HelloWorldAction
>>> bt_runner = carebt.BehaviorTreeRunner()
>>> bt_runner.get_logger().set_log_level(LogLevel.INFO)
>>> bt_runner.run(HelloWorldAction)
2022-03-05 16:30:11 INFO creating HelloWorldAction
HelloWorldAction: Hello World !!!
2022-03-05 16:30:11 INFO ---------------------------------------------------
2022-03-05 16:30:11 INFO bt execution finished
2022-03-05 16:30:11 INFO status: NodeStatus.SUCCESS
2022-03-05 16:30:11 INFO contingency-message:
2022-03-05 16:30:11 INFO ---------------------------------------------------