我正在做一个项目,在这个项目中,我需要对一个系统进行建模,该系统本质上是由一系列安装在基座上的球窝接头组成的,该球窝接头又连接到棱柱形接头(导轨)上。

我已经阅读了Roy Featherstone的“刚体动力学算法”,并且还阅读了Springer机器人技术手册(也由Featherstone撰写)中的“动力学”部分。

我花了很长时间才习惯使用他的“空间矢量”和“空间矩阵”表示法,但是在手工重新创建了他所有的表示法后,结果证明是将3x3和3x1矩阵和向量连接成6x6和6x1矩阵和向量的一种好方法。当他劫持一些标准符号时,他发明的用于执行运算的数学可能有点乏味,但是总体而言,它非常紧凑,非常容易在MATLAB中实现。

我的问题是:如何在模型中添加执行器?他逐步明确地配置了关节定义,链接定义等,但是当涉及到执行器或作用力时,他会说:“只要在此处添加$ \ tau_a $,鲍勃就是你的叔叔!” -完全没有讨论。他建议在《机器人手册》中给固定基座引入错误的加速度以添加重力项,但没有显示如何在局部坐标中添加它,也没有提及如何添加执行器输入。

任何帮助将不胜感激。我曾考虑过从另一本书开始,但这将是我花费大量时间重新适应另一种符号的方式。我想继续前进,但是我觉得我离终点线只有几英寸的距离。

#1 楼

执行器力

我正确吗:您有一个刚性多体系统的理论模型,并且想执行刚性体动力学计算。您已经实现了模型,现在想计算模型在由执行器驱动时的行为。

但是什么是执行器呢?它仅仅是作用在那个关节上的力吗?它是直流电动机型号吗?它是PID控制器吗?

本书中的动力学算法是根据广义位置$ q $,广义速度$ \ dot {q} $,广义速度$ \ ddot {q} $来描述的,和广义部队$ \ tau $。如果您有一个棱柱形关节,其位移用$ q_i $描述,则该关节处的线性力用$ \ tau_i $描述。如果您有一个旋转(铰链)关节,其旋转由$ q_j $描述,则$ \ tau_j $表示该关节处的扭矩。

取决于您对执行器的了解, $被计算。如果只想施加力或扭矩,则将这些值放入$ \ tau $的相应值中。一旦有了它们,它们就可以作为前向动力学算法的输入,以计算系统对施加力的响应。 。从您的模型描述来看,似乎没有任何运动学循环,因此$ \ tau ^ a $不适用。

引力加速度:

羽毛石在以下位置施加重力加速度基础并让其通过算法在树中传播。这是在RNEA表5.1中的行中完成的

$ a_0 = -a_g $。 br /> $ f_i ^ B = I_i a_i + v_i \ times ^ * I_i v_i $



$ f_i ^ B = I_i(a_i-{} ^ iX_0a_g) + v_i \ times ^ * I_i v_i $

将引力效果分别应用于每个身体。这引入了额外的计算,但我认为这样做没有任何好处。

空间代数与3-D向量的级联

空间代数不仅仅是3-D矢量的级联D向量。前者表示在固定坐标系下的刚体运动,而后者表示在与身体一起移动的点处。结果,空间加速度是空间速度的时间导数。在使用两个3-D方程的经典表示法中,情况并非如此(Featherstone的书的2.11节):不在旋转轴上的加速度朝向旋转轴(平面机壳的旋转中心)。在空间代数中,该物体的零空间加速度与表示加速度的框架无关。

空间速度描述了当前与(固定)参考点原点重合的物体点的线性和角速度帧。如果该框架在质心处表示并与全局参考框架对齐,则它似乎是3-D线速度和角速度的简单串联,但是,仅对于这种特定选择的参考框架来说,情况就是这样。用不同的帧表示时,您会得到不同的值,但它仍表示相同的空间速度。

空间加速度表示与原点重合的点的线速度和角速度的流动。这里的“流量”表示矢量量(线速度和角速度)随时间变化的方式。

评论


$ \ begingroup $
我一直在努力实现该算法,但是我一直在尝试尽可能有条不紊的方法,以确保最基本的方面每次都能按预期工作。为此,我进行了许多实验,可以计算出确切的解,以便可以比较模拟的解。
$ \ endgroup $
–卡盘
15年6月24日在13:01

$ \ begingroup $
我一直在研究的最后一个方面是球形接头-获得四元数表示和加速度。对于本实验,我试图通过对地球建模并在表面上放置带有球形接头的摆来模拟福柯摆。这样,我的固定基地就是地球的中心,地球围绕该中心旋转。然后,我可以从地球的旋转中心向上/向下旋转到任意纬度,平移到放置球形关节摆的表面上。
$ \ endgroup $
–卡盘
15年6月24日在13:03

$ \ begingroup $
我需要一种增加重力的方法,因为我不能仅仅将其放在固定基座的z轴上;只有在北极,重力才能正常工作。本质上,我不在乎地表以下的力,我只在乎摆的进动。
$ \ endgroup $
–卡盘
15年6月24日在13:06

$ \ begingroup $
我问了一个有关如何处理固定关节的相关问题。
$ \ endgroup $
–卡盘
15年6月24日在13:59

#2 楼

如果您还没有接触到刚体动力学库(RBDL),则可能需要查看它们的实现方式,和/或与作者Martin Felis联系。

评论


$ \ begingroup $
巴雷特(Barrett),几周前我发现了RBDL,尽管有时我来回搜集信息,但它是用C ++编写的,其方法很难遵循代码。例如,运动学代码中有一行读取G.block(0,q_index,6,1)= base_to_body.apply(model.X_base [j] .inverse()。apply(model.S [j])) ;。那么,该功能适用​​什么呢?好吧,无论base_to_body是什么类,我都必须转到头文件,但这是关节还是身体?另外,诸如model.base [j] .inverse()。apply(model.S [j])之类的东西也不是特别清楚。
$ \ endgroup $
–卡盘
2015年6月19日在13:11



$ \ begingroup $
这并不意味着它有时没有用,但对我来说,要想从RBDL中获得理解就需要付出很多努力。
$ \ endgroup $
–卡盘
15年6月19日在13:12

$ \ begingroup $
欢迎使用机器人技术Barrett Ames,感谢您的回答,但我们希望答案尽可能独立。链接往往会腐烂,因此,如果链接到内容的确腐烂,依赖链接的答案可能会变得无用。如果您从链接中添加更多上下文,那么人们很可能会发现您的答案很有用。
$ \ endgroup $
– Mark Booth♦
15年6月22日在13:41