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
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.
James Crook
Verwenden Sie C++. Sie haben den Platz. Sie können es zunächst “als besseres C” verwenden.
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.
10987400cookie-checkC oder C++ für einen Roboter?yes
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