三轴机械臂逆运动学解算(附代码)

机械臂运动位姿的求解有两种方式

一、正运动学

通过控制已知的连轴(舵机或电机)的旋转角度,求出机械臂终端的空间坐标

二、逆运动学

通过已知的抓取点的空间坐标,求解出三个舵机所需要转动的角度,这里主要讲解逆运动学解法


​​

此处θ1 ,θ2, θ3是三个舵机所需转动的角度 ,γ是杆3相对于x轴的夹角,根据刚体旋转,逆运动学求解,会得到两个解,即有两种姿态,相对于前一个杆逆时针旋转的夹角为正,顺时针为负。如上图第一种姿态(上折线),θ1<0,θ2<0,θ3>0

三、求解

(这里就第一种姿态求解)

①求B点坐标

已知空间点A坐标x,y。(因为三杆必然处于同于平面,若涉及z坐标,则机械臂下方云台的解算应考虑在内。

Bx = x - L3*cos(γ);

By = y - L3*sin(γ);

②求出θ1

cosβ = (Bx^2+ By^2 + L1^2 -L2^2) / (2* L1 *sqrt(Bx^2 +By^2));

β = acos(cosβ)*180/pi;

α = atan2(By,Bx)*180/pi;

θ1=-(pi/2-α-β); //数学上θ1为正,但应用上应为负值

③求出θ2

cosθ2 = (Bx^2 + By^2 - L1^2 - L2^2)/(2* L1 *L2);

θ2 = - acos(cosθ2 )*180/pi; //同理θ2改为负值

④求出θ3(这里的γ需预先定好)

通过γ = θ1 + θ2 + θ3

求出θ3 = γ- θ1- θ2

至此三个角度结算完毕

四、代码实现

#include “stdio.h”
#include “math.h”
float theta[3];
#define pi 3.1415
void caculate(float x, float y, float z, float * ptheta)
{
float L1 = 0.14; //杆长
float L2 = 0.11;
float L3 = 0.04;
Bx=x-L3; //这里设置γ为-90
By=y;
lp=Bx* Bx+By* By;
if (sqrt(lp)>=L1+L2 || sqrt(lp)<=fabs(L1-L2))
printf(“unreached”);
alpha = atan2(By,Bx);
beta = acos((L1* L1+lp-L2* L2)/(2* L1* sqrt(lp))); //这里使用弧度制
ptheta[0] = -(pi/2.0-alpha-beta);
ptheta[1] = acos((L1* L1+L2* L2-lp)/(2* L1 *L2))-pi;
ptheta[2] = -ptheta[0] -ptheta[1]- pi/2;
}

caculate(0.14, 0.09, 0.1, theta);

ROS moveit仿真效果


参考博客
(https://blog.csdn.net/xinglucao/article/details/86534402?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164432010116780261924975%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=164432010116780261924975&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~hot_rank-1-86534402.nonecase&utm_term=%E4%B8%89%E8%BD%B4%E6%9C%BA%E6%A2%B0%E8%87%82%E6%8E%A7%E5%88%B6%E7%AE%97%E6%B3%95&spm=1018.2226.3001.4450)

​修改:代码中部分 * 没有打出来

void caculate(float x, float y, float z, float *ptheta)
{float L1 = 0.14; //杆长float L2 = 0.11;float L3 = 0.04;float alpha, beta, lp, Bx, By;Bx=x-L3; //这里设置γ为-90By=y;lp=Bx*Bx+By*By;if (sqrt(lp)>=L1+L2 || sqrt(lp)<=fabs(L1-L2))return 1;alpha = atan2(By,Bx);beta = acos((L1*L1+lp-L2*L2)/(2*L1*sqrt(lp))); //这里使用弧度制ptheta[0] = -(pi/2.0-alpha-beta);ptheta[1] = acos((L1*L1+L2*L2-lp)/(2*L1*L2))-pi;ptheta[2] = -ptheta[0] -ptheta[1]- pi/2.0;return 0;
}

三轴机械臂逆运动学解算(附代码)相关推荐

  1. 数值法求六轴机械臂逆运动学解

    问题描述:已知工具坐标系相对于固定坐标系的期望位置和姿态,如何求解满足期望位姿的关节角? 本篇将通过基于雅克比矩阵的牛顿-拉夫森迭代法求运动学逆解. 牛顿 - 拉夫森法(Newton - Raphso ...

  2. UR机械臂逆运动学解析解

    UR机械臂逆运动学解析解 ur10机械臂的DH(修正)参数为 d1=0.1273;a2=-0.612;a3=-0.5723;d4=0.163941;d5=0.1157;d6=0.6922; 首先,推导 ...

  3. 对于STM32F103控制的三轴机械臂基本功能测试-关节转动控制

    ➤01 机械臂调试 1.简介 对于 基于STM32对于三轴机械臂控制器设计 的设计已经进行了如下的调试: 对于STM32F103三轴机械臂控制器进行基本功能测试-关节角度读取 对于STM32F103三 ...

  4. 对于STM32F103三轴机械臂控制器进行基本功能测试-关节角度读取

    ➤01 机械臂调试 1.简介 对 基于STM32对于三轴机械臂控制器设计 中对应的控制电路读取肩部和肘部两个 角度编码器 ST-3806-15-RS 数据进行调试. 2.接口电路1 ▲ 角度读取的相关 ...

  5. 对于STM32F103三轴机械臂控制器进行基本功能测试-上下运动功能

    简 介: 本文针对基于在基于STM32对于三轴机械臂控制器设计 中设计了控制电路板.本文记录对其在机械臂实际部件进行调试的过程. 关键词: STM32F103,机械臂,三轴,上下运动 ➤01 机械臂控 ...

  6. 基于STM32对于三轴机械臂控制器设计

    简 介: 本文使用了STM32对于一款三轴机械臂进行初步驱动,调试他的各个关节的运动情况. 关键词: 机械臂,三轴机械臂,STM32 ➤ 01背景 在 组装肩部带有减速器双轴机械臂组装与调试 的调试基 ...

  7. Rviz玩转三轴机械臂

    前言 最近想加深ROS仿真机械臂的理解,所以笔者参考一些资料与博客,在ROS下搭个简单的三轴机械臂,在Rviz下实现各轴关节转动,如果后续有时间的话,可能会更新下Gazebo下仿真,如果时间不够的话, ...

  8. 机械臂——六轴机械臂逆解

    环境:MATLAB 2017B+Robotics Toolbox 9.10.0 前期准备:完成机械臂数学模型的建立+计算机械臂工作空间 https://blog.csdn.net/Kalenee/ar ...

  9. 六轴机械臂算法正解(FK)和逆解(IK)

    在之前的博客中,有一篇<六轴机械臂算法-引导篇>,目前,终于将引导篇中的各个点整理完毕. 因为文档中涉及到比较多的图片以及公式,copy的过程中发现比较麻烦,所以直接将文档截取成了图片上传 ...

  10. grbl控制3轴机械臂 原理 实现 (四) 之GRBL源码修改驱动三轴机械臂

    往期回顾: 第一篇:grbl控制3轴机械臂 原理 实现 (一) 之2D机械臂模拟及实现 第二篇:grbl控制3轴机械臂 原理 实现 (二) 之3D机械臂模拟及实现 第三篇:grbl控制3轴机械臂 原理 ...

最新文章

  1. PHP学习笔记--011 PHP文件处理
  2. sqlmap报错注入
  3. 基于小波变换的信号降噪处理及仿真研究_信号处理方法推荐--1(转载自用,侵删)...
  4. plt.subplots中的ax = ax.flatten()
  5. python自动化上传图片_Python(二)借助七牛云通过脚本自动获取上传图片外链
  6. android 布局收缩成球,Android使用Material Design实现悬浮按钮
  7. Extjs 实战之 Ext.tree.TreePanel Tree无法显示
  8. 第七届蓝桥杯大赛个人赛省赛(软件类)真题4
  9. 使用JMAP dump及分析dump文件
  10. 编程之美4:求数组中的最大值和最小值
  11. 2021-09-06146. LRU 缓存机制 哈希表
  12. Java Web编程技术基础
  13. 黑苹果英特尔板载网卡驱动 IntelMausiEthernet.kext 2.5.0
  14. 数据分析:AARRR模型
  15. 最新PyCharm基本使用(3)------编码(Code)、重构(Refactor)
  16. 计算机网络基础心得体会结尾,学习《计算机网络基础知识》心得体会
  17. myeclipse 6.5 注册码 myeclipse 6.0 注册码
  18. HASH和HMAC(5):SHA-384、SHA-512、SHA-512/224和SHA-512/256算法原理
  19. 使用高德地图的逆向地址,获取坐标点
  20. 【转】从P1到P7——我在淘宝这7年

热门文章

  1. 射频微波芯片设计2:滤波器芯片
  2. 疯狂的程序员阅读笔记
  3. c 语言万年历算法,【C语言】第一个C语言小程序 —— 日期算法和万年历
  4. 现场取证之流量分析总结
  5. Java集合类源码详解
  6. u盘读写速度变慢了开始快后面特别慢卡顿解决方法
  7. [论文笔记]JED:Towards Real-Time Multi-Object Tracking
  8. Android 屏幕画笔实现
  9. 【p2p】【EdgeVPNio (evio)】简介: IP-over-P2P (IPOP)
  10. Paper:LSTM之父眼中的深度学习十年简史《The 2010s: Our Decade of Deep Learning / Outlook on the 2020s》的解读