Browse Source

Wii Remote basis Steuerung

master
langspielplatte 5 years ago
parent
commit
5d61a92fce
3 changed files with 93 additions and 3 deletions
  1. +43
    -1
      Versuch 3/iot_car.py
  2. +2
    -2
      Versuch 3/keyikt_main.py
  3. +48
    -0
      Versuch 3/wiikt_main.py

+ 43
- 1
Versuch 3/iot_car.py View File

speed_cur = 0 speed_cur = 0
speed_last = 0 speed_last = 0
angle_cur = 0 angle_cur = 0
speed_cruise_control = 0 # m/s but only positive
motor = None motor = None
streeting = None streeting = None
import servo_ctrl import servo_ctrl
self.motor = Motor(1) self.motor = Motor(1)
self.streeting = Steering(2) self.streeting = Steering(2)
# for keyboard control
def __testmode_accelerate(self): def __testmode_accelerate(self):
calc_acc = calculate_acceleration(self.speed_cur, self.acc) calc_acc = calculate_acceleration(self.speed_cur, self.acc)
self.speed_last = self.speed_cur self.speed_last = self.speed_cur
else: else:
self.__accelerate(speed) self.__accelerate(speed)
# for wii remote
def cruise_control_increase(self):
s = min(self.V_MAX, self.speed_cruise_control + 2.75)
if s < 0:
self.speed_cruise_control = 0
else:
self.speed_cruise_control = s
def cruise_control_decrease(self):
s = min(self.V_MAX, self.speed_cruise_control - 2.75)
if s < 0:
self.speed_cruise_control = 0
else:
self.speed_cruise_control = s
def 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:
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:
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:
self.__accelerate(0)
def reset_streeting(self): def reset_streeting(self):
self.set_angle(0) self.set_angle(0)
self.streeting.set_angle(angle) self.streeting.set_angle(angle)


def stop(self): def stop(self):
self.speed_last = self.speed_cur
self.speed_cur = 0 self.speed_cur = 0
self.angle_cur = 0 self.angle_cur = 0

+ 2
- 2
Versuch 3/keyikt_main.py View File

if keystates['accelerate']: # and v_step: if keystates['accelerate']: # and v_step:
# Beschleunigen # Beschleunigen
v_step = False v_step = False
car.accelerate(speed=1)
car.accelerate(speed=11)
if keystates['decelerate']: # and v_step: if keystates['decelerate']: # and v_step:
# abbremsen # abbremsen
car.accelerate(speed=-1)
car.accelerate(speed=-11)
if keystates['accelerate_angle_right']: if keystates['accelerate_angle_right']:
car.streeting_right() car.streeting_right()
if keystates['accelerate_angle_left']: if keystates['accelerate_angle_left']:

+ 48
- 0
Versuch 3/wiikt_main.py View File

####################################################################### #######################################################################


from linuxWiimoteLib import * from linuxWiimoteLib import *
frim iot_car import Iot_car


# initialize wiimote # initialize wiimote
wiimote = Wiimote() wiimote = Wiimote()


connected = False connected = False


car = Iot_car(testmode=True)

# AUFGABE d
def set_led(remote):
global car
# percent
p = car.speed_cruise_control / car.V_MAX
if p > 0 and p <= 0.25:
remote.SetLEDs(True, False, False, False)
elif p > 0.25 and p <= 0.5:
remote.SetLEDs(True, True, False, False)
elif p > 0.5 and p <= 0.75:
remote.SetLEDs(True, True, True, False)
else:
remote.SetLEDs(True, True, True, True)

try: try:
print "Press any key on wiimote to connect" print "Press any key on wiimote to connect"
while (not connected): while (not connected):
wiimote.calibrateAccelerometer() wiimote.calibrateAccelerometer()
sleep(0.1) 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_backward()
else:
car.deactivate_cruise_control()
# streeting
if wiistate.ButtonState.Up:
# streeting left
car.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()
# reset button
if wiistate.ButtonState.Minus:
car.reset()
car.cruise_control_reset()
# set led states
set_led(wiimote)
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)
except KeyboardInterrupt: except KeyboardInterrupt:
print "Exiting through keyboard event (CTRL + C)" print "Exiting through keyboard event (CTRL + C)"
exit(wiimote) exit(wiimote)

Loading…
Cancel
Save