【问题标题】:C or C++ for a Robot?机器人的 C 或 C++?
【发布时间】:2011-06-25 19:44:23
【问题描述】:

您好,

我正在为我的机器人在 C 和 C++ 之间做出选择。我是 Visual Basic.NET 5 年以上的老手,但是我将在这个机器人上使用 Linux (Ubuntu),并且 Linux 和 .NET Framework 之间存在兼容性问题。我想坚持使用我为所有项目选择的任何一种语言,所以我想确保为任务选择最合适的语言。 作为参考,我将描述我目前正在进行的机器人以及我将用它做什么。我正在建造一个全尺寸的 R4 Astromech(是的,我就是其中之一)。我已将 PC 主板与 Intel Core 2 2.1 GHz 处理器、1 GB RAM 结合在一起。我将使用一个临时构建的并行接口卡来控制驱动电机、磁头电机,以及一个辅助并行接口卡(连接到第二个并行端口),所有传感器(IR、超声波测距、视觉识别通过网络摄像头等)将去。将使用语音识别发出命令(目前有一个 VB.NET 临时构建的识别程序,我将适应新语言)。 鉴于上面列出的规范和期望的目标,我会使用 C 还是 C++ 更好?我非常感谢您可能提出的任何建议。 谢谢! 塔斯卡拉斯

【问题讨论】:

  • 恕我直言,学习 C 将比学习 C++ 更容易。我会从那里开始。
  • 使用 C++。您会发现面向对象的环境更加熟悉,而且您要做的工作也少得多。如果您使用的是 4MHz 微控制器,您可能需要三思而后行,但这几乎不是问题。我几乎会建议 Java。
  • @Hellfrost VB.net 有什么问题?虽然我更喜欢 C#,但这只是一种风格选择。
  • 哪种语言最适合这项任务? ——你当然认识的那个;除非您想在开始这项任务之前花几年时间学习一门新语言。
  • Edwin 的答案已被删除,但我想插话。是的,C++ 编译器在 C 代码上提供了更好的错误消息。抱怨模板错误消息表明您错过了重点,C 代码不会导致模板错误消息。 C++ 编译器改进的类型安全性(以及对准确函数原型的要求)在 C 代码中捕获了很多错误。

标签: c++ c robotics


【解决方案1】:

我也会推荐 C++ 和 ROS。在我们公司,我们正在迁移到它,因为有很多人在研究它,扩展它,并添加许多很酷的功能。

有了这个,您可以忘记实现大多数基本的低级内容,并开始着手您打算研究的内容。

设置和开始开发真的很容易。

【讨论】:

    【解决方案2】:

    我会推荐使用 ROS。它将让您开始使用复杂的进程间通信管理器,以及复杂的机器人代码库,包括 SLAM 和其他关键机器人算法的多个实现。 ROS 还允许您使用多种语言进行编程,包括 C、C++ 和 Python,因此您不会被一种或另一种语言所困。

    【讨论】:

      【解决方案3】:

      兼容性问题是什么意思?你看过Mono吗?它是 .NET 库的开源实现。它面向 C# 而不是 VB.NET,但如果您更喜欢 .NET 环境,请使用它。速度在这里并不是真正的问题,因为 Core2Duo 对于您需要做的事情已经足够快了。

      如果 Mono 不适合你,我推荐 C++。有更多的 C++ 库(或者至少,我熟悉更多,例如Boost),它们也可以使用大多数 C 库。使用 C++ 并没有真正的速度损失。虽然使用 C 本身并没有什么坏处,但 C++ 有一些优点,也没有缺点,所以它可能是更好的选择。

      【讨论】:

      • 谢谢大家!我感谢所有的建议。我确实检查了 Mono,尽管它主要是为 C# 设计的,但它确实具有 VB.NET 编译器。正如几个人建议的那样,我会坚持我所知道的。再次感谢大家!
      • @Thaskalas:如果您最喜欢这个答案(或任何其他答案),请确保您点击投票结果下方的复选标记以“接受”该答案并表明您认为它是最好的! :-)
      • C++ 不是 C 的超集,可能想说“主要是超集”
      【解决方案4】:

      C++ 是一个更大的工具包;你为什么不想要那个!?您不需要使用 all 工具,但使用 C,您将别无选择。最重要的是,对于 C++,您可以选择同时使用 C 和 C++ 第三方库。

      【讨论】:

        【解决方案5】:

        使用 C++。你有空间。您可以将其“作为更好的 C”开始使用。

        【讨论】:

          【解决方案6】:

          你考虑过D吗?它是一种相当新的语言,被编译为本机代码并且可以直接链接到 C。(整个 C 标准库甚至可以从 D 中获得,标准库中包含与 POSIX API 的绑定。)基本上所有你需要做的要使用 D 中的任何 C 库,需要使用 C 编译器对其进行编译,并在头文件中翻译函数原型、常量声明等。

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

          【讨论】:

            【解决方案7】:

            由于您在其上运行 Linux,因此我建议您采用拆分方法,您可以在 C(或 C++)中执行较低级别(设备接口,您可能需要快速性能)的内容,并在较高级别执行用现代语言编写的东西,比如 C#(使用 Mono)或 Java,甚至 Python。

            Python 尤其具有很强的表现力,拥有大量的库,并且有一个非常简单的 C 接口。

            用 C/C++ 等低级语言编写高级控制内容会很快过时(恕我直言)。机器人应该很有趣!

            【讨论】:

            • 哎呀,说 C++ 非现代?
            • 是的,很抱歉。毕竟,它是在 80 年代设计的。
            • 从那以后它已经更新了多次。初始设计时间与现代与否无关。布尔代数于 1854 年首次被描述,我们所有的程序都是旧的!
            • 当然!但即使是更新也受到向后兼容性要求的限制。诚然,我的观点是主观的,但与我一起工作的大多数人都会认为 Pytyhn+Ruby 和 Java+C# 的当前版本相对于 C++ 是“现代的”。就是这样。
            猜你喜欢
            • 2011-07-23
            • 2011-02-13
            • 2018-06-12
            • 2021-11-07
            • 2018-05-02
            • 1970-01-01
            • 2011-01-20
            • 2011-12-18
            • 2019-04-30
            相关资源
            最近更新 更多