Änderungen hinzugefügt. Sensoren waren kaputt, daher mussten wir Workarounds basteln.
This commit is contained in:
@@ -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"
|
||||
51
Versuchstag-2/Pipfile.lock
generated
51
Versuchstag-2/Pipfile.lock
generated
@@ -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.
@@ -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
BIN
Versuchstag-2/iot_car.pyc
Normal file
Binary file not shown.
@@ -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()
|
||||
BIN
Versuchstag-2/linuxWiimoteLib.pyc
Normal file
BIN
Versuchstag-2/linuxWiimoteLib.pyc
Normal file
Binary file not shown.
Binary file not shown.
75
Versuchstag-2/wiikt_main.py
Normal file → Executable file
75
Versuchstag-2/wiikt_main.py
Normal file → Executable 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)
|
||||
|
||||
Reference in New Issue
Block a user