externalForce
构成相对于基底的外力矩阵
描述
例子
刚体树模型外力作用下的正向动力学计算
计算给定的机器人构型在外加外力和重力作用下的关节加速度。将扳手施加在特定的物体上,并为整个机器人指定重力。
加载一个预定义的KUKA LBR机器人模型,该模型被指定为RigidBodyTree
对象。
负载exampleRobots.matlbr
设置数据格式为“行”
。对于所有的动力学计算,数据格式必须是其中之一“行”
或“列”
。
lbr。DataFormat =“行”;
设置重力。默认情况下,重力被假设为零。
lbr。Gravity = [0 0 -9.81];
的主配置lbr
机器人。
q = homeConfiguration(lbr);
指定代表机器人所经历的外力的扳手矢量。使用externalForce
函数生成外力矩阵。指定机器人模型、经历扳手的末端执行器、扳手矢量和当前机器人配置。扳手
是相对于“tool0”
身体框架,这需要你指定机器人的配置,问
。
扳手= [0 0 0.5 0 0 0.3];fext = externalForce(lbr,“tool0”,扳手,q);
计算由重力引起的联合加速度,外加施加于末端执行器的外力“tool0”
当lbr
是它的主构型。关节速度和关节力矩假设为零(输入为空矢量[]
).
qddot = forwardDynamics(lbr,q,[],[],fext);
计算关节扭矩以对抗外力
使用externalForce
函数生成用于刚体树模型的力矩阵。力矩阵是an米-by-6矢量,对机器人上的每个关节都有一行,用于应用六元扳手。使用externalForce
函数并指定末端执行器,以正确地将扳手分配到矩阵的正确行。你可以把多个力矩阵加在一起,对一个机器人施加多个力。
要计算对抗这些外力的关节力矩,请使用inverseDynamics
函数。
加载一个预定义的KUKA LBR机器人模型,该模型被指定为RigidBodyTree
对象。
负载exampleRobots.matlbr
设置数据格式为“行”
。对于所有的动力学计算,数据格式必须是其中之一“行”
或“列”
。
lbr。DataFormat =“行”;
设置重力
性质来给出一个特定的重力加速度。
lbr。Gravity = [0 0 -9.81];
获取的主配置lbr
。
q = homeConfiguration(lbr);
施加外力link1
。输入扳手矢量在基框中表示。
fext1 = externalForce(lbr,“link_1”,[0 0 0.0 0.1 0 0]);
在末端执行器上设置外力,tool0
。的形式表示输入扳手矢量tool0
框架。
fext2 = externalForce(lbr,“tool0”,[0 0 0.0 0.1 0 0],q);
计算平衡外力所需的关节力矩。要组合力,请将力矩阵相加。关节速度和加速度假设为零(输入为[]
).
tau = inverseDynamics(lbr,q,[],[],fext1+fext2);
输入参数
机器人
- - - - - -机器人模型
rigidBodyTree
对象
机器人模型,指定为arigidBodyTree
对象。使用externalForce
函数,设置DataFormat
属性“行”
或“列”
。
bodyname
- - - - - -施加外力的物体名称
字符串标量|特征向量
施加外力的物体名称,指定为字符串标量或字符向量。对象上的对象名称必须匹配机器人
对象。
数据类型:字符
|字符串
扳手
- - - - - -施加在物体上的力矩和力
[Tx Ty Tz Fx Fy Fz]
向量
施加在物体上的力矩和力,用a表示[Tx Ty Tz Fx Fy Fz]
向量。扳手的前三个元素对应周围的力矩xyz相互重合。最后三个元素是沿同一轴的线性力。除非你指定了机器人配置
时,假定扳手相对于基架。
输出参数
fext
-外力矩阵
n6 × 6矩阵| 6 × -n矩阵
外力矩阵,返回为n-乘6或6乘-n矩阵,n为机器人的速度数(自由度)。形状取决于DataFormat
的属性机器人
。的“行”
数据格式使用n6矩阵。的“列”
数据格式采用6-by-n。
复合矩阵只列出与指定主体相关的位置上的非0的值。你可以把力矩阵加在一起,以指定作用在多个物体上的多个力。使用外力矩阵指定动力函数的外力inverseDynamics
和forwardDynamics
。
更多关于
动态属性
方法的这些属性指定操作器机器人的各个主体的信息rigidBody
对象:
质量
-刚体质量,单位为千克。CenterOfMass
-刚体的质心位置,指定为形式的矢量[x y z]
。矢量描述刚体质心相对于刚体框架的位置,单位为米。的centerOfMass
对象函数在计算机器人的质心时使用这些刚体属性值。惯性
——刚体的惯量,用矢量的形式表示[Ixx Iyy Izz Iyz Ixz Ixy]
。矢量是相对于物体框架的,单位是千克平方米。惯性张量是一个正定矩阵,形式如下:的前三个元素
惯性
矢量是惯性矩,是惯性张量的对角线元素。最后三个元素是惯性的乘积,它们是惯性张量的非对角线元素。
对于整个机械手机器人模型的相关信息,请指定这些rigidBodyTree
对象属性:
重力
-机器人经历的重力加速度,指定为[x y z]
向量,单位是m/s2。默认情况下,没有重力加速度。DataFormat
-运动学和动力学函数的输入和输出数据格式,指定为“结构”
,“行”
,或“列”
。
动力学方程
机械手刚体动力学由以下方程控制:
也可写成:
地点:
-是基于当前机器人构型的关节空间质量矩阵。计算这个矩阵
massMatrix
对象的功能。-是科里奥利项,乘以 计算速度积。用公式计算速度积
velocityProduct
对象的功能。-是所有关节在指定重力下保持其位置所需的重力力矩和力
重力
。计算重力力矩gravityTorque
对象的功能。-为指定关节构型的几何雅可比矩阵。计算几何雅可比矩阵
geometricJacobian
对象的功能。-是施加在刚体上的外力的矩阵。产生外力通过使用
externalForce
对象的功能。-是直接作为矢量应用到每个关节的关节扭矩和力。
-分别为关节构型、关节速度和关节加速度,作为单独的向量。对于转动关节,请以弧度、弧度/秒和弧度/秒为单位指定值2,分别。对于移动关节,单位为米、米/秒和米/秒2。
要直接计算动态,请使用forwardDynamics
对象的功能。该函数计算上述输入的指定组合的关节加速度。
要实现某一组运动,请使用inverseDynamics
对象的功能。该函数计算实现指定配置、速度、加速度和外力所需的关节扭矩。
参考文献
费瑟斯通,罗伊。刚体动力学算法。施普林格美国,2008年。中国科学院学报(自然科学版),doi:10.1007/978-1-4899-7560-7。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
当创建rigidBodyTree
对象时,使用指定MaxNumBodies
作为向机器人模型中添加体的上界。还必须指定DataFormat
属性作为名-值对。例如:
机器人= rigidBodyTree(“MaxNumBodies”15岁的“DataFormat”,“行”)
为了尽量减少数据使用,请将上界限制为接近模型中预期主体数量的数字。代码生成支持所有数据格式。金宝app若要使用动态函数,必须将数据格式设置为“行”
或“列”
。
的显示
和showdetails
函数不支持代码生成。金宝app
版本历史
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。