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]

参考资料

1\]Siciliano, B., Sciavicco, L., Villani, L., \& Oriolo, G. (2009). Differential kinematics and statics. Robotics: Modelling, Planning and Control, 105-160. \[2\]Harry Asada, and John Leonard. 2.12 Introduction to Robotics. Fall 2005. [Chapter 6](https://ocw.mit.edu/courses/2-12-introduction-to-robotics-fall-2005/pages/lecture-notes/ "Chapter 6") Massachusetts Institute of Technology: MIT OpenCourseWare, https://ocw.mit.edu. License: Creative Commons BY-NC-SA.

相关推荐
方璧11 小时前
限流的算法
java·开发语言
Hi_kenyon12 小时前
VUE3套用组件库快速开发(以Element Plus为例)二
开发语言·前端·javascript·vue.js
曲莫终12 小时前
Java VarHandle全面详解:从入门到精通
java·开发语言
ghie909012 小时前
基于MATLAB GUI的伏安法测电阻实现方案
开发语言·matlab·电阻
Gao_xu_sheng12 小时前
Inno Setup(专业安装/更新 EXE)
开发语言
吴声子夜歌13 小时前
Java数据结构与算法——基本数学问题
java·开发语言·windows
wanglei20070814 小时前
生产者消费者
开发语言·python
leo__52014 小时前
基于菲涅耳衍射积分的空心高斯光束传输数值模拟(MATLAB实现)
开发语言·matlab
昵称已被吞噬~‘(*@﹏@*)’~14 小时前
【RL+空战】学习记录03:基于JSBSim构造简易空空导弹模型,并结合python接口调用测试
开发语言·人工智能·python·学习·深度强化学习·jsbsim·空战