UnityVR--机械臂场景13-简单流水线应用5(下载)

  前篇的流水线应用,使用了事件来通知各个设备的协调工作,缺点是代码不太容易理解,导致不好调试。因此本篇写了一个简单使用布尔判断条件来执行手臂、手爪运行的任务。

 1. 机械臂IK函数修改

  本例使用的是Kuka机械臂,因为姿态不同,解算函数相比较前篇稍微修改了一点。

UnityVR--机械臂场景13-简单流水线应用5(下载)_第1张图片 UnityVR--机械臂场景13-简单流水线应用5(下载)_第2张图片

   S_Axis_1和S_Axis_2两个关节之间的有一个位置偏差,在计算时,将旋转的Sita_3弧度位置加在 S_Axis_1的位置上,就能得到S_Axis_2的新位置: 

        var newplace = Quaternion.Euler(0, sita_3 - 90, 0)*L;
        Vector3 newBase = Base.position + newplace;

  机械臂的脚本各节点的设置如下,按对应名称拖入。这里只实现了3个旋转轴:

UnityVR--机械臂场景13-简单流水线应用5(下载)_第3张图片

  2. 旋转关节控制:

  旋转关节依旧按前篇,重写Transform的Rotate方法,使用DoTween实现旋转动画

UnityVR--机械臂场景13-简单流水线应用5(下载)_第4张图片

  3. 机械臂动作判断条件

  本例主要是使用3个布尔值判断机械臂的当前状态:抓取工件、放置工件、回零。每一个动作结束后都将布尔值取反。虽然麻烦,但是比较容易理解。

  4. 工件设置

  机械臂抓取的工件需要放入指定层中,在传感器的脚本中会检测相应的层(这里设置的层号是7,层名是“Loader")

UnityVR--机械臂场景13-简单流水线应用5(下载)_第5张图片

Physics.Linecast(emitter.position, receiver.position, out RaycastHit hit, LayerMask.GetMask("Loader"));

  5. 各个对象间相互调用的设置

  本例比较简单粗暴,所有需要被调用的节点都设置为公共变量public将对象拖入,因此设置时需要都检查一遍:

  (1)机械臂需要调用手爪:

UnityVR--机械臂场景13-简单流水线应用5(下载)_第6张图片

   (2)手爪需要调用机械臂及手爪的两个手指

UnityVR--机械臂场景13-简单流水线应用5(下载)_第7张图片

   (3)传感器需要通知机械臂和传送带的Engine

UnityVR--机械臂场景13-简单流水线应用5(下载)_第8张图片

   6. 其他需要注意的:

  (1)传送带的引擎设置,EnginePower为0时传送带停止

UnityVR--机械臂场景13-简单流水线应用5(下载)_第9张图片

   (2)传感器上加了一个碰撞器,目前场景中没有使用,但也可以作为一种触发机械臂移动的方法。

 UnityVR--机械臂场景13-简单流水线应用5(下载)_第10张图片

if (other.gameObject.layer == 7 && robotArm.Ahome) robotArm.GetPiece(other.transform);

资源下载地址:(11条消息) 【免费】一个简单的Unity机械臂流水线例子,使用KUKA机械臂-C#文档类资源-CSDN文库

你可能感兴趣的:(UnityVR--机械臂场景,unity,c#)