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