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.
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.