Änderungen hinzugefügt. Sensoren waren kaputt, daher mussten wir Workarounds basteln.

This commit is contained in:
2020-09-18 09:36:30 +02:00
parent 1ac1c40332
commit 3746a32b31
24 changed files with 945 additions and 428 deletions

View File

@@ -1,12 +0,0 @@
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
pygame = "==1.9.4"
[requires]
python_version = "3.8"

View File

@@ -1,51 +0,0 @@
{
"_meta": {
"hash": {
"sha256": "66dc4fa611a558e59e4b96b5c720de3680644511017efcb95d30b2a242825bec"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.8"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"pygame": {
"hashes": [
"sha256:06dc92ccfea33b85f209db3d49f99a2a30c88fe9fb80fa2564cee443ece787b5",
"sha256:0919a2ec5fcb0d00518c2a5fa99858ccf22d7fbcc0e12818b317062d11386984",
"sha256:0a8c92e700e0042faefa998fa064616f330201890d6ea1c993eb3ff30ab53e99",
"sha256:220a1048ebb3d11a4d48cc4219ec8f65ca62fcafd255239478677625e8ead2e9",
"sha256:315861d2b8428f7b4d56d2c98d6c1acc18f08c77af4b129211bc036774f64be2",
"sha256:3469e87867832fe5226396626a8a6a9dac9b2e21a7819dd8cd96cf0e08bbcd41",
"sha256:54c19960180626165512d596235d75dc022d38844467cec769a8d8153fd66645",
"sha256:5ba598736ab9716f53dc943a659a9578f62acfe00c0c9c5490f3aca61d078f75",
"sha256:60ddc4f361babb30ff2d554132b1f3296490f3149d6c1c77682213563f59937a",
"sha256:6a49ab8616a9de534f1bf62c98beabf0e0bb0b6ff8917576bba22820bba3fdad",
"sha256:6d4966eeba652df2fd9a757b3fc5b29b578b47b58f991ad714471661ea2141cb",
"sha256:700d1781c999af25d11bfd1f3e158ebb660f72ebccb2040ecafe5069d0b2c0b6",
"sha256:73f4c28e894e76797b8ccaf6eb1205b433efdb803c70f489ebc3db6ac9c097e6",
"sha256:786eca2bea11abd924f3f67eb2483bcb22acff08f28dbdbf67130abe54b23797",
"sha256:7bcf586a1c51a735361ca03561979eea3180de45e6165bcdfa12878b752544af",
"sha256:82a1e93d82c1babceeb278c55012a9f5140e77665d372a6d97ec67786856d254",
"sha256:9e03589bc80a21ae951fca7659a767b7cac668289937e3756c0ab3d753cf6d24",
"sha256:aa8926a4e34fb0943abe1a8bb04a0ad82265341bf20064c0862db0a521100dfc",
"sha256:aa90689b889c417d2ac571ef2bbb5f7e735ae30c7553c60fae7508404f46c101",
"sha256:c9f8cdefee267a2e690bf17d61a8f5670b620f25a981f24781b034363a8eedc9",
"sha256:d9177afb2f46103bfc28a51fbc49ce18987a857e5c934db47b4a7030cb30fbd0",
"sha256:deb0551d4bbfb8131e2463a7fe1943bfcec5beb11acdf9c4bfa27fa5a9758d62",
"sha256:e7edfe57a5972aa9130ce9a186020a0f097e7a8e4c25e292109bdae1432b77f9",
"sha256:f0ad32efb9e26160645d62ba6cf3e5a5828dc4e82e8f41f9badfe7b685b07295"
],
"index": "pypi",
"version": "==1.9.4"
}
},
"develop": {}
}

Binary file not shown.

View File

@@ -35,7 +35,7 @@ class Iot_car():
def __init__(self, testmode=True):
self.is_testmode_activated = testmode
if not testmode:
import servo_ctrl
from servo_ctrl import Motor, Steering
self.motor = Motor(1)
self.streeting = Steering(2)
@@ -84,28 +84,28 @@ class Iot_car():
else:
self.speed_cruise_control = s
def def cruise_control_reset(self):
def cruise_control_reset(self):
self.speed_cruise_control = 0
def activate_cruise_control_forward(self):
self.speed_last = self.speed_cur
self.speed_cur = self.speed_cruise_control
self.is_testmode_servo_active = True
if not is_testmode_activated:
if not self.is_testmode_activated:
self.__accelerate(self.speed_cruise_control)
def activate_cruise_control_backward(self):
self.speed_last = self.speed_cur
self.speed_cur = -1 * self.speed_cruise_control
self.is_testmode_servo_active = True
if not is_testmode_activated:
if not self.is_testmode_activated:
self.__accelerate(-1 * self.speed_cruise_control)
def deactivate_cruise_control(self):
self.speed_last = self.speed_cur
self.speed_cur = 0
self.is_testmode_servo_active = False
if not is_testmode_activated:
if not self.is_testmode_activated:
self.__accelerate(0)
def reset_streeting(self):

BIN
Versuchstag-2/iot_car.pyc Normal file

Binary file not shown.

View File

@@ -1,257 +0,0 @@
#!/usr/bin/env python2
#######################################################################
# Aufgabe 1 #
#######################################################################
import pygame
import math
import argparse, sys
import servo_ctrl
width = 400
height = 200
freq = 50 # Sets the frequency of input procession
delta = 1.0 / freq # time per step
acc = 2.6 # Max acceleration of the car (per sec.)
dec = 4.5 # Max deceleration of the car (per sec.)
frict = -1 # max friction
angle_acc = 300 # max change of angle (per sec.)
speed_cur = 0
angle_cur = 0
V_MAX = 11 # Maximale Geswindigkeit 11 m/s
ANGLE_MAX = 45
mouse_ctrl = False
v_step = True # Stufenweises regel der Beschlunigung in beide Richtungen
m_step = True
# vars for testmode
is_testmode_enabled = True
testmode_vars = {'is_servo_active': False}
# vars for car
motor = None
streeting = None
# start main pygame event processing loop here
pygame.display.init()
# set up the pygame screen enviroment
screen = pygame.display.set_mode((width, height))
# get a clock to generate frequent behaviour
clock = pygame.time.Clock()
# States of the keys
keystates = {
'quit': False,
'accelerate': False,
'decelerate': False,
'reset': False,
'accelerate_angle_right': False,
'accelerate_angle_left': False,
'acceleration_mouse': False,
'mouse_ctrl': False,
}
running = True
# Functions for exercises
def calculate_acceleration(speed, acc):
sigma = 2.5
mu = V_MAX / 2
return acc * (1 - 0.5 * (1 + (math.erf((abs(speed) - mu) / (math.sqrt(2 * sigma**2))))))
def calculate_friction(speed, f):
# TODO hier stimmt was nicht
sigma = 4
mu = V_MAX / 2
return (f/2) * (1 + (math.erf((abs(speed) - mu) / (math.sqrt(2 * sigma**2)))))
def toggle_mouse_ctrl():
global mouse_ctrl
mouse_ctrl= not mouse_ctrl
def mouse_ctrl_calc_velocity(pos):
global height, V_MAX
x, y = pos
rel_y = y - (height/2)
return -1 * (rel_y / (height/2.0)) * V_MAX
def mouse_ctrl_calc_angle(pos):
global width, ANGLE_MAX
x, y = pos
rel_x = x - (width/2.0)
return (rel_x / (width/2)) * ANGLE_MAX
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='IoT Lab script')
parser.add_argument('--notest', action='store_true', default=False)
args = parser.parse_args()
if not args.notest:
print "Running in testmode."
else:
is_testmode_enabled = False
motor = Motor(1)
streeting = Steering(2)
try:
while running:
# set clock frequency
clock.tick(freq);
# save the last speed 4 analysis
last = speed_cur
# process input events
for event in pygame.event.get():
# exit on quit
if event.type == pygame.QUIT:
running = False
# check for key down events (press)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
keystates['quit'] = True
elif event.key == pygame.K_w:
keystates['accelerate'] = True
elif event.key == pygame.K_s:
keystates['decelerate'] = True
elif event.key == pygame.K_d:
keystates['accelerate_angle_right'] = True
elif event.key == pygame.K_a:
keystates['accelerate_angle_left'] = True
elif event.key == pygame.K_m:
keystates['mouse_ctrl'] = True
elif event.key == pygame.K_r:
keystates['reset'] = True
# check for key up events (release)
if event.type == pygame.KEYUP:
if event.key == pygame.K_q:
keystates['quit'] = False
elif event.key == pygame.K_w:
v_step = True
testmode_vars['is_servo_active'] = False
keystates['accelerate'] = False
elif event.key == pygame.K_s:
v_step = True
testmode_vars['is_servo_active'] = False
keystates['decelerate'] = False
elif event.key == pygame.K_d:
keystates['accelerate_angle_right'] = False
elif event.key == pygame.K_a:
keystates['accelerate_angle_left'] = False
elif event.key == pygame.K_m:
keystates['mouse_ctrl'] = False
m_step = True
elif event.key == pygame.K_r:
v_step = True
keystates['reset'] = False
if event.type == pygame.MOUSEBUTTONDOWN:
# linke maustaste
if event.button == 1:
testmode_vars['is_servo_active'] = True
keystates['acceleration_mouse'] = True
if event.type == pygame.MOUSEBUTTONUP:
if event.button == 1:
testmode_vars['is_servo_active'] = False
keystates['acceleration_mouse'] = False
# do something about the key states here, now that the event queue has been processed
if keystates['quit']:
running = False
if keystates['reset']:
# reset
speed_cur = 0
angle_cur = 0
mouse_ctrl = False
if keystates['mouse_ctrl'] and m_step:
# beim umstellen zur maus steuerung und geschw. zuruecksetzen
speed_cur = 0
angle_cur = 0
toggle_mouse_ctrl()
m_step = False
print "Is mouse control enabled?: " + str(mouse_ctrl)
# Calculate valeues for control types
if mouse_ctrl:
pos = pygame.mouse.get_pos()
angle_cur = mouse_ctrl_calc_angle(pos)
if keystates['acceleration_mouse']:
speed_cur = mouse_ctrl_calc_velocity(pos)
elif not is_testmode_enabled:
speed_cur = 0
else:
if keystates['accelerate']: # and v_step:
# Beschleunigen
v_step = False
if is_testmode_enabled:
calc_acc = calculate_acceleration(speed_cur, acc)
speed_cur = min(V_MAX, speed_cur + calc_acc)
testmode_vars['is_servo_active'] = True
else:
speed_cur = min(V_MAX, speed_cur + acc)
if keystates['decelerate']: # and v_step:
# abbremsen
v_step = False
if is_testmode_enabled:
calc_dec = calculate_acceleration(speed_cur, dec)
speed_cur = max(-1 * V_MAX, speed_cur - calc_dec)
testmode_vars['is_servo_active'] = True
else:
speed_cur = max(-1 * V_MAX, speed_cur - dec)
if keystates['accelerate_angle_right']:
# ist das so richtig angle_acc = 300? TODO
angle_cur = min(ANGLE_MAX, angle_cur + angle_acc)
if keystates['accelerate_angle_left']:
# ist das so richtig angle_acc = 300? TODO
angle_cur = max(-1 * ANGLE_MAX, angle_cur - angle_acc)
if not keystates['accelerate_angle_left'] and not keystates['accelerate_angle_right']:
angle_cur = 0
if not is_testmode_enabled and (not keystates['accelerate'] and not keystates['decelerate']):
# Wenn nicht im testmode und weger beschl noch gebremst wird
speed_cur = 0
if is_testmode_enabled:
if not testmode_vars['is_servo_active']:
speed_cur = min(0, speed_cur - calculate_friction(speed_cur, -1))
else:
motor.set_speed(speed_cur)
steering.set_angle(angle_cur)
# Hier denn Wete an servos geben TODO
print("({},{} --> {})".format(speed_cur, angle_cur, (speed_cur - last) / delta)) + ", Servo_active: " + str(testmode_vars['is_servo_active'])
except KeyboardInterrupt:
print "Exiting through keyboard event (CTRL + C)"
# gracefully exit pygame here
pygame.quit()

Binary file not shown.

Binary file not shown.

75
Versuchstag-2/wiikt_main.py Normal file → Executable file
View File

@@ -1,11 +1,11 @@
#!/usr/bin/env python
#######################################################################
# Aufgabe 2 #
# Aufgabe 2 #
#######################################################################
from linuxWiimoteLib import *
frim iot_car import Iot_car
from iot_car import Iot_car
# initialize wiimote
wiimote = Wiimote()
@@ -13,11 +13,13 @@ wiimote = Wiimote()
#Insert address and name of device here
# hcitool scan
#
device = ('', '')
# B8:AE:6E:30:0F:0F Nintendo RVL-CNT-01-TR
#
device = ('B8:AE:6E:30:0F:0F', 'Nintendo RVL-CNT-01-TR')
connected = False
car = Iot_car(testmode=True)
car = Iot_car(testmode=False)
# AUFGABE d
def set_led(remote):
@@ -30,32 +32,34 @@ def set_led(remote):
remote.SetLEDs(True, True, False, False)
elif p > 0.5 and p <= 0.75:
remote.SetLEDs(True, True, True, False)
else:
elif p == 1:
remote.SetLEDs(True, True, True, True)
else:
remote.SetLEDs(False, False, False, False)
try:
print "Press any key on wiimote to connect"
while (not connected):
connected = wiimote.Connect(device)
print "Press any key on wiimote to connect"
while (not connected):
connected = wiimote.Connect(device)
print "succesfully connected"
print "succesfully connected"
wiimote.SetAccelerometerMode()
wiistate = wiimote.WiimoteState
while True:
# re-calibrate accelerometer
if (wiistate.ButtonState.Home):
print 're-calibrating'
wiimote.calibrateAccelerometer()
sleep(0.1)
wiimote.SetAccelerometerMode()
wiistate = wiimote.WiimoteState
step = True
counter = 0
print 'entering loop'
while True:
# re-calibrate accelerometer
if (wiistate.ButtonState.Home):
print 're-calibrating'
wiimote.calibrateAccelerometer()
sleep(0.1)
# Set acceleration and deceleration
if wiistate.ButtonState.One:
car.activate_cruise_control_forward()
else:
car.deactivate_cruise_control()
if wiistate.ButtonState.Two:
car.activate_cruise_control_forward()
elif wiistate.ButtonState.Two:
car.activate_cruise_control_backward()
else:
car.deactivate_cruise_control()
@@ -63,25 +67,38 @@ try:
# streeting
if wiistate.ButtonState.Up:
# streeting left
car.car.streeting_left()
car.streeting_left()
if wiistate.ButtonState.Down:
# streeting right
car.streeting_right()
if not wiistate.ButtonState.Down and not wiistate.ButtonState.Up:
car.reset_streeting()
if wiistate.ButtonState.Right and step:
car.cruise_control_increase()
step = False
if wiistate.ButtonState.Left and step:
car.cruise_control_decrease()
step = False
# reset button
if wiistate.ButtonState.Minus:
car.reset()
car.stop()
car.cruise_control_reset()
# set led states
set_led(wiimote)
counter = counter + 1
if counter == 50:
step = True
counter = 0
delta = 1.0 / 50
print("({},{} --> {})".format(car.speed_cur, car.angle_cur, (car.speed_cur - car.speed_last) / delta)) + ", Servo_active: " + str(car.is_testmode_servo_active) + "CC Speed: " str(car.speed_cruise_control)
sleep(1 / 50)
print wiimote.getAccelState()
#print '({},{} --> {})'.format(car.speed_cur, car.angle_cur, (car.speed_cur - car.speed_last) / delta) + ", Servo_active: " + str(car.is_testmode_servo_active) + " CC Speed: " + str(car.speed_cruise_control)
sleep(0.01)
except KeyboardInterrupt:
print "Exiting through keyboard event (CTRL + C)"
exit(wiimote)
print "Exiting through keyboard event (CTRL + C)"
exit(wiimote)