libfranka
是 FCI 客户端的 C++ 实现。它处理与 Control 的网络通信,并提供接口以轻松实现以下功能:
执行非实时命令来控制手并配置手臂参数。
执行实时命令来运行您自己的 1 kHz 控制循环。
读取机器人状态以 1 kHz 的频率获取传感器数据。
访问模型库来计算所需的运动学和动态参数。
非实时命令
非实时命令是阻塞的、基于 TCP/IP 的并且始终在任何实时控制循环之外执行。它们包含所有 Hand 命令和一些与 Arm 配置相关的命令。
与 Hand 最相关的是
homing
它校准了手的最大抓握宽度。
move
、grasp
和stop
、用手移动或抓握。
readOnce
,读取手部状态。
关于 Arm,一些有用的非实时命令是:
setCollisionBehavior
设置接触和碰撞检测阈值。
setCartesianImpedance
并setJointImpedance
设置内部笛卡尔阻抗和内部联合阻抗控制器的阻抗参数。
setEE
设置从标称末端执行器到末端执行器框架的变换NE_T_EE 。从法兰到末端执行器框架F_T_EE的变换分为两个变换:F_T_NE和NE_T_EE 。从法兰到标称末端执行器框架F_T_NE的变换只能通过管理员界面进行设置。
setK
设置从末端执行器框架到刚度框架的变换EE_T_K 。
setLoad
设置有效载荷的动态参数。
automaticErrorRecovery
清除机器人先前发生的任何命令或控制异常。Arm 或 Hand 上的所有操作(非实时或实时)分别通过
franka::Robot
和franka::Gripper
对象执行。创建对象时将建立与 Arm/Hand 的连接:#include <franka/robot.h> #include <franka/gripper.h>...franka::Gripper gripper("<fci-ip>"); franka::Robot robot("<fci-ip>");该地址可以作为主机名或 IP 地址传递。如果发生任何错误(无论是由于网络还是库版本冲突),
franka::Exception
都会抛出类型的异常。当同时使用多个机器人时,只需创建具有适当 IP 地址的多个对象即可。要运行特定命令,只需调用相应的方法,例如
gripper.homing(); robot.automaticErrorRecovery();
实时命令
实时命令基于 UDP,需要 1 kHz 的控制连接。实时接口有两种类型:
运动生成器,定义机器人在关节或笛卡尔空间中的运动。
控制器,定义要发送到机器人关节的扭矩。