睿尔曼超轻量仿人机械臂之在ROS里引用正逆解函数库

一、机械臂运动学正逆解说明

机械臂运动学就是根据未端执行器与所选参考坐标系之间的几何关系,确定末端执行器的空间位置和姿态与各关节变量之间的数学关系。包括正运动学 (Forward Kinematics)和逆运动学 (Inverse  Kinematics)两部分。

机械臂运动分为关节空间运动和笛卡尔空间运动2种方式,2种运动方式分别对应机械臂运动学算法的正解和逆解,在不同的应用场景下可以使用不同的运动方式。

两种运动方式之间的不同可总结为以下几点:

  1. 表示方式不同。关节空间运动发给机械臂的是机械臂各个关节的角度,从而控制机械臂运动到某个位置;笛卡尔空间运动发给机械臂的是在笛卡尔空间种机械臂末端的位置和姿态(简称为位姿),目前大多数机械臂用来表达位姿使用(x,y,z,rx,ry,rz),其中姿态表达为欧拉角;
  2. 控制方式不同。在关节空间中,通过控制各个关节的角度实现控制机械臂运动;在笛卡尔空间中,通过控制机械臂末端的位置和姿态实现控制机械臂运动;
  3. 运动规划不同。关节空间运动规划是对每个关节进行规划,计算每个关节的插补点;笛卡尔空间运动规划是在笛卡尔空间规划末端轨迹,然后每个插补点再去逆解,计算对应的每个关节的角度。
  4. 控制自由度不同。使用笛卡尔空间运动时,机械臂可以由N个自由度组成,只需确保机械臂的末端到达所发位姿即可;关节空间运动时,需要根据机械臂的实际自由度发送相对应数量的关节角度;

 睿尔曼六轴机械臂关节运动可使用机械臂示教器、JSON协议、API等多种方式进行控制。

二、RM-65B ROS包架构简析

三、系统环境要求

经过睿尔曼测试的操作系统版本: Ubuntu 20.04

经过睿尔曼测试的ROS版本: ROS1 Noetic

未经过测试的操作系统版本与ROS版本,用户根据需求,可自行尝试可行性

四、在ROS里引用正逆解函数库

1、创建一个功能包或者进入现有ROS功能包,新建"include"以及"lib"文件夹(如果不存在)。

2、将API中提供的头文件复制到"include"文件夹,将"Linux"文件夹中的对应版本的so库文件复制到"lib"文件夹。

3、在ROS功能包中的CMakeLists.txt文件中,添加对引用库的依赖

include_directories(

   include

  ${catkin_INCLUDE_DIRS}

)

link_directories(

  ${catkin_LIB_DIRS} lib

)

4、编译功能包

5、引用头文件,在ROS代码中使用API库中的算法接口:

extern "C"{

#include "rm_base.h"

}

#include <math.h>

#include <ros/ros.h>

#include <rm_msgs/MoveJ.h>

#include <rm_msgs/MoveJ_P.h>

#include <rm_msgs/Plan_State.h>

using namespace std;

// 接收到订阅的机械臂执行状态消息后,会进入消息回调函数

void planStateCallback(const rm_msgs::Plan_State::ConstPtr& msg)

{

    // 将接收到的消息打印出来,显示机械臂是否完成运动

    if(msg->state)

    {

        ROS_INFO("*******Plan State OK");

    } else {

        ROS_INFO("*******Plan State Fail");

    }

}

int main(int argc, char **argv)

{

// 初始化ROS节点

    ros::init(argc, argv, "kinematics_demo");

    // 创建节点句柄

    ros::NodeHandle nh;

    

// 声明spinner对象,参数2表示并发线程数,默认处理全局Callback队列

    ros::AsyncSpinner spin(2);

    // 启动两个spinner线程并发执行可用回调

    spin.start();

    

    // 空间规划指令Publisher

    ros::Publisher moveJ_P_pub = nh.advertise<rm_msgs::MoveJ_P>("/rm_driver/MoveJ_P_Cmd", 10);

  

    // 订阅机械臂执行状态话题

     ros::Subscriber planState_sub = nh.subscribe("/rm_driver/Plan_State", 10, planStateCallback);

    

    //初始化

    int dmode = ARM_65;

    RobotType rbt_type = RM65B;

    Algo_Init_Sys_Data(dmode,rbt_type);

    //设置安装角度

    Algo_Set_Angle(-90,90,0);    

    ros::Duration(2.0).sleep();

//joint记录机械臂的目标角度

float joint[6] = {81.001717,104.540276,-104.602264,-158.27413,78.476189,77.162445};

    float q_out[6];

//调用运动学正解api,输入为目标位置关节角度,输出为目标位置机械比位姿(位置+欧拉角形式)

    Pose now = Algo_Forward_Kinematics(joint);

    ROS_INFO("Now Flange: %f, %f, %f, %f, %f, %f\n",now.position.x,now.position.y,now.position.z,now.quaternion.x,now.quaternion.y,now.quaternion.z,now.quaternion.w);

    ros::waitForShutdown();

    return 0;

}

// //将目标位姿通过moveJ_P发送给机械臂,控制机械臂运动到目标位姿

rm_msgs::MoveJ_P moveJ_P_target;

moveJ_P_target.Pose.position.x = now.position.x;

moveJ_P_target.Pose.position.y = now.position.y;

moveJ_P_target.Pose.position.z = now.position.z;

moveJ_P_target.Pose.orientation.x = now.quaternion.x;

moveJ_P_target.Pose.orientation.y = now.quaternion.y;

moveJ_P_target.Pose.orientation.z = now.quaternion.z;

    moveJ_P_target.Pose.orientation.w= now.quaternion.w;

moveJ_P_target.speed = 0.3;

   moveJ_P_pub.publish(moveJ_P_target);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/807220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

访问网站时IP被阻止?解决方法

相信许多人都曾遭遇过IP禁令的困扰&#xff1a;比如在尝试访问社交媒体、搜索引擎或电子商务网站时&#xff0c;突然发现自己被限制了访问权限&#xff1b;又或是自己的账号在毫无预兆的情况下被封禁。这些网络上的种种限制使得IP被封成为了一个常见的问题&#xff0c;让我们无…

Unity 中画线

前言&#xff1a; 在Unity项目中&#xff0c;调试和可视化是开发过程中不可或缺的部分。其中&#xff0c;绘制线条是一种常见的手段&#xff0c;可以用于在Scene场景和Game视图中进行调试和展示。本篇博客将为你介绍多种不同的绘制线条方法&#xff0c;帮助你轻松应对各种调试…

Csharp_pta2

C#实验1-2 7-1 C# 1.6 求孪生素数 编写控制台应用程序&#xff0c;查找一个用户输入的正整数区间中的孪生素数&#xff08;孪生素数就是指相差2的素数对&#xff09;。 输入格式: 用户在一行中输入两个正整数&#xff0c;中间用一个空格间隔。 输出格式: 如果第二个数小于…

数据可视化-ECharts Html项目实战(11)

在之前的文章中&#xff0c;我们学习了如何在ECharts中特殊图表的双y图以及自定义形状词云图。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 数据可视化-ECh…

JAVA学习-深入研究容器.选择接口的不同实现

Java集合框架提供了多个接口&#xff0c;每个接口都有不同的实现类&#xff0c;以满足不同的需求。以下是几个常用接口及其不同的实现类的概述&#xff1a; 1. List接口&#xff1a; - 特点&#xff1a; 有序集合&#xff0c;允许重复元素。 - 实现类&#xff1a; ArrayList…

35-3 使用dnslog探测fastjson漏洞

一、DNSLog 原理 DNSLog是一种记录在DNS上的域名相关信息的机制,类似于日志文件,记录了对域名或IP的访问信息。了解多级域名的概念对理解DNSLog至关重要。因特网采用树状结构的命名方法,按照组织结构划分域,每个域都是名字空间中被管理的一个划分,可以进一步划分为子域。域…

如何通过子网掩码来计算IP的地址范围

通过子网掩码计算IP地址范围是一个基本的网络技能&#xff0c;它允许你确定一个给定网络的可用IP地址。以下是详细的步骤和计算方法&#xff1a; 1. 理解子网掩码 子网掩码是32位的二进制数&#xff0c;用来决定IP地址中哪些部分是网络地址&#xff0c;哪些部分是主机地址。子…

Java数据结构二叉树

概念 一棵二叉树是结点的一个有限集合&#xff0c;该集合&#xff1a; 1. 或者为空 2. 或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。 从上图可以看出&#xff1a; 1. 二叉树不存在度大于2的结点 2. 二叉树的子树有左右之分&#xff0c;次序不能颠倒&#x…

医疗器械FDA | 常见的网络安全材料发补问题都有哪些?

FDA网络安全资料发补咨询点此​​获取https://work.weixin.qq.com/ca/cawcde5ee29d239046 ————————--- 01 安全文档编写问题 FDA网络安全文档编写格式、内容、可读性等未满足官方要求&#xff0c;则将可能被要求发补整改编写后的文档。 02 安全管理问题 a. 网络安…

富格林:远离虚假谨记可信盈利技巧

富格林悉知&#xff0c;想要做好黄金投资远离虚假受害陷阱&#xff0c;就需提前学习研判和揭秘可信的盈利出金的方法&#xff0c;只有做好未雨绸缪才是盈利出金的最好保障。那么需掌握哪些可信盈利技巧呢&#xff1f;以下总结几点可信做单建议和技巧&#xff0c;一起看看吧。 遵…

【机器学习】K-means聚类算法:原理、应用与优化

一、引言 1、简述聚类分析的重要性及其在机器学习中的应用 聚类分析&#xff0c;作为机器学习领域中的一种无监督学习方法&#xff0c;在数据探索与知识发现过程中扮演着举足轻重的角色。它能够在没有先验知识或标签信息的情况下&#xff0c;通过挖掘数据中的内在结构和规律&a…

深度学习学习日记4.7

1.梯度下降 w 新 w旧 - 学习率梯度 训练的目的就是让 loss 减小 2.前向传播进行预测&#xff0c; 反向传播进行训练(每一个参数通过梯度下降进行更新参数)&#xff0c;(1前向传播 2求 loss 3反向传播 4梯度更新) 能够让损失下降的参数&#xff0c;就是更好的参数。 损失…

数据分析-数据清洗8大类方法|数据采集|电商数据API接口

数据分析首先我们需要坐数据采集 jd API 接入说明 API地址: 调用示例&#xff1a; 参数说明 通用参数说明 url说明 ……/平台/API类型/ 平台&#xff1a;淘宝&#xff0c;京东等&#xff0c; API类型:[item_search,item_get,item_search_shop等]version:API版本key:调用key,…

阿里云微调chatglm3-6b---只有一个python解释器但gradio要求版本不兼容怎么办

安装LLAMA参考博文http://t.csdnimg.cn/6yYwG 在用LLAMA微调大模型的时候总是出现connected error out并且出现这样的界面 这是由于LLMA所要求的gradio版本>4.0.0,<4.2.0&#xff0c;然而chatglm3-6b要求的gradio版本需要gradio3.39.0才能显示出web_demo_gradio.py渲染…

C++反向迭代器的实现

一、反向迭代器的定义 在容器中从尾元素向首元素反向移动的迭代器 对于反向迭代器&#xff0c;递增和递减的含义会颠倒过来 递增一个反向迭代器会移动到前一个元素 递减一个迭代器会移动到下一个元素 二、反向迭代器的实现 // 适配器 -- 复用 template<class Iterator,…

Weblogic任意文件上传漏洞(CVE-2018-2894)漏洞复现(基于vulhub)

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

数据库安全(二),3天拿到网易网络安全岗offer

数据脱敏厂家 国外&#xff1a;Informatica国内&#xff1a;比特信安、美创、安华、神州数码 由于敏感数据的重要性以及特殊性&#xff0c;一般不建议使用国外产品。 数据库漏扫 又叫数据库安全评估系统 漏扫对象 DBMS脆弱点&#xff1a;已知的DBMS自身存在的漏洞弱口令缺…

力扣HOT100 - 160. 相交链表

解题思路&#xff1a; /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if…

草稿111

概念 本质是欠条&#xff0c;三要素是额度&#xff0c;利息&#xff0c;到期时间 类型 国家发行 > 国债 企业发行 > 企业债 金融机构发行 > 金融债 根据发行方分为信用债和利率债 信用债依靠企业信用&#xff0c;国企由发改委评级&#xff0c;上市公司由证监会评…

笔记本会不会自动升级win11,win10会自动升级到win11吗

众所周知,win11是微软新推出的pc端操作系统,从发布到现在也有一年的时间了,不少用户想要安装使用。但是问题来了,笔记本会不会自动升级win11呢?答案是,并不会自动更新,如果你是正版win10系统,可以通过收到的升级通知进行升级win11。 win10会自动升级到win11吗 升级win1…