基于运动单元的骨骼肌疲劳模型

pymuscle的Python项目详细描述


肾盂肌

Build statusPotvin和Fuglevand,2017年)。 如果您将此图书馆作为研究的一部分,请引用该论文。

我们希望在未来扩展此模式并支持其他模式。

有关pymuscle的详细信息

生物的运动控制是复杂的。pymuscle允许你捕捉 在保持性能的同时,还存在一些复杂性。它提供 比将扭矩值作为接头发送给模拟电机更详细,但是 比全生化模型更少的细节(和计算成本)。

pymuscle没有绑定到特定的物理库,可以与 各种肌肉体模拟。肾盂肌着重于 控制信号(对运动神经元的兴奋性输入)和每个运动单位的输出。

电机单元输出无量纲,但可以解释为力。它也可以 在物理学中用作肌体收缩状态的代表 您可以选择SIM卡。

背景

电机单元

运动单位是运动神经元和肌肉纤维的组合 神经元连接。骨骼肌是由许多肌肉纤维组成的。 对于给定的运动单位,单个运动神经元将有一个分支轴突。 支配肌肉中的一部分纤维。肌肉纤维通常 只属于一个电机单元。

肌肉可能有几十到几千个运动单位。这个 例如,人的手臂有30块肌肉,由大约35000个轴突支配。 来自运动神经元。

大脑通过向运动单位发送信号和接收信号来控制肌肉 植入肌肉和皮肤的机械感受器发出的信号。所有动物 动物的运动单位从出生到学习 通过对这些单元的控制产生平滑的协调运动是非常重要的 发展过程的一部分。

控制

机动部队以有序的方式招募,以产生不同程度的 肌肉力量。

一个给定肌肉群的运动神经元的细胞体在 脊髓中的运动神经元池、柱或核。 一般来说,游泳池中的运动神经元都是一样的 激活输入。这个输入是几十个(如果不是几百个)的组合 从携带信号的中间神经元和上运动神经元分离输入 大脑和机械感受器在身体上。

在肌肉的自发收缩中,比如在弯曲手臂时,输入 到二头肌的运动神经元池将增加,招募更多 以及更多的马达单元,从最弱的马达单元到更强的马达单元。

随着时间的推移,运动神经元和肌肉纤维不能产生同样的力量 对于相同级别的激活输入。这叫做疲劳。大脑必须 如果它想保持给定的力或执行 以相同的方式一次又一次地执行相同的操作。

安装

要求

蟒蛇3.6+

安装

pip install pymuscle

入门

不是机器学习研究员?请参见生理学家入门

最小示例

muscle类为库提供主api。肌肉可以 大量定制,但这里我们主要使用默认值。肌肉 以120个机动部队为例,有实力分布,招募 potvin和 Fuglevand,2017年。

frompymuscleimportStandardMuscleasMusclefrompymuscle.visimportPotvinChartmuscle=Muscle()# Set up the simulation parameterssim_duration=200# secondsframes_per_second=50step_size=1/frames_per_secondtotal_steps=int(sim_duration/step_size)# Use a constant level of excitation to more easily observe fatigueexcitation=0.6# Range is 0.0 to 1.0total_outputs=[]outputs_by_unit=[]print("Starting simulation ...")foriinrange(total_steps):# Calling step() updates the simulation and returns the total output# produced by the muscle during this step for the given excitation level.total_output=muscle.step(excitation,step_size)total_outputs.append(total_output)# You can also introspect the muscle to see the forces being produced# by each motor unit.output_by_unit=muscle.current_forcesoutputs_by_unit.append(output_by_unit)if(i%(frames_per_second*10))==0:print("Sim time - {} seconds ...".format(int(i/frames_per_second)))# Visualize the behavior of the motor units over timeprint("Creating chart ...")chart=PotvinChart(outputs_by_unit,step_size)# Things to note in the chart:#   - Some motor units (purple) are never recruited at this level of excitation#   - Some motor units become completely fatigued in this short time#   - Some motor units stabilize and decrease their rate of fatigue#   - Forces from the weakest motor units are almost constant the entire timechart.display()

这将打开一个带有生成图表的浏览器窗口。应该是这样的:

熟悉openai的健身房吗?

请确保安装了以下内容

pip install gym pygame pymunk

然后尝试示例项目

版本控制计划

肾盂肌处于α状态。希望定期更换。

我们希望稳定1.0版的api,并且只引入中断性的更改 在主要版本中。

这个图书馆试图提供经验性可信的行为。因为新的研究 我们将更新基础模型。非错误修复更改 这将改变库的输出,并将集成到主要版本中。

如果你知道你认为应该整合的结果,请告诉我们。见 "贡献"部分。

贡献

我们鼓励您做出贡献!特别是我们很想知道 使用pymuscle的项目。

有关所有问题,请在提交之前搜索现有问题

在打开拉取请求之前,请:

  • 看看这期有没有空头支票
    • 如果票据被标记为"需要帮助"注释,说明您打算处理此问题
    • 如果票据未标记,请注释您希望处理该问题
      • 然后,我们将围绕这个问题讨论优先级、时机和期望。
  • 如果没有未结票,请创建一张
    • 我们更愿意在您编写代码之前讨论更改的含义!

开发

如果您想帮助开发pymuscle库本身,以下内容可能会有所帮助。

克隆此存储库

git clone git@github.com:iandanforth/pymuscle.git
cd pymuscle
pip install -r requirements-dev.txt
python setup.py develop
pytest

性能

肌肉萎缩的目标是要快。我们使用numpy来获得快速的矢量计算。如果你 请发现库的某些部分对于您的用例来说不够快 开罚单告诉我们。

限制

范围

肾盂肌与运动单位神经元的输入有关,这些神经元的输出 电机单元,以及随时间变化的系统。它不能模拟 肌体本身的动力学或动力学运动对其的影响 电机单元输入/输出关系。

回收率

Potvin和Fuglevand 2017明确地模拟了疲劳,但不是恢复。我们 急切地等待来自potvin的更新模型,该模型将包括 恢复。

在此之前,standardmuscle类,它建立在potvin和fuglevand的基础上 基类,实现外围(肌肉纤维)恢复,因为这是 相对简单的过程,但禁用中央(运动单元疲劳)。

本体感觉

标准肌肉的实例 让使用者追踪每一块肌肉的疲劳状态。除了这个 库不直接为控制提供任何反馈信号。这个 示例项目展示了如何将pymuscle与物理模拟集成到 获得模拟输出力和拉伸和应变值 模拟肌肉体的状态。(在本例中,这是一个阻尼弹簧 但也可以使用山丘型或更复杂的模型。)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在JSP中添加自定义隐式对象   java MasterMindResource泄漏?   不同的c#java结果加密   java为什么安卓 studio显示“constraintlayout中缺少约束”错误?   java Make Logback将日志打印到文件中   java如何在Google应用程序引擎中设置日期时间?   jeditorpane如何阻止java HTMLEditorKit自动关闭我的标记   返回到Activity onCreate()时,不会调用java函数   java为什么我在这个对象上得到一个NullPointerException?   在java中,如何使用包含数组的参数调用图形方法?   java如何在Play framework 2应用程序中存储Akka参与者列表?   ssh使用java将文件从一个solaris 9复制到另一个solaris 9   网络Java服务器正在等待客户端响应   java Spring mvc从formBackingObject()重定向到页面   java Spark:JavaRDD<Tuple2>到javapairdd<>   java如何动态调用基类中由字符串值指定的子类方法?