主要内容

轨迹控制和逆运动学建模

这个模型的万博1manbetx示例演示了如何逆运动学块可以沿着指定的轨迹驱动机械手。所需的轨迹被指定为一系列很密集的终端执行器的操纵者。轨迹生成和路径定义代表许多机器人应用程序选择和操作,从空间加速度和速度资料计算轨迹,甚至模仿外部观测使用摄像机和计算机视觉的关键帧。一旦生成轨迹,逆运动学块用于翻译这个关节空间轨迹,可以用来模拟机械手的动力学和控制器。

模型概述

看到它是如何构建的负荷模型。

open_system (“IKTrajectoryControlExample.slx”);

模型由四个主要操作:

  • 目标构成一代

  • 逆运动学

  • 机械手动力学

  • 姿态测量

目标构成一代

这Stateflow图表选择路径是当前目标的操纵者。图表调整目标下一个路标,一旦机械手到达容忍当前目标。图表转换和组装的组件路径通过齐次变换eul2tform函数。一旦没有其他路点选择,图表终止仿真。

逆运动学

逆运动学计算一组关节角上,从而产生期望的姿势结束效应。使用逆运动学与一个rigidBodyTree模型和指定目标作为一个齐次变换带来的影响。指定一系列的权重相对公差限制解决方案的位置和姿态,和给一个初始估计的共同立场。块输出向量的共同立场,产生所需的构成rigidBodyTree块中指定的模型参数。以确保顺利连续性解决方案,之前的配置解决方案是用作解算器的起始位置。万博 尤文图斯这也减少了冗余的计算如果目标姿势没有更新自上次模拟时间步。

机械手动力学

机械手动力学是由两个部分组成的,一个控制器来产生转矩信号模型和动力学模型的动态操纵这些扭矩信号。控制器在示例中使用前馈分量计算通过机械手的逆动力学和PD反馈控制器来纠正错误。机械手使用的模型前进动力块的工作rigidBodyTree对象。对于更复杂的动力学和可视化技术,考虑利用工具从控制系统工具箱™blockset Simscape多™取代动态块。

姿态测量

姿态测量需要机械手的关节角数据模型和转换成一个齐次变换矩阵作为反馈的路径选择部分。

汇率操纵国的定义

机械手用于此示例是反思索耶™机器人机械手。的rigidBodyTree对象,描述了机械手从URDF进口机器人(统一格式)描述文件使用importrobot

%导入机械手作为rigidBodyTree对象索耶= importrobot (“sawyer.urdf”);索耶。DataFormat =“列”;%定义末端执行器机构的名字eeName =“right_hand”;%定义的关节机械手numJoints = 8;%可视化机械手显示(索耶);xlim ([-1.00 - 1.00]) ylim ([-1.00 - 1.00]);zlim ([-1.02 - 0.98]);视图([128.88 - 10.45]);

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含53个对象类型的补丁,线。这些对象是基础,controller_box pedestal_feet,基座,right_arm_base_link, right_l0,头,屏幕,head_camera, right_l1, right_l2, right_l3, right_l4, right_arm_itb, right_l5, right_hand_camera, right_l6, right_hand, right_wrist, right_torso_itb,躯干、pedestal_mesh, right_arm_base_link_mesh, right_l0_mesh, head_mesh, screen_mesh, right_l1_mesh, right_l2_mesh, right_l3_mesh, right_l4_mesh, right_l5_mesh, right_l6_mesh torso_mesh。

航点代

在这个例子中,机械手的目标是能够描绘出硬币的边界图像中检测到,coins.png。首先,图像的处理找到硬币的边界。

我= imread (“coins.png”);bwBoundaries = imread (“coinBoundaries.png”);图次要情节(1、2、1)imshow(我“边界”,“紧”)标题(原始图像的次要情节(1、2、2)imshow (bwBoundaries,“边界”,“紧”)标题(的处理图像边界检测的)

图包含2轴对象。坐标轴对象1标题原始图像包含一个类型的对象的形象。坐标轴对象2与标题处理图像边界检测包含一个类型的对象的形象。

图像处理后,提取硬币的边缘像素的位置。从MAT-file中加载的数据,boundaryData边界是一个单元阵列,每个单元格包含数组描述单个检测边界的像素坐标。更全面的观点如何生成这些数据可以发现,在这个例子中,“图像边界跟踪”(需要图像处理工具箱)。

负载boundaryData.mat边界边界
类属性名称大小字节边界x1 25376细胞

将数据映射到世界坐标系,我们需要定义图像的位置和像素坐标和空间坐标之间的比例。

%图像原点坐标imageOrigin = (0.4, 0.2, 0.08);%比例因子将从像素到物理距离规模= 0.0015;

所需的终端执行器的欧拉角方向每一点也必须被定义。

eeOrientation =[0,π,0];

在本例中选择的取向是这样的最终效应总是垂直于这个平面图像。

一旦这些信息是每组所需的坐标和欧拉角定义的可以编译成一个路标。每个路标作为six-element表示向量的前三个元素对应于所需的xyz -机械手在世界坐标系的位置。最后三个元素对应的ZYX欧拉角所需的方向。

路标 = ( X Y Z ϕ z ϕ y ϕ x ]

路径点形成一个连接n6组,n在轨迹构成的总数。数组中的每一行对应一个航点的轨迹。

%清理前路点,开始构建路径数组清晰的路点%开始略高于原产地形象waypt0 = [imageOrigin + [0 0。2], eeOrientation);%触摸图像的起源waypt1 = [imageOrigin, eeOrientation];%插入每个元素为平滑的运动图像的起源i = 1:6插值函数= linspace (waypt0(我),waypt1(我),100);锚点(:,i) =插值函数”;结束

总共有10个硬币。simiplicity和速度,一个更小的子集的硬币可以追溯到通过限制传递到锚点总数。下面,numTraces = 3硬币图像中跟踪。

%定义的硬币数量跟踪numTraces = 3;%装配路径点为边界跟踪i = 1: min (numTraces大小(边界,1))%选择边界并映射到物理尺寸段={我}*规模边界;%垫数据方法路标和提升路径之间的界限段=[段(1:);段(:,);段(,)):;% Z-offset之间移动的边界段(1、3)= .02点;段(结尾,3)= .02点;%转化为图像的起源cartesianCoord = imageOrigin +段;%重复所需的方向与路径点添加的数量eulerAngles = repmat (eeOrientation、大小(段,1),1);%将数据附加到年底前路点路点=[锚点;cartesianCoord eulerAngles);结束

这个数组是主要的输入到模型中。

模型设置

几个参数可以运行之前,必须初始化模型。

%初始化大小q0,机器人关节配置在t = 0。这将%之后取而代之的是第一个航点。q0 = 0 (numJoints, 1);%定义一个采样率的模拟。Ts = . 01;%定义一个[1 x6]矢量的方向和相对权重%的位置误差逆运动学解算器。重量= 1 (1,6);%转换第一个航点为初始化一个齐次变换矩阵initTargetPose = eul2tform(锚点(6));initTargetPose(1:3) =路标点(1:3)';%求q0的机械手始于第一个航点本土知识= inverseKinematics (“RigidBodyTree”索耶);本土知识[q0 solInfo] = (eeName initTargetPose,权重q0);

模拟机械手运动

模拟模型,使用sim卡命令。该模型生成的输出数据集,jointData显示了两个情节的进展:

  • X Y情节显示了一个自上而下的视图跟踪动作的机械手。圈之间的线路发生的机械手转换从一个硬币轮廓。

  • 路径跟踪3 d可视化情节的进展。绿点表示的目标位置。红点表示实际的末端执行器的位置通过终端执行器使用反馈控制。

%关闭当前打开的数据关闭所有% &打开模拟模型open_system (“IKTrajectoryControlExample.slx”);sim卡(“IKTrajectoryControlExample.slx”);

MATLAB图

可视化的结果

模型输出的两个数据集可用于可视化仿真。联合配置提供jointData。机器人末端执行器输出为poseData

%去除不必要的网格为更快的可视化clearMeshes(索耶);%数据映射图像[m, n] =大小(我);(X, Y) = meshgrid (0 0: m: n);X = imageOrigin (1) + X *规模;Y = imageOrigin (2) + Y *规模;Z = 0(大小(X));Z = Z + imageOrigin (3);%关闭所有打开的数据关闭所有%初始化一个新的图窗口图;集(gcf,“可见”,“上”);%情节机器人的初始位置显示(索耶,jointData (: 1) ');持有%初始化终端执行器位置p = plot3 (0, 0, 0,“。”);经(X, Y, Z,我');%改变视角和轴视图(65,45)轴([-。1 - 25。25。0 0.75])%遍历输出每隔10-sample可视化结果j = 1:10:长度(jointData)%显示机械手模型显示(索耶,jointData (j:) ',“帧”,“关闭”,“PreservePlot”、假);%得到homoegenous变换输出终端执行器的位置pos = poseData (1:3 4 j);%更新终端执行器位置的阴谋p。XData = [p.XData pos(1)]; p.YData = [p.YData pos(2)]; p.ZData = [p.ZData pos(3)];%更新图drawnow结束

图包含一个坐标轴对象。坐标轴对象包含X, Y ylabel包含13个对象类型的线,表面,补丁。一个或多个行显示的值只使用这些对象标记代表基地,controller_box, pedestal_feet,基座,right_arm_base_link, right_l0,头,屏幕,head_camera, right_l1, right_l2, right_l3, right_l4, right_arm_itb, right_l5, right_hand_camera, right_l6, right_hand, right_wrist, right_torso_itb,躯干、right_arm_base_link_mesh, right_l0_mesh, head_mesh, screen_mesh, right_l1_mesh, right_l2_mesh, right_l3_mesh, right_l4_mesh, right_l5_mesh, right_l6_mesh torso_mesh。