{"id":29776825,"url":"https://github.com/robotcaresystems/roboticslanguage","last_synced_at":"2025-07-27T10:18:59.915Z","repository":{"id":57462455,"uuid":"95216650","full_name":"robotcaresystems/RoboticsLanguage","owner":"robotcaresystems","description":"The Robotics Language is an open compiler where users can develop languages to generate ROS code","archived":false,"fork":false,"pushed_at":"2019-11-19T15:10:31.000Z","size":23745,"stargazers_count":60,"open_issues_count":2,"forks_count":7,"subscribers_count":7,"default_branch":"development","last_synced_at":"2025-06-22T11:20:48.301Z","etag":null,"topics":["compiler","robotics-language","ros","ros-industrial","ros-node"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robotcaresystems.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-06-23T12:06:09.000Z","updated_at":"2024-11-24T18:09:48.000Z","dependencies_parsed_at":"2022-09-12T13:21:44.950Z","dependency_job_id":null,"html_url":"https://github.com/robotcaresystems/RoboticsLanguage","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/robotcaresystems/RoboticsLanguage","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robotcaresystems%2FRoboticsLanguage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robotcaresystems%2FRoboticsLanguage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robotcaresystems%2FRoboticsLanguage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robotcaresystems%2FRoboticsLanguage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robotcaresystems","download_url":"https://codeload.github.com/robotcaresystems/RoboticsLanguage/tar.gz/refs/heads/development","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robotcaresystems%2FRoboticsLanguage/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267319489,"owners_count":24068508,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-27T02:00:11.917Z","response_time":82,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compiler","robotics-language","ros","ros-industrial","ros-node"],"created_at":"2025-07-27T10:18:55.496Z","updated_at":"2025-07-27T10:18:59.905Z","avatar_url":"https://github.com/robotcaresystems.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n[![PyPI version fury.io](https://badge.fury.io/py/RoboticsLanguage.svg)](https://pypi.python.org/pypi/RoboticsLanguage/) [![GitHub license](https://img.shields.io/github/license/robotcaresystems/RoboticsLanguage.svg)](https://github.com/robotcaresystems/RoboticsLanguage/blob/master/LICENSE) [![PyPI pyversions](https://img.shields.io/pypi/pyversions/RoboticsLanguage.svg)](https://pypi.python.org/pypi/RoboticsLanguage/)\n\u003c!-- ![Docker Build Status](https://img.shields.io/docker/build/roboticslanguage/rol.svg) --\u003e\n\n\n![](RoboticsLanguage/Documentation/Assets/rol-logo.png)\n\n## News\n\n- We will ge giving a [tutorial at IROS 2019 in Macau](https://abstractionlanguages.github.io/IROS2019/).\n\n - We presented a tutorial at [IEEE IRC 2019](http://irc.asia.edu.tw/2019/). [Slides are available here](Documentation/Tutorials/IEEE-IRC-2019/README.md).\n\n - We presented at the [Amazon reMARS conference 2019](https://youtu.be/AjclrL7Fe_A?t=1854)\n\n - We presented at the [AWS re:invent conference 2018](https://youtu.be/HAela66zov0?t=1692)\n\n# What is the language of Robotics?\n\nThis 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.\n\n[Domain Specific Languages](https://en.wikipedia.org/wiki/Domain-specific_language) *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.\n\n\n\nThe base RoL language has a structure similar to standard high-level programming languages\n\n```coffeescript\n# A simple topic echo node\nnode(\n  name:'example echo',\n\n  definitions: block(\n    # the input signal\n    echo_in ∈ Signals(Strings, rosTopic:'/echo/in', onNew: echo_out = echo_in ),\n\n    # the echo signal\n    echo_out ∈ Signals(Strings, rosTopic:'/echo/out')\n  )\n)\n```\n\nThe power of the RoL is in its ability to integrate mini-abstraction languages:\n\n```coffeescript\n# A finite state machine\nnode(\n  name:'example state machine',\n\n  definitions: block(\n\n    # a mini-language: code is defined within `\u003c{ }\u003e`\n    FiniteStateMachine\u003c{\n\n      name:machine\n      initial:idle\n\n      (idle)-start-\u003e(running)-stop-\u003e(idle)\n      (running)-error-\u003e(fault)-reset-\u003e(idle)\n      (idle)-calibration-\u003e(calibrate)-reset-\u003e(idle)\n\n    }\u003e,\n\n    # the start signal\n    start ∈ Signals(Empty, rosTopic:'/start', onNew: machine.fire('start')),\n\n    # the stop signal\n    stop ∈ Signals(Empty, rosTopic:'/stop', onNew: machine.fire('stop'))\n\n  )\n)\n```\nAutomatically generated graphical user interfaces in the browser allow for development and monitoring.\n\n![](RoboticsLanguage/Documentation/Assets/FiniteStateMachine.png)\n\n\nRoL contains high-level language element abstractions that are very useful for robotics, such as Interval [Temporal Logic](https://en.wikipedia.org/wiki/Temporal_logic) for signals.\n\n\n```coffeescript\nnode(\n  name:'temporal logic test example',\n\n  definitions: block(\n\n    # a signal\n    x ∈ Signals(Booleans, rosTopic:'/temporal_logic/x'),\n\n    when(□[1,0](x),\n      print('always in the last second')),\n\n    when(◇[4,1](x),\n      print('eventually from 4 seconds to 1 second ago')),\n\n    when(□[5,0](◇[1,0](x) ∧ ◇[1,0](¬x)),\n      print('oscillating faster then 1Hz for at least 5 seconds'))\n\n  )\n)\n```\n\nGenerated GUIs visualise the signals in time and the outcome of the logic.\n\n\n![](RoboticsLanguage/Documentation/Assets/TemporalLogic.png)\n\n\nThe 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.\n\n## Documentation\n\n- The Robotics Language\n  - [Philosophy](RoboticsLanguage/Documentation/Language/Philosophy/README.md)\n  - [Tutorials](RoboticsLanguage/Documentation/Language/Tutorials/README.md)\n  - [Reference](RoboticsLanguage/Documentation/Language/Reference/README.md)\n\n- The Robotics Language compiler\n  - [Philosophy](RoboticsLanguage/Documentation/Compiler/Philosophy/README.md)\n  - [Tutorials](RoboticsLanguage/Documentation/Compiler/Tutorials/README.md)\n  - [Reference](RoboticsLanguage/Documentation/Compiler/Reference/README.md)\n\n\n- Tutorials\n  - [IEEE IRC 2019](RoboticsLanguage/Documentation/Tutorials/IEEE-IRC-2019/README.md)\n\n## Install using pip\n\nThe best way to install is using `pip`:\n\n```shell\npip install RoboticsLanguage\n```\n## Install using github\n\nTo install this version in github, first `git clone`:\n```shell\ngit clone https://github.com/robotcaresystems/RoboticsLanguage.git\n```\n\nNext, if you are a user run:\n```shell\npip install .\n```\n\nIf you are a developer run:\n```shell\npip install -e .\n```\n## Docker image scripts\n\nTo use the predefined docker scripts first install using pip:\n\n```shell\npip install RoboticsLanguage\n```\n\nNext, if you are a ROS1 user run in the shell:\n\n```shell\nrol_docker\n```\n\nIf you are a developer of the Robotics Language run in the shell:\n\n```shell\nrol_docker_development\n```\n\nFor ROS2 use:\n\n```shell\nrol2_docker\n```\n\nor:\n\n```shell\nrol2_docker_development\n```\n\n\n## Docker image \"by hand\"\n\n\nGet the docker image:\n```shell\ndocker pull roboticslanguage/rol\n```\n\nCreate a folder to share files between docker and your system:\n```shell\nmkdir -p ~/RoL/docker_catkin_ws\n```\n\nAdd easy launch commands by copying the lines below into your `~/.bashrc`:\n```shell\n# where is your base RoL folder\nexport ROL_PATH=$HOME/RoL/\n\n# alias to run robotics language docker\nalias rol_docker='xhost +local:docker; \\\n  docker run -it --rm \\\n  --name=\"rol_docker\" \\\n  --env=DISPLAY \\\n  --env=XDG_RUNTIME_DIR \\\n  --env=QT_X11_NO_MITSHM=1 \\\n  --device=/dev/dri:/dev/dri \\\n  -v /tmp/.X11-unix:/tmp/.X11-unix:rw \\\n  -v /etc/localtime:/etc/localtime:ro \\\n  -v \"${ROL_PATH:?}/docker_catkin_ws:/home/roboticslanguage/catkin_ws/\" \\\n  --workdir /home/roboticslanguage/examples \\\n  --net=host \\\n  --add-host rol_docker:127.0.0.1 \\\n  --hostname=rol_docker \\\n  roboticslanguage/rol'\n# alias to attach to an existing rol_docker\nalias rol_docker_attach='docker exec -it -e \"COLUMNS=$COLUMNS\" -e \"LINES=$LINES\" rol_docker bash'\n```\n\nNext start the docker image\n\n```shell\nsource ~/.bashrc\nrol_docker\n```\n\nYou can open another shell by running `rol_docker_attach`.\n\nFor the first time, setup the user rights in the shared folder:\n```shell\nsudo chown $(whoami):$(whoami) ~/catkin_ws\n```\n\nOnce in the docker, everything is configured. You can compile the example:\n\n```shell\nrol 1_hello_world.rol -c\n```\n\nMake sure to source for the first time:\n\n```shell\nsource ~/catkin_ws/devel/setup.bash\n```\n\nNow you are ready to launch:\n\n```shell\nrol 1_hello_world.rol -l\n```\n\n## Examples without docker\n\nThe following command will copy a collenction of examples into the current folder:\n```shell\nrol --copy-examples-here\n```\n\nNext try the examples:\n\n```shell\nrol 1_hello_world.rol -c\n```\n\nMake sure to source for the first time:\n\n```shell\nsource ~/catkin_ws/devel/setup.bash\n```\n\nNow you are ready to launch:\n\n```shell\nrol 1_hello_world.rol -l\n```\n\n\n**Note:** if you are not using the docker images and you don't have a catkin workspace make sure to run:\n\n```shell\nmkdir -p ~/catkin_ws/src\ncd ~/catkin_ws\ncatkin init\n```\n\nAfter compiling the rol package for the first time make sure to source it:\n\n```shell\nsource ~/catkin_ws/devel/setup.bash\n```\n\n## Work in progress\n\nThe Robotics Language is continuously evolving. Not all features are implemented. If find errors or you wish a new feature [please let us know](https://github.com/robotcaresystems/RoboticsLanguage/issues).\n\n\n## Acknowledgements\n\nThe Robotics Language is developed by Robot Care Systems B.V. (http://www.robotcaresystems.com)\n\n***\n\u003c!--\n    ROSIN acknowledgement from the ROSIN press kit\n    @ https://github.com/rosin-project/press_kit\n--\u003e\n\n\u003ca href=\"http://rosin-project.eu\"\u003e\n  \u003cimg src=\"http://rosin-project.eu/wp-content/uploads/rosin_ack_logo_wide.png\"\n       alt=\"rosin_logo\" height=\"60\" \u003e\n\u003c/a\u003e\n\nSupported by ROSIN - ROS-Industrial Quality-Assured Robot Software Components.\nMore information: \u003ca href=\"http://rosin-project.eu\"\u003erosin-project.eu\u003c/a\u003e\n\n\u003cimg src=\"http://rosin-project.eu/wp-content/uploads/rosin_eu_flag.jpg\"\n     alt=\"eu_flag\" height=\"45\" align=\"left\" \u003e\n\nThis project has received funding from the European Union’s Horizon 2020\nresearch and innovation programme under grant agreement no. 732287.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobotcaresystems%2Froboticslanguage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobotcaresystems%2Froboticslanguage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobotcaresystems%2Froboticslanguage/lists"}