Projects

A curated list of projects ...

LiaScript

I fell in love with the idea of creating online courses with a "no-code" or "low-code" notation, where everyone can contribute either content, functionality, or design. You simply start to write down your content in Markdown with some minor extensions

  • Code-snippets can be made executable
  • Different types of quizzes can be defined, with no code or configuration
  • A course can be presented in various way, a YouTube-like screencast, a presentation, or an interactive book...
  • Support for ASCII-art, animations, JavaScript, Text2Speech, etc.
  • Data in tables is visualized automatically
  • Extendable, with its own module-system

Checkout some of the following ressources:

website / github / youtube


SelectScript

This was my second attempt of creating a programming/querying language. Initally it was used as a high-level declarative language to query simulations and robotic world models, that was implemented in Python. But the core of the language was then extended to also support functional, object-oriented, and procedural aspects. Actually, I tried to integrate everything that I liked from other programming languages or stuff that I missed into it.

For example, the code below, shows a fully functional program, that can be used to solve the towers-of-Hanoi problem. The mov function defines, how to execute one move in that game, while the code below, simply defines a search, how to get from one tower configuration to the goal configuration.

mov
  = PROC(Tower, frm, to)
    "A simple tower move function that returns a new tower configuration:
     mov([[3,2,1], [], []], 0, 1) -> [[3,2], [1], []]

     In case of an unalowed move a None value gets returned:
     mov([[3,2], [1], []], 0, 1)  -> None "
    : ( IF( $Tower == None, EXIT None);

        IF( not $Tower[$frm], EXIT None);

        IF( $Tower[$to],
            IF( $Tower[$frm][-1] > $Tower[$to][-1],
                EXIT None));

        $Tower[$to]@+( $Tower[$frm][-1] );
        $Tower[$frm]@pop();
        $Tower;
      );


# initial tower configuration
tower = [[3,2,1], [], []];

# allowed moves [from, to]
moves = [[0,1], [0,2], [1,0], [1,2], [2,0], [2,1]];

# goal configuration
finish = [[], [], [3,2,1]];

    SELECT $tower
      FROM m:moves
     WHERE finish == mov($tower, $m[0], $m[1])
START WITH $tower = tower
CONNECT BY NO CYCLE
           $tower@mov($m[0], $m[1])
 STOP WITH $tower == None OR $step$ > 6
        AS LIST;

The core of the language was later ported to a minimalistic virtual machine (VM) implemented in C that could also be executed at tiny microcontrollers. Jab, the example above, can be compiled into bytecode, send via a serial interaface to an Arduino-Uno, which sends the result back. The goal was actually to have a simple query language, that could access all of a devices infrastructure/sensors.

Sources:


GpsSatFi

This stands for GPS-Satellite-Finder, a Python-tool for for calculating realistic GPS accuracy (dilution of precision) with the help of 3D models, gathered from the community based openstreetmap.org. Under the hood it uses ODE (OpenDynamicsEngine) to handle the 3D landscape an also to calculate which points at what time are visible to what satellite.

github


CassandraROS

cassandra_ros provides an interface for ROS to the Cassandra database system. It can be used to store any types of ROS-messages in column families (topic-containers). ROS messages are automatically translated and stored in various formats in Cassandra. Furthermore it enables to fully explore, analyse, and replay the messages by using CQL (CassandraQueryLanguage).

github / wiki


rosR

This package provides an simple interface of standard ros-functionalities for the programming language R. It might be useful to make the R capabilities for statistical analyses and visualization also usable for the robotic community. In contrast to other language implementations, such as rospy, rosjava, etc. this is not a pure R implementation, it is a mixture of pure R, SWIG generated functions, and system commands. This combination was required to overcome some limitations of R, such as single threaded, lacking support for sockets and handling of raw streams. Nevertheless, this package can be used to define and use typical ROS publishers and subscribers in R, messages are automatically and online generated from the definition files, and it integrates the possibility to read and therefore analyse bag-files in R.

github / wiki / demos / paper

Demo for checking the validity of sensor measurements with R

ODEviz

Playing around with the OpenDynamicsEngine (ODE) I found it a bit confusing and difficult to cope with both, the physical simulation as well as with the visualization. All relevant data is already included in the physical part, so why cope with both?

This is a simple wraper for Python, that uses pyvtk to visualize a simulation, just pass the “world” and the “space” to ODE_Visualization and let it handle the rest …

github


OpenRave-Plugins

This repository contains a bunch of plugins for the OpenRave robotics simulation environment, that I used extensively some years ago.

  • Filters: These can be used to generate various types of maps 2D/3D or to check the sensor coverage for certain areas.
  • Virtual Sensors: Realistic distance sensors, which use 3D shapes to simulate various different sensor beams.
  • A Tracer: Simply a this to follow the movement of certain trajectories visually.

github