主要内容

与机器人和Simscape模型和控制机械臂

执行一个拾起并定位工作流使用ABB弓机器人,机器人演示了如何设计算法模型®,然后在测试环境中模拟操作使用Simscape™。金宝app示例还显示了该模型的系统不同程度的忠诚更关注相关的算法设计。

本例的设计元素被分成三个部分更容易专注于模型设计的不同方面:

  1. 创建一个任务调度器和轨迹拾起并定位使用简化的机械手系统动力学:

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

  3. 验证完成工作流Simscape机器人与环境的模型

高水平的目标

交互式地建立轨迹ABB弓机器人例子,一个机器人路径序列设计和使用连续轨迹回放。在这个例子中,仿真软件模型这些路标金宝app点转换为一个完整的和可重复的拾起并定位工作流。模型具有两个关键要素:

任务调度和轨迹生成部分定义了如何通过美国机器人遍历。这包括机器人在任何即时配置状态,目标位置是什么,爪是否应该打开或关闭,目前被送到机器人轨迹。

系统动力学部分模型机器人的行为。这定义了机器人动作如何给定一组参考轨迹和一个布尔爪命令(打开或关闭)。可以将系统动力学建模与不同级别的保真度,取决于整体模型的目的。

对于这个示例,在任务调度器的设计,其目的是确保正确调度程序的行为假设下的机器人运动控制稳定。对于这部分,一个简单的模型,模拟快速是可取的,所以系统动力学建模使用关节空间运动模型块。物体模拟关节空间参考给出的机械手运动轨迹在一个稳定的控制器与预定义的响应参数。一旦完成,任务调度模型的重点转移到控制器设计和系统验证,这需要更复杂的系统动力学模型。

定义一个机器人和环境

加载一个ABB弓机器人模型。机器人是一种工业用两臂机械手。这个示例只使用单一的手臂。

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

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

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

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

exampleHelperSetupWorkspace (ax);

初始化共享仿真参数

这个例子使用一组预定义的配置,configSequence作为机器人的状态。这些文件都存储在一个关联的垫子和最初的定义交互式地建立轨迹ABB弓机器人

负载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:长度(simout.tout) iviz。配置= simout.yout {1} .Values.Data(我:);等待(rateCtrlObj);结束

添加核心机械手动力学和设计一个控制器

现在调度器设计和验证,为机器人添加一个控制器和两个元素

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

  • 关节空间控制器,它将返回给定期望关节力矩和电流机械手

打开下一个为模型提供了添加控制器。

open_system (“modelWithControllerAndBasicRobotDynamics.slx”);

机械手动力学

为了设计一个控制器,机械手动力学代表了机械手的关节位置给定转矩输入。这是内部的实现机械手动力学子系统使用前进动力块将关节力矩,关节加速度给定的当前状态,然后两次积分得到完整的联合配置。集成商都初始化为q0处dq0,最初的关节位置和速度。

此外,夹持控制子系统覆盖联合控制力矩的爪与10 N的力致动器应用于关闭或打开夹。

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

在机械手设计良好的位置控制器通常不会达到联合限制,开环的力量从爪行动意味着联合限制必须确保一个现实的反应。更精确的模型,联合饱和复位集成可能与速度,但在这个模型中,这种程度的准确性就足够了。

爪传感器

这个模型还添加了一个更详细的检查当爪爪传感器实际上已经被打开或关闭。爪传感器提取联合配置的最后两个值(值对应于夹持位置),并比较它们的爪位置,给出的closeGripper命令,在MATLAB功能块,钳子的逻辑。的夹状态返回1时夹持关节的位置匹配的期望状态closeGripper命令。当钳子尚未达到这些州,夹状态返回零。这个比赛的行为夹持模型在早些时候,简化模型。

关节空间控制器

这个模型还添加了一个计算力矩控制器,实现了一个基于模型的联合控制的方法。更多细节,请参阅使用机器人机械手模块构建计算力矩控制器执行安全使用机器人机械手轨迹跟踪控制块的例子。这个模型使用相同的控制器,但ABB的弓rigidBodyTree输入而不是考虑索耶。

模拟模型

使用新模型模拟和可视化结果。

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

验证完成工作流Simscape机器人与环境的模型

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

负载提供的最终模型,它具有相同的高级视图。

open_system (“modelWithSimscapeRobotAndEnvironmentDynamics.slx”);

Simscape机器人与环境的植物

这主要与以前的模型是植物模型不同。核心机械手动力学从先前的模型已经取代Simscape模型机器人与环境:

机械手与环境动态

机械手和环境使用Simscape多体构造。通过调用创建的机器人模型smimport在机器人URDF与提供的网格文件。然后,关节和关节驱动力矩的链接通过mux转到标签和配备传感器,恢复关节位置,速度,加速度。

对象,或小部件,实际上是在这个仿真,所以定义小部件的大小。

widgetDimensions = (0.02 0.02 0.07);

接触模型

联系在这个模型分为两类:

  • 钳子和小部件之间的联系

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

在这两种情况下,联系代理用于代替直接地对地接触。使用接触代理加速建模来提高性能。gripper-widget接触,爪接触建模使用两个砖固体,而八球面接触用于模型部件接口。同样,widget-to-environment接触使用球体在每个小部件的四个角落,接触砖固体代表环境。

定义接触模型的参数接近它们的默认状态。

%接触参数刚度= 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多体接触,或扩展到多域模型详细电机,机器人使用的行为。