OpenSim教程二——OpenSim的人体建模理论

概述

国内用于人体运动仿真的软件主要有LifeMOD、AnyBody、ANSYS等,这些软件有自身的缺点,如肌肉控制不精确、价钱昂贵等。为了更好地解决人体运动仿真问题,斯坦福大学研发了OpenSim,它是一款应用于人体肌肉骨骼模型开发、模拟仿真和运动分析的开源免费软件。本文以计算机建模和数学理论推导为基础,对OpenSim的建模理论和仿真步骤作详细介绍,为国内从事生物力学及相关研究的学者提供一些参考。
OpenSim的人体建模理论主要来源于Hill方程和Hill肌肉三元素模型。整个模拟过程主要由模型缩放(scaling)、逆向运动学(inverse kinematics, IK)、残差缩减(residual reduction algorithm, RRA)和肌肉计算控制(computed muscle control, CMC)四步组成,如下图所示。
simulation steps

模型缩放

OpenSim常采用某一个人的身高、体重数据以及肌肉特征数据建立通用模型,要得到个体化的模型就需要对通用模型进行缩放。模型缩放以实验室测试标记点数据为依据,根据实验数据与通用模型中人体环节点之间的比例,对各环节的长度和质量进行缩放。在缩放过程中,用最小二乘法控制实验中标记点与模型中理论点之间的误差。

逆向运动学

运动学是不考虑产生动作的力和力矩的情况下对运动的研究。所以在做运动学分析(比如逆运动学)时,不需要知道物体的质量和惯性。逆运动学的目标是找到能最好复现特定物体实验运动学的模型关节角度。这里逆运动学工具用到的实验运动学是基于实验标记点的。
逆运动学遍历动作的每个时间步,或每一帧,然后计算一组关节角度能让模型“最好地”匹配实验运动学。OpenSim通过解决最小化标记误差的带权最小二乘优化问题来找到“最佳匹配”。
标记误差被定义为实验标记点与对应虚拟标记点之间的距离。每个标记点有一个权值,表示该标记误差项在最小二乘问题当中最小化的程度。在每一帧中,逆运动学工具找到一个广义坐标向量(比如关节角度),q,最小化标记点误差的加权和,表示为:
min ⁡ q [ ∑ i ∈ m a k e r s w i ∥ x i e x p − x i ( q ) ∥ 2 ] \min_q\left[\sum_{i \in makers}w_i\Vert x_i^{exp} -x_i(\mathbf q)\Vert^2\right] minq[imakerswixiexpxi(q)2]

其中 x i e x p x_i^{exp} xiexp是实验标记点 i i i的位置, x i ( q ) x_i (q) xi(q)是对应虚拟标记点 i i i(取决于q)的位置, w i w_i wi是标记点 i i i对应的权重。

肌肉计算控制

肌肉计算控制(Computed Muscle Control, CMC)的目的是计算一组肌肉兴奋点,使动态肌肉骨骼模型追踪在给定外部施力下的期望动作,它通过比例微分(PD)控制和静态优化的组合实现。
在执行CMC算法之前,先计算模型的初始状态。初始状态包括广义坐标(关节角度)、广义速度(关节角加速度)和肌肉状态(如肌肉活性度和纤维长度)。广义坐标和速度的值可以从定义的期望动作中获取,而肌肉状态的初始值通常是不知道的。为了计算可用的初始肌肉状态,CMC在期望动作的前0.03秒开始执行。因为肌肉状态通常是不均衡的,且肌肉力在初始时间间隔中会显著变化,所以在这个时间间隔中的仿真通常不准确,为此我们要保证CMC至少得提前0.03秒开始。
CMC

残差缩减

残差缩减(Residual Reduction)是一个正向运动学仿真的形式,它用追踪控制器来追踪逆运动学产生的模型运动学。CMC作为控制器,在没有肌肉的情况下,模型的骨架能用来生成与地面反作用力一致的质量分布和关节运动学。
RRA
残差缩减主要用于如行走和跑步等与地面接触并受到地面反坐作用力的运动。这里我们用步态模型gait2354_simbody.osim举例,它包含10个刚体结构(骨头),23个广义坐标,其中的17个(自由度)表示关节转动的角度,每个自由度由扭矩致动器驱动,剩下的6个广义坐标表示模型骨盆与地面间的6个自由度(3个平移,3个旋转)。为了模拟行走,我们需要表示模型如何推动自身相对于地面向前运动。我们把这骨盆与地面间的6个自由度表示成一个6自由度的关节,每个自由度由自己的扭矩致动器驱动。每一个致动器叫做一个残差驱动器(residual actuator)。所以我们的模型一共有23个自由度和23个驱动器,其中驱动骨盆与地面之间3个平移自由度的力叫做剩余力,用 F x F_x Fx F y F_y Fy F z F_z Fz表示。三个旋转自由度由剩余扭矩(或力矩)驱动,用 M x M_x Mx, M y M_y My M z M_z Mz表示。
通常,模型假设(比如没有胳膊)、噪声和其他动作捕获的误差会导致动态不一致性。本质上,地面反作用力和从标记点估计的加速度满足牛顿第二定律
F = m a F=ma F=ma
粗略来说,6个残余量相当于在等式左边加了一个力,从而导致不一致性:
F + F r e s i d u a l = m a F+F_{residual}=ma F+Fresidual=ma
如果地面反作用力测试和模型都没有误差, F r e s i d u a l F_{residual} Fresidual的理论值是0,但误差不可避免,只能通过轨迹优化和环节质量调整等方法来减少。一般认为力的最大残差在0-10N为好,力矩残差在0-50N·m为好。

总结

OpenSim以肌肉形态参数为基础建立通用人体肌肉骨骼模型,我们可以通过实验室测得的实验数据对通用模型进行缩放,从而建立符合个体特征的个性化模型;接着通过逆向运动学求解,使建立的模型与人体实际情况最佳匹配;然后通过RRA方法把外部力,即地面反作用力与人体惯性参数相结合,把逆向动力学计算时的误差控制到最小;最后通过CMC改变肌肉参数,得到模拟仿真结果。
由于OpenSim具有对肌肉形态参数控制精细、计算误差小、计算速度快等特点,越来越多地被应用在神经肌肉性疾病病因分析、动作的神经肌肉控制策略研究等方面,也日益受到生物力学专家和学者的关注。

参考资料

【1】宋和胜, 钱竞光, 唐潇. 基于软件OpenSim的人体运动建模理论及其应用领域概述[J]. 医用生物力学, 2015, 30(4):373-379.
【2】黄磊. 基于OpenSim的人体下肢与康复机器人耦合仿真[D]. 天津大学, 2015.
【3】官方Examples and Tutorials

  • 16
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是基于Windows系统的OpenSim安装教程: 1. 下载OpenSimulator进制文件 在OpenSimulator的官网(https://opensimulator.org/)上下载最新的Windows进制文件。选择“Download”页面上的“Windows Binaries”链接,然后选择你需要的版本进行下载。 2. 解压缩OpenSimulator文件 将OpenSimulator文件解压缩到你想要存放它的文件夹中。你可以选择将其解压缩到C:\Program Files\OpenSimulator目录下,但这需要管理员权限。 3. 配置OpenSimulator文件 进入解压缩后的OpenSimulator文件夹,找到“bin”目录下的“OpenSim.ini.example”文件,并将其重命名为“OpenSim.ini”。 4. 配置OpenSimulator数据库 如果你想要使用MySQL数据库,请确保已经安装了MySQL服务器,并设置了正确的用户名和密码。在“OpenSim.ini”文件中,找到以下内容: ```[Startup] ; default is to use BasicData.ini as the data source, but you can choose ; to use a different one here. ; DataSource = "BasicData.ini" DataSource = "MySQL" ``` 将“DataSource”设为“MySQL”,并在下面添加以下内容: ```[DatabaseService] ; Connect string for the MySQL database server. ; This assumes you have a database called "opensim" which ; you have granted rights to the user specified below. ConnectionString = "Database=mysql;Server=localhost;Port=3306;Uid=root;Pwd=mypassword;Database=opensim;" ``` 将“Uid”和“Pwd”修改为你的MySQL用户名和密码,将“Database”修改为你想要使用的数据库名称。 5. 启动OpenSimulator 双击“bin”目录下的“OpenSim.exe”文件,OpenSimulator将会启动。如果出现错误,请检查“OpenSim.ini”文件中的配置是否正确。 6. 连接到OpenSimulator 用一个Second Life兼容的客户端(比如Firestorm、Singularity等),连接到OpenSimulator。在登录界面中,输入你的用户名和密码,以及OpenSimulator的IP地址和端口号(默认为“localhost:9000”),然后点击“连接”按钮。 7. 开始使用OpenSimulator 现在你可以在OpenSimulator中创建一个虚拟世界,并开始构建你的虚拟环境了!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值