内部逻辑

到目前为止,我们已经介绍了在客户端(即自己的工作站 PC)上运行的接口的详细信息。包括实时接口的控制端在内的完整控制回路的行为如下图所示

_images/rt-loop.png

实时循环:从控制命令到机器人期望的关节扭矩。

运动生成器 :用户发送的所有运动生成器命令都有下标c,代表 ‘commanded’。当发送运动生成器时,机器人运动学完备块Robot Kinematics completion将计算用户命令信号的正向/逆向运动学,产生期望信号,下标d。如果使用内部控制器,它将产生必要的扭矩 τd 跟踪相应的计算d信号(内部关节阻抗控制器将跟踪关节信号 qd,q˙d 和内部笛卡尔阻抗控制器将跟踪末端笛卡尔信号 OTEE,d,OP˙EE,d)并将它们发送到机器人关节。图中控制侧的所有变量,即最后接收到的c值(在低通滤波器和由于数据包丢失导致的外插 extrapolation 之后,阅读下面的解释)、计算出的d值及其时间导数被作为机器人状态(的一部分)发送回用户。通过这种方式,可以在自己的外部控制器中利用逆运动学,同时,它将提供完全透明的信息:用户将始终知道机器人在上一个采样中接收和跟踪的确切值和导数。

提示

当使用 关节 运动生成器时,机器人运动学完备块不会修改命令中的  关节 值,因此 qd,q˙d,q¨dqc,q˙c,q¨c 是等价的。请注意,此时只会在机器人状态下找到(下标为)d信号。如果使用 笛卡尔 运动生成器,机器人运动学完备块可能会修改用户命令的值以避免奇异点,从而所需的信号 OTEE,d,OP˙EE,d 和命令的信号 OTEE,c,OP˙EE,c,OP¨EE,c 可能不同。此时会在机器人状态中找到(下标为)dc信号。

外部控制器:如果发送外部控制器,则用户命令的已经额外补偿重力与摩擦力的期望关节扭矩 τd 将直接送入机器人关节。得到以下方程:

τc=τd+τf+τg

其中:

  • τd 是 libfranka 用户输入的期望扭矩,

  • τc 是有效控制关节的扭矩,

  • τf 是补偿电机摩擦的扭矩,

  • τg 是补偿整个运动学链重力所需的扭矩。

请注意,在控制端,有两件事可以修改信号:

  • 数据包丢失,如果:

    在这种情况下,Control 假设一个恒定加速度模型或一个恒定扭矩来推断信号。如果 >=20 个数据包连续丢失,则控制循环将停止,并伴随 communication_constraints_violation 异常的抛出。

    • 由于 PC 和 网卡的性能,没有很好的网络连接。

    • 控制回路计算时间太长(取决于网卡和 PC 配置,剩下大约 < 300 μs 的时间用于自己的控制回路)。

提示

如果不确定信号是否被过滤或外插,可以随时检查发送的最后一个命令值,并将它们与在下一个采样中在机器人状态中接收到的值进行比较。还可以在异常发生后在 franka::ControlException::log 成员中找到这些值 。