Example #1
0
#declare variables
linear_error = LIN_ERROR_THRESHOLD + 1
prev_linear_error = linear_error

angular_error = ANG_ERROR_THRESHOLD + 1
prev_angular_error = angular_error

prev_fix_time = 0

need_tgt = True
fix_timeout = False

linearPID = PID(L_P, L_I, L_D)
angularPID = PID(A_P, A_I, A_D)

gps = GPS('COM5', 9600, 1)
""" -MAIN LOOP- """


def talker():
    global need_tgt, fix_timeout
    global prev_fix_time, prev_linear_error, prev_angular_error

    #create ROS publisher
    pub = rospy.Publisher("/Drive_Train", String)
    rospy.init_node("Autonomous_Waypoint_Navigation")

    #open serial port and turn on GPS power
    #gps.begin()

    while not rospy.is_shutdown():
Example #2
0
def main():
    window.addToParent()
    window.setBackground('white')
    window.clear()
    window.resetView()
    secondary_window.addToParent()
    secondary_window.setBackground('white')
    secondary_window.clear()
    road_info_window.setBackground('white')
    road_info_window.clear()

    config_data = main_menu.config_data
    map_data = config_data["map_data"]

    S = map_data["coords_south"]
    W = map_data["coords_west"]
    N = map_data["coords_north"]
    E = map_data["coords_east"]
    llc = LatLonConverter(window, S, W, N, E)

    graph = Graph()
    graph.load_open_street_map_data(map_data["filename"], llc)

    road_map = RoadMap(graph, window)
    road_map.draw()
    road_map.draw_road_names()

    gps = GPS(graph, road_map)

    cars = []
    car_shapes = []
    car_factory = CarFactory(window, gps, cars, car_shapes)

    num_cars = config_data["num_cars"]
    for _ in range(num_cars):
        car_factory.create()

    # collision_system = GridCollisionSystem(window, cars)
    collision_system = QuadTreeCollisionSystem(window, cars)

    info = InfoWindow(secondary_window)
    info.set_selected_car(cars[0])
    info.initialize_table()
    car_shapes[info.selected_car.index].shape.setFill("yellow")

    road_info = RoadInfoWindow(road_info_window)

    for car_shape in car_shapes:
        car_shape.draw()

    # initialize simulation variables
    simTime = 0.0
    limit = 10000
    TICKS_PER_SECOND = 30
    TIME_PER_TICK = 1.0 / TICKS_PER_SECOND
    nextLogicTick = TIME_PER_TICK
    lastFrameTime = time.time()
    lag = 0.0

    # Main Simulation Loop
    while simTime < limit:
        currentTime = time.time()
        elapsed = currentTime - lastFrameTime
        lastFrameTime = currentTime
        lag += elapsed
        simTime += elapsed

        # process events
        window.update()
        secondary_window.update()
        road_info_window.update()
        frame.update()
        last_pressed_key = (window.checkKey() or secondary_window.checkKey()
                            or road_info_window.checkKey())
        if last_pressed_key is not None:
            if last_pressed_key == "space":
                pause()
                lastFrameTime = time.time()
            elif last_pressed_key == "p":
                window.zoomIn()
            elif last_pressed_key == "o":
                window.zoomOut()
            elif last_pressed_key == "d":
                print(road_map.get_roads_within_view())

        last_clicked_pt = window.checkMouse()
        if last_clicked_pt is not None:
            car_clicked = False
            map_obj_clicked = False

            for car_shape in car_shapes:
                if car_shape.clicked(last_clicked_pt):
                    car_shapes[info.selected_car.index].shape.setFill("white")
                    info.set_selected_car(cars[car_shape.index])
                    car_shapes[info.selected_car.index].shape.setFill("yellow")
                    car_clicked = True
                    break

            if not car_clicked:
                nearby_object_ids = road_map.get_nearby_object_ids(
                    last_clicked_pt.x, last_clicked_pt.y)
                for map_obj_id in nearby_object_ids:
                    map_obj = road_map.get_obj_by_id(map_obj_id)
                    if map_obj.clicked(last_clicked_pt):
                        relx, rely = window.getRelativeScreenPos(
                            last_clicked_pt.x, last_clicked_pt.y)
                        road_info_window_options = {
                            "place": {
                                "relx": relx,
                                "rely": rely
                            }
                        }
                        road_info_window.addToParent(road_info_window_options)
                        road_info.set_selected_item(map_obj)
                        map_obj_clicked = True
                        break

            if not map_obj_clicked:
                road_info_window.forget()

        last_clicked_pt = secondary_window.checkMouse()
        if last_clicked_pt is not None:
            secondary_window.update()
            for button in info.buttons:
                button.clicked(last_clicked_pt)
                continue

        # update simulation logic
        while lag > TIME_PER_TICK:
            collision_system.process_collisions(cars)
            for car in cars:
                car.move_towards_dest(TIME_PER_TICK)
                car_shape = car_shapes[car.index]
                car_shape.x = cars[car.index].x
                car_shape.y = cars[car.index].y
            collision_system.update_objects(cars)

            nextLogicTick += TIME_PER_TICK
            lag -= TIME_PER_TICK

        # render updates to window
        for car_shape in car_shapes:
            car_shape.render()

        info.update_table()
        if info.follow_car:
            window.centerScreenOnPoint(info.selected_car.x,
                                       info.selected_car.y)
        road_info.update_table()

        road_map.draw_route(info.selected_car, info.show_route)

        _root.update_idletasks()

    cleanup()
Example #3
0
    prev_z = 1000
    if abs((prev_z - zAccl) / zAccl) >= 1.0:  ### Change this
        bus.write_byte_data(0x1D, 0x2A, 0)
        # record GPS for 1 second.
        with open("/home/pi/Rpi/data/shots.csv" % shot, "a+") as writefile:
            print("Trigger")
            led.turn_on()
            writer = csv.writer(writefile)
            if shot == 0:
                writer.writerow([
                    "Shot", "Time", "Lat", "Lat Err", "Lon", "Lon Err", "Alt",
                    "Alt Err"
                ])
            start = time.time()
            while time.time() - start < 1:
                data = GPS()
                data = np.concatenate([[shot], data])
                writer.writerow(data)
                time.sleep(0.2)
            writefile.flush()
            writefile.close()

            shot += 1
            time.sleep(30)
            led.turn_off()
            prev_z = 1000
            status = True
            continue
    status = False
    prev_z = zAccl
Example #4
0
def main(controller_type,
         training_data,
         policy_file,
         gps_params=gps_params_default):

    sys.path.append(gps_params['caffe_path'])

    # create controller
    if controller_type == 'cartpole':
        C = controller.CartPole()
        C.set_system_cost(x0=np.array([0, 0, 0, 0]),
                          u0=0.0,
                          Wx=np.eye(4),
                          Wu=1e-3)
    else:
        print('not implemented: ' + controller_type)

    x_len = C.get_x_len()
    u_len = C.get_u_len()
    gps_params['x_len'] = x_len
    gps_params['u_len'] = u_len

    # load training data
    f = h5py.File('data.h5', 'r')
    xu_train_orig = f['x'].value

    #	if 'o' not in f:
    #		print( 'WARNING: observations not in data' )
    #		o_train_orig = None
    #	else:
    #		o_train_orig = f[ 'o' ]
    #		o_train_orig = o_train_orig[ ::gps_params[ 'resample' ]	]
    o_train = None

    if xu_train_orig.ndim == 2:
        xu_train_orig = xu_train_orig[:,
                                      1:]  # TODO - at the moment 1st column is time

        s = xu_train_orig.shape
        xu_train_orig = xu_train_orig.reshape((1, s[0], s[1]))

    resample_idx = range(0, xu_train_orig.shape[1], gps_params['resample'])

    xu_train_orig = np.take(xu_train_orig, resample_idx, axis=1)
    xu_train = xu_train_orig
    x_train = xu_train_orig[:, :, :x_len]
    u_train = xu_train_orig[:, :, x_len]  # TODO check table organisation

    gps = GPS(gps_params)
    training_errors = []

    # loop untill convergence:
    for k in range(gps_params['K']):
        print('running for k: {0}'.format(k))

        # execute gps
        policy, training_error = gps.train(xu_train, o_train,
                                           C.get_system_cost(), gps_params)
        training_errors.append(training_error)

        # run on controller and collect the data
        xu_run = C.run(policy)

        # merge data
        xu_train = gps.merge_data(xu_train, o_train, xu_run, o_run)
Example #5
0
        if b[2] & 0x08:
            flags.append("(soft temp limit reached)")

    return ", ".join(flags)


def startup_tasks():
    """System commands to run on service start"""
    print("main: running startup tasks")
    subprocess.run("/usr/bin/tvservice -o", shell=True,
                   capture_output=True)  # disable HDMI


os.nice(-5)

gps = GPS()

compass = Compass()
threads["compass"] = threading.Thread(target=compass.track_ahrs,
                                      args=(),
                                      daemon=True)
threads["compass"].start()

display = Display(gps, compass)

# Blocks until the GPS is ready
display.start()

os.nice(15)

ac = Aircraft(gps)
Example #6
0
def ver0(metalog, waypoints=None):
    assert metalog is not None
    assert waypoints is not None  # for simplicity (first is start)

    conv = Convertor(refPoint = waypoints[0]) 
    waypoints = waypoints[1:-1]  # remove start/finish

    can_log_name = metalog.getLog('can')
    if metalog.replay:
        if metalog.areAssertsEnabled():
            can = CAN(ReplayLog(can_log_name), skipInit=True)
        else:
            can = CAN(ReplayLogInputsOnly(can_log_name), skipInit=True)
    else:
        can = CAN()
        can.relog(can_log_name)
    can.resetModules(configFn=setup_faster_update)
    robot = JohnDeere(can=can)
    robot.UPDATE_TIME_FREQUENCY = 20.0  # TODO change internal and integrate setup

    robot.localization = None  # TODO


    # mount_sensor(GPS, robot, metalog)
    gps_log_name = metalog.getLog('gps')
    print gps_log_name
    if metalog.replay:
        robot.gps = DummySensor()
        function = SourceLogger(None, gps_log_name).get
    else:
        robot.gps = GPS(verbose=0)
        function = SourceLogger(robot.gps.coord, gps_log_name).get
    robot.gps_data = None
    robot.register_data_source('gps', function, gps_data_extension) 

    # mount_sensor(VelodyneThread, robot, metalog)
    velodyne_log_name = metalog.getLog('velodyne_dist')
    print velodyne_log_name
    sensor = Velodyne(metalog=metalog)
    if metalog.replay:
        robot.velodyne = DummySensor()
        function = SourceLogger(None, velodyne_log_name).get
    else:
        robot.velodyne = VelodyneThread(sensor)
        function = SourceLogger(robot.velodyne.scan_safe_dist, velodyne_log_name).get
    robot.velodyne_data = None
    robot.register_data_source('velodyne', function, velodyne_data_extension) 

    robot.gps.start()  # ASAP so we get GPS fix
    robot.velodyne.start()  # the data source is active, so it is necessary to read-out data

    center(robot)
    wait_for_start(robot)

    moving = False
    robot.desired_speed = 0.5
    start_time = robot.time
    prev_gps = robot.gps_data
    prev_destination_dist = None
    while robot.time - start_time < 30*60:  # RO timelimit 30 minutes
        robot.update()
        if robot.gps_data != prev_gps:
            print robot.time, robot.gas, robot.gps_data, robot.velodyne_data
            prev_gps = robot.gps_data
            if robot.gps_data is not None:
                dist_arr = [distance( conv.geo2planar((robot.gps_data[1], robot.gps_data[0])), 
                                      conv.geo2planar(destination) ) for destination in waypoints]
                dist = min(dist_arr)
                print "DIST-GPS", dist
                if prev_destination_dist is not None:
                    if prev_destination_dist < dist and dist < 10.0:
                        robot.drop_ball = True
                        # remove nearest
                        i = dist_arr.index(dist)  # ugly, but ...
                        print "INDEX", i
                        del waypoints[i]
                        center(robot)
                        moving = False
                        robot.wait(1.0)
                        robot.drop_ball = False
                        robot.wait(3.0)
                        dist = None
                prev_destination_dist = dist

        dist = None
        if robot.velodyne_data is not None:
            index, dist = robot.velodyne_data
            if dist is not None:
                dist = min(dist)  # currently supported tupple of readings
        if moving:
            if dist is None or dist < SAFE_DISTANCE_STOP:
                print "!!! STOP !!! -",  robot.velodyne_data
                center(robot)
                moving = False

            elif dist < TURN_DISTANCE:
                if abs(robot.steering_angle) < STRAIGHT_EPS:
                    arr = robot.velodyne_data[1]
                    num = len(arr)
                    left, right = min(arr[:num/2]), min(arr[num/2:])
                    print "DECIDE", left, right, robot.velodyne_data
                    if left <= right:
                        robot.pulse_right(RIGHT_TURN_TIME)
                        robot.steering_angle = math.radians(-30)  # TODO replace by autodetect
                    else:
                        robot.pulse_left(LEFT_TURN_TIME)
                        robot.steering_angle = math.radians(30)  # TODO replace by autodetect

            elif dist > NO_TURN_DISTANCE:
                if abs(robot.steering_angle) > STRAIGHT_EPS:
                    if robot.steering_angle < 0:
                        robot.pulse_left(LEFT_TURN_TIME)
                    else:
                        robot.pulse_right(RIGHT_TURN_TIME)
                    robot.steering_angle = 0.0  # TODO replace by autodetect

        else:  # not moving
            if dist is not None and dist > SAFE_DISTANCE_GO:
                print "GO",  robot.velodyne_data
                go(robot)
                moving = True
        if not robot.buttonGo:
            print "STOP!"
            break
    center(robot)
    robot.velodyne.requestStop()
    robot.gps.requestStop()
Example #7
0
from gps import GPS
import time
from pytrack import Pytrack
from connection_otaa import Connection
from LIS2HH12 import LIS2HH12
import pycom

conn = Connection('70B3D57ED0015419', 'CA137963FA80E48A44B17973DED1977A')

py = Pytrack()

gps = GPS(py, 120)
counter = 0
while counter < 20:
    if gps.hasGPS() == True:
        break
    else:
        time.sleep(2)
        gps.printGPS()
        counter += 1

gps.printGPS()

print("Wakeup reason: " + str(py.get_wake_reason()) +
      "; Aproximate sleep remaining: " + str(py.get_sleep_remaining()) +
      " sec")
time.sleep(0.5)

# enable wakeup source from INT pin
py.setup_int_pin_wake_up(False)
import sys
from gy801 import GY801
from gps import GPS

a = GY801()
b = GPS()

print("Reading ACC data (m/s/s)")
a.accReading()

print("Reading GYRO data (degree per second )")
a.gyReading()

print("Reading MAG data")
#a.magReading()

print("Reading Temperature and Pressure")
a. airReading()

print("Reading GPS data")
b.gpsReading()

Example #9
0
from gps import GPS
from gopigo import *
set_speed(75)
coords = GPS(True, True)
#print coords.rotation
coords.turn_to_angle(180)
time.sleep(10)
coords.turn_to_angle(90)
time.sleep(10)
coords.turn_to_angle(270)
time.sleep(10)
coords.turn_to_angle(0)
time.sleep(10)
coords.stop()
Example #10
0
import time
import cv2
import logging
import sys

from geopy import distance
import threading
from imProc import imProcessing
from capturing import ImageCap
from cmds import calculateReading, issueCommands
from globals import pixelStrip, startFrom, logInitial
from gps import GPS

if __name__ == "__main__":

    gps = GPS(logging=False)

    while gps.getCoords() == (0, 0):
        print("Awaiting gps lock.")
        #time.sleep(0.2)
        gps.getGPS(force=1)

    startingPos = gps.getCoords()  #so we know to stop 15m afterwards

    issueCommands(0, 0)  #connect to car

    distanceAway = 0
    while distanceAway < 12:  #go forward 15m
        distanceAway = distance.distance(gps.getGPS(force=1), startingPos).m
        print("Distance away from destination: ", distanceAway)
        issueCommands(1, 100)  #go straight
Example #11
0
def main(visual, green, record, replay, loop, rc, cFlip):

    calculateReading.pastCom = 0  # in case we don't see cones straight away

    ic = ImageCap(False, replay)  # ImCapt() #initializes zed object
    startTime = time.time()
    listReadings = []

    gps = GPS()

    while gps.getGPS() == (0, 0):
        print("Waiting on GPS lock.")
        time.sleep(1)

    issueCommands(0, 0)  #makes connection
    time.sleep(3)  #waits 3 seconds

    issueCommands(-24, 0)  #sweeps left
    time.sleep(2)
    issueCommands(24, 0)  #sweep right
    time.sleep(2)
    issueCommands(0, 0)

    startingPos = gps.getGPS()
    running = True
    timeCheck = False
    ebs = False

    try:
        i = 0
        while loop:  # for amount in range(framesToDo):
            logging.warning("\n*********\nFrame: " + str(i))
            image, depth = ic.latest(record)
            logging.info("Getting latest image and depth.")
            t = threading.Thread(target=ImageCap.capture, args=(ic, ))

            if not record:
                original_image = image
                depth_data_ocv = depth[startFrom:startFrom + pixelStrip]
                image_ocv = original_image[startFrom:startFrom + pixelStrip]

                steering, velocity = imProcessing(t,
                                                  image_ocv,
                                                  depth_data_ocv,
                                                  visual,
                                                  original_image,
                                                  green,
                                                  cFlip,
                                                  gates=0)
            else:  #looks for one gate
                steering, velocity = 0, 0
                cv2.imshow("image", image)
                cv2.waitKey(1)
            # works faster here for performance reasons

            if ic.exit:  # when we replay tests
                raise KeyboardInterrupt

            steering = min(19, max(-19, steering))

            if running:
                velocity = 250  #15kph
            else:
                velocity = 0

            if distance.distance(gps.getGPS(), startingPos).m > 10:
                running = False
                timeCheck = time.time()
                issueCommands(0, 0)
                time.sleep(5)
                issueCommands(0, 250)
                time.sleep(2)
                issueCommands.car.deploy_ebs()
                raise KeyboardInterrupt

            if timeCheck:
                if time.time() - timeCheck > 5:  #after 5 seconds
                    while gps.getGPS(True) == startingPos:
                        pass  #resets starting position so we go for 10m
                    startingPos = gps.getGPS(True)
                    running = True  #resets velocity to 15kph
                    ebs = True  #it will deploy ebs once it reaches 10m again

            print("Steering: ", steering)
            print("Velocity: ", velocity)

            logging.info("Steering: %d, Velocity: %d", steering, velocity)

            issueCommands(steering, velocity, False, visual, replay, record,
                          rc)

            listReadings.append(steering)

            if not isinstance(loop, bool):
                loop -= 1
                if loop == 0:
                    raise KeyboardInterrupt

            if issueCommands.car.checkEBS():
                raise KeyboardInterrupt
            i += 1
            t.join()
            i += 1
            logging.warning("End of frame.\n\n")

            #print("Frames left: ", framesToDo-amount)

    except KeyboardInterrupt:
        if not replay:
            ic.zed.close()
        if not ebs:
            issueCommands(0, 0, False, visual, replay, record, rc)
            time.sleep(4)
            issueCommands(0, 0, True, visual, replay, record,
                          rc)  #initiates the exit protocol

        print("Seconds it took: ", time.time() - startTime)
        print("Total frames: ", len(listReadings))
        print("Actual framerate: ",
              len(listReadings) / (time.time() - startTime))
        print("\nFINISH")

        logging.info("\nTotal seconds: %d", time.time() - startTime)
        logging.info("Framerate: %d",
                     len(listReadings) / (time.time() - startTime))
        logging.warning("Mission end.\n\n")
        quit()
Example #12
0
        if d1g >= 5:
            if gi0 is not None:
                angle = gps_guidance(gps, motor, xbee, gi0, gi1, giG)

            xbee.justSend('Go straight 10s')
            print('Go straight 10s')
            motor.move('straight', 10)

        else:
            x, ratio = camera_guidance(motor, xbee, count)
            if ratio >= 0.4:
                break
        xbee.sendAndSave(count, gi1['time'], gi1['lat'], gi1['lon'], d1g,
                         angle, x, ratio)
        gi0 = gi1
        count += 1

    xbee.sendAndSave(count, gi1['time'], gi1['lat'], gi1['lon'], d1g, angle, x,
                     ratio)


if __name__ == '__main__':
    motor = Motor(left=(16, 12), right=(21, 20), servo_pin=23)
    gps = GPS(time_zone=9, O_format='dd')
    xbee = XBee()

    giG = {'lat': 40.1427635, 'lon': 139.987441}
    main(motor, gps, xbee, giG)

    xbee.justSend('Now Shutdown')
    os.system('sudo shutdown -h now')
Example #13
0
# Main program executed by micropython
from machine import UART, RTC
from esp32 import raw_temperature
import os
import uasyncio as asyncio
from sds import SDS
from collections import namedtuple
Time = namedtuple("Time", ["Hour", "Minute", "second"])

uart_gps = UART(2, 9600)
uart_sds = UART(1, 9600)
sreader_gps = asyncio.StreamReader(uart_gps)  # Create a StreamReader
from gps import GPS
# gps = AS_GPS(sreader_gps, local_offset=1)  # Instantiate GPS
gps = GPS(sreader_gps, local_offset=1)
rtc = RTC()


def log(what):
    print("{4:02d}:{5:02d}:{6:02d} ".format(*rtc.datetime()) + what)


def get_temprature(what=None):
    if what == "header":
        return " Temp."
    elif what == "unit":
        return "degreeC"
    elif what == "text":
        C = (raw_temperature() - 32) / 1.8
        return "{:5.2f}".format(C)
    else:
Example #14
0
 def testNoPhoneBook(self):
     gps = GPS(state=['son-at-home', 'car-needs-battery', 'have-money'],
               goals=['son-at-school'],
               ops=self.school_ops)
     self.assertEqual(gps.solve(), "can't solve")
Example #15
0
def attach_sensor(robot, sensor_name, metalog):
    assert sensor_name in ['gps', 'laser', 'camera'], sensor_name

    if sensor_name == 'gps':
        # GPS
        gps_log_name = metalog.getLog('gps')
        print gps_log_name
        if metalog.replay:
            robot.gps = DummySensor()
            function = SourceLogger(None, gps_log_name).get
        else:
            robot.gps = GPS(verbose=0)
            function = SourceLogger(robot.gps.coord, gps_log_name).get
        robot.gps_data = None
        robot.register_data_source('gps', function, gps_data_extension)
        robot.gps.start()  # ASAP so we get GPS fix
        robot.threads.append(robot.gps)

    elif sensor_name == 'laser':
        # Laser
        laser_log_name = metalog.getLog('laser')
        remission_log_name = metalog.getLog('remission')
        print laser_log_name, remission_log_name
        if metalog.replay:
            robot.laser = DummySensor()
            function = SourceLogger(None, laser_log_name).get
            if remission_log_name is not None:
                # remission is only optional, missing in some old log files
                function2 = SourceLogger(None, remission_log_name).get
        else:
            robot.laser = LaserIP(remission=True)
            function = SourceLogger(robot.laser.scan, laser_log_name).get
            function2 = SourceLogger(robot.laser.remission,
                                     remission_log_name).get
        robot.laser_data = None
        robot.register_data_source('laser', function, laser_data_extension)
        robot.remission_data = None
        if remission_log_name is not None:
            robot.register_data_source('remission', function2,
                                       remission_data_extension)
        robot.laser.start()
        robot.threads.append(robot.laser)

    elif sensor_name == 'camera':
        # Camera
        camera_log_name = metalog.getLog('camera')
        print camera_log_name
        if metalog.replay:
            robot.camera = DummySensor()
            function = SourceLogger(None, camera_log_name).get
        else:
            robot.camera = Camera(sleep=0.2)  # TODO
            function = SourceLogger(robot.camera.lastResult,
                                    camera_log_name).get
        robot.camera_data = None
        robot.register_data_source('camera', function, camera_data_extension)
        robot.camera.start()
        robot.threads.append(robot.camera)

    else:
        assert False, sensor_name  # unsuported sensor
Example #16
0
 def testCarWorks(self):
     gps = GPS(state=['son-at-home', 'car-works'],
               goals=['son-at-school'],
               ops=self.school_ops)
     self.assertEqual(gps.solve(), 'solved')
Example #17
0
import grovepi as gpi
import time
from grove_i2c_barometic_sensor_BMP180 import BMP085
from gps import GPS
from lcd import LCD
from modem import SatModem
import csv

TEMP_SENSOR = 0  # Port A0 is for the Temperature Sensor
SOUND_SENSOR = 2  # Port A2 is for the Sound Sensor
bmpSensor = BMP085(0x77, 1)  # Register pressure sensor Port I2C-1
gpsSensor = GPS('/dev/ttyAMA0', 4800)  # Connect Serial to GPS Device
lcdDisplay = LCD()  # Create a reference to the LCD Display
satModem = SatModem('/dev/ttyUSB0')  # Create a Reference to the Sat Modem

secondElapsed = 0

lcdDisplay.setText("Hello!")
time.sleep(2)
lcdDisplay.setText("Prepping Sensors!")
time.sleep(2)
lcdDisplay.setText("Ready to Go!")
time.sleep(2)

with open(str(int(time.time())) + '.csv', 'wb') as csvfile:
    datawriter = csv.writer(csvfile,
                            delimiter=',',
                            quotechar='|',
                            quoting=csv.QUOTE_MINIMAL)
    datawriter.writerow([
        'temperature', 'sound', 'pressure', 'latitude', 'longitude', 'altitude'
Example #18
0
Also send it as a response
"""


@app.route("/photo")
def photo():
    print "Getting a photo"
    image = camera_obj.snap()

    # We'll first save the image locally
    # Filename is based on position
    lat = gps_obj.lat
    lng = gps_obj.lng
    filename = PHOTODIR + str(lat) + str(lng) + ".png"
    image.save(filename)  # Save the image for later

    return flask.jsonify(lat=lat, lng=lng, photo=filename)
    # # We'll also save the image as a buffer so we can send it by http
    # fp = StringIO()
    # image.save(fp, 'png')
    # response = flask.make_response(fp.getvalue())
    # response.headers['Content-Type'] = 'image/png'
    # return response


if __name__ == "__main__":
    with GPS() as gps_obj:
        with Camera() as camera_obj:
            app.run(debug=True)
            url_for('static', filename='index.html')
Example #19
0
from camera import Camera
from car import Car
from gps import GPS
import subprocess
import datetime
import time
import sys
import os

frameDimensions = (640, 480)
frameRate = 16
frameQuality = 30
carEnabled = False

#Initialize all the sensors
gps = GPS('COM7', 4800).start()
time.sleep(1)
if carEnabled:
    car = Car('/dev/ttyAMA0', 115200, debug=True)
    car.start()
time.sleep(1)
frontCamera = Camera(0,
                     frameDimensions,
                     frameRate,
                     label='Frontal',
                     verticalFlip=False).start()
time.sleep(1)
rearCamera = Camera(1,
                    frameDimensions,
                    frameRate,
                    label='Trasera',
Example #20
0
def demo(metalog):
    assert metalog is not None

    can_log_name = metalog.getLog('can')
    if metalog.replay:
        if metalog.areAssertsEnabled():
            can = CAN(ReplayLog(can_log_name), skipInit=True)
        else:
            can = CAN(ReplayLogInputsOnly(can_log_name), skipInit=True)
    else:
        can = CAN()
        can.relog(can_log_name)
    can.resetModules(configFn=setup_faster_update)
    robot = JohnDeere(can=can)
    robot.UPDATE_TIME_FREQUENCY = 20.0  # TODO change internal and integrate setup

    robot.localization = None  # TODO


    # GPS
    gps_log_name = metalog.getLog('gps')
    print gps_log_name
    if metalog.replay:
        robot.gps = DummySensor()
        function = SourceLogger(None, gps_log_name).get
    else:
        robot.gps = GPS(verbose=0)
        function = SourceLogger(robot.gps.coord, gps_log_name).get
    robot.gps_data = None
    robot.register_data_source('gps', function, gps_data_extension) 

    # Velodyne
    velodyne_log_name = metalog.getLog('velodyne_dist')
    print velodyne_log_name
    sensor = Velodyne(metalog=metalog)
    if metalog.replay:
        robot.velodyne = DummySensor()
        function = SourceLogger(None, velodyne_log_name).get
    else:
        robot.velodyne = VelodyneThread(sensor)
        function = SourceLogger(robot.velodyne.scan_safe_dist, velodyne_log_name).get
    robot.velodyne_data = None
    robot.register_data_source('velodyne', function, velodyne_data_extension) 

    robot.gps.start()  # ASAP so we get GPS fix
    robot.velodyne.start()  # the data source is active, so it is necessary to read-out data

    center(robot)
    wait_for_start(robot)

    moving = False
    robot.desired_speed = 0.5
    start_time = robot.time
    prev_gps = robot.gps_data
    prev_destination_dist = None
    while robot.time - start_time < 30*60:  # limit 30 minutes
        robot.update()
        if robot.gps_data != prev_gps:
            print robot.time, robot.gas, robot.gps_data, robot.velodyne_data
            prev_gps = robot.gps_data
        dist = None
        if robot.velodyne_data is not None:
            dist_index = None
            if len(robot.velodyne_data) == 2:
                index, dist = robot.velodyne_data
            else:
                index, dist, dist_index = robot.velodyne_data
            if dist is not None:
                dist = min(dist)  # currently supported tupple of readings
        if moving:
            if dist is None or dist < SAFE_DISTANCE_STOP:
                print "!!! STOP !!! -",  robot.velodyne_data
                #center(robot)
                robot.canproxy.stop()
                moving = False

            elif dist < TURN_DISTANCE:
                if abs(robot.steering_angle) < STRAIGHT_EPS:
                    arr = robot.velodyne_data[1]
                    num = len(arr)
                    left, right = min(arr[:num/2]), min(arr[num/2:])
                    print "DECIDE", left, right, robot.velodyne_data
                    if left <= right:
                        robot.canproxy.set_turn_raw(-100)
                        robot.steering_angle = math.radians(-30)  # TODO replace by autodetect
                    else:
                        robot.canproxy.set_turn_raw(100)
                        robot.steering_angle = math.radians(30)  # TODO replace by autodetect

            elif dist > NO_TURN_DISTANCE:
                if abs(robot.steering_angle) > STRAIGHT_EPS:
                    robot.canproxy.set_turn_raw(0)
                    robot.steering_angle = 0.0  # TODO replace by autodetect

        else:  # not moving
            if dist is not None and dist > SAFE_DISTANCE_GO:
                print "GO",  robot.velodyne_data
                #go(robot)
                robot.canproxy.go()
                moving = True
        if not robot.buttonGo:
            print "STOP!"
            break
    robot.canproxy.stop_turn()
    center(robot)
    robot.velodyne.requestStop()
    robot.gps.requestStop()
Example #21
0
def followme(metalog):
    assert metalog is not None

    can_log_name = metalog.getLog('can')
    if metalog.replay:
        if metalog.areAssertsEnabled():
            can = CAN(ReplayLog(can_log_name), skipInit=True)
        else:
            can = CAN(ReplayLogInputsOnly(can_log_name), skipInit=True)
    else:
        can = CAN()
        can.relog(can_log_name)
    can.resetModules(configFn=setup_faster_update)
    robot = JohnDeere(can=can)
    robot.UPDATE_TIME_FREQUENCY = 20.0  # TODO change internal and integrate setup

    robot.localization = None  # TODO

    # GPS
    gps_log_name = metalog.getLog('gps')
    print gps_log_name
    if metalog.replay:
        robot.gps = DummySensor()
        function = SourceLogger(None, gps_log_name).get
    else:
        robot.gps = GPS(verbose=0)
        function = SourceLogger(robot.gps.coord, gps_log_name).get
    robot.gps_data = None
    robot.register_data_source('gps', function, gps_data_extension)

    # Velodyne
    velodyne_log_name = metalog.getLog('velodyne_dist')
    print velodyne_log_name
    sensor = Velodyne(metalog=metalog)
    if metalog.replay:
        robot.velodyne = DummySensor()
        function = SourceLogger(None, velodyne_log_name).get
    else:
        robot.velodyne = VelodyneThread(sensor)
        function = SourceLogger(robot.velodyne.scan_safe_dist,
                                velodyne_log_name).get
    robot.velodyne_data = None
    robot.register_data_source('velodyne', function, velodyne_data_extension)

    robot.gps.start()  # ASAP so we get GPS fix
    robot.velodyne.start(
    )  # the data source is active, so it is necessary to read-out data

    center(robot)
    wait_for_start(robot)

    moving = False
    target_detected = False
    robot.desired_speed = 0.5
    start_time = robot.time
    prev_gps = robot.gps_data
    prev_destination_dist = None
    while robot.time - start_time < 30 * 60:  # limit 30 minutes
        robot.update()
        if robot.gps_data != prev_gps:
            if robot.velodyne_data is not None:
                print(robot.velodyne_data[-1], robot.canproxy.wheel_angle_raw,
                      robot.canproxy.desired_wheel_angle_raw)
            prev_gps = robot.gps_data

        dist, dist_index = None, None
        if robot.velodyne_data is not None:

            if len(robot.velodyne_data) == 2:
                index, dist = robot.velodyne_data
            else:
                index, dist, dist_index = robot.velodyne_data
            if dist is not None:
                dist = min(dist)  # currently supported tupple of readings

        if dist_index is not None:
            target_index, target_dist = dist_index
            robot.canproxy.set_turn_raw(int((-100 / 45.) * target_index))
            target_detected = target_dist < TARGET_DISTANCE
        else:
            dist_index = False

        if moving:
            if dist is None or dist < SAFE_DISTANCE_STOP or not target_detected:
                print "!!! STOP !!! -", robot.velodyne_data
                robot.canproxy.stop()
                moving = False

        else:  # not moving
            if dist is not None and dist > SAFE_DISTANCE_GO:
                print "GO", target_detected, robot.velodyne_data
                if target_detected:
                    robot.canproxy.go_slowly()
                    moving = True
        if not robot.buttonGo:
            print "STOP!"
            break
    robot.canproxy.stop_turn()
    center(robot)
    robot.velodyne.requestStop()
    robot.gps.requestStop()
Example #22
0
def demo(metalog):
    assert metalog is not None

    can_log_name = metalog.getLog('can')
    if metalog.replay:
        if metalog.areAssertsEnabled():
            can = CAN(ReplayLog(can_log_name), skipInit=True)
        else:
            can = CAN(ReplayLogInputsOnly(can_log_name), skipInit=True)
    else:
        can = CAN()
        can.relog(can_log_name)
    can.resetModules(configFn=setup_faster_update)
    robot = JohnDeere(can=can)
    robot.UPDATE_TIME_FREQUENCY = 20.0  # TODO change internal and integrate setup

    robot.localization = None  # TODO


    # GPS
    gps_log_name = metalog.getLog('gps')
    print gps_log_name
    if metalog.replay:
        robot.gps = DummySensor()
        function = SourceLogger(None, gps_log_name).get
    else:
        robot.gps = GPS(verbose=0)
        function = SourceLogger(robot.gps.coord, gps_log_name).get
    robot.gps_data = None
    robot.register_data_source('gps', function, gps_data_extension) 

    # Laser
    laser_log_name = metalog.getLog('laser')
    print laser_log_name
    if metalog.replay:
        robot.laser = DummySensor()
        function = SourceLogger(None, laser_log_name).get
    else:
        robot.laser = LaserIP()
        function = SourceLogger(robot.laser.scan, laser_log_name).get
    robot.laser_data = None
    robot.register_data_source('laser', function, laser_data_extension) 

    robot.gps.start()  # ASAP so we get GPS fix
    robot.laser.start()

    while robot.gas is None:
        robot.update()

    center(robot)
    wait_for_start(robot)

    moving = False
    robot.desired_speed = 0.5
    start_time = robot.time
    prev_gps = robot.gps_data
    prev_destination_dist = None
    while robot.time - start_time < 30*60:  # limit 30 minutes
        robot.update()
        dist = None
        if robot.laser_data is not None:
            assert len(robot.laser_data) == 541,  len(robot.laser_data)
            distL, distR = min_dist_arr(robot.laser_data[200:-200])
            distL = 20.0 if distL is None else distL
            distR = 20.0 if distR is None else distR
            dist = min(distL, distR)
        if robot.gps_data != prev_gps:
            print robot.time, robot.gas, robot.gps_data, (distL, distR)
            prev_gps = robot.gps_data
        if moving:
            if dist is None or dist < SAFE_DISTANCE_STOP:
                print "!!! STOP !!!",  dist, (distL, distR)
                robot.canproxy.stop()
                moving = False

            elif dist < TURN_DISTANCE:
                if abs(robot.steering_angle) < STRAIGHT_EPS:
                    print "DECIDE", distL, distR
                    if distL <= distR:
                        robot.canproxy.set_turn_raw(-100)
                        robot.steering_angle = math.radians(-30)
                    else:
                        robot.canproxy.set_turn_raw(100)
                        robot.steering_angle = math.radians(30)

            elif dist > NO_TURN_DISTANCE:
                if abs(robot.steering_angle) > STRAIGHT_EPS:
                    robot.canproxy.set_turn_raw(0)
                    robot.steering_angle = 0.0

        else:  # not moving
            if dist is not None and dist > SAFE_DISTANCE_GO:
                print "GO",  dist
                robot.canproxy.go()
                moving = True
        if not robot.buttonGo:
            print "STOP!"
            break
    robot.canproxy.stop_turn()
    center(robot)
    robot.laser.requestStop()
    robot.gps.requestStop()
Example #23
0
from gps import GPS
from time import sleep
from bsmLib import tcpClient
from time import sleep
#r = '$GPRMC,154633.000,A,4457.4413,N,09320.5487,W,0.19,0.07,011118,,,A*7B'

tcpClient(host = '192.168.21.153', port = '10002')
t = tcpClient()
t.connect()

while True:
    sleep (2)

    g = GPS()
    r = g.read()

    start = r.find('$GPRMC')
    end = r.find(',0.', start)
    log = r[start:end]

    start2 = log.find('A')
    end2 = log.find('W', start2)
    log2 = log[start2:end2]

    start3 = log2.find('44')
    end3 = log2.find(',N', start3)
    lat = log2[start3:end3]

    start4 = log2.find('09')
    end4 = log2.find(',W,', start4)
    lon = log2[start4:end4]