【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
C语言-光伏MPPT算法:电导增量法扰动观察法+自动全局搜索Plecs最大功率跟踪算法仿真内容概要:本文档主要介绍了一种基于C语言实现的光伏最大功率点跟踪(MPPT)算法,结合电导增量法与扰动观察法,并引入自动全局搜索策略,利用Plecs仿真工具对算法进行建模与仿真验证。文档重点阐述了两种经典MPPT算法的原理、优缺点及其在不同光照温度条件下的动态响应特性,同时提出一种改进的复合控制策略以提升系统在复杂环境下的跟踪精度与稳定性。通过仿真结果对比分析,验证了所提方法在快速性准确性方面的优势,适用于光伏发电系统的高效能量转换控制。; 适合人群:具备一定C语言编程基础电力电子知识背景,从事光伏系统开发、嵌入式控制或新能源技术研发的工程师及高校研究人员;工作年限1-3年的初级至中级研发人员尤为适合。; 使用场景及目标:①掌握电导增量法与扰动观察法在实际光伏系统中的实现机制与切换逻辑;②学习如何在Plecs中搭建MPPT控制系统仿真模型;③实现自动全局搜索以避免传统算法陷入局部峰值问题,提升复杂工况下的最大功率追踪效率;④为光伏逆变器或太阳能充电控制器的算法开发提供技术参考与实现范例。; 阅读建议:建议读者结合文中提供的C语言算法逻辑与Plecs仿真模型同步学习,重点关注算法判断条件、步长调节策略及仿真参数设置。在理解基本原理的基础上,可通过修改光照强度、温度变化曲线等外部扰动因素,进一步测试算法鲁棒性,并尝试将其移植到实际嵌入式平台进行实验验证。
【无人机协同】动态环境下多无人机系统的协同路径规划与防撞研究(Matlab代码实现)​ 内容概要:本文围绕动态环境下多无人机系统的协同路径规划与防撞问题展开研究,提出基于Matlab的仿真代码实现方案。研究重点在于在复杂、动态环境中实现多无人机之间的高效协同飞行与避障,涵盖路径规划算法的设计与优化,确保无人机集群在执行任务过程中能够实时规避静态障碍物与动态冲突,保障飞行安全性与任务效率。文中结合智能优化算法,构建合理的成本目标函数(如路径长度、飞行高度、威胁规避、转弯角度等),并通过Matlab平台进行算法验证与仿真分析,展示多机协同的可行性与有效性。; 适合人群:具备一定Matlab编程基础,从事无人机控制、路径规划、智能优化算法研究的科研人员及研究生。; 使用场景及目标:①应用于灾害救援、军事侦察、区域巡检等多无人机协同任务场景;②目标是掌握多无人机系统在动态环境下的路径规划与防撞机制,提升协同作业能力与自主决策水平;③通过Matlab仿真深入理解协同算法的实现逻辑与参数调优方法。; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注目标函数设计、避障策略实现与多机协同逻辑,配合仿真结果分析算法性能,进一步可尝试引入新型智能算法进行优化改进。
先展示下效果 https://pan.quark.cn/s/a4b39357ea24 StudentInfo 基于SSM的学生信息管理系统(选课) 已停更 项目简介: 由SpringMVC+MyBatis为主要框架,mysql8.0配置主从复制实现读写分离,主机丛机分别为腾讯云的服务器,而项目部署在阿里云上。 前端主要由bootstrap完成,背景用particles.js插件。 数据库交互查询用到pagehelper分页。 在添加修改相关功能时通过ajax来验证其主键是否存在可用。 代码层次清晰,输入框约束较高,已配置登录拦截。 一、应用技术 #### 工具:eclipse、navicat 环境:JDK1.8、tomcat9.0、mysql8.0 前端:JavaScript、jQuery、bootstrap4、particles.js 后端:maven、SpringMVC、MyBatis、ajax、mysql读写分离、mybatis分页 二、功能 #### 这是在上个springmvc选课系统的基础上进行修改完善的,目前功能基本相同,修复诸多bug,上个系统中有详细介绍:B/S基于springMVC的网上选课系统 主要功能模块图: 新增: 增加分页查询 输入框约束 学号、身份证、课程编号、教师编号只能输入数字,并且有最大输入限制,其中学号固定12位,若小于12位将会有提示。 姓名只能输入中文。 几乎所有输入框不能输入空格等约束 下拉框联动 添加、修改课程采用二级联动,即所属系别——所属专业; 添加、修改学生采用三级联动,即系别——专业——班级。 (三级联动代码有些复杂,因为JavaScript学的不好=-=)。 ajax+springmvc验证 用于验证学号、课程编号、教师...
<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、付费专栏及课程。

余额充值