TAMS Robots
(:emenu:)
(:emenuend:)
TAMS Organisation
(:emenu:)
(:emenuend:)
IT Infrastructure
(:emenu:)
(:emenuend:)
PmWiki Docs
edit SideBar
|
Notizen zur Ansteuerung des PA-10 unter Linux Kernel 2.6
- benötigte Arcnet Kernel-Module:
arc-rawmode
com20020-pci
com20020
arcnet
und Optionen, damit die Arcnet-Karte im 10Mb/s Modus startet:
options com20020-pci backplane=1 clockm=3
ein eigener Interrupt/IRQ für die Karte ist nett, aber nicht notwendig.
Läuft (entgegen der Arcnet-Beschreibung in den Kernel-Docs) unter 2.4 und
2.6 / 3.0 auch stabil mit shared-IRQ.
Unter aktuellem Linux kommt die Konfiguration nach /etc/modprobe.d, wir
haben dazu entsprechende Einträge in /etc/modprobe.d/10-rccl-TAMS
# 1.a arcnet options (FNH 2010.05.21) in /etc/modprobe.d/10-rccl-TAMS
options com20020-pci backplane=1 clockm=3
# options com20020-pci backplane=1 clockm=3 shmem=0xd0000
# 1.b modules to be loaded on boot
# probeall arc0 com20020-pci arc-rawmode
Außerdem muss arc-rawmode extra angefordert werden, durch einen Eintrag
in /etc/sysconfig/kernel:
MODULES_LOADED_ON_BOOT="arc_rawmode"
Ggf. mit ifconfig arc0 nachschauen, ob das Device vorhanden und
zugreifbar ist. IRQ und IO-Adresse auf Plausibilität prüfen.
RX packets und TX packets möglichst gleiche Anzahl (sofern Mitsubishi-
Controller eingeschaltet und optisches Kabel gesteckt) und keine errors.
Dazu ist eine arcnet Interface-configuration erforderlich, also
/etc/sysconfig/network/ifcfg-arc0
BOOTPROTO='static'
BROADCAST='134.100.13.255'
IPADDR='0.0.0.0'
MTU=''
NETMASK='255.255.255.0'
NETWORK='134.100.13.0'
REMOTE_IPADDR=''
STARTMODE='onboot'
UNIQUE=''
- wenn das Modul geladen und arc0 aktiv ist, kann man bereits mit dem Controller
sprechen. Abhängig von den Device-Permissions geht dies eventuell
nur als root:
~hendrich/tmp/arcnet-test/testClearBrakes 0 0xff 0xfe
(0=arc0 1=arc1 2=arc2... 0xff=Arcnet-ID Controller, 0xfe=Arcnet-Addr. Mitsubishi)
arbeitet wie ein kleines Ping. Die Antwort kommt normalerweise sofort, nach einigem
Betrieb mit RCCL hatte ich aber auch schon einige Verzögerungen (vmtl. ArcNet oder
Kernel-Logging). Der Mitsubishi-Controller selbst kann zwar auf diverse Arcnet-Adressen
gejumpert werden, reagiert aber offenbar auf alle von diesen Adressen. Im Antwort-Paket
ist dann aber die eigene Adresse des Controllers enthalten:
tams38:# ~hendrich/tmp/arcnet-test/testClearBrakes 0 0xff 0xfe
Got Arcnet reply on iteration 0 nbytes=6
packet is: fe ff fe 0 0 54
Got Arcnet reply on iteration 0 nbytes=6
packet is: fe ff fe 0 0 54
paEnd ok.
Achtung: die Antwort ist noch vom ersten Test, mittlerweile ist der Controller auf
Arcnet-Adresse 0xfd umgejumpert, und es gibt ein weiteres Programm:
tams38:# ~hendrich/tmp/arcnet-test/testPing 0 0xff 0xfd
... sendet 100 Arcnet-Pakete, die ersten fünf gültigen Antworten werden protokolliert.
Warnung: wenn RCCL/Mitsubishi-Controller/Arcnet einmal abgestürzt sind, funktioniert
dies nicht mehr stabil, und die Antwortpakete kommen evtl. stark verzögert und enthalten
kuriose Daten. In diesem Fall mit
tams38:# ifdown arc0 tams38:# ifup arc0
versuchen, das Arcnet neu zu initialisieren.
$RCCL/bin.intel/pa10ClearBrakes 0 0xff 0xfe
versetzt den Controller in den Real-Time Modus und löst die Bremsen.
Zweite Person zum Festhalten und Notschalter in Reichweite erforderlich.
Dieses Programm benutzt NICHT den Real-time Krempel von RCCL, sondern
arbeitet mit sleep() im Hauptthread.
- Zum Bewegen des Arms mit RCCL (move, movej, ...) ist zusätzlich das
Device genrci notwendig.
tams38: ~hendrich/tmp/sahdow-rccl/movej right by 0,0,0,0,0,10
tams38: ~hendrich/tmp/sahdow-rccl/movej right to zero (gestreckter Arm) tams38: ~hendrich/tmp/sahdow-rccl/movej right to savepark (Parkposition a la Taser) tams38: ~hendrich/tmp/sahdow-rccl/movej right to table3 (Armstellung für Tisch)
Installationsquellen für genrci liegen im TAMS develop repository. Lokale Kopie
fürs Spielen auf tams69 liegt unter
~hendrich/tmp/kernel-2.6-rci/trunk/genrci
Dieses Programm (wie auch 'move' usw.) erfordert die volle Real-time
Unterstützung. Sofern nicht bereits vorhanden, via mknod die Device-
Einträge erzeugen (siehe Makefile) und dann das Kernel-Modul laden:
mknod /lib/udev/devices/genrci0 c 60 0 mknod /lib/udev/devices/pa10Left c 61 0 mknod /lib/udev/devices/pa10Right c 61 1
insmod genrci.ko (bzw. modprobe genrci).
Anschliessend sollte RCCL funktionieren. Siehe auch die Hinweise von
Andreas ('AJM') in tams69:/tmp/modprobe.d/10-rccl-TAMS
- Genrci ab Kernel 2.6.38 (no big kernel lock): problematisch, da sich die
Kernel-API geändert hat. Das aktuelle Kernelmodul scheint nach Umstellung
auf compat_ioctl() zu funktionieren. Siehe Quellcode für tams69 (F-329) unter
~hendrich/tmp/shadow-rccl/ sowie tams61 (TASER) unter /opt/rccl/genrci.
Bei letzterem zusätzlich sched.h als Include eingebunden.
- RCCL ab Kernel 3.0x (Ubuntu Oneric): Probleme beim Compilieren, da der
Compiler jetzt striktere Überprüfungen vornimmt und zusätzlich stack-protection
standardmässig aktiv ist. Siehe die modifizierten Quellen unter /opt/rccl/build
für Details; gebaut mit MYARCH=i586-linux. Gegenüber früher zusätzliche Optionen
in Makevars.i586-linux: -fno_stack_protection, und Linkeroptionen $(SYSLIBS)
nach der librccl.
- Zweiarmbetrieb: die aktuelle Fassung von paArc.c in rccl/src/drivers
setzt in arcSend() explizit "arc0" für sa.sa_data. Möglicherweise
keine gute Idee...
- Kartesische Ansteuerung / kinematische Gleichungen via RCCL: Funktioniert
auch unter 2.6. Siehe ~hendrich/tmp/shadow-rccl/movec (Demo von tesche)
und ~hendrich/tmp/arcnet-test/circle.PA10 (Demo von Denis. VORSICHT: die
Demo fährt ein paar Kreise und schwenkt dann noch den Arm. Nicht in Reichweite
des Arms stehen. Ausgehend von der 'zero'-Position fährt die Demo in eine
Singularität. Entweder vorher 'movec' ausführen, oder den Arm mit
'movej right to 1,1,0,0,0,0' ein bisschen nach vorn schwenken).
- Gelenkwinkel überschritten: das kann bei Ansteuerung mit 'movej ... by/to'
natürlich vorkommen, und leider passiert es manchmal auch via RCCL.
Die min/max-Gelenkwinkel in share/robotData/right.jls sind zwar absichtlich
etwas kleiner als die tatsächlichen, aber offenbar ist der Arm trotzdem manchmal
zu schnell und fährt noch das letzte kleine Stück in die Begrenzung.
Anschliessend ist der Arm via RCCL nicht mehr ansteuerbar, da RCCL die
Bereichsüberschreitung auswertet und weitere Befehle verweigert.
Einzige Abhilfe ist also: pa10ClearBrakes aufrufen, und gleichzeitig mit
sanfter Gewalt den Arm in den erlaubten Bereich drücken.
- History:
- 2011.12.16 - updates (document TASER 2.6 stuff)
- 2010.05.31 - updates (document circle.PA10-Demo, Bereichsüberschreitungen)
- 2010.05.27 - updates (PA10-Controller umgejumpert: 0xfd statt 0xfe, right statt left)
- 2010.05 24 - neu
|