Ich möchte mein Projekt einer offenen universellen Plattform für Heimroboter (Rasenmäher, Staubsauger und dergleichen) vorstellen. Das Projekt ist noch dabei, Software zusammenzustellen und zu schreiben. Ich hoffe auf nützliche Kommentare und Vorschläge.

Ich habe kürzlich das Ardumower-Projekt (
Artikel über ihn ) kennengelernt und viele interessante Erfahrungen gesammelt. Leider hat dieser Roboter viele verschiedene Einschränkungen, so dass mein „Smart Home“ -Kunde ein Projekt eines völlig neuen und viel leistungsstärkeren Roboters gesponsert hat, der gut mit Grasmähen und verschiedenen anderen Aufgaben umgehen kann (zum Beispiel gibt es eine Idee Getränke an Gäste zu Hause liefern :)). Das Projekt wird als universelle und erweiterbare Plattform mit offenem Stromkreis und SDK zum Schreiben eigener Softwareoptionen entwickelt.
Das Hauptelement des Roboters ist die Karte mit dem 32-Bit-ATSAM3X8E-Prozessor, der mit dem in Arduino Due verwendeten identisch ist. Dadurch können Sie eine einfache und vertraute Entwicklungsumgebung verwenden und viele Probleme mit technischen Problemen aufgrund der großen Anzahl von Personen, die Programme für diese Plattform schreiben, beseitigen. Aufgrund der großen Anzahl von Mikrocontroller-Ports können Sie fast alles an die Platine anschließen. Board-Spezifikationen:
Angetrieben von 12 bis 30 Volt, einem eingebauten Ladegerät mit einem Strom von bis zu 5 Ampere und sogar einem Booster zum Laden aus der Solarbatterie während des Betriebs.
Zwei Sitze für die weit verbreiteten Kollektor-Motorsteuerungen Polulu Dual MC33926 mit der Möglichkeit, bis zu vier Motoren zu steuern (in zwei Versionen - zwei Motoren auf Rädern, die zweite Steuerung steuert den Mähmotor oder vier Motoren auf Rädern mit getrennten Kanälen). Motoranschlüsse haben Kabel zum Anschließen von Kilometerzählern.
Stellfläche für eine Schrittmotorsteuerung (z. B. Antrieb zum Ändern der Mähhöhe von Gras).
Ein Anschluss für die Installation von Orange Pi Zero (zur Unterstützung von Zentimetergenauem RTK-GPS und einigen externen komplexen Steuerungsalgorithmen) mit der Möglichkeit, die Firmware über diesen Mikrocomputer zu aktualisieren.
6 PPM-Signalausgänge zur Steuerung bürstenloser Motoren und Servos.
6 Anschlüsse für HC-SR04-Sonare, 2 Anschlüsse für Kollisionssensoren (z. B. Ardumower-Stoßstange mit pneumatischen Sensoren), zwei kapazitive Grassensoren, 2 Eingänge für analoge Infrarot-Abstandssensoren, vier Eingänge für verdrahtete Perimetersensoren, zwei gesteuerte Thermistoranschlüsse Anschlüsse für Lüfter, Piepser und drei LEDs (20 und 70 mA). Natürlich können mit bestimmten Einschränkungen viele Ports zum Anschließen anderer Sensoren verwendet werden.
Fast alle vom Mikrocontroller unterstützten externen Ports sind ebenfalls mit den Anschlüssen verbunden:
3 serielle Anschlüsse, zwei I2C-Busse mit 9 Anschlüssen (von denen einer mit Anschlüssen für Fünf-Volt- und Drei-Volt-Geräte gepuffert ist), 2 SPI, CAN-Busse (ohne physischen Transceiver), USB, zwei separate DACs (gerade an die Anschlüsse gebracht) da gibt es dort musik oder ähnliches).
Ein zusätzlicher 5 Volt 2 Ampere Schaltregler mit sechs Anschlüssen für externe Geräte. Nun, ein Relais mit einer Verriegelung zum Notabschalten der Batterie, um eine Überentladung zu verhindern, falls Sie die Ladestation nicht erreicht haben. Natürlich werden die Spannungs- und Stromaufnahme vom Mikrocontroller gesteuert (teilweise über den eingebauten Mehrkanal-ADC, teilweise über den optionalen MAX11617EE).
Im Leerlauf (Motortreiber sind inaktiv) beträgt der Stromverbrauch 130-140 Milliampere.
Schema (warf der Einfachheit halber alles auf ein Blatt):

Beim Löten der Platine bin ich auf die Tatsache gestoßen, dass einige Elemente für das manuelle Löten mit einem Haartrockner zu klein sind und etwas überhitzen kann (z. B. eine Diode in der Ladeeinheit), sodass einige geringfügige Änderungen möglich sind.
Die Entwicklung eines SDK zum Schreiben von Roboter-Firmware ist bereits im Gange. Mit seiner Hilfe wird es möglich sein, sich vollständig von der Hardwareverwaltung auf niedriger Ebene zu lösen, nachdem eine Reihe von Klassen für alle Peripheriegeräte und Sensoren erhalten wurden. Ein Code, der den Roboter dazu bringt, sich nach Norden zu drehen, sieht beispielsweise so aus (diese Beispiele funktionieren bereits, allerdings ohne einige Überlastungsprüfungen und dergleichen):
course = 0.0; imuSens.setCourse(course); motWheel.rollCourse((navThing *) &imuSens, 9000);
Und um entlang des verdrahteten Umfangs zur Station zu gehen und den Mähmotor anzuheben:
mow.setHeight(0); perSens.setTracking(true); motWheel.moveCourse((navThing *) &perSens, 120000);
Leider kann ich das SDK noch nicht selbst auslegen, es wurde noch nicht viel geschrieben (z. B. Code zur Unterstützung von Decawave DW1000-RFID-Tags und sekundären Sensoren). Aber ich kann sagen, dass alle Low-Level-Funktionen funktionieren und nach kurzer Zeit kann ich sie auf Github setzen.
Teaser: