Exemple #1
0
        print('Gotcha!')
    subject.clean_up()
"""
import logging

from airtrack.src.camera.base import AirtrackCamera

from airtrack.src.errors import on_error_raise
from airtrack.src.errors import AirtrackCameraError
from airtrack.src.errors import AirtrackSubjectError

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

handle_camera_error = on_error_raise(
    AirtrackSubjectError,
    logger,
    catch_error=AirtrackCameraError)


class AirtrackSubject:
    """Airtrack subject information interface."""

    def __init__(self):
        self._camera = AirtrackCamera()

    @handle_camera_error
    def is_inside_lane(self):
        """Query subject for being inside or outside the airtable lane.

        :return: ``True`` if the subject is inside the lane,
            otherwise ``False``
Exemple #2
0
from airtrack.src.definitions import AirtrackActuatorState
from airtrack.src.errors import AirtrackActuatorError
from airtrack.src.errors import on_error_raise

from pybpodapi.protocol import Bpod

if AIRTRACK_ACTUATOR_PUSH_TIMEOUT > AIRTRACK_MAX_ACTUATOR_TIMEOUT or \
        AIRTRACK_ACTUATOR_AT_REST_TIMEOUT > AIRTRACK_MAX_ACTUATOR_TIMEOUT:
    raise AirtrackActuatorError(
        'Actuator push or at rest timeouts exceed maximum of'
        f'{AIRTRACK_MAX_ACTUATOR_TIMEOUT} sec.')

logger = utils.create_logger(__name__)

handle_error = on_error_raise(AirtrackActuatorError, logger)


class AirtrackActuator:
    """Airtrack linear actuator interface."""
    LOW = 0
    HIGH = 255
    STATE = AirtrackActuatorState

    def __init__(self, bpod):
        """
        :keyword  bpod:  A pybpod Bpod object
        :type     bpod:  :class:``pybpodapi.protocol.Bpod``
        """
        self._bpod = bpod
        self._current_state = self.STATE.AT_REST
Exemple #3
0
            break

    ac.close()
"""
from airtrack.src import utils
from airtrack.src.camera.pixy import PixyCam
from airtrack.src.definitions import AirtrackCameraObject
from airtrack.src.errors import on_error_raise
from airtrack.src.errors import PixyCamError
from airtrack.src.errors import AirtrackCameraError

logger = utils.create_logger(__name__)


handle_pixy_error = on_error_raise(
    AirtrackCameraError,
    logger,
    catch_error=PixyCamError)


class AirtrackCamera:
    """Airtrack camera interface."""

    def __init__(self):
        self._pixy_cam = PixyCam()

    @handle_pixy_error
    def _find_signature(self, signature):
        return self._pixy_cam.find_targets(
            [signature])

    def _find_object(self, object_enum):
Exemple #4
0
"""
import atexit
import itertools

from airtrack.src import utils

from airtrack.src.sma import AirtrackStateMachine
from airtrack.src.subject import AirtrackSubject
from airtrack.src.errors import on_error_raise
from airtrack.src.errors import AirtrackError

from pybpodapi.protocol import Bpod

logger = utils.create_logger(__name__)

handle_error = on_error_raise(AirtrackError, logger)


class Airtrack:
    """Airtrack system interface."""
    def __init__(self):
        self.__bpod = None
        self._bpod_closed = True
        self._subject = AirtrackSubject()
        # Register exit handler
        atexit.register(self.close)

    @property
    def _bpod(self):
        if self.__bpod is None:
            self._create_bpod()
Exemple #5
0
from airtrack.settings import AIRTRACK_STATE_TIMER

from airtrack.src import utils

from airtrack.src.actuator import AirtrackActuator
from airtrack.src.definitions import AirtrackState as State
from airtrack.src.errors import on_error_raise
from airtrack.src.errors import AirtrackStateMachineError

from pybpodapi.protocol import Bpod
from pybpodapi.protocol import StateMachine

logger = utils.create_logger(__name__)

handle_error = on_error_raise(AirtrackStateMachineError, logger)

UNBOUND_CALLBACK_ATTR_NAME = 'unbound_callback'


def callback(state):
    def decorator(func):
        def wrapper(self):
            logger.debug(f'Calling {state} callback')
            return func(self, state)
        setattr(state, UNBOUND_CALLBACK_ATTR_NAME, wrapper)
        return wrapper
    return decorator


class AirtrackStateMachine(StateMachine):