Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
slapos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Léo-Paul Géneau
slapos
Commits
cf76e708
Commit
cf76e708
authored
May 09, 2023
by
Léo-Paul Géneau
👾
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
component/qjs-wrapper: v↑ qjs-wrapper (1.3 -> 2.0)
parent
cf006ece
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
146 additions
and
35 deletions
+146
-35
component/mavsdk/buildout.cfg
component/mavsdk/buildout.cfg
+15
-0
component/qjs-wrapper/autopilot_wrapper.h
component/qjs-wrapper/autopilot_wrapper.h
+61
-0
component/qjs-wrapper/buildout.cfg
component/qjs-wrapper/buildout.cfg
+4
-5
component/qjs-wrapper/buildout.hash.cfg
component/qjs-wrapper/buildout.hash.cfg
+17
-0
software/js-drone/buildout.hash.cfg
software/js-drone/buildout.hash.cfg
+3
-3
software/js-drone/instance-default.cfg
software/js-drone/instance-default.cfg
+2
-2
software/js-drone/instance-drone-input-schema.json
software/js-drone/instance-drone-input-schema.json
+8
-3
software/js-drone/main.js
software/js-drone/main.js
+3
-3
software/js-drone/software-sqdr.cfg
software/js-drone/software-sqdr.cfg
+9
-7
software/js-drone/test/test.py
software/js-drone/test/test.py
+4
-3
software/js-drone/worker.js
software/js-drone/worker.js
+20
-9
No files found.
component/mavsdk/buildout.cfg
View file @
cf76e708
...
...
@@ -4,12 +4,18 @@ extends =
../curl/buildout.cfg
../git/buildout.cfg
../jsoncpp/buildout.cfg
../qjs-wrapper/buildout.hash.cfg
../tinyxml2/buildout.cfg
../zlib/buildout.cfg
parts =
mavsdk
[autopilot-wrapper-header]
recipe = slapos.recipe.build:download
shared = true
url = ${:_profile_base_location_}/../qjs-wrapper/${:filename}
[c-astral-headers]
recipe = slapos.recipe.build:gitclone
repository = https://lab.nexedi.com/nexedi/c-astral-c-library
...
...
@@ -57,3 +63,12 @@ environment =
CMAKE_CFLAGS=-I${tinyxml2:location}/include
CMAKE_LIBRARY_PATH=${curl:location}/lib:${jsoncpp:location}/lib:${tinyxml2:location}/lib:${zlib:location}/lib
[mavsdk-wrapper]
recipe = slapos.recipe.cmmi
configure-command = true
url = https://lab.nexedi.com/nexedi/mavsdk-wrapper/-/archive/update_set_target_coordinates/mavsdk-wrapper-update_set_target_coordinates.tar.gz
md5sum = 4e5d53ca3c12f6019048a2e3b6351fe2
environment =
CPLUS_INCLUDE_PATH=${autopilot-wrapper-header:location}:${mavsdk:location}/include:${mavsdk:location}/include/mavsdk
LDFLAGS=-L${mavsdk:location}/lib -Wl,-rpath=${mavsdk:location}/lib
component/qjs-wrapper/autopilot_wrapper.h
0 → 100644
View file @
cf76e708
#ifndef __AUTOPILOT_H__
#define __AUTOPILOT_H__
#ifndef DLL_PUBLIC
#define DLL_PUBLIC __attribute__ ((visibility ("default")))
#endif
/*
* 0. latitude (double, degrees)
* 1. longitude (double, degrees)
* 2. absolute altitude (double, meters)
* 3. relative altitude (double, meters)
*/
#define POSITION_ARRAY_SIZE 4
/*
* 0. yaw angle (float, degrees)
* 1. air speed (float, m/s)
* 2. climb rate (float, m/s)
*/
#define SPEED_ARRAY_SIZE 3
#ifdef __cplusplus
extern
"C"
{
#endif
#include <stdint.h>
// Connexion management functions
DLL_PUBLIC
int
start
(
const
char
*
ip
,
int
port
,
const
char
*
log_file
,
int
timeout
);
DLL_PUBLIC
int
stop
();
DLL_PUBLIC
int
reboot
(
void
);
// Flight state management functions
DLL_PUBLIC
int
arm
(
void
);
DLL_PUBLIC
int
takeOff
(
void
);
DLL_PUBLIC
int
takeOffAndWait
(
void
);
DLL_PUBLIC
int
triggerParachute
(
void
);
// Flight management functions
DLL_PUBLIC
int
loiter
(
double
la
,
double
lo
,
float
a
,
float
radius
);
DLL_PUBLIC
int
setAirspeed
(
float
airspeed
);
DLL_PUBLIC
int
setTargetCoordinates
(
double
la
,
double
lo
,
float
a
);
// Information functions
DLL_PUBLIC
float
getAltitude
(
void
);
DLL_PUBLIC
float
getAltitudeRel
(
void
);
DLL_PUBLIC
float
getInitialAltitude
(
void
);
DLL_PUBLIC
double
getInitialLatitude
(
void
);
DLL_PUBLIC
double
getInitialLongitude
(
void
);
DLL_PUBLIC
double
getLatitude
(
void
);
DLL_PUBLIC
double
getLongitude
(
void
);
DLL_PUBLIC
double
*
getPositionArray
(
void
);
DLL_PUBLIC
float
*
getSpeedArray
(
void
);
DLL_PUBLIC
double
getTakeOffAltitude
(
void
);
DLL_PUBLIC
float
getYaw
(
void
);
DLL_PUBLIC
float
getSpeed
(
void
);
DLL_PUBLIC
float
getClimbRate
(
void
);
DLL_PUBLIC
int
healthAllOk
(
void
);
#ifdef __cplusplus
}
#endif
#endif
/* __AUTOPILOT_H__ */
component/qjs-wrapper/buildout.cfg
View file @
cf76e708
...
...
@@ -9,9 +9,8 @@ parts = qjs-wrapper
[qjs-wrapper]
recipe = slapos.recipe.cmmi
configure-command = true
url = https://lab.nexedi.com/nexedi/qjs-wrapper/-/archive/
v1.3/qjs-wrapper-v1.3
.tar.gz
md5sum =
5f63356c6a10bf227e2641ea4f78c7a2
url = https://lab.nexedi.com/nexedi/qjs-wrapper/-/archive/
update_settarget/qjs-wrapper-update_settarget
.tar.gz
md5sum =
7f69d896b3e27962ae26c5c7888f07bc
environment =
C_INCLUDE_PATH=include:${open62541:location}/include:${open62541:location}/deps:${open62541:location}/src/pubsub:${quickjs:location}/include
CPLUS_INCLUDE_PATH=include:${mavsdk:location}/include:${mavsdk:location}/include/mavsdk
LDFLAGS=-L${open62541:location}/lib -Wl,-rpath=${open62541:location}/lib -L${mavsdk:location}/lib -Wl,-rpath=${mavsdk:location}/lib
C_INCLUDE_PATH=include:${open62541:location}/include:${open62541:location}/deps:${open62541:location}/src/pubsub:${quickjs:location}/include:${autopilot-wrapper-header:location}
LDFLAGS=-L${open62541:location}/lib -Wl,-rpath=${open62541:location}/lib -L${mavsdk-wrapper:location}/lib -Wl,-rpath=${mavsdk-wrapper:location}/lib
component/qjs-wrapper/buildout.hash.cfg
0 → 100644
View file @
cf76e708
# THIS IS NOT A BUILDOUT FILE, despite purposedly using a compatible syntax.
# The only allowed lines here are (regexes):
# - "^#" comments, copied verbatim
# - "^[" section beginings, copied verbatim
# - lines containing an "=" sign which must fit in the following categorie.
# - "^\s*filename\s*=\s*path\s*$" where "path" is relative to this file
# Copied verbatim.
# - "^\s*hashtype\s*=.*" where "hashtype" is one of the values supported
# by the re-generation script.
# Re-generated.
# - other lines are copied verbatim
# Substitution (${...:...}), extension ([buildout] extends = ...) and
# section inheritance (< = ...) are NOT supported (but you should really
# not need these here).
[autopilot-wrapper-header]
filename = autopilot_wrapper.h
md5sum = facfc36f1ed4672d78f4e345800f02a6
software/js-drone/buildout.hash.cfg
View file @
cf76e708
...
...
@@ -18,7 +18,7 @@ md5sum = 360b58007c25727b7bd8a9154d5cafd4
[instance-default]
filename = instance-default.cfg
md5sum =
903939308701b11b1ff751784a9be110
md5sum =
696ec3cc5c7bcda336b9bb68ef1555bd
[instance-drone]
filename = instance-drone.cfg
...
...
@@ -26,7 +26,7 @@ md5sum = 1ff50063f5a54712a0bc0ff38fa74630
[main]
filename = main.js
md5sum =
21217f85fdab2f6307e3edc6ba74d0b6
md5sum =
81e692d3edcfe666bb4d7505b3375d8d
[pubsub]
filename = pubsub.js
...
...
@@ -34,4 +34,4 @@ md5sum = 1555496ad591a31a845f33488d5c335d
[worker]
filename = worker.js
md5sum =
9167a47913658d395a328f67b5a80d3
6
md5sum =
f201266b4607ca08d647886afd1e5c9
6
software/js-drone/instance-default.cfg
View file @
cf76e708
...
...
@@ -8,7 +8,6 @@
{% set drone_guid_list = slapparameter_dict.get('droneGuidList', []) -%}
{% set subscriber_guid_list = slapparameter_dict.get('subscriberGuidList', []) -%}
{% set guid_list = drone_guid_list + subscriber_guid_list -%}
{% set nb_peer = len(guid_list) -%}
{% set drone_id_list = [] -%}
{% set subscriber_id_list = [] -%}
...
...
@@ -27,7 +26,8 @@ return = instance-path
sla-computer_guid = {{ guid }}
config-autopilotIp = {{ autopilot_ip }}
config-autopilotPort = {{ dumps(autopilot_port) }}
config-numberOfPeers = {{ dumps(nb_peer) }}
config-numberOfDrone = {{ dumps(len(drone_guid_list)) }}
config-numberOfSubscriber = {{ dumps(len(subscriber_guid_list)) }}
config-id = {{ dumps(id) }}
config-isASimulation = {{ dumps(is_a_simulation) }}
{% if guid in drone_guid_list -%}
...
...
software/js-drone/instance-drone-input-schema.json
View file @
cf76e708
...
...
@@ -14,9 +14,14 @@
"description"
:
"Port on which autopilot service is running."
,
"type"
:
"integer"
},
"numberOfPeers"
:
{
"title"
:
"Number of Peers"
,
"description"
:
"Number of drones and subscribers in the swarm"
,
"numberOfDrone"
:
{
"title"
:
"Number of drone"
,
"description"
:
"Number of drone in the swarm"
,
"type"
:
"integer"
},
"numberOfSubscriber"
:
{
"title"
:
"Number of subscriber"
,
"description"
:
"Number of subscriber of the swarm"
,
"type"
:
"integer"
},
"id"
:
{
...
...
software/js-drone/main.js
View file @
cf76e708
...
...
@@ -36,10 +36,10 @@ import { open, exit } from "std";
// to prevent it to finish (and so, exit the quickjs process)
worker
=
new
Worker
(
"
{{ worker_script }}
"
);
function
quit
(
is_a_drone
,
shutdown
,
exit_code
)
{
function
quit
(
is_a_drone
,
exit_code
)
{
stopPubsub
();
if
(
is_a_drone
)
{
stop
(
shutdown
);
stop
();
}
exit
(
exit_code
);
}
...
...
@@ -141,7 +141,7 @@ import { open, exit } from "std";
can_update
=
true
;
}
else
if
(
type
===
'
exited
'
)
{
worker
.
onmessage
=
null
;
quit
(
configuration
.
isADrone
,
!
configuration
.
isASimulation
,
e
.
data
.
exit
);
quit
(
configuration
.
isADrone
,
e
.
data
.
exit
);
}
else
{
console
.
log
(
'
Unsupported message type
'
,
type
);
quit
(
configuration
.
isADrone
,
!
configuration
.
isASimulation
,
1
);
...
...
software/js-drone/software-sqdr.cfg
View file @
cf76e708
...
...
@@ -5,16 +5,18 @@ extends =
[sqdr-source]
recipe = slapos.recipe.build:gitclone
repository = https://lab.nexedi.com/slaposdrone/squadrone.git
revision =
v1.0
revision =
de17993
git-executable = ${git:location}/bin/git
[
qjs
-wrapper]
[
sqdr
-wrapper]
recipe = slapos.recipe.cmmi
configure-command = true
url =
path = ${sqdr-source:location}
md5sum =
environment =
C_INCLUDE_PATH=include:${open62541:location}/include:${open62541:location}/deps:${open62541:location}/src/pubsub:${quickjs:location}/include
CPLUS_INCLUDE_PATH=include
LDFLAGS=-L${open62541:location}/lib -Wl,-rpath=${open62541:location}/lib -L${sqdr-source:location}/lib -Wl,-rpath=${sqdr-source:location}/lib
CPLUS_INCLUDE_PATH=include:${autopilot-wrapper-header:location}
LDFLAGS=-L${sqdr-source:location}/lib -Wl,-rpath=${sqdr-source:location}/lib
[qjs-wrapper]
environment =
C_INCLUDE_PATH=include:${open62541:location}/include:${open62541:location}/deps:${open62541:location}/src/pubsub:${quickjs:location}/include:${autopilot-wrapper-header:location}
LDFLAGS=-L${open62541:location}/lib -Wl,-rpath=${open62541:location}/lib -L${sqdr-wrapper:location}/lib -Wl,-rpath=${sqdr-wrapper:location}/lib
software/js-drone/test/test.py
View file @
cf76e708
...
...
@@ -256,13 +256,14 @@ class JSDroneTestCase(SlapOSInstanceTestCase):
{
'autopilotIp'
:
'192.168.27.1'
,
'autopilotPort'
:
7909
,
'numberOfDrone'
:
0
,
'numberOfSubscriber'
:
1
,
'id'
:
0
,
'isASimulation'
:
False
,
'isADrone'
:
False
,
'flightScript'
:
'https://lab.nexedi.com/nexedi/flight-scripts/raw/master/subscribe.js'
,
'multicastIp'
:
MCAST_GRP
,
'numberOfPeers'
:
1
,
'netIf'
:
OPC_UA_NET_IF
'netIf'
:
OPC_UA_NET_IF
,
'multicastIp'
:
MCAST_GRP
}
)
...
...
software/js-drone/worker.js
View file @
cf76e708
...
...
@@ -32,7 +32,9 @@ import { Worker } from "os";
var
CONF_PATH
=
{{
json_module
.
dumps
(
configuration
)
}},
conf_file
=
std
.
open
(
CONF_PATH
,
"
r
"
),
configuration
=
JSON
.
parse
(
conf_file
.
readAsString
()),
last_message_timestamp
=
0
,
parent
=
Worker
.
parent
,
peer_dict
=
{},
user_me
=
{
//for debugging purpose
fdopen
:
std
.
fdopen
,
...
...
@@ -60,7 +62,11 @@ import { Worker } from "os";
loiter
:
loiter
,
sendMsg
:
function
(
msg
,
id
)
{
if
(
id
===
undefined
)
{
id
=
-
1
;
}
setMessage
(
JSON
.
stringify
({
content
:
msg
,
dest_id
:
id
}));
setMessage
(
JSON
.
stringify
({
content
:
msg
,
timestamp
:
Date
.
now
(),
dest_id
:
id
}));
},
setAirspeed
:
setAirspeed
,
setTargetCoordinates
:
setTargetCoordinates
...
...
@@ -90,25 +96,30 @@ import { Worker } from "os";
}
function
handleMainMessage
(
evt
)
{
var
type
=
evt
.
data
.
type
,
message
,
drone
_id
;
var
type
=
evt
.
data
.
type
,
message
,
peer
_id
;
if
(
type
===
"
initPubsub
"
)
{
initPubsub
(
configuration
.
numberOfPeers
);
for
(
drone_id
=
0
;
drone_id
<
configuration
.
numberOfPeers
;
drone_id
++
)
{
user_me
.
drone_dict
[
drone_id
]
=
new
Drone
(
drone_id
);
user_me
.
drone_dict
[
drone_id
].
init
(
drone_id
);
initPubsub
(
configuration
.
numberOfDrone
,
configuration
.
numberOfSubscriber
);
for
(
peer_id
=
0
;
peer_id
<
configuration
.
numberOfDrone
+
configuration
.
numberOfSubscriber
;
peer_id
++
)
{
peer_dict
[
peer_id
]
=
new
Drone
(
peer_id
);
peer_dict
[
peer_id
].
init
(
peer_id
);
if
(
peer_id
<
configuration
.
numberOfDrone
)
{
user_me
.
drone_dict
[
peer_id
]
=
peer_dict
[
peer_id
];
}
}
parent
.
postMessage
({
type
:
"
initialized
"
});
}
else
if
(
type
===
"
load
"
)
{
loadUserScript
(
evt
.
data
.
path
);
parent
.
postMessage
({
type
:
"
loaded
"
});
}
else
if
(
type
===
"
update
"
)
{
Object
.
entries
(
user_me
.
drone_dict
).
forEach
(
function
([
id
,
drone
])
{
message
=
drone
.
message
;
Object
.
entries
(
peer_dict
).
forEach
(
function
([
id
,
peer
])
{
message
=
peer
.
message
;
if
(
user_me
.
id
!==
Number
(
id
)
&&
message
.
length
>
0
)
{
message
=
JSON
.
parse
(
message
);
if
(
user_me
.
hasOwnProperty
(
"
onGetMsg
"
)
&&
if
(
message
.
timestamp
!=
last_message_timestamp
&&
user_me
.
hasOwnProperty
(
"
onGetMsg
"
)
&&
[
-
1
,
user_me
.
id
].
includes
(
message
.
dest_id
))
{
last_message_timestamp
=
message
.
timestamp
;
user_me
.
onGetMsg
(
message
.
content
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment