基于主动控制的双足机器人一般可以抽象为有可驱动关节相互连接的一系列刚性连杆构成的机械系统,机器人控制一般最终将生成的连杆末端轨迹映射为各个关节的旋转角度,并根据当前各关节角度估计机器人状态以实现反馈控制。子连杆和父连杆通过关节连接在一起,需要注意的是关节只有旋转运动。

通常要建立全局(世界)坐标系和局部坐标系。我们在父连杆、子连杆及关节上分别建立坐标系,子连杆的原点一般设定在其质心(COM)位置,子连杆距离关节的原点距离不变。假设X点在子连杆坐标系中的坐标为Xs,父连杆坐标系中的坐标为Xp,父连杆的位姿为(Pp,Rp),下面证明子连杆局部坐标和父连杆局部坐标之间的关系:

X=Pp+RpXp

Xp=Prs+RrsXs

其中(Prs,Rrs)为子连杆相对于父连杆的位姿,所以有:

X=Pp+Rp(Prs+RrsXs)

=Pp+RpPrs+RpRrsXs

即子连杆的位姿为:

Ps=Pp+RpPrs

Rs=RpRrs

因而在计算子连杆的位姿时,要首先知道其相对位姿(Prs,Rrs)。

假设父连杆与子连杆通过n个关节连接,每个关节只能做旋转运动,组合关节可以看成是一个个关节重叠在一起,可以看出0关节旋转带动1关节旋转,1关节旋转带动2关节旋转,......(n-2)关节旋转带动(n-1)关节旋转,(n-1)关节旋转带动子连杆旋转,一般来说,后一关节与前一关节的旋转轴是垂直的,所有关节的旋转轴都是汇聚在一点的,(n-1)关节可以看成是固结在子连杆上。在父连杆的关节处建立一个局部辅助坐标系,其一轴与0关节的旋转轴重合,在子连杆上关节处建立一个局部辅助坐标系,其一轴与(n-1)关节的旋转轴的重合;在每一个关节上建立一个辅助坐标系,其一轴与其旋转轴重合。一般来说关节转动时,带动子连杆旋转,关节坐标其原点为子连杆与父连杆连接处。
假设初始子连杆坐标系原点相对于子连杆辅助坐标系的偏移为b,关节相对父连杆的偏移为a(父坐标系下表示),则有:
父连杆辅助坐标系的坐标Xg与0关节辅助坐标系坐标X0关系为:Xg=R0X0
0关节辅助坐标系的坐标X0与1关节辅助坐标系坐标X1关系为:  X0=R1X1
1关节辅助坐标系的坐标X0与2关节辅助坐标系坐标X2关系为:  X1=R2X2
...............................
(n-2)关节辅助坐标系的坐标Xn-2与(n-1)关节辅助坐标系坐标X(n-1)关系为:  Xn-2=Rn-1Xn-1
(n-1)关节辅助坐标系坐标X(n-1)与子关节辅助坐标Xl系关系为:  Xl=Xn-1
则有:因而在计算子连杆的位姿时,要首先知道其相对位姿(Prs,Rrs)。

假设父连杆与子连杆通过n个关节连接,每个关节只能做旋转运动,组合关节可以看成是一个个关节重叠在一起,可以看出0关节旋转带动1关节旋转,1关节旋转带动2关节旋转,......(n-2)关节旋转带动(n-1)关节旋转,(n-1)关节旋转带动子连杆旋转,一般来说,后一关节与前一关节的旋转轴是垂直的,所有关节的旋转轴都是汇聚在一点的,(n-1)关节可以看成是固结在子连杆上。在父连杆的关节处建立一个局部辅助坐标系,其一轴与0关节的旋转轴重合,在子连杆上关节处建立一个局部辅助坐标系,其一轴与(n-1)关节的旋转轴的重合;在每一个关节上建立一个辅助坐标系,其一轴与其旋转轴重合。一般来说关节转动时,带动子连杆旋转,关节坐标其原点为子连杆与父连杆连接处。
假设初始子连杆坐标系原点相对于子连杆辅助坐标系的偏移为b,关节相对父连杆的偏移为a(父坐标系下表示),则有:
父连杆辅助坐标系的坐标Xg与0关节辅助坐标系坐标X0关系为:Xg=R0X0
0关节辅助坐标系的坐标X0与1关节辅助坐标系坐标X1关系为:  X0=R1X1
1关节辅助坐标系的坐标X0与2关节辅助坐标系坐标X2关系为:  X1=R2X2
...............................
(n-2)关节辅助坐标系的坐标Xn-2与(n-1)关节辅助坐标系坐标X(n-1)关系为:  Xn-2=Rn-1Xn-1
(n-1)关节辅助坐标系坐标X(n-1)与子关节辅助坐标Xl系关系为:  Xl=Xn-1
则有:
Xg=R0X0
     =R0(R1X1)
     =R0R1X1
    ......
    =R0R1......RnRn-1Xn-1
    =(R0......Rn-1)(b+R's,jXs)

=Rj(b+R's,jXs)

而父连杆辅助坐标系坐标与父连杆局部坐标关系为:
 Xp=a+R'j,pXg
     =a+R'j,pRjb+R'j,pRjR's,jXs

所以:

Prs=a+R'j,pRjb
Rrs=R'j,pRjR's,j
其中Rj表示关节旋转矩阵,R's,j表示子坐标系子连杆辅助关节坐标系中的姿态矩阵,一般为R'j,p表示父连杆辅助坐标系在父坐标系中的姿态转矩阵,一般姿态转矩阵是不变化的,前后两个坐标系如果是平行的话,这个就是单位矩阵,则变换公式会更简单。

另外如果i个关节与(i-1)关节之间的坐标轴不平行的话,Ri=R'iRaxis,=其中R‘i表示i轴相对于(i-1)轴的旋转,Raxis表示轴的旋转.如果限定旋转轴总是关节坐标系的x轴,则:

|   1       0             0     |

Raxis= |   0     cosθ     -sinθ  |

|   0     sinθ        cosθ |

其中θ是该关节的转角。

另外,关节处一般为组合关节,即实现了1~3自由度,通过1~3电机,分别实现Roll,Pitch和Yaw三种动作。Nao机器人一般每个关节实现2个自由度,除了胯关节以外,其余关节姿态都是三轴对应,即姿态矩阵为单位矩阵。对于胯关节,第一个轴是沿Y_Z方向的。采用欧拉角控制的方式要注意“万向节死锁问题” ,这可能也就是为什么Nao大部分关节为1~2自由度,而胯关节处其中之一有倾斜的原因吧。

在实现这三个旋转轴时一定是使它们两两垂直,所以在初始化时Rj为单位矩阵,a,b很容易获得,而连杆姿态转换矩阵也比较容易。

一般三个关节的原点是重合的,各个子关节转轴是相互垂直的,子连杆连接到组合关节处时可以看成通过一个个关节然后连接到父连杆上的,将其看成固定转换顺序

所以Rj=RRollRpitchRYaw
             |   1       0              0      |      |  cosβ    0      sinβ      |        |    cosγ     -sinγ     0     | 
          = |   0     cosα       -sinα  |  *   |   0         1         0        |  *    |    sinγ       cosγ     0     | 
             |   0     sinα        cosα  |       |   -sinβ    0     cosβ    |        |      0            0         1     | 

综上,描述子连杆时需要的内容如下:

a---关节原点在父连杆下的位置
b---子连杆原点在关节坐标下的位置
R'j,p---初始时关节相对于父连杆的姿态
R's,j---初始时子连杆相对于关节的姿态
Roll---子连杆绕X旋转角度
Pitch---子连杆绕Y旋转角度
Yaw---子连杆绕Z旋转角度

Rj---关节旋转矩阵
Prs---子连杆相对父连杆位置
Rrs---子连杆相对父连杆姿态
Ps---子连杆的全局位置
Rs---子连杆的全局姿态

前4项内容()不需要计算,系统初始化时设置;

5、6、7项是关节的旋转角度;
后5项内容根据关节旋转矩阵及父连杆位姿的不同进行计算。
如何获得子坐标系相对于父坐标系的姿态矩阵?
姿态矩阵为一个3X3的矩阵,

xX   yX  zX

R=   xY   yY   zY

xZ   yZ   zZ

将子坐标系x轴上单位长度向量向父坐标系三个轴投影的xX,xY,xZ

将子坐标系y轴上单位长度向量向父坐标系三个轴投影的yX,yY,yZ

将子坐标系z轴上单位长度向量向父坐标系三个轴投影的zX,zY,zZ

每个关节可动作顺序可变的前提是:其姿态变换矩阵可交换,即矩阵A,B有AB=BA,而当A , B 均为准对角矩阵(准对角矩阵是分块矩阵概念下的一种矩阵。即除去主对角线上分块矩阵不为零矩阵外,其余分块矩阵均为零矩阵),且对角线上的子块均可交换,则A , B 可交换。

矩阵可交换的条件

父连杆、子连杆及关节相关推荐

  1. 二连杆纯连杆动力学建模——LangrageEquation with Matlab

    运用拉格朗日方程建立二连杆的纯连杆动力学方程,通过推导其过程明白原理.通过优化程序向多连杆动力学过度,方便后期计算n连杆动力学控制做基础. 我首先通过笔算整整算了10页纸,和参照书本结果一直.然后进行 ...

  2. 总结vue中父向子,子向父以及兄弟之间通信的几种方式

    子向父方式1:通过props,如例子中子组件test1.vue向父组件App.vue传值 App.vue代码 <template><div id="app"> ...

  3. 强转类型,flash声音,父与子的交互

    类名(对象)-->强转类型 每个MC都可以有自己的声音,并且被控制 Sound可播放声音 播放时返回声音控制类用于控制声音大小等 父与子 子swf.parent为顶级的情况下 swf.paren ...

  4. 父与子的编程之旅:与小卡特一起学Python.pdf

    下载地址:网盘下载 编辑推荐 编程是一项充满乐趣的挑战,想要上手也非常容易!这本<父与子的编程之旅:与小卡特一起学Python>中,Warren和Carter父子以亲切的笔调.通俗的语言, ...

  5. angularjs中父,子,兄之间controller值得传递

    使用angularjs,发现controller间的值传递,比较麻烦的,以后几篇文章会陆续说几种方法. 一,angularjs $broadcast $emit $on的处理思想 在一个control ...

  6. CSS父级子级学习总结

    CSS 父级子级 http://www.divcss5.com/rumen/r239.shtml 1.认识了解 简单讲CSS父级 CSS子级是相对而言,如一个DIV "A"被另外一 ...

  7. 【讨论贴】关于父实子虚的疑问???

    关于这篇文章,还没有得到最后答案,只是在这里记录一笔,但是欢迎讨论~~将来解决了问题,再专门出贴解答~ 父实子虚就是:父类非虚函数,子类继承变成虚函数,会发生什么 昨天就提问了,但是没有满意的答案,地 ...

  8. 父与子的编程之旅 python 3 pdf_《父与子的编程之旅》嵌套循环例题解析

    <父与子的编程之旅>,11.4可变嵌套循环的问题解答. numBlocks 书里是Python2.X,我的是Python3.X,原理没有差别. 分析如下: 0.手动输入input 当 in ...

  9. Vue.js-Day04-AM【父子组件通信(父传子、子传父)、动态组件、组件的生命周期、动画】

    Vue.js实训[基础理论(5天)+项目实战(5天)]博客汇总表[详细笔记] 目   录 1.复习父子组件通信 1.1.父传子(自定义属性) 1.2.子传父(自定义事件) 2.动态组件 2.1.实现 ...

最新文章

  1. 为什么要学习Python编程语言?哪些人适合学习Python?
  2. java nio 断开连接_浅尝Java NIO与Tomcat连接调优
  3. python输出程序运行时间_Python计算程序运行时间—time.time()、time.clock()
  4. listview 打开文件 c#_.NET CORE(C#) WPF简单菜单MVVM绑定
  5. 反制爬虫之Burp Suite RCE
  6. MySQL—通过Adjacency List(邻接表)存储树形结构
  7. apache启动报错记录
  8. 大数据学习(07)--MapReduce
  9. JQuery Datatables editor 行内编辑功能
  10. Ionic 框架宣布 2019 年将正式支持 Vue 和 React
  11. 黑马程序员_Java基础面向对象
  12. Java-Collections的sort方法对 list 进行排序
  13. [Active Learning] Multi-Criteria-based Active Learning
  14. java使用RunTime调用windows命令行
  15. SQLite之C++封装库CppSQLite使用方法
  16. linux内核编程之内核定时器
  17. opencv c++讲解jzg mxy tyd_python看代码就行
  18. 原生AJAX GET请求
  19. 用vue+vant框架写手机端
  20. android 打电话区号,Android Q新功能首曝:漫游自动加拨国际区号

热门文章

  1. jxTMS设计思想之功能点
  2. Automatically Labeled Data Generation for Large Scale Event Extraction
  3. Kubernetes 学习19基于canel的网络策略
  4. rm 命令删除除指定文件外的所有文件,非常简单
  5. IPv6有哪些优势?
  6. 2022年全球市场水果去皮机和榨汁机总体规模、主要生产商、主要地区、产品和应用细分研究报告
  7. 人像 matting 系列综述
  8. 数学建模求大师帮助,急
  9. 西门子博图功能指令(反序列化)
  10. ABOV(14) UART