Human-in-the-Loop Optimization of Exoskeleton Assistance Via Online Simulation of Metabolic Cost

2023-05-16

Human-in-the-Loop Optimization of Exoskeleton Assistance Via Online Simulation of Metabolic Cost

文章来源https://ieeexplore.ieee.org/abstract/document/9698243

本文介绍了一种人在环的外骨骼控制优化算法,主要内容包括:

  1. 通过OpenSim来估计人体新陈代谢速率 V V V
  2. 通过贝叶斯优化算法来优化控制算法中的参数 p p p,使之最小化人体形成代谢速率 V V V

一. 实验硬件部分

1. 带有位置与力传感的跑步机&动捕系统

带有位置与力传感的跑步机
如上图所示,在实验过程中记录受试者走路时脚掌与跑步机界面的力与力矩 f g \boldsymbol{\mathrm{f}}_g fg
f g = ( f x , f y , f z , 0 , T y , 0 ) ∈ R 6 , \boldsymbol{\mathrm{f}}_g = (f_x,f_y,f_z,0,T_y,0) \in \mathbb{R}^6, fg=(fx,fy,fz,0,Ty,0)R6,
其中 y y y为垂直于接触界面的方向, T y T_y Ty代表力矩。实验同时记录了接触时压力中心的位置:
c p = ( c x , c y , c z ) ∈ R 3 . \boldsymbol{\mathrm{c}}_p = (c_x,c_y,c_z) \in \mathbb{R}^3. cp=(cx,cy,cz)R3.
同时通过动捕系统获取Markers的位置信息 x o x_{o} xo
x o = ( p x , p y . p z ) ∈ R 3 . x_o = (p_x,p_y.p_z) \in \mathbb{R}^3. xo=(px,py.pz)R3.

2. Active Pelvis Orthosis (APO)外骨骼

请添加图片描述
外骨骼的参数如下所示:
请添加图片描述

二. 外骨骼控制算法(四种模式)

1. Transparent Mode

通过底层的PD控制器,使得外骨骼的助力 τ d e s = 0 \tau_{des}=0 τdes=0,即模仿穿戴者没有穿戴外骨骼时的场景。

2. Adaptive Oscillator Mode

τ d e s = K v ( θ ( ϕ − δ ϕ ) − θ ( ϕ ) ) , \tau_{des} = K_\mathcal{v}(\theta(\phi - \delta\phi)-\theta(\phi)), τdes=Kv(θ(ϕδϕ)θ(ϕ)),
其中 K v , δ θ K_\mathcal{v},\delta\theta Kv,δθ为可调整参数,分别代表虚拟刚度矩阵(Virtual Stiffness)以及相位差(文章用相位 θ ∈ [ 0 , 100 ] \theta \in [0,100] θ[0,100]来表征当前行走处在的不同阶段,例如0代表左脚刚刚着地,右脚刚准备抬起;50代表右脚抬起到最高处)。 θ ( ⋅ ) \theta(\cdot) θ()是将相位 θ \theta θ映射到关节角度的函数。

这种控制算法相当于估计下一时刻关节角度位置,然后给予合适大小的力矩帮助穿戴者到达该关节角度位置。

3. Generic Mode

τ d e s = { − τ e , 0 ≤ x < 17 , τ f , 40 ≤ x < 64 , − τ e , 92 ≤ x ≤ 100 , 0 , else . \tau_{des} = \begin{cases} -\tau_e, & 0\le x<17,\\ \tau_f, & 40 \le x <64, \\ -\tau_e, & 92 \le x \le 100, \\ 0, & \text{else}. \end{cases} τdes= τe,τf,τe,0,0x<17,40x<64,92x100,else.
将人体行走分为固定的四个阶段,每个阶段给予固定的助力(缺乏个性化)。

4. Human-in-the-Loop Mode(文章的卖点所在)

请添加图片描述
请添加图片描述
与3.Generic Mode中相同,文章将人体行走分为了五个阶段,并根据事先设定好的函数形式提供助力。不同的是,这种模式下五个阶段的分界线 p i , i = 1 , 2 , 3 , 4 p_i, i=1,2,3,4 pi,i=1,2,3,4变为了可调节参数。(注意只有 p i p_i pi是可调节参数, τ e , τ f \tau_e,\tau_f τe,τf仍为固定大小的值)。

文章在接下来的部分讲解了如何利用OpenSim的肌肉骨骼模型来优化 p i p_i pi,以达到最小化人体新陈代谢速率的效果。

三. 通过OpenSim进行仿真,估计人体新陈代谢速率

请添加图片描述
文章在OpenSim中建立了Gait2354人体肌肉骨骼模型与IUVO建立的外骨骼CAD模型。外骨骼与人体肌肉骨骼模型之间通过固定点进行连接。模型中包括了许多Markers,与** 一.实验硬件部分**中的Markers点位置一一对应。

1.通过模型计算关节力矩

由模型中的Markers点与实验中的Markers点位置一一对应,可以通过最小化以下函数求解当前各关节角度 q q q:
min ⁡ q ∑ i = 1 m ω i ∣ ∣ x o i − x i ( q ) ∣ ∣ 2 , \min_{q}{\sum_{i=1}^m{\omega_i || x_{oi}-x_i(q)||^2}}, qmini=1mωi∣∣xoixi(q)2,
其中 m m m为marker点的数量, x o i x_{oi} xoi为实验中通过动捕系统测得的第 i i i个Marker的三维坐标, x i ( ⋅ ) x_i(\cdot) xi()为OpenSim的函数,其功能是计算前向运动学,即根据当前的关节角度 q q q计算当前Marker点的位置。通过最小化以上函数,就可以求得当前各关节角度 q q q

在求得关节角度后,再根据逆动力学模型计算当前关节力矩 τ \tau τ:
τ = M ( q ) q ¨ + C ( q , q ˙ ) + g ( q ) + J ( q ) T f ext , \tau = M(q)\ddot{q}+C(q,\dot{q})+g(q) + J(q)^Tf_{\text{ext}}, τ=M(q)q¨+C(q,q˙)+g(q)+J(q)Tfext,
其中 M , J M,J M,J分别为模型的质量矩阵(mass matrix)以及Jacobian, C , g C,g C,g为科里奥利力项和重力项, f ext f_{\text{ext}} fext为外界力。这些函数均为OpenSim内部函数。

2.通过关节力矩计算肌肉激活度

每一个关节力矩都由不同的肌肉-肌腱模块提供的力矩组成:
τ j = ∑ m = 1 c ϕ m T C m , \tau_j = \sum_{m=1} ^c{\phi_m^TC_m}, τj=m=1cϕmTCm,
其中 C m C_m Cm为力臂, ϕ m \phi_m ϕm为肌肉力。而肌肉力通过以下的函数计算得到:
ϕ m = H ( α m , λ m , v m , π m ) , \phi_m = H(\alpha_m,\lambda_m, v_m,\pi_m), ϕm=H(αm,λm,vm,πm),
其中 H H H为OpenSim内置黑箱函数, α m \alpha_m αm为肌肉激活度, λ m , v m \lambda_m, v_m λm,vm为当前肌肉骨骼模型参数, π m \pi_m πm为肌肉的参数。

通过联立以上两式,可以得到肌肉激活度 α m \alpha_m αm。注意到以上的问题一般都为超定方程,无法求得单一解,一般情况下都需要增加一目标函数以求得单一解。文章选择的目标为最小化肌肉激活度:
min ⁡ ∑ m = 1 n ( α m ) 2 . \min \sum_{m=1}^n(\alpha_m)^2. minm=1n(αm)2.

3.通过肌肉激活度计算肌肉能量(与新陈代谢速率相关)

通过黑箱模型,可以计算得到第m块肌肉运用的能量比例 ϵ ˙ m \dot\epsilon_m ϵ˙m:
ϵ ˙ m = U ( α m , λ m , v m , π m ) , \dot\epsilon_m = U(\alpha_m,\lambda_m, v_m,\pi_m), ϵ˙m=U(αm,λm,vm,πm),
肌肉总能量比例为
ϵ ˙ = ∑ m = 1 n ϵ ˙ m \dot\epsilon = \sum_{m=1}^n\dot\epsilon_m ϵ˙=m=1nϵ˙m

四. 利用贝叶斯优化更新模型参数

在实验进行当中,实时记录markers的位置信息(用于计算关节角度)以及外部力信息(用于计算关节力矩):
P = { p 1 , p 2 , . . . , p n } , F = { f 1 , f 2 , . . . , f n } . P = \{p_1, p_2, ..., p_n\},\\ F = \{ f_1, f_2, ..., f_n\}. P={p1,p2,...,pn},F={f1,f2,...,fn}.
根据以上信息,可以依次得到关节角度信息 Q Q Q
Q = { q 1 , q 2 , . . . , q n } . Q = \{ q_1, q_2, ..., q_n\}. Q={q1,q2,...,qn}.
肌肉激活度信息 A A A:
A = { α 1 , α 2 , . . . , α n } . A = \{ \alpha_1, \alpha_2, ..., \alpha_n\}. A={α1,α2,...,αn}.
以及肌肉能量比例信息 E E E
E = { ϵ 1 , ϵ 2 , . . . , ϵ n } . E = \{ \epsilon_1, \epsilon_2, ..., \epsilon_n\}. E={ϵ1,ϵ2,...,ϵn}.
根据肌肉能量比例信息 E E E,可以计算得到肌肉的能量消耗 V i , V s V_i,V_s Vi,Vs:
V i = 1 M ( t i − t i − 1 ) ∫ t i − 1 t i ϵ i ˙ ( t ) d t , V s = 1 n ∑ i = 1 n V i . V_i = \frac{1}{M(t_i-t_{i-1})}\int_{t_{i-1}}^{t_i}{\dot{\epsilon_i}(t)dt},\\ V_s = \frac{1}{n}\sum_{i=1}^{n}{V_i}. Vi=M(titi1)1ti1tiϵi˙(t)dt,Vs=n1i=1nVi.
假设外骨骼控制算法中的参数 p i , i = 1 , 2 , 3 , 4 p_i, i=1,2,3,4 pi,i=1,2,3,4 V s V_s Vs满足如下关系:
V s = f s C ( p 1 , p 2 , p 3 , p 4 ) . V_s = f_s^C(p_1,p_2,p_3,p_4). Vs=fsC(p1,p2,p3,p4).
则根据贝叶斯优化,可以求得 p i ∗ , i = 1 , 2 , 3 , 4 p_i^*, i=1,2,3,4 pi,i=1,2,3,4使得V_s最小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Human-in-the-Loop Optimization of Exoskeleton Assistance Via Online Simulation of Metabolic Cost 的相关文章

  • 这个 XSLT 效率低吗?

    我得到了答复我关于翻译 XML 文件的最后一个问题 https stackoverflow com questions 8274068 它激励我去玩它 我想出了一个不同的解决方案 但我感觉最后两个选择不是最佳的 可以用更好或更有效的方式来完
  • django:预取 GenericForeignKey 的相关对象

    假设我有一个模型Box with a GenericForeignKey指向任一Apple实例或Chocolate实例 Apple and Chocolate 反过来 有外键Farm and Factory 分别 我想显示一个列表Boxes
  • Flow Shop 到布尔可满足性 [多项式时间缩减]

    我联系您是为了了解 如何将流水车间调度问题 转化为布尔可满足性 我已经对 N N 数独 N 皇后和班级调度问题进行了此类简化 但我对如何将流水车间转换为 SAT 有一些问题 SAT 问题如下所示 目标是 使用不同的布尔变量 找到每个变量的影
  • C++ - 生成随机位集的有效方法,具有可配置的平均“1 与 0”比率

    我正在寻找一种高效的方法来生成随机数std bitset设定长度 我还希望能够影响1s 出现在结果中 因此如果概率值设置得足够低 则所有结果中只有一小部分会包含1 但仍然有可能 但不太可能 导致所有1s 它将用于计算量很大的应用程序 因此欢
  • 带 ILU 预处理器的一般最小残差 (GMRES)

    我正在尝试在我编写的 GMRES 代码中实现 ILU 预处理器 为了求解线性系统 Ax b 我正在尝试使用尺寸为 25x25 的简单三对角 SPD 矩阵 如您所见 我正在计算使用 spilu 方法进行预处理 代码运行没有错误 但解决方案显然
  • 使用 cython 加速数千个集合操作

    我一直在努力克服对 Cython 的恐惧 恐惧是因为我对 c 或 c 一无所知 我有一个函数需要 2 个参数 一个集合 我们称之为testSet 和一个集合列表 我们称之为targetSets 然后该函数会迭代targetSets 并计算与
  • 如何直接从 Cython 调用 numpy/scipy C 函数,而不需要 Python 调用开销?

    我正在尝试在 Cython 中进行计算 该计算严重依赖于一些 numpy scipy 数学函数 例如numpy log 我注意到 如果我在 Cython 中的循环中重复调用 numpy scipy 函数 则会产生巨大的开销 例如 impor
  • Cython 优化

    我正在用 Python 编写一个相当大的模拟 并希望从 Cython 获得一些额外的性能 然而 对于下面的代码 我似乎没有得到那么多 即使它包含一个相当大的循环 大约 10 万次迭代 我是否犯了一些初学者错误 或者这个循环大小是否太小而无法
  • 使用嵌套字典Python的自定义类

    当使用相同的键在嵌套字典中添加值时遇到问题 并且该值始终显示相同的值 事实是 我想更新值事件 键是相同的 该算法是人工鱼群算法的基础 example gt gt fish template 0 weight 3 1 visual 2 ste
  • 将上三角矩阵转换为对称矩阵的快速方法

    我有一个上三角矩阵np float64值 像这样 array 1 2 3 4 0 5 6 7 0 0 8 9 0 0 0 10 我想将其转换为相应的对称矩阵 如下所示 array 1 2 3 4 2 5 6 7 3 6 8 9 4 7 9
  • 将前四个列表项移至列表末尾

    所以我有一个包含几个的列表 li 元素 ul li a li li b li li c li li d li li e li li f li li g li li h li ul 上下文是我想重用liiOS 的 1 000 个内存密集型列表
  • 在服务器中实现自动完成的最佳方法是什么?

    这个问题很容易让人知道 让 Web 应用程序的客户端自动完成变得漂亮很简单 有很多插件 但是 在后端 在服务器端 最好的方法是什么 我不喜欢用户每次按下按键就访问数据库的想法 我一直在考虑 sphinx 或者一些与您的网站并行运行的全文搜索
  • C++ 错误:“_mm_sin_ps”未在此范围内声明

    我正在尝试对将函数应用于数组的不同方法进行基准测试 why is mm sin ps在我的范围内不知道但是 mm sqrt ps is 我怎样才能让它知道 并且编译没有错误 include
  • R:tuneRF 函数的行为不明确(randomForest 包)

    我对这句话的含义感到不舒服stepFactor的参数tuneRF http www inside r org packages cran randomForest docs tuneRF函数用于调整mtry进一步使用的参数randomFor
  • 向循环中添加代码如何使其速度更快?

    我有一个带有内部循环的简单函数 它缩放输入值 在查找表中查找输出值 并将其复制到目的地 ftol ambient是我从网上复制的一个技巧 用于将float快速转换为int for i 0 i lt iCount i iScaled ftol
  • 超级丑陋的数字

    所以问题是 编写一个程序来查找第 n 个超级丑数 超级丑数是正数 其所有素数因子都在给定素数列表中 大小为 k 的素数 例如 1 2 4 7 8 13 14 16 19 26 28 32 是给定素数的前 12 个超级丑数的序列 2 7 13
  • 如何优化这个 CUDA 内核

    我已经分析了我的模型 似乎该内核约占我总运行时间的 2 3 我一直在寻找优化它的建议 代码如下 global void calcFlux double concs double fluxes double dt int idx blockI
  • 使用 JOIN(大表性能)Postgresql 进行 UPDATE FROM?

    我试图让以下查询以合理的性能执行 UPDATE order item imprint SET item new id oi item new id FROM order item oi INNER JOIN order item impri
  • 如何使用窗口函数优化SQL查询

    这个问题与this https stackoverflow com questions 32222889 how to calculate power consumption from power records 一 我有一个包含设备功率值
  • optim() 中的错误:搜索单变量函数的全局最小值

    我正在尝试优化 R 中的函数 该函数是仅估计时负二项式的似然函数mu范围 这应该不是问题 因为该函数显然只有一个最大值点 但是 我无法达到理想的结果 需要优化的函数为 EMV lt function data par Mi lt par P

随机推荐

  • 隐藏符号 __dso_handle 问题

    这几天要给项目做移植 xff0c 重写了下Makfile 项目原是使用autoconf配置的 xff0c 但在新环境下对autoconf的支持不好 Makefile编写基本按autoconf生成的Makefile来的 xff0c 编译选项等
  • 类模板成员函数

    模板类的头文件 span class token macro property span class token directive hash span span class token directive keyword ifndef s
  • C++ 在.h文件中包含头文件和在.cpp文件中包含头文件的原则

    1 第一个原则 xff1a 如果可以不包含头文件 xff0c 那就不要包含了 xff0c 这时候前置声明可以解决问题 如果使用的仅仅是一个类的指针 xff0c 没有使用这个类的具体对象 xff08 非指针 xff09 xff0c 也没有访问
  • NRF24L01数据通信C程序

    NRF24l01 产品性能 xff1a 1 xff09 2 4GHZ全球开放ISM频段免许可使用 2 xff09 最高工作速率2Mbps GFSK高效调制 3 xff09 125个频道满足多点通讯和跳频通讯需求 4 xff09 1 9 3
  • gazebo仿真之xacro文件

    span class token operator lt span span class token operator span xml version span class token operator 61 span span clas
  • c++ 释放内存 野指针

    在释放内存之时 xff0c 不仅仅是将该块内存进行释放 xff0c 还要将指向该块内存的指针置为NULL 如果不置为NULL xff0c 下次继续使用该指针时会出现问题 具体看示例 在下面的示例中 xff0c 如果没有处理野指针的那句话 x
  • 二维码识别 -- 基于ros平台下的仿真

    生活中的二维码 二维码是用某种特定的几何图形按一定规律在平面 xff08 二维方向上 xff09 分布的黑白相间的图形记录数据符号信息的 xff1b 在代码编制上巧妙地利用构成计算机内部逻辑基础的 0 1 比特流的概念 xff0c 使用若干
  • ROS中控制机械臂抓取目标例程

    在上一个博文中介绍了一个简单的目标识别的例子 xff0c 在这篇博客中 xff0c 例如是别的结果 xff0c 完成机械臂的抓取控制 xff0c 主要进行程序的分析和学习 包含的头文件 xff1a include lt ros ros h
  • STM32_Debug 使用ST-Link进行调试出现Error:Flash Download Failed-"Cortex-M3" 解决方案

    在Debug窗口依次注意以下几个点 xff1a 1 选择与主控芯片相配套的芯片 2 选择ST Link Debugger 此处注意该页面最下面一行可不更改 xff08 亲测有效 xff09 3 接上图点击进入Setting xff0c 依次
  • 标准外设库(STD库)、HAL库、LL库三者区别

    转自 xff1a https blog csdn net zcshoucsdn article details 54613202 2018 1 19 HAL库详解见STM32之HAL库详解 及 手动移植 STM32 Embedded Sof
  • FOC矢量控制

    FOC xff08 Filed Oriented Control xff09 是采用数学方法实现三相马达的力矩与励磁的解耦控制 主要是对电机的控制电流进行矢量分解 xff0c 变成励磁电流 I d Id 之后我将详细介绍一下这个算法的数学原
  • Linux网络编程8——对TCP与UDP的简易封装

    引言 每次使用socket通信 xff0c 都会有很对相似的操作 本文 xff0c 会对TCP与UDP通信做一简单封装 xff0c 并生成动态库 代码 my socket h ifndef MY SOCKET H define MY SOC
  • 分分钟带你入门无刷电机控制_P-NUCLEO-IHM001套件评测使用

    终于有时间将前段时间把有关ST公司的分分钟带你入门无刷电机控制 P NUCLEO IHM001套件评测的资料系统的整理一下 刚一开始接触接触这个套件的时候感觉这是什么鬼 xff0c 可以实现正弦波矢量控制 xff1f 这么强 xff0c 慢
  • SiamFC代码配置复现

    写在前面 最近在研究SiamRPN xff0c 究其根本 xff0c CNN依托于AlexNet骨架 xff0c 所以花些功夫研究以下SiamFC代码 xff0c 将其阶段性复现 Tracking only 关于GPU显卡配置 cudn和c
  • PySOT

    写在前面 期待已久的PySOT终于放上了code xff0c 高兴ing xff0c 赶忙进行相应的配置加以复现 xff0c 不得不说 xff0c 作者真的很贴心 xff0c 把配置环境的指令封装成脚本 xff0c 直接按需配置即可 但是在
  • 【Linux】SocketCan c语言编程

    前言 为了能够对Socket CAN的深入理解 xff0c 我们需要了解Socket的机制 Socket的中文翻译为 插座 xff0c 在计算机世界里称为套接字 Socket最初是作为网络上不同主机之间进程的通信接口 xff0c 后来应用越
  • VMWare虚拟机网络配置及虚拟机远程rviz显示雷达数据

    虚拟机网络配置 1 工具 环境 本机 xff1a Windows 10 64位虚拟机 xff1a VMware Workstation xff0c Ubuntu 18 04 2 Windows配置 WLAN部分 网络和Internet配置
  • 2022数学建模国赛B题思路分析

    分享一下 xff0c 仅供参考借鉴 xff0c 切勿直接使用 xff01 致谢一下全糖奶茶屋 xff01 一 问题重述 1 1 问题背景 由于无人机集群在遂行编队飞行时 应尽可能的避免外界干扰 因此需要尽可能的保持电磁静默减少电磁波信号的发
  • 利用Visual Studio创建C语言dll

    利用VS2019创建dll方法 动态链接库的定义及意义如何在VS创建dll入口函数DLLMain如何创建导出函数动态调用导出函数 动态链接库的定义及意义 动态链接库 xff08 Dynamic Link Library 或者 Dynamic
  • Human-in-the-Loop Optimization of Exoskeleton Assistance Via Online Simulation of Metabolic Cost

    Human in the Loop Optimization of Exoskeleton Assistance Via Online Simulation of Metabolic Cost 文章来源https ieeexplore ie