8

我们是学生开发一个中等大小(约 4.5 英尺高)的人形机器人,作为大学赞助的研究项目。机器人应该能够执行的主要任务包括:四处移动(前进、后退、侧身)、奔跑、拾取物体。我们正在考虑使用实时操作系统来控制机器人。但是,由于我们是这个领域的新手,几乎没有嵌入式系统或操作系统的背景,而且有多种选择,我们不确定哪一个是合适的选择。我们遇到了以下情况(括号中是我们目前对它们的印象):

  1. RTLinux(现在死了,内核 2.4.x,gcc 2.95(很难构建),几乎没有文档)
  2. FreeRTOS(良好的社区和文档,流行,移植到许多架构)
  3. uc-OS II(小、干净的内核、轻量级)
  4. RTAI(基于 Linux)

我有几个问题:

  1. 哪个选项更适合这个项目?我知道这听起来有点主观,但任何建议将不胜感激。如果您觉得缺少某些重要信息,请务必指出。
  2. 我遇到了一个名为CONFIG_PREEMPT_RT的 Linux 内核补丁,它为内核提供了硬实时功能。基于 Debian 的发行版也有带有此补丁的预编译内核。仅此一项就足以满足我们的要求吗?
  3. 一般来说,我们对操作系统知之甚少。我们有必要先了解它们吗?如果是,什么是该主题的良好简短入门?

更新:感谢您提供非常详细的答案。很明显,我们的做法是错误的。在没有知识和模糊要求的情况下潜入肯定会很糟糕。我们将不得不坐下来准确地找出我们需要的东西。当我们足够领先时,我们将尝试找出合适的操作系统。让我们看看结果如何。我还将阅读MicroC OS II: The Real Time Kernel 的第 2 章。

4

3 回答 3

21

您对操作系统的选择不太可能由“人形机器人”约束来决定,没有特定的“人形机器人操作系统”,当然也没有操作系统会由这样的机器人有多高来决定!;-) !关键因素是

其他因素可能很重要,例如:

  • 通信和 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 部分详细讨论了这些。

于 2011-10-18T21:03:10.443 回答
6

这并没有回答具体问题,但是:
在您就特定操作系统寻求建议之前,您需要更多关于架构和约束的详细信息。

我将从 I/O 开始:

  • 你如何与外界互动?多少个传感器?
  • 什么样的电机驱动机器人?多少?他们是如何被驱动的?
  • 电机控制反馈需要什么样的传感器?
  • 体位反馈呢?
  • 你做过系统分析吗?
    • 您需要什么更新速率来保持稳定性?
  • 还需要运行哪些其他任务?
    • 想象?
    • 音频识别
    • 音频生成?

既然您知道您需要控制什么以及多快,您将如何控制它?

  • 您是否使用具有嵌入式 A/D 功能的微控制器?
  • 还是带有插入式 A/D 卡的 PC?
  • 一个处理器足够快还是需要多个处理器
    • 如果不止一个,它们将如何同步?

此时您可以开始考虑特定的处理器和架构。只有在您将范围缩小到一两个好的选项之后,您才应该开始考虑操作系统。

我确实希望您最终需要一个硬实时操作系统来用于运行机器人的运动控制方面。

于 2011-10-18T22:45:56.297 回答
6

可能不需要硬实时运行 Linux。给定一个 4.5 英尺高的类人机器人,CM 在 3 英尺处,您的控制回路可以以 20hz 运行,您仍然可以消化 IMU 信号并防止物体掉落。正常的嵌入式 Linux 没有运行与控制机器人电机并行的反恐精英游戏服务器,即使没有“优化”机器人的控制过程,也可以为您提供至少 50hz 的可靠事件处理。(假设您将在 RoBoard 或 FitPC 上运行 Linux)。无论如何,从丢失的帧中恢复可能比运行 RT linux 更容易。让内核运行,以便它在 X 微秒内(即:实时)内的中断时可靠地调用您的处理程序,这涉及到一些人认为不重要的事情,并且有一些副作用。

您最好拥有另一个微处理器板,它可以与电机/伺服系统进行一些低级别的对话,并将消化的信息中继到 Linux。

在我们的 ActuatedCharacter.com 项目中,我们设法在 RoBoard.com Linux 和 20 个(dynamixel)伺服系统(带有自定义固件)之间建立了一个控制回路,频率超过 200Hz,具有与伺服系统的 FTDI 接口,并且没有任何实时内核修改。如果您正在考虑使用 dynamixel 伺服系统作为执行器,请查看 robosavvy.com 论坛,了解有关构建类人机器人(用于 robocup 或用于一般研究)、用于更好闭环控制速率的替代固件、FTDI 延迟问题、串行控制伺服系统的一般信息. 还要考虑您要开发的软件框架,这反过来将帮助您满足您的要求。显然,与已建立的 Robocup 人形联盟球队交谈,但也感兴趣的是 inriaflowers、NAO/Aldebaran,当然还有 ROS。

于 2011-10-23T19:31:01.637 回答