PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Panzer/Raupe mit 2-Achs Joystick



goerdy
17.07.2012, 14:20
Hallo,

ich bin ganz neu hier ;-)
Ich habe schon ganz fleisig hier gelesen und so langsam stehen die Pläne für den ersten eigenen Roboter.
Ich studiere Informatik und habe etwas erfahrung mit μC ...

Ich werde mir in den nächsten Tagen das RP5/RP6 Fahrgestell zulegen. Die Steuerung soll ein ATMega16 oder 32 übernehmen.

Das ganze soll via W-Lan gesteuert werden und nach und nach Autonom werden.

Ich berete gerade schon die gesammte Server-Client Stuerung vor.

Ich habe eben eine Funktoion zum Auslesen eines PlayStation Controllers (am USB Adapter) geschrieben... damit will ich den bot bedienen.

Nun bräuchte ich mal eure Hilfe.

Ich möchte einen 2-Achsen-Joystick zur Steuerung nutzen und muss das auf die Werte für die Motoren umrechnen.
Gibt es da eine art von Norm-Umrechnung?

Also meine Stick-Achsen gehen jeweils von -10 bis 10.
was klar sein dürfte ist:
x=10, y=0 ↦ beide Motoren 100% vorwärts
x=5, y=0 ↦ beide Motoren 50% vorwärts
x=-10, y=0 ↦ beide Motoren 100% rückwärts
x=-5, y=0 ↦ beide Motoren 50% rückwärts

interresant wird es bei
x=10, y=10 ↦ ein Motor 100% einer 50% ???
x=0, y=10 ↦ ein Motor 100% der andere 0% oder Bremsen oder Rückwärts ???

das Bremsen könnte man auch mit extra Tasten (L1,R1 am PS2 Controller) realisieren...

Ich hoffe ihr versteht mein Problem?
Wie habt ihr das den gelöst?

Ich habe wie gesagt noch keinen Bot und kann es noch nicht testen... würde aber gerne bis ende der Woche die Kommunikation mit dem Controller und die Steuerung fertig haben.

vielen Dank schon mal im Vorraus.

Philipp aka goerdy

MisterMou
17.07.2012, 16:38
Hast dir da ein schönes Startprojekt ausgesucht, so kannst überall was mitnehmen:)
Planst du die Elektronik selbst zu bauen?

Zur Steuerung, ich hab noch nie was von einer Normierung in dieser Sache gehört.
Ich würde aber sagen, dass bei x=0, y=10 die Motoren 100% entgegengesetzt laufen, ist am praktischsten. Bei einem diagonalen Knüppeleinschlag also |x|=|y| würde ich nur einen Motor laufen lassen, je nach dem wie groß x bzw. y ist, entsprechend schneller oder langsamer. Erreichst du überhaupt x=10, y=10 mit dem Playstationcontroller, also von der Hardwareseite? Das Gehäuse sollte das doch unterbinden.

Bremsen brauchst du die Motoren nicht, die bremsen sich selbst genug ;) Wenn sie keinen Saft bekommen, sollten die stur genug sein, um nicht mit zu laufen.

goerdy
17.07.2012, 17:24
Hallo und vielen Dank für die Antwort!


Planst du die Elektronik selbst zu bauen?
ersmal soll das Pollin AtMEGA Board als Hauptplatine drauf, zumindest bis ich endlich wieder Geld auf dem Giro habe.
Die Motoren sollen mit einem L293 getrieben werden, das schaffe ich noch zu löten und alles andere kommt nach und nach.


Erreichst du überhaupt x=10, y=10 mit dem Playstationcontroller, also von der Hardwareseite? Das Gehäuse sollte das doch unterbinden.
also ich bekomme vom PS2⇒USB Adapter (HID) bei vollem Einschlag einen Wert von (-)32767 den ich durch 3276.7 teile (ich denke 10 Stufen reichen erstmal). bei einem 45° Diagonal Einschlag bekomme ich bei den Analog-Sticks je nach Seite und Druck x10y10 oder x9y10 oder x10y9... also das geht. Wenn man das Digital Steuerkreutz nutzt geht nur 0 oder (-)10 je Achse, demnach geht auch hier x10y10.


Bremsen brauchst du die Motoren nicht, die bremsen sich selbst genug Wenn sie keinen Saft bekommen, sollten die stur genug sein, um nicht mit zu laufen.
Hmm ok, dann könnte ich mir ja die 2 Ports für die Motoren sparen. Im WiKi steht, das man bei Kettenfahrzeugen immer gerne den Motor bremsen will.

Zur Frage zurück:
x10 y10 = A=100% B=100%
x0 y10 = A= -100% B=100%
x10 y10 = A=0% B=100%

Ich versuche gerade das in Pseudo-C-code zu packen

//Für Motor A:
if(y>0)
{
A=x;
}
else
{
if(x>0)
{
A=x-abs(y)
}
else
{
A=x+abs(y)
}
}

//Für Motor B
if(y<0)
{
B=x;
}
else
{
if(x>0)
{
B=x-abs(y)
}
else
{
B=x+abs(y)
}
}

//Um die Angabe in % der Maximalleistung zu haben:
A=A*10
B=B*10


Das klingt zumindest in meinem Kopf gerade logisch... werde das mal in meinem Steuerprogramm implementieren und mir irgendwie visualisieren... mal sehenob ich einen Denkfehler drin habe.
Auf jeden Fall wäre das sehr einfach zu implementieren.

wenn noch jemand nen Tipp hat, immer raus damit.

An sonsten schonmal vielen Dank!

lg goerdy

MisterMou
17.07.2012, 18:07
Dein Code sollte nicht klappen.
Was passiert bei
x=0 y=10 ? A=0 B=100
x=10 y=10 ? A=100 B=0

Nicht ganz das Ziel ;)


Zur Frage zurück:
x10 y10 = A=100% B=100%
x0 y10 = A= -100% B=100%
x10 y10 = A=0% B=100%
sollte auch ehr
x10 y0 = A=100% B=100%
x0 y10 = A= -100% B=100%
x10 y10 = A=0% B=100%
lauten

Es sollte auch mal festgelegt werden, wer A und B ist.
In meiner Ansicht ist A in Fahrtrichtung rechts.
pos y = links
pos x = vorwärts

Aber warte bis du alles zusammen hast und probiere es aus, ist viel cooler, wenn man selbst die Fehler findet. Was soll denn passieren?

Slowly
17.07.2012, 18:46
Dafür habe ich mal ein Programm in Tiger Basic geschrieben und suche das morgen heraus. Deine Gedankengänge kann ich nachvollziehen da ich vor dem gleichen Problem stand. Es hat nur eine Weile gedauert zu verstehen was bei Dir X und Y ist. Koordinatenkreuz ist eigentlich X links/rechts und Y oben/unten. :-)
Viele Grüße
Slow

goerdy
17.07.2012, 21:02
Hallo,

also Asche über mein Haupt!
Habe selbst mitlerweile rausgefunden das es SO nicht klappt^^ Wahrheitstabellen sind was wert.

Was x und y angeht... das ast Mathe und Mathe ist ein A-Loch.

Bin gerade am Finnanzen Checken und fahre morgen evtl. zum blauen C.

Habe eben im Schwimmbad nochmal alles ausgearbeitet bin jetzt aber zu faul es abzutippen.

Vielen Vielen Dank für eure Hilfe.

@Slowly dein Code ürde mich natürlich trotzdem interesieren.

lg

goerdy