主要内容

导数

机械臂模型状态的时间导数

描述

例子

stateDot= ' (taskMotionModel状态refPoserefVel基于当前状态和使用任务空间模型的运动命令计算运动模型的时间导数。

stateDot= ' (taskMotionModel状态refPoserefVelfExt基于当前状态、运动命令和使用任务空间模型对机械手施加的任何外力计算时间导数。

例子

stateDot= ' (jointMotionModel状态cmds基于当前状态和使用关节空间模型的运动命令,计算运动模型的时间导数。

stateDot= ' (jointMotionModel状态cmdsfExt基于当前状态、运动命令和使用关节空间模型的机械臂上的任何外力计算时间导数。

例子

全部折叠

此示例显示如何创建和使用jointSpaceMotionModel关节空间中的机械臂机器人。

创造机器人

机器人=装载机器人(“kinovaGen3”“DataFormat”“列”“重力”,[0 0 -9.81]);

设置模拟

设置时间跨度为1秒,时间步长为0.01秒。将初始状态设置为机器人,速度为零的home配置。

Tspan = 0:0.01:1;initialState = [homeConfiguration(robot);0 (7,1)];

定义具有目标位置、零速度和零加速度的参考状态。

targetState = [pi/4;π/ 3;π/ 2;-π/ 3;π/ 4;-π/ 4;3 *π/ 4;0 (7 - 1);0 (7,1)];

创建运动模型

用计算的转矩控制和误差动力学建模系统,误差动力学由5%超调的中等快阶跃响应定义。

motionModel = jointSpaceMotionModel(“RigidBodyTree”,机器人);updateErrorDynamicsFromStep (motionModel。3 . 05);

模拟机器人

使用模型的导数函数作为模型的输入数值求解器来模拟1秒内的行为。

[t, robostate] = ode45(@(t,state)derivative(motionModel,state,targetState),tspan,initialState);

绘制反应图

画出所有关节在其目标状态下的位置。在起始位置和目标位置之间位移较大的关节比位移较小的关节对目标的驱动速度更快。这导致了一个超调,但所有的关节都有相同的沉降时间。

图绘制(t, robotState (: 1: motionModel.NumJoints));持有所有;情节(t, targetState (1: motionModel.NumJoints) *(1、长度(t)),”——“);标题("关节位置(实)vs参考位置(虚线)");包含(“时间(s)”) ylabel (“位置(rad)”);

图中包含一个轴对象。标题为Joint Position (Solid) vs Reference(虚线)的坐标轴对象包含14个类型为line的对象。

此示例显示如何创建和使用taskSpaceMotionModel对象为任务空间中的机械臂。

创造机器人

机器人=装载机器人(“kinovaGen3”“DataFormat”“列”“重力”,[0 0 -9.81]);

设置模拟

设置时间跨度为1秒,时间步长为0.02秒。将初始状态设置为机器人的主构型,速度为零。

Tspan = 0:02 . 1;initialState = [homeConfiguration(robot);zero (7,1)];

定义一个具有目标位置和零速度的参考状态。

refPose = trvec2tform([0.6 -.]1 0.5]);refVel = 0 (6,1);

创建运动模型

将行为建模为比例导数(PD)控制下的系统。

motionModel = taskSpaceMotionModel(“RigidBodyTree”,机器人,“EndEffectorName”“EndEffector_Link”);

模拟机器人

使用刚性求解器模拟1秒内的行为,以更有效地捕获机器人动力学使用ode15s能够在具有高变化率的区域周围实现更高的精度。

[t,robotState] = ode15s(@(t,state)derivative(motionModel,state,refPose,refVel),tspan,initialState);

绘制反应图

绘制机器人的初始位置并用X标记目标。

图显示(机器人,initialState (1:7));持有所有plot3 (refPose(1、4)refPose(2、4),refPose(3、4),“x”“MarkerSize”, 20)

通过将机器人绘制在5hz环路中观察其响应。

r = rateControl(5);i = 1:size(robotState,1) show(robot,robotState(i,1:7)',“PreservePlot”、假);等待(r);结束

{

输入参数

全部折叠

taskSpaceMotionModel对象,它定义了运动模型的属性。

jointSpaceMotionModel对象,它定义了运动模型的属性。

关节位置和速度用2表示n-元素向量,指定为[问;qDot]。n非固定关节的数量是否与之相关rigidBodyTreemotionModel,表示每个关节的位置,以弧度表示。qDot表示每个关节的速度,以弧度/秒指定。

任务空间中末端执行器的参考姿态,单位为米,指定为4 × 4齐次变换矩阵。

任务空间中末端执行器的参考速度,指定为六个元素的实值向量,指定为[ωv]。ω向量的三个角速度的行向量xy,z轴,以弧度/秒为单位,和v表示沿的三个线速度的行向量xy,z轴,单位为米每秒。

指示所需运动的控制命令。的维度cmds取决于MotionType运动模型的性质:

  • “PDControl”- 2 -n矩阵,[qRef;qRefDot].第一行和第二行分别表示关节位置和关节速度。

  • “ComputedTorqueControl”- 3 *n矩阵,[qRef;qRefDot;qRefDDot].第一行、第二行和第三行分别表示关节位置、关节速度和关节加速度。

  • “IndependentJointMotion”- 3 *n矩阵,[qRef;qRefDot;qRefDDot].第一行、第二行和第三行分别表示关节位置、关节速度和关节加速度。

请注意,jointSpaceMotionModel金宝app支持这三种MotionType上面列出的,但是taskSpaceMotionModel只支持金宝app“PDControl”MotionType

外力,用an表示-element vector,其中尸体的数量有关联吗rigidBodyTree对象。

输出参数

全部折叠

基于当前状态和指定控制命令的时间导数,以2by -形式返回n实值矩阵,[qDot;qDDot),qDot是一个n-关节速度的单元行向量,和qDDot是一个n-关节加速度的元素行向量。n关节的数量是相关的吗rigidBodyTreemotionModel

扩展功能

C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。

版本历史

R2019b引入