主要内容

模拟MATLAB中的关节空间轨迹跟踪

此示例显示如何在闭环控制下模拟机器人机械手的关节空间运动。

定义机器人和初始状态

使用该载体从机器人库加载ABB IRB-120Tloadrobot.功能。

robot = loadrobot(“abbirb120t”“dataformat”“柱子”“重力”,[0 0 -9.81]);numjoints = numel(homeconfiguration(机器人));

定义模拟参数,包括模拟轨迹的时间范围,初始状态为[联合配置;[编辑]和关节空间设定点。

%设置模拟参数TSPAN = 0:0.01:0.5;q0 = zeros(numjoints,1);Q0(2)= PI / 4;%偏离中心qd0 = zeros(numjoints,1);initialstate = [q0;QD0];%设置联合控制目标targetjointposition = [pi / 2 pi / 3 pi / 6 2 * pi / 3-pi / 2-pi / 3]';targetjointvelocity = zeros(numjoints,1);targetjointacceleration = zeros(numjoints,1);

可视化目标位置。

显示(机器人,targetjointposition)

图包含轴。轴包含24个类型的贴片物体,线。这些对象表示base_link,base,link_1,link_2,link_3,link_4,link_5,link_6,tool0,link_1_mesh,link_2_mesh,link_3_mesh,link_4_mesh,link_5_mesh,link_6_mesh,base_link_mesh。

ANS = AXES(主要)具有属性:XLIM:[-1 1] ylim:[-1 1] xscale:'linear'yscale:'linear'gridlamestyle:' - '位置:[0.1300 0.1100 0.7750 0.8150]单位:'标准化'显示所有属性

具有关节空间控制的模型行为

用一个关节训练局对象,模拟各种控制器下模型的闭环运动。此示例比较了其中一些。每个实例都使用衍生物函数来计算状态衍生物。在这里,国家是2n元素矢量[联合配置;联合速度], 在哪里N是相关的关节数量刚性小组细胞目的。

计算 - 扭矩控制

计算 - 扭矩控制使用逆动态计算来补偿机器人动态。基于二阶响应,控制器驱动每个接头的闭环错误动态。

创建一个关节训练局并指定机器人模型。设定“motiontype”“computedtorqueControl”。使用时更新错误动态updateRordynamicsfromStep.并分别指定所需的沉降时间和过冲。或者,您可以直接在对象中设置阻尼比和自然频率。

computedtorquemotion = tendspacemotionmodel(“刚性小孩”,机器人,“motiontype”“computedtorqueControl”);updateRordynamicsfromStep(ComputedTorQueMotion,0.2,0.1);

该运动模型需要提供位置,速度和加速度。

qdescomputedtorque = [targetjointposition;targetjointvelocity;TargetJointAcceleration];

在Simulink中查看此控制器的示例,请参阅金宝app使用机器人机械手块执行安全的轨迹跟踪控制例子。

独立联合控制

通过独立的联合控制,将每个关节模拟作为具有二阶跟踪响应的单独系统。这种类型的模型是一种理想化的行为,并且当响应慢时最好使用,或者当动态物动力学对所产生的轨迹产生重大影响时。在这些情况下,它将表现与计算扭矩控制相同,但是计算开销较少。

创造另一个JoinspacemotionModel.使用“独立jointmotion”运动类型。

indepjointmotion = tendspacemotionmodel(“刚性小孩”,机器人,“motiontype”“独立jointmotion”);updaterRordynamicSfromStep(IndePepjointMotion,0.2,0.1);

该运动模型需要提供位置,速度和加速度。

qdesindepjoint = [targetjointposition;targetjointvelocity;TargetJointAcceleration];

比例衍生物控制

比例衍生物控制或PD控制,以比例和衍生增益结合了重力补偿。尽管具有更简单的性质相对于其他闭合型号,但PD控制器对于所有正增益值都可以是稳定的,这使其成为理想的选择。这里,PD增益设定为N-经过-N矩阵,其中N是相关的关节数量刚性小组细胞目的。对于这个机器人,N= 6.此外,PD控制不需要加速度,因此其状态向量仅为2N- 联合配置和联合速度的再生矢量。

pdmotion = ConnectspaceMotionModel(“刚性小孩”,机器人,“motiontype”“pdcontrol”);pdmotion.kp = diag(300 *(1,6));pdmotion.kd = diag(10 *那些(1,6));

该运动模型需要提供位置和速度。

qdespd = [targetjointposition;targetjointvelocity];

使用颂歌求解器模拟

衍生物功能输出状态导数,可以使用常微分方程(ode)解算器集成,例如ODE45.。对于每个运动模型,ode求解器输出am-Element柱矢量覆盖Tspan.和一个2-by-m2的矩阵N- 在每个瞬间时的元素州向量。

计算每个运动模型的轨迹,使用每个系统的最合适的颂歌求解器。

[Tcomputedtorque,Ycomputedtorque] = ode45(@(t,y)导数(computedtorquemotion,y,qdescomptedtorque),tspan,initialstate);[tindepjoint,yindepjoint] = ode45(@(t,y)导数(indepjointmotion,y,qdesindepjoint),tspan,initialstate);[TPD,YPD] = ode15s(@(t,y)导数(pdmotion,y,qdespd),tspan,initialstate);

绘图结果

仿真完成后,将结果并排进行比较。每个曲线显示顶部的关节位置,底部的速度。虚线表示参考轨迹,而实线显示模拟响应。

%计算的扭矩控制图形子图(2,1,1)绘图(TComputedTorque,YComputedTorque(:,1:numjoints))%联合立场抓住全部绘图(tcomputedtorque,targetjointposition * ofter(1,长度(Tcomputedtorque)),' - '%联合设定点标题('计算扭矩运动:关节位置')Xlabel('时间'')ylabel('位置(rad)')子图(2,1,2)绘图(TComputedTorque,YcomputedTorque(:,numjoints + 1:结束))%联合速度标题('联合速度')Xlabel('时间'')ylabel('速度(rad / s)'

图包含2个轴。带有标题计算扭矩运动的轴1:接头位置包含12个类型的线。带有标题关节速度的轴2包含6个类型的线。

在以下绘图中,使用独立的联合控制确认计算的扭矩运动在一些简化假设下等效。

%独立联合运动图形子图(2,1,1)plot(tindepjoint,yindepjoint(:,1:numjoints)保持全部绘图(tindepjoint,targetjointposition *那些(1,长度(tindepjoint)),' - ') 标题('独立联合运动:位置')Xlabel('时间'')ylabel('位置(rad)')子图(2,1,2);plot(tindepjoint,yindepjoint(:,numjoints + 1:结束))标题('联合速度')Xlabel('时间'')ylabel('速度(rad / s)'

图包含2个轴。轴1带标题独立关节运动:位置包含12个类型的线。带有标题关节速度的轴2包含6个类型的线。

最后,PD控制器使用相当侵略性的增益来实现类似的上升时间,但与其他方法不同,各个关节行为不同,因为每个接头和相关机构具有略微不同的动态特性,该动态性能略微不同地由控制器补偿。

%PD,重力补偿图形子图(2,1,1)绘图(TPD,YPD(:,1:numjoints))保持全部绘图(TPD,TargetJointPosition * Oner(1,长度(TPD)),' - ') 标题('PD控制关节运动:位置')Xlabel('时间'')ylabel('位置(rad)')子图(2,1,2)绘图(TPD,YPD(:,numjoints + 1:结束))标题('联合速度')Xlabel('时间'')ylabel('速度(rad / s)'

图包含2个轴。带有标题PD控制的关节运动的轴1:位置包含12个类型的线。带有标题关节速度的轴2包含6个类型的线。

将轨迹视为动画

要查看3-D中的此行为如下所示,以下示例辅助者在时间上绘制机器人运动。第三个输入是每个样本之间的帧数。

examplehelperrigidbodytreeAnmation(机器人,ycomptedtorque,1);

图包含轴。具有标题框架= 51的轴的51包含7个类型的贴片物体。这些对象表示base_link,base,link_1,link_2,link_3,link_4,link_5,link_6,tool0,link_1_mesh,link_2_mesh,link_3_mesh,link_4_mesh,link_5_mesh,link_6_mesh,base_link_mesh。

examplehelperrigidbodytreeAnmation(机器人,yindepjoint,1);

图包含轴。具有标题框架= 51的轴的51包含7个类型的贴片物体。这些对象表示base_link,base,link_1,link_2,link_3,link_4,link_5,link_6,tool0,link_1_mesh,link_2_mesh,link_3_mesh,link_4_mesh,link_5_mesh,link_6_mesh,base_link_mesh。

examplehelperrigidbodytreeanimation(机器人,ypd,1);

图包含轴。具有标题框架= 51的轴的51包含7个类型的贴片物体。这些对象表示base_link,base,link_1,link_2,link_3,link_4,link_5,link_6,tool0,link_1_mesh,link_2_mesh,link_3_mesh,link_4_mesh,link_5_mesh,link_6_mesh,base_link_mesh。