用于机器人中快速三角函数的微控制器/cpu?

电器工程 微控制器 FPGA 机器人技术 表现
2022-01-18 17:38:38

这涉及重量很小的硬件,因为(肥猫大小,6 条腿,3 自由度)步行机器人应该随身携带它。由于走路,它需要做很多三角学(使用矩阵数学或不使用我还不确定),这就是这个问题的来源。

PIC、Arduino 或廉价的 AVR 不够快,无法以 100/秒的速度计算所有内容,也无法牢记惯性和避障,甚至是蛮力路径/步态。

  • 计划 A 是将大脑搭载在机器人身上。 无论是微处理器、微型 ITX、nettop 还是其他;什么是快速进行三角函数/矩阵数学的有效硬件?

    我在网上搜索并希望能找到专门用于这方面的 AVR、x86 或 ARM 微控制器,但没有运气。

  • 计划 B 是通过 WiFi 连接 x86 机器来完成繁重的工作。也非常适合原型设计,但我希望在硬件小型化时最终迁移到 A 计划。但即便如此,什么台式机 CPU 可以最快地做三角函数呢?

  • 计划 C 是分配负载并为每条腿配备一个高能效微控制器/内核,尽管这不是最好的解决方案,原因有很多,我喜欢它的扩展能力。

我还没有决定使用的语言和/或库,但更喜欢 Pascal 和 C++。

(欢迎提出更合适标签的建议,我是新来的)

4个回答

这听起来不像您的应用程序真的是计算密集型的。例如,dsPIC 可以为您的每次迭代执行 400 k 指令。好多啊。然而,拥有良好的低电平 I/O 能力、PWM 发生器、定时器等将是有用的。

在像 dsPIC 这样的整数机器中,正弦和余弦真的不难做到。我自己做过几次。诀窍是为角度选择正确的表示。从理论上讲,弧度可能很好,但在计算上不方便。退步是人为的,只是愚蠢的。使用机器大小的整数的全部范围来表示一整圈。例如,在一个 16 位处理器的 dsPIC 上,一个完整的旋转是 65536 个计数,这比控制机器人或无论如何都可以测量的精度和分辨率要高得多。

这种表示的一个优点是,由于无符号整数加法和减法的工作方式,所有的包装都会自动发生。另一个显着的优点是这种表示特别适合使用查找表来查找正弦和余弦。您只需要存储 1/4 个周期。角度的前两位告诉你你在哪个象限,告诉你是向前还是向后索引表格,以及是否否定结果。接下来的 N 个低位用于对表进行索引,该表具有 2 N个段(2 N +1 个点)。请注意,向后索引表只是补充表索引位。

您可以给表格足够的分数,以便选择最接近的答案就足够了。例如,如果表格有 1024 段,则正弦和余弦将计算到最接近的 1/4096 圆。这对于控制机器人来说已经足够了。如果您想要更高的精度,您可以使表格更大或使用角度的剩余较低位在相邻表格条目之间进行线性插值。

无论如何,关键是您对该处理器的要求似乎与所述问题不匹配。我可能会使用 dsPIC33F。它肯定比单板计算机上的 x86 等成熟的通用计算进程更小、更轻、更节能。

您将处理大量输入信号。您不一定需要具有高吞吐量的 CPU;可以并行处理很多信号。这是典型的 DSP 领域。当然,您也需要通用 CPU 功能。这没有问题。有很多带有集成 DSP 的 CPU。

此类应用的典型芯片设计是 Cortex-M4。它带有一个集成的 DSP,-M4F 版本也有一个 FPU。这可能不是必需的,三角函数可以很容易地在定点数学中完成。

几点说明:

  1. 您不需要在执行避障的同一 CPU 上处理三角运算。您可以在两个微控制器之间拆分任务并使用通信协议让它们说话。

  2. 对于一个实验,我在 ARM Cortex M0 微控制器中实现了一个带有卡尔曼滤波器的AHRS算法(它是一个 STM32,不记得确切的其余部分,但我认为它是 32 MHz),并使用定点数学我可以运行它大约每秒 40 个样本。使用更快的控制器应该可以轻松携带,当然可以尝试FPGA或DSP方式。

  3. 我想说的是腿的控制不是 CPU 密集型的,你可以一起控制所有的腿,可能与三角学和避障操作分开(见 1)

三角学很棘手,但有捷径。如果您对处理能力不太了解,请考虑使用 CORDIC 算法。

它基本上是 [例如] 正弦的值表。角度可以是度数,弧度,任何你喜欢的。关键是,这些值的 SINE 是 1/2 (0.5)、1/4 (0.25)、1/8、1/16 ...... 到您的机器人可以使用的度数的任何分数。

输入您的角度,减去第一个表格值,将结果设置为第一个结果(0.5)。如果通过减法,您的角度变为负数,则添加下一个值(并减去 0.25)。否则,继续减去角度并添加结果。

当您到达表格的末尾时,您所做的只是加减法,但您已经非常接近了。有一个最终的“小提琴因素”可以乘以。

结果的准确性[和速度]取决于查找表的大小[和分辨率]。