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}