【20250121】TRO论文:基于数据驱动的膝-踝假肢变阻抗控制策略,可适应不同速度和地形坡度...

【基本信息】

论文标题:Data-Driven Variable Impedance Control of a Powered Knee–Ankle Prosthesis for Adaptive Speed and Incline Walking

作者名单:T. Kevin Best; Cara Gonzalez Welker; Elliott J. Rouse; Robert D. Gregg

发表期刊:IEEE Transactions on Robotics (TRO)

发表时间:2023年6月

【访问链接】

论文链接:https://ieeexplore.ieee.org/document/10017125

【研究背景】

假肢是一种常见的可穿戴式机器人,包括上肢、下肢、足踝等不同种类,可用于辅助因疾病和事故导致截肢的患者实现对应肢体的功能代偿,从而帮助患者恢复日常的生活能力。

853b8c58b36d45873c3ee20ee01ece72.jpeg

在相关技术还不成熟的时候,市面上常采用被动驱动的假肢,即假肢的各个关节采用的是纯机械装置来实现,没有电机等主动驱动的机构,也能实现一定的功能代偿。

但主动运动的缺乏带来的最大问题是假肢的运动功能受限,导致在一些复杂的场景中(比如复杂的地形环境、不同的行走速度等),假肢能提供的功能代偿极为有限,且效果往往不佳,给用户的使用过程带来极大的不便。

4c5f233af5fefdc2fc8003182c725f70.jpeg

后来,随着机械结构和驱动技术的升级,主动型假肢开始进入人们的视野,并且以能够提供更加丰富、灵活、拟人的功能代偿为主要目标,希望能够代偿大部分的肢体功能。

【科学问题】

由于地形和任务场景的复杂性,主动型假肢设备往往需要复杂的控制策略,其中,阻抗控制是最为常见的一种控制方法。

阻抗控制可以通过调整控制参数来驱动关节产生不同的力矩,使其变得“更刚”或者“更柔”,从而可以在高精度跟踪位置参考曲线和允许一定误差范围的柔性控制之间进行调整,可适应多种任务场景和需求。

69f26e4f2f7290fb18e039fc0a6ed2be.jpeg

但是,针对假肢设备来说,现有的阻抗控制方法难以适应不同任务场景的需求。

以下肢假肢为例,传统的阻抗控制方法大多依赖于有限状态机(Finite State Machine,FSM)进行策略设计,将运动过程分为不同的步态相位并进行独立的阻抗控制参数设计,导致控制模式复杂且控制器的参数量大,且这些参数需要事先确定或手动调整,无法自适应不同的用户需求和任务场景。

f836a9a46cd50cae1d84be35744a807b.jpegb64be45fcd4f600fb6a76d589d990d2e.png

后来,有学者提出了利用连续的函数拟合方法来定义阻抗参数,构建可变阻抗控制器,从而解决控制过程不连续的问题,提供更加仿生的控制策略。

22000ba771d0d756dd7472a5974d0b1e.jpeg

但是,由于任务场景和用户需求的实时变化,如何能够准确定义变阻抗的函数拟合过程,从而实现连续、平滑、仿人的假肢辅助步行过程依旧是一个尚未解决的问题。

【核心思路】

该论文针对用于辅助步行的主动驱动型下肢假肢进行研究,主要解决其在复杂的地形环境和变速步行场景中的变阻抗控制问题,提升假肢在复杂场景中的运动性能和运动的仿生性。

论文所提出的方法是一种基于步态相位的、自适应不同步行任务的控制策略,通过引入和组合支撑阶段的连续阻抗控制策略和摆动阶段的运动学控制策略构建混合控制策略,可以充分适应步态支撑阶段和摆动阶段对于关节控制器的力矩需求,提供全步态周期的连续平滑控制过程。

算法的核心框架如下图:

3f2c1908f22f7ca47a6288e1d45008e9.png

从图中可以看出,该论文提出的混合运动阻抗控制器可实时估计步态相位  和任务  (论文中主要指的不同的步行速度),并根据当前腿处于支撑相还是摆动相分别选择位置控制器和可变阻抗控制器来生成对应的力矩,从而实现多任务场景的自适应。

698330b358737573a6ff9580064823b3.jpeg

主要创新部分如下:

  • 提出了一种新的基于健康人数据集驱动的步态相位连续建模方法,并基于支撑相的关节刚度、阻尼和平衡力矩、步行速度以及地形坡度构建了步态相位的连续函数估计方法;并且,与类似的摆动关节运动学模型相结合,该论文提出的混合控制器可根据实时相位、速度和坡度估计在不同任务中自适应行为;

  • 提出一种改进的相位变量,该变量可以避免运动学计算中的奇点姿态,能鲁棒自适应可变步行任务中的大腿轨迹。作者对两名膝上截肢者进行了验证实验,证明所提出的自适应控制器在不同任务中在关节运动学、动力学、功和步频方面均产生了更加放生的运动趋势;

  • 作者进行了充分的实验,且在大多数测试指标中,该论文提出的控制器达到或超过了手动调整的基准有限状态机(FSM)阻抗控制器的性能,这表明该论文优化的运动学和阻抗模型充分捕捉了可变任务步行的关键生物力学信息并能够自动调整参数对其进行适应。

最终,基于上述过程,该论文构建了一个二次优化问题,结合了步行任务、穿戴者的基本信息,可以根据不同的任务参数特点、步态所处的相位阶段等实时优化当前阻抗控制起的参数,实现连续的控制过程。

03f2238ca031257e6c1d1ae7b34548d1.png

对步行速度的实时估计采用的是三连杆腿结构,包括大腿、小腿和足部连杆,基于关节角度传感器和IMU姿态传感器进行数据采集,计算前后腿在 Heel Strike 和 Toe Off 相位时的相对距离和迈步时间来计算步行速度。

d51a464ff73eab92d594514b9b395a2c.png

对地形坡度的估计是基于当足部与地面完整接触时的膝-踝关节角度来计算的,通过大腿上的IMU来获得绝对姿态,并通过膝关节、踝关节的关节角度关系来计算此时足部所接触的平面的水平坡度。

值得注意的是,论文所构建的针对支撑相的可变阻尼控制器参数是一个根据步态相位连续变化的函数,可根据步行速度、地形坡度自适应调整输出力矩来适应不同的任务。

1aed49a130613c112fe80691f7791328.png

而摆动相的位置跟踪控制器是一个典型的PD控制器,根据当前的跟踪位置误差和速度误差生成相应的力矩:

130d20a6ad3013b1c963fb026ea64214.png

为了确保支撑阶段到摆动阶段的连续性和平滑性,作者引入了一个随时间变化的全局权重  来调整从支撑相的变阻抗控制器到摆动相的位置控制器的平滑性。

5eab1edb52ffb2295f3fc04c2dfaf3c3.png

【实验结果】

该论文提出的方法在一个真实的膝-踝假肢上进行了实验,相比于其他基于有限状态机的传统阻抗控制方法,该论文提出的方法可以得到更加平滑和连续的步行辅助力矩,从而使得整个步行姿态更加自然。

论文视频如下:

论文的实验数据表明,该论文提出的数据驱动的变阻抗控制算法能够更好地学习健康人的步行过程,从而生成更加拟人的关节控制策略。

该论文提出的方法能适应多种地形坡度:

3b46917d933a0cda19d1c04b76032d29.png

从图中可以看出,相比于基于有限状态机的方法,该方法控制下所产生的膝关节和踝关节运动角度与健康人更加接近,力矩曲线也更加平滑。

此外,该方法也能适应多种步行速度:

fca4dee9df74be67caa5f5edb125c298.png
基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性稳定性。此外,文档还列举了大量相关的科研方向技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
先展示下效果 https://pan.quark.cn/s/a4b39357ea24 本项目是本人参加BAT等其他公司电话、现场面试之后总结出来的针对Java面试的知识点或真题,每个点或题目都是在面试中被问过的。 除开知识点,一定要准备好以下套路: 个人介绍,需要准备一个1分钟的介绍,包括学习经历、工作经历、项目经历、个人优势、一句话总结。 一定要自己背得滚瓜烂熟,张口就来 抽象概念,当面试官问你是如何理解多线程的时候,你要知道从定义、来源、实现、问题、优化、应用方面系统性地回答 项目强化,至少与知识点的比例是五五开,所以必须针对简历中的两个以上的项目,形成包括【架构实现细节】,【正常流程异常流程的处理】,【难点+坑+复盘优化】三位一体的组合拳 压力练习,面试的时候难免紧张,可能会严重影响发挥,通过平时多找机会参与交流分享,或找人做压力面试来改善 表达练习,表达能力非常影响在面试中的表现,能否简练地将答案告诉面试官,可以通过给自己讲解的方式刻意练习 重点针对,面试官会针对简历提问,所以请针对简历上写的所有技术点进行重点准备 Java基础 JVM原理 集合 多线程 IO 问题排查 Web框架、数据库 Spring MySQL Redis 通用基础 操作系统 网络通信协议 排序算法 常用设计模式 从URL到看到网页的过程 分布式 CAP理论 锁 事务 消息队列 协调器 ID生成方式 一致性hash 限流 微服务 微服务介绍 服务发现 API网关 服务容错保护 服务配置中心 算法 数组-快速排序-第k大个数 数组-对撞指针-最大蓄水 数组-滑动窗口-最小连续子数组 数组-归并排序-合并有序数组 数组-顺时针打印矩形 数组-24点游戏 链表-链表反转-链表相加 链表-...
<think>嗯,用户这次提交了一个具体的编译错误问题,需要解决'dingshiqi.c'文件中第7行的'error C202: 'TRO': undefined identifier'错误。从用户提供的引用来看,这显然是一个标识符未定义的经典C语言编译错误。 用户引用了三个类似的错误案例作为参考:第一个是头文件中的DataRing未定义,第二个是P5寄存器未声明,第三个是C++的ABI兼容问题。虽然第三个引用涉及更复杂的链接问题,但当前错误明显更接近前两个案例的范畴——简单的标识符声明缺失问题。 注意到用户特别提到了错误发生在第7行,这个定位非常关键。结合引用案例的解决模式,应该优先检查几个基本点:首先确认TRO是否属于需要手动声明的寄存器或端口(类似引用2中的P5),其次检查相关头文件包含是否正确(参考引用1),最后确认拼写是否准确(特别是大小写问题)。 用户似乎比较熟悉单片机开发环境,因为引用案例都涉及硬件编程(STC89C52、IAP等)。可以合理推测dingshiqi.c也是某个嵌入式项目文件,TRO很可能是特殊功能寄存器。考虑到STC单片机常用P1/P3等标准命名,TRO这样的大写缩写更可能是用户自定义的寄存器别名。 准备在回复中给出分步排查方案:从最直接的拼写检查开始,然后是头文件包含策略,接着是作用域问题。特别要提醒用户注意STC单片机非标准寄存器的声明方式,因为引用2的案例已经证明P5需要特殊处理。最后补充调试技巧时,计划强调预处理结果查看这个冷门但实用的方法——很多开发者会忽略编译器实际处理的内容。 用户没有提供具体代码片段是个小遗憾,但按经验推断,第7行大概率是某个端口操作语句(类似引用2中的p5_0=0)。如果用户后续能提供sbit声明部分会更有针对性,不过目前的解决方案框架应该足够覆盖大多数可能性了。 </think>根据您描述的 `dingshiqi.c` 文件第7行报错 `error C202: 'TRO': undefined identifier`,结合引用案例的编译错误模式,以下是系统性的解决方案: ### 错误原因分析 该错误表明编译器在第7行无法识别标识符 `TRO`,可能由以下原因导致: 1. **未声明/定义**:`TRO` 未被正确定义(如变量、寄存器、宏) 2. **作用域错误**:定义位置不可访问(如未包含头文件) 3. **拼写/大小写错误**:与定义时的名称不一致 4. **缺少头文件**:包含声明 `TRO` 的头文件缺失(参考 [^1][^2]) --- ### 解决方案步骤 #### 1. **检查声明位置** - 在项目中全局搜索 `TRO` 的定义(如 `#define TRO ...` 或 `sbit TRO = ...`) - 确认定义是否在 `dingshiqi.c` 的第7行**之前**出现 - **重点检查**:是否使用了类似引用[2]的寄存器声明语法: ```c sbit TRO = P1 ^ 1; // 需确认实际端口 ``` #### 2. **确认头文件包含** - 若 `TRO` 在头文件中定义(如引用[1]的 `DataRing`): ```c #include "reg_tro.h" // 添加声明TRO的头文件 ``` - STC单片机特别注意: - 使用 **STC官方头文件**(如 `#include "STC89Cxx.h"`) - 非标准端口(如P5)需特殊声明(参考引用[2]) #### 3. **核对命名一致性** - 检查拼写大小写: - `TRO` ≠ `Tro` ≠ `tro` - 示例修正: ```c sbit TRO = P3^2; // 定义 TRO = 0; // 使用(第7行) ``` #### 4. **排查寄存器合法性** - 确认单片机型号是否支持 `TRO`: - STC89C52 **无**标准寄存器 `TRO` - 可能是用户自定义的寄存器别名,例如: ```c sbit TRO = TCON^4; // 自定义定时器相关位 ``` #### 5. **查看预编译结果** - 使用编译器选项输出预处理文件(Keil: `Options -> Listing -> C Preprocessor Listing`) - 检查第7行处 `TRO` 是否被正确定义 --- ### ✨调试建议 1. **最小化复现**: ```c #include "reg52.h" // STC标准头文件 sbit TRO = P1^0; // 明确定义在第7行前 void main() { TRO = 0; // 原第7行 } ``` 2. **替换法定位**: - 若 `TRO` 应为端口,尝试替换为 `P1` 等标准端口测试编译 > 注:STC单片机非标准端口(如P4/P5)需在头文件中启用扩展寄存器声明(参考引用[2]问题本质) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沙漏AI机器人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值