예제 #1
0
#!/usr/bin/env python3

import sys

from spotmicroai.utilities.log import Logger

import multiprocessing

from spotmicroai.motion_controller.motion_controller import MotionController
from spotmicroai.abort_controller.abort_controller import AbortController
from spotmicroai.lcd_screen_controller.lcd_screen_controller import LCDScreenController
from spotmicroai.remote_controller.remote_controller import RemoteControllerController

log = Logger().setup_logger()


def process_abort_controller(communication_queues):
    abort = AbortController(communication_queues)
    abort.do_process_events_from_queue()


def process_motion_controller(communication_queues):
    motion = MotionController(communication_queues)
    motion.do_process_events_from_queues()


def process_remote_controller_controller(communication_queues):
    remote_controller = RemoteControllerController(communication_queues)
    remote_controller.do_process_events_from_queues()

예제 #2
0
import signal
import RPi.GPIO as GPIO
import sys
from spotmicroai.utilities.log import Logger
from spotmicroai.utilities.config import Config
import spotmicroai.utilities.queues as queues

log = Logger().setup_logger('Abort controller')


class AbortController:
    gpio_port = None

    def __init__(self, communication_queues):

        try:

            log.debug('Starting controller...')

            signal.signal(signal.SIGINT, self.exit_gracefully)
            signal.signal(signal.SIGTERM, self.exit_gracefully)

            self.gpio_port = Config().get(Config.ABORT_CONTROLLER_GPIO_PORT)

            GPIO.setmode(GPIO.BCM)
            GPIO.setup(self.gpio_port, GPIO.OUT)

            self._abort_queue = communication_queues[queues.ABORT_CONTROLLER]
            self._lcd_screen_queue = communication_queues[queues.LCD_SCREEN_CONTROLLER]

            self.abort()
예제 #3
0
import os
from spotmicroai.utilities.log import Logger

log = Logger().setup_logger('System')


class Singleton(type):
    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(Singleton,
                                        cls).__call__(*args, **kwargs)
        return cls._instances[cls]


class System(metaclass=Singleton):
    def __init__(self):

        try:
            log.debug('Loading system...')

        except Exception as e:
            log.error('Problem while loading the configuration file', e)

    def temperature(self):
        try:
            temp = os.popen("vcgencmd measure_temp").readline()
            # log.debug("System temperature: " + temp.replace("temp=", "")[:-5])
            return temp.replace("temp=", "")[:-5]
        except:
예제 #4
0
#!/home/pi/spotmicroai/venv/bin/python3 -u

from spotmicroai.lcd_screen_controller import LCD_16x2_I2C_driver
from spotmicroai.utilities.log import Logger
from spotmicroai.utilities.config import Config
import time

log = Logger().setup_logger('Test LCD Screen')

log.info('Testing LCD screen...')

i2c_address = Config().get('lcd_screen_controller[0].lcd_screen[0].address')

log.info('Use the command "i2cdetect -y 1" to list your i2c devices connected and')
log.info('write your lcd screen i2c address in your configuration file ~/spotmicroai.json')
log.info('Current configuration value is: ' + str(i2c_address))
input("Press Enter to start the tests...")

lcd_screen = LCD_16x2_I2C_driver.lcd(address=int(i2c_address, 0))


def test_0():
    log.info('Test0')

    lcd_screen.lcd_clear()

    lcd_screen.backlight(0)
    time.sleep(1)
    lcd_screen.backlight(1)
    time.sleep(1)
예제 #5
0
import json
import sys
import os
from spotmicroai.utilities.log import Logger
import jmespath  # http://jmespath.org/tutorial.html
import shutil
from pathlib import Path

log = Logger().setup_logger('Configuration')


class Singleton(type):
    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
        return cls._instances[cls]


class Config(metaclass=Singleton):
    ABORT_CONTROLLER_GPIO_PORT = 'abort_controller[0].gpio_port'
    LCD_SCREEN_CONTROLLER_I2C_ADDRESS = 'lcd_screen_controller[0].lcd_screen[0].address'
    REMOTE_CONTROLLER_CONTROLLER_DEVICE = 'remote_controller_controller[0].remote_controller[0].device'

    MOTION_CONTROLLER_BOARDS_PCA9685_1_ADDRESS = 'motion_controller[*].boards[*].pca9685_1[*].address | [0] | [0] | [0]'
    MOTION_CONTROLLER_BOARDS_PCA9685_1_REFERENCE_CLOCK_SPEED = 'motion_controller[*].boards[*].pca9685_1[*].reference_clock_speed | [0] | [0] | [0]'
    MOTION_CONTROLLER_BOARDS_PCA9685_1_FREQUENCY = 'motion_controller[*].boards[*].pca9685_1[*].frequency | [0] | [0] | [0]'
    MOTION_CONTROLLER_BOARDS_PCA9685_2_ADDRESS = 'motion_controller[*].boards[*].pca9685_2[*].address | [0] | [0] | [0]'
    MOTION_CONTROLLER_BOARDS_PCA9685_2_REFERENCE_CLOCK_SPEED = 'motion_controller[*].boards[*].pca9685_2[*].reference_clock_speed | [0] | [0] | [0]'
    MOTION_CONTROLLER_BOARDS_PCA9685_2_FREQUENCY = 'motion_controller[*].boards[*].pca9685_2[*].frequency | [0] | [0] | [0]'
예제 #6
0
#!/home/pi/spotmicroai/venv/bin/python3 -u

# Released by rdb under the Unlicense (unlicense.org)
# Based on information from:
# https://www.kernel.org/doc/Documentation/input/joystick-api.txt

import os, struct, array
from fcntl import ioctl

from spotmicroai.utilities.log import Logger
from spotmicroai.utilities.config import Config

log = Logger().setup_logger('Testing remote controller')

# Iterate over the joystick devices.
print('Available devices:')

for fn in os.listdir('/dev/input'):
    if fn.startswith('js'):
        log.info(('  /dev/input/%s' % (fn)))

# We'll store the states here.
axis_states = {}
button_states = {}

# These constants were borrowed from linux/input.h
axis_names = {
    0x00: 'x',
    0x01: 'y',
    0x02: 'z',
    0x03: 'rx',
예제 #7
0
#!/home/pi/spotmicroai/venv/bin/python3 -u

import busio
from board import SCL, SDA
from adafruit_pca9685 import PCA9685
from adafruit_motor import servo
from pick import pick
import time
import os
import sys
import RPi.GPIO as GPIO

from spotmicroai.utilities.log import Logger
from spotmicroai.utilities.config import Config

log = Logger().setup_logger('CALIBRATE SERVOS')

log.info('Calibrate rest position...')

pca = None

gpio_port = Config().get(Config.ABORT_CONTROLLER_GPIO_PORT)

GPIO.setmode(GPIO.BCM)
GPIO.setup(gpio_port, GPIO.OUT)
GPIO.output(gpio_port, False)

i2c = busio.I2C(SCL, SDA)

while True:
    options = {
import signal
import sys
import time
import queue

from spotmicroai.utilities.log import Logger
from spotmicroai.lcd_screen_controller import LCD_16x2_I2C_driver
from spotmicroai.utilities.config import Config
from spotmicroai.utilities.system import System

import spotmicroai.utilities.queues as queues

log = Logger().setup_logger('LCD Screen controller')


class LCDScreenController:
    is_alive = False

    lcd_screen_controller = None
    abort_controller = None
    remote_controller_controller = None
    motion_controller_1 = None
    motion_controller_2 = None

    def __init__(self, communication_queues):
        try:

            log.debug('Starting controller...')

            signal.signal(signal.SIGINT, self.exit_gracefully)
            signal.signal(signal.SIGTERM, self.exit_gracefully)
예제 #9
0
#!/home/pi/spotmicroai/venv/bin/python3 -u

import busio
from board import SCL, SDA
from adafruit_pca9685 import PCA9685
from adafruit_motor import servo
import time

from spotmicroai.utilities.log import Logger
from spotmicroai.utilities.config import Config
import RPi.GPIO as GPIO

log = Logger().setup_logger('Test Motion')

log.info('Testing Motion...')

pca9685_1_address = int(
    Config().get(
        'motion_controller[*].boards[*].pca9685_1[*].address | [0] | [0] | [0]'
    ), 0)
pca9685_1_reference_clock_speed = int(Config().get(
    'motion_controller[*].boards[*].pca9685_1[*].reference_clock_speed | [0] | [0] | [0]'
))
pca9685_1_frequency = int(Config().get(
    'motion_controller[*].boards[*].pca9685_1[*].frequency | [0] | [0] | [0]'))

boards = 1

try:
    pca9685_2_address = int(
        Config().get(
예제 #10
0
#!/home/pi/spotmicroai/venv/bin/python3 -u

import RPi.GPIO as GPIO
import time

from spotmicroai.utilities.log import Logger
from spotmicroai.utilities.config import Config

log = Logger().setup_logger('Test Abort')

log.info('Testing abort mechanism...')

gpio_port = Config().get('abort_controller[0].gpio_port')

log.info(
    'Make sure you have connected your GPIO pin to the 0E port in the PCA9685 boards'
)
log.info('GPIO information for RaspberryPi can be found here: ')
log.info('     https://www.raspberrypi.org/documentation/usage/gpio/')
log.info('Current configuration value is: ' + str(gpio_port))
input("Press Enter to start the tests...")

try:

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(gpio_port, GPIO.OUT)

    GPIO.cleanup()

    GPIO.output(gpio_port, True)
    time.sleep(2)
예제 #11
0
import time
import os
import struct
import array
from fcntl import ioctl
import signal
import sys
from spotmicroai.utilities.log import Logger
from spotmicroai.utilities.config import Config
import spotmicroai.utilities.queues as queues

log = Logger().setup_logger('Remote controller')


class RemoteControllerController:
    def __init__(self, communication_queues):

        try:

            log.debug('Starting controller...')

            signal.signal(signal.SIGINT, self.exit_gracefully)
            signal.signal(signal.SIGTERM, self.exit_gracefully)

            # We'll store the states here.
            self.connected_device = False
            self.axis_states = {}
            self.button_states = {}
            self.button_map = []
            self.axis_map = []
            self.jsdev = None