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
README
News
-
We will ge giving a tutorial at IROS 2019 in Macau.
-
We presented a tutorial at IEEE IRC 2019. Slides are available here.
-
We presented at the Amazon reMARS conference 2019
-
We presented at the AWS re:invent conference 2018
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