逆向静力学
所提供的Julia代码定义了一系列函数,这些函数共同执行与机械结构的逆静力学相关的各种计算,特别是涉及电缆和机器人机构的结构。这些函数似乎是更大系统的一部分,可能用于分析和设计张力结构或其他电缆驱动的机器人系统。
build_T 函数构建一个稀疏矩阵 ( T ),将特定物体的坐标映射到全局系统坐标。这是通过迭代提供的索引并将 ( T ) 中的适当条目设置为1来完成的。这个矩阵对于将局部物体坐标转换为全局坐标系至关重要,有助于将单个物体动力学整合到系统级分析中。
build_Ci 函数通过水平连接存储在物体状态缓存中的转置约束矩阵 ( Cpi ) 来创建矩阵 ( Ci )。这用于聚合施加于物体的约束,这对于计算力和确保系统的约束得到满足至关重要。
build_Q 函数生成一个矩阵 ( Q̃ ),用于表示系统的自由坐标和电缆位置之间的关系。这个矩阵是通过迭代结构中的电缆,使用每个电缆连接的物体的坐标和约束来填充的。这个函数在确定系统自由坐标的移动如何影响电缆张力方面起着关键作用。
build_L̂、build_K̂ 和 build_L 函数创建不同类型的矩阵,表示系统中电缆的各种属性。build_L̂ 函数构建一个表示电缆施加力的方向的矩阵,build_K̂ 函数构建一个包含电缆方向和刚度(k值)的矩阵,而 build_L 函数形成一个结合电缆方向和当前长度的矩阵。这些矩阵在静态分析和优化过程中用于模拟不同条件下电缆的行为。
build_Γ 函数定义了一个内部函数 inner_Γ,该函数根据当前状态 ( q ) 计算系统中的力。它清除先前的力,更新物体和电缆的状态,然后组装电缆施加的力。这是确保准确确定系统平衡的重要步骤。
build_Ǧ 函数计算作用于系统的广义力,可选择包括重力作用。这是通过清除先前的力,如果指定则应用重力场,然后基于系统的当前状态组装力来完成的。
make_U 函数定义了一个内部函数 inner_U,该函数构建一个表示驱动对系统影响的矩阵。它计算驱动参数(s和u)的变化如何影响系统坐标,并包含电缆的刚度。
make_Q 函数定义了一个内部函数 inner_Q̌,该函数计算一个向量,表示系统对广义坐标 ( q ) 变化的响应。它使用约束和当前状态来计算自由坐标 ( q̌ ) 如何影响系统的平衡。
check_inverse_sanity 函数检查系统的矩阵 ( B ) 是否适合解决逆静力学问题。它检查 ( B ) 的维度和秩,以确定系统是过约束、欠约束还是确定的,并相应地提供警告或信息。
build_inverse_statics_core 函数设置解决逆静力学问题所需的核心组件,包括约束的雅可比矩阵和零空间矩阵。它根据给定的参考配置和外力初始化系统状态。
build_inverse_statics_for_* 函数生成解决与密度、刚度、静息长度、力和驱动等不同方面相关的特定逆静力学问题所需的矩阵和向量。它们利用 build_inverse_statics_core 设置的核心组件,并根据正在分析的特定方面调整公式。
get_solution_set 函数求解系统矩阵 ( B ) 的特解和零空间基,这些用于找到逆静力学问题的完整解集。
set_restlen! 和 check_restlen 函数管理系统中电缆的静息长度,确保它们是正的,并且电缆中的张力是非负的。这些检查对于维持系统的物理可行性至关重要。
check_actuation 函数通过检查所产生的电缆静息长度和张力是否在可接受范围内来验证提议的驱动的可行性。
最后,get_inverse_func 函数生成一个逆函数,可用于求解达到所需系统状态所需的驱动参数。它设置必要的矩阵和向量,计算解集,并定义一个基于解集计算驱动参数的内部函数。
总的来说,这段代码为分析和解决电缆驱动机械系统中的逆静力学问题提供了一个全面的框架,重点是确保系统的物理可行性和稳定性。
动态松弛
所提供的Julia代码是测地线动态松弛(GDR)方法的实现,这是一种用于解决复杂机械系统(如机器人结构)运动方程的数值技术。GDR方法特别适用于模拟各种约束和力(包括阻尼和重力)下系统的动态行为。
阻尼器函数
代码首先定义了几个用于创建不同类型阻尼器的函数,这些阻尼器是GDR方法中的重要组成部分。阻尼器用于通过耗散能量来控制系统的运动,从而稳定仿真。make_viscous_damper函数创建一个具有恒定阻尼系数c的粘性阻尼器。这种类型的阻尼器提供与速度成正比的线性运动阻力。make_kinetic_damper函数创建一个动能阻尼器,如果输入角度θ为正则返回1,否则返回0,有效地充当方向性阻尼器。make_drift_damper函数创建一个漂移阻尼器,其阻尼系数随输入角度θ线性变化,提供更复杂的阻尼行为。
GDR初始化
initialize_GDR函数为给定的机器人结构设置GDR框架。此函数接受结构和一个可选的重力参数,默认为true。该函数首先构建矩阵Q̃和Γ,这些矩阵对GDR计算至关重要。Q̃矩阵表示系统的广义坐标,而Γ矩阵用于根据系统的当前状态转换这些坐标。
动力学函数
在initialize_GDR函数内,定义了一个嵌套函数𝛚(x)来计算系统的动力学。此函数以状态向量x作为输入,并执行几个步骤来更新系统的状态并计算产生的力。首先,它使用clear_forces!清除结构中任何现有的力。然后,它用update_bodies!更新结构中物体的位置和方向,并用update_apparatuses!更新任何附加装置。如果启用了重力,该函数使用apply_field!对结构施加重力。最后,它用assemble_forces!组装作用于结构的所有力,并返回这些力的负值,用于GDR方法中迭代地将系统放松到平衡状态。
约束函数
initialize_GDR函数还创建了一个约束函数𝐛,用于在GDR过程中强制执行系统的任何约束。此函数确保系统的运动遵守指定的约束,例如保持组件之间的特定距离或角度。
总结
总之,所提供的Julia代码实现了用于模拟机器人系统动力学的测地线动态松弛方法。它定义了各种类型的阻尼器来控制系统的运动,并设置了GDR框架所需的必要组件,包括动力学和约束函数。这种模块化和可扩展的设计允许在各种力和约束下模拟复杂的机器人结构,使其成为机器人学家和工程师的强大工具。