Expand description
Mecha10 Behavior Runtime
Unified behavior composition system for robotics and AI: behavior logic is Rust code
Re-exports§
pub use actions::register_builtin_actions;pub use actions::CapabilityTaskNode;pub use actions::GoToLocationNode;pub use actions::MoveNode;pub use actions::SensorCheckNode;pub use actions::SetCapabilityTargetNode;pub use actions::SetGoToLocationTargetNode;pub use actions::TimerNode;pub use actions::WanderNode;pub use config::behavior_capabilities_satisfied;pub use config::detect_project_root;pub use config::get_current_environment;pub use config::list_available_behaviors;pub use config::list_capable_behaviors;pub use config::load_behavior_config;pub use config::resolve_behavior_config_path;pub use config::validate_behavior_composition_json;pub use config::validate_behavior_config;pub use config::BehaviorConfig;pub use config::CompositionConfig;pub use config::ConditionConfig;pub use config::ControllerModeKindConfig;pub use config::NodeConfig;pub use config::NodeReference;pub use config::ParallelPolicyConfig;pub use config::SubsumptionLayerConfig;pub use config::ValidationResult;pub use config::WeightedChildConfig;pub use control::PidController;pub use control::PidGains;
Modules§
- actions
- Built-in action nodes for behavior trees.
- config
- Configuration management for behavior trees
- control
- Reusable control-loop primitives shared by behaviour action nodes.
- hot_
reload - Hot-reload functionality for behavior trees during development.
- prelude
Macros§
Structs§
- Behavior
Executor - Behavior
Loader - Condition
Node - Single-child decorator that gates its child on a
ConditionKindpredicate: it evaluates the predicate FIRST and only ticks the child (forwarding the child’s status unchanged) while the predicate holds; when the predicate is false it reportsFailureWITHOUT ticking the child at all. - Context
- Cooldown
Node - Bounds the GAP between runs of its child, the complement of
TimeoutNode(which bounds how long a single run may stayRunning). Once the child returns a terminal result (SuccessorFailure), this node refuses to re-tick it forcooldown: during that windowtick()returnsFailureimmediately WITHOUT ticking the child at all. Once the window elapses, ticking resumes normally. A child that returnsRunningdoesn’t start the cooldown clock - only a terminal result does. - Execution
Context - Execution
Stats - Force
Failure Node - Always reports
Failureonce its child resolves, regardless of whether the child actually succeeded or failed;Runningpasses through unchanged. The mirror ofForceSuccessNode, useful inside aSelectorto force a fallback to the next option. - Force
Success Node - Always reports
Successonce its child resolves, regardless of whether the child actually succeeded or failed;Runningpasses through unchanged. Useful for an optional step whose failure shouldn’t abort the rest of aSequence. - Inverter
Node - Negates a
Success/Failureresult from its single child;Runningpasses through unchanged. The canonical decorator for turning a “condition” leaf/subtree into its opposite (e.g. “target NOT in range”) without duplicating the underlying check. - Node
Registry - Parallel
Node - Repeat
Node - Re-runs its child every time it succeeds, up to an optional fixed count; a
Failurefrom the child always ends the loop immediately withFailure.count: Nonerepeats indefinitely (e.g. a patrol leg re-run forever until something fails it). - Retry
Node - Re-runs its child up to
max_attemptstimes whenever it fails, succeeding as soon as one attempt succeeds; only reportsFailureonce every attempt has been exhausted. The complement ofRepeatNode(which loops on success). - Select
OrNode - Sequence
Node - Subsumption
Layer - A single priority layer in a
SubsumptionNode: a priority (higher wins) plus the behavior that implements it. - Subsumption
Node - Priority-based preemption (subsumption architecture): on each tick, tries each layer
highest-priority first. The first layer whose
tick()returnsRunning/Success“wins”; lower-priority layers aren’t ticked that cycle, preserving their internal progress. - Timeout
Node - Bounds how long its child may stay
Running: oncedurationelapses without the child resolving, immediately reportsFailure(resetting the child’s state). A child that resolves before the deadline passes its status straight through. - Tree
Status Snapshot - A point-in-time snapshot of a node’s (and its subtree’s) last-tick status, for live
behavior-tree visualization. Captured on demand via
BehaviorNode::status_snapshot- it does not itself tick anything, it just reads back what the most recenttick()call(s) already recorded. - Watch
Node - Like
ParallelNode, but with no memory of a prior resolution: every child is ticked, every call, unconditionally. Needed for an interrupt-condition layer that must be re-evaluated indefinitely (e.g. the operator clicking/clearing repeatedly over a session). - Weighted
Select Node - Like
SelectOrNode(ticks children until one returns non-Failure), but instead of always trying children in a fixed index order, each tick-cycle picks the next untried child via a weighted-random draw among children not yet tried THIS resolution cycle. A weight of0.0(or negative) means that child is never picked. Once a child is chosen it is “sticky”: while it reportsRunning, the nexttick()re-ticks that same child rather than re-rolling - only once it resolves does the node either return (onSuccess) or roll again among the remaining untried children (onFailure), mirroringSelectOrNode::current_index’s “resume where we left off” behavior, just with a random rather than fixed starting point each cycle.
Enums§
- Condition
Kind - A predicate a
ConditionNodeevaluates against live project/robot state before deciding whether to tick its child. Deliberately a small, closed enum rather than a general expression language: add a variant here when a genuinely new predicate is needed. Starts with just the two controller-mode checkspatrolneeds today, but is reusable infrastructure - any behavior tree can gate a subtree on one of these without a bespoke composite node. - Controller
Mode Kind - Which
ControllerModevariant aConditionKind::ControllerModeIspredicate matches - the variant only, sinceControllerMode::Joints’s joint-name list is irrelevant to the check. Deliberately mirrorsControllerMode’s own variant names (andmecha10_core::node::Capability::Locomotion/Joints) rather than inventing a parallel vocabulary. - Node
Status - Parallel
Policy
Traits§
Functions§
- boxed_
children_ mut - Maps an iterator of boxed child behaviors to
BehaviorNode::children_mut’s trait-object return type.