Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
L
LabComm
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Anders Blomdell
LabComm
Compare revisions
01cae7aa8e4fada7275c5b2b19eca3ab98bae970 to master
Compare revisions
Changes are shown as if the
source
revision was being merged into the
target
revision.
Learn more about comparing revisions.
Source
anders_blomdell/labcomm
Select target project
No results found
master
Select Git revision
Swap
Target
sven/labcomm
Select target project
anders_blomdell/labcomm
klaren/labcomm
tommyo/labcomm
erikj/labcomm
sven/labcomm
5 results
01cae7aa8e4fada7275c5b2b19eca3ab98bae970
Select Git revision
Show changes
Only incoming changes from source
Include changes to target since source was created
Compare
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
tools/jastadd2.jar
+0
-0
0 additions, 0 deletions
tools/jastadd2.jar
tools/lc2csv.py
+196
-0
196 additions, 0 deletions
tools/lc2csv.py
tools/lc_to_matlab_coder.py
+108
-0
108 additions, 0 deletions
tools/lc_to_matlab_coder.py
with
304 additions
and
0 deletions
tools/jastadd2.jar
deleted
100644 → 0
View file @
01cae7aa
File deleted
This diff is collapsed.
Click to expand it.
tools/lc2csv.py
0 → 100755
View file @
d3921882
#!/usr/bin/env python
import
argparse
import
labcomm2014
import
sys
import
time
class
Reader
(
object
):
def
__init__
(
self
,
file_
):
self
.
_file
=
file_
def
read
(
self
,
count
):
data
=
self
.
_file
.
read
(
count
)
if
len
(
data
)
==
0
:
raise
EOFError
()
return
data
def
mark
(
self
,
value
,
decl
):
pass
class
FollowingReader
(
Reader
):
def
__init__
(
self
,
file_
,
interval
,
timeout
):
super
(
FollowingReader
,
self
).
__init__
(
file_
)
self
.
_interval
=
interval
self
.
_timeout
=
timeout
def
read
(
self
,
count
):
data
=
''
t_start
=
time
.
time
()
while
len
(
data
)
<
count
:
tmp
=
self
.
_file
.
read
(
count
-
len
(
data
))
if
tmp
:
data
+=
tmp
else
:
time
.
sleep
(
self
.
_interval
)
if
self
.
_timeout
and
time
.
time
()
-
t_start
>
self
.
_timeout
:
raise
EOFError
()
return
data
def
flatten
(
sample
,
_type
):
if
isinstance
(
_type
,
labcomm2014
.
sample
):
flatten
(
sample
,
_type
.
decl
)
elif
isinstance
(
_type
,
labcomm2014
.
array
):
for
e
in
sample
:
flatten
(
e
,
_type
.
decl
)
elif
isinstance
(
_type
,
labcomm2014
.
struct
):
for
name
,
decl
in
_type
.
field
:
flatten
(
sample
[
name
],
decl
)
elif
isinstance
(
_type
,
labcomm2014
.
BOOLEAN
):
print
"
%d,
"
%
sample
,
elif
isinstance
(
_type
,
labcomm2014
.
STRING
):
print
"
\"
%s
\"
,
"
%
sample
,
elif
isinstance
(
_type
,
labcomm2014
.
primitive
):
print
"
%s,
"
%
sample
,
else
:
raise
Exception
(
"
Unhandled type.
"
+
str
(
type
(
type_
))
+
"
"
+
str
(
type_
))
def
flatten_labels
(
_type
,
prefix
=
""
):
if
isinstance
(
_type
,
labcomm2014
.
sample
):
flatten_labels
(
_type
.
decl
,
_type
.
name
)
elif
isinstance
(
_type
,
labcomm2014
.
array
):
if
len
(
_type
.
indices
)
!=
1
:
raise
Exception
(
"
Fix multidimensional arrays
"
)
if
len
(
_type
.
indices
)
==
0
:
raise
Exception
(
"
We dont
'
t handle dynamical sizes yet %s
"
%
_type
)
for
i
in
range
(
0
,
_type
.
indices
[
0
]):
flatten_labels
(
_type
.
decl
,
prefix
+
"
[%d]
"
%
i
)
elif
isinstance
(
_type
,
labcomm2014
.
struct
):
for
name
,
decl
in
_type
.
field
:
flatten_labels
(
decl
,
prefix
+
"
.
"
+
name
)
elif
isinstance
(
_type
,
labcomm2014
.
primitive
):
print
'"
%s
"
,
'
%
prefix
,
else
:
raise
Exception
(
"
Unhandled type.
"
+
str
(
type
(
type_
))
+
"
"
+
str
(
type_
))
def
default
(
type_
):
if
isinstance
(
type_
,
labcomm2014
.
sample
):
return
default
(
type_
.
decl
)
elif
isinstance
(
type_
,
labcomm2014
.
array
):
if
len
(
type_
.
indices
)
!=
1
:
raise
Exception
(
"
Fix multidimensional arrays
"
)
if
len
(
type_
.
indices
)
==
0
:
raise
Exception
(
"
We dont
'
t handle dynamical sizes yet %s
"
%
type_
)
for
i
in
range
(
0
,
type_
.
indices
[
0
]):
return
[
default
(
type_
.
decl
)
for
_
in
range
(
type_
.
indices
[
0
])]
elif
isinstance
(
type_
,
labcomm2014
.
struct
):
return
{
name
:
default
(
decl
)
for
name
,
decl
in
type_
.
field
}
elif
isinstance
(
type_
,
labcomm2014
.
STRING
):
return
''
elif
isinstance
(
type_
,
labcomm2014
.
BOOLEAN
):
return
False
elif
(
isinstance
(
type_
,
labcomm2014
.
FLOAT
)
or
isinstance
(
type_
,
labcomm2014
.
DOUBLE
)):
return
float
(
'
NaN
'
)
elif
(
isinstance
(
type_
,
labcomm2014
.
BYTE
)
or
isinstance
(
type_
,
labcomm2014
.
SHORT
)
or
isinstance
(
type_
,
labcomm2014
.
INTEGER
)
or
isinstance
(
type_
,
labcomm2014
.
LONG
)):
return
0
else
:
raise
Exception
(
"
Unhandled type.
"
+
str
(
type
(
type_
))
+
"
"
+
str
(
type_
))
def
dump
(
sample
,
_type
):
for
k
in
sorted
(
_type
.
keys
()):
flatten
(
sample
[
k
],
_type
[
k
])
print
def
dump_labels
(
type_
):
for
k
in
sorted
(
type_
.
keys
()):
flatten_labels
(
type_
[
k
])
print
def
defaults
(
current
,
type_
):
for
k
in
sorted
(
type_
.
keys
()):
if
k
not
in
current
:
current
[
k
]
=
default
(
type_
[
k
])
def
main
(
main_args
):
parser
=
argparse
.
ArgumentParser
()
parser
.
add_argument
(
'
elc
'
,
type
=
str
,
help
=
"
The log file.
"
)
parser
.
add_argument
(
'
-f
'
,
'
--follow
'
,
action
=
'
store_true
'
,
help
=
"
find all registrations that already
"
"
exist, then watch the file for changes. All
"
"
future registrations are ignored (because
"
"
the header has already been written).
"
)
parser
.
add_argument
(
'
-s
'
,
'
--interval
'
,
action
=
"
store
"
,
type
=
float
,
default
=
0.040
,
help
=
"
time to sleep between failed reads. Requires -f.
"
)
parser
.
add_argument
(
'
-t
'
,
'
--timeout
'
,
action
=
"
store
"
,
type
=
float
,
help
=
"
timeout to terminate when no changes are detected.
"
"
Requires -f.
"
)
parser
.
add_argument
(
'
-w
'
,
'
--no-default-columns
'
,
action
=
"
store_true
"
,
help
=
"
Do not fill columns for which there is no
"
"
data with default values. Wait instead until at least
"
"
one sample has arrived for each registration.
"
)
parser
.
add_argument
(
'
-a
'
,
'
--trigger-all
'
,
action
=
"
store_true
"
,
help
=
"
Output one line for each sample instead of for
"
"
each sample of the registration that has arrived with
"
"
the highest frequency.
"
)
args
=
parser
.
parse_args
(
main_args
)
n_samples
=
{}
# The number of received samples for each sample reg.
current
=
{}
# The most recent sample for each sample reg.
type_
=
{}
# The type (declaration) of each sample reg.
file_
=
open
(
args
.
elc
)
if
args
.
follow
:
reader
=
FollowingReader
(
file_
,
args
.
interval
,
args
.
timeout
)
else
:
reader
=
Reader
(
file_
)
d
=
labcomm2014
.
Decoder
(
reader
)
while
True
:
try
:
o
,
t
=
d
.
decode
()
if
o
is
None
:
n_samples
[
t
.
name
]
=
0
type_
[
t
.
name
]
=
t
else
:
n_samples
[
t
.
name
]
+=
1
current
[
t
.
name
]
=
o
break
except
EOFError
:
break
dump_labels
(
type_
)
if
not
args
.
no_default_columns
:
defaults
(
current
,
type_
)
n_rows
=
0
while
True
:
try
:
o
,
t
=
d
.
decode
()
if
o
is
None
:
continue
current
[
t
.
name
]
=
o
n_samples
[
t
.
name
]
+=
1
if
len
(
current
)
<
len
(
type_
):
continue
if
args
.
trigger_all
:
dump
(
current
,
type_
)
else
:
if
n_samples
[
t
.
name
]
>
n_rows
:
n_rows
=
n_samples
[
t
.
name
]
dump
(
current
,
type_
)
except
EOFError
:
break
if
__name__
==
"
__main__
"
:
main
(
sys
.
argv
[
1
:])
This diff is collapsed.
Click to expand it.
tools/lc_to_matlab_coder.py
0 → 100755
View file @
d3921882
#!/usr/bin/python
import
sys
import
imp
import
subprocess
import
os
import
labcomm2014
TRANSLATE
=
{
labcomm2014
.
SHORT
()
:
'
short
'
,
labcomm2014
.
DOUBLE
()
:
'
double
'
}
def
compile_lc
(
lc
):
p
=
subprocess
.
Popen
([
'
labcomm2014
'
,
'
--python=/dev/stdout
'
,
lc
],
stdout
=
subprocess
.
PIPE
)
src
=
p
.
stdout
.
read
()
code
=
compile
(
src
,
'
lc_import
'
,
'
exec
'
)
mod
=
sys
.
modules
.
setdefault
(
'
lc_import
'
,
imp
.
new_module
(
'
lc_import
'
))
exec
code
in
mod
.
__dict__
import
lc_import
return
(
lc_import
.
typedef
,
lc_import
.
sample
)
def
gen_binding
(
decl
,
lc_prefix
,
prefix
,
suffix
):
if
isinstance
(
decl
,
labcomm2014
.
sample
):
if
isinstance
(
decl
.
decl
,
labcomm2014
.
typedef
):
print
"
%(n1)s = coder.cstructname(%(n1)s,
'
%(lc)s_%(n2)s
'
)
"
%
dict
(
n1
=
decl
.
name
,
n2
=
decl
.
decl
.
name
,
lc
=
lc_prefix
)
else
:
print
"
%(n1)s = coder.cstructname(%(n1)s,
'
%(lc)s_%(n2)s
'
)
"
%
dict
(
n1
=
decl
.
name
,
n2
=
decl
.
name
,
lc
=
lc_prefix
)
gen_binding
(
decl
.
decl
,
lc_prefix
,
'
%s.
'
%
decl
.
name
,
suffix
)
elif
isinstance
(
decl
,
labcomm2014
.
typedef
):
print
"
%(p)s%(s)s = coder.cstructname(%(p)s%(s)s,
'
%(lc)s_%(n)s
'
)
"
%
dict
(
n
=
decl
.
name
,
lc
=
lc_prefix
,
p
=
prefix
,
s
=
suffix
)
gen_binding
(
decl
.
decl
,
lc_prefix
,
prefix
,
suffix
)
elif
isinstance
(
decl
,
labcomm2014
.
array
):
raise
Exception
(
"
Array unhandled
"
)
elif
isinstance
(
decl
,
labcomm2014
.
struct
):
for
n
,
d
in
decl
.
field
:
gen_binding
(
d
,
lc_prefix
,
'
%sFields.%s
'
%
(
prefix
,
n
),
suffix
)
elif
isinstance
(
decl
,
labcomm2014
.
primitive
):
pass
else
:
raise
Exception
(
"
Unhandled type. %s
"
,
decl
)
def
gen_sample
(
lc_prefix
,
decl
):
if
isinstance
(
decl
,
labcomm2014
.
sample
):
print
"
%s =
"
%
decl
.
name
,
gen_sample
(
lc_prefix
,
decl
.
decl
)
print
gen_binding
(
decl
,
lc_prefix
,
''
,
''
)
elif
isinstance
(
decl
,
labcomm2014
.
typedef
):
# Expand in place
gen_sample
(
lc_prefix
,
decl
.
decl
)
elif
isinstance
(
decl
,
labcomm2014
.
array
):
raise
Exception
(
"
Array unhandled
"
)
elif
isinstance
(
decl
,
labcomm2014
.
struct
):
print
"
struct(...
"
for
n
,
d
in
decl
.
field
:
print
"'
%s,
"
%
n
,
gen_sample
(
lc_prefix
,
d
)
print
"
)...
"
elif
isinstance
(
decl
,
labcomm2014
.
primitive
):
print
"
%s(0), ...
"
%
TRANSLATE
[
decl
]
else
:
raise
Exception
(
"
Unhandled type. %s
"
,
decl
)
"""
robtarget = struct(...
'
orientation
'
, ...
struct(...
'
q1
'
, double(0), ...
'
q2
'
, double(0), ...
'
q3
'
, double(0), ...
'
q4
'
, double(0) ...
), ...
'
translation
'
, ...
struct(...
'
x
'
, double(0), ...
'
y
'
, double(0), ...
'
z
'
, double(0) ...
), ...
'
configuration
'
, ...
struct(...
'
cf1
'
, int16(0), ...
'
cf4
'
, int16(0), ...
'
cf6
'
, int16(0), ...
'
cfx
'
, int16(0) ...
) ...
);
robtarget_types = coder.typeof(robtarget);
act = coder.cstructname(robtarget_types,
'
egm_pb2lc_robtarget
'
);
act.Fields.translation = coder.cstructname(act.Fields.translation,
'
egm_pb2lc_cartesian
'
);
act.Fields.orientation = coder.cstructname(act.Fields.orientation,
'
egm_pb2lc_quaternion
'
);
act.Fields.configuration = coder.cstructname(act.Fields.configuration,
'
egm_pb2lc_confdata
'
);
"""
def
gen_matlab
(
lc
):
lc_prefix
=
os
.
path
.
basename
(
lc
).
split
(
'
.
'
)[
0
]
typedef
,
sample
=
compile_lc
(
lc
)
for
s
in
sample
:
gen_sample
(
lc_prefix
,
s
.
signature
)
if
__name__
==
'
__main__
'
:
for
lc
in
sys
.
argv
[
1
:]:
gen_matlab
(
lc
)
This diff is collapsed.
Click to expand it.
Prev
1
…
17
18
19
20
21
Next