Skip to content

fabid/BehaviorTree.jl

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
src
 
 
 
 
 
 
 
 
 
 

BehaviorTree.jl

Behavior Trees (BTs) are a powerful way to describe the behavior of autonomous agents with applications in robotics and AI.

This implementation is based on Behavior Trees in Robotics and AI: An Introduction. It was developped by Team L3 to qualify in NASA'Space Robotics Challenge Phase 2 (More details on usage in this paper: Human-Robot Teaming Strategy for Fast Teleoperation of a Lunar Resource Exploration Rover).

Installation

Optional System Dependencies

Visualization tools depends on graphviz.
On Ubuntu/Debian:

sudo apt-get install graphviz

Install Julia Package

With Julia ≥ 1.4 (may work on previous 1.x version but not tested) add package

julia> ]
(v1.4) pkg> add BehaviorTree

Basic Usage

Two Primitives are available to build behavior trees: Sequence and Selector. They accept a list of tasks, that can be a Sequence, a Selector, or, in the case of a leaf, a function returning one of :success, :failure or :running.

doSuccess(bb=Dict()) = :success
isTrue(bb=Dict()) = :success
doFailure(bb=Dict())= :failure
doRunning(bb=Dict()) = :running
bt = Selector([
    doFailure,
    Sequence([isTrue, doFailure, doSuccess], "choice"),
    doRunning,
    doSuccess!
], "head")

Execution of the tree happen via the tick function, that accepts a shared blackboard object use to share state between tasks.

blackboard = Dict{Symbol, Any}()
status, results = tick(bt, blackboard)

Ticking usually happens in a loop at at a frequency determined by the needs of the application.

Visualization

As BehaviorTrees use the AbstractTree interface, it is possible to use D3Trees for visualization:

d3tree = D3Tree(bt)
inbrowser(tree, "firefox")

Utilities to generate graphviz output via the .dot format are also provided.

dot_graph=toDot(bt)
filename= "example.dot"
open(filename, "w") do dot_file
    write(dot_file, dot_graph)
end
filename= "example.png"
png_graph = dot2png(dot_graph)
open(filename, "w") do png_file
    write(png_file, png_graph)
end

behavior tree overview

passing the execution results in the toDot function generates a visualization of the current state:

dot_graph=toDot(bt, results)
filename= "status.png"
png_graph = dot2png(dot_graph)
open(filename, "w") do png_file
    write(png_file, png_graph)
end

behavior tree overview

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages