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_NE、NE_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