mecha10_behavior_patterns/lib.rs
1//! Mecha10 Behavior Patterns
2//!
3//! This crate provides common behavior patterns as reusable `BehaviorNode` implementations.
4//! These patterns solve common robotics problems like priority-based control and multi-model fusion.
5//!
6//! # Available Patterns
7//!
8//! - **Subsumption**: Priority-based layered control for safety-critical systems
9//! - **Ensemble**: Multi-model fusion with various voting strategies
10//!
11//! # Example
12//!
13//! ```rust
14//! use mecha10_behavior_patterns::prelude::*;
15//! use mecha10_behavior_runtime::prelude::*;
16//!
17//! # #[derive(Debug)]
18//! # struct SafetyBehavior;
19//! # #[async_trait]
20//! # impl BehaviorNode for SafetyBehavior {
21//! # async fn tick(&mut self, _ctx: &Context) -> anyhow::Result<NodeStatus> {
22//! # Ok(NodeStatus::Success)
23//! # }
24//! # }
25//! # #[derive(Debug)]
26//! # struct TaskBehavior;
27//! # #[async_trait]
28//! # impl BehaviorNode for TaskBehavior {
29//! # async fn tick(&mut self, _ctx: &Context) -> anyhow::Result<NodeStatus> {
30//! # Ok(NodeStatus::Success)
31//! # }
32//! # }
33//!
34//! // Subsumption: Safety overrides task behavior
35//! let subsumption = SubsumptionNode::new()
36//! .add_layer(10, Box::new(SafetyBehavior)) // High priority
37//! .add_layer(1, Box::new(TaskBehavior)); // Low priority
38//! ```
39
40mod ensemble;
41mod subsumption;
42
43// Re-export pattern nodes
44pub use ensemble::{EnsembleNode, EnsembleStrategy, WeightedModel};
45pub use subsumption::{SubsumptionLayer, SubsumptionNode};
46
47/// Prelude module for convenient imports
48pub mod prelude {
49 pub use crate::ensemble::{EnsembleNode, EnsembleStrategy, WeightedModel};
50 pub use crate::subsumption::{SubsumptionLayer, SubsumptionNode};
51 pub use mecha10_behavior_runtime::prelude::*;
52}