五 跳个舞你就满足了吗?--机器人动力学

通过三四章的学习,我们已经可以操作机器人来改变他的关节角度了,也就是说,我们可以让机器人跳舞咯,只需要编排好关节角度,在一定周期给信号就OK啦~~~~~当然也可以赋予一个random值让它乱动哦~~~至于具体怎么实现,这个我打算留给读者自行研究。在此不展开说明(因为展开了真的可以很长。。)

然而,但是。跳个舞你就满足了吗?这些关节之前到底隐藏着怎样的关系?比如说我想让一个机械臂去抓它面前的一个杯子,我应该怎么编排机器人的爪子才能到达那个点呢???这就是动力学解决的问题了。

传统动力学分为前向动力学和逆动力学,也就是forward kinematic 和 inverse kinematic. 

前向动力学要解决的是,给出关节角度信息,求出末端关节的位置。

逆动力学要解决的是相反的问题,也就是给出末端关节要到达的位置(比如说机器人面前的杯子所在的空间坐标),求出每个关节对应的角度。

到这里,我们才真正开始进入机器人学的研究领域,接下来,我会结合John J. Carig的《机器人学导论》第三版进行说明,想真正入门的同学请务必把原著(或者中文翻译版)粗略地看一遍,对大部分人来不需要仔细看,有个概念就可以。

入门之前的入门: 空间位姿与坐标变换

相信本科时候不少同学都被线性代数所困扰,我们不仅需要熟记矩阵的计算方法,还要熟练运用各种公式和定理,那么问题来了,学这玩意除了应付考试还能干嘛??对的,对于大多数专业(比如我本科读的通信),学这玩意还真是没鸟用。专业课用不上,工作更用不上。。关键数学教材给出的一般只是抽象概念,我们都知道数学是一个工具,工具的作用就是为了解决实际问题,而数学教材一般只把这个工具抽象出来,脱离实际背景后导致学生只能通过死记硬背来掌握这门学科,这大概就是大部分人(包括本人)讨厌数学的原因。

说了这么多该回到正题了,在这里我们将用矩阵来做坐标变换(矩阵的本质就是用来描述变换的工具)

假设我们有一个机器人,为了描述每个关节所在位置,我们需要一个参考坐标系,这个参考坐标系一般称为机器人的基坐标(base_link),这个base_link一般放在机器人下面的中间处,如上图的nao的base_link就处于两脚之间,有了base_link,在机器人运动的时候我们就可以把目标坐标系转化为在base_link坐标系上的位置和姿态了。(ros的tf工具包就是用来专门处理这个事的,图中那一堆的坐标就是tf的可视化)

引用《机器人学导论》中第二章的原话:

可以看到坐标系之间的变换就是一个旋转操作(上面的R矩阵,R代表rotation,因此也称为旋转矩阵,它一般是一个3x3矩阵,每一行代表一个旋转分量) 加一个平移操作(上面的P,有时候也用T缩写,它一般是一个3x1向量,里面就是x,y,z方向上的平移量)。把旋转和平移合并起来后就可以就可以组成一个变换矩阵,套用书中原话:

 

有了这个概念,我们解正运动学就变得非常简单了。假设我们以机器人两脚间的base_link坐标为参照,要求机器人的手臂前端的抓取部分相对base_link的坐标,那么我们可以先从base_link乘以一个变换矩阵T变换到脚下的坐标,然后再乘一个变换矩阵T变换到机器人膝盖的坐标,然后一直乘下去就会得到我们想要的坐标。而这些变换矩阵都是可以直接从机器人身上获取的,比如变换矩阵的旋转变量就可以通过读舵机的编码器推算出角度,然后计算出来,而平移一般是固定的,因为机器人用的是刚性连杆。

正运动学是解决了,但在实际场景没什么用啊,虽然我是知道了机器人各个关节形成一定角度后他的手能到达那个位置,但我们要做的一般是已知东西在哪个位置,去求解机器人各个关节的值,好让机器人去抓这个东西。求解逆运动学问题由此而生,也就是常说解IK(inverse kinematic).

对于解逆运动学,我们不打算在这展开叙说(毕竟人家用了一整章去写,我在这里写一章内容不太现实,有兴趣的读者可以参考上述书籍)

需要注意的是,逆动力学的解一般是一个空间(自由度大于6的话解可能有无限多个),比如说,人的手就拥有7个自由度(7个关节,不算手指),当你想要控制手指到达某个目标地点的时候,你可以有超多的姿势~(你手臂的关节组合数),套用下图就是你想到达上面的点,既可以用左边的姿势,也可以用右边的姿势。

 

至于在实际应用中,一般都会有现成的库文件,只要我们设定要关节长度,角度限制等参数,然后给出目标坐标,这些库就可以帮我们求出每个关节对应的值,因此我们不需要自己每次去写低效率的求解程序,对于求解过程只要有个概念就足够了。(开源拯救世界!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

himlen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值