递归牛顿-欧拉动力学算法是一种高效的动力学计算方法,它有正和逆两种形式,我们先来看正动力学,也就是给定关节力矩求机器人的运动。下面的算法来自于论文《Lie Group Formulation of Articulated Rigid Body Dynamics》,我们更正了原文中的一处错误。该算法使用了李群的表述,其优点是形式简洁、并有清晰的数学含义。该算法适用于三维空间,每步正动力学计算过程包含三个递归过程:1. 前向计算位姿和速度;2. 反向计算广义惯量和偏置力;3. 前向计算加速度。

具体实现(Mathematica代码)

(*Initialization 运动参数初始化*)

time = 2000; dt = 0.0005;

Table[mass[i] = 1; Gravity[i] = grav*mass[i]*{0, 0, -1, 0, 0, 0}, {i, 0, n, 1}];

Table[g[i, i + 1, 0] = RPToH[Id[3], {0, 0, (La[i] + La[i + 1])/2}], {i, 0, n - 1, 1}];

q = dq = ddq = ConstantArray[0, n];

Table[V[i] = dV[i] = ConstantArray[0, 6], {i, 0, n, 1}];

Table[M[i] = Id[6]; \[Tau][i] = 0, {i, n}];

F[n + 1] = ConstantArray[0, 6];

g[n, n + 1] = g[0, 0] = Id[4];

q = ConstantArray[Pi/2, n];

\[CapitalPi][n + 1] = Id[6]*0.0;

\[Beta][n + 1] = ConstantArray[0, 6];

Table[

qList = {qList, q};

gList = {gList, g[0, 4]};

(*Forward 前向递归*)

dq = dq + ddq*dt;

q = q + dq*dt;

For[i = 1, i <= n, i++,

g[i - 1, i] = TwistExp[\[Xi]r[i], q[[i]]].g[i - 1, i, 0];

g[0, i] = g[0, i - 1].g[i - 1, i];

V[i] = Ad[Iv[g[i - 1, i]]].V[i - 1] + \[Xi]s[i]*dq[[i]];

\[Eta][i] = ad[V[i] - \[Xi]s[i]*dq[[i]]].\[Xi]s[i]*dq[[i]];

];

(*Backward 反向递归*)

For[i = n, i >= 1, i--,

\[Tau][i] = 0;

Mh[i] = M[i] + T[Ad[Iv[g[i, i + 1]]]].\[CapitalPi][i + 1].Ad[Iv[g[i, i + 1]]];

Fext[i] = T[Ad[RPToH[R[g[0, i]], {0, 0, 0}]]].Gravity[i];

\[ScriptCapitalB][i] = -T[ad[V[i]]].M[i].V[i] - Fext[i] + T[Ad[Iv[g[i, i + 1]]]].\[Beta][i + 1];

\[CapitalPsi][i] = 1/(\[Xi]s[i].Mh[i].\[Xi]s[i]);

\[CapitalPi][i] = Mh[i] - \[CapitalPsi][i]*KroneckerProduct[Mh[i].\[Xi]s[i], \[Xi]s[i].Mh[i]];

\[Beta][i] = \[ScriptCapitalB][i] + Mh[i].(\[Eta][i] + \[Xi]s[i]*\[CapitalPsi][i]*(\[Tau][i] - \[Xi]s[i].(Mh[i].\[Eta][i] + \[ScriptCapitalB][i])));

];

(*Forward 前向递归*)

For[i = 1, i <= n, i++,

ddq[[i]] = \[CapitalPsi][i]*(\[Tau][i] - \[Xi]s[i].Mh[i].(Ad[Iv[g[i - 1, i]]].dV[i - 1] + \[Eta][i]) - \[Xi]s[i].\[ScriptCapitalB][i]);

dV[i] = Ad[Iv[g[i - 1, i]]].dV[i - 1] + \[Xi]s[i]*ddq[[i]] + \[Eta][i]];

, {t, time}];

仿真结果

我们选择4个连杆的例子进行仿真试验,连杆之间用转动关节连接,机器人初始处于水平静止状态,所有关节的力矩为0,所以机器人将在重力作用下自由下落,仿真结果如下图所示(显示了Y-Z平面)。

正确性验证

为了验证算法的正确性,和第三方的仿真软件进行对比,这里我们选取了Working Model软件(一款商业二维动力学仿真软件)。Working Model中的仿真过程如下图所示。

我们选择末端连杆(也就是第4个连杆)质心的Y坐标进行对比,结果如下图左所示。二者的误差(下图右)在-0.001m~0.001m之间(每个连杆的长度为10cm,误差<1mm),说明我们算法基本是正确的。

下图中的例子是10自由度的连杆只在重力作用下(关节力矩为0)的运动,每相邻的两个关节旋转轴相互垂直。闻到了一丝混沌(Chaos)的味道!这时要对比验证可以借助三维动力学仿真软件,例如MSC Adams。但是太繁琐,我懒得做了:-)

双盘转子动力学仿真c语言程序,递归牛顿欧拉(正)动力学仿真相关推荐

  1. 递归牛顿欧拉(正/逆)动力学仿真

    递归牛顿-欧拉方法(Recursive Newton-Euler Method)是一种高效的动力学计算方法,尤其适用于串联多刚体系统,例如串联机械臂.递归牛顿-欧拉方法有正和逆两种形式,本文我们先来看 ...

  2. 牛顿-欧拉迭代动力学算法

    牛顿-欧拉迭代动力学算法 (1)连杆之间角/线加速度变换方程(向外迭代法): (1)iω˙i→移动关节:式(6−33)式(6−32)i+1ω˙i+1{^i\dot{\omega}_i}\xrighta ...

  3. 机械臂动力学建模(3)- Newton Euler牛顿欧拉算法

    Newton Euler算法 参考 思路(参考丁教授第二讲ppt) 矢量在不同坐标系下的转换关系 速度的递推 重心处的力和力矩 力的递推 完整公式 代码 参考 北航丁希仑教授的机器人动力学课件: 检出 ...

  4. 机械手位置控制——欧拉-拉格朗日方程仿真

    机械手位置控制之欧拉-拉格朗日方程仿真 问题背景 控制率设计 仿真参数 仿真结果 (a)第一组期望位置仿真 (b)第二组期望位置仿真 仿真方法说明 1.通过Matlab的内置函数求解 2.通过simu ...

  5. 机器人学之动力学笔记【9】—— 牛顿-欧拉 递推动力学方程

    机器人学之动力学笔记[9]-- 牛顿-欧拉 递推动力学方程 1. 定义线加速度 2. 定义角加速度 3. 推导线加速度 4. 推导角加速度 5. 质量分布(Mass Distribution) 6. ...

  6. 5. 机器人动力学---串联机构牛顿欧拉方程

    1. 引言 这篇文章主要介绍了串联机构牛顿欧拉方程的基本原理,文章提到了惯性系平权性,速度叠加原理等对于理解机器人动力学十分关键的问题.具体内容请参考古月居

  7. 欧拉梯形格式C语言,常微分方程数值解法 欧拉格式和梯形格式比较.doc

    常微分方程数值解法 欧拉格式和梯形格式比较 甥啼伐慑穗策步怀冻窿连鼓枉磷浮血腔氓玩伶樱拨惊款蹈耀突菩屠赘颧泥整抽蟹寥毋城舶败袍龙垫炯听记捅碉钠辞摆棒猩饯钒轮剂厅戎懦汝差栅寿坪赞壁洒日朵谰丛沛称怜给吟戏 ...

  8. 欧拉梯形格式C语言,常微分方程数值解法欧拉格式和梯形格式的比较.doc

    常微分方程数值解法欧拉格式和梯形格式的比较 PAGE PAGE 4 年级00000班号0000学号0000专业000姓名00000实验名称000000实验类型设计型综合型创新型实验目的或要求常微分的数 ...

  9. 电子琴仿真c语言程序,矩阵键盘模拟电子琴C语言程序设计

    原标题:矩阵键盘模拟电子琴C语言程序设计 //24c08地址为0xa0 #include #define uchar unsigned char unsigned char code table[]= ...

最新文章

  1. 安卓学习第36课——PopupWindow
  2. 6.Mybatis中的动态Sql和Sql片段(Mybatis的一个核心)
  3. CAS 服务器端取消 https的配置 方法
  4. 新浪微博开放平台之OAuth2.0认证
  5. linux安装python_VTK:华为笔记本电脑+深度deepin-linux+python下安装和入门
  6. 理解进程调度时机跟踪分析进程调度与进程切换的过程
  7. 性能测试的几个参数概念
  8. from robot.api import logger
  9. deep learning 深度学习中英文版下载地址
  10. ESP8266--接线与基础指令(讲解与运用)
  11. Linux 命令(126)—— ssh 命令
  12. 如何在word2016中使用自带的公式编辑器
  13. android 模拟器 超时,Appcelerator Studio超时等待Android模拟器启动
  14. 关于信息安全产业的调研报告
  15. 大数据技术_ 基础理论 之 数据挖掘与分析
  16. 解决 git reject
  17. vue router 嵌套、父子、多个路由跳转传值获取不到参数undefined
  18. 《Docker》高级篇
  19. 2015年讲师评选正式开始,培训行业讲师年终总结啦!!
  20. google 安装去广告插件

热门文章

  1. Oracle SQL Loader的详细语法
  2. 驾驶舱、移动端、分析报告,这几个可视化布局思路,拿来就能用
  3. 如何用FineReport制作一张报表(二)
  4. 自助式BI工具分享:浅析FineBI
  5. Python入门学习指南--内附学习框架
  6. 神话与谬误:争论C++前你应当知道什么
  7. 用VC写Assembly代码(5) --字符串
  8. java的servlet是干嘛的_Servlet能够做什么?
  9. python自动化是什么意思_python appium自动化是什么?
  10. excel教程自学网_想学习PS和视频剪辑,自学,有哪些好的学习网站和资源吗?