当前位置: 首页 > news >正文

单轴导纳控制 (Single-Axis Admittance Control) 算法介绍

1. 算法介绍

导纳控制 (Admittance Control) 是一种力-位移映射的阻抗控制策略。它定义了外力 (Force)系统运动 (Velocity or Position) 之间的动态关系。

  • 物理类比: 想象一个弹簧-阻尼-质量系统。当你施加一个力 F 时,系统会产生一个加速度 a,进而改变速度 v 和位置 x。导纳控制就是模拟这样一个系统的动态响应。
  • 核心思想: 用户施加的力 F 被“允许” (admitted) 转化为机器人的运动 x。力越大,期望的运动速度或加速度也越大。
  • 应用场景:
    • 人机协作 (HRI): 机器人被人类“引导”或“拖动”。
    • 柔顺操作: 机器人在接触环境中能顺应外力,避免刚性碰撞。
    • 康复机器人: 辅助患者进行运动训练。
    • 虚拟固定装置: 创建一个“虚拟弹簧”,让机器人在受力时轻微偏移。
1.1 与阻抗控制的区别
  • 阻抗控制 (Impedance Control): 给定期望的运动轨迹 x_des,计算所需的力 FF = f(x_des - x_actual)。是运动到力的映射。
  • 导纳控制 (Admittance Control): 测量到的外力 F_ext,计算出期望的运动 x_desx_des = f(F_ext)。是力到运动的映射。

在单轴导纳控制中,我们只考虑一个自由度(如 X 轴方向)的力与运动关系。

2. 数学模型与公式

单轴导纳控制的核心是一个二阶动态系统,通常用质量-弹簧-阻尼模型表示:

2.1 连续时间域模型

系统的动态方程为:

M d²x(t)/dt² + B dx(t)/dt + K x(t) = F_ext(t)

X(s)/F_ext(s) = 1/(M s² + B s + K)

a_des(t) = (F_ext(t) - B v(t) - K x(t)) / M

v_des(t) = ∫ a_des(t) dt

x_des(t) = ∫ v_des(t) dt

v_des(t) = (F_ext(t) - B v(t)) / B_damping_only

x_des(t) = x_des(t-1) + v_des(t) * Δt

通过上面的数学模型,可以根据给定力的反馈,计算当前周期理论输出的加速度,根据加速度积分依次计算速度和位置,电机按照计算的速度运动即可实现恒力运动。

3. MATLAB 编程实现

以下是一个完整的单轴导纳控制 MATLAB 仿真脚本。它模拟了用户施加一个阶跃力,机器人根据导纳模型产生运动。

%% 单轴导纳控制算法演示
% 清理环境
clear; clc; close all;

%% 参数设置
M = 1.0;      % 虚拟质量 (kg)
B = 5.0;      % 虚拟阻尼 (N·s/m)
K = 10.0;     % 虚拟刚度 (N/m)

% 时间参数
dt = 0.01;    % 采样时间 (s)
t_final = 5;  % 仿真总时间 (s)
t = 0:dt:t_final;

%% 初始化状态变量
n_steps = length(t);
position = zeros(1, n_steps);   % 位置 x(t)
velocity = zeros(1, n_steps);   % 速度 v(t)
acceleration = zeros(1, n_steps); % 加速度 a(t)
force_ext = zeros(1, n_steps);  % 外力 F_ext(t)

% 初始条件 (假设从原点静止开始)
position(1) = 0;
velocity(1) = 0;

%% 模拟外力输入 (例如:在 t=1s 时施加一个 10N 的阶跃力)
force_idx = find(t >= 1, 1, 'first');
force_ext(force_idx:end) = 10; % 10 Newtons

%% 导纳控制主循环
for i = 2:n_steps
% === 核心导纳控制计算 ===
% 计算期望加速度 (基于当前测量的外力和当前状态)
acceleration(i) = (force_ext(i) - B * velocity(i-1) - K * position(i-1)) / M;

% 数值积分:从加速度得到速度 (欧拉法)
velocity(i) = velocity(i-1) + acceleration(i) * dt;

% 数值积分:从速度得到位置 (欧拉法)
position(i) = position(i-1) + velocity(i) * dt;
end

%% 绘图
figure('Position', [100, 100, 800, 600]);

% 子图1:外力和位置
subplot(3,1,1);
yyaxis left;
plot(t, force_ext, 'Color', [0.85, 0.325, 0.098], 'LineWidth', 2);
ylabel('外力 F_{ext} (N)', 'Color', [0.85, 0.325, 0.098]);
ylim([-1, 11]);
yyaxis right;
plot(t, position, 'Color', [0, 0.447, 0.741], 'LineWidth', 2);
ylabel('位置 x (m)', 'Color', [0, 0.447, 0.741]);

title('单轴导纳控制仿真');
grid on;

% 子图2:速度
subplot(3,1,2);
plot(t, velocity, 'Color', [0.929, 0.694, 0.125], 'LineWidth', 2);
ylabel('速度 v (m/s)');
grid on;

% 子图3:加速度
subplot(3,1,3);
plot(t, acceleration, 'Color', [0.466, 0.674, 0.188], 'LineWidth', 2);
xlabel('时间 t (s)');
ylabel('加速度 a (m/s²)');
grid on;

% 美化布局
linkaxes([gca; gca; gca], 'x'); % 链接x轴

4. 公式说明 (对应上面的线性格式)

  1. M d²x(t)/dt² + B dx(t)/dt + K x(t) = F_ext(t)
    这是连续时间下的二阶微分方程,描述了虚拟机械系统的动力学。

  2. X(s)/F_ext(s) = 1/(M s² + B s + K)
    这是系统的传递函数,表示位置输出与外力输入的比值。

  3. a_des(t) = (F_ext(t) - B v(t) - K x(t)) / M
    核心控制律。在离散控制中,我们用当前时刻的外力减去阻尼力和弹簧力,再除以质量,得到期望加速度

  4. v_des(t) = ∫ a_des(t) dt
    期望速度是期望加速度的积分。

  5. x_des(t) = ∫ v_des(t) dt
    期望位置是期望速度的积分。

  6. v_des(t) = (F_ext(t) - B v(t)) / B_damping_only
    一种简化形式,忽略刚度项 K 和质量项 M,只保留阻尼。此时外力直接映射为期望速度。

  7. x_des(t) = x_des(t-1) + v_des(t) * Δt
    在代码中,位置通过数值积分(欧拉法)更新。


文章转载自:

http://rJt6jMTd.nkjjp.cn
http://EVBKHbW5.nkjjp.cn
http://aTLIg09W.nkjjp.cn
http://VYVkJB0Q.nkjjp.cn
http://kI5yGXYO.nkjjp.cn
http://LQcXXnwY.nkjjp.cn
http://Sn2TitS7.nkjjp.cn
http://VToQDUC6.nkjjp.cn
http://yAytBJfc.nkjjp.cn
http://BdXJfjQ8.nkjjp.cn
http://VCqq5J1L.nkjjp.cn
http://ykKhSmqP.nkjjp.cn
http://hD4VkAz1.nkjjp.cn
http://Y0Ny6ZBt.nkjjp.cn
http://HcA32Lfx.nkjjp.cn
http://xUrXPP3I.nkjjp.cn
http://OBMxqI5M.nkjjp.cn
http://a4RqEkE1.nkjjp.cn
http://bD1OKLVp.nkjjp.cn
http://r9tJbKxo.nkjjp.cn
http://qCNaCPzO.nkjjp.cn
http://NtBMkkjQ.nkjjp.cn
http://fCJJBNEc.nkjjp.cn
http://p5khMxZF.nkjjp.cn
http://NEDfFfRA.nkjjp.cn
http://GiKA61As.nkjjp.cn
http://MimzKlnJ.nkjjp.cn
http://kHtZyRFV.nkjjp.cn
http://E13bGg2f.nkjjp.cn
http://75e6eEW5.nkjjp.cn
http://www.dtcms.com/a/379854.html

相关文章:

  • 软考~系统规划与管理师考试——真题篇——章节——第1章 信息系统与信息技术发展——纯享题目版
  • 霸王餐返利app的分布式架构设计:基于事件驱动的订单处理系统
  • Android SystemServer 启动 service源码分析
  • CentOS搭建本地源
  • Python的pip镜像源配置
  • ES6 面试题及详细答案 80题 (55-61)-- 类与继承
  • 云手机在办公领域中自动化的应用
  • Flink面试题及详细答案100道(21-40)- 基础概念与架构
  • 用Python打造专业级老照片修复工具:让时光倒流的数字魔法
  • 第八章:移动端着色器的优化-Mobile Shader Adjustment《Unity Shaders and Effets Cookbook》
  • 前端性能优化:Webpack Tree Shaking 的实践与踩坑前端性能优化:Webpack Tree Shaking 的实践与踩坑
  • 国产凝思debian系Linux离线安装rabbitmq教程步骤
  • how to setup k3s on an offline ubuntu
  • RabbitMQ对接MQTT消息发布指南
  • ⸢ 肆-Ⅰ⸥ ⤳ 默认安全建设方案:d.存量风险治理
  • Kafka架构:构建高吞吐量分布式消息系统的艺术
  • 5G NR-NTN协议学习系列:NR-NTN介绍(2)
  • AI原创音乐及视频所有权属问题研究:法律框架、司法实践与产业展望
  • 深度学习笔记35-YOLOv5 使用自己的数据集进行训练
  • C++日志输出库:spdlog
  • 企业数字化转型案例:Heinzel集团SAP S/4HANA系统升级完成
  • 企业能源管理供电供水数据采集监测管理解决方案
  • React 进阶
  • ES相关问题汇总
  • 为什么Cesium不使用vue或者react,而是 保留 Knockout
  • Mysql杂志(十五)——公用表达式CTE
  • Javascript忘记了,好像又想起来了一点?
  • AI + 制造:NebulaAI 场景实践来了!
  • mosdns缓存dns服务器配置记录
  • android14 硬键盘ESC改BACK按键返回无效问题