bjoerng
09.02.2011, 13:35
Hi,
folgendes Problem: Mein Robbi (R2-D2-Replik, 1,20m, 50kg) ist häufiger auf Messen / Conventions unterwegs und von kleinen bis ganz kleinen Kindern umringt, denen er theoretisch ordentlich weh tun kann. Oberste Prämisse: Das ist in jedem Fall zu vermeiden. In solchen Situationen ist er im Regelfall ferngesteuert, ergo bin ich selbst der Regler.
Gleichzeitig hab ich ihn aber auch oft zuhause und möchte mit Autonomie experimentieren. Dazu brauche ich eine PC-Steuerung.
Die Plattform-Bewegung macht ein Mikrocontroller (Arduino) mit über PWM angebundenem Motorsteller. An den Rädern habe ich Encoderscheiben, der Mikrocontroller zählt interruptgetrieben die Ticks, erlaubt also jetzt schon eine Koppelodometrie, macht aber auf Basis der Encoderticks noch keine Geschwindigkeitsregelung. Statt dessen macht er auf Basis einer kalibrierten RPM-to-PWM-Kurve aus der Geschwindigkeitsanforderung, die er bekommt, einen PWM-Duty-Cycle und gibt den auf den Motorsteller, so daß er "Pi mal Daumen" der Anforderung nachkommt. Wenn die Batterie nachläßt, stimmt das natürlich nicht mehr.
Zu den Eckdaten: Der Mikrocontroller stellt alle 10ms am Motorsteller und liefert alle 40ms Encoderticks und Status an den PC. Ebenfalls alle 40ms holt er sich neue Soll-Eingangsdaten von Fernbedienung bzw. PC. Die Motoren machen so ca. 200rpm max, das ergibt mit meinen 15cm-Rädern ungefähr 6km/h max. Die Encoder liefern pro Umdrehung 1800 Ticks.
Wenn ich mit PC steuern will, ergeben sich für mich jetzt zwei Möglichkeiten:
1. Ich realisiere eine Geschwindigkeitsregelung im Mikrocontroller auf Basis der Encoderticks. Da ich nicht zwei verschiedene Modi auf dem Mikrocontroller haben will (Softwarekomplexität), würde diese Regelung den aktuellen Geschwindigkeitssteller ersetzen, also auch bei Fernsteuerung zum Tragen kommen. Vorteil aus meiner Sicht: Geringerer Regelaufwand auf der Strecke zwischen Rad und PC, weil die Regelung näher ans Rad rückt. Nachteil: Höherer programmatischer und mechanischer Absicherungsaufwand (wenn ein Encoder spinnt, spinnt möglicherweise der Regler und gibt Gas, und das eben auch, wenn ferngesteuert gefahren wird).
2. Ich realisiere eine Geschwindigkeitsregelung im PC auf Basis von Encoderticks und "Pi mal Daumen"-Geschwindigkeitsanforderungen an den Mikrocontroller. Vorteil: Hohe Systemsicherheit, primitiver Softwareaufbau auf dem Mikrocontroller. Nachteil: Relativ hohe Ungenauigkeit, weil die Geschwindigkeitsanforderung ja nicht ausgeregelt wird, und zeitliche Trägheit auf der Regelstrecke.
Die nachgelagerte Positionsregelung kommt auf jeden Fall in den PC.
Mir fehlt die Erfahrung, die Ungenauigkeit und zeitliche Trägheit abzuschätzen. Was meint Ihr? Wie würdet Ihr sowas aufbauen? Oder gibt es noch weitere Möglichkeiten, die mir noch gar nicht aufgefallen sind?
Vielen Dank im Voraus!
folgendes Problem: Mein Robbi (R2-D2-Replik, 1,20m, 50kg) ist häufiger auf Messen / Conventions unterwegs und von kleinen bis ganz kleinen Kindern umringt, denen er theoretisch ordentlich weh tun kann. Oberste Prämisse: Das ist in jedem Fall zu vermeiden. In solchen Situationen ist er im Regelfall ferngesteuert, ergo bin ich selbst der Regler.
Gleichzeitig hab ich ihn aber auch oft zuhause und möchte mit Autonomie experimentieren. Dazu brauche ich eine PC-Steuerung.
Die Plattform-Bewegung macht ein Mikrocontroller (Arduino) mit über PWM angebundenem Motorsteller. An den Rädern habe ich Encoderscheiben, der Mikrocontroller zählt interruptgetrieben die Ticks, erlaubt also jetzt schon eine Koppelodometrie, macht aber auf Basis der Encoderticks noch keine Geschwindigkeitsregelung. Statt dessen macht er auf Basis einer kalibrierten RPM-to-PWM-Kurve aus der Geschwindigkeitsanforderung, die er bekommt, einen PWM-Duty-Cycle und gibt den auf den Motorsteller, so daß er "Pi mal Daumen" der Anforderung nachkommt. Wenn die Batterie nachläßt, stimmt das natürlich nicht mehr.
Zu den Eckdaten: Der Mikrocontroller stellt alle 10ms am Motorsteller und liefert alle 40ms Encoderticks und Status an den PC. Ebenfalls alle 40ms holt er sich neue Soll-Eingangsdaten von Fernbedienung bzw. PC. Die Motoren machen so ca. 200rpm max, das ergibt mit meinen 15cm-Rädern ungefähr 6km/h max. Die Encoder liefern pro Umdrehung 1800 Ticks.
Wenn ich mit PC steuern will, ergeben sich für mich jetzt zwei Möglichkeiten:
1. Ich realisiere eine Geschwindigkeitsregelung im Mikrocontroller auf Basis der Encoderticks. Da ich nicht zwei verschiedene Modi auf dem Mikrocontroller haben will (Softwarekomplexität), würde diese Regelung den aktuellen Geschwindigkeitssteller ersetzen, also auch bei Fernsteuerung zum Tragen kommen. Vorteil aus meiner Sicht: Geringerer Regelaufwand auf der Strecke zwischen Rad und PC, weil die Regelung näher ans Rad rückt. Nachteil: Höherer programmatischer und mechanischer Absicherungsaufwand (wenn ein Encoder spinnt, spinnt möglicherweise der Regler und gibt Gas, und das eben auch, wenn ferngesteuert gefahren wird).
2. Ich realisiere eine Geschwindigkeitsregelung im PC auf Basis von Encoderticks und "Pi mal Daumen"-Geschwindigkeitsanforderungen an den Mikrocontroller. Vorteil: Hohe Systemsicherheit, primitiver Softwareaufbau auf dem Mikrocontroller. Nachteil: Relativ hohe Ungenauigkeit, weil die Geschwindigkeitsanforderung ja nicht ausgeregelt wird, und zeitliche Trägheit auf der Regelstrecke.
Die nachgelagerte Positionsregelung kommt auf jeden Fall in den PC.
Mir fehlt die Erfahrung, die Ungenauigkeit und zeitliche Trägheit abzuschätzen. Was meint Ihr? Wie würdet Ihr sowas aufbauen? Oder gibt es noch weitere Möglichkeiten, die mir noch gar nicht aufgefallen sind?
Vielen Dank im Voraus!