Metadata-Version: 2.1
Name: RoboticsLanguage
Version: 0.3.14
Summary: The Robotics Language
Home-page: http://github.com/robotcaresystems/roboticslanguage
Author: Gabriel A. D. Lopes
Author-email: g.lopes@rrcrobotics.com
License: Apache 2.0
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2.7
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development :: Code Generators
Classifier: Topic :: Software Development :: Compilers
Description-Content-Type: text/markdown
Requires-Dist: parsley
Requires-Dist: argparse
Requires-Dist: argcomplete
Requires-Dist: jinja2
Requires-Dist: dpath
Requires-Dist: coloredlogs
Requires-Dist: lxml
Requires-Dist: iso-639
Requires-Dist: funcy
Requires-Dist: dill
Requires-Dist: pygments
Requires-Dist: fso
Requires-Dist: pyyaml
Requires-Dist: autopep8

The Robotics Language (RoL) is an open extensible domain-specific (or model-based) language for robotics. RoL is an abstraction on top of ROS to efficiently and quickly develop ROS applications using a mathematics-centred language. RoL generates ROS c++ nodes, HTML interfaces, or any other elements.

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

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

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

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

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

```coffeescript
# 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 in Signals(Empty, rosTopic:'/start', onNew: machine.fire('start')),

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

  )
)
```
The RoL is in practice an open compiler where users can develop their own languages by means of plug-ins. The RoL is programmed in python and uses XML as the internal abstract syntax tree.


