| 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 | ||||
| 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']: |
| ####################################################################### | ####################################################################### | ||||
| 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) |