您对操作系统的选择不太可能由“人形机器人”约束来决定,没有特定的“人形机器人操作系统”,当然也没有操作系统会由这样的机器人有多高来决定!;-) !关键因素是
其他因素可能很重要,例如:
- 通信和 I/O 要求(例如以太网、TCP/IP、USB、WiFi)。
- 文件系统支持
尽管在所有情况下这些都不一定是操作系统的固有部分,因为在许多情况下都可以使用第三方平台独立库,但是在您需要它们的地方,与操作系统集成可能会有所帮助,因为它避免了您必须处理线程安全和资源锁定自己。
您建议的任何一个选项都不太可能出现在我的列表中。
任何基于 Linux 的东西都需要 MMU(除非使用 uCLinux 或其衍生产品,但 MMU 支持是在嵌入式系统中使用 Linux 的少数充分理由之一)。Linux 并非旨在成为实时操作系统,它所拥有的任何实时支持几乎都是事后才想到的,并且很少像真正的 RTOS 那样具有确定性。任何 Linux 也需要大量内存资源才能启动,预计至少 4Mb 的 RAM 可用于任何可用的东西,而诸如 FreeRTOS 和 uC/OS-II 之类的 RTOS 内核只需要大约 4Kb - 您在这里将粉笔与奶酪进行比较。也就是说,它们没有基于 Linux 的操作系统的实用程序,例如文件系统或网络支持(尽管这些可以作为独立库添加)。
如果您要在与认知功能相同的处理器上执行运动控制和传感器/执行器功能,那么您当然需要确定性 RTOS。但是,如果该平台将是一个分布式系统,具有处理运动控制和其他实时传感器/执行器 I/O 的单独处理器,那么您可以使用简单的 RTOS 内核或在 I/O 处理器中根本没有操作系统(也可以是更小、功能更弱的处理器)和认知(决策和计划)处理器中的 GPOS。
我最近评估了 FreeRTOS,它极简、简单、小巧,只提供基本的线程、计时和 IPC 机制,几乎没有其他功能。它有效,但许多其他更具吸引力的选择也是如此,无论是商业的还是非商业的。我将它与Keil 的 RTX 内核(包含在他们的 MDK-ARM 工具套件中)和商业Segger embOS进行了比较。它的上下文切换时间比其他两个候选者要慢得多(尽管在 72MHz Cortex-M3 上仍为微秒级,并且比您使用 Linux 可能实现的任何速度都快)。
uC/OS-II 的设计和文档都很好(在 Jean Labrosse 的书中),如果您想了解 RTOS 是如何工作的,那就太好了。它最大的失败是它非常严格的优先级调度方案,它对非常小的目标很有效,但可能没有你想的那么灵活。必须为每个线程分配一个不同的优先级,因此它不支持循环调度,这对于非实时后台任务很有用。uC/OS-III 修复了这个缺点,但许多其他选项也同样如此。
如果您的目标处理器有一个 MMU,我强烈建议使用支持它的操作系统,以保护每个线程或进程不受其他任何线程或进程的影响,系统将更加健壮且易于调试,特别是当开发为团队。在这样的操作系统中,一个错误的任务会以非确定性和通常难以调试的结果踩踏其他线程的资源,而是会导致异常并在发生错误的地方停止,而不是稍后在损坏的数据获取时用过的。
您可能不需要限制自己使用免费或开源的 RTOS,许多供应商允许免费使用教育和评估。我强烈建议您考虑QNX Neutrino,它可免费用于非商业和学术用途,并且具有任何 RTOS 中可用的最强大的内在 MMU 支持,并且包括您需要的所有开发工具,包括基于 Eclipse 的 Momentics IDE。它不仅仅是一个调度内核,还包括对完整操作系统所期望的所有服务的支持。它在 ARM、x86、SH-4 PowerPC 和 MIPS 架构上运行。在 x86 上运行特别有用,因为这意味着您可以测试和评估它,甚至可以在桌面上运行的 VM中开发大部分代码。
另一个真正的硬实时替代方案是eCos ,它不仅支持调度和 IPC,还支持 OS 服务. 它具有原生 POSIX 和 uITRON API、CAN、ADC、SPI、I2C、FLASH、PCI、串行、文件系统、USB 和 PCI 等标准驱动程序,并包括 TCP/IP 网络支持。从这个意义上说,它是一个完整的操作系统,但与 Linux 不同的是,它不是单片的;它是可扩展的并且静态链接到您的应用程序代码,因此您不使用的功能根本不包含在运行时二进制文件中。它在 ARM、CalmRISC、Cortex-M、FR-V、FR30、H8、IA32、68K/ColdFire、Matsushita AM3x、MIPS、NEC V8xx、PowerPC、SPARC 和 SuperH 上运行。再次从理论上讲,您可以在 PC 上的 VM 上运行 IA32 (x86) 端口,以测试和开发高级代码,但与 QNX 的开箱即用评估不同,您必须自己完成这项工作。
添加了关于:
一般来说,我们对操作系统知之甚少。我们有必要先了解它们吗?如果是,什么是该主题的良好简短入门?
那么这可能不是开始学习 Linux 的时候(虽然它具有广泛熟悉和社区支持的优点,但它有很多你不需要的东西,而且很多可用的支持资源不会熟悉实时控制系统应用。
Labrosse 的 uC/OS-II 书的第 2 章概述了 RTOS 概念,例如调度、同步和 IPC,它们适用于大多数 RTOS,而不仅仅是 uC/OS-II。Jack Ganssle 最近在 EETimes 上的RTOS 基础课程中提供了类似的材料(可能是因为它由 Mircium 赞助并使用 uC/OS-II 作为案例研究,但它在大多数情况下同样通用)。
我在任何科目中快速入门的解决方案是在该科目后面加上“101”(学术界常见的入门课程编号)。 “RTOS 101”将为您提供一些质量参差不齐的起点 - 检查来源的信誉,如果是公司,他们可能会兜售特定产品,如果是业余爱好者,他们可能会有一些见解,但也许狭隘的观点(通常与最喜欢的特定硬件有关),并且可能没有学术论文的严谨性。
添加了关于 CONFIG_PREMPT_RT 的内容:
它不会使 Linux 成为硬实时操作系统。它可能适用于某些应用。如果您正在执行 PID 运动控制(而不是使用专用控制器或单独的处理器)或任何类型的闭环反馈控制,我认为这个补丁不会启用它,至少不可靠。我发现了这个:
实时 Linux 方法的比较。它讨论了在实时应用程序中使用 Linux 的多种方法,包括 CONFIG_PREMPT_RT。它在 C 部分详细讨论了这些。