精华内容
下载资源
问答
  • 计算VaR的两种常用方法:参数法(正态VaR和对数正态VaR)和非参数法(历史模拟),主要使用的函数是scipy.stats的求特定分布分位点的函数ppf,以及np.percentile求样本中的分位数。

    参数法

      正态VaR:假设资产组合的收益率服从正态分布,那么VaR也服从正态分布,VaR=-(μ-Z·σ)×P0,算出来的是loss,如果为负则为收益。μ为资产组合的期望收益率,用往年平均收益率替代;σ为组合收益率的波动率;Z=Φ-1( c )为正态分布的分位数(取正数);P0为组合的价值。证明如下:在这里插入图片描述
      对数正态VaR:假设资产组合的对数收益率服从正态分布,那么VaR服从对数正态分布,VaR=(1-eμ-Z·σ)×P0。可简单证明如下:受到冲击后的价格P=P0(eR),VaR=|P0-P|=|P0(1-eR)|,对数收益率R=ln(P/P0)服从正态分布,那么在此置信水平下的极端收益率为μ-z·σ,代入到R中即得VaR公式。

      注意如果要求%VaR,那么公式中就不用乘P。对数正态VaR的值会比正态VaR要小。

      假定某一投资组合在2018年12月28日(最后一个交易日)的投资组合市值为1亿元,组合中配置的5种金融资产配置为:贵州茅台股票15%,交通银行股票20%,嘉实增强信用基金50%,华夏恒生ETF基金5%,博时标普500ETF基金10%。管理层要求计算持有期分别为1天和10天、置信水平为99%情况下的VaR,同时假定整个投资组合收益率是服从正态分布或对数正态分布。

    data=pd.read_excel('C:/Users/lenovo/Desktop/投资组合.xlsx',index_col=0)
    data
    Out[7]: 
                贵州茅台  交通银行  嘉实增强信用基金  华夏恒生ETF  博时标普500ETF
    日期                                                     
    2015-01-05  202.52  7.05     1.071   1.0955      1.1205
    2015-01-06  197.83  6.90     1.073   1.0860      1.1105
    2015-01-07  192.94  6.76     1.074   1.0964      1.1239
    2015-01-08  191.76  6.53     1.074   1.1042      1.1446
    2015-01-09  190.31  6.50     1.075   1.1075      1.1346
               ...   ...       ...      ...         ...
    2018-12-24  568.00  5.61     1.285   1.4505      1.5116
    2018-12-25  565.79  5.63     1.286   1.4488      1.5116
    2018-12-26  560.08  5.68     1.286   1.4475      1.5814
    2018-12-27  563.00  5.72     1.286   1.4393      1.5963
    2018-12-28  590.01  5.79     1.287   1.4358      1.5885
    R=np.log(data/data.shift(1)).dropna()
    w=np.array([0.15,0.2,0.5,0.05,0.1])
    Rmean=R.mean();Rcov=R.cov()
    Rp=np.sum(R.mean()*w)
    volp=np.sqrt(w@Rcov@w.T)
    print('投资组合的μ={:.6f},σ={:.6f}'.format(Rp,volp))
    投资组合的μ=0.000268,σ=0.006427
    def VaR_norm(miu,sigma,x,P,n):#n参数为持有期,x为置信水平
    	import scipy.stats as st
    	z=abs(st.norm.ppf(q=1-x))#标准正态分布中1-x的概率对应的分位点
    	return -(miu-z*sigma)*P*np.sqrt(n)
    def VaR_lognorm(miu,sigma,x,P,n):
    	import scipy.stats as st
    	z=abs(st.norm.ppf(q=1-x))
    	return (1-np.exp(miu-z*sigma))*P*np.sqrt(n)
    print('99%置信水平下1天的normal VaR为{:.2f},lognormal VaR为{:.2f}'.format(\
    VaR_norm(Rp,volp,0.99,1e8,1),VaR_lognorm(Rp,volp,0.99,1e8,1)))
    99%置信水平下1天的normal VaR为1468366.22,lognormal VaR为1457638.30
    print('99%置信水平下10天的normal VaR为{:.2f},lognormal VaR为{:.2f}'.format(\
    VaR_norm(Rp,volp,0.99,1e8,10),VaR_lognorm(Rp,volp,0.99,1e8,10)))
    99%置信水平下10天的normal VaR为4643381.70,lognormal VaR为4609457.03
    

      以第二个结果为例,在99%的置信水平、持有期为10天的情况下,VaR达到了464.34万元,意味着从理论上来说未来的10个交易日内,有99%的把握认为1亿元的投资组合累计最大亏损不会超过464.34万元。

    非参数法(历史模拟法)

      历史模拟法的思路是将所有样本的收益率或收益额进行排序,根据置信水平找出对应分位数的值(数值小的一端),再取绝对值就是VaR。依然以上述案例为例,用历史模拟法计算持有期分别为1天和10天、置信水平为99%情况下的VaR。

      step1:生成投资组合的日收益序列:

    rp=pd.Series((1e8*R)@w,index=R.index)#投资组合的日收益额
    import matplotlib.pyplot as plt
    from pylab import mpl
    mpl.rcParams['font.sans-serif']=['SimHei']
    mpl.rcParams['axes.unicode_minus']=False
    plt.hist(rp,bins=40,edgecolor='k')
    plt.xlabel('投资组合日收益额')
    plt.ylabel('频数')
    plt.title('投资组合日收益额直方图')
    plt.grid()
    

    在这里插入图片描述
      step2:对投资组合的日收益额序列进行正态性检验,计算投资组合的VaR:

    st.normaltest(rp)
    Out[15]: NormaltestResult(statistic=192.37738470012968, pvalue=1.681828434884396e-42)
    #显然p<0.01,拒绝服从正态分布的原假设,因此用参数法计算VaR可能会产生偏差
    def VaR_daily(a,x):
    	#求a数列第(1-x)%分位的数值的绝对值,默认升序排序
    	return abs(np.percentile(a,(1-x)*100))
    print('99%置信水平下1天的VaR为{:.2f},10天的VaR为{:.2f}'.format(\
    VaR_daily(rp,0.99),VaR_daily(rp,0.99)*np.sqrt(10)))
    
    99%置信水平下1天的VaR为2135730.95,10天的VaR为6753774.29
    

      在99%的置信水平下历史模拟法计算出的10天VaR=675.38万元>正态VaR=464.34万元,可见在本案例中历史模拟法具有对尾部极端风险更强的捕捉能力。

      还有一种改进的参数法叫非参数密度估计(Non-parametric Density Estimation),将损失额直方图的每一根立柱的顶部中点进行连线,那么在线下的区域就可以当做该分布的概率密度函数,这样我们就能根据求出任意置信水平下的VaR,可以解决传统历史模拟法下n个样本最多只能有n个置信水平的问题。
    在这里插入图片描述

    展开全文
  • 机械臂D-H参数法分析

    万次阅读 多人点赞 2019-01-03 23:50:50
    文章目录前言连杆D-H参数法介绍坐标变换矩阵方法总结 前言 笔者在看D-H参数法的时候对此方法的适用性产生了好奇,并对手边的一只五自由度旋转舵机机械手进行了坐标系的建模。为了方便理解画了一个示意图,图省事...

    前言

    笔者在看D-H参数法的时候对此方法的适用性产生了好奇,通过个人构思推导得出传统D-H参数表有时不适用的原因,并相出一种简洁的判断方法,列在文章最末,原理十分简单,欢迎指点。

    本人对手边的一只五自由度旋转舵机机械手进行了坐标系的建模。为了方便理解画了一个示意图,图省事所以画成了圆柱形,各个旋转关节不影响理解即可。

    机械臂在底座上有四节连杆。第一节为相对于底座转动的连杆。第二节相对于第一节的连轴处旋转。第三节相对于第二节的连轴处旋转,第四节相对于第三节的连轴处旋转。第四节末端为机械手工作部件,抓取夹,绕第四节末端的轴转动,由于不关心夹子的开合角度,便简化为一个示意的形状。其中第四节的转轴距第四节形心轴向后偏了距离为h。

    为了看得更清楚,在建模软件中调整一下角度,可看出机械臂大致的运动姿态。

    下面进入正题,第一部分介绍推算D-H参数与坐标轴方向的方法;第二部分介绍一下根据D-H参数得到的坐标变换矩阵;第三部分为我在建模时遇到的问题和自己的分析;第四部分为我总结的步骤。

    连杆D-H参数法介绍

    建立连杆坐标系的基本原则如图所示。规定连杆 i i i的坐标系为 i i i,坐标系 i i i z i z_i zi轴与关节轴 i i i重合,坐标系 的原点位于连杆长度 a i a_i ai与关节轴线 i i i的交点处,坐标系 i i i x i x_i xi轴沿着 a i a_i ai由轴 i i i指向轴 i + 1 i+1 i+1,坐标系 i i i y i y_i yi由右手定则确定。

    如图所示,表示了机器人的两个连杆 i − 1 i-1 i1 i i i,图中的四个参数 α i − 1 \alpha_{i-1} αi1 a i − 1 a_{i-1} ai1 d i d_i di θ i \theta_i θi为连杆 i i i的D-H参数。

    根据蔡自兴老师的《机器人学》第三版第42页的Craig法则:可得出四个参数的计算方法。

    a i − 1 a_{i-1} ai1=沿 x i − 1 x_{i-1} xi1轴,从 z i − 1 z_{i-1} zi1移动到 z i z_i zi的距离。
    α i − 1 \alpha_{i-1} αi1=绕 x i − 1 x_{i-1} xi1轴,从 z i − 1 z_{i-1} zi1旋转到 z i z_i zi的转角。
    d i d_i di=沿 z i z_i zi轴,从 x i − 1 x_{i-1} xi1移动到 x i x_i xi的距离。
    θ i \theta_i θi=沿 z i z_i zi轴,从 x i − 1 x_{i-1} xi1旋转到 x i x_i xi的转角。

    D-H参数法的坐标变换矩阵

    建立相邻连杆的坐标系变换的一般形式,然后将这些变换联系起来,就可以求出最后一个连杆相对于基坐标系的位置和姿态,即运动学方程的矩阵表示,如图所示。连杆变换即坐标系 i − 1 i-1 i1向坐标系 i i i的变换。变换过程可以看成是坐标系 i − 1 i-1 i1经过4次子变换得到了坐标系 i i i,建立3个中间坐标系 R R R Q Q Q P P P。坐标系 i − 1 i-1 i1先绕坐标轴 x i − 1 x_{i-1} xi1旋转 α i − 1 \alpha_{i-1} αi1得到坐标系 R R R;坐标系 R R R沿着轴线 i − 1 i-1 i1和轴线 i i i的公垂线方向移动 a i − 1 a_{i-1} ai1,得到坐标系 Q Q Q;坐标系 Q Q Q绕坐标轴 z Q z_Q zQ旋转 θ i \theta_i θi,得到坐标系 P P P;坐标系 P P P沿着坐标轴 z P z_P zP方向移动 d i d_i di,得到坐标系 i i i

    由坐标系变换法则可知,这四个变换可以用四个齐次变换矩阵表示,分别是 R i − 1 T _{R}^{i-1} T Ri1T Q R T _{Q}^R T QRT P Q T _{P}^Q T PQT i P T _{i}^P T iPT,根据坐标变换的链式法则,坐标系 i − 1 i-1 i1到坐标系 i i i的变换矩阵可以写成
    i − 1 i T = R i − 1 T Q R T P Q T i P T = R o t ( x , α i − 1 ) T r a n s ( x , a i − 1 ) R o t ( z , θ i ) T r a n s ( z , d i ) = [ c o s θ i − s i n θ i 0 a i − 1 s i n θ i c o s α i − 1 c o s θ i c o s α i − 1 − s i n α i − 1 − d i s i n α i − 1 s i n θ i s i n α i − 1 c o s θ i s i n α i − 1 c o s α i − 1 d i c o s α i − 1 0 0 0 1 ] _{i-1}^i T=_{R}^{i-1} T_{Q}^R T_{P}^Q T_{i}^P T =Rot(x,\alpha_{i-1})Trans(x,a_{i-1})Rot(z,\theta_{i})Trans(z,d_i) =\begin{bmatrix} cos\theta_i&-sin\theta_i&0&a_{i-1}\\ sin\theta_icos\alpha_{i-1}&cos\theta_icos\alpha_{i-1}&-sin\alpha_{i-1}&-d_isin\alpha_{i-1}\\ sin\theta_isin\alpha_{i-1}&cos\theta_isin\alpha_{i-1}&cos\alpha_{i-1}&d_icos\alpha_{i-1}\\ 0&0&0&1 \end{bmatrix} i1iT=Ri1TQRTPQTiPT=Rot(x,αi1)Trans(x,ai1)Rot(z,θi)Trans(z,di)=cosθisinθicosαi1sinθisinαi10sinθicosθicosαi1cosθisinαi100sinαi1cosαi10ai1disinαi1dicosαi11

    其中, R o t ( x , α i − 1 ) Rot(x,\alpha_{i-1}) Rot(x,αi1)表示坐标系绕 x x x轴旋转 α i − 1 \alpha_{i-1} αi1 T r a n s ( x , a i − 1 ) Trans(x,a_{i-1}) Trans(x,ai1)表示沿着 x x x轴平移 a i − 1 a_{i-1} ai1

    在得到每个连杆变换后,通过链式法则就可以得到执行机构相对于基坐标系的位姿,即机械臂的运动学方程,可由齐次矩阵 0 5 T _0^5T 05T表示。
    5 0 T = 1 0 T 2 1 T 3 2 T 4 3 T 5 4 T = [ n x o x a x P x n y o y a y P y n z o z a z P z 0 0 0 1 ] _5^0T=_1^0T _2^1T _3^2T _4^3T _5^4T=\begin{bmatrix} n_x&o_x&a_x&P_x\\ n_y&o_y&a_y&P_y\\ n_z&o_z&a_z&P_z\\ 0&0&0&1\\ \end{bmatrix} 50T=10T21T32T43T54T=nxnynz0oxoyoz0axayaz0PxPyPz1

    特殊情况加实例分析

    上述方法中,转轴仅绕参考坐标系即上一个关节的 x x x轴与 z z z轴旋转,移动。其中绕 z z z轴的转角为关节舵机的主动转角,若舵机转角为0, θ \theta θ为0,即仅绕 x x x轴产生转动,转动后的新 x x x轴应当与原 x x x轴平行。

    从图中可以看出,这是一个五自由度的机械臂,所有关节均为转动关节。最底下为底座,将其圆心视为全局坐标系的 O O O点,竖直向上方向为全局坐标系的 z z z正方向,向前的方向为 x x x轴正方向。底座的高度为 l 0 l_0 l0

    在底座上有四节连杆。第一节为相对于底座转动的连杆,长度为 l 1 l_1 l1。第二节相对于第一节的连轴处旋转,长度为 l 2 l_2 l2。第三节相对于第二节的连轴处旋转,长度为 l 3 l_3 l3,第四节相对于第三节的连轴处旋转,长度为 l 4 l_4 l4。第四节末端为机械手工作部件,抓取夹,绕第四节末端的轴转动,其中此转轴距第四节形心轴向后偏了距离为 h h h,在此图中状态看为向全局坐标系x轴负方向偏了 h h h

    根据上述规则,将图中机械臂各关节坐标系一一标出。并得到D-H参数表。

    连杆关节角 θ i / ° \theta_i/° θi/°连杆偏移量 d i / m d_i/m di/m扭转角 α i − 1 / ° \alpha_{i-1}/° αi1/°连杆长度 a i − 1 / m a_{i-1}/m ai1/m
    10 l 0 l_0 l000
    20 l 1 l_1 l1 − 90 ° -90° 90°0
    3-90°00 l 2 l_2 l2
    4000 l 3 l_3 l3
    5-90°0 − 90 ° -90° 90°0

    其中前四个关节的D-H参数都依照规则较为简单地求出,但是第五关节比较奇怪。按照描述 a i − 1 a_{i-1} ai1为沿 x i − 1 x_{i-1} xi1轴,从 z i − 1 z_{i-1} zi1移动到 z i z_i zi的距离。 d i d_i di为沿 z i z_i zi轴,从 x i − 1 x_{i-1} xi1移动到 x i x_{i} xi的距离。

    z 4 z_4 z4移动到 z 5 z_5 z5的距离为h,但是在 x 4 x_4 x4上的分量为0; x 4 x_4 x4 x 5 x_5 x5相交,故 d d d也为 0 0 0
    但这很明显是不可能的,此关节的两个空间尺度 l 4 l_4 l4 h h h都没有用上,那这个关节岂不是变成质点了吗?

    于是我尝试了三种思路得到参数
    (1)不管轴方向的分量,强行将此二值代入,认为:

    连杆关节角 θ i / ° \theta_i/° θi/°连杆偏移量 d i / m d_i/m di/m扭转角 α i − 1 / ° \alpha_{i-1}/° αi1/°连杆长度 a i − 1 / m a_{i-1}/m ai1/m
    5 θ 5 \theta_5 θ5 l 4 l_4 l4 − 90 ° -90° 90° h h h

    并得到变换矩阵 5 4 T _5^4T 54T
    5 4 T = [ c o s θ 5 − s i n θ 5 0 h 0 0 1 l 4 − s i n θ 5 − c o s θ 5 0 0 0 0 0 1 ] _5^4T=\begin{bmatrix} cos\theta_5&-sin\theta_5&0&h\\ 0&0&1&l_4\\ -sin\theta_5&-cos\theta_5&0&0\\ 0&0&0&1 \end{bmatrix} 54T=cosθ50sinθ50sinθ50cosθ500100hl401

    按照机械臂的初始状态, θ 5 = − 90 ° \theta_5=-90° θ5=90°,代入得
    5 4 T = [ 0 1 0 h 0 0 1 l 4 1 0 0 0 0 0 0 1 ] _5^4T=\begin{bmatrix}0&1&0&h\\0&0&1&l_4\\1&0&0&0\\0&0&0&1\end{bmatrix} 54T=001010000100hl401,明显不对

    (2)考虑到坐标系 5 5 5的原点相对于坐标系 4 4 4 x x x方向位移为 l 4 l_4 l4 y y y方向为 − h -h h,猜测为

    连杆关节角 θ i / ° \theta_i/° θi/°连杆偏移量 d i / m d_i/m di/m扭转角 α i − 1 / ° \alpha_{i-1}/° αi1/°连杆长度 a i − 1 / m a_{i-1}/m ai1/m
    5 θ 5 \theta_5 θ5-h-90° l 4 l_4 l4

    可得坐标变换矩阵 5 4 T = [ 0 1 0 l 4 0 0 1 − h 1 0 0 0 0 0 0 1 ] _5^4T=\begin{bmatrix}0&1&0&l_4\\0&0&1&-h\\1&0&0&0\\0&0&0&1\end{bmatrix} 54T=001010000100l4h01,坐标系 5 5 5的原点代入求该点在坐标系 4 4 4对应的坐标: [ 0 1 0 l 4 0 0 1 − h 1 0 0 0 0 0 0 1 ] [ 0 0 0 1 ] = [ l 4 − h 0 1 ] \begin{bmatrix}0&1&0&l_4\\0&0&1&-h\\1&0&0&0\\0&0&0&1\end{bmatrix}\begin{bmatrix}0\\0\\0\\1\end{bmatrix}=\begin{bmatrix}l_4\\-h\\0\\1\end{bmatrix} 001010000100l4h010001=l4h01,这次好像对了,再将点(1,2,3)代入试试 [ 0 1 0 l 4 0 0 1 − h 1 0 0 0 0 0 0 1 ] [ 1 2 3 1 ] = [ 2 + l 4 3 − h 1 1 ] \begin{bmatrix}0&1&0&l_4\\0&0&1&-h\\1&0&0&0\\0&0&0&1\end{bmatrix}\begin{bmatrix}1\\2\\3\\1\end{bmatrix}=\begin{bmatrix}2+l_4\\3-h\\1\\1\end{bmatrix} 001010000100l4h011231=2+l43h11,可观察出在坐标系4中应当为 ( 3 + l 4 , − 1 − h , − 2 ) (3+l_4,-1-h,-2) (3+l4,1h,2),所以此矩阵错误。

    (3) 这是为什么呢,我观察了下,现在它是 − 90 ° , -90°, 90°我把它转回去看看。即绕 z 5 z_5 z5轴正转 90 90 90度。

    可以看出 x 5 x_5 x5 x 4 x_4 x4并非平行,相反地, y 5 y_5 y5 y 4 y_4 y4是平行的。说明坐标系 5 5 5为绕 y y y轴转动了 90 90 90度,然后在 x x x y y y方向产生了位移。这个变换矩阵应当自行计算:
    5 4 T = T r a n s ( y , − h ) T r a n s ( x , l 4 ) R o t ( y , 90 ° ) R o t ( z , θ 5 ) = [ 1 0 0 l 4 0 1 0 − h 0 0 1 0 0 0 0 1 ] [ 0 0 1 0 0 1 0 0 − 1 0 0 0 0 0 0 1 ] [ c o s θ 5 − s i n θ 5 0 0 s i n θ 5 c o s θ 5 0 0 0 0 1 0 0 0 0 1 ] _5^4T=Trans(y,-h)Trans(x,l_4)Rot(y,90°)Rot(z,\theta_5) =\begin{bmatrix}1&0&0&l_4\\0&1&0&-h\\0&0&1&0\\0&0&0&1\end{bmatrix}\begin{bmatrix}0&0&1&0\\0&1&0&0\\-1&0&0&0\\0&0&0&1\end{bmatrix}\begin{bmatrix}cos\theta_5&-sin\theta_5&0&0\\sin\theta_5&cos\theta_5&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix} 54T=Trans(y,h)Trans(x,l4)Rot(y,90°)Rot(z,θ5)=100001000010l4h010010010010000001cosθ5sinθ500sinθ5cosθ50000100001

    = [ 0 0 1 l 4 s i n θ 5 c o s θ 5 0 − h − c o s θ 5 s i n θ 5 0 0 0 0 0 1 ] =\begin{bmatrix}0&0&1&l_4\\sin\theta_5&cos\theta_5&0&-h\\-cos\theta_5&sin\theta_5&0&0\\0&0&0&1\end{bmatrix} =0sinθ5cosθ500cosθ5sinθ501000l4h01

    θ = − 90 ° \theta=-90° θ=90°代入得 5 4 T = [ 0 0 1 l 4 − 1 0 0 − h 0 − 1 0 0 0 0 0 1 ] _5^4T=\begin{bmatrix}0&0&1&l_4\\-1&0&0&-h\\0&-1&0&0\\0&0&0&1\end{bmatrix} 54T=010000101000l4h01,再将点 ( 1 , 2 , 3 ) (1,2,3) (1,2,3)代入试试 [ 0 0 1 l 4 − 1 0 0 − h 0 − 1 0 0 0 0 0 1 ] [ 1 2 3 1 ] = [ 3 + l 4 − 1 − h − 2 1 ] \begin{bmatrix}0&0&1&l_4\\-1&0&0&-h\\0&-1&0&0\\0&0&0&1\end{bmatrix}\begin{bmatrix}1\\2\\3\\1\end{bmatrix}=\begin{bmatrix}3+l_4\\-1-h\\-2\\1\end{bmatrix} 010000101000l4h011231=3+l41h21,正确。

    反复验证,此种方法得到的矩阵应该不存在问题。

    方法总结

    于是就出现了问题,难道传统 D − H D-H DH参数法是错的?那肯定不是,之前的学者们肯定遇到了各种特殊情况,并且给出了解决方法,但我觉得书上描述的针对一般性问题的描述过于复杂,在此,我想出了一种比较快速的方法。

    根据前面的描述,若舵机转角为 0 0 0 θ \theta θ 0 0 0,即仅绕 x x x轴产生转动,转动后的新 x x x轴应当与原 x x x轴平行。

    故,看到机械臂关节后的建立坐标转换矩阵的步骤为:

    (1)根据 C r a i g Craig Craig规则,确定各原点以及 x i , y i , z i x_i,y_i,z_i xi,yi,zi 的方向。并根据规则算出此状态时的角度 θ i 0 \theta_{i0} θi0
    (2)将关节 i i i沿转轴 z i z_i zi旋转 − θ i 0 -\theta_{i0} θi0,得到关节 i i i相对于上一个转角为 0 0 0时的坐标系,观察此时的 x x x轴是否与上一个关节的 x x x轴平行,若平行,则满足前述规则,直接求出 D − H D-H DH参数,并代入矩阵

    [ c o s θ i − s i n θ i 0 a i − 1 s i n θ i c o s α i − 1 c o s θ i c o s α i − 1 − s i n α i − 1 − d i s i n α i − 1 s i n θ i s i n α i − 1 c o s θ i s i n α i − 1 c o s α i − 1 d i c o s α i − 1 0 0 0 1 ] \begin{bmatrix}cos\theta_i&-sin\theta_i&0&a_{i-1}\\ sin\theta_icos\alpha_{i-1}&cos\theta_icos\alpha_{i-1}&-sin\alpha_{i-1}&-d_isin\alpha_{i-1}\\ sin\theta_isin\alpha_{i-1}&cos\theta_isin\alpha_{i-1}&cos\alpha_{i-1}&d_icos\alpha_{i-1}\\ 0&0&0&1\\ \end{bmatrix} cosθisinθicosαi1sinθisinαi10sinθicosθicosαi1cosθisinαi100sinαi1cosαi10ai1disinαi1dicosαi11

    (3)若此时的 x x x轴与上一个关节的 x x x轴不平行,则必定有绕 y y y轴的转动,此时需要观察,另行推算出坐标变换矩阵。一般优先考虑转角,后考虑位移。一般情况下机械臂不会有很奇怪的角度,通过观察可得到沿 x x x y y y轴的转角。若同时具有 x x x y y y轴的转角并且角度不是 90 90 90的倍数,也可根据坐标轴之间的夹角求出转角。

    另:在上面那个机械臂的例子中 x 3 x_3 x3 x 4 x_4 x4也不是平行的,但考虑到此状态的 θ = − 90 ° \theta=-90° θ=90°,将 θ 3 \theta_3 θ3正转 90 ° 90° 90°后, x 3 x_3 x3 x 4 x_4 x4平行。

    2019-01-03 上海

    展开全文
  • 张正友标定——相机参数的标定

    千次阅读 2019-04-14 20:40:12
    张正友标定也称棋盘格标定,是指张正友教授1998年提出的单平面棋盘格的摄像机标定方法。该方法介于传统的标定方法和自标定方法之间,使用简单实用性强,有以下优点: 不需要额外的器材,一张打印的棋盘格即可。...

    张正友标定法也称棋盘格标定法,是指张正友教授1998年提出的单平面棋盘格的摄像机标定方法。该方法介于传统的标定方法和自标定方法之间,使用简单实用性强,有以下优点:

    • 不需要额外的器材,一张打印的棋盘格即可。
    • 标定简单,相机和标定板可以任意放置。
    • 角点明显,标定的精度高。

    1.1 相机的内参矩阵

    设P=(X,Y,Z)为场景中的一点,在针孔相机模型中,其要经过以下几个变换,最终变为二维图像上的像点p=(μ,ν):

    1. 将P从世界坐标系通过刚体变换(旋转和平移)变换到相机坐标系,这个变换过程使用的是相机间的相对位置,也就是相机的外参数
    2. 从相机坐标系,通过透视投影变换到相机的成像平面上的像点p=(x,y)。
    3. 将像点p从成像坐标系,通过缩放和平移变换到像素坐标系上点p=(μ,ν)。

    相机将场景中的三维点变换为图像中的二维点,也就是各个坐标系变换的组合,可将上面的变换过程整理为矩阵相乘的形式:
    在这里插入图片描述

    将矩阵K称为相机的内参数,
    在这里插入图片描述

    其中,α,β表示图像上单位距离上像素的个数,则fx=αf,fy=βf将相机的焦距f变换为在x,y方向上像素度量表示。
    另外,为了不失一般性,可以在相机的内参矩阵上添加一个畸变参数γ,该参数用来表示像素坐标系两个坐标轴的畸变大小。则内参矩阵K变为
    在这里插入图片描述

    1.2 张正友标定法

    该方法将位于棋盘格上的点的Z坐标都设为0,即
    在这里插入图片描述

    再利用homographic(共线方程)进行单应性变换,得到棋盘平面Π和图像平面π的单应矩阵H。再根据上式可得出将棋盘格所在的平面映射到相机的成像平面的方程在这里插入图片描述。其中p为棋盘格所成像的像点坐标,P棋盘格角点在世界坐标系的坐标。
    将上面两个等式进行整合,则可以得到单应矩阵H和相机矩阵(包含内参和外参)的相等:
    在这里插入图片描述

    这样就可以使用棋盘平面和成像平面间的单应矩阵来约束相机的内参和外参。单应矩阵H可以通过棋盘平和成像平面上对应的点计算出来。

    1.3 OpenCV中的张正友相机标定

    OpenCV中提供了对张正友标定算法的实现,其使用步骤如下:

    1. 制作棋盘格标定板——可以将其打印下来固定到一张平板上就是标定使用的标定板。使用同一相机从不同的位置,不同的角度,不同的姿态,拍摄标定板的多张照片(一般不少于3张,以10-20张为宜)。
    2. 提取标定板的内角点的世界坐标,这里需要注意标定板的大小是标定板在水平和竖直方向上内焦点的个数。内焦点指的是,标定板上不挨着边的角点。比如棋盘格的大小是4*6,其在水平方向有3个内焦点;竖直方向有5个内焦点。
    3. 提取标定板的角点的图像坐标。
    4. 对已经取得了角点的世界坐标以及对应的像素坐标进行标定。

    1.3.1 代码及运行结果

    本次实验用了15*12为大小的棋盘格。并用华为P20pro拍摄了十张不同位置、不同角度的图像。
    在这里插入图片描述

    下面是实现代码:

    #-*- coding:utf-8 -*-
    
    import cv2
    import glob
    import numpy as np
    '''
    cbraw和cbcol是棋盘的角点矩阵大小,这里如果角点维数超出的话,标定的时候会报错。
    '''
    cbraw = 11
    cbcol = 14
    # prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)
    objp = np.zeros((cbraw*cbcol,3), np.float32) 
    '''
    设定世界坐标下点的坐标值,因为用的是棋盘可以直接按网格取;
    假定棋盘正好在x-y平面上,这样z值直接取0,简化初始化步骤。
    mgrid把列向量[0:cbraw]复制了cbcol列,把行向量[0:cbcol]复制了cbraw行。
    转置reshape后,每行都是11*14网格中的某个点的坐标。
    '''
    objp[:,:2] = np.mgrid[0:cbraw,0:cbcol].T.reshape(-1,2)
    
    objpoints = [] # 3d point in real world space
    imgpoints = [] # 2d points in image plane.
    #glob是个文件名管理工具
    images = glob.glob("*.jpg")
    for fname in images:
    #对每张图片,识别出角点,记录世界物体坐标和图像坐标
        img = cv2.imread(fname) #source image
        #我用的图片太大,缩小了一半
        img = cv2.resize(img,None,fx=0.5, fy=0.5, interpolation = cv2.INTER_CUBIC)
        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转灰度
        #cv2.imshow('img',gray)
        #cv2.waitKey(1000)
        #寻找角点,存入corners,ret是找到角点的flag
        ret, corners = cv2.findChessboardCorners(gray,(11,14),None)
        #criteria:角点精准化迭代过程的终止条件
        criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
        #执行亚像素级角点检测
        corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)
    
        objpoints.append(objp)
        imgpoints.append(corners2)
        #在棋盘上绘制角点,只是可视化工具
        img = cv2.drawChessboardCorners(gray,(11,14),corners2,ret)
        cv2.imshow('img',img)
        #cv2.waitKey(1000)
    '''
    传入所有图片各自角点的三维、二维坐标,相机标定。
    每张图片都有自己的旋转和平移矩阵,但是相机内参和畸变系数只有一组。
    mtx,相机内参;dist,畸变系数;revcs,旋转矩阵;tvecs,平移矩阵。
    '''
    ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)
    
    #打印我们要求的两个矩阵参数
    print ("newcameramtx:\n",newcameramtx)
    print ("dist:\n",dist)
    

    运行结果:
    在这里插入图片描述

    由结果可看出,焦距fx=170.59,及fy=183.53(约等于)。

    展开全文
  • 改进DH参数法

    千次阅读 2020-10-04 22:17:49
    DH参数法是由Denavit和Hartenberg于1955年提出的一种描述串联式链路上连杆和关节的系统方法。1986年John J.Craig提出了一种改进的DH参数,在建立关节坐标系时将坐标系固结于该连杆的近端,而非远端,更符合直观理解...

    DH参数法是由Denavit和Hartenberg于1955年提出的一种描述串联式链路上连杆和关节的系统方法。1986年John J.Craig提出了一种改进的DH参数,在建立关节坐标系时将坐标系固结于该连杆的近端,而非远端,更符合直观理解。为了便于区分,这种方法成为改进DH(Modified DH),而将之前的方法称为标准DH(Standard DH)。

    两种方法都被广泛接受,不同教材、论文会使用不同的方法且很多时候不会明确说明,而通过DH参数表很容易区分两种方法:如果四个参数有相同的下标那么就是标准DH,反之则为改正DH。

    在这里插入图片描述
    影响

    对于树形结构或者闭链机构的机器人来说,按照SDH方法建立的连杆坐标系会产生歧义,因为SDH的建系原则是把连杆i的坐标系建立在连杆的远端,如图3(a)所示,这就导致连杆0上同时出现了两个坐标系。而MDH把连杆坐标系建立在每个连杆的近端,则不会坐标系重合的情况,如图3右图所示,这就克服了SDH方法建系的缺点。
    图3

    标准DH

    在这里插入图片描述
    标准DH

    d i {{\text{d}}_{i}} di : 沿着 Z i − 1 {{\text{Z}}_{i-1}} Zi1轴, 从 X i − 1 {{\text{X}}_{i-1}} Xi1移动到 X i {{\text{X}}_{i}} Xi的距离;
    θ i {{\theta }_{i}} θi : 绕着 Z i − 1 {{\text{Z}}_{i-1}} Zi1轴, 从 X i − 1 {{\text{X}}_{i-1}} Xi1旋转到 X i {{\text{X}}_{i}} Xi的角度;
    a i {{\text{a}}_{i}} ai :沿着 X i {{\text{X}}_{i}} Xi轴, 从 Z i − 1 {{\text{Z}}_{i-1}} Zi1移动到 Z i {{\text{Z}}_{i}} Zi的距离;
    α i {{\alpha }_{i}} αi :绕着 X i {{\text{X}}_{i}} Xi轴, 从 Z i − 1 {{\text{Z}}_{i-1}} Zi1旋转到 Z i {{\text{Z}}_{i}} Zi的角度;

    ![在

    改进DH

    在这里插入图片描述
    改进DH
    a i − 1 {{\text{a}}_{i-1}} ai1 :沿着 X i − 1 {{\text{X}}_{i-1}} Xi1轴, 从 Z i − 1 {{\text{Z}}_{i-1}} Zi1移动到 Z i {{\text{Z}}_{i}} Zi的距离;
    α i − 1 {{\alpha }_{i-1}} αi1 :绕着 X i − 1 {{\text{X}}_{i-1}} Xi1轴, 从 Z i − 1 {{\text{Z}}_{i-1}} Zi1旋转到 Z i {{\text{Z}}_{i}} Zi的角度;
    d i {{\text{d}}_{i}} di : 沿着 Z i {{\text{Z}}_{i}} Zi轴, 从 X i − 1 {{\text{X}}_{i-1}} Xi1移动到 X i {{\text{X}}_{i}} Xi的距离;
    θ i {{\theta }_{i}} θi : 绕着 Z i {{\text{Z}}_{i}} Zi轴, 从 X i − 1 {{\text{X}}_{i-1}} Xi1旋转到 X i {{\text{X}}_{i}} Xi的角度;
    在这里插入图片描述

    SDH与MDH比较

    (1)固连坐标系不同

    SDH方法关节i上固连的是i-1坐标系,即坐标系建在连杆的输出端;MDH关节i上固连的是i坐标系,即坐标系建在连杆的输入端。

    (2)坐标系变换顺序不同

    SDH方法是ZX类变换:先绕着i-1坐标系的的Zi-1轴旋转和平移,再绕着坐标系i的Xi轴进行旋转和平移;MDH方法是XZ类变换:先绕着i坐标系的的Xi轴旋转和平移,再绕着坐标系i的Zi轴进行旋转和平移;

    展开全文
  • 机械臂正运动学标准DH参数建立技巧

    万次阅读 多人点赞 2018-08-23 11:18:41
    4. 参数确定: a为两Z轴距离,d为两x轴距离;alpha为两Z轴夹角,theta为两x轴夹角,方向判断如下图: 5. 实例: 6. 正运动学标准DH参数matlab代码: clear; clc; syms theta1 theta2 theta3 theta4 theta...
  • 参数假设检验(总体分布的估计) 在之前所研究的假设检验 都有一个共同的前提, 就是总体分布满足 正态分布 然而一般总体分布是什么样子的, 都没有办法提前知晓, 那么这个时候我们需要怎么办呢? 非参数统计方法 ...
  • 参数优化:网格搜索

    千次阅读 2020-06-07 21:20:15
    使用Python完成网格搜索在机器学习和深度学习的小案例!
  • DH参数法建立机器人的运动学正解

    万次阅读 多人点赞 2016-04-21 23:32:21
    DH参数法建立机器人的运动学正解  运用DH参数法时坐标系建立的两个约定:  (1)x_i与z_(i-1)垂直  (2)x_i与z_(i-1)相交  坐标系i与坐标系i-1的其次变换矩阵为:  a为两z轴的距离,d为两x轴的距离。 ...
  • 介绍如何使用牛顿求解逻辑回归中的参数,使得似然函数值最大。
  • 随机梯度下降介绍及其参数讲解

    万次阅读 2020-09-28 17:19:30
    随机梯度下降 算法介绍 简单来说,梯度下降就是从山顶找一条最短的路走到山脚最低的地方。但是因为选择方向的原因,我们找到的的最低点可能不是真正的最低点。如图所示,黑线标注的路线所指的方向并不是真正...
  • D-H建模方法 我这里只介绍一种,Modified D-H,即改进D-H参数法,另外还有标准D-H参数法,我就不做笔记了。 总结改进D-H参数法建立的基本顺序及四个参数的具体定义。 两个简单的例子。Xi在Zi-1和Zi的公法线上,...
  • DH参数介绍

    万次阅读 多人点赞 2018-05-25 09:39:07
    通常,每一个变换需要6个独立参数来描述坐标系i相对坐标系i-1的关系,3个用来描述位置另外3个用来描述方向。 在1995年,Jacques Denavit 和 Richard Hartenberg 提出了一种系统化的方法来解决这个...
  • 9. 机器人正运动学---修改DH参数

    千次阅读 2020-03-27 13:04:00
    这篇文章介绍了建立机器人连杆坐标系的另外一种方法也就是修改DH参数法。这篇文章介绍了标准DH参数和修改DH参数的区别和联系。
  • 研究机械臂的正向运动学需要从机械臂的变换...标准D-H参数法的变换矩阵的顺序是,比如有两个坐标系,一个是坐标i,一个是坐标系j。按照Z-X的顺序: 先绕坐标系i的Z轴旋转θ角,该值便为θ1。使得Xi轴与Xj轴平行。 在沿
  • d) sag:即随机平均梯度下降,是梯度下降的变种,和普通梯度下降的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。   维度时,lbfgs比较好, 维度>10000时, cg比较好,显卡...
  • FFMPEG 参数详细说明

    万次阅读 2019-06-27 10:51:54
    -interlace 强迫交织编码仅对mpeg2和mpeg4有效。当你的输入是交织的并且你想要保持交织以最小图像损失的时候采用该选项。可选的方法是不交织,但是损失更大 -psnr 计算压缩帧的psnr -vstats 输出视频编码统计到...
  • 在机器学习的模型中,通常有两类参数,第一类是通过训练数据学习得到的参数,也就是模型的系数,如回归模型中的权重系数,第二类是模型算法中需要进行设置和优化的超参,如logistic回归中的正则化系数和决策树中的树...
  • DH参数的理解

    千次阅读 2020-03-05 15:01:48
    DH 参数一般使用四个参数: X轴旋转,一般使用α表示 X轴平移,一般使用a表示 Z轴旋转,一般使用θ表示 Z轴平移,一般使用d表示 根据轴的先后顺序分为标准DH参数和改进DH参数。 标准DH参数:两个连杆坐标系变换是先...
  • 【转载】标准DH和改进DH的区别

    千次阅读 2019-11-18 14:35:55
    对比代码中的DH参数和图中画的坐标系,再次确定标准DH四个参数含义: theta:绕Zi轴,从Xi旋转到Xi+1的角度 D:沿Zi轴,从Xi移动到Xi+1的距离 A:沿Xi轴,从Zi移动到Zi+1的距离 alpha:绕Xi+1轴,从Zi...
  • 机器人学 : 标准DH和改进DH

    万次阅读 2018-07-01 10:46:15
    首先,标准的 DH 与改进的 DH 的区别就是四个参数的定义有些许不同,具体参数定义详见这里 标准DH与改进DH的区别如图: 标准(经典)DH是将连杆的坐标系固定在该连杆的输出端(下一关节),也即坐标系i-1与...
  • Bootstrap 自助

    万次阅读 多人点赞 2015-01-14 15:35:20
    和非参数化Bootstrap不同的地方在于总体分布函数的形式是已知的,需要根据样本估计参数 (参数估计),这样得到经验分布函数,从经验分布函数中再采样得到Bootstrap样本,非参数化Bootstrap是从原始样本中再抽样,...
  • 什么是参数估计?

    千次阅读 2020-10-20 20:06:51
    参数估计(parameter estimation) 参数估计属于统计推断的范畴,是根据从总体中抽取的样本估计总体分布中包含的未知参数的方法。 统计推断是数理统计研究的核心问题,是指根据样本对总体分布或分布的数字特征等作出...
  • jsp:include标签参数传递及捕获

    万次阅读 2016-12-18 21:29:39
    方式1、指令标签引入   然而这种方法我并不能找到传递参数的方法。 方式2、使用jsp:include标签引入,并设置参数  pageTitle"/> 通过方式2可以传递参数到被引用的页面,以求动态的变更被引用页面的...
  • 引言接着上一篇双参数双门限的语音端点检测的文章写。上一篇用了两个参数,短时能量和短时过零率。这一篇只用一个参数,短时能量。当然,还可以用其他特征。总之,特征个数(种类)仅限一个。基本思想设置2个参数...
  • 参数估计:最大似然估计MLE

    万次阅读 多人点赞 2016-05-21 16:57:50
    http://blog.csdn.net/pipisorry/article/details/51461997最大似然...最大似然估计就是要用似然函数取到最大值时的参数值作为估计值,似然函数可以写做相乘因为它们之间是独立同分布的。由于有连乘运算,通常对似然
  • 参数命名规范

    千次阅读 2019-03-05 19:46:11
    1.3.2参数常量 采用小驼峰命名,若增加final标识,则表示此值不能被更改 常量应用举例: public class Constant{ public static final String GLOBAL_CONSTANT="global" public static final String ...
  • k-means聚类算法原理与参数调优详解

    万次阅读 多人点赞 2019-05-16 08:31:07
    在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计算方法,会得到不同的聚类结果,常用的相似度计算方法有欧式距离。 k-means算法流程 1.选择聚类的个数k(kmeans算法传递超...
  • 重新看了一遍《机器人建模与控制》这本书,感觉之前写的正解的理解还不到位,于是又重新写了这篇总结。这篇文章先更新在知乎里的,因为两个平台的编辑器模式不一样,所以就直接截了...确定DH参数 根据图3确定DH参数
  • SVM参数详解

    万次阅读 多人点赞 2016-05-26 14:02:40
    svm参数说明---------------------- 如果你要输出类的概率,一定要有-b参数 svm-train training_set_file model_file svm-predict test_file model_fileoutput_file 自动脚本:python easy.py train_data test_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 305,774
精华内容 122,309
关键字:

参数生标法