robokudo.utils.module_loader

Dynamic module loading utilities for Robokudo.

This module provides functionality for dynamically loading Robokudo modules and components. It supports loading:

  • Analysis engines

  • Annotators

  • Camera configurations

  • Action servers

  • IO modules

  • Semantic maps

  • Object knowledge bases

  • Tree components

  • Types and utilities

The module handles:

  • ROS package path resolution

  • Module type management

  • Dynamic module importing

  • File path resolution

Classes

RobokudoModuleType

Enumeration of Robokudo module types.

ModuleLoader

Dynamic module loader for Robokudo components.

Module Contents

class robokudo.utils.module_loader.RobokudoModuleType

Bases: enum.Enum

Enumeration of Robokudo module types.

Defines the standard module types and their paths within a ROS package.

Variables:
  • ActionServer – Action server modules

  • Annotator – Annotator modules

  • AnalysisEngine – Analysis engine descriptors

  • CameraConfig – Camera configuration descriptors

  • IO – Input/output modules

  • SemanticMap – Semantic map descriptors

  • ObjectKnowledgeBase – Object knowledge base descriptors

  • TreeComponents – Behavior tree components

  • Types – Type definitions

  • Utils – Utility modules

  • Data – Data files

ActionServer = ['action_servers']
Annotator = ['annotators']
AnalysisEngine = ['descriptors', 'analysis_engines']
CameraConfig = ['descriptors', 'camera_configs']
IO = ['io']
SemanticMap = ['descriptors', 'semantic_maps']
ObjectKnowledgeBase = ['descriptors', 'object_knowledge']
TreeComponents = ['tree_components']
Types = ['types']
Utils = ['utils']
Data = ['data']
class robokudo.utils.module_loader.ModuleLoader

Dynamic module loader for Robokudo components.

Handles loading of various Robokudo module types from ROS packages. Provides path resolution and module importing functionality.

logger = None
_load_module(ros_pkg_name: str, module_type: RobokudoModuleType, module_name: str)

Dynamically import a submodule of the ‘robokudo’ package (or another package). E.g., ‘robokudo.descriptors.analysis_engines.demo’

Parameters:
  • ros_pkg_name (str) – Name of ROS package

  • module_type (RobokudoModuleType) – Type of module to load

  • module_name (str) – Name of module to load

Returns:

Loaded module object

Return type:

module

load_ae(ros_pkg_name: str, module_name: str)

Load an Analysis Engine (AE). Expects a class AnalysisEngine in the loaded module.

The ROS package must be in the same workspace with path structure: $package_path/src/robokudo_example_package/descriptors/analysis_engines/

Parameters:
  • ros_pkg_name (str) – Name of ROS package containing AE

  • module_name (str) – Name of analysis engine module

Returns:

Root of loaded analysis engine

Return type:

AnalysisEngine

load_annotator(ros_pkg_name: str, module_name: str)

Load an annotator module. You can adjust the returned object as needed.

Parameters:
  • ros_pkg_name (str) – Name of ROS package containing annotator

  • module_name (str) – Name of annotator module

Returns:

None (TODO: implement annotator loading)

Return type:

None

load_camera_config(ros_pkg_name: str, module_name: str)

Load a camera config module. Expects class CameraConfig.

Parameters:
  • ros_pkg_name (str) – Name of ROS package containing config

  • module_name (str) – Name of camera config module

Returns:

Loaded camera configuration

Return type:

CameraConfig

load_action_server(ros_pkg_name: str, module_name: str)

Load an action server module. Expects class ActionServer.

Parameters:
  • ros_pkg_name (str) – Name of ROS package containing action server

  • module_name (str) – Name of action server module

Returns:

Loaded action server

Return type:

ActionServer

load_io(ros_pkg_name: str, module_name: str)

Load an I/O module. Customize this if there’s a specific class to instantiate.

Parameters:
  • ros_pkg_name (str) – Name of ROS package containing IO module

  • module_name (str) – Name of IO module

Returns:

Loaded IO module

Return type:

IOModule

load_object_knowledge_base(ros_pkg_name: str, module_name: str)

Load an ObjectKnowledgeBase given the module name and the ros package name.

The path to the AE within the package is meant to be: $package_path/src/PACKAGE_NAME/descriptors/object_knowledge/.

Parameters:
  • ros_pkg_name (str) – Name of ROS package containing knowledge base

  • module_name (str) – Name of knowledge base module

Returns:

Loaded object knowledge base

Return type:

BaseObjectKnowledgeBase

load_semantic_map(ros_pkg_name: str, module_name: str)

Load a semantic map module. Expects class SemanticMap.

Parameters:
  • ros_pkg_name (str) – Name of ROS package containing semantic map

  • module_name (str) – Name of semantic map module

Returns:

Loaded semantic map

Return type:

SemanticMap

load_tree_components(ros_pkg_name: str, module_name: str)

Load tree components. If there’s a main class, instantiate it here.

Parameters:
  • ros_pkg_name (str) – Name of ROS package containing components

  • module_name (str) – Name of tree components module

Returns:

Loaded tree components module

Return type:

module

load_types(ros_pkg_name: str, module_name: str)

Load a ‘types’ module, or a class if needed.

Parameters:
  • ros_pkg_name (str) – Name of ROS package containing types

  • module_name (str) – Name of types module

Returns:

Loaded types module

Return type:

module

load_utils(ros_pkg_name: str, module_name: str)

Load a ‘utils’ module, or a class if needed.

Parameters:
  • ros_pkg_name (str) – Name of ROS package containing utilities

  • module_name (str) – Name of utility module

Returns:

Loaded utility module

Return type:

module

get_file_paths(ros_pkg_name: str, module_type: RobokudoModuleType, dir_name: str, file_extension: str = None) List[str]

Get paths to files in module directory.

If you previously used this to read data files from the ‘source’ folder, you can either remove it or refactor to read from:

  1. get_package_share_directory(‘robokudo’), or

  2. standard Python package resources.

If you truly need to load data from the installed package, see:
  • ament_index_python (to find share dir)

  • or importlib.resources

For now, you might remove this method or keep it if you adapt the logic.

Parameters:
  • ros_pkg_name (str) – Name of ROS package

  • module_type (RobokudoModuleType) – Type of module to search

  • dir_name (str) – Name of directory to search

  • file_extension (str, optional) – Optional file extension filter

Returns:

List of paths to matching files

Return type:

List[Path]