MATLAB —— 机械臂工作空间分析

系列文章目录


前言

本示例展示了如何使用可操作性指数对不同类型的机械手进行工作空间分析。工作空间分析是一种有用的工具,可用于确定机器人工作空间中最容易改变末端效应器位置和方向的区域。本示例的重点是利用不同的可操控性指数类型来分析各种机械手的工作空间。了解工作空间对于优化位置和高效运动至关重要,可以精确定位机器人可以执行精确运动的区域。这将提高机器人操作的效率和安全性。


一、 可操作性指数类型

1.1 指数类型概述

manipulabilityIndex 函数支持三种指数类型,用于计算操纵器的可操纵性: 吉川(Yoshikawa)、逆条件(Inverse Condition)和浅田(Asada)。这些类型以不同的方式量化机器人操作的能力。以下是每种指数的概述:

1.2 吉川指数

该指数量化机械手从给定配置向任意方向移动的能力。数值越高,表示机械手越容易改变末端执行器的位置和方向。该指数可用于优化路径规划。通过该指数类型,您可以确定具有高灵巧性的配置,确保运动平稳,不易出现奇异现象。

1.3 反向条件数

该指标衡量末端执行器速度对关节速度变化的敏感度。它能突出显示机械手在哪些配置下由于对关节速度变化高度敏感而难以执行精确动作。该指数在外科手术机器人的微操作等场景中非常有价值,在这些场景中,对轻微动作的精确控制至关重要。

1.4 Asada 指数

该指数衡量机器人在不同方向上移动和施力的能力,同时考虑机器人的结构和对力的反应。该指数考虑了机器人机械手的动态性能。它是评估机械手负载能力的有用指标。通过应用 Asada 指数,您可以确定优化机器人负载能力的配置,确保稳定性并将风险降至最低。

有关这些可操控性指数类型的更多信息,请参阅 IndexType 属性。

1.5 指数类型分析图

为了显示每种索引类型之间的差异,请使用每种索引类型分析 Universal UR5e 机械手的工作空间。

加载 Universal UR5e 机械手的机械手模型。

Matlab 复制代码
ur5e = loadrobot("universalUR5e",DataFormat="row");
ur5e.Gravity = [0 0 -9.81];

生成无环境障碍物的机械手工作空间。该工作空间由末端执行器位置及其相应的关节配置表示。

Matlab 复制代码
[wksp,cfgs] = generateRobotWorkspace(ur5e,{});

1.6 吉川指数

计算每个工作区配置的吉川可操控性指数值。

Matlab 复制代码
mIndexYoshikawa = manipulabilityIndex(ur5e,cfgs,IndexType="yoshikawa");

使用工作区点和索引值对机器人进行工作区分析。请注意,红色区域表示末端执行器无法顺利移动的位置。

Matlab 复制代码
show(ur5e);
hold on
showWorkspaceAnalysis(wksp,mIndexYoshikawa);
hold off
title("Yoshikawa index");
axis auto

1.7 逆条件指数

接下来,使用逆条件指数类型计算可操作性。

Matlab 复制代码
mIndexInvCond = manipulabilityIndex(ur5e,cfgs,IndexType ="inverse-condition");

使用工作空间点和索引值对机器人进行工作空间分析。请注意,红色区域表示关节角度变化对末端执行器姿势影响较大的位置。

Matlab 复制代码
show(ur5e);
hold on
showWorkspaceAnalysis(wksp,mIndexInvCond);
hold off
title("Inverse Condition Index");
axis auto

1.8 浅田指数

使用 Asada 指数计算可操作性。指定运动分量只根据线性 xyz 分量进行计算。当运动分量为线性时,这种指数类型的差异更容易看出。

Matlab 复制代码
mIndexAsada = manipulabilityIndex(ur5e,cfgs,IndexType="asada",MotionComponent="linear");

使用工作区点和索引值对机器人进行工作区分析。请注意,在蓝色区域,从关节向末端效应器传递力和速度的效率非常高。

Matlab 复制代码
figure
show(ur5e);
hold on
showWorkspaceAnalysis(wksp,mIndexAsada);
hold off
title("Asada Index")
axis auto

1.9 主要启示

图表显示,工作空间边缘的可操控性值明显较低,因为机器人在这些区域的操控范围已达到极限。这种限制阻碍了机器人操纵器有效执行操纵任务的能力。相反,向工作区中心移动时,可操控性值会增加。在这些中心区域,机器人表现出较高的可操控性,并且远离奇异点,从而提高了执行任务的效率。

在决定工作区的操作区域时,应避免可操控性值较低的区域,因为在这些区域内,机器人可能会在精度和速度上遇到困难。不同的可操控性指数能让人对机器人机械手的运动和动态能力有不同的了解。因此,根据具体应用选择合适的可操控性指数类型对于实现最佳性能至关重要。

二、运动组件

MotionComponent 的名-值参数决定了计算可操控性时要考虑的运动类型。几何雅可比有六行,分别表示末端效应器可能执行的三种旋转和三种平移运动。您可以使用 MotionComponent 参数根据应用情况筛选出特定行。

manipulabilityIndex 函数支持三种常用的自由度,以及一种自定义方式来选择六个自由度的组合:

  • 组合自由度 - 同时考虑线性运动和角度运动。使用该选项时,可操控性指数计算将考虑雅各布的所有六行。
  • 线性 - 只考虑线性运动。这意味着可操控性指数计算只考虑雅各布方程的第 4、5 和 6 行。
  • 角度 - 只考虑角度运动。这意味着可操控性指数计算只考虑第 1、第 2 和第 3 行。
  • 自定义 - 使用六元素向量指定在计算可操控性指数时要考虑的运动分量。

使用此信息对两关节刚体树(twoJointRigidBodyTree)机械手模型进行工作空间分析。这是一个平面机械手,末端效应器只能在 xy 平面内平移。

加载机械手并生成工作空间。

Matlab 复制代码
robot = twoJointRigidBodyTree("row");
[wksp,cfgs] = generateRobotWorkspace(robot,{});

为每个生成的配置计算可操控性指数值。使用组合选项可考虑几何雅各布的所有行。

Matlab 复制代码
mIndexCombined = manipulabilityIndex(robot,cfgs,MotionComponent="combined");

使用可操作性值进行工作空间分析。将视图设置为 xy 平面。

Matlab 复制代码
show(robot);
hold on
showWorkspaceAnalysis(wksp, mIndexCombined);
hold off
title("Workspace Analysis Using All Motion Components")
view(0,90)
axis auto

图中显示,当可操作性计算考虑到所有运动组件时,整个工作空间的可操作性为零。出现这种情况的原因是,函数考虑了雅各布方程中对末端效应器运动没有影响的行。如前所述,由于末端效应器只能在 xy 平面上运动,因此指定只考虑 x 和 y 线性分量。

Matlab 复制代码
mIndexCustom = manipulabilityIndex(robot,cfgs,MotionComponent=[0 0 0 1 1 0]);

使用可操作性值进行工作区分析。

Matlab 复制代码
show(robot);
hold on
showWorkspaceAnalysis(wksp,mIndexCustom);
hold off
title("Workspace analysis with X- and Y-Linear Components")
view(0,90)
axis auto

请注意,工作区边缘的可操控性最低,然后向底部增加,当数值接近底部时又会降低。因此,通过选择适当的运动组件,可以分析机器人的工作空间。

蓝色区域代表机器人可操作性最高的区域,表明这些区域是机器人执行高精度任务的最有效区域。因此,需要精细操作或精确控制的任务应计划在该区域进行。红色区域表示机器人可操控性较低的区域。这些区域可能不太适合执行操纵任务。选择正确的运动组件组合来计算可操控性也很重要,因为选择不正确的运动组件会导致工作区分析无法代表机器人的实际能力。

三、工作区分析的体素化

工作区分析的体素化与之前的所有绘图一样,可以简化工作区分析绘图。由于大量的工作区点可能会使显示混乱,因此使用体素化图更容易理解工作区中的可操作性分布。

不过,您也可以将 showWorkspaceAnalysis 函数的 Voxelize name-value 参数设置为 false,从而将非体素化曲线图可视化。如果工作空间点较少且稀疏,或者对于机器人来说体素尺寸过大,非体素化图可能比体素化图更有用。

使用上一节中的同一平面机械手机器人模型以及之前的工作空间点和可操控性指数值。

Matlab 复制代码
figure
show(robot);
hold on
showWorkspaceAnalysis(wksp,mIndexCustom,Voxelize=false);
hold off
title("Non-Voxelized Workspace Analysis")
view(0,90)
axis auto
相关推荐
新智元1 分钟前
Meta没做的,英伟达做了!全新架构吞吐量狂飙6倍,20万亿Token训练
人工智能·openai
新智元1 分钟前
Hinton 预言成真!AI 接管美国一半白领,牛津哈佛扎堆转行做技工
人工智能·openai
艾莉丝努力练剑8 分钟前
【C语言16天强化训练】从基础入门到进阶:Day 1
c语言·开发语言·数据结构·学习
颖川守一13 分钟前
C++c6-类和对象-封装-设计案例2-点和圆的关系
开发语言·c++
aneasystone本尊13 分钟前
学习 Coze Studio 的知识库入库逻辑
人工智能
然我14 分钟前
从 “只会聊天” 到 “能办实事”:OpenAI Function Call 彻底重构 AI 交互逻辑(附完整接入指南)
前端·javascript·人工智能
岁月宁静21 分钟前
软件开发核心流程全景解析 —— 基于 AI 多模态项目实践
前端·人工智能·后端
wangjiaocheng22 分钟前
软件功能分解输入处理输出递归嵌套模型
人工智能
G等你下课23 分钟前
Function call
前端·人工智能
岁月宁静23 分钟前
MCP 协议应用场景 —— Cursor 连接 Master Go AI
前端·vue.js·人工智能