首页 > 其他分享 >二维逆运动学 – 数学

二维逆运动学 – 数学

时间:2024-03-15 10:37:02浏览次数:30  
标签:可以 运动学 余弦 二维 数学 三角形 机械 我们

如果您已经关注此博客一段时间,您可能已经注意到一些反复出现的主题。逆向运动学绝对是其中之一,我已经专门写了一整套关于如何将其应用于机械臂触手的系列文章。如果您还没有读过它们,请不要担心:这个新系列将是独立的,因为它从一个新的角度回顾了逆运动学的问题。

您可以在此处阅读此在线课程的其余部分:

此外,还提供以 3D 为重点的后续产品:

介绍

我们习惯于与周围的世界互动,因此很容易低估移动我们的手和手臂到底有多复杂。在学术文献中,控制机械臂的任务被称为逆运动学。运动学代表运动而反向是指我们通常不控制手臂本身的事实。我们控制的是旋转每个关节的电机。反向运动学是决定如何驱动这些电机将手臂移动到某个位置的任务。就其一般形式而言,这是一项极具挑战性的任务。为了感受它的挑战性,您可以考虑 QWOPGIRP 甚至 Lunar Lander 等游戏,在这些游戏中,您不决定去哪里,而是决定激活哪些肌肉(或推进器)。

控制移动执行器的任务甚至早于机器人领域。几个世纪以来,数学家和工程师一直在开发无数的解决方案,这并不奇怪。大多数 3D 建模软件和游戏引擎(包括 Unity)都带有一组工具,可以绑定类人和类狗的生物。对于所有不同的设置(如机械臂、尾巴、触手、翅膀等),通常不提供内置解决方案。

这就是为什么在之前关于程序动画和逆向运动学的系列中,我介绍了一个非常通用且有效的解决方案,它可能适用于任何设置。但这种力量是有代价的:效率。该系列受到的主要批评之一是,它太耗时且昂贵,无法同时用于数百个角色。这就是为什么我决定开始一个新系列,专门研究具有两个自由度的手臂的反向运动学。您将在本教程中发现的技术非常高效,并且可以同时在数十个(如果不是数百个)字符上运行。

逆向运动学

让我们想象一个有两个节段和两个关节的机械臂,如下图所示。在手臂的末端,有我们想要控制的末端执行器。我们无法直接控制末端执行器的位置;我们只能旋转关节。逆运动学的问题是找到旋转关节以将末端执行器移动到所需位置的最佳方法。

这个新系列中提出的解决方案仅适用于具有两个关节的机械臂。在学术文献中经常说,这些机械臂有两个自由度。通过查看下图,其原因将非常清楚。具有两个自由度的机械臂可以建模为三角形,这是几何学中研究最多的几何图形之一。

让我们先把问题形式化一点。两个关节 一个 B 和(均为黑色)可以分别旋转一个(蓝色)和B(绿色)度。这会导致末端执行器移动到一个位置C

内角

我们可以使用这三个点一个BC构造一个具有内角的三角形\阿尔法\试用版\伽马,如下图所示。

虽然这三个角度是未知的,但我们知道所有边的长度。

  • 该段\overline{AB}表示手臂并具有长度c;
  • 该段\overline{BC}代表前臂,长度一个;
  • 该段\overline{CA}表示肩关节和手之间的距离,并具有长度b

知道三角形的三个边就足以找到它的所有角度。这要归功于余弦定律,这是毕达哥拉定理对不一定成直角的三角形的推广。

控制机械臂所需的两个角度是 \阿尔法 和 \试用版。让我们从 \阿尔法开始,它可以使用余弦定律计算:\阿尔法

(1) \begin{方程*} a^2 = b^2 + c^2 - 2 bc \cos{\alpha} \end{方程*}

我们可以参考(1)来提取\cos\alpha

  \[ \begin{split} \cos{\alpha} & =\frac{a^2-b^2-c^2}{-2bc} = \\ & =\boxed{\frac{b^2+c^2-a^2}{2bc}} \end{split} \]

现在需要的是使用反余弦函数\cos^{-1}(也称为弧线)来找到\阿尔法

(2) \begin{equation*} \alpha = \cos^{-1}{\left(\boxed{\frac{b^2+c^2-a^2}{2bc}}\right)} \end{equation*}

用同样的程序,我们可以再次应用余弦定律来发现\试用版

  \[b^2 = a^2 + c^2 - 2ac \cos{\beta}\]

  \[\cos{\beta}=\frac{a^2 + c^2 -b^2}{2ac}\]

(3) \begin{equation*} \beta=\cos^{-1}{\left(\frac{a^2 + c^2 -b^2}{2ac}\right)} \end{equation*}

❓给我看看余弦定律的推导!

该段h将三角形\overset{\triangle}{ABC}分为两个直角三角形:\overset{\triangle}{ABH}和 \overset{\triangle}{BCH}。这个证明是将毕达哥拉定理应用于两个三角形的自然结果:

(4) \begin{equation*} \begin{split} \overset{\triangle}{ABH}: & \\ & c^2 = h^2 + \left(b-d\right)^2 \\ & h^2 = \boxed{ c^2 - \left(b-d\right)^2} \end{split} \end{equation*}

(5) \begin{equation*} \begin{split} \overset{\triangle}{BCH}: & \\ & a^2 = d^2 + h^2 \\ & h^2 = \boxed{a^2 -d^2} \end{split} \end{equation*}

4) 和 (5) 现在都用 表示。h^2我们可以将它们等同于获得:

  \[ \begin{split} \boxed{a^2 -d^2} & = \boxed{c^2 - \left(b-d\right)^2} \\ a^2 - d^2 &= c^2 - \left(b^2 + d^2 - 2 bd\right) \\ a^2 - d^2 & = c^2 - b^2 - d^2 + 2 bd \\ a^2 \xcancel{- d^2} & = c^2 - b^2 \xcancel{- d^2} + 2 bd\\ a^2 & = c^2 - b^2 + 2 bd \\ \end{split} \]

可以重新命名为:

(6) \begin{equation*}  c^2=a^2+b^2-2bd \end{equation*}

等式(6)是余弦定律在欧几里得的命题12中从《元素》第2卷中转录的方式。

为了得到方程的现代形式,我们需要应用一些三角学。由于(5)是直角三角形,我们可以将线段d表示为:

(7) \begin{equation*}  d = a \sin{\delta} \end{equation*}

通过记住三角形的角总和180^{\circ}为(或等效的\pi弧度)可以找到:\delta

(8) \begin{方程*} \begin{align} \delta + \gamma + \frac{\pi}{2} = \pi \\ \delta = \pi - \frac{\pi}{2} - \gamma \\ \delta = \frac{\pi}{2} - \gamma \end{align} \end{方程*}

\delta代入(7),我们得到:

(9) \begin{equation*} \begin{split} d & = a \sin{\delta}\\ d & = a \boxed{\sin{\left(\frac{\pi}{2} - \gamma\right)}}\\ d & = a \boxed{\cos{\gamma}} \end{split} \end{equation*}

最后一步是众所周知的协同功能恒等式的结果,该恒等式指出:

  \[ \sin\left(\frac{\pi}{2} - \gamma\right) = \cos{\gamma} \]

我们现在可以使用(9)来代替d6),这给了我们余弦定律的现代形式:

(10) \begin{equation*}  \begin{split} c^2&=a^2+b^2-2b\boxed{d} \\ c^2&=a^2+b^2-2b \boxed{a \cos{\gamma}} \\ c^2&=a^2+b^2-2ab \cos{\gamma} \end{split} \end{equation*}

关节角度

使用余弦定律,我们计算了 \阿尔法 和 \试用版的值,它们是机械臂创建的三角形的内角。但是,我们真正需要的角度是一个(蓝色)和B(绿色)。

 

让我们从计算开始B,这更容易。从上图可以明显看出,\试用版B和为180^{\circ}(等于\圆周率弧度)。这意味着:

(11) \begin{equation*}  \begin{split} \beta + B = \pi \\ B = \pi - \beta \end{split} \end{equation*}

计算一个没有太大区别。这里唯一的区别是我们需要考虑A'(紫色),这是段\overline{AC}的角度。这可以使用 arcotangent 函数\tan^{-1}计算:

(12) \begin{equation*} A' = \tan^{-1}{\left(\frac{C_Y-A_Y}{C_X-A_X}\right)} \end{equation*}

这导致:

(13) \begin{方程*} A = \alpha + A' \end{方程*}

角度的符号一个A'并且大多B是任意的,取决于每个关节的运动方式。

❓多种解决方案?

逆运动学问题通常有几种解。即使在这种情况下只有两个自由度,我们也有两个不同的解决方案。

 

虽然角度A确实B不同,但推导基本保持不变,唯一的例外是 (13) 和 (11)。

下一步...

这篇文章结束了对具有两个自由度的机械臂的逆运动学数学的介绍。

下一篇文章将探讨如何使用推导的方程在Unity中有效地移动机械臂。

您可以在此处阅读此在线课程的其余部分:

此外,还提供以 3D 为重点的后续产品:

本教程中介绍的线条艺术动物的灵感来自WithOneLine的作品。

下载

您可以下载本教程中使用的所有资源,以便为 Unity 提供功能齐全的机械臂。

特征 标准 奖赏
逆向运动学 ✅ ✅
多种解决方案 ❌ ✅
平滑到达 ❌ ✅
测试场景 ❌ ✅
测试动画 ❌ ✅
下载 标准 奖赏

标签:可以,运动学,余弦,二维,数学,三角形,机械,我们
From: https://www.cnblogs.com/soliang/p/18074863

相关文章

  • 组合数学相关恒(不)等式
    \(\texttt{First}\):组合数本身相关性质\[C_n^{m}=C_{n}^{n-m}\]\[C_n^m=\dfrac{n}{m}\timesC_{n-1}^{m-1}\]\[C_{n}^m=C_{n-1}^{m}+C_{n-1}^{m-1}\]杨辉三角。\[C_{n}^{m}=\dfrac{n-m+1}{m}\timesC_{n}^{m-1}\]展开即得,可以作为\(n\)确定,\(m\)不定的递推式......
  • LeetCodeHot100 73. 矩阵置零 54. 螺旋矩阵 48. 旋转图像 240. 搜索二维矩阵 II
    73.矩阵置零https://leetcode.cn/problems/set-matrix-zeroes/description/?envType=study-plan-v2&envId=top-100-likedpublicvoidsetZeroes(int[][]matrix){inttop=0,bottom=matrix.length,left=0,right=matrix[0].length;int[][]flag......
  • 疯了‼️ 3校公布24复试线!数学单科线140!
    感觉这个世界要疯了?!!总分分数线420!数学单科线140!!在24英语数学难上热搜之后,又迎来了国家线普涨,复试线新高。国家线公布后,清华大学、北京大学、中山大学率先公布了24考研的学校基本复试线。清华应统分数线420,数学单科线140.这个世界疯了?!!数三的24卷虽然不像数一那么冷门......
  • 2024最新华为OD机试试题库全 -【提取字符串中最长合法简单数学表达式】- C卷
    1.......
  • 清风数学建模论文写作方法学习笔记
    标题对论文题目的要求是:简短精炼、高度概括、准确得体、恰如其分。既要准确表达论文内容,恰当反映所研究的范围和深度;又要尽可能概括、精炼,力求题目的字数少。论文题目的字数一般不要超过20个字。不过,当希望题目字数少与恰当反映论文内容两者发生矛盾时,宁可多用几个字也要力......
  • 封装动态生成二维码组件
    1.封装一个根据内容动态生成二维码的组件2.效果图如下3.实现方式有多种展示两种 使用QRCode插件使用vue-qr插件4.组件API 1.logoSrc设置二维码中心logo 4.组件API5.组件代码 QRCode<template><divclass="count-to-wrapper"><divref="canvas......
  • 数学分析复习:数列和级数收敛
    数学分析复习:数列和级数收敛1.实数列收敛的定义2.实数项级数收敛的定义3.单调有界实数列必收敛4.Bolzano-Weierstrass定理5.Cauchy列5.1Cauchy列的性质5.2实数列的Cauchy收敛准则5.3实数项级数的Cauchy收敛准则6.Euler常数e的构造7.判断实数列和实数项级数收......
  • 《算法竞赛入门经典 第2版》 数学题目集
    例题10-1巨大的斐波那契数!(ColossalFibonacciNumbers!,UVa11582)巨大的斐波那契数!ColossalFibonacciNumbers!-洛谷例题10-2不爽的裁判(DisgruntledJudge,NWERC2008,UVa12169)不爽的裁判DisgruntledJudge-洛谷NOI数学学习相关书籍及视频等资料(不包......
  • Python数学建模-2.2Python基本数据类型
    各位小伙伴大家好,今天开始学习司守奎老师的《数学建模算法与应用》啦,我也会边学习边与大家分享书中的内容,希望与大家共同进步哦Python中的基本数据类型主要包括以下几种:数字(Numbers)整型(int):正或负整数,没有限制大小。例如:100,-8080,0。浮点型(float):浮点数,即带有小数点的数字。......
  • 二维树状数组
    二维树状数组模板单点修改,子矩阵查询暴力的把一维拓展到二维,直接然后按照一维的方法搞就OK,参考代码:voidinsert(intx,inty,intz){for(inti=x;i<=n;i+=lowbit(i))for(intj=y;j<=m;j+=lowbit(j))d[i][j]+=z;}intgetsum(intx,inty){intsum=0;for(......