python机器人运动学_学习机器人运动学,动力学需要哪些数学基础课程?

来答干货,UCLA系统与控制方向硕士在读,发过一些小文章,对之前的学习路线做个总结。

首先,你感兴趣的是机器人运动学与动力学,我个人通常将这两块定义为:机器人空间位置、姿态等状态,随连续或非连续时间的一个变化过程。通常,我们可以通过代数方程、微分方程、差分方程来对这样的系统进行建模。

在控制理论中,我们总是要对大量的线性与非线性、自治与非自治的“方程”进行研究。现代控制理论的一些重要研究方法,比如状态空间法、数值方法等,其数学基础也是微分方程的解的存在性与唯一性定理、矢量场、Euler法与龙格-库塔法等。所以在讨论机器人运动控制、力控制等问题时,我们基本离不开数学方程。

此外,由于研究的深入、系统复杂性的增加、扰动不确定性的增强。我们所面对的系统往往有更多的state,甚至更多input/output,所以我们也需要运用一种更加简洁的表示方法,对上一段所说的dynamics equation进行描述,矩阵运算也就应运而生了。最基础的要求显然是线性代数,这不光对于机器人动力学、控制很重要,对于力学和控制的其他分支同样如此。比如非线性、结构振动、气动弹性力学啊,线性代数都是最基础也是最重要的。和一元二元微积分一样,如果能对矩阵行列式、特征值、秩、Gram-Schemidt定理、SVD分解、Jacobi矩阵等概念烂熟于心,会对学术研究很有帮助。

另外,matlab或者maple/mathematica非常重要!因为我发现国内很多院校的线性代数课上根本不会cover用到matlab的内容,比如SVD分解、QR分解完全可以通过一行matlab代码完成,非要让学生用手算,很多学生觉得麻烦索性就列个式子就直接抄答案了,或者就专注于算结果而不关注于他们的物理意义和应用了,但这样会错过一些非常有趣的东西(下面是举例说明,嫌长建议跳过)

拿SVD分解来说吧(对8起,我真不知道unitary矩阵怎么翻译...)

式子中的V矩阵和U矩阵是存在某种映射关系的。我们在控制学中常说的增益(gain),就与V,U两个矩阵相关,如果我们将A和V中的某一列向量做矩阵乘法,并进行标准化(normalization)之后,发现得到的就是U中对应的列向量,我们将V称为增益输入(gain input),U称为增益输出(gain output)。

我相信如果不用matlab的话,很少有学生愿意手撸SVD分解之后,还去再额外做两个矩阵乘法和标准化。如果再扩展一点,从增益这块还能引申到矩阵“模”(induced norm,我还是不会翻译..)的几何意义与推导。图中蓝色的圆是单位向量在二维实平面内的集合,黑色虚线和红色虚线分别是low input gain/high input gain,对应的黑色红色实线是low gain output\high gain output。绿色椭圆是矩阵A*向量v(注意区分之前的大写V)的结果。但蓝色圆上点到(0, 0)的距离,同时也意味着向量v的p-norm为1,绿色上一点到(0, 0)距离,等于Av的p-norm。红色实线的长度其实是Av的p-norm最大时的情况,这就定义了一种矩阵induced norm。同时,这个induced norm的值是SVD分解中Sigma矩阵的(1,1)元素,即矩阵A*A的最大的特征值的算术平方根。

SVD分解与增益、与matrix induced norm

是不是很神奇,一下子把SVD分解、增益、induced norm,特征值的概念都cover进来了,用matlab写短短几行代码就能去验证这样的结论是很有意思的,但如果用手算的话,我相信只有20%的学生和老师会走到这里吧。

同样的,对于机器人运动学来说,如果给定一个机械臂各个关节或者自由度的参数,你来算执行端,比如抓取机构,焊枪头(torch?)的工作空间(reachable space),这也就是所谓的forward kinematics,假如你能徒手算对所有的矩阵运算坐标转换,但在画工作空间的时候仍然要费一番功夫对吗?找特征点、极值点之类的。但如果你用matlab,矩阵运算做完,工作空间自然就得到了,画一下而已。求解这样一个2DOP机械臂的工作空间上图中工作空间的解

说的有点多了,意思就是matlab是研究机器人运动学、动力学必不可少的工具,如果你不会,那你一定会错过很多有意思的东西。

方程建模之后,我们也要对方程进行求解与分析,在此我们需要一些实分析与复分析的基础。对于系统稳定性啊,频域分析啊,这些知识都会有所帮助。但是这块我个人认为不需要专门的数学书去学,在经典控制理论以及线性、非线性控制系统分析与设计,反馈系统等教材中都会有所涉及。

上面说的内容其实是最重要的,但是针对不同的问题也有不同的一些数学方法。比如,我们有时候对于随机过程、估计与控制,需要概率论的相关知识。或者有时需要对连续的状态量、输入输出、时间进行离散化,从而进行数值运算方便计算机进行模拟,需要数值分析的知识,对于拉格朗日插值,数值积分等内容要有了解。

举例来说,我们可以使用最优控制问题对机器人的路径规划进行建模。通过设置合适的cost fuction和约束对问题进行研究,或者通过一些方法,将optimal control的问题转化为较易求解的nonlinar programming。我们因此要对于最优与规划的思想有所了解。

随着系统科学、控制科学、动力学的发展,越来越多的工具需要被掌握。高数线代微分方程matlab基本已经沦为了最基本的研究门槛。对于目前机器学习深度学习方法的性能优异性,我们对统计学习方法也要做一些了解了。其他的像变分法、分析力学、有限元等理论与计算方法,也可以在补习数学基础的同时,逐渐去吸收。

最后又要祭出这一张图了,controls and dynamics博大精深

你可能感兴趣的:(python机器人运动学)