Ich hätte eine Antwort geschrieben, aber ich tippe auf einem Telefon. Im Allgemeinen ist ROS nicht obligatorisch. Meiner persönlichen Meinung nach ist es je nach ROS sogar schlecht. Welche Komponente Sie auch haben, machen Sie daraus eine tragbare Bibliothek und schreiben Sie dann ein ROS-Modul damit. Wenn ROS stirbt oder sich Ihre Anforderungen ändern, würden Sie dies gerne tun.
Shahbaz
Antworten:
18
Ich bin zurück an einem Computer!
Wie ich in diesem Kommentar sagte , ist ROS im Allgemeinen nicht obligatorisch. ROS ist eine Plattform unter vielen, berühmt vor allem, weil Willow Garage irgendwann kostenlose Roboter an diejenigen verschenkt, die die meisten ROS-Module geschrieben haben. Das heißt, es ist nicht die bestmögliche Plattform und sicherlich nichts Besonderes. Insbesondere der Wettbewerb führte zu vielen Modulen von geringer Qualität, nur um die Zahlen zu erhöhen.
Im Laufe der Zeit hat sich die Qualität der ROS-Module verbessert, und es gibt auch viele davon. Mit ROS haben Sie daher den Vorteil, dass Sie viel von dem, was bereits getan wurde, wiederverwenden können. Sie können hier einige Gründe lesen , warum Sie ROS verwenden möchten.
In diesem Sinne sollten Sie auch auf die Nebenwirkungen achten.
Verteilte Kontrolle
Mit ROS haben Sie viele Knoten, die über das Netzwerk miteinander kommunizieren. Dies ist manchmal gut und einfach, führt jedoch im Allgemeinen zu einer stark variierenden Verzögerung beim Empfang von Nachrichten. Infolgedessen müssten Sie eine große Steuerungsverzögerung haben, um sicherzustellen, dass alle Nachrichten eintreffen. Dies bedeutet, dass Sie nicht schnell auf Ereignisse reagieren können, was wiederum bedeutet, dass Sie Ihren Roboter langsamer bewegen müssen, um diese Ereignisse nicht zu verpassen.
Ob Sie es glauben oder nicht, die Leute steuern den Roboter tatsächlich über ROS ( MoveIt! Ist der Name des relevanten Satzes von Komponenten). Schleppend. Unsicher. Aber einfach!
Nicht in Echtzeit
Auch wenn ROS nicht verteilt ist, ist es keine Echtzeitplattform. Das bedeutet, dass es im freien Ermessen des Linux-Kernels liegt, Ihre Aufgaben jederzeit nach eigenem Ermessen zu planen. Dies ist für einige Anwendungen in Ordnung, für andere jedoch nicht. Sie müssen sich also Ihre eigenen Anforderungen ansehen. Benötigen Sie eine Garantie dafür, dass Ihre Aufgabe innerhalb eines bekannten Zeitrahmens abgeschlossen wird? In diesem Fall benötigen Sie ein Echtzeitsystem.
Gehostete Laufzeitumgebung
Ein weiterer zu berücksichtigender Punkt ist, dass ROS zwar ein allgemeines Kommunikationsprotokoll ist, jedoch im Wesentlichen nur für gehostete Umgebungen unterstützt wird. Gehostet bedeutet, dass der Code auf einem Kernel ausgeführt wird, im Gegensatz zu freistehend, was bedeutet, dass der Code die Hardware direkt steuert (z. B. auf einem Mikrocontroller).
Wenn Ihre Robotikanwendung in der Nähe der Hardware ausgeführt wird und Sie daher ein Programm benötigen, das auf einem Mikrocontroller ausgeführt wird, hilft Ihnen ROS nicht weiter.
Plattformverriegelung
Last but not least führt die Entwicklung für ROS zu einer Plattformsperre. Dies bedeutet, dass wenn Sie sich in Zukunft aus dem einen oder anderen Grund dazu entschließen, Ihre Arbeit auf eine andere Roboterplattform wie OROCOS, YARP usw. zu stützen, dies unerträglich wäre.
Sie wären auch etwas an Linux gebunden. Linux ist zweifellos das Beste, aber eines Tages müssen Sie möglicherweise ein anderes System wie QNX, VxWorks usw. unterstützen, und Sie würden dort auch Probleme haben.
Wenn Sie für Mikrocontroller schreiben, vergessen Sie ROS. Wenn Sie High-Level-Module schreiben, empfehle ich dringend, tragbaren Code zu schreiben. Angenommen, Sie haben einen neuen Sensor entwickelt und möchten ein Modul schreiben, das Daten von diesem Sensor erfasst, der über den CAN-Bus mit Ihrem Computer verbunden ist.
In dieser Situation können Sie eine unabhängige Bibliothek mit Funktionen schreiben, die mit Ihrem Sensor arbeiten und Daten erfassen können. Sie könnten sogar daran denken, einen Thread in der Bibliothek zu erzeugen, der regelmäßig Daten erfasst und in die Warteschlange stellt.
Sobald Sie über diese Hilfsbibliothek verfügen, können Sie eine CLI, eine GUI, ein ROS-Modul, ein OROCOS-Modul, ein YARP-Modul schreiben, eine Verbindung zu Matlab herstellen oder was auch immer Sie für die Interaktion mit Ihrem Sensor verwenden möchten.
Schlussbemerkung: Was ich hier gesagt habe, gilt allgemein für alle Robotikplattformen und nicht nur für ROS.
Kommentare sind nicht für eine ausführliche Diskussion gedacht. Dieses Gespräch wurde in den Chat verschoben .
Mark Booth
2
"ROS" ist ein relativer Begriff. Der APM führt vollständigen benutzerdefinierten Code aus, der speziell für die Quadrocopter-Steuerung entwickelt wurde, wobei ein benutzerdefinierter ROS möglicherweise wünschenswert ist, um einen Absturz zu verhindern. Andererseits läuft der Navio + auf einem Linux-Kernel und führt einen anderen Code als den Autopiloten aus. und schafft es immer noch, nicht abzustürzen. Die meisten ROSs sind wirklich eine Reihe von Funktionen auf einem vorhandenen Betriebssystem, anstatt ein Betriebssystem von Grund auf zu schreiben. Wie bei allem kommt es darauf an.
Er spricht über das RobotOperatingsystem, nicht über RealtimeOperatingSystem ...
FooTheBar
2
Haftungsausschluss: Diese Antwort ist irgendwie eine Reaktion auf den Beitrag von Shahbaz, daher hat sie eine Pro-ROS-Tendenz.
Ich denke nicht, dass ROS obligatorisch ist, aber es ist ein guter Ausgangspunkt und die Zeit wert, um zu investieren. Es begann in Willow Garage, aber diese Firma verschwand und ROS lebt noch, wird benutzt und entwickelt. Der größte Teil von ROS ist vollständig Open Source und auch kommerziell nutzbar. Es gibt also keine Möglichkeit, dass ROS einfach verschwindet, wenn ein Unternehmen nicht mehr daran interessiert ist. Die Codequalität unterscheidet sich natürlich zwischen den Kernmodulen und den Implementierungen modernster Algorithmen, die ein Doktorand mit seiner Arbeit veröffentlicht hat.
ROS nimmt in industriellen Umgebungen immer mehr Fahrt auf (ich wäre überrascht, wenn es weltweit einen erheblichen Teil der Robotik-Startups gibt, die ROS nicht verwenden). Einige Algorithmen werden vom ros-industrial-Konsortium weiterentwickelt und weiterentwickelt. Wenn Sie sich die Mitglieder ansehen, ist es eine gute Wette, dass ROS zum Standard in der Branche wird:
Die verteilte Verwendung von ROS hilft sehr beim Erstellen und Verwalten neuer Pakete, insbesondere innerhalb von Teams. Die Nachrichten- und Aktionsdefinitionen helfen sehr bei der Definition von Schnittstellen, sodass Hardware und Algorithmen schnell ausgetauscht werden können. Es ist auch hilfreich, neue Teammitglieder zu integrieren, da ein neuer Knoten andere Knoten herunterfährt, wenn er abstürzt (solange er nicht den gesamten Arbeitsspeicher verbraucht). Daher ist es ziemlich sicher, teilweise funktionierende Knoten als deren Knoten in das laufende System zu integrieren Wirkung ist begrenzt. Die Kommunikation verwendet TCP, das zuverlässig und schnell ist (auf einem lokalen Computer), so dass die Nachrichtenübermittlung sehr schnell erfolgt (mehrere hundert Hz für einen Regelkreis sind möglich).
Nicht in Echtzeit
ROS ist derzeit nicht in Echtzeit verfügbar, da die überwiegende Mehrheit der Algorithmen keine Echtzeit benötigt. Das Erfassen oder Planen unterliegt in den meisten Fällen keinen Echtzeitbeschränkungen (wie viele Personen bauen selbstfahrende Hochgeschwindigkeitsautos?). Es reicht aus, wenn der Endregelkreis in Echtzeit läuft und dies in vielen Fällen direkt am Motor erfolgen kann (an den die Endposition zB über CAN gesendet wird). Echtzeit ist jedoch eines der Hauptziele von ROS2 ( https://github.com/ros2/ros2/wiki/Real-Time-Programming ). Selbst wenn Sie dies in Zukunft für das gesamte System benötigen, hat ROS Sie abgedeckt .
Wenn Sie wirklich eingebettetes Material ausführen möchten, besteht natürlich eine Verbindung zu Arduino, sodass Sie ROS-Nachrichten direkt auf das Arduino schreiben können, die dann über eine serielle Verbindung gesendet werden.
Das Ausführen von ROS unter Windows ist derzeit ziemlich schwierig, aber da Windows immer näher an Linux heranrückt (und sogar anfängt, etwas Bash-ähnliches zu haben), ist es nur eine Frage der Zeit, bis es möglich ist. (Aber wer will schon einen Roboter mit Fenstern betreiben?)
Hardware-Schnittstellen und -Algorithmen:
Ich denke, das ist wirklich eine Stärke für ROS. Viele im Handel erhältliche Roboter verfügen bereits über eine ROS-Schnittstelle, oder jemand hat bereits einige Zeit in die Implementierung der Schnittstelle investiert. Die meisten kommerziellen Waffen können in MoveIt verwendet werden. So viel Arbeit, um eine Anwendung mit einem bestimmten Arm zum Laufen zu bringen, kann mit einer anderen Hardware wiederverwendet werden.
Gemeinschaft:
Eine weitere Stärke für ROS. Neue Algorithmen erhalten sehr schnell eine ROS-Schnittstelle und viele Leute hatten die gleichen Probleme wie Sie, sodass Sie jemanden finden, der Ihnen hilft.
Das Letzte, was ich sehen möchte, ist, in 20 Jahren zurückzublicken, in denen alles um ROS herum aufgebaut ist, und zu erkennen, dass wir Roboter brauchen, um mit einer vom Menschen vergleichbaren Geschwindigkeit zu arbeiten, aber das können wir nicht, weil wir vor 20 Jahren dachten Wie viele Leute bauen überhaupt selbstfahrende Hochgeschwindigkeitsautos ?
Shahbaz
2
Ich denke, ich muss mich in diesem Fall auf die Seite von @Shahbaz stellen. Es ist nicht so, dass ROS seinen Platz nicht hat, es ist so, dass Sie ROS nicht anstelle guter Codierungspraktiken verwenden sollten. Das von Ihnen erstellte ROS-Protokoll sollte aus einer Schnittstellenbibliothek abgeleitet sein, nicht umgekehrt.
Antworten:
Ich bin zurück an einem Computer!
Wie ich in diesem Kommentar sagte , ist ROS im Allgemeinen nicht obligatorisch. ROS ist eine Plattform unter vielen, berühmt vor allem, weil Willow Garage irgendwann kostenlose Roboter an diejenigen verschenkt, die die meisten ROS-Module geschrieben haben. Das heißt, es ist nicht die bestmögliche Plattform und sicherlich nichts Besonderes. Insbesondere der Wettbewerb führte zu vielen Modulen von geringer Qualität, nur um die Zahlen zu erhöhen.
Im Laufe der Zeit hat sich die Qualität der ROS-Module verbessert, und es gibt auch viele davon. Mit ROS haben Sie daher den Vorteil, dass Sie viel von dem, was bereits getan wurde, wiederverwenden können. Sie können hier einige Gründe lesen , warum Sie ROS verwenden möchten.
In diesem Sinne sollten Sie auch auf die Nebenwirkungen achten.
Verteilte Kontrolle
Mit ROS haben Sie viele Knoten, die über das Netzwerk miteinander kommunizieren. Dies ist manchmal gut und einfach, führt jedoch im Allgemeinen zu einer stark variierenden Verzögerung beim Empfang von Nachrichten. Infolgedessen müssten Sie eine große Steuerungsverzögerung haben, um sicherzustellen, dass alle Nachrichten eintreffen. Dies bedeutet, dass Sie nicht schnell auf Ereignisse reagieren können, was wiederum bedeutet, dass Sie Ihren Roboter langsamer bewegen müssen, um diese Ereignisse nicht zu verpassen.
Ob Sie es glauben oder nicht, die Leute steuern den Roboter tatsächlich über ROS ( MoveIt! Ist der Name des relevanten Satzes von Komponenten). Schleppend. Unsicher. Aber einfach!
Nicht in Echtzeit
Auch wenn ROS nicht verteilt ist, ist es keine Echtzeitplattform. Das bedeutet, dass es im freien Ermessen des Linux-Kernels liegt, Ihre Aufgaben jederzeit nach eigenem Ermessen zu planen. Dies ist für einige Anwendungen in Ordnung, für andere jedoch nicht. Sie müssen sich also Ihre eigenen Anforderungen ansehen. Benötigen Sie eine Garantie dafür, dass Ihre Aufgabe innerhalb eines bekannten Zeitrahmens abgeschlossen wird? In diesem Fall benötigen Sie ein Echtzeitsystem.
Gehostete Laufzeitumgebung
Ein weiterer zu berücksichtigender Punkt ist, dass ROS zwar ein allgemeines Kommunikationsprotokoll ist, jedoch im Wesentlichen nur für gehostete Umgebungen unterstützt wird. Gehostet bedeutet, dass der Code auf einem Kernel ausgeführt wird, im Gegensatz zu freistehend, was bedeutet, dass der Code die Hardware direkt steuert (z. B. auf einem Mikrocontroller).
Wenn Ihre Robotikanwendung in der Nähe der Hardware ausgeführt wird und Sie daher ein Programm benötigen, das auf einem Mikrocontroller ausgeführt wird, hilft Ihnen ROS nicht weiter.
Plattformverriegelung
Last but not least führt die Entwicklung für ROS zu einer Plattformsperre. Dies bedeutet, dass wenn Sie sich in Zukunft aus dem einen oder anderen Grund dazu entschließen, Ihre Arbeit auf eine andere Roboterplattform wie OROCOS, YARP usw. zu stützen, dies unerträglich wäre.
Sie wären auch etwas an Linux gebunden. Linux ist zweifellos das Beste, aber eines Tages müssen Sie möglicherweise ein anderes System wie QNX, VxWorks usw. unterstützen, und Sie würden dort auch Probleme haben.
Wenn Sie für Mikrocontroller schreiben, vergessen Sie ROS. Wenn Sie High-Level-Module schreiben, empfehle ich dringend, tragbaren Code zu schreiben. Angenommen, Sie haben einen neuen Sensor entwickelt und möchten ein Modul schreiben, das Daten von diesem Sensor erfasst, der über den CAN-Bus mit Ihrem Computer verbunden ist.
In dieser Situation können Sie eine unabhängige Bibliothek mit Funktionen schreiben, die mit Ihrem Sensor arbeiten und Daten erfassen können. Sie könnten sogar daran denken, einen Thread in der Bibliothek zu erzeugen, der regelmäßig Daten erfasst und in die Warteschlange stellt.
Sobald Sie über diese Hilfsbibliothek verfügen, können Sie eine CLI, eine GUI, ein ROS-Modul, ein OROCOS-Modul, ein YARP-Modul schreiben, eine Verbindung zu Matlab herstellen oder was auch immer Sie für die Interaktion mit Ihrem Sensor verwenden möchten.
Schlussbemerkung: Was ich hier gesagt habe, gilt allgemein für alle Robotikplattformen und nicht nur für ROS.
quelle
"ROS" ist ein relativer Begriff. Der APM führt vollständigen benutzerdefinierten Code aus, der speziell für die Quadrocopter-Steuerung entwickelt wurde, wobei ein benutzerdefinierter ROS möglicherweise wünschenswert ist, um einen Absturz zu verhindern. Andererseits läuft der Navio + auf einem Linux-Kernel und führt einen anderen Code als den Autopiloten aus. und schafft es immer noch, nicht abzustürzen. Die meisten ROSs sind wirklich eine Reihe von Funktionen auf einem vorhandenen Betriebssystem, anstatt ein Betriebssystem von Grund auf zu schreiben. Wie bei allem kommt es darauf an.
quelle
Haftungsausschluss: Diese Antwort ist irgendwie eine Reaktion auf den Beitrag von Shahbaz, daher hat sie eine Pro-ROS-Tendenz.
Ich denke nicht, dass ROS obligatorisch ist, aber es ist ein guter Ausgangspunkt und die Zeit wert, um zu investieren. Es begann in Willow Garage, aber diese Firma verschwand und ROS lebt noch, wird benutzt und entwickelt. Der größte Teil von ROS ist vollständig Open Source und auch kommerziell nutzbar. Es gibt also keine Möglichkeit, dass ROS einfach verschwindet, wenn ein Unternehmen nicht mehr daran interessiert ist. Die Codequalität unterscheidet sich natürlich zwischen den Kernmodulen und den Implementierungen modernster Algorithmen, die ein Doktorand mit seiner Arbeit veröffentlicht hat.
ROS nimmt in industriellen Umgebungen immer mehr Fahrt auf (ich wäre überrascht, wenn es weltweit einen erheblichen Teil der Robotik-Startups gibt, die ROS nicht verwenden). Einige Algorithmen werden vom ros-industrial-Konsortium weiterentwickelt und weiterentwickelt. Wenn Sie sich die Mitglieder ansehen, ist es eine gute Wette, dass ROS zum Standard in der Branche wird:
http://rosindustrial.org/ric/current-members/
Die verteilte Verwendung von ROS hilft sehr beim Erstellen und Verwalten neuer Pakete, insbesondere innerhalb von Teams. Die Nachrichten- und Aktionsdefinitionen helfen sehr bei der Definition von Schnittstellen, sodass Hardware und Algorithmen schnell ausgetauscht werden können. Es ist auch hilfreich, neue Teammitglieder zu integrieren, da ein neuer Knoten andere Knoten herunterfährt, wenn er abstürzt (solange er nicht den gesamten Arbeitsspeicher verbraucht). Daher ist es ziemlich sicher, teilweise funktionierende Knoten als deren Knoten in das laufende System zu integrieren Wirkung ist begrenzt. Die Kommunikation verwendet TCP, das zuverlässig und schnell ist (auf einem lokalen Computer), so dass die Nachrichtenübermittlung sehr schnell erfolgt (mehrere hundert Hz für einen Regelkreis sind möglich).
Nicht in Echtzeit
ROS ist derzeit nicht in Echtzeit verfügbar, da die überwiegende Mehrheit der Algorithmen keine Echtzeit benötigt. Das Erfassen oder Planen unterliegt in den meisten Fällen keinen Echtzeitbeschränkungen (wie viele Personen bauen selbstfahrende Hochgeschwindigkeitsautos?). Es reicht aus, wenn der Endregelkreis in Echtzeit läuft und dies in vielen Fällen direkt am Motor erfolgen kann (an den die Endposition zB über CAN gesendet wird). Echtzeit ist jedoch eines der Hauptziele von ROS2 ( https://github.com/ros2/ros2/wiki/Real-Time-Programming ). Selbst wenn Sie dies in Zukunft für das gesamte System benötigen, hat ROS Sie abgedeckt .
Wenn Sie wirklich eingebettetes Material ausführen möchten, besteht natürlich eine Verbindung zu Arduino, sodass Sie ROS-Nachrichten direkt auf das Arduino schreiben können, die dann über eine serielle Verbindung gesendet werden.
Das Ausführen von ROS unter Windows ist derzeit ziemlich schwierig, aber da Windows immer näher an Linux heranrückt (und sogar anfängt, etwas Bash-ähnliches zu haben), ist es nur eine Frage der Zeit, bis es möglich ist. (Aber wer will schon einen Roboter mit Fenstern betreiben?)
Hardware-Schnittstellen und -Algorithmen:
Ich denke, das ist wirklich eine Stärke für ROS. Viele im Handel erhältliche Roboter verfügen bereits über eine ROS-Schnittstelle, oder jemand hat bereits einige Zeit in die Implementierung der Schnittstelle investiert. Die meisten kommerziellen Waffen können in MoveIt verwendet werden. So viel Arbeit, um eine Anwendung mit einem bestimmten Arm zum Laufen zu bringen, kann mit einer anderen Hardware wiederverwendet werden.
Gemeinschaft:
Eine weitere Stärke für ROS. Neue Algorithmen erhalten sehr schnell eine ROS-Schnittstelle und viele Leute hatten die gleichen Probleme wie Sie, sodass Sie jemanden finden, der Ihnen hilft.
http://download.ros.org/downloads/metrics/metrics-report-2016-07.pdf
quelle