牛顿迭代法求解工业机械人运动学逆解(改进DH模型),Using Newton's Method to compute industrial robots inverse solution

本文深入探讨了牛顿迭代法在解决工业机械人运动学逆解问题中的应用,包括一元和多元函数的迭代公式,以及如何通过Python程序实现迭代求解,特别针对一个4R机械手的实例进行详细分析。
前言

求解求解工业机械人运动学逆解有几何法,解析法,迭代法,最近恰好学了数值分析地牛顿迭代法,机器人学老师又恰好布置了一个求解逆解的题,便用上了。

牛顿迭代法(Newton’s Method)
一元函数

根据泰勒公式,我们有 f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + O ( x − x 0 ) 2 f(x)=f(x0)+f'(x0)(x-x0)+O(x-x0)^2 f(x)=f(x0)+f(x0)(xx0)+O(xx0)2

忽略二次项,得到 f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x)=f(x0)+f'(x0)(x-x0) f(x)=f(x0)+f(x0)(xx0)
从而得到求解公式: x = x 0 + x=x0+ x=x0+ f ( x ) − f ( x 0 ) f ′ ( x 0 ) \frac{f(x)-f(x0)}{f'(x0)} f(x0)f(x)f(x0)

从而得到迭代公式: X n = X n − 1 + X_n=X_{n-1}+ Xn=Xn1+ f ( X n ) − f ( X n − 1 ) f ′ ( X n − 1 ) \frac{f(X_n)-f(X_{n-1)}}{f'(X_{n-1})} f(Xn1)f(Xn)f(Xn1)

eg:求解 2 = x 2 + s i n ( x ) 2=x^2+sin(x) 2=x2+sin(x)的一个解
有: f ( x ) = x 2 + s i n ( x ) − 2 f(x)=x^2+sin(x)-2 f(x)=x2+sin(x)2
有: f ′ ( x ) = 2 x + c o s ( x ) f'(x)=2x+cos(x) f(x)=2x+cos(x)
得到迭代公式: X n = X n − 1 − X_n=X_{n-1}- Xn=Xn1 x n − 1 2 + s i n ( X n − 1 ) − 2 2 X n − 1 + c o s ( X n − 1 ) \frac{x_{n-1}^2+sin(X_{n-1})-2}{2X_{n-1}+cos(X_{n-1})} 2Xn1+cos(Xn1)xn12+sin(Xn1)2
取迭代初值为5,则有迭代值表:

Times Error value
1 6.441741912821939 2.8566900265847246
2 1.2523689832054252 1.5015868288822545
3 0.08519497331557391 1.0939581456934517
4 0.000578368794295514 1.0617713087284162
5 2.7647929723428888e-08 1.0615497852219482
6 0.0 1.0615497746313838

可见迭代到第6次的时候,误差已经小于计算机的最大精度,则可以得到解 x = 1.0615497746313838 x= 1.0615497746313838 x=1.0615497746313838

所以对于一元函数的迭代法:
1.给出迭代公式: X n = X n − 1 − X_n=X_{n-1}- Xn=Xn1 f ( X n − 1 ) f ′ ( X n − 1 ) \frac{f(X_{n-1)}}{f'(X_{n-1})} f(Xn1)f(Xn1)
2.给出初值 X 0 X_0 X0
关于一元函数牛顿迭代法的收敛性等知识,参见:Web

多元向量函数

类似于一元函数,多元函数的求解的迭代公式也是:
X n = X n − 1 − f ( X n − 1 ) ∗ f ′ ( X n − 1 ) − 1 X_n=X_{n-1}-f(X_{n-1})*{f'(X_{n-1})}^{-1} Xn=Xn1f(Xn1)f(Xn1)1
只是这里面的因变量 X X X是一个m维的列向量
而对于多元向量函数的求导,可以得到一个jacobi矩阵 f ′ ( X n − 1 ) {f'(X_{n-1})} f(Xn1)
之后求逆得到 f ′ ( X n − 1 ) − 1 {f'(X_{n-1})}^{-1} f(Xn1)1

例如:对于 F ( u , v , w ) = ( f 1 , f 2 , f 3 ) F (u,v,w) = (f_1, f_2, f_3) F(u,v,w)=(f1,f2,f3)
其导数为:
{ ∂ f 1 / ∂ u ∂ f 1 / ∂ v ∂ f 1 / ∂ w   ∂ f 2 / ∂ u ∂ f 2 / ∂ v ∂ f 2 / ∂ w ∂ f 3 / ∂ u ∂ f 3 / ∂ v ∂ f 3 / ∂ w } \begin{Bmatrix}∂f_1/∂u & ∂f_1/∂v & ∂f_1/∂w\\\ ∂f_2/∂u & ∂f_2/∂v & ∂f_2/∂w \\ ∂f_3/∂u & ∂f_3/∂v & ∂f_3/∂w\end{Bmatrix} f1/u f2/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值