Beispiel #1
0
    def test_data(self):
        '''Tests set_data & get_data'''

        print('\nTesting: get and set data')
        self.vehicle = Vehicle()
        self.vehicle.json_list('car/start_ahead.json')
        test_car1 = self.vehicle.get_data()
        test_car2 = self.vehicle.get_data()
        self.assertEqual(test_car1[1], test_car2[0])
Beispiel #2
0
class test_car(unittest.TestCase):

    def test_data(self):
        '''Tests set_data & get_data'''

        print('\nTesting: get and set data')
        self.vehicle = Vehicle()
        self.vehicle.json_list('car/start_ahead.json')
        test_car1 = self.vehicle.get_data()
        test_car2 = self.vehicle.get_data()
        self.assertEqual(test_car1[1], test_car2[0])
Beispiel #3
0
class Main:

    def __init__(self):
# <<<<<<< HEAD
# <<<<<<< HEAD
        self.ambulance = Vehicle(speed=2)
        self.car = Vehicle(start_ahead=True)
        self.process_data = ProcessData(self.car,self.ambulance)

    def run(self):
        '''Check if receiver has got a new data point, if so process data'''
        print('=========== new run ===============')

        while len(self.car.position_history) > 1 and \
                len(self.ambulance.position_history) > 1:
            old_ambu, new_ambu = self.car.get_data()
            old_car, new_car = self.ambulance.get_data()
            self.process_data.is_relevant(new_car, old_car, new_ambu, old_ambu)
# =======
        self.vechicle1 = Vehicle(start_ahead=True)
        self.vechicle2 = Vehicle(speed=3)
        self.process_data = ProcessData(self.vechicle1,self.vechicle2)
# =======
        self.amb = Vehicle(speed=10)
        self.car = Vehicle(start_ahead=True)
        self.process_data = ProcessData(self.amb,self.car)
# >>>>>>> Mapview
        self.map = MapView()
        self.text_speech = TextToSpeech()

    def run(self):
        '''Check two vehicle objects against each other and process data, show a map with one plot'''

        while len(self.amb.format_position_history)>1 and len(self.car.format_position_history)>1:
            old_ambu, new_ambu = self.amb.get_data()
            self.map.plot_coordinates(old_ambu['longitude'],old_ambu['latitude'],'rs')
            old_car, new_car = self.car.get_data()
            self.map.plot_coordinates(old_car['longitude'], old_car['latitude'],'bs')
# <<<<<<< HEAD
            self.process_data.is_relevant(new_car, old_car, new_ambu, old_ambu)
        self.map.show_map()
Beispiel #4
0
    def run(self):
        '''Check if receiver has got a new data point, if so process data'''
        print('=========== new run ===============')

        while len(self.car.position_history) > 1 and \
                len(self.ambulance.position_history) > 1:
            old_ambu, new_ambu = self.car.get_data()
            old_car, new_car = self.ambulance.get_data()
            self.process_data.is_relevant(new_car, old_car, new_ambu, old_ambu)
# =======
        self.vechicle1 = Vehicle(start_ahead=True)
        self.vechicle2 = Vehicle(speed=3)
        self.process_data = ProcessData(self.vechicle1,self.vechicle2)
# =======
        self.amb = Vehicle(speed=10)
        self.car = Vehicle(start_ahead=True)
        self.process_data = ProcessData(self.amb,self.car)
# >>>>>>> Mapview
        self.map = MapView()
        self.text_speech = TextToSpeech()
Beispiel #5
0
    def __init__(self):
# <<<<<<< HEAD
# <<<<<<< HEAD
        self.ambulance = Vehicle(speed=2)
        self.car = Vehicle(start_ahead=True)
        self.process_data = ProcessData(self.car,self.ambulance)
Beispiel #6
0
remote_host = args['remote_host']
port = int(args['port'])
is_localhost = args['is_localhost']

# Load default settings
cfg = load_config()

# Assign default states
memory = Memory()
memory.put(['ps3_controller/brake'], True)
memory.put(['dashboard/brake'], False)
memory.put(['dashboard/driver_type'], 'user')
memory.put(['vehicle/brake'], True)

# Initialize the car
car = Vehicle(mem=memory, warm_up_seconds=cfg.WARM_UP_SECONDS, port=port)

# Consume video from a cheap webcam
camera = Camera(name='video',
                output_names=['camera/image_array'],
                is_localhost=is_localhost,
                is_verbose=args['verbose-video'])
car.add(camera)

# Listen for user input
user_input = UserInput(name='user-input',
                       output_names=[
                           'dashboard/brake', 'dashboard/driver_type',
                           'dashboard/model_constant_throttle',
                           'remote_model/angle'
                       ],
Beispiel #7
0
def drive(cfg):
    car = Vehicle()

    inputs = []

    # add camera
    if cfg.CAMERA_TYPE == "PICAM":
        cam = PiCamera(image_w=cfg.IMAGE_W,
                       image_h=cfg.IMAGE_H,
                       image_d=cfg.IMAGE_DEPTH,
                       framerate=cfg.CAMERA_FRAMERATE,
                       vflip=cfg.CAMERA_VFLIP,
                       hflip=cfg.CAMERA_HFLIP)
    else:
        raise (Exception("Unkown camera type: %s" % cfg.CAMERA_TYPE))

    car.add(cam, inputs=inputs, outputs=['cam/image_array'], threaded=True)

    # add controller
    if cfg.USE_JOYSTICK_AS_DEFAULT:
        ctrl = get_js_controller(cfg)

    car.add(ctrl,
            inputs=['cam/image_array'],
            outputs=['user/angle', 'user/throttle', 'user/mode', 'recording'],
            threaded=True)
    ctrl.print_controls()

    # add steering and throttle
    steering_controller = PCA9685(cfg.STEERING_CHANNEL,
                                  cfg.PCA9685_I2C_ADDR,
                                  bus_num=cfg.PCA9685_I2C_BUSNUM)
    steering = PWMSteering(controller=steering_controller,
                           left_pulse=cfg.STEERING_LEFT_PWM,
                           right_pulse=cfg.STEERING_RIGHT_PWM)

    throttle_controller = PCA9685(cfg.THROTTLE_CHANNEL,
                                  cfg.PCA9685_I2C_ADDR,
                                  bus_num=cfg.PCA9685_I2C_BUSNUM)
    throttle = PWMThrottle(controller=throttle_controller,
                           max_pulse=cfg.THROTTLE_FORWARD_PWM,
                           zero_pulse=cfg.THROTTLE_STOPPED_PWM,
                           min_pulse=cfg.THROTTLE_REVERSE_PWM)

    car.add(steering, inputs=['user/angle'])
    car.add(throttle, inputs=['user/throttle'])

    # add tub to save data
    inputs = ['cam/image_array', 'user/angle', 'user/throttle', 'user/mode']
    types = ['image_array', 'float', 'float', 'str']
    # do we want to store new records into own dir or append to existing
    tub_path = TubHandler(path=cfg.DATA_PATH).create_tub_path(
    ) if cfg.AUTO_CREATE_NEW_TUB else cfg.DATA_PATH
    print('tub_path: ', cfg.DATA_PATH)

    tub_writer = TubWriter(base_path=tub_path, inputs=inputs, types=types)
    car.add(tub_writer,
            inputs=inputs,
            outputs=["tub/num_records"],
            run_condition='recording')

    if isinstance(ctrl, JoystickController):
        print("You can now move your joystick to drive your car.")
        ctrl.set_tub(tub_writer.tub)

    car.start(rate_hz=cfg.DRIVE_LOOP_HZ)
Beispiel #8
0
def drive(cfg, model_path=None, use_joystick=True):
    """
    Drive the car.
    You will either drive to record data for training or drive to test the autonomous mode.
    Either use Web controls or Joystick to control the vehicle.
    If driving autonomous, give the model to load.
    :param cfg: Configuration for user defined values.
    :param model_path: Path to load the model.
    :param use_joystick Use parameter in startup to use joystick.
    """
    from car.keras import KerasRicoai

    #Initialized car
    V = Vehicle()

    # Setup camera
    cam = PiCamera()
    V.add(cam, outputs=['cam/image_array'], threaded=True)

    # Select if only use bluetooth PS3 controller
    ctr = JoystickController(
        max_throttle=cfg.JOYSTICK_MAX_THROTTLE,
        steering_scale=cfg.JOYSTICK_STEERING_SCALE,
        auto_record_on_throttle=cfg.AUTO_RECORD_ON_THROTTLE)

    V.add(ctr,
          inputs=['cam/image_array'],
          outputs=['user/angle', 'user/throttle', 'user/mode', 'recording'],
          threaded=True)

    # See if we should even run the pilot module.
    # This is only needed because the part run_contion only accepts boolean
    def pilot_condition(mode):
        if mode == 'user':
            return False
        else:
            return True

    pilot_condition_part = Lambda(pilot_condition)
    V.add(pilot_condition_part, inputs=['user/mode'], outputs=['run_pilot'])

    # Load the model configuration
    kl = KerasRicoai()

    if model_path:
        print(model_path)
        kl.load(model_path)

    V.add(kl,
          inputs=['cam/image_array'],
          outputs=['pilot/angle', 'pilot/throttle'],
          run_condition='run_pilot')

    # Choose what inputs should change the car.
    def drive_mode(mode, user_angle, user_throttle, pilot_angle,
                   pilot_throttle):
        if mode == 'user':
            return user_angle, user_throttle

        elif mode == 'local_angle':
            return pilot_angle, user_throttle

        else:
            return pilot_angle, pilot_throttle

    drive_mode_part = Lambda(drive_mode)
    V.add(drive_mode_part,
          inputs=[
              'user/mode', 'user/angle', 'user/throttle', 'pilot/angle',
              'pilot/throttle'
          ],
          outputs=['angle', 'throttle'])

    # Configure the throttle and angle control hardware
    # Calibrate min/max for steering angle
    # Calibrate min/max/zero for throttle
    steering_controller = PCA9685(1)
    steering = PWMSteering(controller=steering_controller,
                           left_pulse=460,
                           right_pulse=260,
                           invert_steering_angle=cfg.INVERT_STEERING_ANGLE)

    throttle_controller = PCA9685(0)
    throttle = PWMThrottle(controller=throttle_controller,
                           max_pulse=500,
                           zero_pulse=370,
                           min_pulse=220)

    V.add(steering, inputs=['angle'])
    V.add(throttle, inputs=['throttle'])

    # Add tub to save data
    inputs = [
        'cam/image_array', 'user/angle', 'user/throttle', 'pilot/angle',
        'pilot/throttle', 'user/mode'
    ]
    types = ['image_array', 'float', 'float', 'float', 'float', 'str']

    th = TubHandler(path=cfg.DATA_PATH)
    tub_writer = th.new_tub_writer(inputs=inputs, types=types)
    V.add(tub_writer, inputs=inputs, run_condition='recording')

    # Run the vehicle for 20 seconds
    V.start(rate_hz=cfg.FPS, max_loop_count=100000)

    print("You can now go to <your pi ip address>:8887 to drive your car.")
Beispiel #9
0
from car.vehicle import Vehicle
from car.config import load_config
from car.parts.camera import Webcam
from car.parts.engine import Engine
from car.parts.web_controller.web import LocalWebController
from car.parts.datastore import DatasetHandler


# Load default settings
cfg = load_config()

# Initialize the car
car = Vehicle()

# Add a webcam
cam = Webcam(ffmpeg_host=cfg.PI_HOSTNAME)
car.add(cam, outputs=['cam/image_array'], threaded=True)

# Add a local Tornado web server to receive commands
ctr = LocalWebController()
car.add(ctr,
        inputs=['cam/image_array'],
        outputs=['user/angle', 'user/throttle', 'user/mode', 'recording'],
        threaded=True)

# Add engine
engine = Engine(16, 18, 22, 19, 21, 23, ['user/angle', 'user/throttle'])
car.add(engine,
        inputs=['user/angle', 'user/throttle'],
        threaded=True)
Beispiel #10
0
from car.vehicle import Vehicle
from car.config import load_config
from car.parts.camera import Webcam
from car.parts.engine import Engine
from car.parts.web_controller.web import LocalWebController
from car.parts.datastore import DatasetHandler

# Load default settings
cfg = load_config()

# Initialize the car
car = Vehicle()

# Add a webcam
cam = Webcam(ffmpeg_host=cfg.PI_HOSTNAME)
car.add(cam, outputs=['cam/image_array'], threaded=True)

# Add a local Tornado web server to receive commands
ctr = LocalWebController()
car.add(ctr,
        inputs=['cam/image_array'],
        outputs=['user/angle', 'user/throttle', 'user/mode', 'recording'],
        threaded=True)

# Add engine
engine = Engine(16, 18, 22, 19, 21, 23, ['user/angle', 'user/throttle'])
car.add(engine, inputs=['user/angle', 'user/throttle'], threaded=True)

# Add dataset to save data
inputs = ['cam/image_array', 'user/angle', 'user/throttle', 'user/mode']
types = ['image_array', 'float', 'float', 'str']