(转载)MATLAB机器人运动学与动力学

2019年4月3日下午,MATLAB微信公众号上的一篇文章:特此贴在此处,参考学习  :D

MATLAB中的机械臂算法--运动学:https://mp.weixin.qq.com/s/BOumG8LP8t89AMNSyUSQpA

2019年4月10日下午,MATLAB微信公众号更新这里加上:

MATLAB机器臂算法--动力学:https://mp.weixin.qq.com/s/opQcpv02sysIcz8seg3lkQ

2019年4月19日下午,MATLAB微信公众号更新这里加上:

MATLAB机器臂算法--路径规划:https://mp.weixin.qq.com/s/uNW7Kbsr1rxFT6jqI-rCiA

2020年6月24日下午:官网博客机器人轨迹规划:https://blogs.mathworks.com/racing-lounge/2019/11/06/robot-manipulator-trajectory/?s_tid=srchtitle

以上为强烈推荐阅读,毕竟比较专业些!!!

主(以下):

机器人操纵, 1 部分: 运动学

Posted by Christoph Hahn, April 11, 2018

在这篇博文中,塞巴斯蒂安. 卡斯特罗将用 MATLAB 和仿真来讨论机器人操作。这部分将讨论运动学, 接下来的部分将讨论动力学.

– –

机器人机械臂速成课程

让我们从运动学和动力学的快速比较开始。

  • 运动学是对运动的分析而不考虑力。在这里, 我们只需要几何性质, 如长度和自由度的机械手机构。
  • 动力学是对由力引起的运动的分析。除了几何, 我们现在需要的参数, 如质量和惯性计算物体的加速度。

机器人机械手通常由几个关节组成。关节由旋转或 平移(线性) 自由度 (自由度) 组成 。因此, 可以控制关节位置, 将机器人的末端执行器放置在3D 空间中。

如果你知道机器人的几何形状和所有的关节位置, 你就可以计算出机器人上任何点的位置和方向。这称为正向运动学 (FK).

然而, 更频繁的机器人控制问题恰恰相反。我们要计算所需的关节角度, 以便末端执行器达到一个特定的位置和方向。这被称为逆运动学 (IK), 更难解决。

解逆运动学

根据您的机器人几何特点, IK 可以解析计算或数值计算。

  • 解析解意味着, 你可以以闭合形式推导出期望的末端执行器位置的所需要的关节位置构型。这是有益的, 因为你做所有的工作是离线的和解算 IK 也是快速的。与工程中的一切一样: 如果你有一个精确的系统模型, 你应该好好利用它!
  • 数值解通常比解析解更慢、更不容易预测, 但它们可以解决比解析解更难的问题 (我们在下面展开)。然而, 这些解决方案会引入初始条件、优化算法选择、甚至随机性选择等形式的不确定性。所以, 你可能无法得到你想要的答案。

您的末端执行器的3D 位姿(位置和姿态)可以指定6参数: 3 个位置和3个方向。从技术上讲, 假设所需末端的位置是可到达的,如果你的机械手中有多达6非冗余关节, 你可以推导出一个解析解。 

机器人设计者很聪明地确保他们的机械手具有多个可控性的自由度, 同时仍然确保分析 IK 解决方案是可能的。例如, 我一直在接受Udacity 机器人软件工程师 Nanodegree, 其中一个项目涉及库卡 KR210 6 自由度机械手的IK(逆运动学)分析。该机械手有一个球形手腕, 分离的位置和方向分析 IK 问题。你可以在 GitHub 上找到我的份书面记录.

那么, 为什么你会选择一个数值解决方案呢?下面是一些想法。

  • 你的机械手有多余的自由度 (总是7或更多的情况下)
  • 你不想推导出数学, 并有一个数值解的计算资源
  • 您的目标位置无效, 但仍希望尽可能接近它。
  • 有多个, 甚至是无限的解析解
  • 你想要引入多个复杂的约束

有多个解决方案的情况下, 这是相对容易处理的IK分析 。
左边:IK 正好有两个解决方案-"上构型" 或 "下构型"。(
构型---机器人各个关节值的配置
右边:IK 具有无限的解决方案, 因为基座任何旋转都是有效的构型。

复杂的机械臂案例, 可能是数值解决方案的候选对象。
左: 7 自由度机械手可以将末端效应器定位为多个有效解。
右:机械手上两个坐标系之间的位置约束示例。

综上所述, 逆运动学的解以解析的方式是快速、准确、可靠的。然而, 当你面对更困难的问题时, 数值解决方案往往更容易实现, 甚至是必要的。

机器人在 MATLAB 和Simulink中的代表

现在, 你希望有一个基本的想法, 为什么机械手运动学是重要的, 在现实世界的问题中他们可以如何解决。在 MATLAB 和仿真中, 有两种内置的方法可以与机器人机械手模型一起使用。

Matlab(机器人模型及对应的URDF文件,然后代码importrobot('xxxx.urdf'))

  • 如何:创建刚性体树对象
  • 何时使用:求解正、逆运动学和动力学, 提取机械性能 (雅可比, 质量矩阵, 重力扭矩等)

Simulink(机器人mesh文件和对应的URDF文件:然后smimport('xxx.urdf'))

  • 如何:创建Simscape多体模型
  • 何时使用:系统级动态仿真, 与驱动器物理模型的集成, 接触力学等。

 

刚性体树对象和 Simscape 多体模型都可以从头开始创建, 或者从统一的机器人描述格式 (URDF) 文件中导入。此外, Simscape 多体还可以从通用 CAD 软件中导入3D 模型。克里斯托弗. 汉娜在这上面写了一篇博文。

从2018a 版开始, 机器人系统工具箱包括一个机械手算法的仿真块库。这些块允许您对刚体树对象进行运动学和动力学分析, 从而使上述两种表示在系统级仿真和控制设计应用中共同工作。在第2部分中, 您将进一步了解这一点。

是的, 这些块生成 c/c++ 代码, 这样您就可以在 MATLAB 和Simulink之外部署独立的算法。

逆运动学在 MATLAB 和仿真中的运用

机器人系统工具箱为机械手的逆运动学提供两个数值求解器:

  • 逆运动学(IK):强制执行关节限制, 并允许为每个位置和方向目标提供相对权重。
  • 广义逆运动学(GIK):允许您添加多个和更复杂的约束, 如坐标帧之间的相对位置、针对某些对象或时变的关节限制。

下面是一些例子 MATLAB 代码和一个广义 IK 的动画模型。 Rethink Sawyer, 它有一个7自由度的手臂。在这里, 我们设置了一个约束的最终效应器的位置, 同时强制执行, 最终效应指向一个单独的目标点附近的地面。


  
  
    
    
    
    
  1. sawyer = importrobot( 'sawyer.urdf', 'MeshPath', ...
  2. fullfile(fileparts(which( 'sawyer.urdf')), '..', 'meshes', 'sawyer_pv'));
  3. gik = robotics.GeneralizedInverseKinematics( 'RigidBodyTree',sawyer, ...
  4. 'ConstraintInputs',{ 'position', 'aiming'});
  5. % Target Position constraint
  6. targetPos = [ 0.5, 0.5, 0];
  7. handPosTgt = robotics.PositionTarget( 'right_hand', 'TargetPosition',targetPos);
  8. % Target Aiming constraint
  9. targetPoint = [ 1, 0, - 0.5];
  10. handAimTgt = robotics.AimingConstraint( 'right_hand', 'TargetPoint',targetPoint);
  11. % Solve Generalized IK
  12. [gikSoln,solnInfo] = gik(sawyer.homeConfiguration,handPosTgt,handAimTgt)
  13. show(sawyer,gikSoln);

逆运动学的全局考虑

测试了 IK 解决方案后, MATLAB 和Simulink允许您探索构建完整的机器人操作系统。步骤如下:

  • 集成 IK 与机器人动力学仿真
  • 添加其他算法, 如监视逻辑、感知和路径规划
  • 从算法中自动生成独立的 c/c++ 代码, 并部署到硬件或中间件 (如 ROS) 中。

我们在视频 "MATLAB and Simulink Robotics Arena: Designing Robot Manipulator Algorithms" 中进行了讨论, 其特点是4自由度ROBOTIS OpenManipulator 平台。您可以从MATLAB 中央文件交换下载示例文件.

总结

你们中的许多人可能正在为已经有内置关节扭矩控制器的现有机器人进行算法开发。从这个角度, 你可以假设机器人关节将充分跟踪你提供的任何有效的点位(末端执行器位置)设定。

运动学单独可以是有用的设计运动规划算法, 以及执行分析完全基于机器人几何-例如, 工作空间分析或避免碰撞。

在接下来的部分中, 我们将更多地讨论机械手动力学, 以及如何使用 MATLAB 和仿真技术来简化底层控制设计应用程序。

Robot Manipulation, Part 1: Kinematics

https://blogs.mathworks.com/racing-lounge/2018/04/11/robot-manipulation-part-1-kinematics/?dir=autoplay

机器人操作臂,第 2 部分: 动力学与控制

Posted by Christoph Hahn, April 25, 2018

在这篇博文中,塞巴斯蒂安. 卡斯特罗将用 MATLAB 和仿真来讨论机器人操作臂。上一部分讨论了运动学(如果你没有阅读它, 我们建议你这样做), 而这一部分讨论动力学.

介绍

为了强调地要求水平的机械手控制的重要性, 我想介绍几个工程原型。

  • 机器人程序员通常从具有可控关节或末端执行器位置控制开始。如果你是一个机器人程序员, 你可能正在实施运动规划算法和集成机械手与其他软件组件, 如感知和决策。
  • 机器人设计者有一个目标。如果你是机器人设计师, 你需要提供一个能够安全可靠地接受关节或末端效应器命令的机械手。您可能会应用此帖子中讨论的一些控制设计技术, 并在嵌入式系统上实现这些控制器。

当然, 在现实生活中没有什么是非常严格的分离。可能是机器人制造商将提供自己的控制器, 但也可以取决于现有的控制参数, 选项, 甚至可能是一个关节驱动的直接接口。

从运动学到动力学

为了重述前面的部分, 运动学将机器人机械手的关节位置映射为感兴趣的坐标系的位置和方向-通常是端部效应器。另一方面, 动力学将所需的关节力和扭矩映射到它们的位置、速度和加速度。

要从运动学转向动力学, 我们需要更多关于机械手力学的信息。具体地说, 我们需要以下特性:

  • 质量:惯性张量, 与的扭矩和角加速度有关。由于该矩阵是斜对称的, 所以可以用6参数定义它:
    • 3对角元素(转动惯量), 它与轴上的扭矩有关, 与同一轴的加速度有关。
    • 3非对角的元素(惯性积), 它与关于轴的扭矩有关另外两个轴的加速度。
  • 质心:如果质心不是位于我们定义的坐标系中, 我们需要应用平行轴定理将质心旋转转换为我们感兴趣的坐标系中。

通常, 您将导入机器人。RigidBodyTree从现有的机械手描述-例如, URDF 文件。在这种情况下, 惯性属性将自动放置在每个机器人。包含树的刚体。

控制关节力和扭矩

机器人机械手控制器可以包含以下组件。

  • 反馈:使用期望和测量(实际)的运动计算关节输入。这通常涉及一个控制定律, 最大限度地减少期望运动和测量(实际)运动之间的误差。
  • 前馈:使用期望的运动只计算关节的输入。这往往-但不一定-涉及一个模型的机械手力学计算开放回路输入。

 

在我们的视频 "MATLAB and Simulink Robotics Arena: Controlling Robot Manipulator Joints", 我们探索两个不同的关节控制器的例子, 以4自由度ROBOTIS OpenManipulator 平台为特色。您也可以从MATLAB 中央文件交换下载示例文件.

控制器示例 1: 逆运动学 + 关节空间控制器

首先,逆运动学 (IK)用于将参考端效应器位置转换为一组参考关节角。然后, 控制器完全在构型空间中 (即在关节位置上) 操作。

  • 前馈:使用逆动力学对我们的机械手模型。这计算所需的关节力/扭矩, 使机械手遵循所需的运动, 并补偿重力。
  • 反馈:使用 PID 控制。每个关节 (4 个旋转关节 + 爪手) 都有独立的控制器, 最大限度地减少所需和测量的运动之间的误差。

为了平滑运动, 我们通常需要一个闭合形式的轨迹, 如曲线方程。这是因为逆动力学需要位置、速度和加速度来计算所需的关节力/扭矩。因此, 有一个可微的参考轨迹, 使这容易得多。

理论上, 逆动力学应该足以控制机器人手臂。然而, 有些因素:如关节力学 (刚度, 阻尼, 摩擦等),不可测得的扰动, 传感器/驱动器噪音, 甚至数字误差, 都可能会很容易影响到完全开环控制器的鲁棒性。因此, 总是推荐一个额外的反馈补偿器。

虽然前馈和反馈控制部分相对容易实现, 计算成本低廉, 但该控制器结构依赖于求解 IK(逆运动学)。正如我们在前面部分讨论的,机器人系统工具箱的实现使用一个数值解决方案, 因此可以需要大量的计算。您可以通过提供良好的初始猜测 (通常是之前的测量) 来解决此问题, 限制最大迭代次数, 或者切换到解析IK 解决方案。

控制器示例 2: 任务空间控制器

第二个控制器执行任务空间中的控制, 即, 在末端执行器位置和方向上。此外, 它还使用几何雅可比来避免逆运动学的需要。

几何雅可比是机器人配置q (关节角度/位置) 的函数, 所以通常记作为J (q)。雅可比是一个从关节速度到世界速度的坐标框架的映射。然而, 从数学角度看, 你可以发现它也映射关节力/扭矩到世界力/扭矩。我发现这个博客帖子是一个有用的参考。

  • 这个控制器的前馈项只做一件事: 补偿重力。
  • 反馈对终端执行器的 XYZ 位置进行 PID 控制 (这里忽略了方向, 但你真的不应该!) 计算末端执行器坐标系下所需的力。然后, 雅可比将控制输出转换为关节扭矩和力。

下面是这个示例是控制器的仿真模型的截图。与上面的示意图不同, 该模型包含其他实际的部分, 如滤镜、速率限制器、饱和度和具有基本逻辑的爪手控制器。您可以从MATLAB 中央文件交换下载此模型.

 

控制设计技术综述

一旦你有了你的机械手模型, 在 MATLAB 和仿真中有很多工具可以帮助你设计关节控制器。这些包括

  • 单输入单输出补偿器的PID自动调节器
  • 多输入多输出 (MIMO) 系统控制系统设计与控制系统调谐器
  • 模型预测控制器的MPC 设计器( model-predictive controllers)

ROBOTIS OpenManipulator 模型 "肩" 关节上的 PID 调谐器输出

传统的控制设计依赖于线性化, 或者找到一个关于特定操作点的非线性模型的线性近似--例如, 机械手的 "home" 或平衡位置。当机器人的状态偏离近似的线性区域时,控制器的有效性会降低,甚至可能不稳定。

非线性控制技术可以通过考虑系统的测量状态 (在我们的情况下, 关节或末端执行器位置) 来解决这个问题。前馈技术, 如逆动力学, 或计算几何雅可比, 可以确保控制器在模型中的非线性。另一个流行的技术是增益调度, 这既可以用于传统的控制器和MPC 控制器.

另一种选择是采用无模型技术, 例如:

  • 优化:通过仿真优化 Simulink Design Optimization, 可以优化控制参数。虽然优化不保证稳定性, 但它允许您自动调整参数的广度, 如增益, 控制效果/速率限制, 阈值等, 这可能导致良好的结果-特别是在高度非线性系统
  • 机器学习:强化学习, 或通过尝试和错误进行自动学习是一个常用的技术, 用于机器人操作。例如,本文和视频显示了深层强化学习, 也就是说, 使用强化学习技术的深层神经网络的学习参数。

Robot Manipulation, Part 2: Dynamics and Control

https://blogs.mathworks.com/racing-lounge/2018/04/25/robot-manipulation-part-2-dynamics-and-control/?dir=autoplay

结论

现在你已经看到了机器人机械手设计的运动学和动力学的概述。我希望这是一个有用的介绍。 一些常用的技术在实践中,MATLAB 和Simulink可以帮助你设计和控制机器人。

我们希望Simulink可以在您设计阶段探索不同的体系结构,集成监督逻辑,进行权衡研究等方面为您提供帮助。 此外,记得Simulink允许您从控制算法自动生成独立的C / C ++代码,因此它们可以部署到硬件或中间件(例如ROS)

如果你想看到更多的关于机器人操作的材料, 或机器人的其他主题, 请随时给我们留下评论或电子邮件在[email protected] roboticsarena@mathworks. com。

参看网址:

https://blogs.mathworks.com/racing-lounge/2017/11/08/matlab-simulink-ros/

 https://blogs.mathworks.com/racing-lounge/category/robotics/?s_tid=Blog_racing-lounge_Category

 https://blogs.mathworks.com/racing-lounge/2018/04/25/robot-manipulation-part-2-dynamics-and-control/?dir=autoplay#

你可能感兴趣的:(Matlab与机器人,matlab)