A robot called p1x37

IOT mandatory assignment

By Allan Nielsen & Mads Veelsgaard Nielsen

 

Vores problemstilling erKan vi sende kommandoer fra en computer til vores Rapiro og fjernstyre den.
Idéer

  • Webservice
    Vores første idé var at vi havde muligheden for at kontrollere flere robotter igennem internet vha. en webservice. Vi havde ikke nok viden til at kunne lave det, og vi fandt ud af at det ville tage for lang tid at skulle til at programmere på så kort tid.

 

  • PS4 controller
    Vi tilslutter vores PS4 controller til en bærbar og via UDP forbinder vi til en raspberry pi3 i Rapiroen, vi bruger en client-server arkitektur, hvor computeren med vores controller er client og raspberry pi’en er vores server.

Konklusion

Vi fik lavet vores Rapiro og udført nogle commands via dens tilhørende Arduino SDK.
Vi fik lavet en client server-arkitektur, vi har fået forbindelse til vores server ved at sende en simpel streng til vores raspberry Pi fra computeren. Vi har arbejdet ud fra et Python script til en PS4 controller, som skulle oversætte kommandoer fra Playstation controlleren til en enkel måde at bearbejde dataen, med Python.
Vi fik besvær med at få forbindelsen mellem Raspberry Pi’en og Arduino’en og har derved ikke fået testet om Python scriptet er kompatibel med Arduino’en.

 

UDP Client

#! /usr/bin/env python

import socket

UDP_IP = "192.168.0.102"
UDP_PORT = 6789
MESSAGE = "Hello, World!"


print("UDP target IP:", UDP_IP)
print("UDP target port:", UDP_PORT)
print("message:", MESSAGE)

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(MESSAGE.encode(), (UDP_IP, UDP_PORT))

 

UDP Server

#! /usr/bin/env python

import socket
import serial

UDP_PORT = 6789

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

server.bind(("", UDP_PORT))

# ser = serial.Serial('/dev/tty.usbserial', 9600)
# ser.write(b'5')

while True:
    data, addr = server.recvfrom(1024) # buffer size is 1024 bytes
    print("received message:", data)

 

PsController

#! /usr/bin/env python

import os
import platform
import pprint
import pygame
import socket


class PS4Controller(object):
    """Class representing the PS4 controller. Pretty straightforward functionality."""
    controller = None
    axis_data = None
    button_data = None
    hat_data = None

    command = "!M0"

    def init(self):
        """Initialize the joystick components"""
        pygame.init()
        pygame.joystick.init()
        self.controller = pygame.joystick.Joystick(0)
        self.controller.init()

    def listen(self):
        """Listen for events to happen"""
        if not self.axis_data:
            self.axis_data = {}

        if not self.button_data:
            self.button_data = {}
            for i in range(self.controller.get_numbuttons()):
                self.button_data[i] = False

        if not self.hat_data:
            self.hat_data = {}
            for i in range(self.controller.get_numhats()):
                self.hat_data[i] = (0, 0)

        while True:
            for event in pygame.event.get():
                if event.type == pygame.JOYAXISMOTION:
                    self.axis_data[event.axis] = round(event.value, 2)
                elif event.type == pygame.JOYBUTTONDOWN:
                    self.button_data[event.button] = True
                elif event.type == pygame.JOYBUTTONUP:
                    self.button_data[event.button] = False
                elif event.type == pygame.JOYHATMOTION:
                    self.hat_data[event.hat] = event.value

                """
                command	        action	                    eye color
                -----------------------------------------------------
                #M0	            Stop	                    Blue
                #M1	            Move Forward	            Blue
                #M2	            Move Back	                Blue
                #M3	            Turn right	                Blue
                #M4	            Turn left	                Blue
                #M5	            Wave both hands	            Green
                #M6	            Wave right hands	        Yellow
                #M7	            Grip both hands	            Blue
                #M8	            Wave left hand	            Red
                #M9	            Stretch out right hand	    Blue
                """

                """
                CONTROL DEFAULT MODE
                """
                # conditions = self.button_data == BCP.no_action() and self.axis_data == ACP.no_action() and self.hat_data == DCP.no_action()
                # if conditions:
                #     command = "!M0"
                #     print(command)

                """
                BUTTONS
                """
                if self.button_data[0]:
                    command = "!M6"
                    print(command)
                elif self.button_data[1]:
                    command = "!M5"
                    print(command)
                elif self.button_data[2]:
                    command = "!M7"
                    print(command)
                elif self.button_data[3]:
                    command = "!M8"
                    print(command)
                elif self.button_data[4]:
                    command = "!M9"
                    print(command)
                elif self.button_data[5]:
                    return
                elif self.button_data[6]:
                    return
                elif self.button_data[7]:
                    return
                elif self.button_data[8]:
                    return
                elif self.button_data[9]:
                    return
                elif self.button_data[10]:
                    command = "!M0"
                    print(command)
                elif self.button_data[11]:
                    return
                elif self.button_data[12]:
                    return

                """
                ANALOG
                """
                if self.axis_data[0]:
                    command = "!M1"
                    print(command)
                elif self.axis_data[2]:
                    command = "!M2"
                    print(command)
                elif self.axis_data[3]:
                    command = "!M4"
                    print(command)
                elif self.axis_data[4]:
                    command = "!M3"
                    print(command)
                elif self.axis_data[5]:
                    return
                elif self.axis_data[6]:
                    return
                elif self.axis_data[7]:
                    return
                elif self.axis_data[8]:
                    return
                elif self.axis_data[9]:
                    return
                elif self.axis_data[10]:
                    return

                """
                D-PAD
                """
                if self.hat_data[0]:
                    return
                elif self.hat_data[1]:
                    return
                elif self.hat_data[2]:
                    return
                elif self.hat_data[3]:
                    return
                #
                if platform.system() == "Linux":
                    os.system('clear')
                else:
                    os.system('cls')

                pprint.pprint(self.button_data)    # Buttons
                pprint.pprint(self.axis_data)      # Analog sticks
                pprint.pprint(self.hat_data)       # D-Pad

if __name__ == "__main__":
    ps4 = PS4Controller()
    ps4.init()
    ps4.listen()

På nuværende tidspunkt er koden ikke fuldt funktionel, men vi har tænkt os at få PsController.py til at virke i nærmeste fremtid.

https://github.com/Allando/p1x37-ISRW1

–Team Mad-lan