差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
| 机器人:franka:libfranka:libfranka的状态信息解析 [2025/11/10 05:47] – ctbots | 机器人:franka:libfranka:libfranka的状态信息解析 [2025/11/10 07:23] (当前版本) – [表] ctbots | ||
|---|---|---|---|
| 行 3: | 行 3: | ||
| 以下部分都是个人的见解,如果有错误的地方,欢迎指正 | 以下部分都是个人的见解,如果有错误的地方,欢迎指正 | ||
| - | franka的 | + | franka的状态信息主要分为2块:机械臂本体的状态 和 末端执行器的状态。 |
| + | |||
| + | ===== Franka机械臂本体的状态解析 ===== | ||
| + | |||
| + | ==== Franka 的机械臂相关原始代码 ==== | ||
| + | |||
| + | |||
| + | 打开libfranka项目,的 src/ | ||
| + | |||
| + | <code c++ robot.h [enable_line_numbers=" | ||
| + | RobotState Robot:: | ||
| + | std:: | ||
| + | assertOwningLock(control_lock); | ||
| + | |||
| + | return impl_-> | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | 返回结果中,比较重要的几个属性: | ||
| + | ^ 列名 | ||
| + | | q | 7自由度的double\\ 单位是弧度rad\\ 每个关节的弧度范围有限制 | ||
| + | | q_d | 7自由度的double\\ 单位是弧度rad\\ 每个关节的弧度范围有限制 | ||
| + | | dq | 数组,长度7\\ 单位是弧度每秒rad/ | ||
| + | | dq_d | 数组,长度7\\ 单位是弧度每秒rad/ | ||
| + | | tau_J | 数组,长度7\\ 单位是牛米Nm | ||
| + | | tau_J_d | ||
| + | | time | 单位Duration | ||
| + | |||
| + | ++++ 折叠robot.cpp代码| | ||
| + | <code c++ robot.cpp [enable_line_numbers=" | ||
| + | # 返回的结构体中: | ||
| + | |||
| + | |||
| + | |||
| + | // Copyright (c) 2024 Franka Robotics GmbH | ||
| + | // Use of this source code is governed by the Apache-2.0 license, see LICENSE | ||
| + | #pragma once | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | /** | ||
| + | * @file robot_state.h | ||
| + | * 包含 franka:: | ||
| + | */ | ||
| + | namespace franka { | ||
| + | /** | ||
| + | * 描述机器人当前的模式。 | ||
| + | */ | ||
| + | enum class RobotMode { | ||
| + | kOther, | ||
| + | kIdle, | ||
| + | kMove, | ||
| + | kGuiding, | ||
| + | kReflex, | ||
| + | kUserStopped, | ||
| + | kAutomaticErrorRecovery | ||
| + | }; | ||
| + | /** | ||
| + | * 描述机器人的状态。 | ||
| + | */ | ||
| + | struct RobotState { | ||
| + | /** | ||
| + | * \f$^{O}T_{EE}\f$ | ||
| + | * 测量的末端执行器位姿,在 @ref o-frame " | ||
| + | * 位姿以列主序的 4x4 矩阵表示。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f${^OT_{EE}}_{d}\f$ | ||
| + | * 运动生成最后一次期望的末端执行器位姿,在 @ref o-frame " | ||
| + | * 位姿以列主序的 4x4 矩阵表示。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$^{F}T_{EE}\f$ | ||
| + | * 末端执行器坐标系在法兰坐标系中的位姿。 | ||
| + | * 位姿以列主序的 4x4 矩阵表示。 | ||
| + | * | ||
| + | * @see F_T_NE | ||
| + | * @see NE_T_EE | ||
| + | * @see Robot 了解 F、NE 和 EE 坐标系的说明。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$^{F}T_{NE}\f$ | ||
| + | * 标称末端执行器坐标系在法兰坐标系中的位姿。 | ||
| + | * 位姿以列主序的 4x4 矩阵表示。 | ||
| + | * | ||
| + | * @see F_T_EE | ||
| + | * @see NE_T_EE | ||
| + | * @see Robot 了解 F、NE 和 EE 坐标系的说明。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$^{NE}T_{EE}\f$ | ||
| + | * 末端执行器坐标系在标称末端执行器坐标系中的位姿。 | ||
| + | * 位姿以列主序的 4x4 矩阵表示。 | ||
| + | * | ||
| + | * @see Robot:: | ||
| + | * @see F_T_EE | ||
| + | * @see F_T_NE | ||
| + | * @see Robot 了解 F、NE 和 EE 坐标系的说明。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$^{EE}T_{K}\f$ | ||
| + | * 刚度坐标系在末端执行器坐标系中的位姿。 | ||
| + | * 位姿以列主序的 4x4 矩阵表示。 | ||
| + | * | ||
| + | * 另见 @ref k-frame "K 坐标系" | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$m_{EE}\f$ | ||
| + | * 配置的末端执行器质量。 | ||
| + | */ | ||
| + | double m_ee{}; | ||
| + | /** | ||
| + | * \f$I_{EE}\f$ | ||
| + | * 配置的末端执行器负载相对于质心的转动惯量矩阵。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$^{F}x_{C_{EE}}\f$ | ||
| + | * 配置的末端执行器负载质心相对于法兰坐标系的位置。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$m_{load}\f$ | ||
| + | * 配置的外部负载质量。 | ||
| + | */ | ||
| + | double m_load{}; | ||
| + | /** | ||
| + | * \f$I_{load}\f$ | ||
| + | * 配置的外部负载相对于质心的转动惯量矩阵。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$^{F}x_{C_{load}}\f$ | ||
| + | * 配置的外部负载质心相对于法兰坐标系的位置。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$m_{total}\f$ | ||
| + | * 末端执行器与外部负载质量之和。 | ||
| + | */ | ||
| + | double m_total{}; | ||
| + | /** | ||
| + | * \f$I_{total}\f$ | ||
| + | * 末端执行器负载与外部负载相对于质心的组合转动惯量矩阵。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$^{F}x_{C_{total}}\f$ | ||
| + | * 末端执行器负载与外部负载相对于法兰坐标系的组合质心。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * 肘部配置。 | ||
| + | * | ||
| + | * 数组值的含义: | ||
| + | * - elbow[0]: 第3关节的位置,单位 \f$[rad]\f$。 | ||
| + | * - elbow[1]: 肘部(第4关节)的翻转方向: | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | * 其中 \f$q_{elbow-flip}\f$ 在 FCI 文档的机器人接口规范页面中定义。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * 期望的肘部配置。 | ||
| + | * | ||
| + | * 数组值的含义: | ||
| + | * - elbow_d[0]: 第3关节的位置,单位 \f$[rad]\f$。 | ||
| + | * - elbow_d[1]: 肘部(第4关节)的翻转方向: | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | * 其中 \f$q_{elbow-flip}\f$ 在 FCI 文档的机器人接口规范页面中定义。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * 命令的肘部配置。 | ||
| + | * | ||
| + | * 数组值的含义: | ||
| + | * - elbow_c[0]: 第3关节的位置,单位 \f$[rad]\f$。 | ||
| + | * - elbow_c[1]: 肘部(第4关节)的翻转方向: | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | * 其中 \f$q_{elbow-flip}\f$ 在 FCI 文档的机器人接口规范页面中定义。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * 命令的肘部速度。 | ||
| + | * | ||
| + | * 数组值的含义: | ||
| + | * - delbow_c[0]: | ||
| + | * - delbow_c[1]: | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * 命令的肘部加速度。 | ||
| + | * | ||
| + | * 数组值的含义: | ||
| + | * - ddelbow_c[0]: | ||
| + | * - ddelbow_c[1]: | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$\tau_{J}\f$ | ||
| + | * 测量的关节侧力矩传感器信号。单位:\f$[Nm]\f$ | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f${\tau_J}_d\f$ | ||
| + | * 期望的关节侧力矩传感器信号(不含重力)。单位:\f$[Nm]\f$ | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$\dot{\tau_{J}}\f$ | ||
| + | * 测量的关节侧力矩传感器信号的导数。单位:\f$[\frac{Nm}{s}]\f$ | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$q\f$ | ||
| + | * 测量的关节位置。单位:\f$[rad]\f$ | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$q_d\f$ | ||
| + | * 期望的关节位置。单位:\f$[rad]\f$ | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$\dot{q}\f$ | ||
| + | * 测量的关节速度。单位:\f$[\frac{rad}{s}]\f$ | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$\dot{q}_d\f$ | ||
| + | * 期望的关节速度。单位:\f$[\frac{rad}{s}]\f$ | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$\ddot{q}_d\f$ | ||
| + | * 期望的关节加速度。单位:\f$[\frac{rad}{s^2}]\f$ | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * 表示每个关节激活的接触等级。接触消失后值变为零。 | ||
| + | * | ||
| + | * @see Robot:: | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * 表示笛卡尔维度 \f$(x, | ||
| + | * | ||
| + | * @see Robot:: | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * 表示每个关节激活的接触等级。接触消失后值保持不变,直到发送复位命令。 | ||
| + | * | ||
| + | * @see Robot:: | ||
| + | * @see Robot:: | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * 表示笛卡尔维度 \f$(x, | ||
| + | * | ||
| + | * @see Robot:: | ||
| + | * @see Robot:: | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$\hat{\tau}_{\text{ext}}\f$ | ||
| + | * 低通滤波后的外部力在关节上产生的力矩。不包括配置的末端执行器和负载以及机器人的质量和动力学。 | ||
| + | * tau_ext_hat_filtered 是 tau_J 与机器人模型预期力矩之间的误差。单位:\f$[Nm]\f$。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$^OF_{K, | ||
| + | * 估计的作用在刚度坐标系上的外部扳手(力、力矩),相对于 @ref o-frame " | ||
| + | * 机器人施加给环境的力为正,环境施加给机器人的力为负。 | ||
| + | * 在接近或处于奇异点时变为 \f$[0, | ||
| + | * 单位:\f$[N, | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$^{K}F_{K, | ||
| + | * 估计的作用在刚度坐标系上的外部扳手(力、力矩),相对于刚度坐标系表示。 | ||
| + | * 机器人施加给环境的力为正,环境施加给机器人的力为负。 | ||
| + | * 在接近或处于奇异点时变为 \f$[0, | ||
| + | * 单位:\f$[N, | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f${^OdP_{EE}}_{d}\f$ | ||
| + | * 期望的末端执行器扭转,在 @ref o-frame " | ||
| + | * 单位:\f$[\frac{m}{s}, | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f${^OddP}_O\f$ | ||
| + | * 机器人基座加速度的线性分量,表达在与 @ref o-frame " | ||
| + | * 如果基座静止,则显示重力矢量方向。目前硬编码为 `{0, 0, -9.81}`。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f${^OT_{EE}}_{c}\f$ | ||
| + | * 运动生成最后一次命令的末端执行器位姿,在 @ref o-frame " | ||
| + | * 位姿以列主序的 4x4 矩阵表示。 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f${^OdP_{EE}}_{c}\f$ | ||
| + | * 最后一次命令的末端执行器扭转,在 @ref o-frame " | ||
| + | * 单位:\f$[\frac{m}{s}, | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f${^OddP_{EE}}_{c}\f$ | ||
| + | * 最后一次命令的末端执行器加速度,在 @ref o-frame " | ||
| + | * 单位: | ||
| + | * \f$[\frac{m}{s^2}, | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$\theta\f$ | ||
| + | * 电机位置。单位:\f$[rad]\f$ | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * \f$\dot{\theta}\f$ | ||
| + | * 电机速度。单位:\f$[\frac{rad}{s}]\f$ | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * 当前错误状态。 | ||
| + | */ | ||
| + | Errors current_errors{}; | ||
| + | /** | ||
| + | * 包含导致上一次运动中止的错误。 | ||
| + | */ | ||
| + | Errors last_motion_errors{}; | ||
| + | /** | ||
| + | * 最近 100 个控制命令被机器人成功接收的百分比。 | ||
| + | * | ||
| + | * 如果当前没有运行控制或运动生成循环,则显示为零。 | ||
| + | * | ||
| + | * 范围:\f$[0, | ||
| + | */ | ||
| + | double control_command_success_rate{}; | ||
| + | /** | ||
| + | * 当前机器人模式。 | ||
| + | */ | ||
| + | RobotMode robot_mode = RobotMode:: | ||
| + | /** | ||
| + | * 自机器人启动以来严格单调递增的时间戳。 | ||
| + | * | ||
| + | * 在控制循环内部,可以使用 @ref callback-docs " | ||
| + | */ | ||
| + | Duration time{}; | ||
| + | }; | ||
| + | /** | ||
| + | * 将机器人状态以 JSON 对象形式流输出:{" | ||
| + | * [0, | ||
| + | * | ||
| + | * @param[in] ostream Ostream 实例 | ||
| + | * @param[in] robot_state 要输出的 RobotState 实例 | ||
| + | * | ||
| + | * @return Ostream 实例 | ||
| + | */ | ||
| + | std:: | ||
| + | /** | ||
| + | * 以人类可读形式输出 RobotMode | ||
| + | * @param[in] ostream Ostream 实例 | ||
| + | * @param[in] robot_mode 要输出的 RobotMode | ||
| + | * | ||
| + | * @return Ostream 实例 | ||
| + | */ | ||
| + | std:: | ||
| + | } // namespace franka | ||
| + | |||
| + | </ | ||
| + | ++++ | ||