Real robots execute planned trajectories. While the robot itself doesn’t differentiate between types of motion, humans identify patterns in these trajectories, such as "approaching an object" or "rotating an object." These reusable motion patterns are defined in our framework as Primitives.
- Primitive Example:
MoveToPose
,Rotate
- Functionality: Each primitive generates a trajectory that the robot can directly execute. This is implemented using MoveIt.
Any task can be broken down into primitives connected in a sequence.
For example:
Task: Fill a beaker with liquid from a test tube
Primitives: MoveTo(TestTube) -> Grasp() -> MoveTo(Beaker) -> Rotate(TestTube)
This chain of primitives is called ModuleCollections in our framework. Behavior Trees (BT) handle the chaining of these primitives.
Developers can contribute by adding new primitives and modules through a defined process. Once primitives and modules are available, a Behavior Tree is generated using our utility program.
-
Include Directory:
- Primitives: Defines primitives as Behavior Tree nodes.
-
RAS_BT_Framework: Core of the Behavior Tree generation utility.
- Behavior: Contributors add modules and primitives here.
- Managers: Handles the generation of the final XML file for the Behavior Tree.
-
Scripts:
batman.py
: Coordinates withBTExecutor.cpp
to run behaviors built usingBehaviorTreeGenerator
.TrajectoryRecordsService.py
: Records trajectories generated by primitives for use on real robots.
-
Src:
BTExecutor.cpp
: Manages and executes Behavior Trees in a ROS 2 environment using theBehaviorTree.CPP
library.
-
XML Directory:
- Stores generated Behavior Trees for simulation and real-world execution.