int main() { using namespace BT; BehaviorTreeFactory factory;
// register all the actions into the factory // We don't show how these actions are implemented, since most of the // times they just print a message on screen and return SUCCESS. // See the code on Github for more details. factory.registerSimpleCondition("IsDoorOpen", std::bind(IsDoorOpen)); factory.registerSimpleAction("PassThroughDoor", std::bind(PassThroughDoor)); factory.registerSimpleAction("PassThroughWindow", std::bind(PassThroughWindow)); factory.registerSimpleAction("OpenDoor", std::bind(OpenDoor)); factory.registerSimpleAction("CloseDoor", std::bind(CloseDoor)); factory.registerSimpleCondition("IsDoorLocked", std::bind(IsDoorLocked)); factory.registerSimpleAction("UnlockDoor", std::bind(UnlockDoor));
// Load from text or file... auto tree = factory.createTreeFromText(xml_text);
// This logger prints state changes on console StdCoutLogger logger_cout(tree);
// This logger saves state changes on file FileLogger logger_file(tree, "bt_trace.fbl");
// This logger stores the execution time of each node MinitraceLogger logger_minitrace(tree, "bt_trace.json");
#ifdef ZMQ_FOUND // This logger publish status changes using ZeroMQ. Used by Groot PublisherZMQ publisher_zmq(tree); #endif
printTreeRecursively(tree.rootNode());
//while (1) { NodeStatus status = NodeStatus::RUNNING; // Keep on ticking until you get either a SUCCESS or FAILURE state while( status == NodeStatus::RUNNING) { status = tree.tickRoot(); CrossDoor::SleepMS(1); // optional sleep to avoid "busy loops" } CrossDoor::SleepMS(2000); } return 0; }