-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
142 lines (109 loc) · 4.76 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
'use strict'
// Constants
var CURRENT_BASE_IP = '192.168.1.';
var CONTROL_UP_SPEED = 2000;
var MULTICAST_INTERFACE = '239.255.42.99';
var MOCAP_PORT = 1511;
var WEB_PORT = 3000;
var SAFETY_TIMEOUT = 5 // time in seconds
var COMMAND_FILENAME = 'eeg.txt'
// Globals
// var microS = require('microseconds');
//////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// DRONE //////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
var flock = require('./models/flock.js');
flock.init([1], CURRENT_BASE_IP);
//////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// MOCAP //////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
var mocap = require('./models/mocap.js');
mocap.start(MOCAP_PORT, MULTICAST_INTERFACE);
//////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// TARGET //////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
var target = require('./models/target.js');
target.SetCommandFilename(COMMAND_FILENAME)
//////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// TARGET //////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
var control = require('./models/control.js');
//////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// VIEWS //////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
var views = require('./models/views.js');
views.app.listen(WEB_PORT);
console.log('Web server listening on localhost:' + WEB_PORT);
// Changes drone state
views.app.io.route('Update_DroneState', function(req) {
flock.Action([req.data.id], req.data.state);
})
// Changes where the drone goes
views.app.io.route('Update_DroneControl', function(req) {
for(var i = 0; i < flock.lst.length; i ++) {
flock.lst[i].go.control = req.data;
}
})
// Changes aspects of the
views.app.io.route('Set_DroneControl', function(req) {
console.log(control.Algoritm[control.Algoritm_Active]);
control.Algoritm[control.Algoritm_Active].Param[req.data.target].val = req.data.value;
})
//////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// LOOPS //////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
// SendCommand kan een nieuw commando geven op basis van verschillende modellen. Het verbeteren van deze modellen zal mogelijk een belangrijk onderdeel zijn van het succes van de show.
// INPUT: X,Y,Z,R + vX, vY, vZ, vR Drone
// OUTPUT: X, Y, Z, R Drone
var GetCommand = function() {
var current_Drone, command;
for(var i = flock.lst.length; i--;) {
current_Drone = flock.lst[i];
// console.log("Current drone: " + current_Drone);
// console.log("Current go: " + JSON.stringify(current_Drone.go));
// console.log("Current autopilot: " + current_Drone.go);
// Target contains the target in X,Y,Z,R the drone needs to have
command = target.Get(current_Drone.id);
// console.log(current_Target);
// Current mocap contains the current velocity and location of the drone
// var current_Mocap = mocap.GetLastPointById(current_Drone.id)[0];
// Save the target of the drone
// current_Drone.go.autopilot = control.Calc(
// current_Drone,
// current_Target,
// current_Mocap
// );
current_Drone.QueueCommand(command);
}
};
var SendCommand = function() {
for(var i = flock.lst.length; i--;) {
var current_Drone = flock.lst[i];
// Send go command
current_Drone.Go();
}
};
// UpdateDisplay
// Doel: Stuurt de huidige stand van zaken naar alle clients die aan het luisteren zijn.
// Per seconde: 10 ~ 20
// Door update display blijft iemand die naar de monitor kijkt op de hoogte van wat er gebeurt in de computer.
var UpdateDisplay = function() {
// console.log(flock.lst);
// console.log(mocap.lst);
views.UpdateDisplay({
lstFlock: flock.lst,
lstMocap: mocap.lst,
control: control
});
}
// DoFunction handles two important parts of functions. The first
// is how many times a second a function has to run.
//
// TODO: The second more important fact is that it checks if it has done
// it before it starts the next.
var DoFunction = function(timesPerSecond, functionToDo) {
setInterval(functionToDo, Math.round(1000 / timesPerSecond));
}
DoFunction(10, UpdateDisplay);
DoFunction(10, SendCommand);
DoFunction(0.5, GetCommand);