主要内容

利用机器人学和Simscape对机械臂进行建模和控制

使用ABB YuMi robot执行拾取和放置工作流,演示如何在Simulink®中设计机器人算法,然后使用Simscape在测试环境中模拟动作™. 该示例还显示了如何对具有不同保真度级别的系统进行建模,以便更好地关注相关的万博1manbetx算法设计。

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

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

  2. 添加核心操纵器动力学并设计控制器

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

高级别目标

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

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

系统动力学部分对机器人行为进行建模。这定义了给定一组参考轨迹和布尔夹持器命令(打开或关闭)时机器人的移动方式。根据整体模型的目标,系统动力学可以以不同的逼真度进行建模。

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

定义机器人和环境

加载ABB YuMi机器人模型。该机器人是一种具有双臂的工业机械手。此示例仅使用单臂。

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

创建可视化以回放模拟的轨迹。

iviz=交互式GidBodyTree(机器人);ax=gca;

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

例如HelperSetupWorkSpace(ax);

初始化共享模拟参数

此示例使用一组预定义的配置,configSequence,如robot所述。它们存储在关联的MAT文件中,最初在中定义交互式地为ABB YuMi机器人构建轨迹

负载abbSavedConfigs.matconfigSequence

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

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

创建任务和轨迹计划程序

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

open_system (“modelWithSimplifiedSystemDynamics.slx”);

简化的系统动力学

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

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

任务调度

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

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

模拟模型

所提供的Simulink模万博1manbetx型在模型工作区中存储与示例相关的变量。点击加载默认参数如有必要,可重新初始化变量。有关更多信息,请参阅模型工作区(万博1manbetxSimulink)

通过调用模拟

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

simout=sim(“modelWithSimplifiedSystemDynamics.slx”);%使用InteractiveGidBodyTree对象可视化运动。iviz.ShowMarker=false;iviz.showFigure;rateCtrlObj=速率控制(长度(simout.tout)/(最大值(simout.tout));对于i=1:length(simout.tout)iviz.Configuration=simout.yout{1}.Values.Data(i,:);waitfor(rateCtrobj);终止

添加核心操纵器动力学并设计控制器

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

  • 接受关节力矩和夹持器命令的更复杂的操纵器动力学模型

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

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

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=速率控制(长度(simout.tout)/(最大值(simout.tout));对于i=1:length(simout.tout)iviz.Configuration=simout.yout{1}.Values.Data(i,:);waitfor(rateCtrobj);终止

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

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

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

open_system (“modelWithSimscapeRobotAndEnvironmentDynamics.slx”);

Simscape机器人与环境工厂

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

机械臂与环境动力学

利用Simscape多体模型构建了机器人的机械手和环境,通过调用smimport使用提供的网格在robot URDF文件上。然后,通过连接,以关节扭矩驱动关节muxes转到标记并配备传感器,用于返回关节位置、速度和加速度。

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

widgetDimensions=[0.02 0.02 0.07];

接触模型

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

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

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

在这两种情况下,联系人代理用于代替直接的表面到表面接触。接触代理的使用加快了建模速度以提高性能。对于夹持器小部件接触,夹持器接触使用两个砖实体建模,而八个球形接触用于小部件接口建模。类似地,小部件到环境接触在每个位置使用球体与表示环境的砖实体接触的小部件的四个角。

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

%接触参数刚度=1e4;阻尼=30;过渡区宽度=1e-4;静摩擦系数=1;动力摩擦系数=1;临界流速=1;

夹持器控制和传感

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

模拟模型

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

simout=sim(“modelWithSimscapeRobotAndEnvironmentDynamics.slx”);

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

可扩展性

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