主要内容

基于Simscape的机械臂建模与控制

使用ABB YuMi机器人执行拣放工作流程,该机器人演示了如何在Simulink®中设计机器人算法,然后使用Simscape™在测试环境中模拟动作。金宝app该示例还展示了如何以不同的保真度为系统建模,以更好地关注相关算法设计。

本例的设计元素分为三个部分,以便更容易关注模型设计的不同方面:

  1. 使用简化的机械臂系统动力学为拾取和放置创建一个任务和轨迹调度程序:

  2. 添加核心机械手动力学,设计控制器

  3. 在机器人与环境的Simscape模型上验证完整的工作流程

高水平的目标

交互式构建ABB YuMi机器人的轨迹设计了一个机器人路径点序列,并利用连续轨迹进行了重放。在本例中,Simulink模型将这金宝app些路径点转换为一个完整的、可重复的取放工作流。该模型有两个关键要素:

任务调度和轨迹生成部分定义了机器人如何遍历状态。这包括机器人在任何时刻的构型状态,目标位置是什么,夹持器是打开还是关闭,以及当前发送给机器人的轨迹。

系统动力学部分模拟了机器人的行为。这定义了给定一组参考轨迹和布尔抓取命令(打开或关闭)后机器人如何移动。根据整个模型的目标,系统动力学可以以不同的逼真程度建模。

对于这个例子,在任务调度程序的设计中,目的是在机器人处于稳定运动控制下的假设下,确保调度程序的行为正确。对于这一部分,需要一个简单的模型来快速模拟,因此系统动力学使用关节空间运动模型块。该模块在具有预定义响应参数的稳定控制器下模拟给定关节空间参考轨迹的机械臂运动。一旦任务调度完成,模型的重点就转移到控制器设计和系统验证上,这就需要更复杂的系统动力学模型。

定义一个机器人和环境

加载ABB YuMi机器人模型。机器人是一个有两个手臂的工业机械手。本例仅使用了单臂。

机器人= loadrobot (“abbYumi”“重力”[0 0 -9.81]);

创建一个可视化重放模拟轨迹。

iviz = interactiveRigidBodyTree(机器人);甘氨胆酸ax =;

通过使用示例助手函数创建一组碰撞对象来添加环境。

exampleHelperSetupWorkspace (ax);

初始化共享仿真参数

此示例使用一组预定义的配置,configSequence就像机器人说的那样。它们存储在一个相关的MAT文件中,并最初在交互式构建ABB YuMi机器人的轨迹

负载abbSavedConfigs.matconfigSequence

对于仿真,必须定义机器人的初始状态,包括位置、速度和各关节的加速度。

定义初始状态q0 = configSequence (: 1);%的位置dq0 = 0(大小(q0));%的速度ddq0 = 0(大小(q0));%的加速度

创建一个任务和轨迹调度程序

加载第一个模型,其中重点是模型的任务调度和轨迹生成部分。

open_system (“modelWithSimplifiedSystemDynamics.slx”);

简化的系统动力学

为了关注模型的调度部分,系统动力学使用关节空间运动模型块。该运动模型假设机器人在稳定、精确的控制下能够达到指定的构型。稍后,示例详细说明了系统动力学的更精确建模。

抓取器被建模为一个简单的布尔命令输入01(打开或关闭),以及指示夹持器是否达到命令位置的输出。通常,机器人将抓取命令与其他配置输入分开处理。

任务调度

机器人通过的一系列任务有八个状态:

调度程序使用MATLAB函数块实现,commandLogic.当夹持器状态达到且所有机械手关节都达到预定阈值内的目标位置时,调度程序推进状态。每个任务都输入到梯形速度剖面轨迹块,在每个路径点之间生成平滑的轨迹。

模拟模型

所提供的Simulink模金宝app型在模型工作区中存储与示例相关的变量。点击加载默认参数在需要时重新初始化变量。有关更多信息,请参见模型的工作区(金宝app模型)

运行通过调用sim卡

使用交互式可视化来回放动作。该模型被额外模拟了几秒钟,以确保在第一个动作后循环符合预期。这个模型不模拟任何环境交互,所以机器人在这个模拟中并不实际抓取物体。

simout = sim卡(“modelWithSimplifiedSystemDynamics.slx”);%使用interactiveRigidBodyTree对象可视化运动。iviz。ShowMarker = false;iviz.showFigure;rateCtrlObj = rateControl(长度(simout.tout) / (max (simout.tout)));I = 1:length(simout.tout)配置= simout.yout {1} .Values.Data(我:);等待(rateCtrlObj);结束

添加核心机械手动力学,设计控制器

现在已经设计并验证了调度程序,为机器人添加一个包含两个元素的控制器

  • 一个更复杂的机械手动力学模型,接受关节力矩和夹持器的命令

  • 一个关节空间控制器,返回关节力矩给定的期望和当前的机械手状态

使用添加的控制器打开下一个提供的模型。

open_system (“modelWithControllerAndBasicRobotDynamics.slx”);

机械手动力学

为了设计控制器,机械手动力学必须表示给定力矩输入的机械手关节位置。这是在内部实现的机械手动力学子系统使用前进动力块将关节力矩转换为关节加速度给定的当前状态,然后积分两次得到完整的关节构型。积分器初始化为q0处dq0,初始关节位置和速度。

此外,夹持器控制子系统通过施加10n的力来覆盖对夹持器执行器的关节控制力矩,以关闭或打开夹持器。

注意,第二个积分器是饱和的。

虽然在设计良好的位置控制器下的机械手通常不会达到关节极限,但夹持器动作的开环力的增加意味着需要关节极限来确保真实的响应。对于一个更精确的模型,可以将关节饱和度与速度连接起来以复位积分,但对于这个模型,这个精度水平已经足够了。

爪传感器

该模型还增加了一个更详细的抓手传感器,以检查抓手何时已经实际打开或关闭。抓手传感器提取关节配置的最后两个值(对应于抓手位置的值),并将它们与预期的抓手位置进行比较,由closeGripper命令,在MATLAB函数块中,钳子的逻辑.的夹状态当抓取器关节的位置与closeGripper命令给出的期望状态匹配时返回1。当夹持器还没有达到这些状态时,夹状态返回零。匹配的行为夹持模型在前面简化的模型中。

关节空间控制器

该模型还增加了一个计算力矩控制器,实现了基于模型的关节控制方法。有关详细信息,请参见中使用机器人操作器块构建计算扭矩控制器使用机器人机械手块进行安全轨迹跟踪控制的例子。该模型使用相同的控制器,但采用ABB YuMi作为rigidBodyTree而不是Rethink Sawyer。

模拟模型

使用新模型对结果进行仿真和可视化。

simout = sim卡(“modelWithControllerAndBasicRobotDynamics.slx”);%使用interactiveRigidBodyTree可视化运动iviz。ShowMarker = false;iviz.showFigure;rateCtrlObj = rateControl(长度(simout.tout) / (max (simout.tout)));I = 1:length(simout.tout)配置= simout.yout {1} .Values.Data(我:);等待(rateCtrlObj);结束

在机器人与环境的Simscape模型上验证完整的工作流程

现在任务调度程序和控制器已经设计完成,添加了更复杂的机器人和环境模型。使用Simscape Multibody™,它可以创建物理系统的高保真模型。在这个应用程序中,Simscape添加了带有内置关节限制和接触建模的动力学。最后一步增加了仿真的准确性,但代价是建模的复杂性和仿真的速度。Simcape还提供了内置的可视化,力学的探险家,可以在模拟期间和之后查看。

加载最终提供的模型,它具有相同的顶部视图。

open_system (“modelWithSimscapeRobotAndEnvironmentDynamics.slx”);

Simscape机器人和环境工厂

这主要不同于以前的模型是工厂模型。之前模型中的核心机械手动力学已经被机器人和环境的Simscape模型所取代:

机械臂与环境动力学

利用Simscape多体技术构造机械手和环境。机器人模型是通过调用smimport在机器人URDF文件中提供网格。然后,通过连杆驱动关节力矩mux转到标签和配备传感器,返回关节的位置,速度和加速度。

对象或小部件实际上是在这个模拟中提取的,因此定义小部件的大小。

widgetDimensions = [0.02 0.02 0.07];

接触模型

该模型中的联系人分为两类:

  • 夹持器与小部件之间的接触

  • 小部件和环境之间的联系

在这两种情况下,联系代理用来代替表面对表面的直接接触。使用联系代理可以加速建模以提高性能。对于夹持器-部件接触,夹持器接触使用两个砖实体建模,而八个球形接触用于建模部件界面。类似地,小部件与环境的接触在小部件的四个角上使用了球体,这些球体与代表环境的砖块实体接触。

将接触模型的参数定义为接近其默认状态。

%接触参数刚度= 1 e4;阻尼= 30;transition_region_width = 1的军医;static_friction_coef = 1;kinetic_friction_coef = 1;critical_velocity = 1;

抓手控制和传感

爪的控制是一样的,但是爪传感器被修改。由于该夹持器可以实际拾取物体,因此当夹持器牢固时达到闭合夹持状态。可能永远达不到实际的闭合位置。因此,添加了额外的返回值的逻辑,isGrippingObj,当左右夹持器反作用力超过阈值时,即为正确。的钳子的逻辑MATLAB函数块接受这个变量作为输入。

模拟模型

模拟机器人。由于高度复杂性,这可能需要几分钟。

simout = sim卡(“modelWithSimscapeRobotAndEnvironmentDynamics.slx”);

使用力学的探险家在模拟过程中和模拟后的表现可视化。

可扩展性

本例重点介绍了一个提货地点应用程序的调度和控制系统的设计。进一步的调查可能包括对控制器的采样效果,使用Simscape Multibody的意外接触的影响,或者对多领域模型的扩展,比如详细描述机器人使用的电机的行为。