MATLAB - 计算关节扭矩以平衡端点力和力矩

系列文章目录


前言

产生力矩以平衡作用在平面机器人末端执行器体上的端点力。要使用各种方法计算关节力矩,请使用刚体树机器人模型的几何雅各比(geometricJacobian)和反动力学(inverseDynamics)对象函数。


一、初始化机器人

双关节刚体树机器人是一个二维平面机器人。关节配置以列向量形式输出。

Matlab 复制代码
twoJointRobot = twoJointRigidBodyTree("column");

二、问题设置

端点力 eeForce 是一个列向量,包含作用在末端执行器本体("工具")上的线性力和力矩的组合。请注意,该矢量以基本坐标系表示,如下图所示。

Matlab 复制代码
fx = 2; 
fy = 2;
fz = 0;
nx = 0;
ny = 0;
nz = 3;
eeForce = [nx;ny;nz;fx;fy;fz];
eeName = "tool";

为平衡扭矩指定机器人的关节配置。

Matlab 复制代码
q = [pi/3;pi/4];
Tee = getTransform(twoJointRobot,q,eeName);

三、几何雅各布法

利用虚功原理 1,使用几何雅各宾函数并将雅各宾的转置与端点力矢量相乘,即可求得平衡力矩。

Matlab 复制代码
J = geometricJacobian(twoJointRobot,q,eeName);
jointTorques = J' * eeForce;
fprintf("Joint torques using geometric Jacobian (Nm): [%.3g, %.3g]",jointTorques);
Matlab 复制代码
Joint torques using geometric Jacobian (Nm): [1.41, 1.78]

四、空间变换力的反动力学计算

使用另一种方法,计算平衡力矩,方法是计算将端点力空间转换到基准坐标系的反动力学。

将扭矩从末端执行器坐标系空间变换到基准坐标系,意味着在一个恰好与基准坐标系空间重合的坐标系中施加一个新的扭矩,但该坐标系仍固定在末端执行器本体上;这个新的扭矩与在 ee 原点施加的原始扭矩具有相同的效果。下图中, 分别为端点线性力和力矩, 分别为空间变换后的力和力矩。在下面的片段中, 是空间变换后的扭矩。

Matlab 复制代码
r = tform2trvec(Tee);
fbase_ee = [cross(r,[fx fy fz])' + [nx;ny;nz]; fx;fy;fz];
fext = -externalForce(twoJointRobot, eeName, fbase_ee);
jointTorques2 = inverseDynamics(twoJointRobot, q, [], [], fext);
fprintf("Joint torques using inverse dynamics (Nm): [%.3g, %.3g]",jointTorques2)
Matlab 复制代码
Joint torques using inverse dynamics (Nm): [1.41, 1.78]

五、末端执行器力的反动力学

使用第三种方法,将末端执行器力表示在其自身坐标系(fee_ee)中,而不是将末端执行器力进行空间变换到基础坐标系。将力矩和线性力向量转换到末端执行器坐标系中。然后,将该力和当前配置指定给 externalForce 函数。根据该力矢量计算逆动力学。

Matlab 复制代码
eeLinearForce = Tee \ [fx;fy;fz;0];
eeMoment = Tee \ [nx;ny;nz;0];
fee_ee = [eeMoment(1:3); eeLinearForce(1:3)];
fext = -externalForce(twoJointRobot,eeName,fee_ee,q);
jointTorques3 = inverseDynamics(twoJointRobot, q, [], [], fext);
fprintf("Joint torques using inverse dynamics (Nm): [%.3g, %.3g]",jointTorques3);
Matlab 复制代码
Joint torques using inverse dynamics (Nm): [1.41, 1.78]

参考资料

1Siciliano, B., Sciavicco, L., Villani, L., & Oriolo, G. (2009). Differential kinematics and statics. Robotics: Modelling, Planning and Control, 105-160.

2Harry Asada, and John Leonard. 2.12 Introduction to Robotics. Fall 2005. Chapter 6 Massachusetts Institute of Technology: MIT OpenCourseWare, https://ocw.mit.edu. License: Creative Commons BY-NC-SA.

相关推荐
Interview Aid1122 小时前
TikTok OA 四题分享|半小时内 AC,题目基本都是实现题
java·开发语言·算法·面试·职场和发展
鲁邦通物联网4 小时前
智慧物流调度架构设计:基于GPIO适配异构电梯的机器人梯控实现
机器人·巡检机器人·机器人梯控·agv梯控·非侵入式采集·机器人乘梯·机器人自主乘梯
CoderIsArt10 小时前
C#中UI 线程与 Dispatcher
开发语言·ui·c#
AI情绪识别开源12 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
CaoMei_HuaCha13 小时前
硬件测试内容之二十三:机器人测试
机器人
「QT(C++)开发工程师」13 小时前
C++ auto 用法详解
开发语言·c++
OPEN-F13 小时前
C++STL教程:容器适配器与实用工具
开发语言·c++
yaoxin52112313 小时前
507. Java 反射 - 在 BeanFactory 中实现依赖注入
java·开发语言
OPEN-F13 小时前
C++模板教程:变参模板、折叠表达式与SFINAE
java·开发语言·c++