基于Unity的模块装配

该博客介绍了如何利用Unity的ML-Agent模块实现两个3D模块的自动装配。内容涉及环境配置,包括Unity的ML-Agent库引入和3D模型建模导入;详细讲解了装配的定义,如平面角度、距离的计算;并详细阐述了如何配置训练环境,添加Agent模块,设计超参数并进行训练,以及训练结果的查看。
摘要由CSDN通过智能技术生成


前言

利用Unity中的Ml-agent的模块实现两个模块的自动装配。主要包括前期环境的配置、状态、动作和奖励的编程,以及最后利用强化学习实现两个模块的自动装配。


提示:以下是本篇文章正文内容,下面案例可供参考

一、前期准备

1.Unity的Ml-agent模块

Unity的ML-Agent-Toolkit是一个工具,它通过游戏和模拟的方式构建一个可供智能体训练的环境,然后通过简单易用的Python API调用强化学习、模拟学习、神经进化(Neuroevolution)或者其他机器学习的方式对智能体进行训练。

ML-Agent-Toolkit工具是独立于Unity的,下载Unity后需要单独下载ML-Agent工具进行下载。同时需要注意的是不同的Unity版本与不同的ML-Agent工具的版本的适配性。本文采用的是Unity,2019.1.2f1的版本和ML-Agent。

具体的Unity中ML-Agent的安装和使用请参考ML-Agent的使用。

2.3D的建模和导入

通过在Solidworks建立3D模型,然后将3D模块转成 FBX文件,方便后期导入进Unity。具体的3D模型如图
两装配体装配模块

二、环境的配置

1.引入ML-Agent库与工具包

ML-Agent库导入代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MLAgents;

官网下载的工具包放入asset下
在这里插入图片描述

2.Unity中装配的定义

测量平面与平面之间的角度计算
具体思路为:获取想要测量平面的法向量,通过法向量计算角度。平面法向量可以通过Unity中的内置函数Ray实现测量。实现方法如下:
在想要测量的平面外建立一个空物体,然后在空物体下添加代码测量平面的法向量:
在这里插入图片描述
通过Ray计算所需平面的法向量,其代码如下:

Vector3 PlaneNormal;
        Vector3 Direction = target - empty;//target是物体,present是empty
        Ray ray = new Ray(empty, Direction);
        RaycastHit Hit;
        if (Physics.Raycast(ray, out Hit))
        {
   
            // print("法线" + hit.normal);
        }
        PlaneNormal = Hit.normal;
        //print("Hit.normal" + Hit.normal);
        return PlaneNormal;//通过函数获得

获取两个平面的法向量后可以通过反三角函数计算两个平面的角度,在Unity中代码如下:

float VectorRadian = Vector3.Dot(plane1.normalized, plane2.normalized);
float VectorAngle = Mathf.Acos(VectorRadian) * Mathf.Rad2Deg;

其中plane1是第一个平面的法向量,plane2是第二个平面的法向量。

测量平面与平面之间的距离计算
具体的思路是在两个平面之间设置一个空物体,通过Ray函数分别计算到达平面1的距离和到达平面2的距离,然后相加即为两个平面的距离,具体的代码如下:

Vector3 Distance;
		#第一个距离
        Vector3 Direction1 = plane1 - empty;//plaen1是物体,present是empty
        Ray ray = new Ray(empty, Direction1);
        RaycastHit Hit;
        if (Physics.Raycast(ray
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值