Natürlich muss das Automatische Programm für die Fahrzeugsteuerung zum Autonomen Fahren des Roboters auch für die Vier-Rad Steuerung laufen.
Wie schon beim 2-Rad R2D2 Robot verwende ich dieselben Klassen der Motorsteuerung auch für den C3PO Roboter.
Die Akkus habe ich nun doch getauscht. Das Gewicht von den 8×1.5 Volt Batterien plus Akku Pack ist im Vergleich zu den 2×3,7 V Lithium-Ionen Akkus ungleich höher.
# car_test.py
from robotbench.automation.automation import Automation
from robotbench.automation.automation_programs import AutomationPrograms
from robotbench.car.autocar import AutoCar
from robotbench.motor.four_wheels_motor import FourWheelsMotorController
from robotbench.sensors.ultrasonic import UltraSonic
sensor_object = UltraSonic()
programs = AutomationPrograms()
selfDriving = Automation(programs)
selfDriving.add_sensor("UltraSonic", sensor_object)
motorcontroller = FourWheelsMotorController(debug=True, default_speed=40)
motorcontroller.add_motor("LEFT_FRONT", 10, 24, front=True, left=True)
motorcontroller.add_motor("RIGHT_FRONT", 27, 17, front=True, left=False)
motorcontroller.add_motor("LEFT_BACK", 9, 11, front=False, left=True)
motorcontroller.add_motor("RIGHT_BACK", 13, 6, front=False, left=False)
newcar = AutoCar("C3PO Car", motorcontroller, None, selfDriving)
newcar.start()
newcar.drive("autoprogram_one")
Das automatische Programm ist denkbar einfach:
# autoprogram_one.py
from robotbench.automation.automation_events import AutomationEvents
class AutomationPrograms:
def __init__(self):
self._car = None
def set_car(self, car):
self._car = car
def get_car(self):
return self._car
def set_event_controller(self, event_controller: AutomationEvents):
self._event_controller = event_controller
def get_event_controller(self):
return self._event_controller
def get_sensors(self):
return self.get_car().get_sensors()
def program_one(self):
result = {}
sensors = self.get_sensors()
eventcontroller = self._event_controller
for sensor_name in sensors:
sensor_result = sensors[sensor_name].read_two()
result[sensor_name] = sensor_result
event = eventcontroller.find_event("FORWARD", "MOVE")
try:
if result["UltraSonic"]["front"] >= 35:
event = eventcontroller.find_event("FORWARD", "MOVE")
elif result["UltraSonic"]["front"] < 35:
event = eventcontroller.find_event("KOLLISIONFRONT", "OBSTACLE")
elif result["UltraSonic"]["rear"] >= 45:
event = eventcontroller.find_event("BACKWARD", "MOVE")
elif result["UltraSonic"]["rear"] < 45:
event = eventcontroller.find_event("KOLLISIONBACK", "OBSTACLE")
except:
pass
result = event
# result["events"] = eventcontroller.get_events()
return result
Einkaufsliste / Affiliate Links:
- Amazon: 18650 Batterie Halterungen
- BerryBase: 18650 Akkus
- BerryBase: Netzteilmodul (oder bei Amazon: Step-Down USB Spannungsversorgung)