硬汉嵌入式论坛

 找回密码
 立即注册
查看: 36|回复: 0
收起左侧

纯髋关节助力外骨骼机器人步态识别相关论文学习

[复制链接]

122

主题

651

回帖

1032

积分

至尊会员

积分
1032
QQ
发表于 昨天 13:42 | 显示全部楼层 |阅读模式

最近一个星期闲着无事(项目嵌入式单片机部分做完了)
由于笔者新加入的这家公司规模很小是个草台班子,导致没有完整的项目管理计划。

硬件和APP部分的资源被一个紧急的项目所占用(该项目五月份到底能不能结束都难说),导致我三月份开始等着硬件画板子(我都想自己画了)以及等着APP组联调。

这个很紧急的项目就是一个助行器的项目(不是我负责),所以最近一个星期读了下面这些文章,探究了一下助行器的控制方法,反正也是闲着。


下肢助力外骨骼(类似于hypershell),控制主要有三个部分组成:感知层,决策层和执行层。

执行层主要为电机部分代码,输入的力矩指令。
决策层需要根据传感器数据,做步态预测和力矩规划。
感知层是处理传感器数据(双编码器+骨盆处IMU)。

在阅读完几篇综述性的论文之后,笔者了解到决策层的控制策略与外骨骼结构是息息相关的。
外骨骼有很多结构:有利用足底压力传感器识别步态。有的在膝关节也有电机,能识别到膝关节的角度。有的使用肌电信号进行识别。

笔者考虑到实际商业化,用户穿戴一个足底传感器很不方便,穿戴一个肌电信号就更加是天方夜谭了(先不说怎么走线)。
从落地性考虑,以现在最火热的hyperShell为参考,把论文搜索范围缩小到纯髋关节助力机器人。

这种形态的外骨骼,传感器往往只有两个髋关节电机,最多在增加几路IMU。

决策层控制策略

决策层(步态识别)的策略,具笔者了解到基于现有的传感器有以下两种步态识别方法:
1.全局髋关节相轨迹法:根据全局髋关节相平面的轨迹进行步态归一化。

2.自适应振荡器法:根据人走路的步频去锁相“学习”。

据论文里说方法1会比方法2要好,尤其是当走路的步频,幅度发生变化的时候。(笔者没有时间去两种方法都了解,论文里这样子说,我就这样子相信了)
于是着重了解方法一的思路。
参考复现的论文为DOI为 : 10.1109/TNSRE.2016.2569019
标题叫:A Robust Parameterization of Human Gait PatternsAcross Phase-Shifting Perturbations
作者:Dario J. Villarreal
研究机构: Robert D. Gregg

根据这篇文章,笔者找到了一个开源的数据集,用上述论文中的理论处理了下面这个数据集里面的数据。
数据集地址:https://www.nature.com/articles/s41597-025-05391-0#Sec9

这篇文章里前言说了,各类方法依赖于时间(例如自适应震荡)。
而他这里采用了和时间无关的控制量表示步态。

他是怎么做的呢?

首先我们要知道,作者想解决一个什么问题

因为人步行的时候,整个过程是非单调的。什么意思呢?
就是说人走一步路,以一条大腿为例子,腿会向前迈(屈曲)再向后蹬(伸展)
髋关节角度在一个步态周期内是来回摆动的。

我们想用0%~100%去映射一个完整的步态周期。这个0%~100%怎么来?
显然根据髋关节角度去得到是不行的(因为不是单调的,同一个髋关节角度,可能是屈曲过程中的,也可能是伸展过程中的)

为了解决这个问题,作者做了如下的定义:
PixPin_2026-03-13_10-38-39.png

θ_p:是骨盆前倾角(笔者认为可以通过腰部的IMU得到)
θ_h:是髋关节角度(就是编码器角度啦)

这里作者重点关注的量就是红色的θ:大腿绝对角。
这三个角度的图像如下:
PixPin_2026-03-13_11-26-52.png


我们以“大腿绝对角”为x轴,它的导数为y轴,做一个相平面。
在人步行的过程中,就是在这个相平面上画圆。
(我认为宏观上理解就是:通过髋关节角度以及髋关节角度的导数也就是速度,能够完全的表征腿的运动。)
PixPin_2026-03-13_12-49-16.png


接下来的问题,就是怎么把这个东西,归一化映射到0%~100%。作者是这样做的

目前画出来的图像是一个椭圆,既然你要映射,直接求相平面上椭圆的极角不就可以了?
(求角度很简单,直接用atan2(dtheta,theta)这个公式计算即可。最后用unwrap处理一下非连续的跳变)
(笔者在matlab里处理了一下数据集,得到的结果如下:)
PixPin_2026-03-13_12-55-37.png

很明显按照这样子根本不单调。。
作者在这里搞了一个缩放系数K
最后计算方式变为:atan2(K*dtheta,theta)

作者用了一堆证明方式,我没看懂,反正最后他给出的结论是
这个K=-1/ω
ω是频率。

这里求K的方法很简单:把角度最大值和最小值的差值除以速度最大值最小值的差值,取负数即可。
PixPin_2026-03-13_13-02-11.png

公式如上,工程上实现方式也很简单,就是实时更新记录角度最大值和速度最大值,这两个参数电机上都是可以得到的。
所以说这个K也是实时更新变化的,并且步子加速减速对这个步态识别算法没影响。
(笔者注:步子大小就是x轴theta的坐标,步子快慢就是y轴dtheta的坐标)
PixPin_2026-03-13_13-07-27.png
也就是说你走快走慢,步伐走大走小影响的是这个椭圆的大小!对于求角度,其实没影响。
你还是绕着这个圈圈在转,只是转的圈圈大小有变化。

好的按照作者的方案(atan2(K*dtheta,theta)/2*PI)处理后的图像就变成了一个圆
(这里除以2PI是为了让坐标归到0~1)
PixPin_2026-03-13_13-18-03.png
整理后从左图变为了右图

也就是最后可以用整理后的相角,表示步态0%~100%
而且这个表示方法和时间无关。

最后笔者对比了不同情况下的极角对比图:
PixPin_2026-03-13_13-21-01.png

可以看到在连续相位下,无论是上坡还是下坡表现都很不错。
(原作者还测试了鲁棒性)

但是在非连续的工况下(例如坐着到站起来,站起来到坐着),它的表现不佳。
(也许需要一个方法去识别人体在不在静止状态,只有当连续运动时才切换到这个相轨迹方法)

后续研究:
笔者找了一下这个作者后续的研究。
他有写过不同的步态如何输出力矩的文章。(大概看了一下,类似有一个表格去查表)
这个计算量我认为应该是能够部署到MCU里在线识别的。

他还写过如何处理非连续的工况。(还没看,我打算用IMU+编码器搞个简单的CNN去判断,不知道可行与否)
由于时间关系就不展开去了。

附件中为部分文章,以及单个受测试者的数据集。以及对应处理的matlab脚本。
附件: 相轨迹法.7z (14.84 MB, 下载次数: 0)


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-3-14 03:46 , Processed in 0.175061 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表