PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Roboterarm



joe-d-arc
09.02.10, 11:38
Hallo All!
(geht zwar eher um selbstgebaute Software, denke aber schon, dass ich genau hier richtig bin)

Habe den Roboterarm mit USB-Schnittstelle
(Playtronic, die Firma gibt es anscheinend im Internet nicht)
von Pearl (da gibts nur den einen).
Die Windows Software zum "Programmieren" kann sich aber nur Bewegungsabläufe merken!
Das möchte ich gerne ändern und eine eigene Steuersoftware schreiben.

Nun häng ich aber schon an Punkt 1!

Nach dem Anschließen des Interface finde ich zwei neue Devices:

crw-rw---- 1 root root 251, 11 9. Feb 11:37 /dev/usbdev4.3_ep00
crw-rw---- 1 root root 251, 10 9. Feb 11:37 /dev/usbdev4.3_ep81

Kann hierzu nichts im Internet finden, deswegen trivial: was ist das?
Wahrscheinlich mache ich hier schon einen Denkfehler, wenn ich folgendes versuche:

echo "0xAA" > /dev/usbdev4.3_ep00 (/81)
bash: /dev/usbdev4.3_ep00: Kein passendes Gerät bzw. keine passende Adresse gefunden

Das Interface funktioniert wie eine Relaiskarte, mit der 5 Motoren vor/zurück eingeschaltet werden können. Ich möchte im ersten Schritt einfach nur Daten an das Interface senden, wie mache ich das?

lsusb -v zeigt mir folgendes:

Bus 004 Device 003: ID 1267:0000 Logic3 / SpectraVideo plc
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1267 Logic3 / SpectraVideo plc
idProduct 0x0000
bcdDevice 0.00
iManufacturer 0
iProduct 0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 8
Device Status: 0x0000
(Bus Powered)

Zu diesen gelisteten Angabe kann ich im Internet auch keine Erklärung finden! :-(
Bitte Euch um einen Tipp, wie ich das Interface ansprechen kann, Danke Joe.

ewe
10.02.10, 07:35
Morgen

Dieses usbdev ist ein generelles Gerät, damit wird sich nicht viel machen lassen, da muss erst noch ein Treiber dahinter. Im Netz habe ich nur etwas von hiddev gelesen, aber bin mir nicht ganz sicher ob das wirklich hinkommt. Die USB-ID sieht mir jedenfalls nicht so wirklich schön aus, könnte mir vorstellen, dass der Hersteller da seine eigene Interpretation von USB hat (USB-ID ist 1267:0000, die 1267 steht für die Firma (Logic3 / SpectraVideo plc
)m das 0000 müsste eigentlich die "Modellnummer" des Gerätes sein) Was sagt denn dmesg bzw. das syslog wenn du den Arm anschließt?

joe-d-arc
12.02.10, 16:56
Hab noch eine Information in der inf-Datei gefunden:

(c) Copyright 2007 ELAN
Scheint emc.com zu sein!?

dmesg:

[ 1447.289889] usb 4-1: new low speed USB device using uhci_hcd and address 2
[ 1447.439885] usb 4-1: configuration #1 chosen from 1 choice
[ 1447.443675] usb 4-1: New USB device found, idVendor=1267, idProduct=0000
[ 1447.443682] usb 4-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0

Kannst Du mir den Pfad für syslog geben?
(syslogd -d hab ich probiert, regiert nicht auf das interface!)

Gruss Joe

joe-d-arc
13.02.10, 19:59
Noch mehr Info:

udevinfo --export-db /dev/usbdev4.1_ep00
==>
P: /devices/pci0000:00/0000:00:1d.2/usb4/4-1
N: bus/usb/004/003
S: char/189:386

Was soll denn P:, N: und vor allen Dingen S: heißen?

ewe
13.02.10, 23:38
Kannst Du mir den Pfad für syslog geben?
Kommt auf die Distro an - die meisten führen das Log in /var/log/messages oder /var/log/syslog


Noch mehr Info:
P: /devices/pci0000:00/0000:00:1d.2/usb4/4-1
N: bus/usb/004/003
S: char/189:386
Was soll denn P:, N: und vor allen Dingen S: heißen?
P scheint der Pfad zum Gerät zu sein (PCI->USB), N wo die Gerätedatei liegt. Was das S heißen soll weiß ich nicht

Aber soweit ich das sehe wird das Gerät vom Kernel überhaupt nicht erkannt, es dürfte also kein direktes Device geben wo du einfach Befehle hin schicken kannst - da müsstest du vermutlich über sowas wie libusb (http://www.linuxforums.org/forum/linux-tutorials-howtos-reference-material/10865-developing-usb-device-drivers-userspace-using-libusb.html) gehen.

BedriddenTech
14.02.10, 00:13
Behrrschst Du C? Wenn ja, würde ich mir an Deiner Stelle die libusb ansehen.

Wene
14.02.10, 15:52
Einen ganz guten Eindruck wie USB funktioniert liefert auch CRE 86 (http://chaosradio.ccc.de/cre086.html). Ist ein Podcast, also auch (aber nicht nur) für Lesemuffel geeignet.

joe-d-arc
14.02.10, 19:33
Hallo All!

Erstmal Danke an

stefan-tiger,
die doku http://www.sprut.de/electronic/interfaces/usb/usb.htm war wirklich klasse um grundlegende Fragen zu klären.

ewe,
denke hab den falschen loglevel, muss der Sache nochnachgehen.

BedriddenTech,
libusb ist sicher ein sehr heisser tip!

Hatte heut schon den ganzen Tag probiert mit libusb, genauer: ich habs mit libusbjava probiert. Zwischendurch auch noch jUSB. Lief bei beiden was schief bei der Implementation :-(
Vielleicht lag es auch am Fehlen von libusb-dev, wo ich dann dank BedriddenTech beim C-programmieren drauf stiess!
Die API ist dann nich ganz so mein Ding, liegt abba wohl auch eher dran, dass mir jeder Beispiel-Sourcecode mehr sagt als ne Api (Ok, hinterher zum nachschlagen), hab nur leider kein vernünftiges (und kurzes) Beispiel gefunden.
Naja, soweit keine Fehlermeldung:

int main(void)
{
usb_init;
usb_find_busses;
usb_find_devices;
return EXIT_SUCCESS;
} /* main() */

Hatte gestern auch noch den ndiswrapper probiert, ist nicht wirklich was ich wollte, hing dann auch an:
modprobe ndiswrapper
Wollte der Kernel nicht fressen!

Steck letzt also sozusagen im Dschungel von Lösungsansätzen fest! Mir raucht der Kopf!

Denke ein wirklich kurzer C-Sourcecode, wie ewe meint bezogen auf PCI, würd mich jetzt am schnellsten weiterbringen.

Desweiteren denk ich, dass mich eine Speichermanipulation an der richtigen Stelle weiterbringen könnte?!

Bin abba auch für weitere Lösungsansätze dankbar, odda den Hinweis: "Joe nimm den, das ist der einfachste Weg!"

Thanks bis hier, Joe!

E S
19.02.10, 11:53
Hi,

sieht so aus als wenn im Roboterarm ein billiger Mikrocontroller mit USB Schnittstelle sitzt.

Um den zu steuern, muss man wissen welche Daten der erwartet und wie der die verarbeitet. Der wird wohl irgendwelche Anweisungen entgegennehmen was er wann und wie lange schalten soll. Ohne kenntnisse des Datenprotokolls kann man da nichts machen.

Sinnvoller wäre, die Elektronik rauszurupfen und gegen etwas zu ersetzen was man auch kennt. Wenn da wirklich nur eine relaiskarte drin ist, ersetze diese durch eine Relaiskarte mit Dokumentation wie die zu bedienen ist.

Gruß
Elmar

joe-d-arc
19.02.10, 21:37
Hallo Elmar,

ist ja mein Reden! zur Not löt ich mir ne Schnittstelle für die Centronics selbst zusammen, das wär wahrscheinlich der einfache Weg!
Abba darum geht es mir nicht:
Kann doch nich sein, dass das ansprechen eines USB-Geräts so unmöglich ist! Hab zwei Ep (s.o), weiss nur nix damit anzufangen!
Zum Thema Protokoll:
Sch* was auf Protokoll! Wenn ich zufällig Nullen und Einser an das Ding senden würde (wenn ich nur wüsste wohin) wird es wohl irgendwann reagieren! Das wär dann der Zeitpunkt für mich über Protokolle nachzudenken.
Den Rest hack ich dann schon!
Wenn bis hier nen Denkfehler drin ist, dann seh ich das vielleicht zu blauäugig, Kritik würd mich dann echt weiterbringen ;-)

Gruß Joe.

E S
19.02.10, 22:18
Hi,

wenn da ein µC dahintersteckt der prüft was da ankommt, kannst Du probieren was Du willst, Du wirst nur durch einen ganz dollen Zufall etwas bewirken was Du auch erklären kannst.

Ich habe schon Robotersteuerungen entwickelt und die Protokolle um ein exaktes Timing aller aktoren einhalten zu können sind mitunter recht heftig!

Gruß
Elmar

ewe
20.02.10, 12:37
Sch* was auf Protokoll! Wenn ich zufällig Nullen und Einser an das Ding senden würde (wenn ich nur wüsste wohin) wird es wohl irgendwann reagieren! Das wär dann der Zeitpunkt für mich über Protokolle nachzudenken.

Für Windows gibts Software, oder? Wenn ja kannst du dich da mit einem USB-Sniffer dazwischen hängen und mitlesen. Sollte einige kostenlose Programme für Windows geben.

Wene
20.02.10, 19:43
Kann doch nich sein, dass das ansprechen eines USB-Geräts so unmöglich ist! [...]
Wenn bis hier nen Denkfehler drin ist, dann seh ich das vielleicht zu blauäugig, Kritik würd mich dann echt weiterbringen ;-)

Bist Du denn unterdessen mit den USB Spezifikationen weiter gekommen? Wo genau steckst Du im Moment fest?