为什么机器人运动学逆解最好采用双变量反正切函数atan2而不用反正/余弦函数? 您所在的位置:网站首页 反正切函数的四则运算 为什么机器人运动学逆解最好采用双变量反正切函数atan2而不用反正/余弦函数?

为什么机器人运动学逆解最好采用双变量反正切函数atan2而不用反正/余弦函数?

2024-07-13 07:24| 来源: 网络整理| 查看: 265

文章目录 一、采用 a t a n 2 ( y , x ) atan2(y,x) atan2(y,x)的三点优势二、采用 a t a n 2 ( y , x ) atan2(y,x) atan2(y,x)的两个坑三、参考文献/资料

一、采用 a t a n 2 ( y , x ) atan2(y,x) atan2(y,x)的三点优势

  机器人运动学逆解最好采用双变量反正切函数 a t a n 2 atan2 atan2而不用反正/余弦函数 a s i n asin asin和 a c o s acos acos的原因主要有:    1 1 1.反正弦函数 a s i n ( x ) asin(x) asin(x)的值域为 [ − π / 2 , π / 2 ] [-\pi/2,\pi/2] [−π/2,π/2],反余弦函数 a c o s ( x ) acos(x) acos(x)的值域为 [ 0 , π ] [0,\pi] [0,π],而双变量反正切函数 a t a n 2 ( y , x ) atan2(y,x) atan2(y,x)的值域为 [ − π , π ] [-\pi,\pi] [−π,π]。机器人关节角度范围一般在 [ − π , π ] [-\pi,\pi] [−π,π]之间,采用 a t a n 2 ( y , x ) atan2(y,x) atan2(y,x)更加方便、直接,避免了额外的角度范围判断。    2 2 2. a t a n 2 ( y , x ) atan2(y,x) atan2(y,x)相对于 a s i n ( x ) asin(x) asin(x)或 a c o s ( x ) acos(x) acos(x),对输入变量 x x x、 y y y具有更好的容错性。这里的容错性,主要是指由于计算精度的影响, x x x的实际计算值有可能稍微大于1或小于-1,这时 a s i n ( x ) asin(x) asin(x)或 a c o s ( x ) acos(x) acos(x)的值是未定义的,而 a t a n 2 ( y , x ) atan2(y,x) atan2(y,x)可以得到正确的结果。当然,我们也可以通过判断 x x x的值在计算误差范围内是否可以认为是-1或1,强制赋值为-1或1,从而解决这个问题。    3 3 3.对于函数 y = f ( x ) y=f(x) y=f(x), x x x的误差 Δ x \Delta x Δx引起 y y y的误差为 Δ y ≈ f ′ ( x ) Δ x \Delta y\approx f'(x)\Delta x Δy≈f′(x)Δx。   若 f ( x ) = a s i n ( x ) f(x)=asin(x) f(x)=asin(x),当 x ∈ ( − 1 , 1 ) x\in(-1,1) x∈(−1,1)时, f ′ ( x ) = 1 1 − x 2 ∈ [ 1 , + ∞ ) f'(x)=\frac{1}{\sqrt{1-x^2}}\in[1,+\infty) f′(x)=1−x2 ​1​∈[1,+∞)   若 f ( x ) = a c o s ( x ) f(x)=acos(x) f(x)=acos(x),当 x ∈ ( − 1 , 1 ) x\in(-1,1) x∈(−1,1)时, f ′ ( x ) = − 1 1 − x 2 ∈ ( − ∞ , − 1 ] f'(x)=\frac{-1}{\sqrt{1-x^2}}\in(-\infty,-1] f′(x)=1−x2 ​−1​∈(−∞,−1]   若 f ( x ) = a t a n ( x ) f(x)=atan(x) f(x)=atan(x),当 x ∈ ( − ∞ , + ∞ ) x\in(-\infty,+\infty) x∈(−∞,+∞)时, f ′ ( x ) = 1 x 2 + 1 ∈ ( 0 , 1 ] f'(x)=\frac{1}{x^2+1}\in(0,1] f′(x)=x2+11​∈(0,1]   由于实际机器人的臂长、零点、减速比等运动学参数有误差,使用 a s i n ( x ) asin(x) asin(x)或 a c o s ( x ) acos(x) acos(x)误差会放大,从保证逆解精度均匀性来看,在求解机器人运动学逆解时宜采用 a t a n 2 ( y , x ) atan2(y,x) atan2(y,x)。 atan2(y,x)

二、采用 a t a n 2 ( y , x ) atan2(y,x) atan2(y,x)的两个坑

  1.当 x = 0 x=0 x=0且 y = 0 y=0 y=0时,无定义( 在matlab、lua、vs上测试过,atan2(0,0)=0,其他编译环境可能结果不一样 )。在编写程序时,如果 x x x与 y y y有同时为0,则一定要做异常处理。

if (fabs(x - 0.0)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有