首页 > 其他分享 >Franka Ros Moveit 基于关节空间的目标位置运动

Franka Ros Moveit 基于关节空间的目标位置运动

时间:2024-07-08 11:33:07浏览次数:11  
标签:nh Franka _. move ros joint position Ros Moveit

#include <cmath>
#include <iostream>

#include <moveit/move_group_interface/move_group_interface.h>
#include <moveit/planning_scene_interface/planning_scene_interface.h>

#include <ros/ros.h>
#include <sensor_msgs/JointState.h>
#include <std_msgs/Float64MultiArray.h>

class FrankaPositionControl {
public:
  FrankaPositionControl(ros::NodeHandle& nh)
    : nh_(nh), move_group_("panda_arm") {
    joint_state_sub_ = nh_.subscribe("/franka/joint_states", 1, &FrankaPositionControl::jointStateCallback, this);
    joint_position_pub_ = nh_.advertise<std_msgs::Float64MultiArray>("/franka/joint_position_commands", 1);
  }

  void run() {
    // 设置目标关节角度
    std::vector<double> q_goal = {0.0, -M_PI_4, 0.0, -3 * M_PI_4, 0.0, M_PI_2, M_PI_4};

    // 创建运动规划请求
    moveit::planning_interface::MoveGroupInterface::Plan plan;
    move_group_.setJointValueTarget(q_goal);

    // 进行运动规划
    moveit::planning_interface::MoveItErrorCode success = move_group_.plan(plan);
    if (success == moveit::planning_interface::MoveItErrorCode::SUCCESS) {
      // 执行运动计划
      move_group_.move();
      std::cout << "Trajectory completed." << std::endl;
    } else {
      std::cout << "Motion planning failed." << std::endl;
    }
  }

private:
  void jointStateCallback(const sensor_msgs::JointState::ConstPtr& msg) {
    std_msgs::Float64MultiArray joint_position_cmd;
    joint_position_cmd.data = {msg->position[0], msg->position[1], msg->position[2],
                              msg->position[3], msg->position[4], msg->position[5],
                              msg->position[6]};
    joint_position_pub_.publish(joint_position_cmd);
  }

  ros::NodeHandle nh_;
  moveit::planning_interface::MoveGroupInterface move_group_;
  ros::Subscriber joint_state_sub_;
  ros::Publisher joint_position_pub_;
};

int main(int argc, char** argv) {
  ros::init(argc, argv, "franka_position_control");
  ros::NodeHandle nh;
  FrankaPositionControl controller(nh);
  controller.run();
  ros::spin();
  return 0;
}

 

这个示例使用了MoveIt!来实现Franka机器人的关节空间位置控制。主要步骤如下:

1. 设置目标关节角度。
2. 创建一个`moveit::planning_interface::MoveGroupInterface`对象,并设置目标关节角度。
3. 调用`move_group_.plan()`进行运动规划。
4. 如果规划成功,则调用`move_group_.move()`执行运动计划。

与之前的示例相比,这个示例使用了MoveIt!库来完成运动规划和执行。MoveIt!提供了更加强大和灵活的运动规划功能,包括碰撞检测、前向运动学、逆运动学等。使用MoveIt!可以更方便地实现复杂的运动任务,并且具有更好的可重用性和可扩展性。

在实际使用时,可以根据具体需求调整目标关节角度,以及其他规划参数,如规划器类型、轨迹平滑等。同时也可以结合力矩控制、阻抗控制等方法,实现更复杂的运动控制。

标签:nh,Franka,_.,move,ros,joint,position,Ros,Moveit
From: https://www.cnblogs.com/ai-ldj/p/18289566

相关文章

  • 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 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 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是德国慕尼黑的一家深科技公司,该公司致力于创造全新的机器人平台技术,提高性能,改善每个人的访问便捷性,从而克服现代社会面临的最大难题之一,让整整一代人摆脱枯燥乏味、存在潜在危险且极其耗时的劳动和工作。为了实现高性能和易用......
  • autoware.universe源码略读(3.5)--perception:compare_map_segmentation/crosswalk_tra
    autoware.universe源码略读3.5--perception:compare_map_segmentation/crosswalk_traffic_light_estimatorcompare_map_segmentationcompare_elevation_map_filter_nodedistance_based_compare_map_filter_nodeletvoxel_based_approximate_compare_map_filter_nodeletvox......
  • Microsoft SQL Server 2012 中常用的 Transact-SQL 命令示例,涵盖了数据库管理和查询操
    MicrosoftSQLServer2012中常用的Transact-SQL命令示例,涵盖了数据库管理和查询操作:创建数据库sqlCopyCodeCREATEDATABASEYourDatabaseName;删除数据库sqlCopyCodeDROPDATABASEYourDatabaseName;创建表sqlCopyCodeCREATETABLEEmployees(EmployeeIDIN......
  • 在 Microsoft SQL Server 2012 中,可以使用 sqlcmd 命令行工具来执行 Transact-SQL 脚
    sqlcmd实用工具-SQLServer|MicrosoftLearn在MicrosoftSQLServer2012中,可以使用sqlcmd命令行工具来执行Transact-SQL脚本和命令。这个工具提供了一种在命令行下管理和操作SQLServer的便捷方式。以下是一些sqlcmd命令的实例用法:连接到SQLServer实例bashC......
  • WPF Performance Suite, Microsoft Windows Performance Toolkit
    Copyfrom https://www.cnblogs.com/lindexi/p/12086719.htmlhttps://learn.microsoft.com/en-us/previous-versions/aa969767(v=vs.110) 1.Downloadurl:  https://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKPerformanceT......