中正平和的机器人学笔记——1.正运动学

0. 何为运动学?何为正运动学?

运动学主要研究的就是机械臂的运动特性(位置、速度、加速度等),但是不考虑使机械臂产生运动时施加的力和力矩(这部分是动力学)。而正运动学的研究即是将关节变量作为自变量,进而研究操作臂末端执行器的位姿与基座间的函数关系。

1. D-H参数法

想要研究一个物体就要有一种模型/一种方法去描述它,在这个基础上再进行研究。毋庸多言,直接给出最经典的D-H参数法,DH是两位大佬(Denavit和Hartenberg)名字的缩写。另外DH参数法有标准形式有改进形式,如果四个参数的下标是相同的“i”则是标准形式,如果有a和α下标是“i-1”而d和θ是“i”则是改进型是,改进形式记起来麻烦但是实际应用时则更为方便。

D-H参数法采用4个运动学参数来描述一个连杆:

由上图可以看到,四个参数分别为:
连杆长度(link length) ai-1:关节轴i-1和关节轴i之间公垂线的长度;
连杆扭转角(link twist)αi-1:关节轴i-1和关节轴i投影到垂直于 ai-1的平面后构成的角(遵从右手法则,从i-1轴绕ai-1转向i轴);
连杆偏距(link offset)di:沿i轴方向,ai-1和ai的距离,即ai-1与关节轴i的交点到ai与关节轴i的交点的距离;
关节角(joint angle)θi:平移ai-1和ai,绕关节轴i旋转成的夹角。
通过D-H参数,我们可以有效地描述一个机构(连杆),例如对于6自由度(6个关节全是旋转关节)机械臂,我们需要6组18个参数就可以完全描述固定的运动学参数(a,α,d),θ是自变量。

2. 连杆坐标系

通常按照如下方式确定连杆上的坐标系:坐标系{i}的Z轴称为Zi,并与i轴重合;原点位于连杆长ai与关节轴i的交点处,Xi沿ai方向由关节i指向关节i+1;Yi则由右手定则确定。建立好的坐标系如下图:

根据上图坐标系,D-H参数也可定义为:
ai-1:沿Xi-1轴,从Zi-1移动到Zi的距离;
αi-1:绕Xi-1轴,从Zi-1旋转到Zi的角度;
di: 沿Zi轴,从Xi-1移动到Xi的距离;
θi: 绕Zi轴,从Xi-1旋转到Xi的角度。

这样理解D-H参数后,不论是使用还是记忆起来也会更加方便。
这里想说一点,在机器人学的学习过程中,一定要注意不能仅仅记忆公式,要通过联想空间中坐标系的变化取理解,死记硬背是不行的(这一点在动力学部分更是如此)。

3. 连杆变换的推导—结合实例Puma560机械臂

数学工具我们都已经准备好了,现在就着手开始进行正运动学的推导!
首先介绍一下Puma560机械臂。它是一个六自由度的机械臂,且所有关节均为转动关节,即RRRRRR,6R机构(R代表该关节是旋转关节,P代表该关节是位移关节)。这款机械臂大概是所有机器人学教材都会采用的一个非常经典的例子。人们对其分析已经很多很清晰了。

我们的分析步骤如下:

  1. 建立6个连杆坐标系;
  2. 分析D-H参数;
  3. 进行连杆变换推导;

最终我们就可以得到运动学方程。

3.1 坐标系的建立

坐标系的建立规则如下:

  1. 找出各个关节轴,为了便于分析可以画出其延长线。每次分析时仅考虑相邻两个轴(i和i+1);
  2. 找出轴i和轴i+1的公垂线或者i轴和i+1轴的交点,以轴和公垂线的交点或者两轴的交点为连杆坐标系{i}的原点,注意,上述第二种情况(i轴和i+1轴相交,这在工业机器人中是非常常见的),在这种情况下ai-1显然为0;
  3. 规定Zi的指向;
  4. 规定Xi的指向;如果轴i和轴i+1相交,则规定Xi垂直于轴i和轴i+1构成的平面;
  5. 按右手定则确定Yi的方向;
  6. 当第一个关节变量为0时,规定坐标系{0}和坐标系{1}重合。

    以上两图即是建立好的坐标系,希望大家可以动手画一画,自己试着建立连杆坐标系。包括后面正运动学和逆运动学的推导,都希望大家拿出纸笔自己试着画一画,算一算,不要只凭脑补。

3.2 D-H参数的确立

这里参照第1节,大家可以推导出Puma560 6自由度机器人的D-H参数表。如果觉得太难,可以自己画一个简单的平面两连杆机械臂来推导D-H参数,练练手后再来看这一节。
大家可以根据上表来检查一下自己推导的结果是否正确,同时也可以参照这个表,加深对D-H参数和连杆坐标系的理解。

3.3 连杆变换推导

这里就要用到齐次变换矩阵的知识,不熟悉的同学可以搜一搜相关知识再来推导。
首先是坐标系{0}到坐标系{1}的变换,显然是最简单的旋转变换;
坐标系{1}到坐标系{2}的变换,根据D-H参数表是绕X1旋转了-90°;
坐标系{2}到坐标系{3}的变换,是有位移也有旋转;
后面的同理,大家可以根据位姿变换的原理推导出变换矩阵如下:

对于齐次变换矩阵的理解希望大家能够结合实例深入理解。

比如坐标系{3}到坐标系{4}的变换,根据齐次变换矩阵可以看出:
{3}的原点沿X3方向移动了a3,沿Y3方向移动了d4,然后{4}中一点P(x,y,z)的z就是{3}中的y,当{4}沿轴4旋转时,P的x和y则由{3}的x和z表示。

这个可能第一次看有点绕,因此更需要大家自行推导,结合实例去理解齐次变换矩阵。至少要达到看到齐次变换矩阵就能想到空间中两个坐标系位姿的图来,这样才有利于理解后面的知识。

实际上到这一步我们的任务基本上就完成了。
将上述变换矩阵连乘。最终就可以得到末端坐标下一点在基座标系下的位姿。

最后这个矩阵就是正运动学方程,矩阵中自变量是6个关节角,因此当确定了6个关节的角度以后,我们就可以确定机械臂末端位姿在基座标系下的位姿!

4. 坐标系的标准命名

最后我们再完成一点收尾工作,对于一些坐标系的命名我们需要明确一下。

根据上图,我们给几个常用的坐标系说明一下:
基座标系(the base frame){B}:位于操作臂的基座上,就是{0}。

固定坐标系(the station frame){S}:与任务相关,通常位于机器人工作台上的一角,通常根据{B}确定,有时也称之为任务坐标系(the task frame)、通用坐标系(the universe frame)、世界坐标系(the world frame)

腕部坐标系(The wrist frame){W}:原点位于操作臂手腕上,随着操作臂的末端连杆移动。

工具坐标系(The tool frame){T}:原点定义在机器人抓持工具的末端。

目标坐标系(The goal frame){G}:对机器人移动工具到达的位置描述。特指在机器人运动结束后时,工具坐标系应当与目标坐标系重合。

5. 正运动学MATLAB的实现

这里不得不提一下Prof. Peter Corke的工具箱1:
Robotics Toolbox和Machine Vision Toolbox。
这两个工具箱非常便捷,当然现在MATLAB官方的Robotics工具箱也很好,大家可以都尝试一下。
这里我就以最简单的两连杆为例,利用工具箱实现其正运动学。

function T = FK_position(a1, q1, a2, q2)
%a1:连杆1的长度
%q1:连杆1的关节角
%a2:连杆2的长度
%q2:连杆2的关节角L(1) = Link([0 0 a1 0]); %建立连杆1,输入D-H参数θ、d、α、a
L(2) = Link([0 0 a2 0]);
two_link = SerialLink(L, 'name', 'two link');%建立完整的机械臂对象TOOL = two_link.fkine([q1 q2])
%fkine函数是foward kinematics的缩写,即正运动学求解
%返回末端位姿的齐次变换矩阵
x = TOOL.t(1);
y = TOOL.t(2);
q0 = rad2deg(atan(y/x));
T = [x;y;q0];two_link.plot([q1 q2])  %作图显示两连杆机械臂




正运动学部分就讲完啦,当然,讲得很简略,毕竟只是我个人学习过程的一点记录,而且我总不能把自己演算的步骤也一步步贴上来,那未免太过无味冗长。这个系列我还会继续写下去,希望大家能多提意见,谢谢!


  1. www.petercorke.com/RVC ↩︎

中正平和的机器人学笔记——1. 机械臂正运动学(附MATLAB代码)相关推荐

  1. 柔性matlab机械臂运动空间代码,中正平和的机器人学笔记——2. 机械臂逆运动学(附MATAB代码)...

    0. 预备知识(别跳过呀) 上一篇我们讲了正运动学,也就是通过齐次变换矩阵,知晓关节角后求得机械臂末端的位姿,并表示在基座标系下.这一篇我们就来讲一讲逆运动学问题--已知工具坐标系{T}相对于固定坐标 ...

  2. 中正平和的机器人学笔记——5. 机械臂动力学

    0. 基础知识 0.1 线加速度 上一篇中我们讲到了在坐标系{A}和坐标系{B}原点重合时,BQ^BQBQ的速度矢量的表示方式: AVQ^AV_QAVQ​ = BARBVQ^A_BR^BV_QBA​R ...

  3. 【机械】基于简化几何解法的六轴机械臂位置规划附matlab代码

    1 内容介绍 基于简化几何解法的六轴机械臂位置规划附matlab代码 2 部分代码 clc; clear; %载入数据 importfile('shuiping.mat'); theta_shuipi ...

  4. 中正平和的机器人学笔记——0. 前言

    中正平和的机器人学笔记--0.前言 一点唠叨的话 没有想到最后还是入了机器人学的坑,心情复杂. 借鉴某同学课设时写csdn blog整理自己所学知识的方法,我也将这周学习到的机器人学的知识记录整理下来 ...

  5. python 机械臂控制_机械臂正运动学-DH参数-Python快速实现

    机械臂正运动学-DH参数-Python快速实现 前言: 最近在玩一个非常弱智的机械臂,好多功能都没有,连个配套的仿真环境都没, 虚拟边界和碰撞检测的功能都非常难用. 没办法,我只能自己实现一个简陋的虚 ...

  6. Python知道cos值求角度_机械臂正运动学-DH参数-Python快速实现

    # 机械臂正运动学-DH参数-Python快速实现 @[toc] 前言: 最近在玩一个非常弱智的机械臂,好多功能都没有,连个配套的仿真环境都没, 虚拟边界和碰撞检测的功能都非常难用. 没办法,我只能 ...

  7. 【机器人】基于指数积的机械臂正运动学算法

    基于指数积的机械臂正运动学算法 1.前言 2.指数积公式建立过程 3.PoE实例 4.PoE与DH对比 1.前言 在学习了刚体运动的指数坐标表示和运动旋量后,我又对使用指数积法(PoE)对机械臂进行正 ...

  8. 机械臂正运动学-DH参数-Python快速实现

    机械臂正运动学-DH参数-Python快速实现 文章目录 机械臂正运动学-DH参数-Python快速实现 前言: 更新:是我自己憨批了,说明书上有现成的计算方式,我没细看... 整体思路流程: 学习资 ...

  9. 【机器人1】基于POE公式的UR5机械臂正运动学建模求解与matlab仿真

    基于PoE公式的UR5机械臂正运动学建模求解与matlab仿真 基于PoE公式的UR5机械臂正运动学分析 1.1 运动旋量的螺旋释义(理论基础) 1.2 基于PoE公式的UR5机械臂正运动学模型 1. ...

最新文章

  1. Java黑皮书课后题第7章:7.2(倒置输入的数)编写程序,读取10个整数,然后按照和读入顺序相反的顺序将它们显示出来
  2. openstack架构及组件特点
  3. oracle scn与数据恢复,[Oracle] SCN与数据恢复的关系
  4. 狗窝里的小日子- 6 ...
  5. 如果处理vim产生的swp文件 以及diff功能的使用
  6. Ubuntu18.04下WizNote为知笔记源码编译安装
  7. 遍历map集合常用的4种方式
  8. 国内装备制造业为什么需要项目管理
  9. Intel CPU平台和架构介绍
  10. Apollo Planning决策规划算法代码详细解析 (13): RuleBasedStopDecider
  11. 织梦屏蔽广告法极限词和敏感词插件【防职业举报者恶意投诉被工商部门天价罚款】
  12. php开发前端的框架有哪些,网站的一些前端框架有哪些?4个前端框架对比
  13. 原来路由器也属于消耗品
  14. 2021年甘肃省安全员C证报名考试及甘肃省安全员C证考试报名
  15. ORB_SLAM2源码阅读(三)相机定位
  16. 声网如何处理直播 SEI 相关问题?
  17. 40%带宽成本节约!京东云视频云正式支持AV1编码
  18. PHP中数字转为百分位,千分位,万分位。。。
  19. 手动挡停车时挂档有技巧
  20. 可视化人工智能区块链操作系统奥泰AOT在硅谷立项

热门文章

  1. Android app 功能代码覆盖率--Jacoco(一)
  2. 百度开放云爱数,共推混合云!
  3. BP神经网络实现手写数字识别Python实现,带GUI手写画板
  4. 服务器压力测试的几个指标
  5. 终于有人把OpenCV、人脸识别与深度学习讲明白了
  6. 互联网人员派驻的好处
  7. 如何使用ssh-keygen生成新的SSH key
  8. VS无ADO.NET实体数据模型?
  9. 凸优化笔记10(罚函数法-内点罚函数、外点罚函数)
  10. python中cos怎么表示_Python numpy.cos()用法及代码示例