• Herzlich willkommen!

    Das Team von »Doctor Brick« heißt Euch herzlich willkommen und wünscht Euch viel Spaß hier!
    »Doctor Brick« ist eine anerkannte Community (RLOC) für erwachsene LEGO Enthusiasten, auch AFOLs (= Adult Fans Of LEGO) genannt.
    Wir können uns hier über alle Belange des LEGO Hobbys austauschen wie z.B. Set- und Teilefragen, Vorstellung und Rezensionen von Legobauten.
    Bitte beachtet die Nutzungsbedingungen und den Verhaltensleitfaden.

Lego Spike Prime / Essential

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
So, ich konnte nun den Eingrenzen warum mein Programmblock zum Kalibieren* der Lenkung nicht funktioniert, beheben und den Fehler eingrenzen:

Der Fehler tritt auf wenn der Farbsensor (momentan an Port E oder F) angeschlossen ist und der Programmblock zum auslesen des Farbsensors aktiv ist. Ob Es jetz an dem Port E/F liegt, diese sind irgenwelche "hochgeschwindigkeits-Datenports" laut Lego, oder an einem Programmmierfehler meinerseits, muss ich noch herausfinden.

*Anmerkung
Kalibrieren tu ich eigentlich nix bei der Lenkung. im Hauptprogramm wird mit absoluten werten gearbeitet.
Eigentlich wird anfangs nur in 0-Stellung gebracht falls die Räder schief stehen. Da der Motor in eine Richtung mehr als 180° zum vollen Lenkeinschlag drehen muss, müssen zuerst die Endpunkt ermittelt werden weil sonst dreht er im normalen Steuerprogrammabschnitt beim anfahren der Lenkposition mit der Funktion "auf kürzestem Weg" im ungünstigesten Fall über eine Endpunkt darüber.
 
Zuletzt bearbeitet:

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
Der Fehler mit dem Farbsensor war kein Fehler sondern nur eine wiederkehrende Anomalie.
Hab die Farbprogrammblöcke mal deaktivert, dann ging das Kalibriern, dann wieder mal nicht, dann wieder mal nur wenn im streamingmodus, dann wieder genau einmal wie gewünscht, dann nur teilweis zu einem Endpunkt hin, dann niewieder. Hab dann sogar das ganze umgebaut das von Start an immer nur ein Block nach dem anderen gestartet wurde. Juhu- klappte genau einmal dann wieder nicht.

Ich weiß nicht woran es liegt, an meiner Programmierung jedenfalls nicht da die Blöcke einzeln funktionieren und auch keine gemeinsamen Variabeln benutzen.

Meine Lösung war das entfernen des Kalibirerblock, da er nicht zwingend notwendig war, und auslagern in ein eigenes Programm.

Der Hub vergisst auch manchmal alle angeschlossenen Motoren und Sensoren, nach kurzer Zeit fängt er sicher meist wieder oder das Progamm muss über die Taste neu gestartet werden.

Mein Fazit:
Wahrscheinlich ist die Software noch Fehlerhaft und/oder mein Programm zu komplex.
Wer Zeit und Nerven hat kann sich damit befassen.
Wer es in der Schule verwenden möchte und könnte auf unerwartete Probleme stoßen obwohl es keinen logischen Grund gibt.
Ein Ersatz für den EV3 ist es zum jetztigen Zeitpunkt noch nicht.
Die Gehäuseform sämtlicher Komponenten insbesondere der Motoren ist super, eindeutige ein Vorteil gegenüber EV3.
Für Spike und gegen PU spricht das Programme am Hub ohne Verzögerungen ausgeführt werden.

Ich werde meinen Frieden damit schließen, das gewünschte Ergebnins hab ich erreicht,
Nun kann ich den Anhänger bauen.

Anbei das Programm damit Ihr ne Ahnung bekommts wie komplex es geworden ist.
Spike Anhänger.png
 
Zuletzt bearbeitet:

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
Noch ein Hinweis den ich gesterm in einer Robotikgruppe auf Facebook gefunden habe:
Spike verwendet eine 100MHz CPU und soll angeblich nur 320kb RAM haben. Ob das Mit dem RAM Stimmt kann ich nicht sagen, vieleicht öffne ich mal die Büchse und stell ein Foto ein
(EV3 300Mhz und 64MB Ram, deshalb geht da auch Linux drauf).
Einen kleinen Spike Motor werde ich wahrscheinlich auch öffnen und probieren ob ich den Motor abtrennen kann um ihn als reinen Winkelsensor zu nutzen da das Getriebe relativ viel bremst.
 

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
Heute hat es ein Update der Windows App auf von Verison 1.1 auf Version 1.1.4.
Funktional hat es keine offensichtlichen Neuerungen geben, der Hub wurde auch nicht geupdatet.

Bilder vom Inneren des Spike Hubs kann ich keine machen da ich keine zerstörungsfreie Möglichkeit zum Öffnen des Hubs gefunden habe. Zusätzlich zu den 4 Schrauben sind auch irgendwo halteklammer :(
 

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
Noch ein Bug/Feature:
WeDo Motoren (das weiß graue Gegenstück zum M-Motor) funktionieren im "Herz" Programm (Testprogramm für Motoren und Sensoren), bringt aber sämtliche Programme am Hub zum Absturz. Weiters werden bei einer Verbindung in der PC App auch nicht mehr die aktuellen Werte von Motoren/Sensoren angezeigt/aktualisiert und kurze zeit später schießt sich die App ab. Bei L/XL Motor gibts keine derartigen Probleme.
 

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
Ich hatte den WeDo Motor mit dem falschen Programmblock angesteuert. WeDo Motoren laufen nur mit dem "(A-F) Motor mit X% Leistung starten" aus dem erweiterten Motorenblöcken. Der Motor wird in der Software nicht angezeigt als wäre er nciht angesteckt. (So wird sich dann wahrscheinlich auch ein PF Motor verhalten wenn er über ein Adapterkabel angeschlossen wäre. )
 

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
Zum Programmieren und übertragen darf mit aktuellem Stand der Wedo/kleiner simpler Motor nicht angschlossen sein, auch nicht bei einer Bluetooth Verbindung. Nach dem Übertragen des Programms auf den Hub läuft das Programm wie gewünscht.

Hab dem Support mal eine Mail geschickt, bin gespannt was dazu zurückkommt oder ob sie gleich abwimmeln und sagen das darf man nicht und du darfst nur die Spike motoren verwenden und wir werden in zukunftigne Softwareversionen sämtliche anderen Motoren deaktivieren...
 

jrx

Urgestein
Registriert
12 Juli 2016
Beiträge
1.172
Ort
Berlin
Spike verwendet eine 100MHz CPU und soll angeblich nur 320kb RAM haben. Ob das Mit dem RAM Stimmt kann ich nicht sagen, vieleicht öffne ich mal die Büchse und stell ein Foto ein

Sollte stimmen, da TLG das auch selbst kommuniziert:


Wer mit ins Set reinschauen möchte, kann das in meinem jüngsten Video tun. Habe das Set in einem zweistündigen Live-Stream ausgepackt und ausprobiert (natürlich nicht ansatzweise so ausführlich wie @gatewalker ).

 

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
Mittlerweile weiß ich dass der WeDo Motor in eigenen Programmen immer zu einem Fehler führt der das Programm beendet. Nur im "Herz" Programm läuft er.
Der Lego Support hat dazu auch nur geschrieben das die normalen PU Motoren eigentlich nicht vorgesehen sind sind und daß sie nicht wissen ob da noch was nachkommt...

@jrx danke fürs auspacken aus den Säckchen, ich hab das noch gar nicht gemacht. Hab mich nur über die großen neuen Teile gefreut. Der 11x15 Rahmen in Pink ist einmal im neuen Dodge Charger 42111 in Dark Bluish Grey drinnen.
 

jrx

Urgestein
Registriert
12 Juli 2016
Beiträge
1.172
Ort
Berlin
Der 11x15 Rahmen in Pink ist einmal im neuen Dodge Charger 42111 in Dark Bluish Grey drinnen

Hab ich heute auch ganz erfreut gesehen. Gleich mal bestellen, also die Rahmen, nicht dat hässliche Auto :)
Zu Spike Prime kommt die Tage übrigens ein Artikel auf Golem.de. Da sind deine Posts auch verlinkt und da habe ich auch drauf verwiesen, wie man direkt auf dem Hub in MicroPython programmieren kann. Hast du das auch schon ausprobiert?
 

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
MicroPython hab ich mir schon angesehn, ist für mich wie chinesisch ;) Mein bescheidenen Kenntnisse haben sich da auf das simple ansteuern (ein aus geschwindigkeit) eines Motors über die Konsole beschränkt.
Was mich mehr stört ist das Lego da kein gescheites Handbuch herausgibt in dem die verfügbaren Befehle beschrieben sind mit Programmierbeispielen. So etwas gabs schon vor 20 Jahren zu meinem Ti89 vom Hersteller ;).
Wenn so etwas gibt würd es mich mehr interessieren.
 

jrx

Urgestein
Registriert
12 Juli 2016
Beiträge
1.172
Ort
Berlin
Was mich mehr stört ist das Lego da kein gescheites Handbuch herausgibt in dem die verfügbaren Befehle beschrieben sind mit Programmierbeispielen.
Ja so eine vernünftige Dokumentation wäre schon was. Hast du die Lösung im Open Roberta Lab gesehen? Die Programmieren auch mit Scratch, aber da gibt es die Möglichkeit, den resultierenden Quellcode anzeigen zu lassen und zu editieren – also beides parallel. Das find ich ja geil zum Lernen und fürs Verständnis.
 

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
Kannte ich noch nicht. Sehr interesant.
Fertige Spike Programme die man am Spike Hub gespeichert hat kann man auch über die Konsole "sehen" und zurück auf den PC kopieren. Die können dann auch per Texteditor am PC "reverse engineered" werden. Leider wird die Firmware immer zurückgesetzt wenn man den Hub mit der Lego Spike App verbindent.
 

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
ES gibt euin Update auf 1.2
Ob es neue Blöcke gitb weiß ich noch nicht aber mann kann direkt in Phyton Programieren. Werd ich mir heute mal ansehen.

Update:
Programmieren in Python lernt man bald :D

Technic Motoren laufen nach wie vor nur untern dem Paramater "Drehe X Grad" oder "Drehe X Sekunden". Absolute Werte (zb 0) können nicht angefahren werden, auch nicht mit Python.
Wedo Motoren laufen gar nicht, bringen aber auch den Hub nicht mehr zum Absturz.

Zwischenzeitlich hab ich mir den Wedo/PU kombiniertne Farb- und Distanzsensor mit Noppen gekauft. Das Lustige daran ist jetzt:
Im "Herz" Programm ( zum grundlegende Testen der Sensoren und Motoren) kann man über diesen Kombisenssor mit der Distanzmessung auch einen Wedo Motor drehzahlsteuern.
Folgedessen sind die grundlegenden Funktionen zum Ansteuern diverser Sensoren und Motoren breits im Hub integriert aber nicht freigeschaltet.

Irgend ein findiger Typ müßte mal das Teil aufbrechen, die Firmware auslesen und reverse Engieniering betreiben :devil:
 
Zuletzt bearbeitet von einem Moderator:

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
Zur Hardware:
Wedo Motoren blockieren, soweit ich jetzt erkannt habe, die Rückmeldung (vieleicht auch nur die Anzeige in der App) der Werte sämtlicher anderes Motoren und Sensoren. (Ist aber nur ein gewolltes Softwareproblem da der Betrieb im "Herz"-Progamm funktioniert)

Als ich dann den Wedo Motor abgesteckt habe hat der Wedo Farb-Distanz-Kombisensor ganz normale numerische Werte für die Farbe ausgegeben. Die App/Hub erkennt ihn zwar nicht als Farbsensor der nutzbar ist aber es werden exakt die gleichen numerischen Werte der Farben wie beim Spike Farbsensor ausgegeben.

Software Python:
Die Basics über die verfügbaren Spike Hub Befehle sind mit Beispielen erklärt.
Die Basics über Python selbst sind praktisch nicht vorhanden.

Beispiel:
In der Oberfläche in der mit Bausteinen programmiert kann man paralell ablaufende Programmteile über mehrere Programmblöcke automatisch gleichzeitg starten lassen.
Ich, der von Python noch keine Ahnung habe, habe dann in der Hilfe von Lego gesucht und nix gefunden.
Dann hab ich mir im Web infos zu Python und parallen Threads geholt (_thread/threading) beides klappt aber nicht.
Das mag möglicherweise an meinen fehlenden Python Kenntnissen liegen aber wenn ich ein simple gesticktes Beispiel aus Pyhton Basics nur Abschreibe und als Funktion einfach nur einen Motor einschalten möchte versaut es einem die Laune wenns nciht klappt und man auch keine Rückmeldung bekommt was oder wo es falsch läuft.
 

Gimmick

Stammuser
Registriert
1 Okt. 2018
Beiträge
358
Ist das threading Modul überhaupt vorhanden und kann der Hub überhaupt echte Parallelisierung?

@gatewalker Edit:
Teste mal async.

async def DoStuff()
while True:
blabla​
 
Zuletzt bearbeitet:

gatewalker

Urgestein
Registriert
7 Okt. 2018
Beiträge
1.766
Ort
Niederösterreich Bezirk Zwettl
_thread schlägt es mir bei der autovervollständigung vor, threading nicht.

kannst du mir das theortisch aufschreiben wie dann die motoren angesteuert werden?

Code:
async def Motor1(t)
  while True:
    motor1.run_for_seconds(t)

in dem dann der selbe Block danach nochmals aber für den anderen Motor aufgerufen wird?

Code:
async def Motor1(t)
  while True:
    motor1.run_for_seconds(t)
async def Motor2(t)
  while True:
    motor2.run_for_seconds(t)

Wäre das so korrekt?
muss da noch was vorher geladen werden?

Standardmäßig wird das geladen:
Code:
from spike import PrimeHub, LightMatrix, Button, StatusLight, ForceSensor, MotionSensor, Speaker, ColorSensor, App, DistanceSensor, Motor, MotorPair
from spike.control import wait_for_seconds, wait_until, Timer
 

Gimmick

Stammuser
Registriert
1 Okt. 2018
Beiträge
358
Disclaimer: Habe keinen Spike Prime und kann das nicht testen.

Weil python schon ne ganze Weile her ist, habe ich mal online ein paar Sachen nachgelesen.

Zunächst mal:
Code:
runM1(t):
  while True:     
      motor1.run_for_seconds(t)

sendet nonstop an den hub "lass motor1 für t laufen". Heißt er hört nie auf. Sowie ich das verstehe spuckt

Code:
runM1():  
      motor1.run_for_seconds(10)
      print("Hallo")

direkt "Hallo" aus, während der Motor noch läuft (kann ich wie gesagt nicht testen).
Da die Zeit für die Ausführung unbedeutend sein wird, wird es auch mit Kunstgriffen am Ende egal sein, ob ich
Code:
runM1():  
      motor1.run_for_seconds(10)
      motor2.run_for_seconds(10)

oder (syntax jetzt mal egal)

Code:
run():  
      thread1 = EigenerThread(1,10)
      thread2 = EigenerThread(2,10)
      thread1.Run()
      thread2.Run()

ausführe. Parallelität/Asynchronität heißt immer nur, dass etwas ausgeführt werden kann, während etwas anderes noch läuft. Das heißt nicht, dass die Sachen auch tatsächlich zeitgleich starten.

Sollen sich Motoren identisch oder gegen gegensätzlich verhalten gibt es motorpair = MotorPair('A', 'B') mit start(), start_tank() etc.

Es gibt im Wesentlichen drei Varianten damit rumzutüfteln:

1. While

Code:
while True:
    color = color_sensor.get_color()
    if(color = 'yellow')
       motor.start_at_power(10)
    ....

Man prüft also linear immer wieder Stati und gibt Befehle. Das ist einfach, aber aus diversen Gründen doof. Die Häufigkeit der Farbprüfung hängt direkt mit den Aktionen zusammen, je mehr ich da einbauen, desto seltener wird geprüft und je nachdem flute ich Ports mit Befehlen obwohl gar nichts passiert oder muss gegenprüfen ob color != color_old usw.

2. Event
Code:
while True:
    color = color_sensor.wait_for_new_color()
    if(color = 'yellow')
       motor.start_at_power(10)
    ....

Unterschied: er wartet bei color = .... darauf, dass etwas passiert und rödelt nicht die ganze Zeit die if-Abfragen durch.

3. Wenn man weiß, dass irgendwas lange dauern wird. Oder auf diverse Events gewartet werden muss, muss man das trennen und verhindern, dass sich das gegenseitig blockiert

Code:
import asyncio
import time

async def do_stuff():
    task = asyncio.create_task(do_iobound_work_async()) # erstellt Task
    await asyncio.sleep(0) #  Trick#17 zum Starten des Tasks, auf stackoverflow gefunden :D
    cpuBoundResult = do_cpu_intensive_calc()
    ioBoundResult = await task 

    print(f"The result is {cpuBoundResult + ioBoundResult}")


async def do_iobound_work_async():
    print("ShortStuff")
    await asyncio.sleep(2.5) # non-blocking async call
    print("Result Short Stuff.")
    return 1

def do_cpu_intensive_calc():
    print("Long Stuff")
    time.sleep(2) # blocken damits länger dauert
    print("Longstuff done.")
    return 2


asyncio.run(do_stuff())

in do_cpu_intensive_calc() könnte dann
Code:
while True:
    color = color_sensor.wait_for_new_color()
    if(color = 'yellow')
       motor.start_at_power(10)
    ....

Ich hoffe auch nur die Hälfte davon funktioniert so :D


Außerdem noch gesehen: Auslesen des python codes eines Block-Diagramms
 
Oben