首页 > 其他分享 >Franka libfranka 基于笛卡尔空间位置的运动控制

Franka libfranka 基于笛卡尔空间位置的运动控制

时间:2024-07-08 11:09:07浏览次数:13  
标签:20.0 Franka 笛卡尔 libfranka robot transform franka 18.0 include

#include <array>
#include <cmath>
#include <iostream>

#include <franka/exception.h>
#include <franka/model.h>
#include <franka/robot.h>
#include <franka/tools.h>

int main(int argc, char** argv) {
  try {
    // 连接到机器人
    franka::Robot robot("172.16.0.2");

    // 设置安全参数
    robot.setCollisionBehavior(
        {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
        {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
        {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}},
        {{20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0}});

    // 获取当前末端执行器位置
    std::array<double, 16> transform_current;
    robot.readOnce(transform_current);
    std::cout << "Current end-effector pose: ";
    for (double t : transform_current) {
      std::cout << t << " ";
    }
    std::cout << std::endl;

    // 设置目标末端执行器位置
    std::array<double, 16> transform_target = {...}; // 设置目标位姿

    // 设置最大线速度和角速度
    double max_translational_velocity = 0.1;  // m/s
    double max_rotational_velocity = 0.5; // rad/s

    // 生成笛卡尔空间轨迹
    franka::Duration duration(2.0); // 轨迹持续时间2秒
    franka::CartesianVelocities cartesian_velocities = robot.generateCartesianVelocities(
        transform_current, transform_target, duration,
        max_translational_velocity, max_rotational_velocity);

    // 控制机器人沿轨迹运动
    robot.control([&](const franka::RobotState& robot_state,
                     franka::Duration period) {
      return cartesian_velocities;
    });

    std::cout << "Trajectory completed." << std::endl;

    return 0;
  } catch (const franka::Exception& e) {
    std::cout << e.what() << std::endl;
    return -1;
  }
}

 

标签:20.0,Franka,笛卡尔,libfranka,robot,transform,franka,18.0,include
From: https://www.cnblogs.com/ai-ldj/p/18289517

相关文章

  • Franka libfranka 基于关节空间的速度控制
    #include<array>#include<cmath>#include<iostream>#include<franka/exception.h>#include<franka/model.h>#include<franka/robot.h>#include<franka/tools.h>intmain(intargc,char**argv){try{//......
  • Franka FCI 概述
     Franka控制接口(FCI)允许快速直接地与手臂和手进行低级双向连接。它提供机器人的当前状态,并允许使用通过以太网连接的外部工作站PC直接控制机器人。通过使用libfranka我们的开源C++接口,您可以使用5种不同的接口以1kHz的频率发送实时控制值:重力和摩擦补偿关节水......
  • Franka 雅克比矩阵在机器人运动学里的作用
     雅可比矩阵在机器人运动学中扮演着非常重要的角色,主要体现在以下几个方面:速度求解器:雅可比矩阵能够将关节空间的速度映射到笛卡尔空间的速度,或者反过来。通过雅可比矩阵,可以计算出在给定关节速度下,末端执行器的线速度和角速度。这在控制机器人运动、路径规划和碰撞检测......
  • Franka Emika Datasheet(技术参数)
    任何人均可随时随地实现自动化。 FrankaEmika是德国慕尼黑的一家深科技公司,该公司致力于创造全新的机器人平台技术,提高性能,改善每个人的访问便捷性,从而克服现代社会面临的最大难题之一,让整整一代人摆脱枯燥乏味、存在潜在危险且极其耗时的劳动和工作。为了实现高性能和易用......
  • P5854 【模板】笛卡尔树
    原题链接题解笛卡尔树的定义如下:任意一颗子树都代表一段连续的区间,且子树的根节点是该区间的最大值,根的左边的元素下标均比根小(二叉搜索树性质),子节点均比父节点大(堆的性质)我们讲如何实现的设即将要插入的元素为\(a_i\)栈内的元素为前\(i-1\)个元素构成的笛卡尔树从根一直......
  • 笛卡尔树
    笛卡尔树对于每个区间,找到区间的极值,把这个区间一分为二,这个极值就是这个区间的根,两个部分的根是极值的两个儿子如何求笛卡尔树?以大根堆为例方法一令\(l_i\)表示第\(i\)个元素向左第一个\(\ge\)它的位置,\(r_i\)表示第\(i\)个元素向右第一个\(\ge\)它......
  • 笛卡尔树
    引入首先我们看到这个序列\([9,4,10,1,7,2,3]\),现在我们找到它的最大值\(10\),并从中间劈开,此时分为了两个序列\([9,4]\)和\([1,7,2,3]\),接着对这两个序列继续这样的操作。现在,将劈开后序列最大值和被劈开的数建立父子关系,于是便建立了这个树:这也就是笛卡尔树。笛卡尔树满......
  • 基环树和笛卡尔树
    基环树就是比平常的树多一条边,有\(n\)条边,也就有一个环在里面。基本思想就是断环,跑树形\(dp\),或者用拓扑排序判环去跑环形\(dp\)。树的直径今天才了解到的,用两遍\(dfs\)跑。首先第一遍找到离根节点最远的节点\(u_1\),然后再从\(u_1\)找到离它最远的节点\(u_2\),那么......
  • 基环树和笛卡尔树
    1.基环树定义:有\(n\)个点和\(n\)条边的图,就是给树连了一条边,此时图中恰好只有一个环解决这类问题时,通常断环,变成普通的树的问题,然后再特殊处理环P2607[ZJOI2008]骑士click断环成树后就跟没上司一样是个树形dp,注意森林,longlong就行了,具体细节见这里P5022[NOIP2018提高组......
  • 过滤条件之分组 group by、having、distinct、order by、limit、正则、多表查询和子查
    【一】过滤条件之分组groupby【1】引入--按照指定条件对所有数据进行分组--对员工进行分组按照年龄/部门--...select*from*where*groupby*;【2】按照部门分组(1)查询数据select*fromempgroupbypost;#第一次使用部门分组会报错mysql>select*f......