硬汉嵌入式论坛

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

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

[复制链接]

142

主题

735

回帖

1176

积分

至尊会员

积分
1176
QQ
发表于 2026-3-13 13:42:33 | 显示全部楼层 |阅读模式

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

硬件和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)


评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
123100
QQ
发表于 2026-3-14 10:02:33 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

5

主题

354

回帖

369

积分

高级会员

积分
369
发表于 2026-3-14 17:47:23 | 显示全部楼层
厉害。佩服。
回复

使用道具 举报

41

主题

256

回帖

379

积分

高级会员

积分
379
发表于 2026-3-16 10:03:18 | 显示全部楼层
学习了,感谢分享
回复

使用道具 举报

142

主题

735

回帖

1176

积分

至尊会员

积分
1176
QQ
 楼主| 发表于 2026-6-1 10:08:34 | 显示全部楼层
本帖最后由 会飞的猪_2020 于 2026-6-1 11:23 编辑

负责这个项目的同事离职了。。貌似现在要我来做。。

目前还需要一个根据IMU判断上楼,下楼,静止,走路,跑步的模式识别算法。
以及一个根据步态输出力矩的公式。



原项目周期定的12月~4月,要4个月量产。(老板有点不靠谱,我一看这个工作量就知道4个月量产不了,顶多搞个demo出来)



我们是分成算法、单片机、和物联网三个组在做。
之前项目的电机控制逻辑和单片机是A做的,蓝牙WIFI通讯部分B做。然后C做模式识别部分。

现在A离职了。



公司项目管理有点混乱,我领导偷偷和我说A要走。

然后上个星期突然问我有没有和A交接工作,我一问人家6月份都不来上班了。
过了十几天没下文,我以为A不走了呢。

我赶紧用AI阅读A的代码,临时抱佛脚看看。
今天C那边和我说,他让XXX在看步态识别以及输出力矩的文章。额,所以接下来到底是谁去做?



PS:这就是小公司的坏处。
目前这个公司没有项目经理,没人统筹规划项目进度。每个人都不知道其他同事的进度。
搞得我现在也不确定,到底谁去负责这块的内容。感觉都是独自为战。


包括我手头的项目,我发现只有我自己在推。我上家公司是有专门的项目经理的。
到新公司后,我尝试按照之前的工作习惯,去联系同事做进度对齐。
后来类似的工作貌似就默认让我去做了。

举个例子:
APP组要做数字孪生(所谓数字孪生就是APP上显示一个设备的3D模型,实物动起来的时候,模型也会动,看上去更具酷炫)。
结构给出的的3D模型包含了内部所有零件,APP直接跑比较卡,所以需要简化。

当前这样的任务,流程是:
1.我传达给结构的哥们,让他去简化模型。
2.结构把模型给我
3.我把模型给APP,让他们做数字孪生。
(就不能直接沟通吗..需要我在中间当传声筒传递信息一下)

如果我不去推进度。。他们能一直把某个节点的工作,卡在那里不动。

而且有个心累的点,叫做不在其位不谋其政。我本来就不负责干这个,我不知道其他同事的手头工作安排。
我去催进度,一句话就可以把我打回去:
我这个星期要忙XXX,下星期再来。
然后下星期可能A不忙了,B忙了。

大家的工作很容易出现那种:
我软件代码写完了。

Q:硬件咋还没画板子?
A:结构板框图还没定下来。

Q:结构大哥你卡在哪里了啊?
A:外观还没画好呢。

Q:外观的哥们你在干啥?
A:上个星期忙别的去了,这个星期给你画。









回复

使用道具 举报

142

主题

735

回帖

1176

积分

至尊会员

积分
1176
QQ
 楼主| 发表于 7 天前 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-18 05:17 , Processed in 0.262565 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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