前言:对于一个开链机器人而言,末端执行器的位置和姿态可以通过关节角唯一确定出来。正运动学的问题就是当给定各关节位置,求出附着在末端执行器上的物体坐标系的位姿。
描述正运动学的方法主要是DH参数法,它是在每个关节上建立坐标系,通过坐标系的平移旋转,即矩阵的乘积来求得相对于基坐标系的末端位姿。
指数积(Product of Exponential,POE)的方法近些年才开始流行,成为新颖的建模方法。POE公式直接来自刚体运动的指数坐标表示,它无须建立连杆坐标系,只有基坐标系和末端坐标系是必需的,且它们可以任意选择。

注:以下专业名词的含义及相关公式可参考我的另一篇博客:
现代机器人学名词概念


一.指数积公式

1.1 第一种表达形式:相对基坐标系的螺旋轴

空间刚体位移Chasles-Mozzi定理:任何刚体运动都可通过绕空间某一固定螺旋轴SSS的运动来实现。
隐藏在POE公式背后的关键是:将每个关节的螺旋运动施加给后面的杆。为应用POE公式,首先需选择基坐标系{s}\left\{ s \right\}{s}和末端坐标系{b}\left\{ b \right\}{b},并将机器人置于初始位置(或零位,即所有关节变量初值为0),每个关节正向位移的方向指定。令M∈SE(3)M\in SE\left( 3 \right)M∈SE(3)表示末端坐标系相对于基坐标系的初始位形(机器人处于初始位置时)。
假定关节n对应的关节变量为θn\theta _nθn​,末端坐标系M的位移可写成T(θ)=e[Sn]θnMT\left( \theta \right) =e^{\left[ S_n \right] \theta _n}M T(θ)=e[Sn​]θn​M
式中,T∈SE(3)T\in SE\left( 3 \right)T∈SE(3)为末端的新位形,Sn=(ωn,νn)S_n=\left( \omega _n,\nu _n \right)Sn​=(ωn​,νn​)为表示在基坐标系中的关节n的旋量坐标,wn∈R3w_n\in R^3wn​∈R3是沿关节轴正向的单位向量,vn=−wn×qnv_n=-w_n\times q_nvn​=−wn​×qn​,qnq_nqn​为关节轴上任一点,坐标值在基坐标系中进行度量。
若我们假设关节n-1也发生变化,则在以上的位移上再乘以矩阵指数e[Sn−1]θn−1e^{\left[ S_{n-1} \right] \theta _{n-1}}e[Sn−1​]θn−1​,按此推理,当所有的关节变量(θ1,⋯,θn)\left( \theta _1,\cdots ,\theta _n \right)(θ1​,⋯,θn​)都发生变化时,应满足

T(θ)=e[S1]θ1⋯e[Sn−1]θn−1e[Sn]θnMT\left( \theta \right) =e^{\left[ S_1 \right] \theta _1}\cdots e^{\left[ S_{n-1} \right] \theta _{n-1}}e^{\left[ S_n \right] \theta _n}M T(θ)=e[S1​]θ1​⋯e[Sn−1​]θn−1​e[Sn​]θn​M
上述方程就是对于n自由度开链机器人正向机器人正向运动学的指数积公式。其中的所有螺旋轴都是基于基坐标系的表示。

计算步骤:
一.当机器人处于初始位置时,末端位形M∈SE(3)M\in SE\left( 3 \right)M∈SE(3);

二.当机器人处于初始位置时,相对基坐标系的螺旋轴S1,⋯SnS_1,\cdots S_nS1​,⋯Sn​,对应各个关节的螺旋运动;

三.关节变量(θ1,⋯,θn)\left( \theta _1,\cdots ,\theta _n \right)(θ1​,⋯,θn​)。

1.2 第二种表达形式:相对末端坐标系的螺旋轴

T(θ)=Me[β1]θ1⋯e[βn−1]θn−1e[βn]θnT\left( \theta \right) =Me^{\left[ \beta _1 \right] \theta _1}\cdots e^{\left[ \beta _{n-1} \right] \theta _{n-1}}e^{\left[ \beta _n \right] \theta _n} T(θ)=Me[β1​]θ1​⋯e[βn−1​]θn−1​e[βn​]θn​
上式是指数积公式的另一种表达形式,其中的关节角表示成机器人处于零位时各螺旋轴相对于末端坐标系(物体坐标系)的旋量坐标 βi\beta _iβi​ ,它也被称为指数积公式的物体坐标系表示形式。其中[βi]=[AdM−1]Si,i=1,⋯,n\left[ \beta _i \right] =\left[ Ad_{M^{-1}} \right] S_i,i=1,\cdots ,n [βi​]=[AdM−1​]Si​,i=1,⋯,n

算例:对于6R开链机器人的正向运动学

第一步:当机器人位于初始位形时,建立基坐标系{s}\left\{ s \right\}{s}和末端坐标系{b}\left\{ b \right\}{b},旋转轴作为zzz轴,坐标系的建立满足右手定则,此时可以得到末端位姿矩阵M=[RP01]∈SE(3)M=\left[ \begin{matrix} R& P\\ 0& 1\\ \end{matrix} \right] \in SE\left( 3 \right) M=[R0​P1​]∈SE(3)式中,R为末端坐标系相对于基坐标系的姿态变化,P为末端坐标系原点在基坐标系中的位移表示。
末端坐标系姿态任意选择,这里使基坐标系和末端坐标系姿态相同,即M=[100−0.0261010−1.1863001−0.65400001]M=\left[ \begin{matrix} 1& 0& 0& -0.0261\\ 0& 1& 0& -1.1863\\ 0& 0& 1& -0.6540\\ 0& 0& 0& 1\\ \end{matrix} \right] M=⎣⎢⎢⎡​1000​0100​0010​−0.0261−1.1863−0.65401​⎦⎥⎥⎤​
第二步:建立每个关节的螺旋轴,同样的,旋转轴作为zzz轴,此时可写出每个螺旋轴相对于基坐标系的单位向量w^\hat{w}w^。
这里选择[w1⋯w6]=[0000−1−1100−100010001]\left[ w_1\cdots w_6 \right] =\left[ \begin{matrix} 0& 0& 0\\ 0& -1& -1\\ 1& 0& 0\\ \end{matrix}\begin{matrix} -1& 0& 0\\ 0& 1& 0\\ 0& 0& 1\\ \end{matrix} \right] [w1​⋯w6​]=⎣⎡​001​0−10​0−10​−100​010​001​⎦⎤​

第三步:选择六个关节轴上的任一点 q1⋯q6q_1\cdots q_6q1​⋯q6​,为方便计算,我们将这些点选为螺旋轴与连杆的重合点,即将六个关节上的点分别作为 q1⋯q6q_1\cdots q_6q1​⋯q6​。
这里选择[q1⋯q6]=[0−0.1573−0.203700.0653−0.548300−0.0165−0.1518−0.1081−0.0261−0.7154−0.6714−1.1863−0.3140−0.6685−0.6540]\left[ q_1\cdots q_6 \right] =\left[ \begin{matrix} 0& -0.1573& -0.2037\\ 0& 0.0653& -0.5483\\ 0& 0& -0.0165\\ \end{matrix}\,\, \begin{matrix} -0.1518& -0.1081& -0.0261\\ -0.7154& -0.6714& -1.1863\\ -0.3140& -0.6685& -0.6540\\ \end{matrix} \right] [q1​⋯q6​]=⎣⎡​000​−0.15730.06530​−0.2037−0.5483−0.0165​−0.1518−0.7154−0.3140​−0.1081−0.6714−0.6685​−0.0261−1.1863−0.6540​⎦⎤​

再根据公式vn=−wn×qnv_n=-w_n\times q_nvn​=−wn​×qn​,即可计算得到六个线速度vnv_nvn​。
第四步:有了以上的数据,再根据指数坐标公式运算得到矩阵指数 e[S]θe^{\left[ S \right] \theta}e[S]θ,详细公式可参考我的文前的链接文章。到此即可得到指数积公式T(θ)=e[S1]θ1⋯e[Sn−1]θn−1e[Sn]θnMT\left( \theta \right) =e^{\left[ S_1 \right] \theta _1}\cdots e^{\left[ S_{n-1} \right] \theta _{n-1}}e^{\left[ S_n \right] \theta _n}M T(θ)=e[S1​]θ1​⋯e[Sn−1​]θn−1​e[Sn​]θn​M

最后说明一点:这里的关节角是指机器人从初始位置实际转动的角度,而不是机器人此刻的角度,因为对于一些工业机器人而言有的初始关节角是90°。

个人对POE指数积建模与DH参数法的理解:POE指数积建模需要扎实的数学几何知识,它的建模过程相比DH参数法要简单一些,因为它不必考虑首尾之间的坐标系应该怎么建立,而是确定螺旋轴方向和确定螺旋轴上的一点位置即可。它们之间的联系是指数积方法在确定螺旋轴方向的同时隐含了对连杆转角的确定,确定螺旋轴上的一点时隐含了对连杆长度的确定,总的来说,大同小异,但指数积方法更新颖,更灵活。

【现代机器人学】基于指数积的机械臂正运动学相关推荐

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

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

  2. 【现代机器人学】基于指数积的机械臂逆运动学

    0 引言    基于指数积的正运动学    现代机器人学名词概念   有了以上的基础,我们现在利用指数积来对机器人的逆运动学进行求解,有一点需要注意,需要先对机器人进行指数积的正运动学建模,然后才能利 ...

  3. 【机器人】基于指数积的机械臂运动学标定

    基于局部POE的机器人运动学标定 导语:定位精度作为影响机器人性能的重要因素,需要对机器人进行标定来提高机器人的定位精度从而满足工业上的需要. Question: 什么是机器人标定?为什么机器人需要标 ...

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

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

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

    中正平和的机器人学笔记--1.正运动学 0. 何为运动学?何为正运动学? 运动学主要研究的就是机械臂的运动特性(位置.速度.加速度等),但是不考虑使机械臂产生运动时施加的力和力矩(这部分是动力学).而 ...

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

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

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

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

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

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

  9. 机械臂正运动学(1)——MDH下的正解(自编)

    %% 该函数执行 MDH参数下正运动学求解功能 function [result] = myfkine_MDH(q,a,alpha,d,offset) % q为输入的关节转角,a为杆件长度,alpha ...

最新文章

  1. Halcon —— pick_and_place_scara_stationary_cam.hdev
  2. ASP.NET中 DropDownList+DetailsView(详细视图)的使用前台绑定
  3. .NET Core 中如何在运行中加载 Controller ?
  4. android属性动画作用范围,Android开发之动画效果浅析(一)
  5. 容器技术之Dockerk8s知识笔记
  6. Xposed从入门到弃坑:0x03、XposedHelpers类解析
  7. php如何写代码禁用广告,不再显示广告案例(php操作cookie)
  8. NPM酷库:cheerio,服务端jQuery接口实现
  9. CVPR2022 | 在线Re-Param | OREPA让AI训练速度进一步加快,精度略胜RepVGG!
  10. c语言中函数指针用法,C语言函数指针的用法
  11. 分析称Twitter存五大盈利模式 将于4月中旬公布
  12. c语言更正错误,c语言出错invalid operands to binary %
  13. 支付宝开发平台之第三方授权登录与获取用户信息
  14. 1208:2的幂次方表示
  15. 手机游戏服务器使用UDP还是TCP
  16. DiskPart 常用操作【Windows】
  17. 计算机网络(各章节精华版)
  18. 遇到的一些不错的Java极客程序
  19. maven项目中,使用pom文件引入自定义jar包
  20. 基于QT的界面框架qcanpool使用教程(废弃)

热门文章

  1. web开发中的JAVA字符转码
  2. 《Ray Tracing in One Weekend》——Chapter 7: Diffuse materials
  3. 大数据电商数仓分析项目
  4. 459.重复子字符串
  5. 大数据分析入门小技巧
  6. 企业如何选择一个合适的可视化工具
  7. 队列的基本概念介绍以及典型应用示例
  8. pytorch实现attention_Self-Attention手动推导及实现
  9. 通俗易懂的MonteCarlo积分方法(七)
  10. 什么是java socket_java 网络编程,Socket编程