(原创)机器人学:从空间变换到正逆向运动学

前言

一直有计划开个坑,写一个比较系统完整的博客专栏,一方面是有利于自己巩固所学的知识,对学习历程做一个记录;另一方面,也希望其他有志于机器人领域的像博主一样的萌新,能够在入门的时候获得一些帮助,得到一些比较系统的知识。这个专栏初定普通机器人学(其实是想到《普通心理学》这个书名。。。捂脸 ),所以它就真的很“普通”,只是一些入门向的知识,重在知识的系统和实践部分,每一个理论都附带着代码实现。那就废话不多说,让我们开始吧!

众所周知,机器人学是一个十分浩瀚的领域,交叉着众多的学科知识。根据知乎@YY硕的分类,机器人学有四个核心的领域:

1.感知(Perception)。视觉传感器、图像传感器、触觉和力传感器、惯导等。
2.认知(Cognition)。人工智能、知识表达、规划、任务调度、机器学习等。
3.行为(Action)。运动学、动力学、控制、manipulation和locomotion等。
4.数学基础(Math Foundations)。最优估计、微分几何、计算几何、运筹学等。

实际上并没有一个严格的划分标准,也有人把机器人分为感知(Perception)、决策(Planning)、控制(Control)三大块。每个细分的领域都充满着探索和挑战,并且困难不小。下到底层的硬件如控制器、各种传感器、电路板、减速器、伺服电机等,然后需要依据实际问题构建出数学模型——其中不乏复杂的数学知识(见仁见智吧。。。),最后通过编程进行实现,需要学习者孜孜以求。例如博主,研一的时候粗浅地学习过SLAM(Simultaneous Localization and Mapping),因为博主本科一直都在摸鱼,所以研一恶补了诸如Gilbert Strange的Linear Algebra,上完Coursera的“Estimation and Learning”,看完了《Essential C++》,看了一部分的《视觉SLAM十四讲》, 粗浅地接触了ROS、OpenCV、Eigen、Sophus、g2o等开源库,学习使用Ubuntu、cmake、matlab等,用turtlebot跑过一些demo,但仍感觉自己一直在门外徘徊,未曾踏入slam的门。研二需要去企业联合培养,企业要我做运动控制和轨迹规划的方向,于是又捡起了JJCraig的《Introduction to Robotics Mechanics and Control》,开始恶补运动学、动力学、轨迹规划一类的知识,这就是写作这个专栏的初衷,督促自己不停总结自己所学内容,加深理解,然后表达出来,不要再像研一一样只是蜻蜓点水般浅浅一过。

所以,这个专栏还是会偏向运动学、动力学一类的,偏向工业机器人的知识,涉及运动控制、轨迹规划等,可能以后还会涉及一些参数辨识、机器视觉一类的内容。语言我会用自己的话来进行表述,可能不如教科书般严谨,博主尽量不出现知识性的错误,如果出现了,还请大佬不吝赐教,我会进行修改。

空间变换的数学描述

1.空间变换的基本概念

想象这么一个场景:现在摆在你面前的是一台三个自由度的SCARA机器臂,这台机器臂有且仅有三个转动关节,并且机械结构是已知的,假设在基座建立一个基座坐标系(base frame),以这个坐标系为参考系,我们可以得知一个小球的空间位置[ B X ^BX BX B Y ^BY BY B Z ^BZ BZ] T ^T T,但是我们可爱的手手(腕部坐标系,wrist frame)也想得知小球的位置,然后过去抓住小球,这时候我们如何得知小球相对于腕部坐标系的位置[ W X ^WX WX W Y ^WY WY W Z ^WZ WZ] T ^T T,这就需要空间变换的概念了。空间变换描述了一个坐标系相对于另一个坐标系的变换关系,这个变换关系只有两种:旋转平移,我们需要用数学语言进行阐述。那如何求得这种变换关系?因为我们已知机器臂的机械结构,即可知每个连杆和关节的物理参数,通过这些物理参数——一种叫D-H参数表的东西,我们就可以建立起机器臂的运动学方程,得到两个坐标系之间的变换关系。最后,当我们知道小球相对于基坐标系的空间位置,又如何知道每个关节应该如何运动才能到达这个位置,这就是第三个问题——逆运动学的问题了。

其实只要翻开任何一本和机器人有关的教材,头一两章总会给你介绍空间变换的知识,空间变换就是机器人运动的数学描述。假设存在两个坐标系{ A}和{ B},{ A}经过一次旋转R和一次平移P到达{ B},这时{ B}可以描述为: (1) { B } = { B A R , A P B O R G } \{\bm{B}\}=\{^A_B\bm{R},^A\bm{P}_{BORG}\}\tag{1} { B}={ BAR,APBORG}(1) 其中, B A R ^A_B\bm{R} BAR是坐标系{ B}相对于坐标系{ A}的旋转矩阵(Rotation matrix),读作“from frame B to frame A”; A P B O R G ^A\bm{P}_{BORG} APBORG是坐标系{B}的原点在坐标系{A}中的平移向量(Translation vector)。有了旋转矩阵和平移向量,我们可以很轻松的就得到两个坐标系之间的变换关系。那么现在有一个点 B P ^B\bm{P} BP,由变换关系可得其在坐标系{ A}中的位置 A P ^A\bm{P} AP (2) A P = B A R B P + A P B O R G ^A\bm{P}={^A_B\bm{R}}{^B\bm{P}}+{^A\bm{P}_{BORG}}\tag{2} AP=BARBP+APBORG(2) 我们把旋转矩阵和平移向量放到一个矩阵里,写成齐次转换矩阵(Homogeneous Transformation matrix)的形式,记做 B A T ^A_B\bm{T} BAT,则有 (3) B A T = [ B A R A P B O R G 0 T 1 ] ^A_B\bm{T}=\left[ \begin{array}{c|c} {^A_B\bm{R}}& {^A\bm{P}_{BORG}} \\ \hline \bm{0}^T& 1 \end{array} \right]\tag{3} BAT=[BAR0TAPBORG1](3) 这样,我们就可以把式(2)简化成 (4) A P = B A T B P ^A\bm{P}={^A_B\bm{T}}{^B\bm{P}}\tag{4} AP=BATBP(4) 既然我们已经知道了怎么将一个点从一个坐标系映射(mapping)到另一个坐标系,那么我们就只剩一件事情:“旋转矩阵 B A R ^A_B\bm{R} BAR 怎么求?”旋转矩阵当然好求,就上面的例子来说,旋转矩阵就是坐标系{ B}的三根轴分别在坐标系{ A}上的投影(或者说点积 (5) B A R = [ X ^ B ⋅ X ^ A Y ^ B ⋅ X ^ A Z ^ B ⋅ X ^ A X ^ B ⋅ Y ^ A

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值