One for (Almost) All: Using a Modern Programmable Programming Language in Robotics
Berthold Bäuml
berthold.baeuml@dlr.de Autonomous Learning Robots Lab Institute of Robotics and Mechatronics German Aerospace Center (DLR)
- r
One for (Almost) All: Using a Modern Programmable Programming - - PowerPoint PPT Presentation
One for (Almost) All: Using a Modern Programmable Programming Language in Robotics or A Roboticist in Language Wonderland Berthold Buml berthold.baeuml@dlr.de Autonomous Learning Robots Lab Institute of Robotics and Mechatronics German
Haskell Scala OCaml Erlang Clojure Scheme
Gambit/Racket
functional + + + + + + typed (static) + + +
mutation
+
+ strictness lazy strict(&lazy) strict(&lazy) strict strict
strict / strict (lazy)
parallel ++ + JoCaml ++ ++ Termite / + compiled native JVM native VM (native HiPE) JVM C-code / VM- JIT
sensing
RGB-D sensor (0.5MPixel/33Hz)
tactile skin on hands (3000taxel/750Hz)
acting
26 (hands)
computing
hand control
1kHz
arm/torso/head control (19DOF)
1kHz
platform control
60Hz/50ms
state machine/ communicator/ view control
1kHz
pose estimator
512Hz/0.5ms
circle detector
25Hz/25ms
circle detector
25Hz/25ms
MHT/UKF
25Hz/10ms
ball tracker
25Hz/35ms
Linux/ QuadCore planner
25Hz/60ms
SQP
60ms
SQP
60ms
SQP
60ms
SQP
60ms
QNX/ 32 Cores QNX/ 2x DualCore user interaction
GigE GigE 1394 GigE Sercos SpaceWire CAN TD TD TD USB
GUI 3D viewer Linux logic planner Linux
TD TD
DSLs are cool!
DSLs are cool!
Domain specific languages are
(class object% (init size) (define current-size size) (super-new) (define/public (get-size) current-size) (define/public (grow amt) (set! current-size (+ amt current-size))) (define/public (eat other-fish) (grow (send other-fish get-size)))) (define fish% (class object% (init size) ....)) (define charlie (new fish% [size 10])) > (send charlie grow 6) > (send charlie get-size) 16
Haskell Scala OCaml Erlang Clojure Scheme
Gambit/Racket
functional + + + + + + typed (static) + + +
mutation
+
+ strictness lazy strict(&lazy) strict(&lazy) strict strict
strict / strict (lazy)
parallel ++ + JoCaml ++ ++ Termite / + compiled native JVM native VM (native HiPE) JVM C-code / VM- JIT
Haskell Scala OCaml Erlang Clojure Scheme
Gambit/Racket
functional + + + + + + typed (static) + + +
mutation
+
+ strictness lazy strict(&lazy) strict(&lazy) strict strict
strict / strict (lazy)
parallel ++ + JoCaml ++ ++ Termite / + compiled native JVM native VM (native HiPE) JVM C-code / VM- JIT distributed
Cloud Haskell
actors JoCaml actors!! no native, e.g., Akka
Termite / distrib.places FFI (w/o glue)
+ JNA
experimental
+ JNA + / + platforms
Lin/Mac/Win Lin/Mac/Win Lin/Mac/Win Lin/Mac/Win Lin/Mac/Win gcc / Lin/Mac/ Win
DSELs
(functional) ++
++ +
+
+ + / +
meta programming
Template Haskell
macros (experiment.) MetaOCaml
simple macros lisp macros
macros /
GPU
GPU
GPU
GPU
GPU
GPU
GPU
aRDx RT
Ê Ê Ê Ê Ê Ê Ê Ê Ù Ù Ù Ù Ù Ù Ù Ù Á Á Á Á Á Á Á Á ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡ Ï Ï Ï Ï Ï Ï Ï Ï Ú Ú Ú Ú Ú Ú Ú Ú Ê aRDx Ù aRD Á Orocos ‡ ROS Ï ROS HfixedL Ú YARP 1 102 104 106 108 10-6 10-4 10-2 1 packet size @byteD round-trip time @sD
process
Ê Ê Ê Ê Ê Ê Ê Ê Ù Ù Ù Ù Ù Ù Ù Ù Á Á Á Á Á Á Á Á ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡ Ú Ú Ú Ú Ú Ú Ú Ú
10-3 1 10-4 10-2 ‡
‡ ‡ ‡ ‡
pause @sD
1 102 104 106 108 10-6 10-4 10-2 1 packet size @byteD
host
Ê Ê Ê Ê Ê Ê Ê Ê Ù Ù Ù Ù Ù Ù Ù Ù Á Á Á Á Á Á Á Á ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡ Ú Ú Ú Ú Ú Ú Ú Ú 1 102 104 106 108 10-4 10-3 10-2 10-1 1 10 packet size @byteD
distributed
Ê Ê Ê Ê Ê Ê Ê Ù Ù Ù Ù Ù Ù Ù Á Á Á Á Á Á ‡ ‡ ‡ ‡ ‡ ‡ ‡ ‡ Ï Ï Ï Ï Ï Ï Ï Ï Ú Ú Ú Ú Ú Ú Ú 1 102 104 106 108 10-6 10-4 10-2 1 packet size @byteD round-trip time @sD
process
Ê Ê Ê Ê Ê Ê Ê Ù Ù Ù Ù Ù Ù Ù Á Á Á Á Á Á Á ‡ ‡ ‡ ‡ ‡ ‡ ‡ Ú Ú Ú Ú Ú Ú Ú Ú 1 102 104 106 108 10-6 10-4 10-2 1 packet size @byteD
host
Ê Ê Ê Ê Ê Ê Ê Ù Ù Ù Ù Ù Ù Ù Á Á Á Á Á Á Á ‡ ‡ ‡ ‡ ‡ ‡ ‡ Ú Ú Ú Ú Ú Ú Ú 1 102 104 106 108 10-4 10-3 10-2 10-1 1 10 packet size @byteD
distributed