Contacts

Hardware Description

   BioRobX5v3Hardware

Software

Operating system

  • Debian with RT-Preempt
   https://rt.wiki.kernel.org/index.php/Main_Page
  • IgH EtherCAT

Installation instuction can be found at IgH EtherCAT

Note that it does not work with the latest version of EtherCAT (currently at 1.5.1) but requires a previous version from the Mercurial repository. The tested version is 1889 with SHA 131f655c03d3 by e.g.

   hg revert -r1889 .

Library API

  • Written in C++
  • read joint and motor positions converted to radians
  • send voltages
  • Kunz sent us information on the motors and a Simulink model (motor torques -> voltages)
  • includes demo programs (with source) for reading sensors/sending voltages

Demo Program

  • for teach-in: disable outputs to make it compliant
  • use PID position control
  • use a PT1 to filter commands/steps-functions
  • use a lookup table to determine torques

Initialization

  • when switching on motor encoders are set to zero
  • upright position is defined as 0 for motor encoders
  • could initialize at arbitrary position, disable feedback on motor encoders, use only joint encoders to move it to upright position and then reset the motor encoders
  • motor position used to calculate torques

Frequency

  • 1-100 kHz (encoders 10/20 kHz)

Library Instructions

Sie können jedoch trotzdem mit der Entwicklung anfangen, da sich an der API an sich nichts mehr ändern wird, ggf. werden noch ein paar neue Methoden hinzukommen. Damit sie einen groben Überblick bekommen, hier eine ganz kurze Beschreibung:
Die Basis-Klasse ist BioRob::Control, welche sozusagen das Herzstück der Anwendung bildet. Eine neue Instanz wird über BioRob::Control::newInstance angelegt. Mit BioRob::Control::start und BioRob::Control::stop starten bzw. beenden Sie die Echtzeit-Regelung. Über BioRob::Control::enableOutputs und BioRob::Control::disableOutputs können Sie die Spannungsausgabe ein- bzw. ausschalten.
Die Klasse BioRob::Controller stellt die API für Regler zur Verfügung. Für Ihre Regler legen Sie eine neue Klasse an und verwenden BioRob::Controller als Basis-Klasse. Über BioRob::Control::setController verwenden Sie ihren Controller in der Regelung. Es ist prinzipiell möglich, den Regler während dem Betrieb, d.h. aktivierter Echtzeit-Regelung, zu wechseln.
Die Klasse BioRob::TargetControl ist für die Echtzeit-Sollwertgenerierung zuständig. Zwei Implementierungen existieren bereits, eine für das Anfahren einzelner Gelenkwinkelkonfigurationen (DirectJointControlMode) und eine für das Abfahren einer Trajektorie. Sie können auch eigene Implementierungen erstellen, dazu legen Sie eine neue Klasse an und verwenden BioRob::TargetControl als Basisklasse. Eine eigene Implementierung können sie mittels BioRob::Control::setTargetControl setzen. Dies sollte prinzipiell auch während dem Betrieb möglich sein.
Die Klasse BioRob::DesiredValues speichert die von BioRob::TargetControl generierten Sollwerte, welche vom Regler als Input verwendet wird. BioRob::InValues speichert die aktuellen Sensordaten. Diese werden dem TargetControl und dem Controller übergeben.
BioRob::OutValues speichert die vom Regler berechneten Ausgangswerte, d.h. die Ausgangsspannungen. Die Werte müssen sowohl im Feld out und controller gespeichert werden!
In der Bibliothek ist momentan kein Regler enthalten. Um mit dem System arbeiten zu können, ist es notwendig, dass ein Regler registriert wird. Mit dem Beispielcode werde ich einen einfachen P-Regler mitliefern, der dann auch als Standard-Regler zu beginn gesetzt sein wird. Um das System zu verwenden, sind folgende Schritte notwendig:
1. Eine Instanz von BioRob::Control über BioRob::Control::newInstance anlegen. Hier kann ausgewählt werden, ob das Simulationsmodell oder die Hardware verwendet wird.
2. Einen Regler (BioRob::Controller) registrieren. Dazu BioRob::Control::setController aufrufen.
3. Regler-Thread starten. Dazu BioRob::Control::start aufrufen. Bei Verwendung der BioRob-Hardware sollten jetzt die gelben LEDs leuchten.
4. Spannungsausgänge einschalten. Dazu BioRob::Control::enableOutputs aufrufen.

Im Verzeichnis bioroblib sind die aktuelle Bibliothek und ein paar Beispiele enthalten. Die Beispiele sollten direkt ausführbar sein. Um den Quellcode der Beispiele (in bioroblib/examples/src) zu übersetzen, führen die im Verzeichnis bioroblib/examples
ccmake .
bzw.
cmake .
und danach
make
aus. Bevor Sie die Bibliothek benutzen, setzen Sie bitte im Programm biorobapp_ethercat unter Settings -> Robot Configuration die Daten des Roboters (Gelenkwinkelbeschränkung, Massen, Längen, Getriebeübersetzung) bei aktivierter Verbindung aber deaktivierten Ausgängen. Kleinere Tests können Sie damit bereits mit dem Roboter ausführen.

Errors

   0.010 [ Warning][Thread] Forcing priority (0) of thread with
   !SCHED_OTHER policy to 1.
   0.816 [ ERROR  ][TypeInfoName] Can not build ValueDataSource of unknown_t.
   biorob::Controller::loadSettings: X4H1_PIDStateControl: Loading
   controller settings from Controller.ini
   biorob::Controller::loadSettings: Controller_DirectIO: Loading
   controller settings from Controller_DirectIO.ini
   0.887 [ Warning][PeriodicThread] Forcing priority (4) of thread with
   SCHED_OTHER policy to 0.
   biorobapirt: requesting EtherCAT master...
   biorobapirt: creating EtherCAT domain...
   BioRobApp: ==== Master-Informationen ====
   BioRobApp: Anzahl Slaves: 0
   BioRobApp: Anzahl Konfigurationen: 0
   BioRobApp: Anzahl Domains: 4
   BioRobApp: Anzahl an Slaves unzulässig.
   biorobapirt:  delete shared memory.
   biorobapirt:  delete semaphore.
   biorobapirt:  release ethercat master.
   0.892 [ Warning][Thread::start] Thread Activity refused to initialize().

Die von Ihnen aufgeführte Fehlermeldung ist typisch, wenn der BioRob nicht vom EtherCAT-System erkannt wird oder das Netzwerkinterface nicht hochgefahren ist ("Anzahl Slaves: 0"). Mit

   dmesg | grep eth

können Sie sich die Netzwerkinterfaces ausgeben lassen. Mit

   sudo ifconfig

sehen sie, welche dieser Interfaces aktiviert sind. Wir nur eines oder keines der Interfaces aufgeführt, können Sie mit

   sudo ifconfig ethX up

(X = Interfacenummer), die Interfaces aktivieren. Ansonsten bzw. danach ist es notwendig den EtherCAT-Master neu zu starten.

   sudo /etc/init.d/ethercat restart

Danach sollten zwei EtherCAT-Slaves gefunden werden,

    0  0:0  PREOP  +  TEAM BioRob  -  3  Motoren
    1  0:1  PREOP  +  TEAM BioRob  -  3  Motoren

wenn Sie

    sudo /opt/etherlab/bin/ethercat slaves

ausführen.


um die Kommunikation zwischen dem Rechner und dem BioRob zu verbessern (bessere Erkennung der Slaves; geringere CPU-Last; sicherer, da EtherCAT-Master direkt mit der Netzwerkhardware kommuniziert, anstatt über den Netzwerk-Stack vom Linux-Kernel), habe ich den Netzwerkkartentreiber für das EtherCAT-System angepasst. Dieser ist der EMail angehängt. Zudem ist eine Anleitung beigefügt, um den Treiber benutzen zu können. Die Dateien r8169* müssen im Benutzerverzeichnis unter ethercat-default/devices abgelegt werden.

Wenn nur ein EtherCAT-Slave erkannt wird, kann es ggf. notwendig sein, den BioRob kurz von der Stromversorgung zu trennen. Bei uns ist dieses Problem bisher recht selten aufgetreten, seitdem wir EtherCAT benutzen. Mit dem geänderten Netzwerkkartentreiber könnte das Problem behoben sein.

attachment.zip Δ

With this update the ethercat NIC does no longer show up in ifconfig. We changed

   /etc/network/interfaces

to not use the NetworkManger to make the computer visible in the kyb-network. Due to this change, the networking has to be restarted as well

   sudo /etc/init.d/networking restart

after restarting ethercat. For the boot sequence this is autmatically done at the very end of initializing the services by including it in

   /etc/rc.local

bezüglich des Problems mit dem zweiten EtherCAT-Slave, da wird es notwendig sein, den Roboter zu Tetra zu senden. Bei der Gelegenheit bietet es sich an, die Firmware Ihres BioRob zu aktualisieren.

Die Abdeckung für den 1. Gelenksensor, der den Magnet für den Hall-Encoder enthält, wird, soweit mir bekannt, mit dem unteren Metallring in seiner Position fixiert. Werden die Schrauben von unten gelöst, so kann der Metallring und die Abdeckung entfernt werden. Dies sollte nicht gemacht werden. Zum Entfernen der Bodenplatte müssen Sie die oberen Schrauben entfernen, dann können Sie die Bodenplatte abnehmen. Von einem zusätzlichen Teil oder Verklebung ist mir nichts bekannt.

Wegen der Kalibrierung des Gelenksensors können Sie folgendes machen: Die Regelung muss deaktiviert sein! Sie stellen per Hand das erste Gelenk in Nullposition und führen folgendes aus:

   sudo /opt/etherlab/bin/ethercat upload -p 0 0x6001 04
   sudo /opt/etherlab/bin/ethercat download -t uint32 -p 0 0x8003 04 0x????????

Mit dem ersten Befehl bekommen Sie zwei Zahlen ausgegeben, ein Hex-Wert und eine Dezimalzahl. Das ist die aktuell gemessene Position. Diesen Wert negieren Sie und übermitteln den negierten Wert in Hex-Format mittels des zweiten Befehls an den Roboter (z.B. aus 0x14 20 -> -20 = 0xffffffe0) . Damit ist der Sensor neu kalibriert.

Sie können das Netzteil durch ein anderes, stärkeres ersetzen. Die Versorgungsspannung darf zwischen 10 und 28V liegen. In Ihrem Fall sollte das Netzteil eine Leistung von 120W oder mehr liefern können, damit die Versorgungsspannung nicht komplett einbricht oder das Netzteil wegen Überlastung abschaltet.


die LEDs auf beiden Seiten des BioRobs sind dafür gedacht, ein Feedback über den Belastungszustand des Roboters zu geben. Als Grundlage für die Farbe der LEDs wird die Summe der Motorströme verwendet. Auf jeder Seite gibt es 4 Farb-LEDs die angesteuert werden können. Bei jeder Aktualisierung werden nicht immer die Werte aller Farb-LEDs übertragen. Es kann manchmal vorkommen, dass eine Übertragung aus irgendwelchen Gründen fehlschlägt und somit der Wert einer oder mehrerer LEDs im BioRob nicht richtig gesetzt ist. In diesem Fall zeigt der BioRob andere Farben an wie üblich. Hellblau sollte der BioRob leuchten, wenn er in der Nullstellung steht und unbelastet ist. Dunkelblau bedeutet normaler Betrieb und unbelasteter Zustand. Die Farbe ändert sich je nach Belastungszustand bis rot bei hoher Belastung.

Die Lichter am BioRob erlöschen in verschiedenen Situationen.

  • Wenn der Steuerrechner stark ausgelastet ist, wird der Thread für das Setzen der LED-Werte nicht mehr oft genug ausgeführt, so dass die Aktualisierungsfrequenz herabgesetzt ist. Hier kann es vorkommen, dass kurzzeitig die Farben nicht korrekt dargestellt werden, möglicherweise auch dass die LEDs vollständig ausgeschaltet werden.
  • Bricht die Verbindung zwischen BioRob und Steuerrechner für eine längere Zeit ab, so schaltet die Elektronik im BioRob auf Offline, und somit werden auch die LEDs ausgeschaltet. Kommt wieder eine Verbindung zu Stande, so geht der Betrieb wie üblich weiter.
  • Wird die Elektronik des BioRob kurzzeitig mit zu geringer Spannung versorgt, so kann es ebenfalls vorkommen, dass die LEDs (kurzzeitig) erlöschen. Dies tritt vor allem auf, wenn die Belastung am BioRob groß wird und das Netzteil mit der Belastung (großer Stromfluss) nicht zurecht kommt. Aktuell lässt sich die Versorgungsspannung am BioRob nur mit niedriger Frequenz abfragen, daher wäre es notwendig, diese mit einem Oszilloskop zu messen. Hier ist es notwendig ein entsprechend dimensioniertes Netzteil zu verwenden. Meine Kollegen vom BioBiped-Projekt haben dasselbe Problem nur in noch gravierender Form, diese Planen mittlerweile die Verwendung von Autobatterien, da diese einen ausreichend großen Stromfluss abgeben können, ohne dass die Spannung einbricht.