mecha10-behavior-patterns 0.1.23

Common behavior patterns for Mecha10 - subsumption, ensemble, and more
Documentation
{
  "$schema": "https://mecha10.dev/schemas/behavior-composition-v1.json",
  "name": "exploration",
  "description": "Default autonomous exploration with frontier detection, area coverage, and mapping",
  "root": {
    "type": "sequence",
    "name": "exploration_loop",
    "children": [
      {
        "type": "node",
        "node": "initialize_exploration",
        "name": "exploration_init",
        "config": {
          "reset_map": false,
          "set_initial_pose": true,
          "exploration_boundary": {
            "enabled": true,
            "max_distance": 20.0,
            "boundary_type": "circular"
          }
        }
      },
      {
        "type": "selector",
        "name": "explore_or_complete",
        "children": [
          {
            "type": "sequence",
            "name": "frontier_exploration",
            "children": [
              {
                "type": "parallel",
                "name": "map_and_detect",
                "policy": "require_all",
                "children": [
                  {
                    "type": "node",
                    "node": "update_occupancy_map",
                    "name": "mapper",
                    "config": {
                      "map_resolution": 0.05,
                      "map_update_rate_hz": 5.0,
                      "prob_hit": 0.7,
                      "prob_miss": 0.4,
                      "clamp_min": 0.1,
                      "clamp_max": 0.9
                    }
                  },
                  {
                    "type": "node",
                    "node": "detect_frontiers",
                    "name": "frontier_detector",
                    "config_ref": "frontier_detection"
                  }
                ]
              },
              {
                "type": "node",
                "node": "rank_frontiers",
                "name": "frontier_ranker",
                "config": {
                  "ranking_criteria": [
                    {
                      "name": "information_gain",
                      "weight": 0.5
                    },
                    {
                      "name": "distance",
                      "weight": 0.3,
                      "prefer": "closer"
                    },
                    {
                      "name": "accessibility",
                      "weight": 0.2
                    }
                  ],
                  "min_frontier_size": 0.5,
                  "max_frontier_distance": 15.0
                }
              },
              {
                "type": "node",
                "node": "select_best_frontier",
                "name": "frontier_selector",
                "config": {
                  "selection_method": "highest_rank",
                  "avoid_recent_failures": true,
                  "failure_memory_duration_sec": 60.0
                }
              },
              {
                "type": "parallel",
                "name": "navigate_and_scan",
                "policy": "require_one",
                "children": [
                  {
                    "type": "selector",
                    "name": "reach_frontier",
                    "children": [
                      {
                        "type": "sequence",
                        "name": "navigate_to_frontier",
                        "children": [
                          {
                            "type": "node",
                            "node": "plan_path_to_frontier",
                            "name": "frontier_path_planner",
                            "config": {
                              "planner_type": "a_star",
                              "allow_unknown": true,
                              "frontier_approach_distance": 0.5,
                              "replan_on_failure": true
                            }
                          },
                          {
                            "type": "node",
                            "node": "follow_path",
                            "name": "path_executor",
                            "config_ref": "exploration_control"
                          },
                          {
                            "type": "node",
                            "node": "check_frontier_reached",
                            "name": "frontier_validator",
                            "config": {
                              "distance_threshold": 1.0,
                              "require_new_information": true
                            }
                          }
                        ]
                      },
                      {
                        "type": "sequence",
                        "name": "handle_unreachable",
                        "children": [
                          {
                            "type": "node",
                            "node": "mark_frontier_unreachable",
                            "name": "frontier_marker",
                            "config": {
                              "blacklist_duration_sec": 120.0,
                              "propagate_to_similar": true
                            }
                          },
                          {
                            "type": "node",
                            "node": "select_alternative_frontier",
                            "name": "alternative_selector",
                            "config": {
                              "max_alternatives": 3,
                              "similarity_threshold": 0.8
                            }
                          }
                        ]
                      }
                    ]
                  },
                  {
                    "type": "node",
                    "node": "continuous_mapping",
                    "name": "continuous_mapper",
                    "config": {
                      "sensor_integration": ["lidar", "camera", "depth"],
                      "map_update_rate_hz": 10.0,
                      "publish_map": true
                    }
                  }
                ]
              },
              {
                "type": "node",
                "node": "scan_area",
                "name": "area_scanner",
                "config": {
                  "scan_pattern": "rotate_360",
                  "rotation_speed": 0.3,
                  "num_scan_points": 36,
                  "dwell_time_sec": 0.5
                }
              },
              {
                "type": "node",
                "node": "update_coverage_map",
                "name": "coverage_tracker",
                "config": {
                  "grid_resolution": 0.2,
                  "coverage_radius": 2.0,
                  "decay_rate": 0.01
                }
              }
            ]
          },
          {
            "type": "sequence",
            "name": "exploration_complete",
            "children": [
              {
                "type": "node",
                "node": "check_exploration_complete",
                "name": "completion_checker",
                "config": {
                  "completion_criteria": {
                    "coverage_percentage": 95.0,
                    "no_frontiers_timeout_sec": 30.0,
                    "time_limit_sec": 3600.0
                  }
                }
              },
              {
                "type": "node",
                "node": "save_exploration_map",
                "name": "map_saver",
                "config": {
                  "output_directory": "maps/",
                  "map_name": "exploration_map",
                  "save_pgm": true,
                  "save_yaml": true,
                  "include_metadata": true
                }
              },
              {
                "type": "node",
                "node": "return_to_start",
                "name": "return_navigator",
                "config": {
                  "use_initial_pose": true,
                  "timeout_sec": 300.0
                }
              }
            ]
          }
        ]
      },
      {
        "type": "node",
        "node": "publish_exploration_status",
        "name": "status_publisher",
        "config": {
          "topic": "/exploration/status",
          "publish_rate_hz": 1.0,
          "include_map_metrics": true,
          "include_coverage": true,
          "include_frontiers_count": true
        }
      }
    ]
  },
  "configs": {
    "frontier_detection": {
      "detection_method": "wavefront",
      "min_frontier_size": 0.4,
      "frontier_threshold": 0.5,
      "unknown_space_threshold": 0.3,
      "clustering_enabled": true,
      "cluster_distance": 0.3,
      "filter_small_clusters": true
    },
    "exploration_control": {
      "max_linear_speed": 0.6,
      "max_angular_speed": 0.8,
      "approach_speed_reduction": 0.5,
      "position_tolerance": 0.3,
      "angular_tolerance_deg": 20.0,
      "obstacle_avoidance_enabled": true,
      "min_obstacle_distance": 0.5
    }
  }
}