首页 > 其他分享 >Franka Robot 独占控制权限设计

Franka Robot 独占控制权限设计

时间:2024-07-15 20:30:53浏览次数:7  
标签:Franka 独占 机器人 Robot franka cookie 权限 连接

Franka Emika机器人通过其libfranka库和Franka Control Interface (FCI)实现了一种独占的权限控制机制,确保在任何时候只能有一个程序能够控制机器人。这种机制通过权限cookie(permission cookie)来实现。

权限控制机制

  1. 唯一连接限制

    • libfranka库设计为一次只能有一个实例连接到Franka机器人。
    • 当一个程序创建franka::Robot对象并成功连接到机器人时,其他尝试连接的实例会被拒绝。
  2. 权限Cookie

    • 权限cookie是一个独占的控制权限标识。
    • 当一个程序通过libfranka连接到机器人时,FCI会检查当前是否已有一个活跃的连接。如果没有,它会生成并分配一个权限cookie给该连接请求。
    • 拥有权限cookie的程序获得了对机器人的独占控制权。
  3. 连接管理

    • 持有权限cookie的程序可以发送控制命令、读取机器人状态,并执行其他操作。
    • 如果已有程序持有权限cookie,新的连接请求会被拒绝,确保机器人控制的唯一性。
  4. 释放权限

    • 当持有权限cookie的程序关闭连接或崩溃时,权限cookie会被释放。
    • 这允许新的连接请求获得控制权。

示例代码

以下是一个简单的示例,展示了如何通过libfranka连接到Franka机器人,并处理权限cookie机制:

#include <franka/exception.h>
#include <franka/robot.h>
#include <iostream>

int main() {
  try {
    // 尝试与Franka机器人建立连接
    franka::Robot robot("your_robot_ip");

    // 连接成功后,程序获得权限cookie
    franka::RobotState state = robot.readOnce();

    std::cout << "Connected to the robot successfully!" << std::endl;
    // 打印一些状态信息
    std::cout << "Robot state: " << state.q[0] << std::endl;

    // 在这里可以添加更多的控制逻辑

  } catch (const franka::Exception& e) {
    std::cerr << "Failed to connect to the robot: " << e.what() << std::endl;
    // 如果连接失败,可能是因为权限cookie被其他程序持有
  }

  return 0;
}

应用场景举例

  1. 单一控制程序

    • 在典型应用中,只有一个控制程序(如控制器或状态监视程序)通过libfranka连接到Franka机器人,并持有权限cookie。
    • 该程序可以独占地控制机器人,而其他程序的连接请求会被拒绝。
  2. 开发和调试

    • 在开发或调试过程中,开发者应确保同一时间只有一个程序实例连接到机器人。
    • 如果需要切换控制程序,开发者应显式地关闭当前连接以释放权限cookie,然后再启动新的程序。
  3. ROS集成

    • 在ROS环境中,通常只有一个ROS节点(如franka_control_node)通过libfranka连接到机器人并持有权限cookie。
    • 其他节点通过ROS的消息机制与该节点进行通信,从而间接获取机器人的状态或发送控制命令。

ROS集成示例

假设你有两个ROS节点:一个是franka_control_node,另一个是franka_joint_state_publisherfranka_control_node直接与机器人连接并持有权限cookie,而franka_joint_state_publisher通过订阅话题获取状态信息。

franka_control.launch(启动文件示例)

<launch>
  <node name="franka_control_node" pkg="franka_control" type="franka_control_node" output="screen">
    <param name="robot_ip" value="your_robot_ip"/>
  </node>
</launch>

your_state_publisher.launch(启动文件示例):

<launch>
  <node name="franka_joint_state_publisher" pkg="your_package" type="your_state_publisher_node" output="screen"/>
</launch>

启动命令:

roslaunch franka_control franka_control.launch robot_ip:=your_robot_ip
roslaunch your_package your_state_publisher.launch

通过这种方式,franka_control_node直接与机器人进行通信并持有权限cookie,而franka_joint_state_publisher通过订阅和发布ROS话题来获取和传播机器人状态信息。这种架构确保了只有一个进程直接与机器人交互,从而避免了连接冲突和控制冲突。

标签:Franka,独占,机器人,Robot,franka,cookie,权限,连接
From: https://www.cnblogs.com/ai-ldj/p/18303913

相关文章

  • Snow Walking Robot 的题解
    题目大意给你一个机器人和机器人的\(n\)个运动,要求你在给出的运动路径的基础上设计一种不会走重复的路径的方法,注意只能减少原来的步数而不能增加,其中\(1\len\le10^5\)。思路因为这道题目可以自由的配置路径并且要求机器人在最后回到原来的位置,那么就应该要到一种适合所有......
  • Franka Ros2 主要节点及关系
     控制节点:1.franka_hw_node功能:与硬件接口通信,处理低级控制。订阅话题:/franka/control_commands发布话题:/franka/hardware_states /franka/state_feedback2.franka_control_node功能:处理机器人控制命令,管理控制模式。订阅话题:/franka/state_feedback发布话题:/frank......
  • Franka Robot 相关ROS1节点梳理
    自底向上:1.franka_hw_node:这是Franka机器人的核心节点,负责与底层硬件进行交互。它会从 libfranka 库获取机器人的状态信息,如关节角度、关节力矩等。它会发布这些状态信息到对应的ROS话题上,供其他节点使用。2.joint_state_publisher:这个节点会订阅 franka_h......
  • Franka Robot franka_hw 与franka_control 是什么关系
    franka_hw和franka_control是ROS中两个不同但相关的软件包,它们共同为FrankaEmika的Panda机器人提供控制功能。franka_hw:这个软件包负责与Panda机器人的硬件进行底层接口。它提供了franka_hw_node节点,用于建立与Panda机器人的通信,并发布机器人的状态信息。......
  • Franka Ros1 简介
    FrankaRos暂时在Windows上不受支持。 封装的示意图franka_ros元包franka_ros集成libfranka到ROS和ROS控件中。这里我们介绍它的包,并简要介绍如何编写控制器。本节中传递给启动文件的所有参数都带有默认值,因此如果使用默认网络地址和ROS命名空间,则可以省略这些参数。......
  • Franka Robot demo 关节阻抗控制(joint_impedance_control.cpp)
    //Copyright(c)2023FrankaRoboticsGmbH//UseofthissourcecodeisgovernedbytheApache-2.0license,seeLICENSE#include<array>#include<atomic>#include<cmath>#include<functional>#include<iostream>#include&......
  • Franka Robot demo 真空夹抓控制示例(vacuum_object.cpp)
    //Copyright(c)2019FrankaRoboticsGmbH//UseofthissourcecodeisgovernedbytheApache-2.0license,seeLICENSE#include<iostream>#include<thread>#include<franka/exception.h>#include<franka/vacuum_gripper.h>/**......
  • Franka Robot 打印机器人关节位姿(print_joint_poses.cpp)
    //Copyright(c)2023FrankaRoboticsGmbH//UseofthissourcecodeisgovernedbytheApache-2.0license,seeLICENSE#include<iostream>#include<iterator>#include<franka/exception.h>#include<franka/model.h>/***@exam......
  • Franka Robot 夹爪控制示例(grasp_object.cpp)
    //Copyright(c)2023FrankaRoboticsGmbH//UseofthissourcecodeisgovernedbytheApache-2.0license,seeLICENSE#include<iostream>#include<sstream>#include<string>#include<thread>#include<franka/exception.h>......
  • Franka Robot demo 力控 force_control.cpp
    //Copyright(c)2023FrankaRoboticsGmbH//UseofthissourcecodeisgovernedbytheApache-2.0license,seeLICENSE#include<array>#include<iostream>#include<Eigen/Core>#include<franka/duration.h>#include<franka/......