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 Massachusetts Institute of Technology: MIT OpenCourseWare, https://ocw.mit.edu. License: Creative Commons BY-NC-SA.

相关推荐
羚羊角uou4 小时前
【C++】list模拟实现(详解)
开发语言·c++
Peter_chq4 小时前
【计算机网络】多路转接之select
linux·c语言·开发语言·网络·c++·后端·select
CRMEB-嘉嘉7 小时前
如何优化 PHP 性能?
开发语言·php
FreeIPCC7 小时前
电话机器人是什么?
大数据·人工智能·语言模型·机器人·开源·信息与通信
hadage2337 小时前
--- stream 数据流 java ---
java·开发语言
Want5957 小时前
Python绘制太极八卦
开发语言·python
翀哥~7 小时前
python VS c++
开发语言·c++·python
《源码好优多》8 小时前
基于Java Springboot汽配销售管理系统
java·开发语言·spring boot
小林想被监督学习8 小时前
Java后端如何进行文件上传和下载 —— 本地版
java·开发语言