C oder C++ für einen Roboter?

Lesezeit: 6 Minuten

Grüße,

Ich versuche, mich für meinen Roboter zwischen C und C++ zu entscheiden. Ich bin ein 5-jähriger Veteran von Visual Basic.NET, verwende jedoch Linux (Ubuntu) auf diesem Roboter, und es gibt ein Kompatibilitätsproblem zwischen Linux und dem .NET Framework. Ich möchte für alle meine Projekte bei der Sprache bleiben, die ich wähle, also möchte ich sicherstellen, dass ich die für die Aufgabe am besten geeignete auswähle. Als Referenz werde ich meinen aktuellen Roboter beschreiben und was ich damit machen werde. Ich bin dabei, einen R4 Astromech in voller Größe zu bauen (ja, ich bin einer dieser Typen). Ich habe ein PC-Motherboard mit einem Intel Core 2 2,1 GHz-Prozessor, 1 GB RAM eingebaut. Ich werde eine selbstgebaute parallele Schnittstellenkarte verwenden, um die Antriebsmotoren, den Kopfmotor sowie eine sekundäre parallele Schnittstellenkarte (die zu einem zweiten parallelen Anschluss geht) zu steuern, über die alle Sensoren (IR, Ultraschallentfernung, visuelle Erkennung über Webcam usw.) gehen wird. Befehle werden mit Spracherkennung gegeben (derzeit habe ich ein VB.NET-Erkennungsprogramm, das ich an die neue Sprache anpassen werde). Wäre ich angesichts der oben aufgeführten Spezifikationen und angestrebten Ziele mit C oder C++ besser dran? Ich schätze alle Vorschläge, die Sie haben könnten, sehr. Vielen Dank! Thaskalas

  • Meiner Meinung nach ist das Erlernen von C einfacher als das Erlernen von C++. Da würde ich anfangen.

    – James

    11. Februar 2011 um 20:51 Uhr

  • Verwenden Sie C++. Sie werden die objektorientierte Umgebung vertrauter finden und viel weniger Arbeit zu erledigen haben. Wenn Sie einen 4-MHz-Mikrocontroller verwenden, müssen Sie es sich vielleicht zweimal überlegen, aber hier ist es kaum ein Problem. Ich würde fast so weit gehen und Java vorschlagen.

    – Hannes

    11. Februar 2011 um 20:54 Uhr


  • @Hellfrost Was ist dein Problem mit VB.net? Obwohl ich C# bevorzuge, ist das nur eine stilistische Wahl.

    – CodesInChaos

    11. Februar 2011 um 20:56 Uhr

  • Welche Sprache ist für die Aufgabe am besten geeignet? — die du natürlich kennst; es sei denn, Sie möchten ein paar Jahre damit verbringen, eine neue Sprache zu lernen, bevor Sie mit der Aufgabe beginnen.

    – Gene Buschujew

    11. Februar 2011 um 20:57 Uhr

  • Edwins Antwort wurde gelöscht, aber ich wollte mich einmischen. Ja, C++-Compiler geben viel bessere Fehlermeldungen für C-Code aus. Wenn Sie sich über eine Vorlagenfehlermeldung beschweren, haben Sie den Punkt verfehlt, C-Code verursacht keine Vorlagenfehlermeldungen. Die verbesserte Typsicherheit des C++-Compilers (und die Anforderung an genaue Funktionsprototypen) fängt VIELE Fehler im C-Code ab.

    – Ben Voigt

    11. Februar 2011 um 21:41 Uhr

Benutzer-Avatar
Meilen Strombach

Was meinst du mit einem Kompatibilitätsproblem? Hast Du Dir angesehen Mono? Es ist eine Open-Source-Implementierung der .NET-Bibliotheken. Es ist auf C# ausgerichtet, nicht auf VB.NET, aber wenn Sie sich in einer .NET-Umgebung wohler fühlen, verwenden Sie diese. Geschwindigkeit ist hier nicht wirklich ein Problem, da ein Core2Duo für das, was Sie tun müssen, ausreichend schnell ist.

Wenn Mono für Sie nicht funktioniert, würde ich C++ empfehlen. Es gibt viel mehr Bibliotheken für C++ (oder zumindest bin ich mit mehr vertraut, z Schub), die auch die meisten C-Bibliotheken verwenden kann. Es gibt keine wirkliche Geschwindigkeitsstrafe für die Verwendung von C++. Während die Verwendung von C per se nicht schlecht wäre, hat C++ einige Vorteile und keine Nachteile, daher ist es wahrscheinlich die bessere Wahl.

  • Danke an alle! Ich schätze alle Vorschläge. Ich habe mir Mono angesehen, und obwohl es hauptsächlich für C# entwickelt wurde, verfügt es über den VB.NET-Compiler. Wie einige Leute vorgeschlagen haben, bleibe ich bei dem, was ich weiß. Nochmals vielen Dank an alle!

    – Thaskalas

    11. Februar 2011 um 21:21 Uhr

  • @Thaskalas: Wenn Ihnen diese Antwort (oder eine andere Antwort) am besten gefällt, stellen Sie sicher, dass Sie auf das Häkchen unter der Abstimmungsliste klicken, um die Antwort zu “akzeptieren” und zu zeigen, dass Sie sie für die beste halten! 🙂

    – Platin Azur

    11. Februar 2011 um 22:49 Uhr

  • C++ ist keine Obermenge von C, vielleicht möchten Sie “meistens eine Obermenge” sagen

    – Alternative

    11. Februar 2011 um 23:34 Uhr

Ich würde die Verwendung von ROS empfehlen. Es ermöglicht Ihnen den Einstieg mit einem ausgeklügelten Inter-Process Communications Manager sowie einer großen Bibliothek mit ausgeklügeltem Robotikcode, einschließlich mehrerer Implementierungen von SLAM und anderen kritischen Robotikalgorithmen. Mit ROS können Sie auch in mehreren Sprachen programmieren, einschließlich C, C++ und Python, sodass Sie später nicht mit der einen oder anderen Sprache hängen bleiben.

Ich würde auch C++ und empfehlen ROS. In unserem Unternehmen migrieren wir darauf, weil so viele Leute daran arbeiten, es erweitern und viele coole Funktionen hinzufügen.

Damit können Sie die Implementierung der meisten grundlegenden Low-Level-Sachen vergessen und mit der Arbeit an dem beginnen, was Sie erforschen möchten.

Es ist wirklich einfach einzurichten und mit der Entwicklung zu beginnen.

Da Sie Linux darauf ausführen, würde ich einen geteilten Ansatz empfehlen, bei dem Sie die Dinge auf niedrigerer Ebene (Geräteschnittstelle, wo Sie möglicherweise eine schnelle Leistung benötigen) in C (oder C++) und die Dinge auf höherer Ebene in a erledigen moderne Sprache wie C# (mit Mono) oder Java oder sogar Python.

Besonders Python ist enorm ausdrucksstark, hat eine große Auswahl an Bibliotheken und eine ziemlich unkomplizierte C-Schnittstelle.

Das Schreiben Ihrer High-Level-Steuerelemente in einer Low-Level-Sprache wie C/C++ wird schnell alt (IMHO). Roboter sollen Spaß machen!

Hast du dir überlegt D? Es ist eine ziemlich neue Sprache, ist in nativen Code kompiliert und kann direkt mit C verknüpft werden. (Die gesamte C-Standardbibliothek ist sogar in D verfügbar, und Bindungen an die POSIX-API sind in der Standardbibliothek enthalten.) Im Grunde alles, was Sie tun müssen Um eine beliebige C-Bibliothek aus D zu verwenden, müssen Sie sie mit einem C-Compiler kompilieren und die Funktionsprototypen, Konstantendeklarationen usw. in die Header-Datei übersetzen.

D ist Low-Level genug, dass ein experimenteller Kernel darin geschrieben ist, hat aber moderne Funktionen wie Garbage Collection (obwohl manuelle Speicherverwaltung immer noch erlaubt ist), eingebaute Strings und Arrays und fortschrittlichere/einfacher zu verwendende Template-Metaprogrammierungsmöglichkeiten als C++. Der größte Nachteil ist das Fehlen einer ausgereiften Toolchain und Bibliotheken für Unternehmenszwecke, aber für Ihre Zwecke spielt das wahrscheinlich keine Rolle. Übrigens, wenn Sie ein paar Matrixmanipulationen und so machen müssen, gibt es die SciD-Projektdas nette Template-Wrapper über LAPACK und BLAS bereitstellt.

Benutzer-Avatar
James Crook

Verwenden Sie C++. Sie haben den Platz. Sie können es zunächst “als besseres C” verwenden.

Benutzer-Avatar
Clifford

C++ ist eine größere Werkzeugtasche; warum willst du das nicht!? Sie müssen nicht verwenden alle die Tools, aber mit C hättest du keine Wahl. Am wichtigsten ist, dass Sie bei C++ die Wahl haben, sowohl C- als auch C++-Bibliotheken von Drittanbietern zu verwenden.

1098740cookie-checkC oder C++ für einen Roboter?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy