首页 > 其他分享 >Franka Robot demo 真空夹抓控制示例(vacuum_object.cpp)

Franka Robot demo 真空夹抓控制示例(vacuum_object.cpp)

时间:2024-07-10 19:19:03浏览次数:7  
标签:Franka 真空 gripper 示例 demo FRANKA vacuum 读取

// Copyright (c) 2019 Franka Robotics GmbH
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
#include <iostream>
#include <thread>

#include <franka/exception.h>
#include <franka/vacuum_gripper.h>

/**
 * @example vacuum_object.cpp
 * An example showing how to control FRANKA's vacuum gripper.
 */
/**
 * @example vacuum_object.cpp
 * 控制FRANKA真空夹爪的示例。
 */

int main(int argc, char** argv) {
  if (argc != 2) {
    std::cerr << "Usage: ./vacuum_object <vacuum-gripper-hostname>" << std::endl;
    return -1;
  }

  franka::VacuumGripper vacuum_gripper(argv[1]);// 连接真空夹爪
  try {
    // Print a vacuum gripper state.
    franka::VacuumGripperState vacuum_gripper_state = vacuum_gripper.readOnce();// 读取真空夹爪状态
    std::cout << "Initial vacuum gripper state: " << vacuum_gripper_state << std::endl; 

    // Vacuum the object.
    if (!vacuum_gripper.vacuum(100, std::chrono::milliseconds(1000))) {// 真空夹爪 超时时间为1s
      std::cout << "Failed to vacuum the object." << std::endl;
      return -1;
    }

    vacuum_gripper_state = vacuum_gripper.readOnce();// 读取真空夹爪状态
    std::cout << "Vacuum gripper state after applying vacuum: " << vacuum_gripper_state
              << std::endl;

    // Wait 3s and check afterwards, if the object is still grasped.
    std::this_thread::sleep_for(std::chrono::duration<double, std::milli>(3000));// 延迟3s

    vacuum_gripper_state = vacuum_gripper.readOnce(); // 读取夹爪状态
    if (!vacuum_gripper_state.in_control_range) { // 判断是否在控制范围
      std::cout << "Object lost." << std::endl;
      return -1;
    }

    std::cout << "Vacuumed object, will release it now." << std::endl;
    vacuum_gripper.dropOff(std::chrono::milliseconds(1000));// 夹爪释放
  } catch (franka::Exception const& e) {
    vacuum_gripper.stop(); // 夹爪停止动作
    std::cout << e.what() << std::endl;
    return -1;
  }

  return 0;
}

功能解释:

  • 命令行参数检查:确保命令行参数个数为 2,若不是则输出正确的使用方式并返回 -1
  • 连接真空夹爪:通过指定的主机名连接 FRANKA 的真空夹爪。
  • 真空夹爪操作
    • 读取初始状态:使用 vacuum_gripper.readOnce() 读取并打印真空夹爪的初始状态。
    • 启动真空吸附:使用 vacuum_gripper.vacuum(100, std::chrono::milliseconds(1000)) 启动真空吸附操作,参数设置了真空值和持续时间。
    • 状态检查:在真空吸附一定时间后,通过 vacuum_gripper.readOnce() 读取夹爪状态,检查物体是否仍在夹持。
    • 释放操作:如果物体仍在夹持状态,则使用 vacuum_gripper.dropOff(std::chrono::milliseconds(1000)) 进行释放操作。
  • 异常处理:使用 try-catch 块捕获可能抛出的 franka::Exception 异常,停止夹爪动作并输出异常信息。

这段示例代码演示了如何使用 FRANKA 真空夹爪库控制真空吸附和释放操作,通过读取夹爪状态来确认物体是否在正确位置并进行相应处理。

标签:Franka,真空,gripper,示例,demo,FRANKA,vacuum,读取
From: https://www.cnblogs.com/ai-ldj/p/18294845

相关文章

  • 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/......
  • OceanBase 实时分析Demo 解析:Flink + OceanBase
    先看看实时分析的Demo效果演示Demo说明:这个汽车下单Demo支持在PC端进行下单操作,同时也支持多人通过手机扫码在线下单订单数据被实时写入OceanBaseTP数据库,并通过FlinkCDC实时同步到OceanBaseAP数据库。Demo中的分析看板从AP库中查询最新的数据进行展示。无论是执行简单......
  • Franka Robot 齐次变换矩阵 robot_state.O_T_EE
    O_T_EE 是一个4x4的齐次变换矩阵,用于描述末端执行器在机器人基座坐标系下的位置和姿态。这个矩阵的结构如下:[r11r12r13tx][r21r22r23ty][r31r32r33tz][0001]其中:r11到r33表示末端执行器的旋转矩阵tx、ty、tz表示末端执行器在机器人基座坐标系......
  • 递归示例-指定数字以内的所有排列组合(Base)
    指定数字以内的所有排列组合:定义名称版:=pmtB(指定数字)=LAMBDA(x,IF(x=1,1,VSTACK(pmtB(x-1),SUBSTITUTE(BASE(SEQUENCE(x^x)-1,x,x),0,x))))不定义名称版:=LET(fx,LAMBDA(npmtB,x,IF(x=1,1,VSTACK(npmtB(npmtB,x-1),SUBSTITUTE(BASE(SEQUENCE(x^x)-1,x,x),0,x)))),fx......
  • 设计模式使用场景实现示例及优缺点(创建型模式——单例模式、建造者模式、原型模式)
    创建型模式单例模式(SingletonPattern)单例模式(SingletonPattern)在Java中的使用场景与在其他编程语言中类似,其主要目的是确保一个类只有一个实例,并提供一个全局的访问点。以下是单例模式的一些常见使用场景及详细讲解:使用场景控制资源的使用:数据库连接池:数据库连接是......
  • 设计模式使用场景实现示例及优缺点(结构型模式——代理模式、外观模式)
    结构型模式代理模式(ProxyPattern)代理模式(ProxyPattern)是一种结构型设计模式,它通过引入一个代理对象来控制对另一个对象的访问。这个代理对象可以为被代理的对象提供额外的功能,例如访问控制、延迟初始化、日志记录、或网络访问等。适用场景远程代理:为一个对象在不同......
  • UML图书管理系统用例图示例
    新书速览|《UML2.5基础、建模与设计实践》新书速览|《UML2.5基础、建模与设计实践【例4.4】图书管理系统用例图。图书管理系统按其业务功能分成借阅者管理、图书管理、借书、还书和用户管理等几部分,这些职能对应于系统的不同组织部门。1)系统参与者图书管理系统针对的对象......
  • Franka Robot 多上位机控制控制方案
    Franka机器人来说,多个上位机可以同时对机器人进行控制,但需要遵循一些原则和注意事项:协作控制模式:多个上位机同时控制Franka机器人需要采用协作控制模式。在这种模式下,各个上位机向机器人发送的指令会被协调合并,避免指令冲突。访问权限管理:通常会对上位机的访问权限......