Na da war ich gestern wohl doch zu müde und ungenau.
Ich programmiere ja nicht unentwegt daran, sondern immer wieder und verwerfe dann viele Änderungen wieder, weil sie dann doch nicht zum erhofften Resultat führen.
Hier das Setup:
LKW Marke Eigenbau
1 Achse angetrieben von zwei 12V-Motoren, verbunden an L298N-Treiber, dieser wiederum mit LiPo und RPi.
3 Achsen gelenkt mit je einem Servo (Bluebird DM620MG), diese verbunden via Modelcraft 6V/5A Spannungswandler mit LiPo und RPi.
2 Foxeer Arrow V2-Kameras und ein 5.8GHz-Video-Transmitter, beide verbunden mit LiPo und Videosignal an 5V-Relais, dieses verbunden mit RPi.
2 x je zwei Front- und Heck-LED (weiss/rot), verbunden an RPi
2 x zwei Blinker-LED (gelb), verbunden an RPi
1 RasberryPi macht die gesamte Softwaresteuerung und wird via WLAN angesprochen.
Python habe ich genutzt, weil es von Haus aus die GPIO des RPi ansprechen kann.
Grundsätzlich habe ich die Logik, wie das ganze Programm aufgebaut sein soll im Kopf zusammen. Versuche gerade das auf Papier zu bringen, so dass auch jemand anderes das interpretieren kann und nicht meine Code-Schnippsel durchgehen muss. Was mir aber immer noch nicht in den Schädel will, ist der ganze Python-Syntax. Wann immer ich versuche einen Wert einer Variable von einer Funktion in eine andere und zurück zu übergeben, erhalte ich irgendwelche Fehler.
Wie gesagt, der LKW fährt, die Achsen werden gelenkt, die Kameras schalten mit den Front-/Heck-LED zwischen vorne und hinten hin und her und die Blinker blinken. Nur nicht immer alles dann, wann es sollte und vor allem lenkt der LKW mal ja und mal nein und manchmal in die falsche Richtung.
Daher die Bitte um externe Hilfe.
Gruss
Chris
das ist ja schon mal ne ganze Menge. Zur Fehlersuche musste du aber Teile abschalten und nur Einzelkomponenten testen.
Probleme, die ich sehe:
Python ist absolut nicht echtzeitfähig,
WLAN ist absolut nicht echtzeitfähig,
und Threads stören sich gegenseitig, wenn wichtige Threads keine höhere Priorität haben als andere, die warten können.
Also teste doch mal nur nackt WLAN in Verbindung mit der Motorsteuerung, ohne alles andere.
(ich selber kann kein Python, ich verabscheue diese "Sprache", ich verwende C(++), weil es klar ist und streng strukturiert und pthread Multithreading auch mit thread priorities erlaubt, bis hin zur Echtzeitfähigkeit.)
Nun, bei der Sprachwahl bin ich ganz offen. Ob C++, Java oder Python ist mir insofern egal.
Die Wahl ist damals auf Python gefallen, weil wie gesagt die GPIO einfach angesprochen werde konnten, ich überall gelesen habe, dass es die beste Möglichkeit sei und ich am meisten Tutorials gefunden habe.
Aber da lasse ich mich gerne eines Besseren belehren, denn die meisten in diesem Forum habe sicher mehr Erfahrung im Modellbau und der Programmierung als ich. Meine Stärke liegt da eher bei Datenbanken, Excel und Finanzanalysen...
Die Latenzzeiten bei diesem Konstrukt sind mir auch aufgefallen. Daher wollte ich über Variablen nachschauen, ob sich der aktuelle Wert der Einstellung für die Motoren um einen gewissen Prozentsatz, z.B. 5%, verändert hat und ansonsten soll nichts am aktuellen PWM-Signal verändert werden. Das Umschalten der Lichter/Kameras und die Blinker funktionieren soweit einwandfrei, manchmal zwar erst auf den zweiten Klick, aber damit könnte ich leben.
probier erst mal, ob du dein Problem, wie ich es vorgeschlagen habe, eingrenzen kannst. Dann kann man weiter entscheiden.
Hallo,
das schon gelesen ?
https://www.elektormagazine.de/files/attachment/196
Gruß
So, ich habe die Skizze des Programms nun zusammen.
Links ist der Teil des PC, von dem aus der LKW gesteuert werden soll.
Rechts ist der Teil, der die Motoren usw. ansteuern soll.
Einerseits werden die Steuerbefehle in einem String vom PC zum RPi geschickt, andererseits soll zwischen den beiden Programmen kontinuierlich eine Kette von vier "Pings" hin und her geschickt werden, damit die Signalstärke über die Antwortzeit gemessen werden kann. Aktuell kein kritischer Teil und noch nicht implementiert.
Morgen Abend habe ich Zeit die einzelnen Code-Fragmente zu testen.
Ich hoffe, die Skizze ist einigermassen verständlich. Heute funktioniert der Code nicht parallel sondern nur sequenziell, was vermutlich die Ursache meines Problems ist. Parallel mit Python habe ich nicht hinbekommen.
![]()
Lesezeichen