Skip to content

结构

抽象和具体类型

代码首先定义了一个抽象类型AbstractStructure,作为各种机械结构的基本类型。然后定义了StructureStructureState类型作为继承自这个抽象类型的具体类型。StructureState类型保存系统的状态,包括系统(system)及其各个成员(members)的位置、速度、加速度、力和其他相关变量。

连接

提供的代码是一组Julia函数和结构,用于建模和管理由弹簧和阻尼器连接的刚体系统的连接性和约束。该代码结构化地处理系统的各个方面,包括创建连接、索引约束以及对刚体上的位置点(loci)进行编号。让我们分解主要组件及其用途。

索引约束

index_incstr函数计算并索引刚体的内在约束。它确定每个刚体的内在约束数和自由度(DOF),并创建从刚体ID到这些约束和DOF的系统范围索引的映射。这些信息对于管理约束和求解系统的运动方程至关重要。

index函数将索引扩展到包括刚体和装置。它处理系统的完整、自由和规定坐标,以及装置引入的外在约束。该函数创建从刚体和装置ID到这些坐标和约束的系统范围索引的映射。它还计算系统的总约束数和DOF,确保系统被正确约束。

位置点编号

number函数为刚体上的位置点(loci,即感兴趣的点)分配索引。它创建从刚体ID到这些位置点及其相关坐标的系统范围索引的映射。这种编号对于在应用力或约束时引用刚体上的特定点至关重要。

连接性结构

Connectivity结构封装了系统的索引和编号信息。它将indexnumber函数的结果组合成一个单一的结构,为系统的连接性和约束提供了全面的表示。这个结构可以用来有效地管理和求解系统的运动方程。

状态构造函数

StructureState构造函数初始化系统的状态。它接收bodiesapparatusescnt(一个包含各种索引和编号映射的连接对象)作为输入,并设置各种数组来保存状态信息。这包括位置(q)、速度()、加速度()、力(F)、约束(λ)、附加变量(s)和其他必要数据。system状态被创建为NonminimalCoordinatesState的实例,每个成员的状态是整体系统状态的子视图,允许高效的操作和更新。

结构构造函数

Structure构造函数使用给定的物体集、装置集和连接对象初始化一个结构。它计算维度数量,通过调用StructureState设置初始状态,并对雅可比矩阵和约束进行一致性检查。

更新函数

定义了几个update!函数来根据不同的输入更新结构的状态:

  • update!(st::AbstractStructure; gravity=false)清除力,更新物体和装置,如果指定则应用重力,并组装力。

  • lazy_update!(st::AbstractStructure; gravity=false)执行类似的更新,但使用惰性方法更新物体。

  • update!(st::AbstractStructure, q::AbstractVector, q̇::AbstractVector=zero(q), t::Real=st.state.system.t)使用给定的位置、速度和时间更新系统状态,然后调用主更新函数。

质量矩阵组装

assemble_M!assemble_M⁻¹!及其对应的非修改版本这样的函数组装系统的质量矩阵(M)及其逆矩阵。这些矩阵对于模拟系统的动力学至关重要。它们将单个物体的惯性属性聚合到一个全局质量矩阵中。

约束函数

代码包括计算约束函数(cstr_function)及其雅可比矩阵(cstr_jacobian)的函数。这些对于确保机械系统遵守其约束(如关节或物体之间的其他连接)是必不可少的。

辅助函数

make_auxi_functionauxi_function这样的辅助函数计算附加变量及其雅可比矩阵,这可能对系统中特定类型的约束或力是必需的。

变换矩阵

get_TransMatrix函数生成一个变换矩阵,用于组装辅助雅可比矩阵,特别是对系统中的集群关节。这个矩阵有助于在不同参考系之间转换坐标和约束。

构建质量矩阵

build_mass_matrices函数返回各种质量矩阵及其变换的元组,为系统动力学的模拟和分析提供了一组全面的矩阵。

总的来说,该代码为初始化、更新和管理复杂机械系统的状态和约束提供了一个强大的框架。它利用Julia的高效数组操作和视图功能,确保系统可以准确和高效地进行模拟。