Vor einem Jahr erschien auf Habré die
Überprüfung des Desktop-Roboters Dobot Magician. In diesem Artikel schlage ich vor, seinen älteren Bruder Dobot M1 in Aktion zu evaluieren. Ich werde auch versuchen zu erklären, warum ich dieses spezielle Modell für mein Projekt ausgewählt habe. Ich werde den Entwicklungsprozess der Demo in Qt / c ++ sowie einige unangenehme Momente beschreiben, die ich während des Entwicklungsprozesses erlebt habe.
Einführung
Dieses Jahr habe ich an einem der gängigsten Forschungsinstitute gearbeitet. Anfangs war alles ziemlich locker, und das Jahr versprach nichts Interessantes, bis eines Tages bei einer Kundgebung eine Diskussion darüber begann, wie Solarzellen (Schindelsolarzellen) gekachelt zusammengebaut werden können. Dieser Ansatz sei nichts Neues,
heißt es , dies sei eine der ersten Möglichkeiten, Panels für Weltraumsatelliten zusammenzubauen.
Ich weiß nicht, wie wahr das ist, weil ich keine Artikel oder Patente gesehen habe. Das Interesse der Öffentlichkeit an dieser Entscheidung hat sich jedoch erwärmt, auch weil SunPower vor einigen Jahren seine neuen Panels, die
P-Serie, auf den
Markt gebracht hat . In der Welt der Photovoltaik ist es einfach so passiert, dass, da die Sanpower etwas tut, jeder dies auch tun muss. Da sind wir. Alles ist einfach: Wir bereiten die Substrate vor, schneiden sie in Streifen und montieren sie. In diesem Moment bemerkte ich, dass ich persönlich definitiv nichts manuell sammeln würde, da sich meine Hände nicht in besonderer Gleichmäßigkeit unterschieden. Andernfalls kann das Ergebnis so etwas wie ein
Video auf YouTube sein. Und wir sind schließlich eine ganze Institution. Wenn wir wirklich etwas tun, ist es keine so kollektive Farm. Ich bot an, Roboter zu kaufen und sie für den gewünschten Prozess zu konfigurieren, und sie gaben mir die Erlaubnis.
Es sollte beachtet werden, dass wir uns entschieden haben, einfacher zu beginnen und Mini-Panels zusammenzubauen. Ein Mini-Panel ist ein Solarpanel, das kleiner als der Standard ist. Wir tun dies, um technologische Prozesse zu erarbeiten. Zuerst wurde ich von einem Panel mit einer Größe von 1 Standardsolarzelle mit Skalierungsplänen auf ein Panel von 2 x 2 geführt. Die Größe der Seite einer Solarzelle beträgt 16 cm. Dementsprechend wurden Roboter mit einem Zugangsfeld von 32 x 32 cm benötigt. Ich wollte eine genauere Genauigkeit und der Preis war billiger . Also begann ich mit einer Suchleiste die Sätze zu studieren. Ich entschied, dass 6 Achsen für das Projekt nicht benötigt werden, 4 sind genug, also wurde die Auswahl auf Roboter wie eine Narbe beschränkt. Ich fand heraus, dass der Kauf von Industrierobotern mit zusätzlichen Kosten verbunden ist, z. B. dem Entwerfen eines sicheren Arbeitsbereichs und dem Verlassen des Anwendungstechnikers am Installationsort, der den Roboter für Ihre Aufgabe programmiert. Gute Industrieroboter sind im Prinzip teuer, und die Dienste von Ingenieuren werden den Preis noch weiter erhöhen. Außerdem war es interessant, das Projekt selbst umzusetzen. Daher beschränkte sich die Auswahl auf Cobots, kollaborative Roboter mit geringeren Sicherheitsanforderungen und freundlicher für das Selbstprototyping. Also fand ich schnell die Firma Dobot. Ich habe den Dobot Magier wegen der Größe und Genauigkeit von 100 Mikrometern sofort fallen lassen. Ich schrieb ihnen eine Anfrage, um Spezifikationen zu geben und sagte, wo sie kaufen sollten. Ich fand heraus, dass es mit APIs APIs gibt, die in C ++ programmiert werden können. Es passte zu mir, aber ich konnte es nicht einfach direkt kaufen. Glücklicherweise fand ich einen Lieferanten in den Niederlanden, der mir 2 Stück für 8700 Euro mit Mehrwertsteuer mit Lieferung aus China verkaufte und gleichzeitig die gesamte Zollabfertigung übernahm.
Eigenschaften Freundlichkeit

Dobot M1 ist als erschwinglicher professioneller 4-Achsen-Kollaborationsroboter positioniert. Es kann einer Last von bis zu 1,5 kg standhalten (nicht getestet), hat eine Reichweite von bis zu 400 mm (nicht überall) und eine Genauigkeit von bis zu 20 Mikrometern (geprüft). Der Arbeitsraum der Freundlichkeit ist in der folgenden Abbildung dargestellt. Es ist nicht schwer zu bemerken, dass aufgrund der Konstruktionsmerkmale eine blinde Zone mit einem Radius von etwas weniger als 15 Zentimetern vorne vorhanden ist. Darüber hinaus berücksichtigt diese Raumkarte nicht die Ausrichtung der Hand. Dobot kann entweder rechtshändig oder linkshändig sein. Ich habe immer noch nicht herausgefunden, wie dies ohne zusätzliche Kalibrierung unterwegs eingeschaltet werden kann. Standardmäßig ist Dobot Rechtshänder, was bedeutet, dass die rechte Zone durch den Zugangsbereich des 2. Gelenks begrenzt ist, wenn das erste Gelenk nach rechts gerichtet ist. Der reale Bereich des Arbeitsbereichs beträgt also ungefähr 2/3 der in der offiziellen Zeichnung gezeigten Fläche.

Goodness hat E / A-Anschlüsse: digitale Ein- und Ausgänge mit 24-V-Pegeln (Standardpegel sind hoch) sowie analoge Eingänge. Welche Art von ADC es gibt, weiß ich nicht. An der Rückseite des Ständers und an der Hand selbst befinden sich Anschlüsse für die Arbeit mit Düsen. Ich habe vergessen, den Stecker am Arm selbst zu fotografieren, aber es handelt sich um eine Art CAA. Es gibt auch eine Erweiterungsschnittstelle, für die Sie eine zusätzliche Gebühr erwerben können. Dobot stellt über RS-232 oder über ein Netzwerk eine Verbindung zu einem PC her.

Gehäusematerialien: anscheinend Polycarbonat sowie ein schwarz lackierter Metallständer. Dieses Design verursacht kein Gefühl von Premium, sondern auch ein Gefühl von Handwerkskunst. Ich kaufte einen voll beladenen und einen in der Basis. Ich habe die Laserdüse und den 3D-Druck nicht getestet.
Um die Güte der Freundlichkeit zu testen, habe ich das Programm M1Studio für Windows verwendet, das von der Website des Unternehmens heruntergeladen wird. Aber das ist alles. Außerdem setzte ich mich mit API, Qt und einer Workstation mit Elementarwespen zusammen, um eine Demo zu schreiben, in der ich mit mehreren Höhen und Tiefen arbeiten konnte.
Wir schreiben eine Demo
Tatsächlich ist die Demo bereits auf dem
Github verfügbar. Die Dokumentation für API und Kommunikationsprotokoll kann von der Website des Herstellers heruntergeladen werden.
Zunächst verwendeten wir die SearchDobot () -Methode von api, die unter Linux nichts zeigte und nur in Windows funktionierte, wenn der Dobot über RS-232 verbunden war. Es ist seltsam, weil M1Studiya Dobotov über das Netzwerk perfekt definiert. Bei bekannten IP-Adressen funktioniert die ConnectDobot () -Methode einwandfrei. Es ist okay, dachte ich, ich werde den Router einrichten und die IP-Adresse an die Mohnblume anhängen lassen. Am nächsten Tag war ich überrascht, dass Freundlichkeiten nicht reagieren. Es stellte sich heraus, dass der Dobot beim Einschalten eine zufällige Mohnadresse hat. Dies ist eine solche Funktion der Firmware, die in der neuen Version im Mai behoben wurde, die ich jedoch nicht installieren wollte.
Ausgerüstet mit einem Programm zur Analyse von Netzwerkpaketen fand ich heraus, dass Dobot auf eine UDP-Anfrage an Port 6000 mit dem Text „WhoisDobotM1“ UDP-Antwort mit Text reagiert, der die Modell-Dobot-Nummer enthält. Auf dieser Grundlage wurde eine benutzerdefinierte Methode geschrieben, die Anforderungen über das gesamte Subnetz sendet und im Falle einer Antwort die Freundlichkeit initialisiert.
void MainWindow::on_buttonSearch_clicked() { QHostAddress host; QList<QHostAddress> list = QNetworkInterface::allAddresses(); for (int i=0; i<list.count(); i++) { if ((!list.at(i).isLoopback()) && (list.at(i).protocol() == QAbstractSocket::IPv4Protocol)) host = list.at(i); } QString subnet = host.toString().section('.',0,2) + "."; QByteArray data = "WhoisDobotM1"; QUdpSocket udpSocketSend; udpSocketSend.writeDatagram(data);
void MainWindow::readUdpData() { while (udpSocketGet.hasPendingDatagrams()) { QNetworkDatagram data = udpSocketGet.receiveDatagram(); QByteArray ip = data.senderAddress().toString().toUtf8(); QString name = QString(data.data()).section('_',0,0);
Die Demo-Oberfläche ist recht einfach und wird im Bild unten dargestellt.

Um die Freundlichkeit zu initialisieren und zu steuern, schrieb ich eine Klasse, in der ich die Funktionen realisierte, die ich benötige: Achsensteuerung, Bewegung von Punkt zu Punkt in einer geraden Linie und in einer Kurve, Rückkehr in die Ausgangsposition, Steuerung der Luftpumpe sowie Überwachung von Positionen und Fehlern. Wechseln wir uns ab. Wenn die Klasse initialisiert wird, wird die IP-Adresse der Güte in der Variablen gespeichert, die erste Verbindung dazu wird hergestellt, die gesamte Befehlswarteschlange wird bereinigt, auch wenn die Warteschlange leer ist, und die Beschleunigungs- und Geschwindigkeitsparameter für Motoren werden festgelegt.
class MyDobot : public QObject { Q_OBJECT public: explicit MyDobot(QObject *parent = nullptr); ~MyDobot(); void initDobot(QByteArray IPaddress); Pose getCurrentPosition(); void goHomeSafe(); void goHome(); void goSafe(); void goPosition(float x, float y, float z, float r); void goPositionStraight(float x, float y, float z, float r); void goJog(int index); void setAirPump(int status, int direction);
Ich habe beschlossen, einen Vektor mit Elementen meiner Klasse zu verwenden, um Dobot zu steuern, wenn ihre Anzahl größer als 1 ist. Jedes Element des Vektors hat eine Variable, die die IP-Adresse des Dobots speichert. Weil Die Bibliothek ist eine, und es gibt mehrere Dobotov. In jeder Methode der Klasse müssen Sie zuerst die Methode zum Herstellen einer Verbindung mit einem bestimmten Dobot aufrufen. Es mag schief aussehen, aber es ist alles unter der Haube, und dann ist die Arbeit mit dieser Klasse sehr praktisch.
void MyDobot::setAirPump(int status, int direction) { ConnectDobot(thisDobotIP, 115200, nullptr, nullptr); ...
Die Bewegung von Punkt zu Punkt in API Goodness wird durch verschiedene Methoden implementiert: in einer geraden Linie, in einer Kurve und auf eine andere Weise, an die ich mich nicht erinnere. In der folgenden Abbildung sind zwei Bewegungsbahnen zwischen zwei Punkten sichtbar. Eine ist eine gerade Linie, die sich bei ordnungsgemäßer Kalibrierung des Geräts beim Hin- und Herbewegen nicht teilt. Die zweite Trajektorie ist die gekrümmte Linie, die Sie erhalten, da die Firmware für die Freundlichkeit die Motoren nacheinander anpasst, um die gewünschte Koordinate zu erreichen. Es ist zu beachten, dass eine Bewegung in einer geraden Linie nicht immer möglich ist. Einige Positionen der Gelenke erlauben es nicht, in einer geraden Linie von Punkt A nach Punkt B zu gelangen.

Die Dobot-Positionsüberwachung wird mithilfe der Qtimer-Klasse implementiert, deren Qtimer :: timeout-Signal an meine MainWindow :: on_getPoseTimer-Methode gebunden ist. Ich muss zugeben, dass dies eine mittelmäßige Lösung ist, da ein reaktionsschneller Betrieb der Anwendung mit Ups nur möglich ist, wenn Sie ein Timeout von 1000 ms einstellen. Bei kürzeren Timings sind beim Verwalten der Ups Rucke zu spüren. Mir ist aufgefallen, dass ein Dobot manchmal eine Weile dumm sein kann, wenn er einen Befehl empfängt, und wenn Sie ziemlich oft Befehle senden, steigt die Wahrscheinlichkeit, in einen dummen Zustand zu geraten. Vielleicht liegt dies an dem ständigen Aufruf von ConnectDobot, der in dieser Demo unnötig erscheint, aber die Demo wurde parallel zum Hauptprojekt geschrieben, und im Hauptprojekt brauche ich wirklich eine solche Implementierung. Die Überwachung der Verbindung wird jedoch nicht jedes Mal aufgerufen, aber das Problem mit der Aufhängung bleibt bestehen. Eine Zeitüberschreitung von 1 s liefert leider keine so reibungslose Messung der Position der Güte im Raum, die beispielsweise im M1 Studio implementiert ist, aber andererseits ist dies nicht wichtig.
Bei der gleichen Methode tritt eine Fehleranforderung auf. Aus Gründen der Benutzerfreundlichkeit wird die Fehlercodeübertragung über die AlarmState-Struktur implementiert.
struct alarmState { uint8_t value[32]; };
Diese Struktur ist ein Array von 8-Bit-Elementen, und der Fehlercode ist in der Binärdarstellung eines der verschiedenen Elemente des Arrays codiert. Um den Fehlercode zu berechnen, müssen Sie im Element "1" suchen und seine Entladungsnummer (Einheit) zu 8 * n Elementen (die andere Fehler enthalten oder nicht enthalten) vor dem Wertarray hinzufügen. Ja, es kann mehr als einen Fehler gleichzeitig geben. Als nächstes muss der Fehlercode in dem Dokument gefunden werden, das auf der Website des Herstellers zum Download zur Verfügung steht. Der Inhalt von pdfk wurde in eine Textdatei kopiert, die als Ressource mit dem Projekt verbunden ist. Wenn der Fehlercode von 8 * 32 abweicht (d. H. Es liegt kein Fehler vor), wird dieser Code im Fehlerfeld angezeigt. Durch Klicken auf die Schaltfläche Alarm wird seine Beschreibung in der Datei analysiert und dann im Textfeld angezeigt. Übrigens werden Fehlerdecodierungen und -analysen außerhalb der Klasse durchgeführt, um die Ups zu steuern. Das scheint mir jetzt nicht ganz die richtige Idee zu sein.
Das Kit enthält eine Luftpumpe, die in der Bedienungsanleitung den Anschluss an die digitalen Ausgänge 17 und 18 vorschlägt. Ein Ausgang steuert das Ein- und Ausschalten der Pumpe und der zweite die Richtung der Luftbewegung. So wird beispielsweise ein pneumatischer Greifer aktiviert, der ebenfalls mitgeliefert wird.
Unkraut
Während ich den Dobot ausnutzte, stieß ich auf einige Probleme.
- Die Löcher im Ständer sind nicht für die Teilung der Löcher im optischen Standard-Steckbrett vorgesehen. Auf der anderen Seite, einmal, als versehentlich meine Freundlichkeiten miteinander kollidierten, rollte einer von ihnen einfach um die Achse des Befestigungsbolzens, was meiner Meinung nach schwere Schäden vermeidet.
- Aus dem ersten Absatz folgt der zweite. Nach der Kollision des Dobot verschoben sich ihre Achsen. Dies war zunächst nicht beängstigend, da ich eine Methode zum Kalibrieren der Achse des Dobot relativ zur Kamera geschrieben habe. Das Schreckliche ist in Absatz 3 passiert.
- Die vertikale Achse hat sich ebenfalls verschoben und jetzt ist meine Normalität nicht normal. Dies kann von der Kamera erkannt werden, wenn Sie mit den Punkten zwei Senkrechte zeichnen. Sie können sicherstellen, dass Dobot aufgrund der schrägen Vertikalen jetzt mit einem Stift nicht seine wahren X- und Y-Achsen zeichnet, sondern deren Projektionen. Und diese Projektionen können einen Winkel von weniger als 90 Grad haben. In der Realität führt dies zu einem kleinen Ausrichtungsfehler. Andererseits ist es nicht so beängstigend, weil der Fehler linear ist.
- Dobot-Firmware, grundsätzlich ca. Es gab einen kleinen Pfosten mit einer Mohnadresse, es gibt einige Probleme beim Warten auf Antworten auf UDP-Anfragen, aber ansonsten funktioniert es gut.
- Das Design bietet eine Batterie, die benötigt wird, um die letzten Koordinaten nach dem Ausschalten der Freundlichkeit beizubehalten. Wenn die Batterie leer ist, fällt die Spannung ab, wodurch diese Daten gelöscht werden. Aus diesem Grund wird der Dobot in einen Fehlerzustand geladen. Um aus diesen Zuständen abzuleiten, müssen Sie zuerst die Methode zum Löschen von Fehlermeldungen und dann die Suchmethode für die Position "home" aufrufen. Sie können die Batterie austauschen, der Vorteil ist enthalten. Die Batterie ist jedoch im Ständer versteckt, und um dorthin zu gelangen, mussten 4 Schrauben gelöst werden. Der Schlitz eines von ihnen wird abgeschossen.
- In meinem Projekt habe ich 3 Glasscheiben verwendet, um das Niveau des Tisches zu erhöhen. So lala Entscheidung, weil das Glas schief ist. Tatsache ist, dass Dobot beginnt, Fehler zu erzeugen, wenn seine vertikale Achse einen Wert von weniger als 15 mm hat, und es scheint, dass nicht alle Funktionen verfügbar sind. Daher muss sich der Arbeitsbereich direkt über der Befestigungsebene des Dobot befinden.
Fazit
Dank meiner Freundlichkeit konnte ich ein Projekt zum Zusammenbau von Solarzellen in einer gekachelten Mini-Steckdose durchführen, das auf Video zu sehen ist. Die Positionierungsgenauigkeit wurde auf denselben Siliziumwafern überprüft und lag in der Grenze von 1 Pixel auf einer Achse und 10 Pixel auf einer anderen. Die Kamera in diesem Projekt wurde mit einer Auflösung von 20 MP verwendet, und das Sichtfeld der Kamera entlang der langen Seite betrug etwa 17 cm. Es ist nicht schwer zu berechnen, dass 1 Pixel einer linearen Größe von etwa 30 Mikrometern entsprach. Es ist einfach so passiert, dass die verwendete Optik, wenn auch von hoher Qualität, es ermöglicht, Siliziumwafer nur in ihrer Mitte klar zu beobachten, während die Kanten der Wafer sehr verschwommen werden, was zu einer Unsicherheit bei der Bestimmung ihrer Flächen entlang kurzer Seiten und dementsprechend zu einer Unsicherheit bei der Bestimmung der Mitte des Wafers führt. Nach dem Kalibrieren der Achsen habe ich den Kamerafokus auf die kurzen Seiten der Platten eingestellt. Es ist anzumerken, dass es im Prinzip unmöglich war, sich dort wie in der Mitte des Sichtfeldes zu konzentrieren, aber dennoch. Aufgrund dieses Effekts lag der Positionierungsfehler entlang der Achse entlang der langen Seite der Solarzelle im Grenzbereich von 10 Pixeln, auf der kurzen Seite jedoch nur bei 1 Pixel. Das entspricht ungefähr 300 und 30 Mikron. Dadurch konnte ich die Integrität der Spezifikationen auf Richtigkeit überprüfen.