定时命令

定时命令是一个发送至子器件致动器、并规定了执行时间的命令(一个浮点数)。 您可以在同一个请求里为一个或多个致动器发送一个或多个定时命令。

执行命令的时间是一个绝对值,基于系统时间,以毫秒为单位, 是一个4字节整数。您可以给DCM发出请求来获取当前时间 (在ALMemory里),或者如果您在机器人主板上有一个模块, 就可以直接读取时间。

DCM存储每个致动器的所有定时命令,然后 在每个DCM循环,它会基于当前时间(如果有的话)分析上一条和下一条命令, 采用线性插值正确计算要发送的命令。

以前的命令在使用后就会被删除。

注释:

目前,针对每个致动器,DCM最多可存储4096条定时命令。

为了获得适当的致动器和值(关节位置,发光二极管等), DCM会在上一条和下一条命令(如果有的话)之间自动生成一个线性近似值。

DCM在每个DCM循环计算这一近似值,并发送至适当的器件 (主要由USB传送至chestboard,再由chestboard传送至其它器件)。

由于命令时间会与DCM更新时间不符, 因此可能无法精确地达到要求的值(见下面的例子)。

如果再没有其它命令,那么最后一条命令就会被保留下来,并在下一个DCM循环发送。

如果没有插值(例如超声波致动器), 那么上一条命令会被发送,然后被删除。以后的命令不会起作用。

timed command

一个发送至当前时间或过去时间的命令是要瞬间更新的命令。

定时命令的主要作用如下:

  • 上层无需知道DCM确切的更新时间,因为 DCM会自动使用精确的命令时间来向致动器发送正确的命令。 您只需要发送一个稍后执行的命令(略长于一个DCM循环时间)。
  • 由于DCM了解致动器未来的命令, 因此它可以通过自身的线程和chestboard事先发送命令。这样,即使由于CPU使用率高或其它原因而导致模块本身有延迟, 对致动器来说,两个命令之间也不会有延迟。
  • 在默认情况下,由于插值命令很平滑(对机器人来说, 平滑命令总是更好的)。但是如果您愿意的话,仍可以发送非常快速的命令 (这关系到机器人的关节,对机器人会很危险,要小心!)。
  • 线性插值较为简单,但总是很适用。对于更复杂的插值, 您可以把它们大致计算为若干线性插值。这样,您就减少了 发送到低层的命令数量。
  • 您可以同时向多个致动器发送一整套动作编排。 随后,无论信息交流如何延迟(即便是无线网络), 致动器命令都会被正确地发送。但是,如果使用无线网络或互联网 发送命令,机器人可能无法快速反应。因此,您需要提前发出命令。
  • 您可以通过共享时间来使不同模块的多个致动器同步。
注释:

在一个请求里发送大量定时命令可能会延迟DCM循环。

注意:

使用定时命令时,最好至少间隔10ms再发送下一个命令。 无论下一个循环时间如何,DCM都可以利用这一段延迟来计算下一个循环里的插值。





Copyright © 2010 Aldebaran-Robotics - 版权所有