(Write in the front, talk about the Internet of Things Exhibition) The last Shenzhen Convention and Exhibition Center held the Internet of Things exhibition, to the exhibition, more than 80% of the Internet of Things applications are engaged in RFID, indoor positioning, I once doubted the direction limitations and market orientation of the Internet of Things landing scheme, and later learned from many aspects that the exhibition saw No. Can reflect the most extensive application of the Internet of Things at present, many large enterprises and technology frontier enterprises did not participate in such an exhibition, one is disdained to participate, the other is that the market value brought by the exhibition is too little, the biggest value of the exhibition is to let peers copy again (most domestic enterprises basically like this, each other). Xiangshan Village) Look at what everyone has done, so what we see at the exhibition is often not the best thing at the core of the enterprise, which can not reflect the current domestic Internet of Things the most cutting-edge technology and development status.
Preface: GPS and Beidou system have developed the global map navigation and positioning to the extreme degree, but the accuracy can not reach less than two meters. How to solve the problem of indoor positioning of the last few meters, the major manufacturers at home and abroad have strange tricks. Because of the market demand, there is a capital-driven, indoor accurate positioning in warehouses, archives, prisons, hospitals, offices, personnel, as well as a variety of high-value and important assets positioning scenarios need such demand. Indoor positioning concept is applied to personnel management, robot bionics, tagged object positioning and tracking, and so on. If indoor positioning can solve the bottlenecks of accuracy, delay and capacity, its market application value can not be limited.
Technical goal: Visualize the non-visual content and control the data situation more intuitively.
I. Market Background and Areas:
1. Information acquisition and positioning: punching, signing, delineating the scope of activities, electronic fencing, daily monitoring and so on.
2. Security monitoring and positioning: security field is relatively wide, including fire control, monitoring, maintenance and security, etc. These specific industries have strong demand for accurate positioning visualization. Protecting people's lives and property and monitoring the real-time location of fire heroes are all problems to be solved.
3. Industry 4.0: This is the latest industrial demand. There are few real landings. Its main goal is to make the whole production process visualized and traceable through indoor positioning technology.
4. Prisons, hospitals, airports and shopping malls. There is also a strong demand for location visualization
Prison: Preventing escape, suicide, etc. Every prisoner has an irremovable bracelet on his hand. As long as the system checks that someone stays somewhere for too long, the system will alarm.
Hospital: Provide fast addressing patrol service for patients.
Airports and shopping malls: Provide convenient and fast positioning and navigation services for guests and passengers, and provide labeling and positioning schemes for suspicious items for airports.
5. Warehouse Asset Location
6. Location of UAV, Logistics and Express Delivery
7. APP application services, push appropriate services at appropriate locations.
8. Game Scene, VR Application
Wait a minute, just think about it. It seems that the market is more promising.
II. Technical scheme analysis:
The current indoor positioning technology on the market is mainly divided into the following categories:
1. wifi Probe+Camera Intelligent Analysis Technology: This technology uses wifi Probe to withdraw the general position and analyze the exact position with the camera intelligently. The advantage is high accuracy, but the disadvantage is high cost and many camera dead angles.
2. Passive RFID + Card Reader Technology: This technology is currently used in the market more technology, such as supermarkets, warehousing, the advantages of low cost, shortcomings are no accuracy requirements, accuracy range is in the room.
3. Low-power Active RFID+Card Reader Base + Intelligent Analysis: This kind of positioning method uses active transmitting signal, which has high accuracy but many card readers. There will be false alarm and false alarm, which requires intelligent analysis and data cleaning. At present, the better scheme has low cost and less than one meter accuracy.
4. Bluetooth signal intensity detection and analysis: high accuracy, but the Bluetooth signal is blocked and seriously interfered. This is also what we saw in the exhibition.
5. Positioning carpet + active signal card (bracelet): This is a very accurate scheme, but the cost is also high. Lay a layer of positioned low-voltage carpet in the room.
6. Infrared detection technology, UWB technology and ultrasonic technology: similar to Bluetooth's scheme.
Technical exchange mailbox: 1203193731@qq.com
3. Three-dimensional Visual Display
We still choose the plug-in-free solution of webgl as the previous course, which visualizes the location visualization intuitively.
3.1. Firstly, the scene is built, and the three-dimensional scene needs to be positioned is built. Here we have made a building casually as a scene to be positioned.
The following is a gif image effect. (In order to upload to the article, the number of frames has been deliberately deleted.)
Model code:
3.2. Display the real-time positioning effect of a single floor. Here we add location tags dynamically. Label. Display label information in the lower right corner to avoid clutter in the scene.
Floor switching effect
Logic code:
if (_this.build1CurrentShowFlow == 8&&_this.currentShowLocationState == 1) {
_this.closeLocation(doshowAnimiation); } else { doshowAnimiation(); } function doshowAnimiation(){ WT3DObj.commonFunc.changeCameraPosition( { x: -3160 + (8 - floornub) * 300, y: 5645 - (8 - floornub) * 300, z: -3292 + (8 - floornub) * 300 }, { x: 80, y: 23, z: 155 }, 500, function () { if (_this.build1CurrentShowFlow > floornub) { var start = _this.build1CurrentShowFlow; _this.build1CurrentShowFlow = floornub; for (var i = start; i >= floornub + 1; i--) { (function (floorindex) { setTimeout(function () { var movemodesname = "cM_dingweifloor_" + floorindex; var movemodel = _this.outFloorModels[movemodesname]; if (!movemodel.oldposition) { movemodel.oldposition = { x: movemodel.position.x, y: movemodel.position.y, z: movemodel.position.z }; } var moveToPositon = movemodel.position.y + 5000; new TWEEN.Tween(movemodel.position).to({ y: moveToPositon }, 1000).onComplete(function () { movemodel.visible = false; if (floorindex == floornub + 1) { if (_this.currentShowLocationState == 1) { if (floornub < 8) { var showTxt = ""; showTxt += _this.addFloorMarks(floornub); $("#showText").html(showTxt); } else { _this.showLocation(); } } } }).start(); }, 500 * (start+1 - floorindex)); })(i); } } else if (_this.build1CurrentShowFlow < floornub) { var start = _this.build1CurrentShowFlow+1; _this.build1CurrentShowFlow = floornub; for (var i = start; i <= floornub ; i++) { (function (floorindex) { setTimeout(function () { var movemodesname = "cM_dingweifloor_" + floorindex; var movemodel = _this.outFloorModels[movemodesname]; var moveToPositon = movemodel.oldposition.y; movemodel.visible = true; new TWEEN.Tween(movemodel.position).to({ y: moveToPositon }, 1000).onComplete(function () { if (floorindex == floornub) { setTimeout(function () { if (_this.currentShowLocationState == 1) { if (floornub < 8) { var showTxt = ""; showTxt += _this.addFloorMarks(floornub); $("#showText").html(showTxt); } else { _this.showLocation(); } } }, 150 * floornub - start); }
}).start(); }, 500 * (floorindex-start + 1)); })(i); } } }); }
Positioning effect of single floor display
''
Dynamic Label Model Code:
[{ "show": true, "uuid": "", "name": "dmark_" + name, "objType": "GroupObj", "scale": { "x": 1, "y": 1, "z": 1 }, "position": position, "rotation": [{ "direction": "x", "degree": 0 }], "childrens": [{ "name": "dmark_" + name + "OBJCREN0", "objType": "picIdentification", "size": { "x": size.width, "y": size.height }, "position": { "x": 0, "y": 0, "z": 0 }, "imgurl": picurl, "showSortNub": 3480, "animation": null, "dbclickEvents": null, "BindDevId": null, "BindDevName": null, "devInfo": null, "BindMeteId": null, "BindMeteName": null }, { "name": "dmark_" + name + "OBJCREN1", "objType": "makeTextSprite", "textColor": { "r": Txtcolor.r, "g": Txtcolor.g, "b": Txtcolor.b, "a": 1 }, "message": "" + showNub, "fontsize": 300, "canvasWidth": 400, "canvasHeight": 350, "position": { "x": 0, "y": 64.901, "z": 0 }, "showSortNub": 3481, "animation": null, "dbclickEvents": null, "BindDevId": null, "BindDevName": null, "devInfo": null, "BindMeteId": null, "BindMeteName": null }], "showSortNub": 3480 }];
Single Floor Display Location Code:
ModelBusiness.prototype.marks = [];
ModelBusiness.prototype.addMark = function (name, position, size, picurl,showNub,Txtcolor) {
if (this.marks.indexOf("dmark_" + name) >= 0) { modelBusiness.moveMark("dmark_" + name, position, 1000); return; } this.marks.push("dmark_" + name); var timestrik = new Date().getTime(); var showHtml = "hello"; var local = [{ "show": true, "uuid": "", "name": "dmark_" + name, "objType": "GroupObj", "scale": { "x": 1, "y": 1, "z": 1 }, "position": position, "rotation": [{ "direction": "x", "degree": 0 }], "childrens": [{ "name": "dmark_" + name + "OBJCREN0", "objType": "picIdentification", "size": { "x": size.width, "y": size.height }, "position": { "x": 0, "y": 0, "z": 0 }, "imgurl": picurl, "showSortNub": 3480, "animation": null, "dbclickEvents": null, "BindDevId": null, "BindDevName": null, "devInfo": null, "BindMeteId": null, "BindMeteName": null }, { "name": "dmark_" + name + "OBJCREN1", "objType": "makeTextSprite", "textColor": { "r": Txtcolor.r, "g": Txtcolor.g, "b": Txtcolor.b, "a": 1 }, "message": "" + showNub, "fontsize": 300, "canvasWidth": 400, "canvasHeight": 350, "position": { "x": 0, "y": 64.901, "z": 0 }, "showSortNub": 3481, "animation": null, "dbclickEvents": null, "BindDevId": null, "BindDevName": null, "devInfo": null, "BindMeteId": null, "BindMeteName": null }], "showSortNub": 3480 }];
//[{ "name": "dmark_" + name, "objType": "picIdentification", "size": { "x": size.width, "y": size.height }, "position": position, "imgurl": picurl, "showSortNub": 3480, "show": true, "customType1": "", "customType2": "", "animation": null, "dbclickEvents": null, "BindDevId": null, "BindDevName": null, "devInfo": null, "BindMeteId": null, "BindMeteName": null }, // { "name": "dmark_TxtNub_" + name, "objType": "makeTextSprite", "textColor": { "r": 255, "g": 255, "b": 0, "a": 1 }, "message": "001", "fontsize": 100, "canvasWidth": 100, "canvasHeight": 120, "position": { "x": position.x, "y": position.y + 53.904, "z": position.z}, "showSortNub": 5, "animation": null, "dbclickEvents": null, "BindDevId": null, "BindDevName": null, "devInfo": null, "BindMeteId": null, "BindMeteName": null }]; WT3DObj.commonFunc.loadModelsByJsons(local, { x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0 }, true);
}
ModelBusiness.prototype.addMarkTxt = function (showHtml, _obj, buildNub, position, closeFunc) {
var timestrik = new Date().getTime(); var _obj = { uuid: 'daf4', name: "showMark", showSortNub: 1, objType: "DivTagging", tagType: 'sprite',//plane/sprite elementParam: { cssid: "style_divtest", css: "", marginValue: { x: 0, y: 0, z: 0 }, divid: 'divtest', html: "<div id='divtest'><div style='width:300px;height:200px;background-color:rgba(0,0,0,1);padding:10px;border:1px solid #00ffff;'>" + showHtml + "</div > </div >", }, position: { x: position.x, y: position.y + 500, z: position.z }, scale: { x: 8, y: 8, z: 1 }, rotation: [], } var ccd = WT3DObj.addDivTagging(WT3DObj, _obj); ccd.renderOrder = 1; WT3DObj.addObject(ccd);
}
3.3. Display the real-time positioning effect of the whole floor.
gif video
Implementation code:
if (_this.build1CurrentShowFlow == 8&&_this.currentShowLocationState == 1) {
_this.closeLocation(doshowAnimiation); } else { doshowAnimiation(); } function doshowAnimiation(){ WT3DObj.commonFunc.changeCameraPosition( { x: -3160 + (8 - floornub) * 300, y: 5645 - (8 - floornub) * 300, z: -3292 + (8 - floornub) * 300 }, { x: 80, y: 23, z: 155 }, 500, function () { if (_this.build1CurrentShowFlow > floornub) { var start = _this.build1CurrentShowFlow; _this.build1CurrentShowFlow = floornub; for (var i = start; i >= floornub + 1; i--) { (function (floorindex) { setTimeout(function () { var movemodesname = "cM_dingweifloor_" + floorindex; var movemodel = _this.outFloorModels[movemodesname]; if (!movemodel.oldposition) { movemodel.oldposition = { x: movemodel.position.x, y: movemodel.position.y, z: movemodel.position.z }; } var moveToPositon = movemodel.position.y + 5000; new TWEEN.Tween(movemodel.position).to({ y: moveToPositon }, 1000).onComplete(function () { movemodel.visible = false; if (floorindex == floornub + 1) { if (_this.currentShowLocationState == 1) { if (floornub < 8) { var showTxt = ""; showTxt += _this.addFloorMarks(floornub); $("#showText").html(showTxt); } else { _this.showLocation(); } } } }).start(); }, 500 * (start+1 - floorindex)); })(i); } } else if (_this.build1CurrentShowFlow < floornub) { var start = _this.build1CurrentShowFlow+1; _this.build1CurrentShowFlow = floornub; for (var i = start; i <= floornub ; i++) { (function (floorindex) { setTimeout(function () { var movemodesname = "cM_dingweifloor_" + floorindex; var movemodel = _this.outFloorModels[movemodesname]; var moveToPositon = movemodel.oldposition.y; movemodel.visible = true; new TWEEN.Tween(movemodel.position).to({ y: moveToPositon }, 1000).onComplete(function () { if (floorindex == floornub) { setTimeout(function () { if (_this.currentShowLocationState == 1) { if (floornub < 8) { var showTxt = ""; showTxt += _this.addFloorMarks(floornub); $("#showText").html(showTxt); } else { _this.showLocation(); } } }, 150 * floornub - start); }
}).start(); }, 500 * (floorindex-start + 1)); })(i); } } }); }
For space reasons, this lesson is introduced here first.
Later, I will continue to explain how to use webgl to build 3D intelligent residential area, indoor positioning, three-dimensional application of bridges and tunnels, and so on.
Technical Exchange 1203193731@qq.com
Communication Wechat:
If you have anything to communicate with me, please email me.