Skip to content

Plugin Development

AVLite supports two types of extensions: - Built-in extensions (avlite/extensions/): Maintained by the core team - Community plugins: External directories you create and register

This guide covers creating community plugins. Classes inheriting from base strategies automatically register and appear in the UI.

Community Plugin Structure

Create your plugin anywhere on your system:

/path/to/my_plugin/
├── __init__.py      # Export classes
├── settings.py      # ExtensionSettings class
└── my_strategy.py   # Your implementation

1. Settings File (Required)

# settings.py
class ExtensionSettings:
    exclude = ["exclude", "filepath"]
    filepath: str = "configs/my_plugin.yaml"

    # Your parameters (appear in UI automatically)
    my_param: float = 1.0

2. Example: Custom Perception

from avlite.c10_perception.c12_perception_strategy import PerceptionStrategy
from avlite.c60_common.c62_capabilities import WorldCapability, PerceptionCapability
from .settings import ExtensionSettings

class MyPerception(PerceptionStrategy):
    def __init__(self, perception_model, setting=None):
        super().__init__(perception_model, setting)

    @property
    def requirements(self) -> set[WorldCapability]:
        return {WorldCapability.GT_DETECTION}

    @property
    def capabilities(self) -> set[PerceptionCapability]:
        return {PerceptionCapability.DETECTION}

    def perceive(self, rgb_img=None, depth_img=None, lidar_data=None, 
                 perception_model=None):
        # Your logic here
        return self.perception_model

3. Example: Custom Controller

from avlite.c30_control.c32_control_strategy import ControlStrategy
from avlite.c30_control.c31_control_model import ControlComand

class MyController(ControlStrategy):
    def control(self, ego, tj=None, control_dt=None) -> ControlComand:
        # Your logic here
        return ControlComand(throttle=1.0, steer=0.0)

    def reset(self):
        pass

4. Export Classes

# __init__.py
from .my_strategy import MyPerception, MyController
from .settings import ExtensionSettings

__all__ = ["MyPerception", "MyController", "ExtensionSettings"]

5. Register Your Community Plugin

Via GUI (recommended): 1. Open AVLite 2. Go to Config tab 3. Add entry to Community Extensions: my_plugin -> /path/to/my_plugin 4. Save profile

Via settings file (configs/c40_execution.yaml):

community_extensions:
  my_plugin: /path/to/my_plugin

Your classes will now appear in the UI dropdowns.

Base Classes Reference

Base Class Purpose Key Method
PerceptionStrategy Detection/tracking/prediction perceive()
LocalizationStrategy Localization localize()
MappingStrategy Mapping TBD
LocalPlannerStrategy Local planning replan()
GlobalPlannerStrategy Global planning plan()
ControlStrategy Vehicle control control()
WorldBridge Simulator integration control_ego_state()

See Also

Built-in extensions in avlite/extensions/ (maintained by core team): - test_ext - Minimal template for reference - multi_object_prediction - Perception with prediction - executer_ros - ROS2 integration