向(羽毛石)铰接式刚体模型添加执行器或力


9

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

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

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

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

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

Answers:


3

执行器部队

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

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

书中的动态算法在广义的位置来描述,广义速度˙ q,广义速度¨ q,和广义力τ。如果你有它的的翻译被描述的柱状接合部q 然后在该联合线性力通过描述τ 。如果你有它的自转被描述的回转(铰链)联合q Ĵ然后τ Ĵ代表在该关节的扭矩。qq˙q¨τq一世τ一世qĴτĴ

取决于您对执行器的了解,如何计算。如果仅想施加力或扭矩,则将这些值放入τ的相应值中。一旦有了它们,它们就可以作为前向动力学算法的输入,以计算系统对作用力的响应。ττ

注意身旁:费瑟斯用途表示有源环路闭合力。从你的模型描述似乎没有被任何运动的循环,因此τ 一个不适用。τ一个τ一个

重力加速度:

Featherstone在基部施加重力加速度,并使其通过算法传播到树上。这是在RNEA表5.1中的行中完成的

一个0=-一个G

除了这样做,您还可以修改行

F一世=一世一世一个一世+v一世×一世一世v一世

F一世=一世一世一个一世-一世X0一个G+v一世×一世一世v一世

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

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

空间代数不仅仅是3D向量的级联。前者表示在固定坐标系下的刚体运动,而后者表示在与身体一起移动的点处。结果,空间加速度是空间速度的时间导数。在使用两个3-D方程的经典表示法中,情况并非如此(Featherstone的书的2.11节):

ω

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

空间加速度描述了流动点与原点一致的线性和角速度。这里的“流量”是指矢量量(线速度和角速度)随时间变化的方式。


我一直在努力实现此算法,但是在此过程中,我尽力做到有条不紊,以确保最基本的方面每次都能按预期工作。为此,我进行了许多实验,可以计算出精确的解,以便可以比较模拟的解。
Chuck

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

我需要一种增加重力的方法,因为我不能仅仅将其放在固定基座的z轴上;只有在北极,重力才能正常工作。本质上,我不在乎地表以下的力,我只在乎摆的进动。
Chuck

问了一个有关如何处理固定关节的相关问题
Chuck

2

如果您还没有接触到刚体动力学库(RBDL),您可能想看看它们是如何实现的,和/或联系作者Martin Felis。


Barrett,我是在几周前找到RBDL的,虽然有时我来回搜集信息,但它是用C ++编写的,其方法难以遵循代码。例如,运动学代码中有一行显示为G.block(0,q_index,6,1) = base_to_body.apply(model.X_base[j].inverse().apply(model.S[j]));。那么,该功能apply做什么?好吧,无论什么类,我都必须转到头文件base_to_body,但这是关节还是身体?另外,类似model.base[j].inverse().apply(model.S[j])的东西也不是特别清楚。
Chuck

这并不意味着它有时没有用,但是对我来说,从RBDL中获得理解需要花费很多精力。
Chuck

欢迎使用机器人技术 Barrett Ames,感谢您的回答,但我们希望答案尽可能独立。链接容易腐烂,因此,如果链接到内容的确腐烂,依赖链接的答案可能会变得无用。如果您从链接中添加更多上下文,那么人们很可能会发现您的答案很有用。
Mark Booth
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.