UPDATE: Einen Teilerfolg habe ich bereits erziehlt: Ich habe es geschafft, einen Servo mittels XBOX Controller zu steuern:
http://youtu.be/qnCina1r5Rk
Hilfe dazu habe ich hier gefunden.
Hallo,
ich wage mich nun an einen Hexabot mit 18 Servos, der von einem RPi gesteuert wird. Als Servoboard habe ich dieses verwendet: Servoboard
Funktioniert soweit ganz gut.
Nun zu meinen Fragen:
- Ich verwende die Library von Adafruit. Damit drehen die Servos mit voller Geschwindigkeit. Gibt es einen Weg, die Geschwindigkeit zu drosseln?
- Ziel ist es, den Bot mit einem XBOX-Controller zu steuern. Gibt es hierzu schon Erfahrungen?
- Welchen Servoakku soll ich verwenden?
UPDATE: Einen Teilerfolg habe ich bereits erziehlt: Ich habe es geschafft, einen Servo mittels XBOX Controller zu steuern:
http://youtu.be/qnCina1r5Rk
Hilfe dazu habe ich hier gefunden.
Nun brauche ich Hilfe beim Programmieren:
Ich möchte, dass der Bot beim Drücken der Taste "Y1" des XBOX Controllers nach vor läuft. Mit dem geposteten Code funktioniert das nur teilweise.Code:#!/usr/bin/python from Adafruit_PWM_Servo_Driver import PWM import xbox_read import time # =========================================================================== # Example Code # =========================================================================== # Initialise the PWM device using the default address pwm = PWM(0x40) pwm2 =PWM(0x41) # Note if you'd like more debug output you can instead run: #pwm = PWM(0x40, debug=True) servoMin = 200 # Min pulse length out of 4096 servoMid = 375 servoWidth = 200 steer = servoMin servoMax = 550 # Max pulse length out of 4096 def setServoPulse(channel, pulse): pulseLength = 1000000 # 1,000,000 us per second pulseLength /= 60 # 60 Hz print "%d us per period" % pulseLength pulseLength /= 4096 # 12 bits of resolution print "%d us per bit" % pulseLength pulse *= 1000 pulse /= pulseLength pwm.setPWM(channel, 0, pulse) pwm.setPWMFreq(60) # Set frequency to 60 Hz for event in xbox_read.event_stream(deadzone=12000): # Nach vor laufen if event.key=='Y1': # Linker Joystick nach vor # time.sleep(1) pwm.setPWM(10, 0, 350) pwm.setPWM(9, 0, 550) pwm.setPWM(8, 0, 500) # time.sleep(1) pwm.setPWM(10, 0, 350) pwm.setPWM(9, 0, 300) pwm.setPWM(8, 0, 250)
Im Grunde will ich eine Schleife einbauen, die die Servos zwischen 2 Stellungen hin und her bewegt, solange die Taste gedrückt wird.
Wie mache ich das richtig?
Bitte um Hilfe, danke.
Geändert von pinsel120866 (28.12.2014 um 11:21 Uhr)
ich bin einen Schritt weiter:
Ich weiss nur nicht, wie ich aus der while-Schleife rausspringen kann.Code:for event in xbox_read.event_stream(deadzone=12000): while event.key=='X': pwm.setPWM(10, 0, 350) pwm.setPWM(9, 0, 550) pwm.setPWM(8, 0, 500) time.sleep(1) pwm.setPWM(10, 0, 350) pwm.setPWM(9, 0, 300) pwm.setPWM(8, 0, 250) time.sleep(1) pwm.setPWM(10, 0, 350) pwm.setPWM(9, 0, 550) pwm.setPWM(8, 0, 500) time.sleep(1)
Möglichweise kann mir ja hier jemand helfen?
Nun habe ich das Projekt soweit fertig. Die ersten Schritte sind noch etwas wackelig, aber das liegt am "weichen" Chassis.
http://youtu.be/NsqLgpKzViY
Gesteuert wird mir einem XBOX Controller.
Hallo Pinsel,
ein sehr schönes Projekt hast Du da bisher umgesetzt =D>
Mich würde interessieren "wie schnell das Programm" in dieser Ausbaustufe im Endeffekt auf dem Pi läuft - Kannst Du die Zeit messen?
Viele Grüße
Jörg
Geändert von HeXPloreR (25.01.2015 um 10:15 Uhr)
Hallo,
messe ich gerne, wenn du mir sagst wie...
Hallo pinsel,
ich dachte an ein Oszilloskop und dann am besten einen Schleifen Durchlauf per extra high/low Pin abstecken.
Vermutlich wird es sowieso nicht wiederholbar genau werden - aber ein ungefähr Wert würde mir hier schon reichen.
Aber bitte, falls vorhanden, keine "Waits" mit messen.
Sollte doch gehen, oder?
Hast Du inverse Kinematik drin?
Viele Grüße
Jörg
Hallo Jörg,
ich fürchte, meine Elektronikkenntnisse reichen nicht aus, deinen Wunsch zu erfüllen. Oszilloskop habe ich auch keines. Inverse Kinematik wäre interessant, müsste ich mich aber noch schlau machen wie man das in Python programmiert.
Wenn du ein DMM mit Frequenzmessung hast könntest du einfach statt des oszi das DMM nehmen.
MfG Hannes
Lesezeichen