首页 > 其他分享 >Franka Robot 打印机器人关节位姿(print_joint_poses.cpp)

Franka Robot 打印机器人关节位姿(print_joint_poses.cpp)

时间:2024-07-10 19:09:14浏览次数:13  
标签:Franka 机器人 Robot joint 打印 ostream 关节 include

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

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

/**
 * @example print_joint_poses.cpp
 * An example showing how to use the model library that prints the transformation
 * matrix of each joint with respect to the base frame.
 */

/**
 * @example print_joint_poses.cpp
 * 一个示例,展示如何使用模型库打印每个关节相对于基础坐标系的变换矩阵。
 */

// 定义了一个模板函数 operator<<,用于输出 std::array 类型的对象到输出流 std::ostream 中
template <class T, size_t N>
std::ostream& operator<<(std::ostream& ostream, const std::array<T, N>& array) {
  ostream << "[";
  //使用 std::copy 算法将数组的第一个元素到倒数第二个元素输出到流 ostream 中,每个元素之间用逗号分隔
  std::copy(array.cbegin(), array.cend() - 1, std::ostream_iterator<T>(ostream, ","));
  //将数组的最后一个元素输出到流 ostream 中,不再跟随逗号
  std::copy(array.cend() - 1, array.cend(), std::ostream_iterator<T>(ostream));
  ostream << "]";
  return ostream;
}

int main(int argc, char** argv) {
  if (argc != 2) {
    std::cerr << "Usage: " << argv[0] << " <robot-hostname>" << std::endl;
    return -1;
  }

  try {
    franka::Robot robot(argv[1]);// 连接机器人

    franka::RobotState state = robot.readOnce();// 读取机器人状态

    franka::Model model(robot.loadModel()); // 加载机器人模型库
    for (franka::Frame frame = franka::Frame::kJoint1; frame <= franka::Frame::kEndEffector;// 迭代打印
         frame++) {
      std::cout << model.pose(frame, state) << std::endl;// 通过坐标系和机器人状态,获取到相应状态的机器人位姿数组
    }
  } catch (franka::Exception const& e) {
    std::cout << e.what() << std::endl;
    return -1;
  }

  return 0;
}
  • 功能

    • 命令行参数检查:检查参数个数是否为 2,若不是则输出正确的使用方式并返回 -1
    • 机器人连接和状态读取:使用指定的机器人主机名连接机器人,并通过 robot.readOnce() 读取当前机器人的状态。
    • 模型加载和姿态获取:通过 robot.loadModel() 加载机器人的模型,并使用 model.pose(frame, state) 获取每个关节相对于基础坐标系的变换矩阵。
    • 循环打印:使用 for 循环迭代打印从关节 kJoint1 到末端执行器 kEndEffector 的每个关节的姿态信息。
  • 异常处理:使用 try-catch 块捕获可能抛出的 franka::Exception 异常,并输出异常信息。

这段代码演示了如何利用 Franka Robotics 的库加载机器人模型,并获取打印每个关节相对于基础坐标系的变换矩阵的功能。它结合了模板函数以及机器人模型和状态的操作,为机器人控制和姿态分析提供了一个基础示例。

 

标签:Franka,机器人,Robot,joint,打印,ostream,关节,include
From: https://www.cnblogs.com/ai-ldj/p/18294825

相关文章

  • 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/......
  • Franka Robot 齐次变换矩阵 robot_state.O_T_EE
    O_T_EE 是一个4x4的齐次变换矩阵,用于描述末端执行器在机器人基座坐标系下的位置和姿态。这个矩阵的结构如下:[r11r12r13tx][r21r22r23ty][r31r32r33tz][0001]其中:r11到r33表示末端执行器的旋转矩阵tx、ty、tz表示末端执行器在机器人基座坐标系......
  • Franka Robot 多上位机控制控制方案
    Franka机器人来说,多个上位机可以同时对机器人进行控制,但需要遵循一些原则和注意事项:协作控制模式:多个上位机同时控制Franka机器人需要采用协作控制模式。在这种模式下,各个上位机向机器人发送的指令会被协调合并,避免指令冲突。访问权限管理:通常会对上位机的访问权限......
  • Franka Robot cmake demo
    cmake_minimum_required(VERSION3.4)#指定CMake的最低版本要求为3.4project(libfranka-examplesCXX)#定义项目名称为libfranka-examples,并指定语言为C++list(INSERTCMAKE_MODULE_PATH0${CMAKE_CURRENT_LIST_DIR}/../cmake)#将父目录的`cmake`子目录添加到......
  • Franka Robot 测试网络性能的示例(communication_test.cpp)
    //Copyright(c)2023FrankaRoboticsGmbH//UseofthissourcecodeisgovernedbytheApache-2.0license,seeLICENSE#include<chrono>#include<iostream>#include<thread>#include<franka/active_control.h>#include<frank......
  • Franka Robot setZeroForceTorque 设置零力矩
    在FrankaEmika机器人中,可以使用setZeroForceTorque()函数来设置机器人的零力矩。这个函数可以让机器人保持在零力矩状态,即不施加任何额外的力矩。这种状态下,机器人关节会保持"放松"的状态,可以被外力轻易地移动。以下是一个示例代码:#include<franka/robot.h>intmain()......
  • Franka Robot setDefaultBehavior的作用
    Franka机器人的setDefaultBehavior()函数是一个非常有用的功能,它可以设置机器人在遇到意外情况时的默认行为。这个函数可以帮助开发者更好地控制机器人的安全性和稳定性。以下是setDefaultBehavior()函数的一些常见用法:安全停止行为可以设置机器人在遇到紧急情况时(如检测......
  • Franka Robot robot.setJointImpedance()和robot.setCartesianImpedance()两个函数有
    robot.setJointImpedance()和robot.setCartesianImpedance()两个函数有以下区别和联系:区别:参考坐标系不同setJointImpedance()是设置每个关节的阻抗参数,以关节坐标系为参考。setCartesianImpedance()是设置机器人末端在笛卡尔空间中的阻抗参数,以笛卡尔坐标系为参考。......
  • Franka demo1 - 输出机器人状态(echo_robot_state)
    //Copyright(c)2023FrankaRoboticsGmbH//UseofthissourcecodeisgovernedbytheApache-2.0license,seeLICENSE#include<iostream>#include<franka/exception.h>#include<franka/robot.h>/***@exampleecho_robot_state.cpp......