FrankaStateInterface

这是一个 机器人专用 接口,因此与普通硬件接口略有不同。为了能够从控制器访问 franka 状态接口,请在 URDF 中声明以下带有所有七个关节的传动标签:

<transmission name="${arm_id}_franka_state">
  <type>franka_hw/FrankaStateInterface</type>
  <joint name="${arm_id}_joint1"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></joint>
  <joint name="${arm_id}_joint2"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></joint>
  <joint name="${arm_id}_joint3"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></joint>
  <joint name="${arm_id}_joint4"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></joint>
  <joint name="${arm_id}_joint5"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></joint>
  <joint name="${arm_id}_joint6"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></joint>
  <joint name="${arm_id}_joint7"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></joint>
  <actuator name="${arm_id}_motor1"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></actuator>
  <actuator name="${arm_id}_motor2"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></actuator>
  <actuator name="${arm_id}_motor3"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></actuator>
  <actuator name="${arm_id}_motor4"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></actuator>
  <actuator name="${arm_id}_motor5"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></actuator>
  <actuator name="${arm_id}_motor6"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></actuator>
  <actuator name="${arm_id}_motor7"><hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface></actuator>
</transmission>

当您的控制器通过 FrankaStateInterface 访问 机器人状态 RobotState  时,它可以期望仿真出以下值:


区域

注释

O_T_EE


O_T_EE_d

尚不支持运动生成,字段将仅包含零

F_T_EE

可以通过参数 F_T_NENE_T_EE 和/或对 set_EE_frame 的服务调用进行配置

NE_T_EE

可以通过参数 EE_T_EE 和/或对 setEE_frame 的服务调用进行配置

EE_T_K

可以通过参数 EE_T_K 和/或对 set_K_frame 的服务调用进行配置

m_ee

如果可以找到抓手,将可以从 URDF 惯性标签中的质量来设置,否则为零。可以被参数 m_ee 覆盖

I_ee

如果可以找到抓手,将可以从 URDF 惯性标签中的惯量来设置,否则为零。可以被参数 I_ee 覆盖

F_x_Cee

如果可以找到抓手,将可以从 URDF 的惯性标签中的原点来设置,否则为零。可以被参数 F_x_Cee 覆盖

m_load

可以通过参数 m_load 和/或对 set_load 的服务调用进行配置

I_load

可以通过参数 I_load 和/或对 set_load 的服务调用进行配置

F_x_Cload

可以通过参数 F_x_Cload 和/或对 set_load 的服务调用进行配置

m_total


I_total


F_x_Ctotal


elbow


elbow_d


elbow_c


delbow_d


delbow_c


tau_J

直接来自 Gazebo

tau_J_d

扭矩控制器发送的值,否则为0

dtau_J

tau_J 的数值导数

q

直接来自 Gazebo

q_d

使用位置接口时的最后一个命令关节位置。当使用速度接口时与 q 相同。但是,使用扭矩接口时,该值不会更新。

dq

直接来自 Gazebo

dq_d

使用速度接口时的最后命令关节速度。当使用位置接口时与 dq 相同。但是,当使用扭矩接口时,该值将为零。

ddq_d

使用位置或速度接口时的当前加速度。但是,当使用扭矩接口时,该值将为零。

joint_contact

τ^ext∣>threslower 其中可以通过调用 set_force_torque_collision_behavior 设置阈值

joint_collision

τ^ext∣>thresupper 其中可以通过调用 set_force_torque_collision_behavior 设置阈值

cartesian_contact

KF^K,ext∣>threslower 其中可以通过调用 set_force_torque_collision_behavior 来设置阈值

cartesian_collision

KF^K,ext∣>thresupper 其中可以通过调用 set_force_torque_collision_behavior 来设置阈值

tau_ext_hat_filtered

τ^ext 即估计的末端执行器的外部扭矩和力,用指数移动平均滤波器 (EMA) 过滤。其过滤的 α 可以通过 ROS 参数进行配置。该字段不包含任何重力项,即 τext=τJτJdτgravity

O_F_ext_hat_K

OF^K,ext=JO+τ^ext

K_F_ext_hat_K

KF^K,ext=JK+τ^ext

O_dP_EE_d


ddq_d

将与 gravity_vector ROS 参数相同。默认为 {0,0,-9.8}

O_T_EE_c


O_dP_EE_c


O_ddP_EE_c


theta

q 相同,因为我们不在 Gazebo 中仿真软关节

dtheta

dq 相同,因为我们不在 Gazebo 中仿真软关节

current_errors

完全是假的,反射系统尚未实现

last_motion_errors

完全是假的,反射系统尚未实现

control_command_success_rate

总是 1.0

robot_mode

机器人模式切换和反射系统尚未实现

time

仿真中的当前 ROS 时间,来自 Gazebo