主要内容

用机器人技术和Simscape建模和控制机械臂

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

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

  1. 使用简化的机械手系统动力学创建拾取和放置的任务和轨迹调度器:

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

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

高层次目标

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

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

系统动力学部分对机器人的行为进行建模。这定义了机器人如何在给定一组参考轨迹和一个布尔抓手命令(打开或关闭)的情况下移动。根据整个模型的目标,系统动力学可以用不同的保真度来建模。

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

定义一个机器人和环境

加载ABB YuMi机器人模型。该机器人是一种有两条手臂的工业机械手。这个例子只用了一只手臂。

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

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

iviz = interactiveRigidBodyTree(机器人);Ax = gca;

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

exampleHelperSetupWorkspace (ax);

初始化共享仿真参数

这个例子使用了一组预定义的配置,configSequence,作为机器人状态。它们存储在关联的MAT文件中,并最初在交互式地构建ABB YuMi机器人的轨迹

负载abbSavedConfigs.matconfigSequence

为了进行仿真,必须定义机器人的初始状态,包括每个关节的位置、速度和加速度。

定义初始状态q0 = configSequence(:,1);%的位置Dq0 = 0 (size(q0));%的速度Ddq0 = 0 (size(q0));%的加速度

创建一个任务和轨迹调度器

加载第一个模型,它主要关注模型的任务调度和轨迹生成部分。

open_system (“modelWithSimplifiedSystemDynamics.slx”);

简化系统动力学

为了集中于模型的调度部分,系统动态建模使用关节空间运动模型块。该运动模型假设机器人可以在稳定、精确的控制下达到指定的配置。稍后,该示例详细介绍了系统动力学的更精确建模。

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

任务调度

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

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

模拟模型

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

运行通过调用sim卡

使用交互式可视化来回放运动。该模型将被额外模拟几秒钟,以确保在第一次运动后,循环按照预期进行。这个模型没有模拟任何环境交互,所以机器人在这个模拟中并没有实际抓取物体。

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

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

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

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

  • 关节空间控制器,在给定期望的和当前的操纵器状态下返回关节力矩

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

open_system (“modelWithControllerAndBasicRobotDynamics.slx”);

机械手动力学

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

此外,夹持器控制子系统用10 N的力覆盖夹持器执行器的关节控制力矩,用于关闭或打开夹持器。

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

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

爪传感器

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

关节空间控制器

该模型还增加了一个计算扭矩控制器,实现了基于模型的关节控制方法。有关更多详细信息,请参阅“使用机器人操作器块构建计算扭矩控制器”中的使用机器人机械手块执行安全轨迹跟踪控制的例子。该模型使用相同的控制器,但与ABB YuMi作为rigidBodyTree而不是思考索耶。

模拟模型

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

Simout = sim(“modelWithControllerAndBasicRobotDynamics.slx”);使用interactiveRigidBodyTree可视化运动iviz。ShowMarker = false;iviz.showFigure;rateCtrlObj = rateControl(length(simout.tout)/(max(simout.tout)));I = 1:length(simout.tout) iviz。Configuration = simout.yout{1}.Values.Data(i,:);等待(rateCtrlObj);结束

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

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

加载最终提供的模型,该模型具有相同的俯视图。

open_system (“modelWithSimscapeRobotAndEnvironmentDynamics.slx”);

Simscape机器人与环境工厂

与之前的模型主要不同的是植物模型。之前模型中的核心机械手动力学已被替换为机器人和环境的Simscape模型:

机械手与环境动力学

使用Simscape Multibody构建了机械手和环境。机器人模型是通过呼叫创建的smimport在机器人URDF文件上使用所提供的网格。然后,通过连接通道,利用关节力矩驱动关节mux而且转到标签和配备传感器,返回关节位置,速度和加速度。

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

widgetDimensions = [0.02 0.02 0.07];

接触模型

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

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

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

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

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

联系人参数刚度= 1e4;阻尼= 30;Transition_region_width = 1e-4;Static_friction_coef = 1;Kinetic_friction_coef = 1;Critical_velocity = 1;

抓手控制和传感

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

模拟模型

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

Simout = sim(“modelWithSimscapeRobotAndEnvironmentDynamics.slx”);

使用力学的探险家在模拟期间和模拟后的性能可视化。

可扩展性

本例着重于为取放应用程序设计调度和控制系统。进一步的研究可能包括采样对控制器的影响,使用Simscape Multibody的意外接触的影响,或扩展到多域模型,如详细描述机器人使用的电动机的行为。