机器人使用C还是C++语言?

17

你好,

我正在考虑在我的机器人中选择C或C++。我是一名使用Visual Basic.NET超过5年的老手,但这次我将在这个机器人上使用Linux(Ubuntu),而Linux和.NET Framework之间存在兼容性问题。我希望选择一种适合当前任务的语言,并坚持在所有项目中使用同一语言。

为了参考,我将描述我正在进行中的机器人以及我将要做的事情。我正在构建一个全尺寸的R4 Astromech机器人(是的,我就是那些人之一)。我已经将一块PC主板与英特尔Core 2 2.1 GHz处理器、1 GB内存结合起来。我将使用自制的并行接口卡来控制驱动电机、头部电机,以及第二个并行接口卡(连接到第二个并口),所有传感器(红外线、超声波测距、通过网络摄像头进行视觉识别等)都将连接到该接口卡上。指令将使用语音识别来下达(目前有一个VB.NET自制识别程序,我将把它改成新语言)。

鉴于上述规格和期望目标,请问我应该选择C还是C++?非常感谢您提供的任何建议。

谢谢!

Thaskalas


在我看来,学习C语言比学习C++更容易。我会从那里开始。 - James
12
请使用C++。您会发现面向对象的环境更加熟悉,而且需要完成的工作大大减少。如果您正在使用4MHz微控制器,则可能需要考虑一下,但在这里几乎不是问题。我甚至可以建议使用Java。 - Hannesh
1
@Hellfrost,你对VB.net有什么问题吗?虽然我更喜欢C#,但那只是一种风格上的选择。 - CodesInChaos
1
哪种语言最适合这项任务?当然是你知道的那一种;除非你想在开始任务之前花费几年时间学习一种新语言。 - Gene Bushuyev
2
Edwin的回答被删除了,但我想插一句。是的,C++编译器在处理C代码时会给出更好的错误信息。抱怨模板错误信息表明你没有理解重点,因为C代码不会导致模板错误信息。C++编译器提高的类型安全性(以及对准确函数原型的要求)可以捕获很多C代码中的错误。 - Ben Voigt
进一步说明Gene的答案:坚持使用你熟悉的工具,直到它无法胜任任务。如果你使用的工具可以正常完成工作,那么其他人说什么语言更好都无所谓。如果你使用的工具无法完成工作,那就找出原因,并寻找更好的工具来解决问题。 - Mike DeSimone
7个回答

8
什么是兼容性问题?你看过Mono吗?它是.NET库的开源实现,针对C#而非VB.NET。但如果你更喜欢.NET环境,请使用它。速度在这里并不是一个问题,因为Core2Duo对于你需要做的事情已经足够快了。
如果Mono对你不起作用,我建议使用C++。C++有更多的库(或者至少我熟悉更多,例如Boost),可以使用大多数C库。使用C++并没有真正的速度惩罚。虽然使用C也不会很糟糕,但C++有一些优点而且没有缺点,所以它可能是更好的选择。

谢谢大家!我很感激所有的建议。我确实查看了Mono,尽管它主要是为C#设计的,但它也有VB.NET编译器。正如一些人建议的那样,我会坚持我所知道的。再次感谢大家! - Thaskalas
1
@Thaskalas:如果您认为这个答案是最好的(或者任何其他答案),请确保单击投票总数下方的复选标记来“接受”该答案,并显示您认为它是最好的! :-) - Platinum Azure
2
C++不是C的超集,可能需要说“大多数情况下是超集”。 - alternative

1
我也建议使用C++和ROS。在我们公司,我们正在迁移到它,因为有很多人在上面工作,扩展它,并添加了许多酷炫的功能。
有了这个,你可以忘记实现大部分基本的低级别东西,开始着手研究你想要的内容。
它非常容易设置和开始开发。

1
我建议使用ROS。它将让您开始使用一个复杂的进程间通信管理器,以及一个包含多个SLAM实现和其他关键机器人算法的大型机器人代码库。ROS还允许您使用多种语言编程,包括C、C++和Python,因此您不会在未来被限制于一种语言。

0

既然你在Linux上运行它,我建议采用分离的方法,使用C(或C ++)进行低级别(设备接口,可能需要快速性能)的操作,使用现代语言(如C#(使用Mono)或Java,甚至Python)进行高级别的操作。

特别是Python非常具有表现力,拥有大量库,并且具有相当简单的C接口。

使用低级别语言(如C / C ++)编写高级控制代码会很快变得老套(依我之见)。机器人应该是有趣的!


哎呀,称C++为非现代化语言? - GManNickG
是的,对此我感到抱歉。毕竟这个程序是在80年代设计的。 - payne
1
它已经多次更新。初始设计时间与现代化无关。布尔代数最早于1854年被描述,我们所有的程序都很老! - GManNickG
1
当然可以!但是即使更新也受到向后兼容性要求的限制。我的观点确实是主观的,但我与大多数同事一起工作时,他们认为当前的Pytyhn+Ruby和Java+C#版本相对于C++来说是“现代”的。就这些。 - payne

0

你有没有考虑过D?它是一种相当新的语言,可以编译成本地代码并直接链接到C。 (整个C标准库甚至都可以从D中使用,并且POSIX API的绑定包含在标准库中。)基本上,您需要做的就是使用C编译器编译任何C库,并翻译头文件中的函数原型、常量声明等即可从D中使用。

D足够低级,以至于实验性内核是用它编写的,但具有现代功能,如垃圾收集(尽管仍允许手动内存管理)、内置字符串和数组以及比C++更先进/更易于使用的模板元编程工具。最大的缺点是缺乏成熟的工具链和企业级库,但对于您的目的来说,这可能并不重要。顺便说一句,如果您需要执行大量矩阵操作等操作,则有SciD项目,它提供了LAPACK和BLAS的良好模板化包装器。


0

使用C++。你有足够的空间可以首先将其作为“更好的C”来使用。


0

C++ 是一个更大的工具包,为什么不想要呢?!你不需要使用 所有 工具,但是如果使用 C 的话,你就没有选择了。最重要的是,使用 C++ 你可以选择使用 C 和 C++ 的第三方库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接