MIN-Fakultät
Fachbereich Informatik
TAMS

TAMS Robots (:emenu:)

(:emenuend:)

TAMS Organisation (:emenu:)

(:emenuend:)

IT Infrastructure (:emenu:)

(:emenuend:)

PmWiki Docs

edit SideBar

PA10 / Linux26

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