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 可以解析计算或数值计算。
您的末端执行器的3D 位姿(位置和姿态)可以指定6参数: 3 个位置和3个方向。从技术上讲, 假设所需末端的位置是可到达的,如果你的机械手中有多达6非冗余关节, 你可以推导出一个解析解。
机器人设计者很聪明地确保他们的机械手具有多个可控性的自由度, 同时仍然确保分析 IK 解决方案是可能的。例如, 我一直在接受Udacity 机器人软件工程师 Nanodegree, 其中一个项目涉及库卡 KR210 6 自由度机械手的IK(逆运动学)分析。该机械手有一个球形手腕, 分离的位置和方向分析 IK 问题。你可以在 GitHub 上找到我的份书面记录.
那么, 为什么你会选择一个数值解决方案呢?下面是一些想法。
有多个解决方案的情况下, 这是相对容易处理的IK分析 。
左边:IK 正好有两个解决方案-"上构型" 或 "下构型"。(构型---机器人各个关节值的配置)
右边:IK 具有无限的解决方案, 因为基座任何旋转都是有效的构型。
复杂的机械臂案例, 可能是数值解决方案的候选对象。
左: 7 自由度机械手可以将末端效应器定位为多个有效解。
右:机械手上两个坐标系之间的位置约束示例。
综上所述, 逆运动学的解以解析的方式是快速、准确、可靠的。然而, 当你面对更困难的问题时, 数值解决方案往往更容易实现, 甚至是必要的。
现在, 你希望有一个基本的想法, 为什么机械手运动学是重要的, 在现实世界的问题中他们可以如何解决。在 MATLAB 和仿真中, 有两种内置的方法可以与机器人机械手模型一起使用。
刚性体树对象和 Simscape 多体模型都可以从头开始创建, 或者从统一的机器人描述格式 (URDF) 文件中导入。此外, Simscape 多体还可以从通用 CAD 软件中导入3D 模型。克里斯托弗. 汉娜在这上面写了一篇博文。
从2018a 版开始, 机器人系统工具箱包括一个机械手算法的仿真块库。这些块允许您对刚体树对象进行运动学和动力学分析, 从而使上述两种表示在系统级仿真和控制设计应用中共同工作。在第2部分中, 您将进一步了解这一点。
是的, 这些块生成 c/c++ 代码, 这样您就可以在 MATLAB 和Simulink之外部署独立的算法。
机器人系统工具箱为机械手的逆运动学提供两个数值求解器:
下面是一些例子 MATLAB 代码和一个广义 IK 的动画模型。 Rethink Sawyer, 它有一个7自由度的手臂。在这里, 我们设置了一个约束的最终效应器的位置, 同时强制执行, 最终效应指向一个单独的目标点附近的地面。
-
sawyer = importrobot(
'sawyer.urdf',
'MeshPath', ...
-
fullfile(fileparts(which(
'sawyer.urdf')),
'..',
'meshes',
'sawyer_pv'));
-
gik = robotics.GeneralizedInverseKinematics(
'RigidBodyTree',sawyer, ...
-
'ConstraintInputs',{
'position',
'aiming'});
-
-
% Target Position constraint
-
targetPos = [
0.5,
0.5,
0];
-
handPosTgt = robotics.PositionTarget(
'right_hand',
'TargetPosition',targetPos);
-
-
% Target Aiming constraint
-
targetPoint = [
1,
0, -
0.5];
-
handAimTgt = robotics.AimingConstraint(
'right_hand',
'TargetPoint',targetPoint);
-
-
% Solve Generalized IK
-
[gikSoln,solnInfo] = gik(sawyer.homeConfiguration,handPosTgt,handAimTgt)
-
show(sawyer,gikSoln);
测试了 IK 解决方案后, MATLAB 和Simulink允许您探索构建完整的机器人操作系统。步骤如下:
我们在视频 "] 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
Posted by Christoph Hahn, April 25, 2018
在这篇博文中,塞巴斯蒂安. 卡斯特罗将用 MATLAB 和仿真来讨论机器人操作臂。上一部分讨论了运动学(如果你没有阅读它, 我们建议你这样做), 而这一部分讨论动力学.
为了强调地要求水平的机械手控制的重要性, 我想介绍几个工程原型。
当然, 在现实生活中没有什么是非常严格的分离。可能是机器人制造商将提供自己的控制器, 但也可以取决于现有的控制参数, 选项, 甚至可能是一个关节驱动的直接接口。
为了重述前面的部分, 运动学将机器人机械手的关节位置映射为感兴趣的坐标系的位置和方向-通常是端部效应器。另一方面, 动力学将所需的关节力和扭矩映射到它们的位置、速度和加速度。
要从运动学转向动力学, 我们需要更多关于机械手力学的信息。具体地说, 我们需要以下特性:
通常, 您将导入机器人。RigidBodyTree从现有的机械手描述-例如, URDF 文件。在这种情况下, 惯性属性将自动放置在每个机器人。包含树的刚体。
机器人机械手控制器可以包含以下组件。
在我们的视频 "MATLAB and Simulink Robotics Arena: Controlling Robot Manipulator Joints", 我们探索两个不同的关节控制器的例子, 以4自由度ROBOTIS OpenManipulator 平台为特色。您也可以从MATLAB 中央文件交换下载示例文件.
控制器示例 1: 逆运动学 + 关节空间控制器
首先,逆运动学 (IK)用于将参考端效应器位置转换为一组参考关节角。然后, 控制器完全在构型空间中 (即在关节位置上) 操作。
为了平滑运动, 我们通常需要一个闭合形式的轨迹, 如曲线方程。这是因为逆动力学需要位置、速度和加速度来计算所需的关节力/扭矩。因此, 有一个可微的参考轨迹, 使这容易得多。
理论上, 逆动力学应该足以控制机器人手臂。然而, 有些因素:如关节力学 (刚度, 阻尼, 摩擦等),不可测得的扰动, 传感器/驱动器噪音, 甚至数字误差, 都可能会很容易影响到完全开环控制器的鲁棒性。因此, 总是推荐一个额外的反馈补偿器。
虽然前馈和反馈控制部分相对容易实现, 计算成本低廉, 但该控制器结构依赖于求解 IK(逆运动学)。正如我们在前面部分讨论的,机器人系统工具箱的实现使用一个数值解决方案, 因此可以需要大量的计算。您可以通过提供良好的初始猜测 (通常是之前的测量) 来解决此问题, 限制最大迭代次数, 或者切换到解析IK 解决方案。
第二个控制器执行任务空间中的控制, 即, 在末端执行器位置和方向上。此外, 它还使用几何雅可比来避免逆运动学的需要。
几何雅可比是机器人配置q (关节角度/位置) 的函数, 所以通常记作为J (q)。雅可比是一个从关节速度到世界速度的坐标框架的映射。然而, 从数学角度看, 你可以发现它也映射关节力/扭矩到世界力/扭矩。我发现这个博客帖子是一个有用的参考。
下面是这个示例是控制器的仿真模型的截图。与上面的示意图不同, 该模型包含其他实际的部分, 如滤镜、速率限制器、饱和度和具有基本逻辑的爪手控制器。您可以从MATLAB 中央文件交换下载此模型.
一旦你有了你的机械手模型, 在 MATLAB 和仿真中有很多工具可以帮助你设计关节控制器。这些包括
ROBOTIS OpenManipulator 模型 "肩" 关节上的 PID 调谐器输出
传统的控制设计依赖于线性化, 或者找到一个关于特定操作点的非线性模型的线性近似--例如, 机械手的 "home" 或平衡位置。当机器人的状态偏离近似的线性区域时,控制器的有效性会降低,甚至可能不稳定。
非线性控制技术可以通过考虑系统的测量状态 (在我们的情况下, 关节或末端执行器位置) 来解决这个问题。前馈技术, 如逆动力学, 或计算几何雅可比, 可以确保控制器在模型中的非线性。另一个流行的技术是增益调度, 这既可以用于传统的控制器和MPC 控制器.
另一种选择是采用无模型技术, 例如:
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#