勇哥注:
机器人反向动力学,可以取坐标空间中的某个点位,而让机器人的每个关节反向求解出要动多少个单位。
这样你的机器人就不用为了到达某个位置,而依次运动每个关节。
之前我们只能使用关节动画来模拟机器人的动作,或者使用unity的约束来模拟。
现在game4automation的机器人反向动力学就可以做到完全真实的模拟点位运动(PTP运动)。
下图演示了反向动力学走点位的效果:
演示模型和预制件
使用我们的专用演示模型探索 Autonox 机器人的功能,在单个演示场景中包含三种不同的机器人类型。
将这些机器人作为预制件直接访问,以便无缝集成到您的项目中。
演示场景位置:
场景路径: Assets/realvirtual/Professional/IK/AutonoxRobots.unity
Prefabs 目录:
预制件位置: Assets/realvirtual/Professional/IK/AUTONOX
局限性
反向运动学只能用于标准的 6 轴工业机器人。
只有能够将 TCP、Axis6、Axis5 和 4 对齐到一条直线上的机器人才能实现。
线性加速,目前不支持机器人轴的平滑 (sinoide) 加速。
机器人轴的位置必须可以通过以下参数来定义:
机器人准备
机器人必须为逆向运动学做好准备,同时考虑到以下事项:
机器人的零点必须使 Unity X 轴向前对齐,Z 轴向上对齐,
Y 轴向左对齐(在下图中,
您会看到一个额外的右手 coirdinate 系统 - 通常用于工业机器人 - Unity 的坐标系是左手)
RobotIK 脚本本身必须连接到零点中的游戏对象。
第一个旋转轴也必须位于零点处。
所有其他轴不得相对于零点旋转(即 X 轴向前旋转,Z 轴向左旋转,Y 轴向左旋转)
TCP(标准 TCP 以及可能拥有的工具移动 TCP)
还必须在拉伸位置将 Z 对齐到顶部,将 Y 对齐到左侧,将 X 对齐到前面。
在每个轴上都需要连接一个驱动器。对于驱动器,需要定义限制和加速。
在计算可能的解决方案时,会考虑上限和下限
所有 6 轴都需要在 RobotIK 的 Axis 列表中分配。
准备好的机器人运动学预制件
使用我们预配置的机器人运动学预制件简化定义新机器人的过程。
此预制件通过包含 RobotIK 脚本、带驱动器的轴层次结构以及预定义的拾取和放置路径等基本组件来简化设置。
您需要做的就是添加机器人网格的 3D 数据。
准备好的机器人运动学预制件
空机器人运动学预制件:
预制件路径: Assets/realvirtual/Professional/IK/EmptyRobotKinematic.prefab
定制机器人的步骤:
1. 将预制件添加到场景:
将预制件拖动到 Unity 场景中以开始自定义。
2. 解压缩预制件:
在场景中解压缩预制件以访问其各个组件进行调整。
3. 调整轴位置:
修改轴 1 到轴 6 的位置,以匹配机器人数据表中提供的规格。
4. 导入 CAD 数据:
使用 CADLink 以 STEP 格式导入机器人的 CAD 数据,以便准确表示。
5. 导出为 FBX:
使用 FBX 导出器基于导入的 CAD 数据创建 FBX 资产。
6. 将 FBX 添加到模型:
将导出的 FBX 文件放入 Unity 场景中。
7. 组织组件:
将 Axis 1 的 Components 移动到 Unpacked prefab 层次结构中相应 Axis 下的 Axis 6。
8. 计算运动学参数:
在 RobotIK 脚本中启动“计算运动参数”以自动计算运动参数(见下文)
9. 开始测试:
进入播放模式以开始在 Unity 环境中测试机器人的功能和行为。
计算运动学参数
在机器人准备好时,需要计算一次运动参数。
上图中显示的所有参数(a1,a2,b,c1,c2,c3,c4)都是自动计算的,
稍后用于计算逆运动学解。
在计算参数之前,您还需要定义机器人处于编辑器模式的位置。如果弯头朝向 Unity X 方向,
则需要在 Unity X 中选择弯头。
激活 “Do not follow in Edit Mode” 以覆盖所有当前 Target 位置的 “Follow in Edit Mode” 参数。
一切准备就绪后,可以推送 Calc 运动参数,您将在 RobotIK 检查器窗口中看到所有参数。
定义路径
机器人路径是通过排列目标来定义的。目标是机器人的 TCP 在定义位置的对齐情况。
机器人路径和目标必须在 RobotIK 脚本(机器人的零点)下创建为子游戏对象。
要创建路径,必须先创建一个空游戏对象并添加 IKPath 脚本。
可以通过按下 Add new target(添加新目标)在 IKPath Inspector 窗口中添加新目标。
一旦目标处于活动状态,机器人也会在编辑器中跟随到定义的位置。
如果无法到达,则目标周围会出现一个红色球体。
如果激活了路径,则可以在编辑器窗口中移动该路径下的所有目标。
如果按住 Ctrl 键,则可以旋转目标。
可以通过更改 target 列表中的顺序来安排路径的间隔。
轴校正
在某些情况下,可能会发生轴偏移 360 度的情况。
如果您使用的是 PTP 移动,则可以使用 Axis correction 值将定义目标的 Axis 位置设置为手动校正的值:
PTP 移动的轴校正值
转弯校正
在某些特殊情况下,可能会发生 IK 计算返回轴 4 和 6,它们中的每一个都旋转了 180 度(一起旋转 360 度)。
如果启用“转动校正”(Turn correction),则当轴 3 和 5 在两个轴上的总和为 360 时,该值将校正 -180 度。
位置校正
使用大型机器人时,逆向运动学 (IK) 系统在定位方面可能会遇到一些不准确的情况。
要解决此问题,可以应用校正值来提高精度。
该值的计算方法是将目标定义的所需刀具中心点 (TCP) 位置与实际 TCP 位置进行比较。
要应用校正,用户必须手动按 Target 界面中的“设置校正”按钮。
可以通过按下 “Clear Correction” 按钮来删除校正值。
位置校正前
位置校正后
路径属性
Speed Override
覆盖 0 到 1 之间的 Speed 以减慢路径的速度。标准为 1。
Set new TCP 设置新 TCP
自选。为机器人设置新的 TCP 用于路径
Draw Path 绘制路径
在编辑器窗口中将路径绘制为一系列线条。线性运动以绿色绘制,PTP 运动以黄色绘制。
Draw Targets 绘制目标
在编辑器窗口中绘制目标。目标可以通过手柄移动。按 Ctrl 键可以旋转它们。
Path路径
目标序列。
Signal Start
用于启动 Path 的 PLCOutput 信号。
Start
在仿真开始时直接启动路径。
Loop Path(循环路径)
路径结束后,立即再次启动路径。
Signal is Started
Path 启动时的 PLCInput 信号。
Signal Ended
当 Path 结束时的 PLCInput 信号。
Start Next Path
指向下一个路径的 Pointer,可以在此路径之后启动。
Targets
目标是路径中的目标点。在目标中,目标的几个参数被控制
Target Properties目标属性
Right Handed Robot Corrdinates
(只读)目标在右手坐标系中的位置。
Speed to Target
到达目标的速度。如果设置为 1,则所有轴都以最大速度 (在 PTP 上) 或给定的线性速度 (在线性插值上) 驱动。
Linear Acceleration
仅适用于 Linear Move 模式。线性路径上的加速。
Interpolation to Target
目标的插值模式。
Point to Point(PTP)
所有 Axis 将同时到达目的地。时间由花费最长时间的轴控制。
另一个轴的加速度会降低,以便它们在与最慢轴相同的时间内到达目标。
在这种情况下,TCP 的运动是非线性的,无法控制。
Point to Point unsynced
与上述相同,但所有轴都以最大速度驱动并在不同的时间到达目的地。
Linear
在两个 Target 之间以给定的线性加速度和线性速度移动。
Linear Speed to Target
线性插值 (Linear Interpolation) 目标的线速度。
Set Signal
在达到 Target 时设置定义的 Signal。
Set Signal Duration
将 Signal 设置为定义的持续时间
Wait for Seconds
机器人在到达目标后等待定义的时间。
Wait For Signal
在继续路径之前等待目标,直到定义的信号变为 true。
Pick and Place
允许在 Target 上使用 fixer 拾取和放置 MU
Fixer
对 Fixer 对象的引用(应该在 TCP 上)
Pick
如果 Fixer 应该在目标上拾取,则为 True。
Place
如果 Fixer 应放置在目标上,则为 True
Solution
用于选择 8 种可能解决方案之一的滑块。也许并非所有解决方案都是可能的。
Solutions
到达目标的所有解决方案(机器人轴的不同位置)的概述。某些解决方案可能无法实现。
Axis Pos
所选解决方案的 Axis positions (rotations) (轴位置(旋转))。
Reachable
True,如果所选解决方案可到达 Point。
game4automation系列教程:
game4automation教程(一)创建一个带有光源、传送带和感应器的小例子
http://www.skcircle.com/?id=2561
game4automation教程(二)引入传感器、plc输入输出
http://www.skcircle.com/?id=2562
game4automation教程(三)Dirve组件,Drive Behavior组件,Logic Steps逻辑步骤,自定义Motion
http://www.skcircle.com/?id=2563
game4automation教程(四)Grip,Gripper
http://www.skcircle.com/?id=2564
game4automation教程(五)Group组件,Kinematic 组件
http://www.skcircle.com/?id=2565
game4automation教程(六)Interact3D组件,Lamp 组件
http://www.skcircle.com/?id=2566
game4automation教程(七)MU和Source组件
http://www.skcircle.com/?id=2567
game4automation教程(八)MU、Source、Transport surface的实验
http://www.skcircle.com/?id=2568
game4automation教程(九)Kinematic、Grip、Fixer、Drive取放MU的实验一
http://www.skcircle.com/?id=2569
game4automation教程(十)取放MU的实验二,基于RayCast的方式
http://www.skcircle.com/?id=2570
game4automation教程(十一)取放MU的实验三,夹爪取放MU
http://www.skcircle.com/?id=2571
game4automation教程(十二)取放MU的实验四,Grip组件取放MU
http://www.skcircle.com/?id=2572
game4automation教程(十四)Measure Raycast,Measure 测量组件
http://www.skcircle.com/?id=2573
game4automation教程(十五)再次深入理解kinematic组件
http://www.skcircle.com/?id=2575
game4automation教程(十六) Logicsteps组件
http://www.skcircle.com/?id=2576
game4automation教程(十七) Modbus接口
http://www.skcircle.com/?id=2577
game4automation教程(十八) 测试Drive的各种运动方法时遇到的一些问题总结
http://www.skcircle.com/?id=2578
game4automation教程(十九)运动方式:Drive Cylinder 气缸式运动
http://www.skcircle.com/?id=2579
game4automation教程(二十)运动方式:Drive_Follow Position(脉冲输入式运动)
http://www.skcircle.com/?id=2580
game4automation教程(二十一)运动方式:Drive_Continous Destination(可变的连续运动)
http://www.skcircle.com/?id=2581
game4automation教程(二十二)运动方式:Drive_DestinationMotor(点位运动)
http://www.skcircle.com/?id=2582
game4automation教程(二十三)运动方式:Drive_Gear(齿轮运动)
http://www.skcircle.com/?id=2584
game4automation教程(二十四)运动方式:Drive_Speed(恒速运动)、Drive_Simple(简单运动)
http://www.skcircle.com/?id=2585
game4automation教程(二十五)设备按钮的组件Interact 3D,以及丝印文字做法
http://www.skcircle.com/?id=2590
game4automation教程(二十六)再论Sensor的用法
http://www.skcircle.com/?id=2592
game4automation教程(二十七)再论Lamp(信号灯)
http://www.skcircle.com/?id=2593
game4automation教程(二十八)讨论一下Drive的IO's参数的妙用
http://www.skcircle.com/?id=2594
game4automation教程(二十九)再次讨论一下层级面板中的通讯接口对象的图标意义
http://www.skcircle.com/?id=2597
game4automation教程(三十)再次讨论一下SensorBeam和Sensor
http://www.skcircle.com/?id=2599
game4automation教程(三十一)通讯变量在内部赋值与外部赋值之间切换的bug的解决
http://www.skcircle.com/?id=2600
game4automation教程(三十二)Drive_Destination Motor组件怎么中途停止运动?
http://www.skcircle.com/?id=2603
game4automation教程(三十三)Drive_Destination Motor组件和Drive组件的冲突的解决
http://www.skcircle.com/?id=2604
game4automation教程(三十四)如何复位设备,让设备回到播放前的状态?
http://www.skcircle.com/?id=2606
game4automation教程(三十五)一个完整的测试设备
http://www.skcircle.com/?id=2607
game4automation教程(三十六)ModbusTCP通讯的问题解析
http://www.skcircle.com/?id=2608
game4automation教程(三十七)机器人反向动力学
http://www.skcircle.com/?id=2613

