Repo symbol

roboticslanguage repository

Repo symbol

roboticslanguage repository

Repo symbol

roboticslanguage repository

Repo symbol

roboticslanguage repository

Repo symbol

roboticslanguage repository

Repository Summary

Description The Robotics Language is an open compiler where users can develop languages to generate ROS code
Checkout URI https://github.com/robotcaresystems/roboticslanguage.git
VCS Type git
VCS Version development
Last Updated 2019-11-19
Dev Status UNKNOWN
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

No packages found.

README

PyPI version fury.io GitHub license PyPI pyversions

News

What is the language of Robotics?

This is a very deep question with difficult answers. If robotics is meant to equal or even surpass human capabilities, then the language of robotics should be able to describe human behaviour, all the way from muscle activation to intelligence. Achieving this on a single programming language seems like an impossible task. This project proposes a new framework where multiple domain specific languages are used together to describe the behaviour of a robot. Specifically, the Robotics Language (RoL) is a high level robotics programming language that generates ROS c++ nodes, HTML interfaces, or other elements.

Domain Specific Languages are computer languages specialised to a particular application domain. Such languages use the minimum information required to describe a particular concept for a domain, thus present an abstraction of information. This project uses the concept of abstraction languages to simplify programming by combining multiple domain specific languages in a single file.

The base RoL language has a structure similar to standard high-level programming languages

# A simple topic echo node
node(
  name:'example echo',

  definitions: block(
    # the input signal
    echo_in  Signals(Strings, rosTopic:'/echo/in', onNew: echo_out = echo_in ),

    # the echo signal
    echo_out  Signals(Strings, rosTopic:'/echo/out')
  )
)

The power of the RoL is in its ability to integrate mini-abstraction languages:

# A finite state machine
node(
  name:'example state machine',

  definitions: block(

    # a mini-language: code is defined within `<{ }>`
    FiniteStateMachine<{

      name:machine
      initial:idle

      (idle)-start->(running)-stop->(idle)
      (running)-error->(fault)-reset->(idle)
      (idle)-calibration->(calibrate)-reset->(idle)

    }>,

    # the start signal
    start  Signals(Empty, rosTopic:'/start', onNew: machine.fire('start')),

    # the stop signal
    stop  Signals(Empty, rosTopic:'/stop', onNew: machine.fire('stop'))

  )
)

Automatically generated graphical user interfaces in the browser allow for development and monitoring.

RoL contains high-level language element abstractions that are very useful for robotics, such as Interval Temporal Logic for signals.

```coffeescript node( name:’temporal logic test example’,

definitions: block(

# a signal
x ∈ Signals(Booleans, rosTopic:'/temporal_logic/x'),

when(□[1,0](x),
  print('always in the last second')),

when(◇[4,1](x),
  print('eventually from 4 seconds to 1 second ago')),

when(□[5,0](◇[1,0](x) ∧ ◇[1,0](¬x)),
  print('oscillating faster then 1Hz for at least 5 seconds'))

) )

File truncated at 100 lines see the full file

Repo symbol

roboticslanguage repository

Repo symbol

roboticslanguage repository

Repo symbol

roboticslanguage repository

Repo symbol

roboticslanguage repository