Commit 7f92886e authored by Roque's avatar Roque

erp5_drone_simulator: get rid of rescue swarm dependency

parent 32942581
...@@ -11,7 +11,95 @@ var runGame, updateGame, eventGame, game_manager_instance; ...@@ -11,7 +11,95 @@ var runGame, updateGame, eventGame, game_manager_instance;
"use strict"; "use strict";
console.log('game logic'); console.log('game logic');
runGame = function (canvas, script, game_parameters_json, log) { runGame = function (canvas, script, log) {
var game_parameters_json = {
"distances": {
"communication": 99999,
"control": 1500,
"information": 5
},
"drone": {
"maxAcceleration": 1,
"maxSpeed": 16.666667,
"collisionSector": 0.25,
"broadcastingTime": 1000,
"viewAngle": 60
},
"meteo": 0.5,
"derive": {
"speed": 0.1,
"direction": {
"x": 1,
"y": 0.5
}
},
"gameTime": 1800,
"goalDiameter": 7,
"goalPositionLeftTeam": {
"x": 0,
"y": 0,
"z": 0.6
},
"goalPositionRightTeam": {
"x": 0,
"y": 0,
"z": 0.6
},
"latency": {
"information": 0,
"communication": 0
},
"mapSize": {
"depth": 1000,
"height": 100,
"width": 1000
},
"obstacles": [],
"initialHumanAreaPosition": {
"x": -400,
"y": 400,
"z": 0
},
"randomSpawn": {
"leftTeam": {
"position": {
"x": 0,
"y": 0,
"z": 20
},
"dispertion": {
"x": 8,
"y": 8,
"z": 6
},
"types": [
"DroneAaileFixeAPI",
"DroneLogAPI",
"DroneAPI"
]
},
"rightTeam": {
"position": {
"x": -400,
"y": 400,
"z": 0
},
"dispertion": {
"x": 100,
"y": 100,
"z": 0.1
}
}
},
"teamSize": 2,
"dronesPosition": {
"x": 0,
"y": 0,
"z": 20
},
"droneList": ["DroneAaileFixeAPI", "DroneLogAPI"]
};
function processLog(game_parameters_json, log) { function processLog(game_parameters_json, log) {
var MAP_SIZE = 1000, var MAP_SIZE = 1000,
...@@ -196,9 +284,6 @@ var runGame, updateGame, eventGame, game_manager_instance; ...@@ -196,9 +284,6 @@ var runGame, updateGame, eventGame, game_manager_instance;
}; };
game_parameters_json.drone.maxSpeed = (flight_dist / flight_time) * SPEED_FACTOR; game_parameters_json.drone.maxSpeed = (flight_dist / flight_time) * SPEED_FACTOR;
game_parameters_json.flight_path_point_list = path_point_list; game_parameters_json.flight_path_point_list = path_point_list;
/*game_parameters_json.randomSpawn.leftTeam.position.x = start_position[0];
game_parameters_json.randomSpawn.leftTeam.position.y = start_position[1];
game_parameters_json.randomSpawn.leftTeam.position.z = start_position[2];*/
game_parameters_json.dronesPosition.x = start_position[0]; game_parameters_json.dronesPosition.x = start_position[0];
game_parameters_json.dronesPosition.y = start_position[1]; game_parameters_json.dronesPosition.y = start_position[1];
game_parameters_json.dronesPosition.z = start_position[2]; game_parameters_json.dronesPosition.z = start_position[2];
...@@ -214,7 +299,9 @@ var runGame, updateGame, eventGame, game_manager_instance; ...@@ -214,7 +299,9 @@ var runGame, updateGame, eventGame, game_manager_instance;
game_parameters_json.randomSpawn.rightTeam.position.y = destination[1]; game_parameters_json.randomSpawn.rightTeam.position.y = destination[1];
return game_parameters_json; return game_parameters_json;
} }
game_parameters_json = processLog(game_parameters_json, log); game_parameters_json = processLog(game_parameters_json, log);
if (!game_manager_instance) { if (!game_manager_instance) {
game_manager_instance = new GameManager(canvas, script, game_manager_instance = new GameManager(canvas, script,
game_parameters_json, 5); game_parameters_json, 5);
......
...@@ -244,7 +244,7 @@ ...@@ -244,7 +244,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>1003.17407.48631.50875</string> </value> <value> <string>1003.18677.8071.57617</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -262,7 +262,7 @@ ...@@ -262,7 +262,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1664386550.2</float> <float>1664462737.31</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -148,7 +148,6 @@ ...@@ -148,7 +148,6 @@
width: options.width, width: options.width,
height: options.height, height: options.height,
script: options.script, script: options.script,
game_parameters_json: options.game_parameters_json,
log: options.log log: options.log
}, [options.canvas]); }, [options.canvas]);
break; break;
...@@ -273,6 +272,7 @@ ...@@ -273,6 +272,7 @@
///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////
.declareAcquiredMethod("updateHeader", "updateHeader") .declareAcquiredMethod("updateHeader", "updateHeader")
.declareAcquiredMethod("jio_get", "jio_get") .declareAcquiredMethod("jio_get", "jio_get")
.declareAcquiredMethod("jio_allDocs", "jio_allDocs")
.declareMethod('render', function renderHeader() { .declareMethod('render', function renderHeader() {
var gadget = this, var gadget = this,
...@@ -290,21 +290,19 @@ ...@@ -290,21 +290,19 @@
offscreen = canvas.transferControlToOffscreen(); offscreen = canvas.transferControlToOffscreen();
//TODO this should be in game logic BUT gadget can't be accessed from WW //TODO this should be in game logic BUT gadget can't be accessed from WW
var script_content, game_parameters_json, log_content; var script_content, log_content;
return new RSVP.Queue() return new RSVP.Queue()
.push(function () { .push(function () {
return gadget.jio_get("rescue_swarm_script_module/" + "web_worker"); var query = '(portal_type:"Web Script") AND (reference:"loiter_flight_script")';
return gadget.jio_allDocs({query: query, select_list: ["text_content"]});
}) })
.push(function (script) { .push(function (result) {
script_content = script.text_content; script_content = result.data.rows[0].value.text_content;
return gadget.jio_get("rescue_swarm_map_module/" + "compare_map"); var query = '(portal_type:"Web Manifest") AND (reference:"loiter_flight_log")';
return gadget.jio_allDocs({query: query, select_list: ["text_content"]});
}) })
.push(function (parameters_doc) { .push(function (result) {
game_parameters_json = JSON.parse(parameters_doc.text_content); log_content = result.data.rows[0].value.text_content;
return gadget.jio_get("rescue_swarm_script_module/" + "log_loiter");
})
.push(function (log) {
log_content = log.text_content;
gadget.runGame({ gadget.runGame({
logic_url: parameter_gamelogic, logic_url: parameter_gamelogic,
...@@ -313,7 +311,6 @@ ...@@ -313,7 +311,6 @@
width: canvas.width, width: canvas.width,
height: canvas.height, height: canvas.height,
script: script_content, script: script_content,
game_parameters_json: game_parameters_json,
log: log_content log: log_content
}); });
......
...@@ -244,7 +244,7 @@ ...@@ -244,7 +244,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>1003.15820.63775.27392</string> </value> <value> <string>1003.18672.40791.39372</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -262,7 +262,7 @@ ...@@ -262,7 +262,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1664374475.4</float> <float>1664462734.74</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -35,8 +35,7 @@ function mainToWorker(evt) { ...@@ -35,8 +35,7 @@ function mainToWorker(evt) {
return new RSVP.Queue() return new RSVP.Queue()
.push(function () { .push(function () {
postMessage({'type': 'started'}); postMessage({'type': 'started'});
return runGame(offscreen_canvas, evt.data.script, return runGame(offscreen_canvas, evt.data.script, evt.data.log);
evt.data.game_parameters_json, evt.data.log);
}) })
.push(function (result) { .push(function (result) {
return postMessage({'type': 'finished', 'result': result}); return postMessage({'type': 'finished', 'result': result});
......
...@@ -244,7 +244,7 @@ ...@@ -244,7 +244,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>1003.16068.56422.56064</string> </value> <value> <string>1003.18677.12846.47872</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -262,7 +262,7 @@ ...@@ -262,7 +262,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1664386491.83</float> <float>1664462736.14</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="Rescue Swarm Script" module="erp5.portal_type"/> <global name="Web Manifest" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -62,23 +62,24 @@ ...@@ -62,23 +62,24 @@
</value> </value>
</item> </item>
<item> <item>
<key> <string>content_type</string> </key> <key> <string>content_md5</string> </key>
<value> <string>application/javascript</string> </value> <value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <string>log_loiter</string> </value> <value> <string>loiter_flight_log</string> </value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Loiter flight log. Corresponds to the flight for the script https://lab.nexedi.com/lpgeneau/flight-scripts/blob/update_loop/demo.js\n <value>
\n <none/>
"demo flight" (where the drone is the leader so the code referring to the follower is not executed) using an API similar to the one used in the simulator.\n </value>
The SR is at https://lab.nexedi.com/lpgeneau/slapos/tree/update_loop/software/js-drone (especially the modified worker.js).</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>log_loiter</string> </value> <value> <string>loiter_flight_log</string> </value>
</item> </item>
<item> <item>
<key> <string>language</string> </key> <key> <string>language</string> </key>
...@@ -88,7 +89,13 @@ The SR is at https://lab.nexedi.com/lpgeneau/slapos/tree/update_loop/software/js ...@@ -88,7 +89,13 @@ The SR is at https://lab.nexedi.com/lpgeneau/slapos/tree/update_loop/software/js
</item> </item>
<item> <item>
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
<value> <string>Rescue Swarm Script</string> </value> <value> <string>Web Manifest</string> </value>
</item>
<item>
<key> <string>short_title</string> </key>
<value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>text_content</string> </key> <key> <string>text_content</string> </key>
...@@ -530,7 +537,13 @@ Taking off...\n ...@@ -530,7 +537,13 @@ Taking off...\n
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>log_loiter</string> </value> <value> <string>Loiter flight log</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>workflow_history</string> </key> <key> <string>workflow_history</string> </key>
...@@ -563,6 +576,12 @@ Taking off...\n ...@@ -563,6 +576,12 @@ Taking off...\n
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value> </value>
</item> </item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</value> </value>
</item> </item>
...@@ -608,7 +627,7 @@ Taking off...\n ...@@ -608,7 +627,7 @@ Taking off...\n
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1660134705.82</float> <float>1664461702.56</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
...@@ -657,7 +676,7 @@ Taking off...\n ...@@ -657,7 +676,7 @@ Taking off...\n
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>1002.23821.16502.25531</string> </value> <value> <string>1003.18664.31618.1314</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -675,7 +694,70 @@ Taking off...\n ...@@ -675,7 +694,70 @@ Taking off...\n
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1660839203.68</float> <float>1664461961.24</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>empty</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1664461675.47</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
const ALTITUDE_DIFF = 30,
FLIGH_ALTITUDE = 100,
PARACHUTE_ALTITUDE = 35,
EPSILON = 105,
EPSILON_YAW = 6,
EPSILON_ALTITUDE = 5,
TARGET_YAW = 0,
checkpoint_list = [
{
"latitude": 45.64492790560583,
"longitude": 14.25334942966329,
"altitude": 585.1806861589965
},
{
"latitude": 45.64316335436476,
"longitude": 14.26332880184475,
"altitude": 589.8802607573035
},
{
"latitude": 45.64911917196595,
"longitude": 14.26214792790128,
"altitude": 608.6648153348965
},
{
"latitude": 45.64122685351364,
"longitude": 14.26590493128597,
"altitude": 606.1448368129072
},
{
"latitude": 45.64543355564817,
"longitude": 14.27242391207985,
"altitude": 630.0829598206344
},
{
"latitude": 45.6372792927328,
"longitude": 14.27533492411138,
"altitude": 616.1839898415284
},
{
"latitude": 45.64061299543953,
"longitude": 14.26161958465814,
"altitude": 598.0603137354178
},
{
"latitude": 45.64032340702919,
"longitude": 14.2682896662383,
"altitude": 607.1243119862851
}
],
landing_point = [
{
"latitude": 45.6398451,
"longitude": 14.2699217
}
],
LEADER_ID = 0,
IS_LEADER = me.id === LEADER_ID;
function altitudeReached(altitude, target_altitude) {
//console.log(`[DEMO] Waiting for altitude... (${altitude} , ${target_altitude})`);
return Math.abs(altitude - target_altitude) < EPSILON_ALTITUDE;
}
function distance(lat1, lon1, lat2, lon2) {
const R = 6371e3, // meters
la1 = lat1 * Math.PI/180, // la, lo in radians
la2 = lat2 * Math.PI/180,
lo1 = lon1 * Math.PI/180,
lo2 = lon2 * Math.PI/180;
//haversine formula
const sin_lat = Math.sin((la2 - la1)/2),
sin_lon = Math.sin((lo2 - lo1)/2),
h = sin_lat*sin_lat + Math.cos(la1)*Math.cos(la2)*sin_lon*sin_lon;
return 2*R*Math.asin(Math.sqrt(h));
}
function exit_on_fail(ret, msg) {
if (ret) {
console.log(msg);
me.exit(1);
}
}
function mustWait(timestamp) {
if(me.timestamp === 0) {
me.timestamp = timestamp;
}
return timestamp - me.timestamp < me.must_wait;
}
me.onStart = function() {
console.log("[WEB SCRIPT] WEB WORKER DRONE START!");
/*console.log("distance from 1st point at start:", distance(me.getCurrentPosition().x, me.getCurrentPosition().y,
checkpoint_list[0].latitude,
checkpoint_list[0].longitude));*/
me.direction_set = false;
me.init_alt_reached = false;
me.landing = false;
me.landing_alt_reached = false;
me.must_wait = 3000;
me.next_checkpoint = 0;
me.parachute_triggered = false;
me.start_altitude = me.getInitialAltitude() + FLIGH_ALTITUDE;
me.timestamp = 0;
if (!IS_LEADER) {
me.follow_leader = true;
me.leader_init_alt_reached = false;
me.start_altitude += ALTITUDE_DIFF;
me.must_wait = 0;
}
exit_on_fail(
me.setAltitude(me.start_altitude + 1, true),
"Failed to set start altitude");
};
me.onUpdate = function(timestamp) {
if (!me.init_alt_reached) {
me.init_alt_reached = altitudeReached(me.getAltitudeAbs(), me.start_altitude);
return;
}
if (me.must_wait > 0) {
if (!mustWait(timestamp)) {
me.must_wait = 0;
me.timestamp = 0;
}
return;
}
if (!IS_LEADER && me.follow_leader) {
if (me.drone_dict[LEADER_ID].altitudeAbs === 0) {
return console.log("[DEMO] Waiting for leader to send its altitude");
}
if (!me.leader_init_alt_reached) {
me.leader_init_alt_reached = me.drone_dict[LEADER_ID].altitudeAbs >= me.start_altitude - ALTITUDE_DIFF;
return console.log(`[DEMO] Waiting for leader to reach altitude ${me.start_altitude - ALTITUDE_DIFF} (currently ${me.drone_dict[LEADER_ID].altitudeAbs})`);
}
if (me.drone_dict[LEADER_ID].altitudeRel > PARACHUTE_ALTITUDE) {
exit_on_fail(
me.setTargetCoordinates(
me.drone_dict[LEADER_ID].latitude,
me.drone_dict[LEADER_ID].longitude,
me.drone_dict[LEADER_ID].altitudeAbs + ALTITUDE_DIFF,
30.001
),
"Failed to follow leader");
} else {
me.follow_leader = false;
me.next_checkpoint = me.drone_dict[LEADER_ID].lastCheckpoint + 1;
console.log("[DEMO] Stop following...\n");
}
return;
}
if (!me.direction_set) {
if (me.next_checkpoint < checkpoint_list.length) {
var current_position = me.getCurrentPosition();
var dist = distance(current_position.x, current_position.y,
checkpoint_list[me.next_checkpoint].latitude,
checkpoint_list[me.next_checkpoint].longitude);
/*console.log("---------------------------------------------");
console.log("[SCRIPT] current_position:", current_position);
console.log("[SCRIPT] next_checkpoint:", checkpoint_list[me.next_checkpoint]);
console.log("[SCRIPT] distance:", dist);*/
exit_on_fail(
me.setTargetCoordinates(
checkpoint_list[me.next_checkpoint].latitude,
checkpoint_list[me.next_checkpoint].longitude,
checkpoint_list[me.next_checkpoint].altitude + FLIGH_ALTITUDE,
100
),
"Failed to set checkpoint coordinates");
//console.log(`[DEMO] Going to Checkpoint ${me.next_checkpoint}\n`)
} else {
console.log("[DEMO] Setting landing coordinates...\n");
me.landing_altitude = me.getAltitudeAbs() - me.getCurrentPosition().z + PARACHUTE_ALTITUDE;
exit_on_fail(
/*me.setTargetCoordinates(
checkpoint_list[checkpoint_list.length - 1].latitude,
checkpoint_list[checkpoint_list.length - 1].longitude,
me.landing_altitude,
100
),*/
me.setAltitude(me.landing_altitude, true),
"Failed to set landing coordinates");
}
me.direction_set = true;
return;
}
if (me.next_checkpoint < checkpoint_list.length) {
me.current_position = me.getCurrentPosition();
me.distance = distance(me.current_position.x, me.current_position.y,
checkpoint_list[me.next_checkpoint].latitude,
checkpoint_list[me.next_checkpoint].longitude);
if (me.distance > EPSILON) {
//console.log(`Waiting for drone to get to destination (${me.distance} m)`);
} else {
/*console.log(`[DEMO] Reached Checkpoint ${me.next_checkpoint}\n`);
console.log("[SCRIPT] current_position:", me.current_position);*/
var loiter_center = checkpoint_list[me.next_checkpoint];
/*console.log("[SCRIPT] next_checkpoint:", checkpoint_list[me.next_checkpoint]);
console.log("[SCRIPT] drone-checkpoint distance:", me.distance);*/
me.next_checkpoint += 1;
me.sendMsg(JSON.stringify({ next_checkpoint: me.next_checkpoint }));
me.direction_set = false;
me.must_wait = 30000;
me.loiter();
}
return;
}
if (!me.landing_alt_reached) {
me.landing_alt_reached = altitudeReached(me.getAltitudeAbs(), me.landing_altitude);
return;
}
if (!me.landing) {
me.current_position = me.getCurrentPosition();
me.distance = distance(me.current_position.x, me.current_position.y,
landing_point.latitude, landing_point.longitude);
if (me.distance > 20) {
//console.log(`[DEMO] Waiting to reach landing point (current distance is ${me.distance})`);
} else {
console.log("[DEMO] Landing...\n");
me.landing = true;
}
return;
}
if (!me.parachute_triggered) {
if (Math.abs(me.getYaw() - TARGET_YAW) < EPSILON_YAW) {
console.log("[DEMO] Deploying parachute...");
exit_on_fail(me.doParachute(2), "Failed to deploy parachute");
me.parachute_triggered = true;
} else {
return console.log(`[DEMO] Waiting for yaw...`);
}
}
if (me.landed()) {
console.log("calling me.exit(0) when me.landed");
me.exit(0);
}
};
me.onGetMsg = function(msg) {
me.msgDict = JSON.parse(msg);
if (me.follow_leader && me.msgDict.hasOwnProperty("next_checkpoint")) {
me.next_checkpoint = me.msgDict.next_checkpoint;
}
};
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<ZopeData> <ZopeData>
<record id="1" aka="AAAAAAAAAAE="> <record id="1" aka="AAAAAAAAAAE=">
<pickle> <pickle>
<global name="Rescue Swarm Map" module="erp5.portal_type"/> <global name="Web Script" module="erp5.portal_type"/>
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
...@@ -61,19 +61,31 @@ ...@@ -61,19 +61,31 @@
</tuple> </tuple>
</value> </value>
</item> </item>
<item>
<key> <string>content_md5</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>content_type</string> </key>
<value>
<none/>
</value>
</item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <string>medium_map</string> </value> <value> <string>loiter_flight_script</string> </value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <string>Map based on medium size map, use to compare simulated and real drone flights.\n <value>
It has 2 drones: one for that simulates the real flight from a script (DroneAaileFixeAPI - id:0) and one that moves according to the log values (DroneLogAPI id:1)\n <none/>
Being run on (WIP) web_page_module/test_drone_simulator_gadget page, the log drone flight will be drawn on the map.</string> </value> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>compare_map</string> </value> <value> <string>loiter_flight_script</string> </value>
</item> </item>
<item> <item>
<key> <string>language</string> </key> <key> <string>language</string> </key>
...@@ -83,96 +95,23 @@ Being run on (WIP) web_page_module/test_drone_simulator_gadget page, the log dro ...@@ -83,96 +95,23 @@ Being run on (WIP) web_page_module/test_drone_simulator_gadget page, the log dro
</item> </item>
<item> <item>
<key> <string>portal_type</string> </key> <key> <string>portal_type</string> </key>
<value> <string>Rescue Swarm Map</string> </value> <value> <string>Web Script</string> </value>
</item> </item>
<item> <item>
<key> <string>text_content</string> </key> <key> <string>short_title</string> </key>
<value> <string>{\n <value>
"distances": {\n <none/>
"communication": 99999,\n </value>
"control": 1500,\n
"information": 5\n
},\n
"drone": {\n
"maxAcceleration": 1,\n
"maxSpeed": 16.666667,\n
"collisionSector": 0.25,\n
"broadcastingTime": 1000,\n
"viewAngle": 60\n
},\n
"meteo": 0.5,\n
"derive": {\n
"speed": 0.1,\n
"direction": {\n
"x": 1,\n
"y": 0.5\n
}\n
},\n
"gameTime": 1800,\n
"goalDiameter": 7,\n
"goalPositionLeftTeam": {\n
"x": 0,\n
"y": 0,\n
"z": 0.6\n
},\n
"goalPositionRightTeam": {\n
"x": 0,\n
"y": 0,\n
"z": 0.6\n
},\n
"latency": {\n
"information": 0,\n
"communication": 0\n
},\n
"mapSize": {\n
"depth": 1000,\n
"height": 100,\n
"width": 1000\n
},\n
"obstacles": [],\n
"spawnPositions": [],\n
"initialHumanAreaPosition": {\n
"x": -400,\n
"y": 400,\n
"z": 0\n
},\n
"randomSpawn": {\n
"leftTeam": {\n
"position": {\n
"x": 0,\n
"y": 0,\n
"z": 20\n
},\n
"dispertion": {\n
"x": 8,\n
"y": 8,\n
"z": 6\n
},\n
"types": [\n
"DroneAaileFixeAPI",\n
"DroneLogAPI",\n
"DroneAPI"\n
]\n
},\n
"rightTeam": {\n
"position": {\n
"x": -400,\n
"y": 400,\n
"z": 0\n
},\n
"dispertion": {\n
"x": 100,\n
"y": 100,\n
"z": 0.1\n
}\n
}\n
},\n
"teamSize": 2\n
}</string> </value>
</item> </item>
<item> <item>
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Compare map</string> </value> <value> <string>Loiter flight script</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>workflow_history</string> </key> <key> <string>workflow_history</string> </key>
...@@ -205,6 +144,12 @@ Being run on (WIP) web_page_module/test_drone_simulator_gadget page, the log dro ...@@ -205,6 +144,12 @@ Being run on (WIP) web_page_module/test_drone_simulator_gadget page, the log dro
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value> </value>
</item> </item>
<item>
<key> <string>processing_status_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent>
</value>
</item>
</dictionary> </dictionary>
</value> </value>
</item> </item>
...@@ -250,7 +195,7 @@ Being run on (WIP) web_page_module/test_drone_simulator_gadget page, the log dro ...@@ -250,7 +195,7 @@ Being run on (WIP) web_page_module/test_drone_simulator_gadget page, the log dro
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1657219036.22</float> <float>1664459507.81</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
...@@ -299,7 +244,7 @@ Being run on (WIP) web_page_module/test_drone_simulator_gadget page, the log dro ...@@ -299,7 +244,7 @@ Being run on (WIP) web_page_module/test_drone_simulator_gadget page, the log dro
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>1002.12601.25029.46114</string> </value> <value> <string>1003.18623.52236.6348</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -317,7 +262,70 @@ Being run on (WIP) web_page_module/test_drone_simulator_gadget page, the log dro ...@@ -317,7 +262,70 @@ Being run on (WIP) web_page_module/test_drone_simulator_gadget page, the log dro
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1660228730.09</float> <float>1664460051.36</float>
<string>UTC</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="5" aka="AAAAAAAAAAU=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>external_processing_state</string> </key>
<value> <string>empty</string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>0.0.0.0</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1664387279.94</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment