Cookie Hinweis
Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
x

HR-OS1 ROS Research Platform

25 / December 2017

Der Roboter befindet sich derzeit in der Bauphase, weshalb der Beitrag stetig erweitert wird

Der HR-OS1 ist ein humanoider Roboter von dem amerikanischen Unternehmen TrossenRobotics. Die verwendeten Servomotoren werden von ROBOTIS produziert, und verfügen über interene Strommessung zur Regulierung des Drehmoments, und eine Auflösung von bis zu 1024 Steps/Umdrehung. In unserem Anwendungsbeispiel haben wir auf nachfolgende Komponenten gesetzt:

Der Roboter verfügt in der Basisversion über alle benötigten mechanischen Komponenten, jedoch über keine Verkleidung. Diese können mittels 3D-Drucker bei jedem vorort selbst hergestellt werden. In unserem Beispiel haben wir auf den Ultimaker 3 in Kombination mit PLA/PVA gesetzt.

Die 3D-Dateien (.stl) befinden sich im Interbotix GitHub Repository, weisen jedoch Polygonenfehler auf. Leider sind die Fehler so gravierend, weswegen unter anderem das Body Vorderteil nicht gedruckt werden kann. Solche Fehler resultieren meist aus alten CAD Programmen, oder fehlerhaften Plugins im CAD Programm. Zum Glück stellt Netfabb eine Softwarelösung zur Verfügung mit welcher sich solche Fehler korrigieren lassen.

Die bereinigten .stl Files können HIER heruntergeladen werden.

Software & Hardware

Unser Roboter soll auf der OpenSource Middleware ROS basieren. ROS steht für Robotic Operating System und wurde von dem amerikanischen Unternehmen Willow Garage entwickelt. Zu den derzeitigen Nutzer zählen unter anderem das MIT, Rethnik Robots, BMW und viele mehr.

Ein großer Unterschied zwischen ROS und einem "normalen" Python Code, ist das multi threading. Dies bedeutet das mehrere Threads (Prozesse) gleichzeitig ausgeführt werden können bzw. diese auch mit einander kommunizieren können (Peer to Peer).


Nachfolgend ein Arduino Beispielcode:
 

#include Servo.h>

Servo servo; 

void setup()

{
servo.attach(1);
serial.begin(9600); 
}

void loop()
{ 
servo.write(0); 
delay(3000);
serial.print("Position 0");
}

Das Servo ist am digitalen Port 1 angeschlossen und dreht zu einem Winkel von 0°, macht dann eine Pause von 3 Sekunden bevor die Ausgabe stattfindet, dass das Servo die Position erreicht hat.
In Verbindung mit ROS wäre es möglich, solch einen Prozess aufzuteilen, sodass die Ausgabeanweisung unabhängig von der Servoansteuerung abläuft - dies erfolgt durch so genannte Publisher und Subscriber.

Bezüglich der Hardware haben wir auf Low Cost Komponenten gesetzt, wie den Benewake TFmini LiDAR zur Distanzmessung, ein Raspberry Pi 3 mit Ubuntu und ein von uns entwickeltes Dynamixel Servo Controllerboard. Dieses Board verfügt wie die Dynamixel Servomotoren über ein Half Duplex Interface, wodurch der Servomotor sowohl angesteuert, als auch die aktuelle Position, Temperatur und anliegende Spannung abgefragt werden kann.

Darüber hinaus ist es dank dem Atmega644P uC möglich, sowohl 25 Publisher als auch 25 Subscriper zu implementieren. Das bedeutet, dass insgesamt bis zu 50 Prozesse, wie z.B. Lagebestimmung (IMU), Distanzmessung, Bewegungsabläufe etc. unabhängig von einander gestartet, pausiert, oder auch ausgeführt werden können.

Darüber hinaus wurden 6 digitale, 4 anloge Ports sowie die I2C Schnittstelle des uC nach außen geführt. Dadurch können unteranderem noch 6 PWM Servos und diverse Expansion Boards oder Sensorik angesteuert werden. Die Kommunikation zwischen Raspberry Pi/ROS und dem DSC (Dynamixel Sero Controller) erfolgt mittels der ersten UART Schnittstelle des uC (RX0/TX0)

Während der Entwicklung haben wir viel Wert darauf gelegt, sämtliche Hard.- als auch Softwarefiles für jedermann zugänglich zu machen, um Verbesserungen und vor allem Eigenentwicklungen so einfach wie nur möglich gestalten zu machen. Sämtliche Aufzeichnungen, Schältpläne und Softwarefiles können HIER oder unter dem Beitrag "Raspberry Pi Dynamixel Servo Controllerboard" eingesehen bzw. heruntergeladen werden.

Darüber hinaus wurde in der Zwischenzeit die vollständige Integration in ROS vollzogen und die Anleitung HIER zugänglich gemacht. Aufgrund dessen konnten wir auch den Bau unseres HR-OS1 fortsetzen, welcher in der Zwischenzeit ein Raspberry Pi 3B+ samt MYBOTSHOP DSC verbaut bekommen hat.

Anpassung der Konfigurationsdatei (con.yaml)

Wie in dem ROS NODE Topic beschrieben, wird jedem verbauten Servomotor eine eindeutige ID sowie ein eindeutiger Name im ROS Framework zugeteilt. Dies kann z.B. wie nachfolgend dargestellt aussehen:

Wie man bei dem darüberliegendem Screenshot sehen kann, haben wir einzelnen Servomotoren den Namen, entsprechend Ihrem Freiheitsgrades, zugeteilt.

Es ist zu beachten, wenn man die Datei mit einem Texteditor im RDP öffnet, muss die Formatierung mittels Leerzeichen erfolgen. Sollte man anstelle dessen, die Formatierung mittels Tab durchführen wollen, so erscheint beim Kompeliervorgang (catkin_make) ein Fehler.

Unser Roboter befindet sich derzeit in nachfolgend dargestellten Baustadium. Wir haben ein Arm demontiert um die Hand so anzupassen, dass diese ebenfalls Gegenstände greifen kann. Um nun die richtige Zuweisung, und die Funktionstüchtigkeit eines jeden Servos zu testen, möchten wir den linken Arm heben lassen. Diesen Freiheitsgrad bildet der Servomotor rotation_left mit der internen ID 2.
Wir öffnen nun ein weiteres Terminal und geben nachfolgenden Befehl ein:

rostopic pub /rotation_left/command std_msgs/Float64 500

Der Servomotor sollte sich nun zur Position 500 bewegt haben. Sollte dies nicht geschehen sein, so bitte nochmals die interne ID überprüfen und/oder den Kompiliervorgang erneut ausführen:

  • cd catkin_ws
  • catkin_make


Bitte melden Sie sich an, um einen Kommentar zu schreiben.