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

实时循环:从控制命令到机器人期望的关节扭矩。
运动生成器 :用户发送的所有运动生成器命令都有下标c,代表 ‘commanded’。当发送运动生成器时,机器人运动学完备块Robot Kinematics completion将计算用户命令信号的正向/逆向运动学,产生期望信号,下标d。如果使用内部控制器,它将产生必要的扭矩
提示
当使用 关节 运动生成器时,机器人运动学完备块不会修改命令中的 关节 值,因此
外部控制器:如果发送外部控制器,则用户命令的已经额外补偿重力与摩擦力的期望关节扭矩
其中:
是 libfranka 用户输入的期望扭矩, 是有效控制关节的扭矩, 是补偿电机摩擦的扭矩, 是补偿整个运动学链重力所需的扭矩。
请注意,在控制端,有两件事可以修改信号:
数据包丢失,如果:
在这种情况下,Control 假设一个恒定加速度模型或一个恒定扭矩来推断信号。如果
>=20个数据包连续丢失,则控制循环将停止,并伴随communication_constraints_violation异常的抛出。由于 PC 和 网卡的性能,没有很好的网络连接。
控制回路计算时间太长(取决于网卡和 PC 配置,剩下大约 < 300
的时间用于自己的控制回路)。
提示
如果不确定信号是否被过滤或外插,可以随时检查发送的最后一个命令值,并将它们与在下一个采样中在机器人状态中接收到的值进行比较。还可以在异常发生后在 franka::ControlException::log 成员中找到这些值 。