核心特性
Simbody 是一个高性能的 C++ 多体动力学(Multibody Dynamics)与物理仿真库,主要用于模拟铰接式(articulated)生物力学与机械系统,例如人体骨骼与肌肉系统、机器人、车辆及其他由刚体通过关节连接而成的复杂系统。它由斯坦福大学生物工程系开发和维护,是 SimTK 项目的一部分,广泛用于科研、教育以及开源仿真项目。
- 高效的数值算法:基于符号/数值混合方法(如 Featherstone 算法),计算速度快,适合实时或大规模仿真。
- 支持建模原语:包括刚体、关节、约束、力元件(如弹簧、肌肉模型)等。
- 积分器支持:提供显式与隐式积分器(如 Runge-Kutta、半隐式 Euler、Symplectic Euler 等)。
- 精确处理:广义坐标、广义速度、约束方程和拉格朗日乘子。
- 开源跨平台:采用 Apache 2.0 许可,支持 Linux、macOS、Windows。
- 集成性:与 OpenSim 紧密集成,支持生物力学建模与分析。
基本使用方式(C++ 示例)
一个最简单的 Simbody 程序流程如下:
#include <Simbody.h>
using namespace SimTK;
int main() {
// 1. 创建多体系统
MultibodySystem system;
// 2. 定义刚体(例如一个质量块)
Body::Rigid body(MassProperties(1.0, Vec3(0), UnitInertia(1)));
// 3. 定义关节(例如将刚体通过球铰连接到地面)
MobilizedBody::Ball groundToBody(system.getGround(), Transform(Vec3(0)), body, Transform(Vec3(0)));
// 4. 初始化系统
system.realizeTopology();
// 5. 创建状态并设置初始条件
State state = system.getDefaultState();
system.realizeModel(state);
// 6. 进行仿真(例如使用 TimeStepper)
RungeKuttaMersonIntegrator integrator(system);
integrator.(state);
(integrator.() < ) {
integrator.(integrator.() + );
State& s = integrator.();
Vec3 pos = groundToBody.(s).();
std::cout << << s.() << << pos << std::endl;
}
;
}

