如何基于three.js(webgl)引擎架构,实现3D密集架库房,3D档案室智能巡检
前言:
看了一下 距离上篇课程发布,一年多了。这一年多来也迷茫,也怀疑,在AI时代,是不是失去了写文章的意义了。切身感受到那种面对科技浪潮时的迷茫和无力感。当AI能写出流畅、结构清晰的文章,甚至模仿不同风格时,着实令人沉思。
继续更新,是否即将失去意义?这种困惑很真实,但也值得重新审视写文章的本质。经过这段时间的思考挖掘,突然明白了,“写文章”的意义远恐怕不止于此,AI 难以真正替代的核心价值在于,独一无二的“人”的视角与洞见;个体经验与情感;批判性思维与立场。
情感共鸣与连接,自我探索与表达欲都是继续更新的意义与动力吧。
我们还是闲话少叙,切入正题。书接上回,我们谈聊到智能档案库房的机器人巡检,盘点等。这里我们继续讲解巡检路径规划等内容。
序:
当档案库房突破二维平面,在虚拟空间中拔地而起时,传统的巡检方式正面临前所未有的挑战。蜿蜒的立体货架、交错的消防通道、分层的温控区域,构成了一个需要重新定义巡检规则的数字迷宫。
接下来将以"空间认知-路径建模-动态优化"为逻辑主线。通过三维建模技术,构建数字孪生库房的基础坐标系;继而引入蚁群算法、遗传算法等智能路径规划工具,解决多目标约束下的最优路径求解问题;实现从理论到实践的闭环验证。
下面我们探讨并如何利用三维编辑技术,规划人工巡检路径规划的运作流程。
一、建模
1.1、效果展示
1.1.1、园区楼宇展示
楼宇园区建模,主旨就是好看,炫酷。
1.1.2、楼层展示
楼层采用爆炸方式展开,方便用户选择楼层
1.1.3、档案室展示
可选择楼层双击进入楼层库房
1.1.4、档案查看展示
二、添加管理设备
2.1、添加管理效果展示
2.2、实现说明
支持编辑场景模型,支持拖拽、旋转、删除等功能。系统内置不同设备类型模型,用户可以自定义添加场景中设备模型的数量,以及绑定数据关系。便于后期巡检期间检查该设备状态以及数据等。
function () {
var devparams = JSON.stringify(getDevSaveDatas());
var systemName = $("#systemName").val();
var roomName = $("#roomName").val();
webapi.setSystemConfig(devparams, systemName, roomName, function (response) {
if (response && response.msg && response.msg =="操作成功") {
$("#roomTitle").html(roomName);
$("#systemTitle").html(systemName);
}
}, function (err) {
});
msj3DObj.viewState = 1;
modelbusiness.editState = "show";
msj3DObj.transformControl.enabled = false;
msj3DObj.transformControl.visible = false;
layer.closeAll();
},
$("#manageBtn").click(function () {
layer.closeAll();
manageBoxType();
});
$("#moveBtn").click(function () {
if (msj3DObj.transformControl && msj3DObj.transformControl.object.name.indexOf("dev_") >= 0) { msj3DObj.transformControl.setMode("translate"); } else {
layer.msg("请选择具体设备!");
}
});
$("#raotationBtn").click(function () {
if (msj3DObj.transformControl && msj3DObj.transformControl.object.name.indexOf("dev_") >= 0) {
msj3DObj.transformControl.setMode("rotate");
} else {
layer.msg("请选择具体设备!");
}
});
$("#deleteBtn").click(function () {
if (msj3DObj.transformControl && msj3DObj.transformControl.object.name.indexOf("dev_") >= 0) {
msj3DObj.destoryObj(msj3DObj.transformControl.object.name);
} else {
layer.msg("请选择具体设备!");
}
});
三、路径编辑
3.1、巡检路径编辑效果展示
3.1.1、巡检路径规划
3.1.2、巡检路径编辑
巡检路径编辑,可以修改原来的路径,以及绑定节点的巡检设备。
3.2、实现说明
技术难点在于如何支持添加编辑路径,模型内绘制线路跟随鼠标运动。
实现代码如下:
function (_obj, objs) {
console.log(_obj);
console.log(objs);
//计算出需要移动的线
if (objs && objs.length > 0) {
var selectname = objs[0].object.name;
if (selectname.indexOf("PathLine_") >= 0) {
var lineindex = parseInt(selectname.split("OBJCREN")[0].replace("PathLine_", ""));
modelbusiness.movePathIndex = lineindex;
if (selectname.indexOf("OBJCREN1") >= 0) {
if (lineindex == 0) { var startPoint = modelbusiness.pathLineData[1].position;
var endPiint = modelbusiness.pathLineData[0].position
modelbusiness.addMoveLengthLine("tempLine", startPoint, endPiint, true); } else {
//删除前一条线
msj3DObj.destoryObj("PathLine_" + (lineindex-1));
//删除当前线
msj3DObj.destoryObj("PathLine_" + (lineindex)); var startPoint = modelbusiness.pathLineData[lineindex - 1].position;
var endPiint = modelbusiness.pathLineData[lineindex].position
modelbusiness.addMoveLengthLine("tempLine", startPoint, endPiint, true); var startPoint = modelbusiness.pathLineData[lineindex+1].position;
var endPiint = modelbusiness.pathLineData[lineindex].position
modelbusiness.addMoveLengthLine("tempLine_2", startPoint, endPiint, true);
} } else if (selectname.indexOf("OBJCREN2") >= 0) {
msj3DObj.destoryObj("PathLine_" + (lineindex));
modelbusiness.movePathIndex = lineindex+1; var startPoint = modelbusiness.pathLineData[modelbusiness.pathLineData.length-2].position;
var endPiint = modelbusiness.pathLineData[modelbusiness.pathLineData.length - 1].position
modelbusiness.addMoveLengthLine("tempLine", startPoint, endPiint, true);
} }
}
}
四、巡检执行
4.1、执行效果
安装规划的路径,可选择第一人称,第三人称效果去巡查节点上的设备状态以及数据。
4.1.1、第三人称巡检
4.1.2、第一人称巡检
4.1.3、日巡检计划管理
规划每天的巡检计划,到点时,自动安装规划的巡检路径巡检。
4.2、实现说明
巡检执行,跟上篇文章的实现方式类似,人物安装指定路径行走,到绑定的设备节点时,停下检查设备数据与状态即可
部分代码如下:
odelBusiness.prototype.peopleWalkVRate = 40;//人物行走速度
ModelBusiness.prototype.doRouteType = 1;//3第三 1 第一
ModelBusiness.prototype.routeData = [];//3第三 1 第一
//第三人称巡检
ModelBusiness.prototype.doThirdPersonRoute = function () {
if (this.runState == 1) {
layer.msg("正在执行巡检,请先结束巡检");
return;
}
$("#routeDataList").html(""); $("#routeDataList").show();
this.showPeople();
this.runState = 1;
this.doRouteType = 3;
this.routeData = [];
this.doRouteRunStep(0, this.pathLineData);
}
//第一人称巡检
ModelBusiness.prototype.doFirstPersonRoute = function () {
if (this.runState == 1) {
layer.msg("正在执行巡检,请先结束巡检");
return;
}
$("#routeDataList").html(""); $("#routeDataList").show();
this.showPeople();
this.doRouteType = 1;
this.routeData = [];
this.runState = 1;
this.doRouteRunStep(0, this.pathLineData,true);
}
//停止巡检
ModelBusiness.prototype.stopRoute = function () { $("#routeDataList").hide();
$("#routeDataList").html(""); this.runState = 0
if (modelbusiness.currentSetTimeOut) {
clearTimeout(modelbusiness.currentSetTimeOut)
}
if (modelbusiness.people&&modelbusiness.people._tween) {
modelbusiness.people._tween.stop();
modelbusiness.people.visible = false;
modelbusiness.people.position.y = 1000000; modelbusiness.people.mixer.clipAction(modelbusiness.people.oldGLTFObj.animations[1]).stop();
modelbusiness.people.mixer.clipAction(modelbusiness.people.oldGLTFObj.animations[0]).play();
}
msj3DObj.commonFunc.changeCameraPosition(modelbusiness.defaultState.camera, modelbusiness.defaultState.target
, 100, function () {
});
}
如果你有什么要交流的心得 可邮件我 1203193731@qq.com
其它相关文章:
如何基于three.js(webgl)引擎架构,实现3D密集架库房,3D档案室(3d机器人取档、机器人盘点、人工查档、设备巡检)
如何使用webgl(three.js)实现煤矿隧道、井下人员定位、掘进面、纵采面可视化解决方案——第十九课(一)
如何使用webgl(three.js)实现3D消防、3D建筑消防大楼、消防数字孪生、消防可视化解决方案——第十八课(一)
webgl(three.js)3D光伏,3D太阳能能源,3D智慧光伏、光伏发电、清洁能源三维可视化解决方案——第十六课
如何用webgl(three.js)搭建一个3D库房,3D仓库3D码头,3D集装箱,车辆定位,叉车定位可视化孪生系统——第十五课
webgl(three.js)实现室内三维定位,3D定位,3D楼宇bim、实时定位三维可视化解决方案——第十四课(定位升级版)
使用three.js(webgl)搭建智慧楼宇、设备检测、数字孪生——第十三课
如何用three.js(webgl)搭建3D粮仓、3D仓库、3D物联网设备监控-第十二课
如何用webgl(three.js)搭建处理3D隧道、3D桥梁、3D物联网设备、3D高速公路、三维隧道桥梁设备监控-第十一课
如何用three.js实现数字孪生、3D工厂、3D工业园区、智慧制造、智慧工业、智慧工厂-第十课
使用webgl(three.js)创建3D机房,3D机房微模块详细介绍(升级版二)
如何用webgl(three.js)搭建一个3D库房-第一课
如何用webgl(three.js)搭建一个3D库房,3D密集架,3D档案室,-第二课
使用webgl(three.js)搭建一个3D建筑,3D消防模拟——第三课
使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课
如何用webgl(three.js)搭建不规则建筑模型,客流量热力图模拟
使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课(炫酷版一)
使用webgl(three.js)搭建3D智慧园区、3D大屏,3D楼宇,智慧灯杆三维展示,3D灯杆,web版3D,bim管理系统——第六课
如何用webgl(three.js)搭建处理3D园区、3D楼层、3D机房管线问题(机房升级版)-第九课(一)
如何基于three.js(webgl)引擎架构,实现3D密集架库房,3D档案室智能巡检的更多相关文章
- 如何用webgl(three.js)搭建一个3D库房,3D密集架,3D档案室(升级版)
很长一段时间没有写3D库房,3D密集架相关的效果文章了,刚好最近有相关项目落地,索性总结一下 与之前我写的3D库房密集架文章<如何用webgl(three.js)搭建一个3D库房,3D密集架,3 ...
- 前后端数据交互处理基于原生JS模板引擎开发
json数据错误处理,把json文件数据复制到----> https://www.bejson.com/ 在线解析json 这样能直观的了解到是否是json数据写错,在控制台打断点,那里错误打那 ...
- 如何用webgl(three.js)搭建一个3D库房,3D密集架,3D档案室,-第二课
闲话少叙,我们接着第一课继续讲(http://www.cnblogs.com/yeyunfei/p/7899613.html),很久没有做技术分享了.很多人问第二课有没有,我也是抽空写一下第二课. 第 ...
- 如何用webgl(three.js)搭建一个3D库房,3D仓库,3D码头,3D集装箱可视化孪生系统——第十五课
序 又是快两个月没写随笔了,长时间不总结项目,不锻炼文笔,一开篇,多少都会有些生疏,不知道如何开篇,如何写下去.有点江郎才尽,黔驴技穷的感觉. 写随笔,通常三步走,第一步,搭建框架,先把你要写的内容框 ...
- 如何用webgl(three.js)搭建一个3D库房,3D仓库3D码头,3D集装箱,车辆定位,叉车定位可视化孪生系统——第十五课
序 又是快两个月没写随笔了,长时间不总结项目,不锻炼文笔,一开篇,多少都会有些生疏,不知道如何开篇,如何写下去.有点江郎才尽,黔驴技穷的感觉. 写随笔,通常三步走,第一步,搭建框架,先把你要写的内容框 ...
- 物联网3D,物业基础设施3D运维,使用webgl(three.js)与物联网设备结合案例。搭建智慧楼宇,智慧园区,3D园区、3D物业设施,3D楼宇管理系统——第八课
写在前面的废话: 很久没有更新文章了,这段时间一直忙于项目落地,虽然很忙,但是感觉没有总结,没有提炼的日子,总是让人感觉飘飘忽忽的. 所幸放下一些事,抽出一些时间,把近期的项目做一些整理与记录.也算是 ...
- 使用webgl(three.js)搭建3D智慧园区、3D大屏,3D楼宇,智慧灯杆三维展示,3D灯杆,web版3D,bim管理系统——第六课
前言: 今年是建国70周年,爱国热情异常的高涨,为自己身在如此安全.蓬勃发展的国家深感自豪. 我们公司楼下为庆祝国庆,拉了这样的标语,每个人做好一件事,就组成了我们强大的祖国. 看到这句话,深有感触, ...
- 如何用webgl(three.js)搭建处理3D隧道、3D桥梁、3D物联网设备、3D高速公路、三维隧道桥梁设备监控-第十一课
开篇废话: 跟之前的文章一样,开篇之前,总要写几句废话,大抵也是没啥人看仔细文字,索性我也想到啥就聊啥吧. 这次聊聊疫情,这次全国多地的疫情挺严重的,本人身处深圳,深圳这几日报导都是几十几十的新增病例 ...
- 如何用three.js(webgl)搭建3D粮仓、3D仓库、3D物联网设备监控-第十二课
序: 最近因为疫情,居家办公,索性翻翻之前的项目案例,总结总结. 这次疫情,深圳停摆,群众也挺恐慌的,封闭前一天,超市被抢购一空,虽然官方媒体一再强调,材米油盐蔬菜肉类管够,但是任然挡不住群众们的抢购 ...
- 使用three.js(webgl)搭建智慧楼宇、设备检测、数字孪生——第十三课
老子云:有道无术,术尚可求,有术无道,止于术. 咱开篇引用老子的话术,也没其它意思,只是最近学习中忽有感悟,索性就写了上来. 这句话用现代辩证思维理解,这里的"道" 大抵是指方法论 ...
随机推荐
- Windows编程----结束进程
进程有启动就有终止,通过CreateProcess函数可以启动一个新的子进程,但是如何终结子进程呢?主要有四种方法: 通过主线程的入口函数(main函数.WinMain函数)的return关键字终止进 ...
- 解决nvm ls-remote 列表只出现iojs版本
前言 在 nvm 安装 node 时发现显示不存在此版本,使用 nvm ls-remote 查看可安装列表时发现,列表中只有 iojs $ nvm ls-remote iojs-v1.0.0 iojs ...
- kubectl port-forward bind: address already in use unable
前言 本地的 8080 映射到 Pod 的 80,kubectl 会把这个端口的所有数据都转发给集群内部的 Pod kubectl port-forward wp-pod 8080:80 & ...
- Nginx 之fastcgi常用配置项说明
在LNMP环境中,我们都知道nginx如果要解析php脚本语言,就必须通过配置fastcgi模块来提供对php支持,那么在配置fastcgi的时候,关于fastcgi配置项的值应该怎么设置才能让其发挥 ...
- minio迁移工具 mc
mc mirror 命令属于 MinIO Client (mc) 工具,默认不会随 MinIO 服务器一起安装,需要 单独安装. 安装 MinIO Client (mc) Linux/macOS 执行 ...
- 【Guava】集合工具类-Immutable&Lists&Maps&Sets
Immutable 如<Effective Java>Item1)所述,在设计类的时候,倾向优先使用静态工厂方法(static factory method)而非构造函数(construc ...
- sql数据库连接
前言 作为数据存储的数据库,近年来发展飞快,在早期的程序自我存储到后面的独立出中间件服务,再到集群,不可谓不快了.早期的sql数据库一枝独秀,到后面的Nosql,还有azure安全,五花八门,教人学不 ...
- EditorGUILayout.BeginVertical("textfield")
- il热更新(一)
转载请标明出处:http://www.cnblogs.com/zblade/ 最近研究了一下如何在unity中实现c#的热更新,对于整个DLL热更新的过程和方案有一个初步的了解,这儿就写下来,便于后续 ...
- Java 21 新特性
Java 21 是 Java 语言的一次重要更新,引入了若干新的特性,提升了开发者的编程效率和代码质量.本文将详细介绍 Java 21 的新特性,包括基础概念.使用方法.常见实践以及最佳实践. 简介 ...