Franka
Franka 机器人(7 自由度)被实例化为 FrankaRobot。在使用时需要先创建一个 FrankaRobot 实例。
已实现的通用接口
Franka 驱动实现了以下 robot_behavior 通用特征:
| 特征 | 说明 |
|---|---|
Robot |
基础状态机(init/shutdown/enable/disable/stop/pause/resume/emergency_stop/read_state) |
Realtime |
标记为支持实时控制 |
Arm<7> |
机械臂基础接口(state/set_load/set_coord/set_scale/with_*) |
ArmParam<7> |
关节参数常量(限位、速度、加速度、力矩上限) |
ArmPreplannedMotion<7> |
预规划运动(move_joint/move_cartesian) |
ArmPreplannedPath<7> |
路径运动(move_traj/move_traj_async) |
ArmStreamingMotion<7> |
流式控制(句柄模式) |
ArmRealtimeControl<7> |
闭包实时控制(move_with_closure/control_with_closure) |
ArmRealtimeControlExt<7> |
闭包控制扩展 |
ArmImpedance<7> |
阻抗控制(关节/笛卡尔) |
Franka 特有接口
以下是 Franka 机器人独有的接口,不属于 robot_behavior 通用特征。
碰撞行为设置
设置加速阶段和匀速阶段的力矩/力阈值。力/力矩在下阈值与上阈值之间时显示为接触(contact),超过上阈值时注册为碰撞(collision)并导致机器人停止。
use libfranka::types::SetCollisionBehaviorData;
// 使用默认值
robot.set_collision_behavior(SetCollisionBehaviorData::default())?;
// 使用统一值
robot.set_collision_behavior(SetCollisionBehaviorData::from(30.0))?;
// 自定义各项阈值
robot.set_collision_behavior(SetCollisionBehaviorData {
lower_torque_thresholds_acceleration: [20.0; 7],
upper_torque_thresholds_acceleration: [30.0; 7],
lower_torque_thresholds_nominal: [10.0; 7],
upper_torque_thresholds_nominal: [20.0; 7],
lower_force_thresholds_acceleration: [20.0; 6],
upper_force_thresholds_acceleration: [30.0; 6],
lower_force_thresholds_nominal: [10.0; 6],
upper_force_thresholds_nominal: [20.0; 6],
})?;
关节阻抗设置
设置内部控制器各关节的阻抗参数(刚度)。
笛卡尔阻抗设置
设置内部控制器笛卡尔空间的阻抗参数(前 3 个为平移刚度,后 3 个为旋转刚度)。
默认行为
一键设置碰撞行为、关节阻抗和笛卡尔阻抗为默认值。
引导模式
锁定或解锁引导模式下 (x, y, z, roll, pitch, yaw) 各方向的运动。
坐标系变换
设置末端执行器到刚度坐标系(K 帧)以及法兰到末端执行器(NE→EE)的变换矩阵。
动力学模型
获取 Franka 动力学模型,用于计算质量矩阵、科里奥利力等。首次调用会自动从控制器下载模型库文件。
读取原始状态
读取 Franka 原始的 RobotState,包含比通用 ArmState 更丰富的信息。
let state = robot.read_franka_state()?;
// 访问原始数据
println!("关节位置: {:?}", state.q);
println!("关节速度: {:?}", state.dq);
println!("关节力矩: {:?}", state.tau_j);
println!("外部力矩估计: {:?}", state.tau_ext_hat_filtered);
println!("EE 位姿: {:?}", state.pose_o_to_ee);
println!("控制命令成功率: {}", state.control_command_success_rate);
println!("机器人模式: {:?}", state.robot_mode);
RobotState 主要字段:
| 字段 | 类型 | 说明 |
|---|---|---|
q / q_d |
[f64; 7] |
关节位置(测量/期望) |
dq / dq_d / ddq_d |
[f64; 7] |
关节速度/加速度 |
tau_j / tau_j_d / dtau_j |
[f64; 7] |
关节力矩(测量/期望/导数) |
tau_ext_hat_filtered |
[f64; 7] |
外部力矩估计(经滤波) |
pose_o_to_ee / pose_o_to_ee_d |
[f64; 16] |
EE 位姿(基坐标系,4×4 列主序) |
force_ext_in_o / force_ext_in_k |
[f64; 6] |
外力估计(基坐标系/刚度坐标系) |
joint_contact / joint_collision |
[f64; 7] |
关节接触/碰撞等级 |
cartesian_contact / cartesian_collision |
[f64; 6] |
笛卡尔接触/碰撞等级 |
theta / dtheta |
[f64; 7] |
电机侧位置/速度 |
m_ee / x_ee / i_ee |
- | EE 质量/质心/惯量 |
m_load / x_load / i_load |
- | 负载质量/质心/惯量 |
elbow |
[f64; 2] |
肘部配置 |
control_command_success_rate |
f64 |
控制命令成功率 |
robot_mode |
RobotMode |
机器人模式 |
RobotMode 枚举值:Idle、Move、Guiding、Reflex、UserStopped、AutomaticErrorRecovery。
夹爪接口
Franka 配套的 FrankaGripper 提供了独立的夹爪控制接口。
夹爪方法
| 方法 | 签名 | 说明 |
|---|---|---|
homing |
() -> RobotResult<bool> |
归位校准 |
grasp |
(width, speed, force) -> RobotResult<bool> |
抓取(指定宽度 m、速度 m/s、力 N) |
move_gripper |
(width, speed) -> RobotResult<bool> |
移动到指定宽度 |
stop |
() -> RobotResult<bool> |
停止当前动作 |
read_state |
() -> RobotResult<GripperState> |
读取夹爪状态 |