Ejemplo n.º 1
0
def move(direction):
    # Choose the direction of the request
    if direction == 'camleft':
        video_dir.move_decrease_x()
    elif direction == 'camright':
        video_dir.move_increase_x()
    elif direction == 'camup':
        video_dir.move_increase_y()
    elif direction == 'camdown':
        video_dir.move_decrease_y()
    elif direction == 'camhome':
        video_dir.home_x_y()
    elif direction == 'record':
        subprocess.call(['motion'], shell=True)
    elif direction == 'stoprecord':
        subprocess.call(['./stop.sh'], shell=True)
    elif direction == 'forward':
        motor.forward()
    elif direction == 'reverse':
        motor.backward()
    elif direction == 'left':
        car_dir.turn_left()
    elif direction == 'right':
        car_dir.turn_right()
    elif direction == 'stop':
        motor.ctrl(0)
    elif direction == 'home':
        car_dir.home()
Ejemplo n.º 2
0
 def forward(self, speed_percent, sec=0):
     #ctrl(stasus(1 : on,0 : off), direction (1 : devant de base,-1 : derriere))
     m.ctrl(1)
     m.setSpeed(speed_percent)
     time.sleep(sec)
     if sec != 0:
         m.ctrl(0)
Ejemplo n.º 3
0
def move(direction):
    # Choose the direction of the request
    if direction == 'camleft':
        video_dir.move_decrease_x()
    elif direction == 'camright':
        video_dir.move_increase_x()
    elif direction == 'camup':
        video_dir.move_increase_y()
    elif direction == 'camdown':
        video_dir.move_decrease_y()
    elif direction == 'camhome':
        video_dir.home_x_y()
    elif direction == 'record':
        subprocess.call(['motion'], shell=True)
    elif direction == 'stoprecord':
        subprocess.call(['./stop.sh'], shell=True)
    elif direction == 'forward':
        motor.forward()
    elif direction == 'reverse':
        motor.backward()
    elif direction == 'left':
        car_dir.turn_left()
    elif direction == 'right':
        car_dir.turn_right()
    elif direction == 'stop':
        motor.ctrl(0)
    elif direction == 'home':
        car_dir.home()
Ejemplo n.º 4
0
 def __init__(self):
     print('debug')
     busnum = 0
     logging.info('Creating an SDC object')
     steer_motor.setup()
     print('debug2')
     drive_motor.setup()
     drive_motor.ctrl(1)
     self.spd_cmd = 0
     self.spd_cur = self.spd_cmd
     self.str_cmd = 450
     self.str_cur = self.str_cmd
     steer_motor.home()
Ejemplo n.º 5
0
def pilonhunt():
    print 'Looking for pilons...'
    motor.ctrl(0)
    car_dir.home()
    pilons = []
    #video_dir.maxright()
    #time.sleep(2.0)
    video_dir.tilt_rel(0)
    r = 0.2
    while r < 1:
        #		r = video_dir.pan(100)
        video_dir.tilt_rel(0)
        video_dir.pan_rel(r)
        r = r + 0.2
        time.sleep(1.0)
        pilons.append(len(vision.detect()))
        video_dir.tilt_rel(0.05)
        time.sleep(0.5)
        pilons.append(len(vision.detect()))
    video_dir.home_x()
    print pilons
Ejemplo n.º 6
0
    def __init__(self):
        rospy.loginfo("Setting up the node...")

        rospy.init_node("ts_llc")
        motor.setup()
        motor.ctrl(1)

        #--- Create the actuator dictionary
        self.actuators = {}
        self.actuators['throttle'] = ServoConvert(id=1, centre_value=0)
        motor.setSpeed(0)
        self.actuators['steering'] = ServoConvert(id=2,
                                                  direction=1)  #-positive left

        #--- Create the servo array publisher
        #-- Create the message
        self._servo_msg = ServoArray()
        for i in range(2):
            self._servo_msg.servos.append(Servo())

        self.ros_pub_servo_array = rospy.Publisher("/servos_absolute",
                                                   ServoArray,
                                                   queue_size=1)
        rospy.loginfo("> Publisher correctly initialized")

        #--- Create the subscriber to the /cmd-vel topic
        self.ros_sub_twist = rospy.Subscriber("/cmd_vel", Twist,
                                              self.set_actuator_from_cmdvel)
        #self.motor_sub = rospy.Subscriber("/cmd_vel", Twist, self.move_dc_from_cmdvel)
        rospy.loginfo("> subscriber correctly initialized")

        #--- save the last time we got a reference. Stop the vehicle if no commands given
        self._last_time_cmd_rcv = time.time()
        self._timeout_s = 5  #-- stop after 5 seconds

        rospy.loginfo("Initialization complete")
Ejemplo n.º 7
0
def init():
    motor.setup()
    motor.ctrl(1)
    global pwm
    pwm = servo.PWM()
Ejemplo n.º 8
0
def run_server(key):
    #!/usr/bin/env python
    import RPi.GPIO as GPIO
    import video_dir
    import car_dir
    import motor
    from time import ctime  # Import necessary modules

    ctrl_cmd = [
        'forward', 'backward', 'left', 'right', 'stop', 'read cpu_temp',
        'home', 'distance', 'x+', 'x-', 'y+', 'y-', 'xy_home'
    ]

    busnum = 1  # Edit busnum to 0, if you uses Raspberry Pi 1 or 0

    HOST = ''  # The variable of HOST is null, so the function bind( ) can be bound to all valid addresses.
    PORT = 21567
    BUFSIZ = 1024  # Size of the buffer
    ADDR = (HOST, PORT)

    tcpSerSock = socket(AF_INET, SOCK_STREAM)  # Create a socket.
    tcpSerSock.bind(ADDR)  # Bind the IP address and port number of the server.
    tcpSerSock.listen(
        5
    )  # The parameter of listen() defines the number of connections permitted at one time. Once the
    # connections are full, others will be rejected.

    #video_dir.setup(busnum=busnum)
    #car_dir.setup(busnum=busnum)
    #motor.setup(busnum=busnum)     # Initialize the Raspberry Pi GPIO connected to the DC motor.
    #video_dir.home_x_y()
    #car_dir.home()

    while True:
        print 'Waiting for connection...'
        # Waiting for connection. Once receiving a connection, the function accept() returns a separate
        # client socket for the subsequent communication. By default, the function accept() is a blocking
        # one, which means it is suspended before the connection comes.
        tcpCliSock, addr = tcpSerSock.accept()
        print '...connected from :', addr  # Print the IP address of the client connected with the server.

        while True:
            try:
                data = ''
                data = tcpCliSock.recv(
                    BUFSIZ)  # Receive data sent from the client.
                print "\nEncrypted command recieved from client = ,", eval(
                    data)[2]
                data = crypto.AES_decrypt(eval(data), key)
            except:
                print "INCOMPLETE PACKET ERROR - try to input the command again"
            # Analyze the command received and control the car accordingly.

            if not data:
                break
            if data == ctrl_cmd[0]:
                print 'motor moving forward'
                motor.forward()
            elif data == ctrl_cmd[1]:
                print 'recv backward cmd'
                motor.backward()
            elif data == ctrl_cmd[2]:
                print 'recv left cmd'
                car_dir.turn_left()
            elif data == ctrl_cmd[3]:
                print 'recv right cmd'
                car_dir.turn_right()
            elif data == ctrl_cmd[6]:
                print 'recv home cmd'
                car_dir.home()
            elif data == ctrl_cmd[4]:
                print 'recv stop cmd'
                motor.ctrl(0)
            elif data == ctrl_cmd[5]:
                print 'read cpu temp...'
                temp = cpu_temp.read()
                tcpCliSock.send('[%s] %0.2f' % (ctime(), temp))
            elif data == ctrl_cmd[8]:
                print 'recv x+ cmd'
                video_dir.move_increase_x()
            elif data == ctrl_cmd[9]:
                print 'recv x- cmd'
                video_dir.move_decrease_x()
            elif data == ctrl_cmd[10]:
                print 'recv y+ cmd'
                video_dir.move_increase_y()
            elif data == ctrl_cmd[11]:
                print 'recv y- cmd'
                video_dir.move_decrease_y()
            elif data == ctrl_cmd[12]:
                print 'home_x_y'
                video_dir.home_x_y()
            elif data[0:5] == 'speed':  # Change the speed
                print data
                numLen = len(data) - len('speed')
                if numLen == 1 or numLen == 2 or numLen == 3:
                    tmp = data[-numLen:]
                    print 'tmp(str) = %s' % tmp
                    spd = int(tmp)
                    print 'spd(int) = %d' % spd
                    if spd < 24:
                        spd = 24
                    motor.setSpeed(spd)
            elif data[0:5] == 'turn=':  #Turning Angle
                print 'data =', data
                angle = data.split('=')[1]
                try:
                    angle = int(angle)
                    car_dir.turn(angle)
                except:
                    print 'Error: angle =', angle
            elif data[0:8] == 'forward=':
                print 'data =', data
                spd = data[8:]
                try:
                    spd = int(spd)
                    motor.forward(spd)
                except:
                    print 'Error speed =', spd

            elif data[0:9] == 'backward=':
                print 'data =', data
                spd = data.split('=')[1]
                try:
                    spd = int(spd)
                    motor.backward(spd)
                except:
                    print 'ERROR, speed =', spd

            else:
                #print 'Command Error! Cannot recognize command: ' + data
                print "COMMAND ERROR - Unable to interpret recieved command"
    tcpSerSock.close()
Ejemplo n.º 9
0
 def backward(self, speed_percent, sec=0):
     m.ctrl(1, -1)
     m.setSpeed(speed_percent)
     time.sleep(sec)
     if sec != 0:
         m.ctrl(0)
    def run(self):

        while True:
            print 'Waiting for connection...'

            tcpCliSock, addr = tcpSerSock.accept()
            print '...connected from :', addr

            while True:
                data = ''
                data = tcpCliSock.recv(BUFSIZ)
                if not data:
                    break
                if data == ctrl_cmd[0]:
                    print 'motor moving forward'
                    motor.forward()
                elif data == ctrl_cmd[1]:
                    print 'recv backward cmd'
                    motor.backward()
                elif data == ctrl_cmd[2]:
                    print 'recv left cmd'
                    car_dir.turn_left()
                elif data == ctrl_cmd[3]:
                    print 'recv right cmd'
                    car_dir.turn_right()
                elif data == ctrl_cmd[6]:
                    print 'recv home cmd'
                    car_dir.home()
                elif data == ctrl_cmd[4]:
                    print 'recv stop cmd'
                    motor.ctrl(0)
                elif data == ctrl_cmd[5]:
                    print 'read cpu temp...'
                    temp = cpu_temp.read()
                    tcpCliSock.send('[%s] %0.2f' % (ctime(), temp))
                elif data == ctrl_cmd[8]:
                    print 'recv x+ cmd'
                    video_dir.move_increase_x()
                elif data == ctrl_cmd[9]:
                    print 'recv x- cmd'
                    video_dir.move_decrease_x()
                elif data == ctrl_cmd[10]:
                    print 'recv y+ cmd'
                    video_dir.move_increase_y()
                elif data == ctrl_cmd[11]:
                    print 'recv y- cmd'
                    video_dir.move_decrease_y()
                elif data == ctrl_cmd[12]:
                    print 'home_x_y'
                    video_dir.home_x_y()
                elif data[0:5] == 'speed':
                    print data
                    numLen = len(data) - len('speed')
                    if numLen == 1 or numLen == 2 or numLen == 3:
                        tmp = data[-numLen:]
                        print 'tmp(str) = %s' % tmp
                        spd = int(tmp)
                        print 'spd(int) = %d' % spd
                        if spd < 24:
                            spd = 24
                        motor.setSpeed(spd)
                elif data[0:5] == 'turn=':
                    print 'data =', data
                    angle = data.split('=')[1]
                    try:
                        angle = int(angle)
                        car_dir.turn(angle)
                    except:
                        print 'Error: angle =', angle
                elif data[0:8] == 'forward=':
                    print 'data =', data
                    spd = data[8:]
                    try:
                        spd = int(spd)
                        motor.forward(spd)
                    except:
                        print 'Error speed =', spd
                elif data[0:9] == 'backward=':
                    print 'data =', data
                    spd = data.split('=')[1]
                    try:
                        spd = int(spd)
                        motor.backward(spd)
                    except:
                        print 'ERROR, speed =', spd

                else:
                    print 'Command Error! Cannot recognize command: ' + data

        tcpSerSock.close()
Ejemplo n.º 11
0
 def stop(self):
     m.ctrl(0)
while True:
	print 'Waiting for connection...'
	# Waiting for connection. Once receiving a connection, the function accept() returns a separate 
	# client socket for the subsequent communication. By default, the function accept() is a blocking 
	# one, which means it is suspended before the connection comes.
	tcpCliSock, addr = tcpSerSock.accept() 
	print '...connected from :', addr     # Print the IP address of the client connected with the server.

	while True:
		data = tcpCliSock.recv(BUFSIZ)    # Receive data sent from the client. 
		# Analyze the command received and control the car accordingly.
		if not data:
			break
		if data == ctrl_cmd[0]:
			print 'motor moving forward'
			motor.ctrl(1, 1)
		elif data == ctrl_cmd[1]:
			print 'recv backward cmd'
			motor.ctrl(1, -1)
		elif data == ctrl_cmd[2]:
			print 'recv left cmd'
			car_dir.turn_left()
		elif data == ctrl_cmd[3]:
			print 'recv right cmd'
			car_dir.turn_right()
		elif data == ctrl_cmd[6]:
			print 'recv home cmd'
			car_dir.home()
		elif data == ctrl_cmd[4]:
			print 'recv stop cmd'
			motor.ctrl(0)
Ejemplo n.º 13
0
 def stop(self):
     motor.ctrl(0)
     return self.ack()
Ejemplo n.º 14
0
def mover():
    #Init variables for the control loop
    counter = 1
    bDriving = False
    bEndLoops = False

    sRobotDirection = Direction()

    rospy.init_node('mover', anonymous=True)

    rospy.Subscriber("motioncommand", String,
                     sRobotDirection.direction_callback)

    scooper_dir.setup(busnum=busnum)
    car_dir.setup(busnum=busnum)

    # Initialize the Raspberry Pi GPIO connected to the DC motor.
    motor.setup(busnum=busnum)

    #video_dir.home_x_y()
    #scooper_dir.servo_test ()
    car_dir.home()

    # Loop to wait for received commands.
    while (bEndLoops == False):

        # Loop to perform movement controls while input received.
        while (bEndLoops == False):

            data = sRobotDirection.directionMsg

            # Analyze the command received and control the car accordingly.
            #doAction (data, counter)
            #counter += 1
            #print counter

            if not data:
                break

            if data == ctrl_cmd[0]:
                print 'ELFF WILL DRIVE'
                counter += 1
                print counter

                try:
                    spd = 20
                    #print "Moving forward with speed!"
                    motor.forwardWithSpeed(spd)
                except:
                    print 'Error speed =' + str(spd)

            elif data == ctrl_cmd[1]:
                print 'ELFF WILL REVERSE'
                counter += 1
                print counter

                try:
                    spd = 20
                    #print "Moving backward with speed!"
                    motor.backwardWithSpeed(spd)
                except:
                    print 'Error speed =' + str(spd)

            elif data == ctrl_cmd[2]:
                print 'ELFF WILL GO LEFT'
                counter += 1
                car_dir.turn_left()

            elif data == ctrl_cmd[3]:
                print 'ELFF WILL GO RIGHT'
                counter += 1
                car_dir.turn_right()

            elif data == ctrl_cmd[4]:
                print 'ELFF WILL SCOOP'

                scooper_dir.home_x_y()
                scooper_dir.doScoop()
                scooper_dir.home_x_y()

            # Used with publisher.py only as a debug method.
            elif data == ctrl_cmd[5]:
                print 'ELFF WILL RESET POSITION'
                scooper_dir.home_x_y()
                car_dir.home()
                motor.ctrl(0)

                bEndLoops = True

            elif data == ctrl_cmd[6]:
                print 'ELFF WILL STOP'
                counter += 1
                print counter
                try:
                    spd = 0
                    motor.forwardWithSpeed(spd)
                except:
                    print 'Error speed =' + str(spd)

            else:
                print 'Waiting to receive a command...'
Ejemplo n.º 15
0
def motor_stop(request):
	motor.ctrl(0)
	return HttpResponse("Motor stop")
Ejemplo n.º 16
0
while True:
    print 'Waiting for connection...'
    # Waiting for connection. Once receiving a connection, the function accept() returns a separate
    # client socket for the subsequent communication. By default, the function accept() is a blocking
    # one, which means it is suspended before the connection comes.
    tcpCliSock, addr = tcpSerSock.accept()
    print '...connected from :', addr  # Print the IP address of the client connected with the server.

    while True:
        data = tcpCliSock.recv(BUFSIZ)  # Receive data sent from the client.
        # Analyze the command received and control the car accordingly.
        if not data:
            break
        if data == ctrl_cmd[0]:
            print 'motor moving forward'
            motor.ctrl(1, 1)
        elif data == ctrl_cmd[1]:
            print 'recv backward cmd'
            motor.ctrl(1, -1)
        elif data == ctrl_cmd[2]:
            print 'recv left cmd'
            car_dir.turn_left()
        elif data == ctrl_cmd[3]:
            print 'recv right cmd'
            car_dir.turn_right()
        elif data == ctrl_cmd[6]:
            print 'recv home cmd'
            car_dir.home()
        elif data == ctrl_cmd[4]:
            print 'recv stop cmd'
            motor.ctrl(0)
def process_request(data):
    # Analyze the command received and control the car accordingly.
    if not data:
        return "cmd not understood"
    if data == ctrl_cmd[0]:
        print('motor moving forward')
        motor.forward()
    elif data == ctrl_cmd[1]:
        print('recv backward cmd')
        motor.backward()
    elif data == ctrl_cmd[2]:
        print('recv left cmd')
        car_dir.turn_left()
    elif data == ctrl_cmd[3]:
        print('recv right cmd')
        car_dir.turn_right()
    elif data == ctrl_cmd[6]:
        print('recv home cmd')
        car_dir.home()
    elif data == ctrl_cmd[4]:
        print('recv stop cmd')
        motor.ctrl(0)
    elif data == ctrl_cmd[5]:
        print('read cpu temp...')
        temp = cpu_temp.read()
        tcpCliSock.send('[%s] %0.2f' % (ctime(), temp))
    elif data == ctrl_cmd[8]:
        print('recv x+ cmd')
        video_dir.move_increase_x()
    elif data == ctrl_cmd[9]:
        print('recv x- cmd')
        video_dir.move_decrease_x()
    elif data == ctrl_cmd[10]:
        print('recv y+ cmd')
        video_dir.move_increase_y()
    elif data == ctrl_cmd[11]:
        print('recv y- cmd')
        video_dir.move_decrease_y()
    elif data == ctrl_cmd[12]:
        print('home_x_y')
        video_dir.home_x_y()
    elif data[0:5] == 'speed':     # Change the speed
        print(data)
        numLen = len(data) - len('speed')
        if numLen == 1 or numLen == 2 or numLen == 3:
            tmp = data[-numLen:]
            print('tmp(str) = %s' % tmp)
            spd = int(tmp)
            print('spd(int) = %d' % spd)
            if spd < 24:
                spd = 24
            motor.setSpeed(spd)
    elif data[0:5] == 'turn=':  # Turning Angle
        print('data =', data)
        angle = data.split('=')[1]
        try:
            angle = int(angle)
            car_dir.turn(angle)
        except:
            print('Error: angle =', angle)
    elif data[0:8] == 'forward=':
        print('data =', data)
        spd = data[8:]
        try:
            spd = int(spd)
            motor.forward(spd)
        except:
            print('Error speed =', spd)
    elif data[0:9] == 'backward=':
        print('data =', data)
        spd = data.split('=')[1]
        try:
            spd = int(spd)
            motor.backward(spd)
        except:
            print('ERROR, speed =', spd)
    else:
        print('Command Error! Cannot recognize command: ' + data)
Ejemplo n.º 18
0
def SrvCommand(cmd):
    result = 'ERROR'
    num = 0
    for str in cmd.split(' '):
        num += 1
    #print "split number {0}".format(num)
    if num < 2:
        print "format dont match \n"
        return result
    header = cmd.split(' ')[0]
    type = cmd.split(' ')[1]

    if header == "motor":
        if num < 3:
            print "format dont match \n"
            return result

        para = cmd.split(' ')[2]

        if type == 'read':
            result = motor.state()
        elif type == 'write':
            result = motor.ctrl(para)
        elif type == 'getspeed':
            result = motor.getSpeed()
        elif type == 'setspeed':
            result = motor.setSpeed(para)
        else:
            print "motor: ctrl type error"
    elif header == "car":
        if type == 'go':
            result = car.ctrl("right", 1)
            result = car.ctrl("left", 1)
        elif type == 'right':
            result = car.ctrl("right", 0)
            result = car.ctrl("left", 1)
        elif type == 'left':
            result = car.ctrl("right", 1)
            result = car.ctrl("left", 0)
        elif type == 'back':
            result = car.ctrl("right", -1)
            result = car.ctrl("left", -1)
        elif type == 'bright':
            result = car.ctrl("right", 0)
            result = car.ctrl("left", -1)
        elif type == 'bleft':
            result = car.ctrl("right", -1)
            result = car.ctrl("left", 0)
        elif type == 'stop':
            result = car.ctrl("right", 0)
            result = car.ctrl("left", 0)
        else:
            print "car: ctrl type error"
    elif header == "zoom":
        if type == 'in':
            #pos =str(int( lens.getPos("focus")) + 100)
            #print "pos",pos
            result = lens.ctrl("zoom", 200)
        elif type == 'out':
            pos = lens.getPos("zoom")
            print "pos", pos
            if int(pos) > 10:
                result = lens.ctrl("zoom", -200)
            else:
                print "overrange"
        else:
            print "zoom: ctrl type error"
    elif header == "focus":
        if type == 'near':
            result = lens.ctrl("focus", 10)
        elif type == 'far':
            result = lens.ctrl("focus", -10)
        else:
            print "focus: ctrl type error"
    else:
        print "header error"
    return result
Ejemplo n.º 19
0
def CarController(socket):
    while True:
        print 'Waiting for connection to car controller service...'
        # Waiting for connection. Once receiving a connection, the function accept() returns a separate
        # client socket for the subsequent communication. By default, the function accept() is a blocking
        # one, which means it is suspended before the connection comes.
        clientSocket, addr = socket.accept()
        print '...connected to car controller service:', addr  # Print the IP address of the client connected with the server.

        lastCmd = ''

        while True:
            msgs = ''
            recdata = clientSocket.recv(BUFSIZ)
            # Receive data sent from the client.
            # Analyze the command received and control the car accordingly.
            msgs = recdata.split(';')
            #print("Received", len(msgs), "new messages")
            for data in msgs:
                if not data:
                    break

                if lastCmd == data:
                    print("Last Command:", lastCmd, "Current Data:", data,
                          "Ignoring")
                    break

                if data == ctrl_cmd[0]:
                    print 'motor moving forward'
                    motor.forward()
                elif data == ctrl_cmd[1]:
                    print 'recv backward cmd'
                    motor.backward()
                elif data == ctrl_cmd[2]:
                    print 'recv left cmd'
                    car_dir.turn_left()
                elif data == ctrl_cmd[3]:
                    print 'recv right cmd'
                    car_dir.turn_right()
                elif data == ctrl_cmd[6]:
                    print 'recv home cmd'
                    car_dir.home()
                elif data == ctrl_cmd[4]:
                    print 'recv stop cmd'
                    motor.ctrl(0)
                elif data == ctrl_cmd[5]:
                    print 'read cpu temp...'
                    temp = cpu_temp.read()
                    tcpCliSock.send('[%s] %0.2f' % (ctime(), temp))
                elif data[0:5] == 'speed':
                    #print data
                    numLen = len(data) - len('speed')
                    if numLen == 1 or numLen == 2 or numLen == 3:
                        tmp = data[-numLen:]
                        #print 'tmp(str) = %s' % tmp
                        spd = int(tmp)
                        #print 'spd(int) = %d' % spd
                        if spd < 24:
                            spd = 24
                        motor.setSpeed(spd)
                elif data[0:8] == 'network=':
                    print 'network =', data
                    spd = data.split('=')[1]
                    try:
                        spd = int(spd)
                        os.system('sudo tc qdisc del dev wlan0 root')
                        os.system(
                            'sudo tc qdisc add dev wlan0 root netem delay {0}ms'
                            .format(spd))
                    except:
                        print 'ERROR , speed =', spd
                elif data[0:7] == 'offset=':
                    print 'offset called, data = ', data
                    offset = int(data[7:]) + 28
                    car_dir.calibrate(offset)
                elif data[0:8] == 'forward=':
                    #print 'data =', data
                    spd = data.split('=')[1]
                    try:
                        spd = int(spd)
                        motor.setSpeed(spd)
                        motor.forward()
                    except:
                        print 'Error speed =', spd
                elif data[0:9] == 'backward=':
                    #print 'data =', data
                    spd = data.split('=')[1]
                    try:
                        spd = int(spd)
                        motor.setSpeed(spd)
                        motor.backward()
                    except:
                        print 'ERROR , speed =', spd

                else:
                    print 'Command Error! Cannot recognize command: ' + data
Ejemplo n.º 20
0
def server(
    value, collision
):  #get value as Direction and collision as Collision detection from Shared memory
    pre_dir = 'home'
    x = 0
    flag = 0
    while True:
        sys.stdout.flush()
        print 'Waiting for connection...'
        # Waiting for connection. Once receiving a connection, the function accept() returns a separate
        # client socket for the subsequent communication. By default, the function accept() is a blocking
        # one, which means it is suspended before the connection comes.
        tcpCliSock, addr = tcpSerSock.accept()
        print '...connected from :', addr  # Print the IP address of the client connected with the server.

        while True:
            data = ''
            data = tcpCliSock.recv(BUFSIZ)
            # Receive data sent from the client.
            # Analyze the command received and control the car accordingly.
            print data
            if not data:
                break
            if x == 1:
                if flag < 5:
                    flag = flag + 1
                    continue  #if there is any collision, Do not receive data from client.If so, Get stacked!
            x = 0  #after refusing data from client, start receiving
            flag = 0
            if data == ctrl_cmd[0]:  #If Client send message "forward"
                if collision.value == 1:  #if there is obstacle in front of iCar
                    motor.ctrl(0)  #stop
                else:
                    motor.forward()  #Run the motors to forward
            elif data == ctrl_cmd[1]:  #If Client send message "backward"
                motor.backward()

            elif data == ctrl_cmd[2]:  #If Client send message "left"
                car_dir.turn_left()  #change car direction to Left

            elif data == ctrl_cmd[3]:  #If Client send message "right"
                car_dir.turn_right()  #change car direction to Right

            elif data == ctrl_cmd[6]:  #If Client send message "home"
                car_dir.home()  #Set car direction to center

            elif data == ctrl_cmd[4]:  #if Client send message "stop"
                motor.ctrl(0)  #Stop Motor running

            elif data == ctrl_cmd[
                    5]:  #If Client click auto button, send message "auto"
                #auto drive
                motor.setSpeed(44)  #Set motor speed with  optimized speed 44
                temp = value.value  #get Value from jeongwook.py that is information of Car Direction

                if collision.value != 0:  #If there is Collision
                    print 'Collision detected'
                    if collision.value == 1:  #Collision in front of iCar
                        print "Obstacle In Front"
                        motor.collision_auto(
                        )  #collision_auto function let iCar move backward
                        car_dir.turn_right()  #to avoid collision, turn right
                        motor.forward_auto(
                        )  #move only for 0.8second (forward_auto let iCar move for 0.2second)
                        motor.forward_auto()
                        motor.forward_auto()
                        motor.forward_auto()
                        car_dir.home()
                        motor.forward_auto()
                        motor.forward_auto()
                        pre_dir = 'left'  #if iCar cannot detect any lane, it SHOULD BE on left side, so makes iCar go left after avoiding
                    elif collision.value == 2:  #Collision on Left side
                        print "Obstacle is on Left"
                        motor.collision_auto()
                        car_dir.turn_right()  #to avoid collision, turn right
                        motor.forward_auto()
                        motor.forward_auto()
                        motor.forward_auto()
                        motor.forward_auto()
                        car_dir.home()
                        motor.forward_auto()
                        motor.forward_auto()
                        pre_dir = 'left'
                    elif collision.value == 3:  #go left
                        print "Obstacle is on Right"
                        motor.collision_auto()
                        car_dir.turn_left()  #to avoid collision, turn left
                        motor.forward_auto()
                        motor.forward_auto()
                        motor.forward_auto()
                        motor.forward_auto()
                        car_dir.home()
                        motor.forward_auto()
                        motor.forward_auto()
                        pre_dir = 'right'  #if iCar cannot detect any lane, it SHOULD BE on right side, so makes iCar go right after avoiding

                    collision.value = 0

                    x = 1  #set x = 1 to Not receiving data from client for a moment

                elif temp == 1:  #iCar is on Lane, Go with center direction
                    print 'Lane is on my way'
                    car_dir.home()
                    motor.forward_auto()  #move iCar for 0.2second with 44speed
                    #because of camera delay

                elif temp == 2:  #lane is located on left side
                    print 'Lane is on left side'
                    car_dir.turn_left()
                    motor.forward_auto()
                    pre_dir = 'left'

                elif temp == 3:  #lane is located on right side
                    print 'Lane is on right side'
                    car_dir.turn_right()
                    motor.setSpeed(44)
                    motor.forward_auto()
                    pre_dir = 'right'
                else:
                    if pre_dir == 'right':  #when No detection but predict that lane is on right side
                        print 'cannot find but go right'
                        car_dir.turn_right()
                        motor.setSpeed(44)
                        motor.forward_auto()

                    elif pre_dir == 'left':  #when No detection but predict that lane is on left side
                        print 'cannot find but go left'
                        car_dir.turn_left()
                        motor.forward_auto()

                    else:
                        print 'Cannot find a Lane'  #No detection with no prediction
                        car_dir.home()  #set center direction and stop
                        motor.backward()
                        time.sleep(0.6)
                        motor.ctrl(0)
                        time.sleep(1)

            elif data == ctrl_cmd[7]:  #move camera right
                video_dir.move_increase_x()
            elif data == ctrl_cmd[8]:  #move camera left
                video_dir.move_decrease_x()
            elif data == ctrl_cmd[9]:  #move camera up
                video_dir.move_increase_y()
            elif data == ctrl_cmd[10]:  #move camera down
                video_dir.move_decrease_y()

            elif data[0:5] == 'speed':  # Change the speed
                print data
                numLen = len(data) - len('speed')
                if numLen == 1 or numLen == 2 or numLen == 3:
                    tmp = data[-numLen:]
                    spd = int(tmp)
                    if spd < 24:
                        spd = 24
                    motor.setSpeed(spd)

            elif data[
                    0:
                    7] == 'leftPWM':  #If Client send message like ~PWM, it is for initialization or servo motor that control Car direction.
                numLen = len(data) - len('leftPWM')
                pwm = data[-numLen:]
                leftpwm = int(pwm)

                car_dir.change_left(leftpwm)
            elif data[0:7] == 'homePWM':
                numLen = len(data) - len('homePWM')
                pwm = data[-numLen:]
                homepwm = int(pwm)

                car_dir.change_home(homepwm)
            elif data[0:8] == 'rightPWM':
                numLen = len(data) - len('rightPWM')
                pwm = data[-numLen:]
                rightpwm = int(pwm)
                car_dir.change_right(rightpwm)

            else:
                print 'Command Error! Cannot recognize command: ' + data

    tcpSerSock.close()
Ejemplo n.º 21
0
 def stop_driving(self):
     sfdriving.ctrl(0)
     return True
			motor.forward()
		elif data == ctrl_cmd[1]:
			print 'recv backward cmd'
			motor.backward()
		elif data == ctrl_cmd[2]:
			print 'recv left cmd'
			car_dir.turn_left()
		elif data == ctrl_cmd[3]:
			print 'recv right cmd'
			car_dir.turn_right()
		elif data == ctrl_cmd[6]:
			print 'recv home cmd'
			car_dir.home()
		elif data == ctrl_cmd[4]:
			print 'recv stop cmd'
			motor.ctrl(0)
		elif data == ctrl_cmd[5]:
			print 'read cpu temp...'
			temp = cpu_temp.read()
			tcpCliSock.send('[%s] %0.2f' % (ctime(), temp))
		elif data == ctrl_cmd[8]:
			print 'recv x+ cmd'
			video_dir.move_increase_x()
		elif data == ctrl_cmd[9]:
			print 'recv x- cmd'
			video_dir.move_decrease_x()
		elif data == ctrl_cmd[10]:
			print 'recv y+ cmd'
			video_dir.move_increase_y()
		elif data == ctrl_cmd[11]:
			print 'recv y- cmd'
Ejemplo n.º 23
0
if __name__ == '__main__':
    # Obstacle Detection
    sleep_time = 0.3
    GPIO.setmode(GPIO.BOARD)

    # Settings initialization
    busnum = 1          # Edit busnum to 0, if you uses Raspberry Pi 1 or 0
    video_dir.setup(busnum=busnum)
    car_dir.setup(busnum=busnum)
    motor.setup(busnum=busnum)     # Initialize the Raspberry Pi GPIO connected to the DC motor.
    motor.setSpeed(50)
    video_dir.home_x_y()
    car_dir.home()

    motor.ctrl(0)

    # Load classifier

    model_path = os.path.join('..', '..', 'models', 'model_aug_bright.h5')
    model = load_model(model_path)

    ctrl_cmd = ['forward',
                'backward',
                'left',
                'right',
                'stop',
                'read cpu_temp',
                'home',
                'distance',
                'x+',
Ejemplo n.º 24
0
        def __init__(self):
            threading.Thread.__init__(self)
            self.model = load_model(os.path.join('..', '..', 'models', 'sign_classification')

        def run(self):
            while True:
                if output_full is not None:
                    global stop_detected
                    global lstop_detected
                    stop_detected = self.model.predict(output_full)
                    if stop_detected:
                        sleep(1)
                        lstop_detected = True
                        stop_detected = False
                        sleep(1)

    threadss = SignsThread()
    threadss.start()

    time.sleep(2)

    ultrason = ultrasonic.UltrasonicAsync(sleep_time)
    ultrason.start()
    obstacleExist = False

    motor.forward()

    while True:
        data = ''

        # Check of obstacles
        if ultrason.dist < 20:
            motor.ctrl(0)
            obstacleExist = True

        while obstacleExist:
            time.sleep(sleep_time)
            if ultrason.dist < 20:
                obstacleExist = False
                motor.forward()

        # Take input from camera
        output_full2 = np.empty(480 * 640 * 3, dtype=np.uint8)
        cam.capture(output_full2, 'bgr', use_video_port=True)

        output_full = output_full2.reshape((480, 640, 3))
        crop_idx = int(output_full.shape[0] / 2)
        output = output_full[crop_idx:, :]

        img_detection = imresize(output, (120, 160))

        pred = model.predict(img_detection.reshape((1, 120, 160, 3)))
        speed_pred = pred[1][0][0]
        motor.setSpeed(int(speed_pred * 62 + 40))
        pred = pred[0][0][0]

        i += 1

        data = ctrl_cmd[0]
        if stop_detected:
            data = ctrl_cmd[4]
Ejemplo n.º 25
0
def on_message(ws, data):
    print data
    # Analyze the command received and control the car accordingly.
    #if not data:

    if data == ctrl_cmd[0]:
        print 'motor moving forward'
        motor.forward()
    elif data == ctrl_cmd[1]:
        print 'recv backward cmd'
        motor.backward()
    elif data == ctrl_cmd[2]:
        print 'recv left cmd'
        car_dir.turn_left()
    elif data == ctrl_cmd[3]:
        print 'recv right cmd'
        car_dir.turn_right()
    elif data == ctrl_cmd[6]:
        print 'recv home cmd'
        car_dir.home()
    elif data == ctrl_cmd[4]:
        print 'recv stop cmd'
        motor.ctrl(0)
    elif data == ctrl_cmd[5]:
        print 'read cpu temp...'
        temp = cpu_temp.read()
        tcpCliSock.send('[%s] %0.2f' % (ctime(), temp))
    elif data == ctrl_cmd[8]:
        print 'recv x+ cmd'
        video_dir.move_increase_x()
    elif data == ctrl_cmd[9]:
        print 'recv x- cmd'
        video_dir.move_decrease_x()
    elif data == ctrl_cmd[10]:
        print 'recv y+ cmd'
        video_dir.move_increase_y()
    elif data == ctrl_cmd[11]:
        print 'recv y- cmd'
        video_dir.move_decrease_y()
    elif data == ctrl_cmd[12]:
        print 'home_x_y'
        video_dir.home_x_y()
    elif data[0:12] == ctrl_cmd[13]:     # Change the speed
        print data
        #numLen = len(data) - len('speed')
        #if numLen == 1 or numLen == 2 or numLen == 3:
        #    tmp = data[-numLen:]
        #    print 'tmp(str) = %s' % tmp
        #    spd = int(tmp)
        #    print 'spd(int) = %d' % spd
        #    if spd < 24:
        #        spd = 24
        motor.setSpeed(30)
    elif data[0:5] == 'turn=':	#Turning Angle
        print 'data =', data
        angle = data.split('=')[1]
        try:
            angle = int(angle)
            car_dir.turn(angle)
        except:
            print 'Error: angle =', angle
    elif data[0:8] == 'forward=':
        print 'data =', data
        spd = 30
        try:
            spd = int(spd)
            motor.forward(spd)
        except:
            print 'Error speed =', spd
    elif data[0:9] == 'backward=':
        print 'data =', data
        spd = data.split('=')[1]
        try:
            spd = int(spd)
            motor.backward(spd)
        except:
            print 'ERROR, speed =', spd

    else:
        print 'Command Error! Cannot recognize command: ' + data
Ejemplo n.º 26
0
			motor.forward()
		elif data == ctrl_cmd[1]:
			
			motor.backward()
		elif data == ctrl_cmd[2]:
			
			car_dir.turn_left()
		elif data == ctrl_cmd[3]:
			
			car_dir.turn_right()
		elif data == ctrl_cmd[6]:
			
			car_dir.home()
		elif data == ctrl_cmd[4]:
			
			motor.ctrl(0)
		elif data == ctrl_cmd[5]:
			
			temp = cpu_temp.read()
			tcpCliSock.send('[%s] %0.2f' % (ctime(), temp))
		elif data == ctrl_cmd[8]:
			
			video_dir.move_increase_x()
		elif data == ctrl_cmd[9]:
			
			video_dir.move_decrease_x()
		elif data == ctrl_cmd[10]:
			
			video_dir.move_increase_y()
		elif data == ctrl_cmd[11]:
			
Ejemplo n.º 27
0
 def motor_stop(self):
     motor.ctrl(0)