有多少人工,就有多少智能

Franka robot.setCollisionBehavior的正确驾驶姿势

在Franka Emika Panda机器人中,robot.setCollisionBehavior 函数用于设置机器人在检测到碰撞时的行为。这些设置确保机器人能够及时检测到外部干扰,并采取适当的响应措施,以保护机器人自身和周围环境的安全。以下详细解释了设置碰撞行为后的响应与未设置情况下的响应差异。

设置了 robot.setCollisionBehavior 后的响应

robot.setCollisionBehavior 函数设置了机器人在检测到外部力或碰撞时的阈值和响应行为,通常包括以下几种响应:

  1. 检测和停止

    • 响应方式:当外部力或力矩超过设定的阈值时,机器人会检测到碰撞并立即停止当前的运动。
    • 保护机制:这种方式可以有效防止机器人在继续运动时对自身或周围环境造成损坏或伤害。
    • 实现:调用 franka::MotionFinished 或者通过预设的安全策略停止运动。
  2. 力反馈调整

    • 响应方式:根据检测到的碰撞力,调整机器人的力反馈控制,使其表现出柔顺性或刚性。
    • 应用场景:适用于需要机器人在碰撞时灵活调整姿态的任务,如与人互动或复杂的装配任务。
    • 实现:调整关节的力矩和阻抗参数,实现对外力的实时反馈。
  3. 路径调整

    • 响应方式:在检测到外力作用后,动态调整机器人的运动路径以避开障碍或重新规划路线。
    • 应用场景:适用于需要机器人在动态环境中避障或重新规划路径的任务。
    • 实现:结合传感器数据和实时路径规划算法,调整运动轨迹。
  4. 报警和日志记录

    • 响应方式:在检测到碰撞时,触发报警系统或记录日志,以便后续分析和故障排查。
    • 应用场景:适用于需要实时监控和安全管理的工业环境。
    • 实现:结合外部的监控系统,触发报警或记录详细的碰撞事件信息。
try {
    franka::Robot robot("robot_ip"); // 替换为机器人的实际IP地址
    
    
    // 设置碰撞行为 在这个例子中,当机器人在操作过程中检测到的力矩在 20.0 到 50.0 之间时,它会继续操作。
    // 一旦检测到的力矩超过 50.0 时,机器人会认为发生了碰撞,并采取相应的安全措施,如停止运动或减速。
    // 类似地,笛卡尔空间中的力阈值也是如此设置的。
    robot.setCollisionBehavior(
        {{20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0}}, // 关节空间高阈值
        {{50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0}}, // 关节空间低阈值
        {{10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0}}, // 笛卡尔空间高阈值
        {{50.0, 50.0, 50.0, 50.0, 50.0, 50.0}}  // 笛卡尔空间低阈值
    );

    // 控制循环
    while (true) {
        // 获取机器人当前状态
        franka::RobotState state = robot.readOnce();

        // 检测碰撞
        if (state.collisions.collision_detected) {
            // 发生碰撞,输出警告消息
            std::cerr << "Warning: Collision detected!" << std::endl;

            // 停止机器人的运动(示例中简单停止)
            robot.stop();
            
            // 可以添加其他处理逻辑,如记录日志、重新规划路径等
            // ...
        }

        // 其他控制逻辑...
    }
} catch (const franka::Exception& e) {
    std::cerr << "Franka exception: " << e.what() << std::endl;
}

没有设置 robot.setCollisionBehavior 的情况下

如果没有设置 robot.setCollisionBehavior,机器人将无法检测到外部的力或碰撞,也不会采取任何特定的响应行为。这可能导致以下后果:

  1. 缺乏碰撞检测

    • 影响:机器人无法检测到外部的力或碰撞,这意味着即使机器人受到外力或遇到障碍,它仍会继续按照既定的路径或速度运动。
    • 风险:可能导致机器人对自身或周围物体造成损坏,特别是在与人或复杂环境互动时,风险更大。
  2. 无力反馈调整

    • 影响:机器人在受到外部力时,无法进行力反馈调整,可能会导致无法完成需要精密力控的任务,如精密装配或柔顺接触任务。
    • 风险:可能导致机器人对外部干扰的响应不够灵活,降低任务成功率。
  3. 缺乏路径调整

    • 影响:机器人在遇到障碍或外力时,无法动态调整路径或重新规划路线,可能会一直朝着既定方向运动,直到发生碰撞。
    • 风险:可能导致机器人与障碍物发生碰撞,损坏机器人或周围环境。
  4. 无报警或日志记录

    • 影响:没有碰撞行为设置时,机器人无法记录任何关于外力或碰撞的日志,也无法触发报警系统。
    • 风险:无法对碰撞事件进行后续分析或改进,增加了任务和操作过程中的不确定性和风险。

示例代码(未设置碰撞行为)

// 未设置碰撞行为
// robot.setCollisionBehavior() 未调用

// 其他控制代码...

 

总结

通过设置 robot.setCollisionBehavior,您可以确保机器人在检测到外部力或碰撞时,能够采取适当的保护和响应措施,避免对机器人本身和周围环境造成损坏。如果未进行设置,机器人将无法检测到碰撞,并继续其既定运动,可能导致危险或损坏。结合适当的碰撞行为设置,可以大幅提升机器人的安全性和任务执行的可靠性。

posted @ 2024-06-27 14:45  lvdongjie-avatarx  阅读(26)  评论(0编辑  收藏  举报