IOT mandatory assignment
By Allan Nielsen & Mads Veelsgaard Nielsen
Vores problemstilling er – Kan 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


