chrono core - 系统
2026/6/9 7:59:39 网站建设 项目流程

原文链接:https://api.projectchrono.org/10.0.0/simulation_system

目录

  1. 仿真系统总览
  2. 两大核心系统:NSC 与 SMC
  3. 时间积分器(Time steppers)
  4. 求解器(Solvers)
  5. 碰撞相关全局参数
  6. 代码示例(C++ / PyChrono)
  7. 选型与调优总结

1. 仿真系统总览

ChSystem是 Chrono 仿真的核心顶层容器,所有仿真对象(刚体、约束、载荷、有限元网格等)都由它统一管理、调度与求解,是整个仿真程序的基石。

基础特性

  1. ChSystem抽象基类,无法直接实例化,必须使用它的两个派生类:ChSystemNSCChSystemSMC
  2. 通过Add()/Remove()方法向系统添加、移除仿真实体。
  3. 标准仿真开发流程:
    1. 实例化ChSystemNSCChSystemSMC
    2. 向系统添加刚体、约束、载荷等对象
    3. 配置时间积分器、求解器、碰撞参数
    4. 启动动态仿真循环

核心可调参数

绝大多数仿真稳定性、精度、性能问题,都来自以下三类配置:

  • 时间积分器:控制时间推进算法与仿真步长
  • 求解器:计算加速度、约束反力、接触力(仿真主要性能瓶颈)
  • 碰撞参数:修正物体穿透、优化堆叠/低速接触稳定性

补充:若仿真场景无碰撞、无接触ChSystemNSCChSystemSMC可任意选用,二者表现完全一致。


2. 两大核心系统(NSC 与 SMC)

根据接触求解算法区分两大系统,也是 Chrono 最核心的分类,需根据场景严格选择。

2.1 ChSystemNSC(非光滑接触系统)

  • 原理:采用互补求解器处理硬接触,将碰撞、约束视为刚性几何约束,不引入人工刚度项。
  • 优势:支持大仿真步长,计算效率高,刚体几乎无穿透。
  • 适用:纯刚体机构、车辆、工程机械、刚体堆叠等硬接触场景

2.2 ChSystemSMC(光滑接触系统)

  • 原理:采用罚函数法,将接触等效为弹簧-阻尼模型,允许物体产生微小穿透。
  • 优势:算法通用,适配柔性接触、颗粒、软体、大变形结构。
  • 劣势:接触刚度越大,要求仿真步长越小,高刚度场景计算效率偏低。
  • 适用:颗粒仿真、软碰撞、轮胎形变、FEA 柔性耦合。

3. 时间积分器(Time steppers)

时间积分器也叫时间步长器,作用是通过数值积分算法,在单个仿真步内更新所有对象的位置、速度、姿态等状态。

配置方式(二选一)

  1. 推荐写法:创建积分器实例,通过SetTimestepper()挂载到系统(支持自定义积分器)。
  2. 快捷写法:直接调用SetTimestepperType()选用官方预设积分器。

主流内置积分器详解

积分类型精度核心特性适用范围限制
EULER_IMPLICIT_LINEARIZED
线性化隐式欧拉(默认)
一阶无嵌套子迭代、运算速度最快;通过稳定算法维持约束闭合NSC 硬接触(DVI)、常规多体、通用场景;FEA 一阶求解高阶动力学精度一般
HHT
希尔伯特-休斯-泰勒隐式积分
二阶需嵌套子迭代;内置可调数值阻尼;约束闭合精度极高FEA 有限元、结构动力学不支持 NSC 硬接触(DVI)
NEWMARK一阶(特殊参数下二阶)FEA 领域经典算法,特性与 HHT 相近结构力学、隐式动力学不推荐用于刚性碰撞

术语说明:一阶/二阶精度:代表积分全局误差随步长变化的阶数,二阶积分精度更高,但计算开销更大。

专属参数配置示例

HHT 积分器支持自定义数值阻尼系数Alpha,C++ 示例:

// 强制转换为 HHT 积分器并设置参数if(automystepper=std::dynamic_pointer_cast<chrono::ChTimestepperH>(my_system->GetTimestepper())){mystepper->SetAlpha(-0.2);}

4. 求解器(Solvers)

求解器由时间积分器调用,每一个仿真步负责求解系统的未知加速度、约束反力、接触力,是仿真最大的算力瓶颈。

配置方式(二选一)

  1. 推荐写法:自定义求解器实例,通过SetSolver()挂载。
  2. 快捷写法:调用SetSolverType()选用官方预设求解器。

主流迭代求解器能力对照表

求解器类型收敛特性支持能力适用场景
PSOR精度较低,复杂模型易收敛停滞支持 NSC 硬接触(DVI)小型模型、对精度要求低的快速仿真
APGD收敛性优秀、精度高支持 NSC 硬接触(DVI)中大型刚体模型、工程高精度仿真
BARZILAIBORWEIN收敛稳定,抗大质量比能力强支持 NSC 硬接触(DVI)含轻重搭配构件的复杂机构、连杆系统
MINRES收敛表现良好不支持 NSC 硬接触,仅适配 FEA纯有限元结构仿真
ADMM + PardisoMKL全能型同时支持 NSC 硬接触 + FEA刚体-柔性耦合大型模型;依赖 PardisoMKL 模块

关键配置:最大迭代次数

对于含大量关节、约束、接触的模型,迭代次数不足会导致约束失效、模型错位、仿真发散,必须手动调大。

// C++ 示例:设置迭代求解器最大迭代数为 400my_system->GetSolver()->AsIterative()->SetMaxIterations(400);

进阶参数示例

部分求解器拥有专属配置,以 MINRES 对角预处理为例:

if(automsolver=std::dynamic_pointer_cast<chrono::ChSolverMINRES>(my_system->GetSolver())){msolver->SetDiagonalPreconditioning(true);// 开启对角预处理,提升收敛速度}

5. 碰撞相关全局参数

针对含碰撞、接触的仿真,系统提供两个核心阈值参数,用于修正数值误差导致的穿透、抖动问题。

5.1 最大穿透修复速度(Max. recovery speed)

  • 接口:SetMaxPenetrationRecoverySpeed(double value)
  • 作用:当因积分误差、初始错位等问题导致物体相互穿透时,系统会以该速度将物体拉回合法位置。
  • 调优规则:
    • 数值过大:修复动作剧烈,堆叠物体易弹跳、抖动;
    • 数值过小:穿透修正乏力,物体逐步相互嵌入;
    • 常规推荐值:0.1 ~ 0.5

5.2 最小反弹速度(Min. bounce speed)

  • 接口:SetMinBounceSpeed(double value)
  • 作用:物体入射速度低于该阈值时,强制回弹系数为 0(完全不反弹),用于稳定堆叠、静置接触。
  • 调优规则:
    • 数值偏大:堆叠稳定性强,但物理真实性下降;
    • 数值偏小:碰撞更贴近真实,但低速接触易产生持续微反弹;
    • 常规推荐值:0.05 ~ 0.2

6. 代码示例(C++ / PyChrono)

6.1 C++ 完整示例

#include"chrono/physics/ChSystemNSC.h"#include"chrono/physics/ChBody.h"#include"chrono/solver/ChSolverAPGD.h"#include"chrono/timestepper/ChTimestepperHHT.h"intmain(){// 1. 创建 NSC 刚体系统chrono::ChSystemNSC sys;// 2. 配置求解器(APGD + 最大迭代数)sys.SetSolverType(chrono::ChSolver::Type::APGD);sys.GetSolver()->AsIterative()->SetMaxIterations(400);// 3. 配置 HHT 时间积分器并设置参数sys.SetTimestepperType(chrono::ChTimestepper::Type::HHT);if(autohht=std::dynamic_pointer_cast<chrono::ChTimestepperHHT>(sys.GetTimestepper())){hht->SetAlpha(-0.2);}// 4. 碰撞全局参数sys.SetMaxPenetrationRecoverySpeed(0.2);sys.SetMinBounceSpeed(0.1);// 后续:添加刚体、可视化、仿真循环return0;}

6.2 PyChrono 完整示例

importpychronoaschronoimportpychrono.irrlichtasirr# 1. 创建 NSC 系统sys=chrono.ChSystemNSC()sys.SetGravitationalAcceleration(chrono.ChVector3d(0,-9.81,0))# 2. 求解器配置sys.SetSolverType(chrono.ChSolver.Type_APGD)iter_solver=sys.GetSolver().AsIterative()iter_solver.SetMaxIterations(400)# 3. 时间积分器sys.SetTimestepperType(chrono.ChTimestepper.Type_HHT)hht_stepper=sys.GetTimestepper()ifisinstance(hht_stepper,chrono.ChTimestepperHHT):hht_stepper.SetAlpha(-0.2)# 4. 碰撞参数sys.SetMaxPenetrationRecoverySpeed(0.2)sys.SetMinBounceSpeed(0.1)# 5. 基础刚体与可视化(省略重复代码)vis=irr.ChVisualSystemIrrlicht()vis.AttachSystem(sys)vis.Initialize()# 仿真循环step=0.01whilevis.Run():vis.BeginScene()vis.Render()vis.EndScene()sys.DoStepDynamics(step)

7. 选型与调优总结

7.1 组合选型方案(直接套用)

  1. 常规刚体/车辆/硬接触(首选)
    系统:ChSystemNSC
    积分器:EULER_IMPLICIT_LINEARIZED(默认)
    求解器:APGD/BARZILAIBORWEIN
    迭代数:300 ~ 500
    仿真步长:0.01 ~ 0.02 s

  2. 纯有限元 FEA / 结构动力学
    系统:ChSystemNSC/ChSystemSMC
    积分器:HHT/NEWMARK
    求解器:MINRES
    步长:根据结构刚度适当缩小

  3. 颗粒/软碰撞/形变仿真
    系统:ChSystemSMC
    积分器:EULER_IMPLICIT_LINEARIZED
    求解器:PSOR/APGD
    步长:随接触刚度增大而缩小

7.2 常见问题排查

  1. 关节松动、约束错位 → 增大求解器最大迭代次数
  2. 物体相互穿透 → 调大MaxPenetrationRecoverySpeed;SMC 场景同步增大接触刚度、缩小步长
  3. 堆叠物体持续抖动 → 调大MinBounceSpeed,降低穿透修复速度
  4. 仿真运行缓慢 → 更换简易求解器、降低迭代数、选用一阶积分器
  5. HHT 积分器报错 → HHT 不支持 NSC 硬接触,更换隐式欧拉积分器

7.3 核心禁忌

  1. NSC 硬接触场景,禁止使用 HHT / NEWMARK 积分器;
  2. NSC 场景禁止使用 MINRES 求解器;
  3. SMC 系统中,接触刚度与仿真步长必须匹配,高刚度搭配大步长会直接导致仿真发散。

补充术语对照表

英文术语中文释义
Non Smooth Contacts (NSC)非光滑接触(刚性约束接触)
SMooth Contacts (SMC)光滑接触(罚函数柔性接触)
Time stepper / Integrator时间积分器 / 时间步长器
Iterative solver迭代求解器
Penetration recovery穿透修复
Restitution回弹系数
DVI变分不等式(NSC 硬接触底层算法)

需要我结合FEA 柔性体场景,给你一套专属的积分器+求解器参数搭配吗?

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询