diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index b119d0456..b04959ac3 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,4 +1,4 @@
-name: ros-model CI
+name: RosTooling CI
on: [push,pull_request]
@@ -10,9 +10,20 @@ jobs:
- name: Checkout
uses: actions/checkout@v2
with:
- path: ros-model
+ path: RosTooling
+ - name: Install jdk 19
+ run: sudo apt install -y openjdk-19-jre
+ - name: Set up Java
+ uses: actions/setup-java@v2
+ with:
+ distribution: 'adopt'
+ java-version: '19'
+ - name: Debug
+ run: |
+ uname -a
+ mvn --version
+ java --version
- name: Build and test with Maven
run: |
- pushd ros-model
+ pushd RosTooling
mvn clean verify -f plugins/de.fraunhofer.ipa.ros.parent/pom.xml
-
diff --git a/.gitignore b/.gitignore
index dcb9fe0d0..917d59be8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,4 +20,3 @@ dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar
-
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 000000000..14b68573f
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,27 @@
+# See https://pre-commit.com for more information
+# See https://pre-commit.com/hooks.html for more hooks
+repos:
+- repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v4.4.0
+ hooks:
+ - id: trailing-whitespace
+ exclude: (src-gen)
+ - id: end-of-file-fixer
+ exclude: (src-gen)
+ - id: check-yaml
+ exclude: (src-gen)
+ - id: check-added-large-files
+ exclude: (src-gen)
+
+- repo: https://github.com/Lucas-C/pre-commit-hooks
+ rev: v1.4.2
+ hooks:
+ - id: forbid-crlf
+ exclude: (src-gen)
+ - id: remove-crlf
+ exclude: (src-gen)
+ - id: forbid-tabs
+ exclude: (src-gen)
+ - id: remove-tabs
+ args: [--whitespaces-count, '4']
+ exclude: (src-gen)
diff --git a/EclipseInstaller/.project b/EclipseInstaller/.project
index 690a8b2f7..6dc3df9e9 100644
--- a/EclipseInstaller/.project
+++ b/EclipseInstaller/.project
@@ -1,11 +1,11 @@
- EclipseInstaller
-
-
-
-
-
-
-
+ EclipseInstaller
+
+
+
+
+
+
+
diff --git a/EclipseInstaller/ROSModel.setup b/EclipseInstaller/ROSModel.setup
index 9def71e6d..80ac592ec 100644
--- a/EclipseInstaller/ROSModel.setup
+++ b/EclipseInstaller/ROSModel.setup
@@ -16,7 +16,7 @@
label="ROS Model">
Define the JRE needed to compile and run the Java projects of ${scope.project.label}
@@ -36,13 +36,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<section name="Workbench">
- <section name="org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart">
- <item value="true" key="group_libraries"/>
- <item value="false" key="linkWithEditor"/>
- <item value="2" key="layout"/>
- <item value="2" key="rootMode"/>
- <item value="<?xml version="1.0" encoding="UTF-8"?>
<packageExplorer configured="true" group_libraries="1" layout="2" linkWithEditor="0" rootMode="2" sortWorkingSets="false" workingSetName="">
<localWorkingSetManager>
<workingSet editPageId="org.eclipse.jdt.internal.ui.OthersWorkingSet" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1382792884467_1" label="Other Projects" name="Other Projects"/>
</localWorkingSetManager>
<activeWorkingSet workingSetName="Other Projects"/>
<allWorkingSets workingSetName="Other Projects"/>
</packageExplorer>" key="memento"/>
- </section>
+ <section name="org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart">
+ <item value="true" key="group_libraries"/>
+ <item value="false" key="linkWithEditor"/>
+ <item value="2" key="layout"/>
+ <item value="2" key="rootMode"/>
+ <item value="<?xml version="1.0" encoding="UTF-8"?>
<packageExplorer configured="true" group_libraries="1" layout="2" linkWithEditor="0" rootMode="2" sortWorkingSets="false" workingSetName="">
<localWorkingSetManager>
<workingSet editPageId="org.eclipse.jdt.internal.ui.OthersWorkingSet" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1382792884467_1" label="Other Projects" name="Other Projects"/>
</localWorkingSetManager>
<activeWorkingSet workingSetName="Other Projects"/>
<allWorkingSets workingSetName="Other Projects"/>
</packageExplorer>" key="memento"/>
+ </section>
</section>
@@ -117,7 +117,7 @@
id="ros-model"
filter=""
remoteURI="ipa320/ros-model"
- checkoutBranch="master">
+ checkoutBranch="main">
GenerateXtext
+ name="main"
+ label="Main"/>
diff --git a/docu/.gitattributes b/docu/.gitattributes
new file mode 100644
index 000000000..d41a94043
--- /dev/null
+++ b/docu/.gitattributes
@@ -0,0 +1 @@
+*.gif filter=lfs diff=lfs merge=lfs -text
diff --git a/docu/Environment_setup.md b/docu/Environment_setup.md
new file mode 100644
index 000000000..ff2888bb2
--- /dev/null
+++ b/docu/Environment_setup.md
@@ -0,0 +1,26 @@
+# Setup the environment and start the eclipse application
+
+### 0: Start the ROS tooling application
+
+:bangbang::bangbang: This is only needed if you installed the toolig from [source](#option-2-using-the-eclipse-installer---source-installation-ros-tooling-developers), if you installed the release version please continue directly with the [step 1](#1-switch-to-the-ros-developer-perspective)
+
+select de.fraunhofer.ipa.ros.plugin and press the button *Run*
+
+![alt text](images/run_ros_tooling.png)
+
+### 1: Switch to the ROS Developer perspective
+
+Go to Menu Window -> Perspective -> Open Perspective -> Other... -> ROS developer. Your application toolbar will be automatically configured.
+
+### 2: Import the common communication objects project
+
+import the project located under the "ROSCommonObjects" folder of this repository to the workbench of your application:
+```
+de.fraunhofer.ipa.ros.communication.objects
+```
+
+If you have internet a button can clone from GitHub the objects to your workspace and import them automatically:
+
+![alt text](images/clone_and_import.png)
+
+Now that your workspace is setup, you can start creating your [project and defining your ROS system](#Tutorials)
diff --git a/docu/Example_PubSub.md b/docu/Example_PubSub.md
new file mode 100644
index 000000000..ce9d8006e
--- /dev/null
+++ b/docu/Example_PubSub.md
@@ -0,0 +1,134 @@
+# Tutorial: How to create a simple Publisher-Subscriber example.
+
+In this tutorial we just want to show how the models can be used to define ROS nodes.
+For this we will see how two simple nodes can be defined, one that acts as a publisher of a "Hello World!" message and another that receives it as a subscriber.
+
+This tutorial is fictitious, it is not based on any existing ROS node. The ROS example is reflected in the models of the example [pub_sub_ros2](https://github.com/ipa-nhg/ros-model-examples/tree/main/pub_sub_ros2).
+
+The first step is to create a project to hold the models.
+
+To import this as a project in the RosTooling you can create a new modeling project. By File -> New -> Project -> General -> Project. Then you must give a name to the project, for example "Example" press next, and add as project reference "de.fraunhofer.ipa.ros.communication.objects". We recommend to create a folder called "rosnodes" within the project.
+
+![alt text](images/pubsub_tutorial1.gif)
+
+Once the project is created, you can create a new file my File -> New -> Other -> File. The file shall be created under the folder "rosnodes" and it must have the extension ".ros2", for example **publisher.ros2**. By creating a file type .ros2, Eclipse will convert the project to a Xtext project. Then copy the previous content to the new file.
+
+![alt text](images/pubsub_tutorial2.gif)
+
+Following the format of the [Ros model](RosModelDescription.md) we can now create a new Ros package, that contains a node with a publisher.
+
+The first line of the model must contain the name of the package, as part of the grammar of the model ":" will close the name definition line:
+
+```
+publisher_package:
+
+```
+
+Then we need the artifact, a runnable to execute the node. As every YAML format file we have to add identantion to the secon line. Then pressing the keys "Ctrl"+Space bar the menu will suggest us as an option the text "artifacts:". We select it and go to the next line.
+
+In the third line we must add a douple identation, we will create an object under artifacts. The next object will be a name for the artifact, for example "pub_artifact":
+
+```
+publisher:
+ artifacts:
+ pub_artifact:
+```
+
+Similar to the artifact creation, we need to create a node, with the grammar "node: **NODENAME**":
+
+```
+publisher:
+ artifacts:
+ pub_artifact:
+ node: pub_node
+```
+Now that we have the node, we can define the interfaces that offers this node as inputs and output to connect to it. In our case we want to create a publisher, which the type **String** .
+
+![alt text](images/pubsub_tutorial3.gif)
+
+
+The models will look similar to:
+
+```
+publisher:
+ artifacts:
+ pub_artifact:
+ node: pub_node
+ publishers:
+ my_pub:
+ type: "std_msgs/msg/String"
+```
+
+In the same way we can create a subscriber:
+
+![alt text](images/pubsub_tutorial4.gif)
+
+This new subscriber model, will look like:
+
+```
+subscriber:
+ artifacts:
+ sub_artifact:
+ node: sub_node
+ subscribers:
+ my_sub:
+ type: "std_msgs/msg/String"
+```
+
+Now that we have already the components we can compose them. For that we have to create a new .rossystem file. Again go to File -> New -> Other -> File. The new file must have as extension .rossystem.
+
+In [RosSystem description](RosSystemModelDescription.md) we explain the format of a system and the editor will support you to write the model properly.
+
+The first that must be given is a name and then a ":" is required. In the next line you must add identation and you can press the keys "Ctrl" + Space bar for help.
+Then we will define the nodes that compose the system. Here under "from" we will link our previously created nodes, the grammar for the references is **PackageName.NodeName**.
+
+![alt text](images/pubsub_tutorial5.gif)
+
+So far our file looks like:
+```
+my_system:
+ nodes:
+ publisher:
+ from: "publisher.pub_node"
+ subscriber:
+ from: "subscriber.sub_node"
+```
+
+Now, we want to expose the ports to be connected. For that we have to define the interfaces under the nodes. And again we have to reference the created interfaces, with the grammar **NodeName::InterfaceName**.
+
+![alt text](images/pubsub_tutorial6.gif)
+
+And the model is updated to:
+```
+my_system:
+ nodes:
+ publisher:
+ from: "publisher.pub_node"
+ interfaces:
+ - HelloWorldPublisher: pub-> "pub_artifact::my_pub"
+ subscriber:
+ from: "subscriber.sub_node"
+ interfaces:
+ - HelloWorldSubscriber: sub-> "sub_artifact::my_sub"
+```
+The last step is to create the connection between the two components. For that we will use the connections description, under the system description. The connections must be done between interfaces instances described within the models, otherwise the model validator will give an error.
+
+![alt text](images/pubsub_tutorial7.gif)
+
+And the model is updated to:
+```
+my_system:
+ nodes:
+ publisher:
+ from: "publisher.pub_node"
+ interfaces:
+ - HelloWorldPublisher: pub-> "pub_artifact::my_pub"
+ subscriber:
+ from: "subscriber.sub_node"
+ interfaces:
+ - HelloWorldSubscriber: sub-> "sub_artifact::my_sub"
+ connections:
+ -[ HelloWorldPublisher, HelloWorldSubscriber]
+```
+
+With this very basic example we hope you have understood how the models can be used and what kind of attributes they allow to represent.
\ No newline at end of file
diff --git a/docu/Example_Turtlesim.md b/docu/Example_Turtlesim.md
new file mode 100644
index 000000000..02741b073
--- /dev/null
+++ b/docu/Example_Turtlesim.md
@@ -0,0 +1,147 @@
+# Hands-on example for the Turtlesim node
+
+To learn ROS one of the first tutoials that everyone does is turtlesim.
+
+Basically it is a small graphical interface where appears a turtle that I can move using the speed commands of any robotic base in ROS. [Official TurtleSim tutorial](https://docs.ros.org/en/foxy/Tutorials/Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim.html)
+
+We will use it as an example to introduce our models. Let's imagine that we want to create a system in which we have two nodes, one of them is the turtlesim and the other is the node to teleoperate it.
+The first thing we need to do is to create the models for both components. Both nodes are implemented in the [turtlesim](https://github.com/ros/ros_tutorials/tree/humble/turtlesim) package in the [ros_tutorials](https://github.com/ros/ros_tutorials/tree/humble) repository.
+
+We can create the component models manually or use our static code [analysis tools](https://github.com/ipa320/ros-model-extractors) to get them automatically. Using the second method we obtained the following models.
+
+```
+turtlesim:
+ fromGitRepo: "https://github.com/ros/ros_tutorials/"
+ artifacts:
+ turtle_teleop_key:
+ node: turtle_teleop_key
+ publishers:
+ cmd_vel:
+ type: "geometry_msgs/msg/Twist"
+ parameters:
+ scale_angular:
+ type: Double
+ default: 2.0
+ scale_linear:
+ type: Double
+ default: 2.0
+ turtlesim_node:
+ node: turtlesim_node
+ publishers:
+ color_sensor:
+ type: "turtlesim/msg/Color"
+ pose:
+ type: "turtlesim/msg/Pose"
+ subscribers:
+ cmd_vel:
+ type: "geometry_msgs/msg/Twist"
+ serviceservers:
+ teleport_absolute:
+ type: "turtlesim/srv/TeleportAbsolute"
+ spawn:
+ type: 'turtlesim/srv/Spawn'
+ set_pen:
+ type: 'turtlesim/srv/SetPen'
+ reset:
+ type: "std_srvs/srv/Empty"
+ kill:
+ type: 'turtlesim/srv/Kill'
+ teleport_relative:
+ type: 'turtlesim/srv/TeleportRelative'
+ clear:
+ type: 'std_srvs/srv/Empty'
+```
+
+To import this as a project in the RosTooling you can create a new modeling project. By File -> New -> Project -> General -> Project. Then you must give a name to the project, for example "turtlesim_example" press next, and add as project reference "de.fraunhofer.ipa.ros.communication.objects"
+
+![alt text](images/turtlesim_tutorial_refproject.png)
+
+Once the project is created, you can create a new file my File -> New -> Other -> File. We recommend to give as name to the file the name of the package and its must have the extension .ros2, this means the new file should be called **turtlesim.ros2**. By creating a file type .ros2, Eclipse will convert the project to a Xtext project. Then copy the previous content to the new file.
+
+Now that we have already the components we can compose them. For that we have to create a new .rossystem file. Again go to File -> New -> Other -> File. The new file must have as extension .rossystem.
+
+In [RosSystem description](RosSystemModelDescription.md) we explain the format of a system and the editor will support you to write the model properly.
+
+The first that must be given is a name and then a ":" is required. In the next line you must add identation and you can press the keys "Ctrl" + Space bar for help.
+Firstly, we will add the 2 nodes that compose our system.
+
+![alt text](images/turtlesim_tutorial1.gif)
+
+So far our file looks like:
+```
+turtlesim_system:
+ nodes:
+ turtlesim:
+ from: "turtlesim.turtlesim_node"
+ key_teleop:
+ from: "turtlesim.turtle_teleop_key"
+```
+
+Now, we want to expose the ports to be connected. This means the subscriber of the velocity command of the turtle and the publisher from the keyboard teleop:
+
+![alt text](images/turtlesim_tutorial2.gif)
+
+And the model is updated to:
+```
+turtlesim_system:
+ nodes:
+ turtlesim:
+ from: "turtlesim.turtlesim_node"
+ interfaces:
+ - cmd_subscriber: sub-> "turtlesim_node::cmd_vel"
+ key_teleop:
+ from: "turtlesim.turtle_teleop_key"
+ interfaces:
+ - cmd_publisher: pub-> "joystick_teleop_node::cmd_vel"
+```
+The last step is to create the connection between the two components.
+
+![alt text](images/turtlesim_tutorial3.gif)
+
+And the model is updated to:
+```
+turtlesim_system:
+ nodes:
+ turtlesim:
+ from: "turtlesim.turtlesim_node"
+ interfaces:
+ - cmd_subscriber: sub-> "turtlesim_node::cmd_vel"
+ key_teleop:
+ from: "turtlesim.turtle_teleop_key"
+ interfaces:
+ - cmd_publisher: pub-> "joystick_teleop_node::cmd_vel"
+ connections:
+ -[ cmd_publisher , cmd_subscriber]
+```
+
+If you save (Ctrl+S) after the last modifications a new folder "src-gen" will be automatically created. This folder contains a ROS2 package ready to be executed with a launch file to start the designed system.
+
+For a quick check, if you source a valid ROS installation and call the launch command the turtlesim example will be launched:
+
+```
+source /opt/ros/ROSDISTRO/setup.bash
+ros2 launch PATH_TO_LAUNCH_PY_FILE
+```
+
+Using the terminal of the keyboard node you can use the arrows to send new commands to the turtle.
+
+![alt text](images/turtlesim_tutorial4.gif)
+
+
+To make use of the new created package in ROS, we recommend to create a ros workspace and add there the package. This means:
+
+```
+cd ~
+mkdir -p ros2_ws/src
+cp PATH_TO_GENERATED_PACKAGE_UNDER_SRC-GEN ros2_ws/src/ -r
+cd ros2_ws
+rosdep install --from-path src -i -y
+colcon build
+source install/setup.bash
+```
+
+To launch the system, the traditional ros2 launch command can be called:
+
+```
+ros2 lanunch turtlesim_system turtlesim_system.launch.py
+```
diff --git a/docu/Installation.md b/docu/Installation.md
index 84e193aaf..ec1d6a3e8 100644
--- a/docu/Installation.md
+++ b/docu/Installation.md
@@ -2,72 +2,62 @@
### Option 1: Using the Release version (Recommended)
-In Eclipse, go to *Help* > *Install New Software...*. To install the latest version of the ROS tooling, add the update site URL [http://ros-model.seronet-project.de/updatesite/latest/](http://ros-model.seronet-project.de/updatesite/latest/)(*) in the *Work with* section. If you wish to install an earlier version instead, go to the [the update site](http://ros-model.seronet-project.de/updatesite/), choose the desired version and copy its URL.
+First the java environment have to be setup:
-![alt text](images/install_updatesite.png)
+```
+sudo apt-get install openjdk-19-jre
+```
-If none package is listed, please uncheck the option *Group items by category*. The category *ROS Model* appears in the *Name* area. Check the box in front of *ROS model* and click *Next* to review the list of items to be installed. Click *Next* again to read and accept the terms of the license agreements and afterwards click *Finish*. Eclipse will then start to install the ROS tooling and its dependencies. If you get a security warning about the authenticity, click OK. Finally, when asked, restart Eclipse to complete the installation process.
+Then Eclipse can be installes. Please download the installer from the official eclipse [website](https://www.eclipse.org/downloads/packages/installer). Once you start the installer, select the package "Eclipse Modeling Tools".
+
+![alt text](images/install_eclipse_modeling.png)
+
+Press next, and then pick the java version 19 and the folder where you would like to install eclipse.
+
+![alt text](images/install_eclipse_jdk_version.png)
+Continue the installation, acepting the license, as usual.
-(*) Apart of the latest stable release of the tooling, some pre-releases for new feautures are available. See the following list of current pre-releases:
+Once the installation is completed, go to *Help* > *Install New Software...*. To install the latest version of the ROS tooling, add the update site URL [https://raw.githubusercontent.com/ipa320/RosTooling-update-site/main](https://raw.githubusercontent.com/ipa320/RosTooling-update-site/main)(*) in the *Work with* section.
-| Name | Code version | Update Site Link | Description |
-|---|---|---|---|
-|TestComponentStack|https://github.com/ipa320/ros-model/tree/1.4.0_TestComponentStacks|http://ros-model.seronet-project.de/updatesite/TestComponentStacks/latest/| Added to the RosSystem metamodel the option to group components forming components stacks. This pre-release is backward compatible for the models, but the validators and generators are **not** updated. If Xtext report errors, please ignore them. |
-| v1.5 | https://github.com/ipa320/ros-model/tree/1.5.0_pre-release |http://ros-model.seronet-project.de/updatesite/pre-release/latest/| Long term version of the grammar (simplified for the 1.4 release). **This version is not backwards compatible with 1.3 and earlier releases**|
+![alt text](images/install_updatesite.png)
+
+If none package is listed, please uncheck the option *Group items by category*. The category *ROS Model* appears in the *Name* area. Check the box in front of *ROS model* and click *Next* to review the list of items to be installed. Click *Next* again to read and accept the terms of the license agreements and afterwards click *Finish*. Eclipse will then start to install the ROS tooling and its dependencies. If you get a security warning about the authenticity, click OK. Finally, when asked, restart Eclipse to complete the installation process.
+To start using the ROS tooling continue with the [step 1](Environment_setup.md/#1-switch-to-the-ros-developer-perspective)
-To start using the ROS tooling continue with the [step 1](#1-switch-to-the-ros-developer-perspective)
+## Alternative installations
### Option 2: Using the Eclipse Installer - Source installation (ROS tooling developers)
-First the java environment have to be setup, for eclipse it is recomended the installation of the version 8 (i.e. X=8) for Ubuntu 16.04 and 11 (i.e. X=11) for the 18.04 and 20.04:
+First the java environment have to be setup:
```
-sudo apt-get install openjdk-11-jre
+sudo apt-get install openjdk-19-jre
```
-Download the official [Eclipse Installer](https://www.eclipse.org/downloads/packages/installer) for your preferred operating system. Execute the installer and choose the advanced mode (menu on the right-up corner). Select the Product *Eclipse Modeling tools* package, for the version it is recommended *2020-12*.
+Download the official [Eclipse Installer](https://www.eclipse.org/downloads/packages/installer) for your preferred operating system. Execute the installer and choose the advanced mode (menu on the right-up corner). Select the Product *Eclipse Modeling tools* package. And then pick the java version 19.
![alt text](images/eclipse_installer1.png)
Press *Next* and add a new *User project* pressing the green button *+*:
```
Catalog: Github Projects
-Resource URIs: https://raw.githubusercontent.com/ipa320/ros-model/master/EclipseInstaller/ROSModel.setup
+Resource URIs: https://raw.githubusercontent.com/ipa320/RosTooling/main/EclipseInstaller/ROSModel.setup
```
-![alt text](images/eclipse_installer2.png)
+Sometimes eclipse is not able to find the file, for those cases we recommend to download the file to the local memory of the machine and import it:
-Select the the ROS Model project (under Github Projects -> ) and press next.
-
-By default the ROS tooling installation will be saved under the folder *ros-model-master* in your home directory. In case your github credentials are not setup on your machine, change the *Ros model Github repository* to the *HTTPs(read-write)* option.
-
-Follow the installation instructions of the Oompth installer dialog, after the installation eclipse will be restarted to launch the ROS tooling configuration. Finally, when all the startup tasks finished press "Workbench".
-
-To start using the ROS tooling continue with the [step 0](#0-start-the-ros-tooling-application)
-
-# Setup the environment and start the eclipse application
-
-### 0: Start the ROS tooling application
-
-:bangbang::bangbang: This is only needed if you installed the toolig from [source](#option-2-using-the-eclipse-installer---source-installation-ros-tooling-developers), if you installed the release version please continue directly with the [step 1](#1-switch-to-the-ros-developer-perspective)
-
-select de.fraunhofer.ipa.ros.plugin and press the button *Run*
-
-![alt text](images/run_ros_tooling.png)
-
-### 1: Switch to the ROS Developer perspective
+```
+wget https://raw.githubusercontent.com/ipa320/RosTooling/main/EclipseInstaller/ROSModel.setup
+```
-Go to Menu Window -> Perspective -> Open Perspective -> Other... -> ROS developer. Your application toolbar will be automatically configured.
+![alt text](images/eclipse_installer2.png)
-### 2: Import the common communication objects project
+Select the the ROS Model project (under Github Projects -> ) and press next.
-import the project located under the "ROSCommonObjects" folder of this repository to the workbench of your application:
-```
-de.fraunhofer.ipa.ros.communication.objects
-```
+By default the ROS tooling installation will be saved under the folder *ros-model-master* in your home directory. To ensure that you have access to get the source code from GitHub, select the check box *Show all variable* and change the *Ros model Github repository* to the *HTTPs(read-write)* option, verify that the option *Github user ID* is set to "anonymous".
-If you have internet a button can clone from GitHub the objects to your workspace and import them automatically:
+![alt text](images/eclipse_installer3.png)
-![alt text](images/clone_and_import.png)
+Follow the installation instructions of the Oompth installer dialog, after the installation eclipse will be restarted to launch the ROS tooling configuration. Finally, when all the startup tasks finished press "Workbench".
-Now that your workspace is setup, you can start creating your [project and defining your ROS system](#Tutorials)
+To start using the ROS tooling continue with the [step 0](Environment_setup.md/#0-start-the-ros-tooling-application)
diff --git a/docu/Introspection.md b/docu/Introspection.md
deleted file mode 100644
index c17c90844..000000000
--- a/docu/Introspection.md
+++ /dev/null
@@ -1,25 +0,0 @@
-## Create a ROS model from a deployed robot using our introspection at runtime tool
-
-Please be sure that the tool is installed and your workspace setup, see the [installation guide](../README.md) for further details.
-
-The tools documented here were conceived as a simple way to obtain models of systems already developed during their execution. This series of scripts uses the popular ROS rosgraph library to obtain a list of the interfaces present in the system at runtime.
-
-You can install the tools directly on your workspace using the following command:
-
-```
-mkdir -p my_catkin_ws/src
-cd my_catkin_ws/src
-catkin_init_workspace
-rosinstall . https://raw.githubusercontent.com/ipa320/ros-model/master/docu/introspection.rosinstall
-cd my_catkin_ws
-catkin_make (or catkin build)
-```
-
-To start the monitoring software the snapshot node has to be started on the same machine where the software to be analysed is running:
-
-```
-source my_catkin_ws/devel/setup.bash
-rosrun rosgraph_monitor rossystem_snapshot
-```
-
-This script will generate automatically a new file (.rossystem) under the folder: 'rosgraph_monitor/results'.
diff --git a/docu/IntrospectionNode.md b/docu/IntrospectionNode.md
new file mode 100644
index 000000000..1fbeb9a11
--- /dev/null
+++ b/docu/IntrospectionNode.md
@@ -0,0 +1,29 @@
+## Create a ROS model from a deployed robot using our introspection at runtime tool (for ROS 2 systems)
+
+Please be sure that the tool is installed and your workspace setup, see the [installation guide](../README.md) for further details.
+
+The tools documented here were conceived as a simple way to obtain models of systems already developed during their execution. This series of scripts uses the popular ROS rosgraph library to obtain a list of the interfaces present in the system at runtime.
+
+You can install the tools directly on your workspace using the following command:
+
+```
+cd YourRos2WS/src
+git clone git@github.com:ipa-nhg/ros2model.git
+cd YourRos2WS
+colcon build
+```
+
+To ask the monitoring module to capture all the nodes running on the system, please use the following command:
+
+```
+ros2 model running_node -ga -d ~/PathToModelsFolderOutput
+```
+
+The folder **PathToModelsFolderOutput** will contain all the model files.
+
+For a single node, the following command can be called:
+```
+ros2 model running_node [-o Outputfile]
+```
+
+For further information please check the [ros2model](https://github.com/ipa-cmh/ros2model) repository.
diff --git a/docu/NewCommunicationObjects.md b/docu/NewCommunicationObjects.md
index c1f8694a2..542aad2bb 100644
--- a/docu/NewCommunicationObjects.md
+++ b/docu/NewCommunicationObjects.md
@@ -2,15 +2,11 @@
### Autogeneration tools
-We facilitate a couple of tools to auto generate the corresponding model (these tools work only for messages and services, the action types, in the majority of the cases, have to be unfortunately implemented manually):
-
-- Use our cloud facilities : [ROS Model Extractor](http://ros-model.seronet-project.de/) and navigate to the tag "Specification Analysis". There, if the package that contains the message types is released for Melodic you just have to give the name of the package and press **Submit**. Otherwise please specify first the name of the Git repository that hold the package
-
-- Use locally the helper script (:bangbang::bangbang: this method requires a local ROS installation):
+For the autogeneration of of model objects we facilitate a bash (:bangbang::bangbang: this method requires a local ROS installation):
```
source /your_ROS_workspace
-wget https://raw.githubusercontent.com/ipa320/ros-model-cloud/master/extractor-interface/scripts/generate_messages_model_helper.sh
+wget https://raw.githubusercontent.com/ipa320/RosCommonObjects/YamlFormat/de.fraunhofer.ipa.ros.communication.objects/basic_msgs/generate_messages_model_helper.sh
chmod +x generate_messages_model_helper.sh
./generate_messages_model_helper.sh ROS_PACKAGE_NAME > ROS_PACKAGE_NAME.ros
```
@@ -24,30 +20,91 @@ To modify the ROS models (.ros) manually the ROS tooling provides a customized e
This editor contains an autocomplete function (by pressing Ctrl+Space) and will report any error made by editing. The first step is define a PackageSet (that correspond to a metapackage for ROS, this definition is optional and its name can be kept empty). Then, the ROS package which contains the msgs have to be defined and within it the option "spec" have to be selected to write down the objects. In the practice that means that the initial *.ros file that describes ROS objects looks:
```
-PackageSet { package { CatkinPackage ros_package_name {
- spec {}
-}}}
+ros_package_name:
+ msgs:
+ msg_name
+ message
+ type name
```
-The grammar supports 3 types of communication objects TopicSpec (to describe ROS msgs), ServiceSpec (to describe ROS srvs) and ActionSpec (to describe ROS actions), and consequentially each of these 3 types support different specifications types:
+The grammar supports 3 types of communication objects messages, services and actions, and consequentially each of these 3 types support different specifications types:
-- ROS msgs
+- ROS msgs
+
+```
+ros_package_name:
+ **msgs:**
+ msg_name
+ **message**
+ ElementType ElementName
+```
- **TopicSpec** SpecName { **message** { ElementType ElementName ... } }
+For example:
+```
+std_msgs:
+ msgs:
+ ColorRGBA
+ message
+ float32 r
+ float32 g
+ float32 b
+ float32 a
+```
- -> Example ```TopicSpec Point{ message { float64 x float64 y float64 z }}```
+- ROS srvs
-- ROS srvs
+```
+ros_package_name:
+ **srvs:**
+ srv_name
+ **request**
+ ElementType ElementName
+ **response**
+ ElementType ElementName
+```
- **ServiceSpec** SpecName { **request** { ElementType ElementName ..} **response** { ElementType ElementName .. } }
+For example:
+```
+std_srvs:
+ srvs:
+ SetBool
+ request
+ bool data
+ response
+ bool success
+ string message
+```
- -> Example ```ServiceSpec SetBool{ request { bool data } response { bool success string message } }```
-- ROS actions
+- ROS actions
- **ActionSpec** SpecName { **goal** { ElementType ElementName .. } **result** { ElementType ElementName ..} **feedback** { ElementType ElementName .. }}
+```
+ros_package_name:
+ **actions:**
+ action_name
+ **goal**
+ ElementType ElementName
+ **result**
+ ElementType ElementName
+ **feedback**
+ ElementType ElementName
+```
- -> Example ```ActionSpec Say { goal { string test } result { bool sucess string message} feedback {} }```
+For example:
+```
+control_msgs:
+ actions:
+ PointHead
+ goal
+ 'geometry_msgs/msg/PointStamped'[] target
+ 'geometry_msgs/msg/Vector3'[] pointing_axis
+ string pointing_frame
+ 'builtin_interfaces/msg/Duration'[] min_duration
+ float64 max_velocity
+ result
+ feedback
+ float64 pointing_angle_error
+```
Where , quite similar to ROS, the allowed element types are:
@@ -69,10 +126,10 @@ Where , quite similar to ROS, the allowed element types are:
- Relative reference to other object:
- NameOftheObject (if it is described within the same ROS package) -> for example **Point32**
- - 'ROSPackage_name.NameOftheObject' (if it is described in other ROS package) -> for example **'geometry_msgs.Point32'**
+ - 'ROSPackage_name/NameOftheObject' (if it is described in other ROS package) -> for example **'geometry_msgs/Point32'**
- Arrays of element types:
- - ElementType[] -> for example **string[]** or **Point32[]** or **'geometry_msgs.Point32'[]**
+ - ElementType[] -> for example **string[]** or **Point32[]** or **'geometry_msgs/Point32'[]**
Additionally the definition of constants with its value is also supported and follows a patter very similar to the ROS one: ```constanttype1 CONSTANTNAME1=constantvalue1```, for example ```byte OK=0 byte WARN=1 byte ERROR=2 byte STALE=3```.
@@ -80,37 +137,75 @@ Additionally the definition of constants with its value is also supported and fo
The following extract shows the ROS model description correspondent to the [nav_msgs](http://wiki.ros.org/nav_msgs) package:
```
-PackageSet {
- Package nav_msgs{ Specs {
- TopicSpec GetMapAction{ message { GetMapActionGoal action_goal GetMapActionResult action_result GetMapActionFeedback action_feedback }},
- TopicSpec GetMapActionFeedback{ message { Header header "actionlib_msgs.GoalStatus" status GetMapFeedback feedback }},
- TopicSpec GetMapActionGoal{ message { Header header "actionlib_msgs.GoalID" goal_id GetMapGoal goal }},
- TopicSpec GetMapActionResult{ message { Header header "actionlib_msgs.GoalStatus" status GetMapResult result }},
- TopicSpec GetMapFeedback{ message { }},
- TopicSpec GetMapGoal{ message { }},
- TopicSpec GetMapResult{ message { "nav_msgs.OccupancyGrid" map }},
- TopicSpec GridCells{ message { Header header float32 cell_width float32 cell_height "geometry_msgs.Point"[] cells }},
- TopicSpec MapMetaData{ message { time map_load_time float32 resolution uint32 width uint32 height "geometry_msgs.Pose" origin }},
- TopicSpec OccupancyGrid{ message { Header header MapMetaData info int8[] data }},
- TopicSpec Odometry{ message { Header header string child_frame_id "geometry_msgs.PoseWithCovariance" pose "geometry_msgs.TwistWithCovariance" twist }},
- TopicSpec Path{ message { Header header "geometry_msgs.PoseStamped"[] poses }},
- ServiceSpec GetMap{ request { } response { "nav_msgs.OccupancyGrid" map } },
- ServiceSpec GetPlan{ request { "geometry_msgs.PoseStamped" start "geometry_msgs.PoseStamped" goal float32 tolerance } response { "nav_msgs.Path" plan } },
- ServiceSpec SetMap{ request { "nav_msgs.OccupancyGrid" map "geometry_msgs.PoseWithCovarianceStamped" initial_pose } response { bool success } }
- }}
-}}
+nav_msgs:
+ msgs:
+ Path
+ message
+ 'std_msgs/msg/Header'[] header
+ 'geometry_msgs/msg/PoseStamped'[] poses
+ OccupancyGrid
+ message
+ 'std_msgs/msg/Header'[] header
+ 'nav_msgs/msg/MapMetaData'[] info
+ int8[] data
+ Odometry
+ message
+ 'std_msgs/msg/Header'[] header
+ string child_frame_id
+ 'geometry_msgs/msg/PoseWithCovariance'[] pose
+ 'geometry_msgs/msg/TwistWithCovariance'[] twist
+ GridCells
+ message
+ 'std_msgs/msg/Header'[] header
+ float32 cell_width
+ float32 cell_height
+ 'geometry_msgs/msg/Point'[] cells
+ MapMetaData
+ message
+ 'builtin_interfaces/msg/Time'[] map_load_time
+ float32 resolution
+ uint32 width
+ uint32 height
+ 'geometry_msgs/msg/Pose'[] origin
+ srvs:
+ SetMap
+ request
+ 'nav_msgs/msg/OccupancyGrid'[] map
+ 'geometry_msgs/msg/PoseWithCovarianceStamped'[] initial_pose
+ response
+ bool success
+ LoadMap
+ request
+ string map_url
+ response
+ 'nav_msgs/msg/OccupancyGrid'[] map
+ uint8 result
+ GetPlan
+ request
+ 'geometry_msgs/msg/PoseStamped'[] start
+ 'geometry_msgs/msg/PoseStamped'[] goal
+ float32 tolerance
+ response
+ 'nav_msgs/msg/Path'[] plan
+ GetMap
+ request
+ response
+ 'nav_msgs/msg/OccupancyGrid'[] map
```
:bangbang::bangbang: This model doesn't allow the creation of 2 specification with the same name, although they have different types. That means a ROS model like the following one is not allow:
```
-PackageSet {
- Package my_msgs { Specs {
- TopicSpec hello { message { String data }},
- ServiceSpec hello { request { } response { String data }},
- }}
-}}
+my_msgs:
+ msgs:
+ hello:
+ message
+ String data
+ srvs:
+ hello
+ request
+ response
+ String data
```
-The reason is that when one of these objects have to be referenced during the definition of a node it will be imposible for the model to distinguish which is the correct one (both are defined as my_msgs.Hello and whitin the dame model file). For these cases we recommend to split the objects into two different model files.
+The reason is that when one of these objects have to be referenced during the definition of a node it will be imposible for the model to distinguish which is the correct one (both are defined as my_msgs/Hello and whitin the dame model file). For these cases we recommend to split the objects into two different model files.
The repository [RosCommonObjects](https://github.com/ipa320/RosCommonObjects) holds further examples.
-
diff --git a/docu/NewRosModel.md b/docu/NewRosModel.md
index 8e09322af..5cfbb93c7 100644
--- a/docu/NewRosModel.md
+++ b/docu/NewRosModel.md
@@ -1,18 +1,14 @@
+:bangbang::bangbang::bangbang::bangbang: This tutorial is only working for previous versions of the RosTooling (v2)
+
+
## Create a ROS model from your code
Please be sure that the tool is installed and your workspace setup, see the [installation guide](../README.md) for further details.
-To extract your model from ROS code ou have 3 options:
-- [Use the available web interface to autogenerate models from code hosted on GitHub](#cloud)
+To extract your model from ROS code ou have 2 options:
- [Call our docker container configuration for the extraction from a GitHub hosted repository (requires only the installation of Docker)](#docker-container)
- [Use a local build of your ROS package (requires the local installation of HAROS)](#local-ros-workspace)
-### Cloud
-
-Under the link [Model extractor](http://ros-model.seronet-project.de/) a web service to extract automatically models from existing open source ROS packages is available. The user only has to give as input the URL address of the repository (for example https://github.com/ipa320/cob_driver), the name of the package that contains the node to be analysed (for example cob_sick_s300) and the name of th node ( for example cob_sick_s300). The resulted model will be displayed on the right side of the window.
-
-![alt text](images/cob_sick_s300_cloud.png)
-
### Docker container
Clone the repository [ros-model-extractors](https://github.com/ipa320/ros-model-extractors) and follow its [documentation instructions](https://github.com/ipa320/ros-model-extractors#ros-model-extractors).
diff --git a/docu/ParametersAPI.md b/docu/ParametersAPI.md
new file mode 100644
index 000000000..01cd50555
--- /dev/null
+++ b/docu/ParametersAPI.md
@@ -0,0 +1,85 @@
+## Parameters API
+
+The types of parameters supported by the ROS tooling are the following:
+
+* Boolean (true or false)
+* Integer
+* Double
+* String
+* Base64
+* List
+* Array
+* Struct
+
+and their description is allowed at ROS and ROSSystem model level.
+
+For the complete definition of parameters the user has to open the ROS model editor, where the language format is the following:
+```
+**parameters:**
+ ParameterName:
+ **type:** ParameterType
+ **value:** ParameterValue
+```
+
+For example (for a .ros2 file):
+
+```
+test_parameters:
+ artifacts:
+ test_parameters:
+ node: params_example
+ parameters:
+ string_test:
+ type: String
+ bool_test:
+ type: Boolean
+ array_test:
+ type: Array [String]
+ base64_test:
+ type: Base64
+ double_test:
+ type: Double
+ integer_test:
+ type: Integer
+ list_test:
+ type: List [Integer,Integer,String]
+ array_test:
+ type: Array [String]
+ struct_test:
+ type: Struct [hello Integer, what String]
+```
+
+These parameters can be re-set at Rossystem level (that means for ROS developers, the case of the set of a new parameter value within a node include on a ROS launch file). For the tooling the format is the following:
+
+```
+- ParameterName : ParameterReferenceInRos2File
+ **value:** ParameterValue
+```
+
+Continuing the previous example, the parameters redefinition looks:
+
+```
+test:
+ nodes:
+ params_node:
+ from: "test_parameters.params_example"
+ parameters:
+ - test_s : "test_parameters::string_test"
+ value: "hello"
+ - test_b : "test_parameters::bool_test"
+ value: true
+ - test_d : "test_parameters::double_test"
+ value: 1.1
+ - test_i : "test_parameters::integer_test"
+ value: 1
+ - test_l: "test_parameters::list_test"
+ value: [1,1,"hello"]
+ - test_a: "test_parameters::array_test"
+ value: ["hello", "hola", "hallo"]
+ - test_st: "test_parameters::struct_test"
+ value: [
+ hello: 1
+ what: "test"]
+```
+The model definition of parameters is also consider for the autogeneration of launch files and the component interfaces. Complementarily, and because of the complexity of the format, the .ros, the .componentinterface and the .rossystem language validators contain rules to check that the value given to the parameter has the correct type and also help messages that together with the auto-complete function (Ctrl+Space) facilitate to the user the creation of parameters.
+
diff --git a/docu/PlantUML.md b/docu/PlantUML.md
new file mode 100644
index 000000000..1e2f0034b
--- /dev/null
+++ b/docu/PlantUML.md
@@ -0,0 +1,8 @@
+## System Models visualization
+
+The visualization of the models is built on top of the [PlantUML](https://plantuml.com/eclipse) viewer for Eclipse. To install this plugin the Eclipse Marketplace can be used. This tool can be easily opened under the menu Help->Eclipse Marketplace. Then Search the "PlantUML plugin" and install it.
+
+The RosTooling will generate for every rossystem file a new PlaUML textual model compatible with the viewer. By default, the RosSystem compiler creates for every valid system model a file under src-gen/**SystemName**/resources/ called **SystemName**.puml.
+
+The file can be opened with a standard textual editor and the corresponding model can be visualized by opening the visualizer, under "Window"->"Show View"->"Other" and searching for "PlantUML".
+:bangbang the file with the extension *.puml must be open, otherwise, the visualizer will not detect it.
diff --git a/docu/Release.md b/docu/Release.md
index f9839130c..c1f26d259 100644
--- a/docu/Release.md
+++ b/docu/Release.md
@@ -5,7 +5,7 @@
Run the command:
```
-mvn org.eclipse.tycho:tycho-versions-plugin:set-version -DnewVersion=X.Y.0-SNAPSHOT -f plugins/de.fraunhofer.ipa.ros.parent/
+mvn versions:set -DnewVersion=X.Y.Z-SNAPSHOT -f plugins/de.fraunhofer.ipa.ros.parent/pom.xml
```
This will upgrade the *pom.xml* and *MANIFEST.MF* of all the repositories.
@@ -29,4 +29,11 @@ The resulted folders and files have to be copied to the *updatesite/latest* fold
Tag the current point of the history with the release number previously given (X.Y.0). Optionally upgrade the [exported files](#3-export-the-updated-feature) as a zip.
+# Create a new .jar file as release
+In the folder *plugins/de.fraunhofer.ipa.ros.parent* execute the command:
+```
+mvn package
+```
+
+The generated .jar file will be automatically generated under *plugins/de.fraunhofer.ipa.ros.plugin/target/de.fraunhofer.ipa.ros.plugin-X.Y.Z-SNAPSHOT.jar*.
diff --git a/docu/RosModelDescription.md b/docu/RosModelDescription.md
new file mode 100644
index 000000000..c4eb89ddd
--- /dev/null
+++ b/docu/RosModelDescription.md
@@ -0,0 +1,202 @@
+# HOW TO DESCRIBE ROS NODES USING THE LANGUAGE
+
+
+
+Component models have two types of extensions, either .ros1 for ROS version 1 packages and .ros2 for ROS 2 packages. In both cases the language allows to describea pockage that contains ros nodes and their interfaces.
+To create a new model, you can easily just create a new file with the correct extension. For example my_node.ros2.
+
+## ROS (1)
+
+In ros1 the grammar is as follows:
+```
+my_awesome_pkg: #Name of the package
+ **fromGitRepo: ** "http://github.com/MyAccount/RepoName:BranchName" # Optional, Git reopsitory path that contains the source code
+ **artifacts:**
+ awesome: # Name of the artifact (as it is named in the CMakeLists)
+ **node:** awesome_node # Name of the node
+ **publishers:** # (Optional) List of publishers
+ awesome_pub:
+ **type:** "std_msgs/msg/Bool"
+ **subscribers:** # (Optional) List of subscribers
+ awesome_sub:
+ **type:** "std_msgs/msg/Bool"
+ **serviceclients:** # (Optional) List of service clients
+ awesome_client:
+ **type:** "std_srvs/srv/Empty"
+ **serviceservers:** # (Optional) List of service servers
+ awesome_server:
+ **type:** "std_srvs/srv/Empty"
+ **actionclients:** # (Optional) List of action clients
+ awesome_action:
+ **type:** "control_msgs/action/JointTrajectory"
+ **actionservers:** # (Optional) List of action servers
+ awesome_action:
+ **type:** "control_msgs/action/JointTrajectory"
+ **parameters:** # (Optional) List of parameters
+ awesome_param:
+ **type:** String
+ **default:** "Hello"
+```
+
+
+The format is based the YAML file format. All the words marked in the template with '**' are keywords that compose the model, they can't be modified.
+
+
+See the following model exmaple for the known teleop ROS package:
+
+```
+teleop:
+ artifacts:
+ teleop_twist_joy_node:
+ node: teleop_twist_joy_node
+ publishers:
+ cmd_vel:
+ type: "geometry_msgs/msg/Twist"
+ subscribers:
+ joy:
+ type:"sensor_msgs/msg/Joy"
+```
+
+## ROS 2
+
+The ros2 grammar is as follows:
+```
+my_awesome_pkg:
+ **fromGitRepo: ** "http://github.com/MyAccount/RepoName:BranchName"
+ **artifacts:**
+ awesome:
+ **node:** awesome_node
+ **publishers:**
+ awesome_pub:
+ **type:** "std_msgs/msg/Bool"
+ **qos:**
+ **depth:** 10
+ **durability:** volatile
+ **history:** keep_all
+ **profile:** default_qos
+ **reliability:** best_effort
+ **subscribers:**
+ awesome_sub:
+ **type:** "std_msgs/msg/Bool"
+ **qos:**
+ **depth:** 10
+ **durability:** transient_local
+ **history:** keep_last
+ **profile:** sensor_qos
+ **reliability:** reliable
+ **serviceclients:**
+ awesome_client:
+ **type:** "std_srvs/srv/Empty"
+ **qos:**
+ **depth:** 10
+ **durability:** volatile
+ **history:** keep_all
+ **profile:** services_qos
+ **reliability:** best_effort
+ **serviceservers:**
+ awesome_server:
+ **type:** "std_srvs/srv/Empty"
+ **qos:**
+ **depth:** 10
+ **durability:** volatile
+ **history:** keep_all
+ **profile:** services_qos
+ **reliability:** best_effort
+ **actionclients:**
+ awesome_action:
+ **type:** "control_msgs/action/JointTrajectory"
+ **qos:**
+ **depth:** 10
+ **durability:** volatile
+ **history:** keep_all
+ **profile:** default_qos
+ **reliability:** best_effort
+ **actionservers:**
+ awesome_action:
+ **type:** "control_msgs/action/JointTrajectory"
+ **qos:**
+ **depth:** 10
+ **durability:** volatile
+ **history:** keep_all
+ **profile:** default_qos
+ **reliability:** best_effort
+ **parameters:**
+ awesome_param:
+ **type:** String
+ **default:** "Hello"
+ **qos:**
+ **depth:** 10
+ **durability:** volatile
+ **history:** keep_all
+ **profile:** parameter_qos
+ **reliability:** best_effort
+```
+
+The only remarkable difference with the ROS 1 model is that the quality of service can be defined for all the different interfaces. The quality of service atrributes are optional and they allow the following options:
+
+- depth : it must be an integer.
+- durability: volatile / transient_local
+- history: keep_all / keep_last
+- profile: default_qos / sensor_qos / services_qos/ parameter_qos
+- reliability: best_effort / reliable
+
+The type of supported parameters are:
+- Boolean
+- Double
+- String
+- Integer
+- Base64
+- List [Type, Type]
+- Array [Type]
+- Struct [Name Type, Name Type]
+
+For more details please check the following [examples](ParametersAPI.md).
+
+See the following example for the [arucos_ros](https://github.com/pal-robotics/aruco_ros) driver:
+
+```
+aruco_ros:
+ fromGitRepo: "https://github.com/pal-robotics/aruco_ros.git:humble-devel"
+ artifacts:
+ marker_publisher:
+ node: marker_publisher
+ subscribers:
+ image_raw:
+ type: "sensor_msgs/msg/Image"
+ publishers:
+ debug:
+ type: "sensor_msgs/msg/Image"
+ markers:
+ type: "aruco_msgs/msg/MarkerArray"
+ markers_list:
+ type: "std_msgs/msg/UInt32MultiArray"
+ result:
+ type: "sensor_msgs/msg/Image"
+ parameters:
+ camera_frame:
+ type: String
+ image_is_rectified:
+ type: Boolean
+ marker_size:
+ type: Double
+ reference_frame:
+ type: String
+ raw_image_topic:
+ type: String
+ use_camera_info:
+ type: Boolean
+ use_sim_time:
+ type: Boolean
+ camera_info_topic:
+ type: String
+```
+
+## Textual model editor
+
+The textual editor contains checker embedded, for example:
+
+![alt text](images/RosModelEmbededChecker.gif)
+
+It incorporates also the auto-complete function. This is available by pressing **Ctrl** + the space bar:
+
+![alt text](images/RosModelAutocomplete.gif)
diff --git a/docu/RosSystemModelDescription.md b/docu/RosSystemModelDescription.md
new file mode 100644
index 000000000..932b34f80
--- /dev/null
+++ b/docu/RosSystemModelDescription.md
@@ -0,0 +1,45 @@
+# HOW TO DESCRIBE ROS SYSTEMS USING THE LANGUAGE
+
+In our case we consider a system to be a combination of nodes running at the same time. Basically we use the typical component-based system concept, where each ROS node could be considered a component. Therefore the .rossystem file allows to describe a series of nodes and the connections that are created between them using topics, services or actions. It also allows to give values to the parameters.
+
+The structure of the system description is as shown in the following diagram:
+
+![alt text](images/system_class_diagram.jpg)
+
+
+The format of a system is as follows:
+```
+my_awesome_system:
+ processes:
+ process1:
+ nodes: [ node1 , node2 ]
+ threads: 2
+ nodes:
+ node1:
+ from: "my_awesome_pkg.awesome_node_provider" #From .ros2 file
+ interfaces:
+ - awesome_pub: pub-> "awesome::awesome_pub" # From .ros2 file
+ parameters:
+ - ParamName: "awesome::awesome_param"
+ value: "Label"
+ node2:
+ from: "my_awesome_pkg.awesome_node_consumer" #From .ros2 file
+ interfaces:
+ - awesome_sub: sub-> "awesome::awesome_sub"
+ connections:
+ -[awesome_pub, awesome_sub] # From line 10 and 17
+```
+
+Below we analyze each part that makes up the system and how it is formed:
+
+- (Optional) Processes: describes all system processes. Each process is determined by a name (process1 in the example), a set of nodes given as a list and the number of threads. The nodes must be defined within the system nodes (in the example they are lines 7 and 14).
+
+- Nodes: describes all nodes in the system. Nodes are described as a reference to an existing package (and described in a .ros2 file) and has the following attributes:
+ - name: A name which must be unique in the file (in the example node1).
+ - from: reference to the instantiated node description. It is given by the name of the package that contains it and the name of the original node.
+ - interfaces: list of all the interfaces of the node. Here it is not mandatory to list of the interfaces (again) as they are already on the .ros2 file. Only the renamed interfaces must be added, as well as, interfaces that will form a connection with other components. A referenced interface is given by: **NewName: Type -> ref_artifact_name::ref_interface_name** where `ref_artifact_name` and `ref_artifact_name` come from the ros2 file. And the Type can be pub, sub, sc, ss, ac, or as.
+ - parameters: it is used to pass a value to a parameter. Every parameter shall have a name (my_param) in the example, and the reference to an existing parameter, given by 'artifact_name::param_name' frpm a .ros2 file. Then under value, a new value can be given to the parameter.
+
+- (Optional) Connections: describe the connections between the nodes. They are given by `[name_of_the_output, name_of_the_input]` the outputs and inputs musst be previously created, they musst have the same communication pattern (topic, service or action) and the same type of communication object (for example std_msgs/String). Otherwise, the validator will give an error.
+
+The Editor of the models contains validators and the auto-complete function, which can be called with the combination of the keys `Ctrl` and space bar.
diff --git a/docu/images/10.gif b/docu/images/10.gif
index 153d529aa..f281b5583 100644
Binary files a/docu/images/10.gif and b/docu/images/10.gif differ
diff --git a/docu/images/11.gif b/docu/images/11.gif
index 343946307..f5a2e5b4a 100644
Binary files a/docu/images/11.gif and b/docu/images/11.gif differ
diff --git a/docu/images/12.gif b/docu/images/12.gif
index ff1c08397..595585f93 100644
Binary files a/docu/images/12.gif and b/docu/images/12.gif differ
diff --git a/docu/images/8.gif b/docu/images/8.gif
index f03977b5b..0a34221d5 100644
Binary files a/docu/images/8.gif and b/docu/images/8.gif differ
diff --git a/docu/images/9.gif b/docu/images/9.gif
index 60045c57f..f1cc0ba60 100644
Binary files a/docu/images/9.gif and b/docu/images/9.gif differ
diff --git a/docu/images/ROSSeRoNet_SeRoNetComponent.gif b/docu/images/ROSSeRoNet_SeRoNetComponent.gif
index cc8ea17b6..4d8a0310e 100644
Binary files a/docu/images/ROSSeRoNet_SeRoNetComponent.gif and b/docu/images/ROSSeRoNet_SeRoNetComponent.gif differ
diff --git a/docu/images/ROSSeRoNet_cob_lightComponentToSeRoNet.gif b/docu/images/ROSSeRoNet_cob_lightComponentToSeRoNet.gif
index cd00373ad..23933b91a 100644
Binary files a/docu/images/ROSSeRoNet_cob_lightComponentToSeRoNet.gif and b/docu/images/ROSSeRoNet_cob_lightComponentToSeRoNet.gif differ
diff --git a/docu/images/ROSSeRoNet_cob_light_representation.gif b/docu/images/ROSSeRoNet_cob_light_representation.gif
index 097564423..5227406d2 100644
Binary files a/docu/images/ROSSeRoNet_cob_light_representation.gif and b/docu/images/ROSSeRoNet_cob_light_representation.gif differ
diff --git a/docu/images/ROSSeRoNet_generatedFilesSeRoNet.gif b/docu/images/ROSSeRoNet_generatedFilesSeRoNet.gif
index bd0e3fde6..1e021e735 100644
Binary files a/docu/images/ROSSeRoNet_generatedFilesSeRoNet.gif and b/docu/images/ROSSeRoNet_generatedFilesSeRoNet.gif differ
diff --git a/docu/images/ROSSeRoNet_import_cob_light.gif b/docu/images/ROSSeRoNet_import_cob_light.gif
index 6a1838c8a..2cfe792c0 100644
Binary files a/docu/images/ROSSeRoNet_import_cob_light.gif and b/docu/images/ROSSeRoNet_import_cob_light.gif differ
diff --git a/docu/images/RosModelAutocomplete.gif b/docu/images/RosModelAutocomplete.gif
new file mode 100644
index 000000000..e5c067094
--- /dev/null
+++ b/docu/images/RosModelAutocomplete.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d3159c60cfc8c930ce157e91ca73ab8e55aa75cd523078c33539ca3a53796fcf
+size 495271
diff --git a/docu/images/RosModelEmbededChecker.gif b/docu/images/RosModelEmbededChecker.gif
new file mode 100644
index 000000000..e6a8ee721
--- /dev/null
+++ b/docu/images/RosModelEmbededChecker.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2c5d36d6137f225021ad62900a15cb2273a22b84c07f6d1d8b15b2b9fd687f5a
+size 453491
diff --git a/docu/images/RosSystem_entity.gif b/docu/images/RosSystem_entity.gif
index dbc7ec1b3..f436fdef8 100644
Binary files a/docu/images/RosSystem_entity.gif and b/docu/images/RosSystem_entity.gif differ
diff --git a/docu/images/Rossystem_withconnections.gif b/docu/images/Rossystem_withconnections.gif
index 201556040..833cb20cb 100644
Binary files a/docu/images/Rossystem_withconnections.gif and b/docu/images/Rossystem_withconnections.gif differ
diff --git a/docu/images/add_new_component_name.gif b/docu/images/add_new_component_name.gif
index bc3599428..880a67184 100644
Binary files a/docu/images/add_new_component_name.gif and b/docu/images/add_new_component_name.gif differ
diff --git a/docu/images/add_new_system.gif b/docu/images/add_new_system.gif
index d145ed73d..f1e2eba22 100644
Binary files a/docu/images/add_new_system.gif and b/docu/images/add_new_system.gif differ
diff --git a/docu/images/cob_light_obtects_to_SeRoNet.gif b/docu/images/cob_light_obtects_to_SeRoNet.gif
index a621ae826..93d720b38 100644
Binary files a/docu/images/cob_light_obtects_to_SeRoNet.gif and b/docu/images/cob_light_obtects_to_SeRoNet.gif differ
diff --git a/docu/images/cob_light_obtects_to_SeRoNet2.gif b/docu/images/cob_light_obtects_to_SeRoNet2.gif
index 03f28618d..8bcb881d5 100644
Binary files a/docu/images/cob_light_obtects_to_SeRoNet2.gif and b/docu/images/cob_light_obtects_to_SeRoNet2.gif differ
diff --git a/docu/images/cob_light_obtects_to_SeRoNet3.gif b/docu/images/cob_light_obtects_to_SeRoNet3.gif
index 5b4e2714a..979f8f023 100644
Binary files a/docu/images/cob_light_obtects_to_SeRoNet3.gif and b/docu/images/cob_light_obtects_to_SeRoNet3.gif differ
diff --git a/docu/images/composition_subsystem.gif b/docu/images/composition_subsystem.gif
index cad42d837..637aa9ac6 100644
Binary files a/docu/images/composition_subsystem.gif and b/docu/images/composition_subsystem.gif differ
diff --git a/docu/images/diagnostics_names.gif b/docu/images/diagnostics_names.gif
index d52e6cf5d..42fc53ea2 100644
Binary files a/docu/images/diagnostics_names.gif and b/docu/images/diagnostics_names.gif differ
diff --git a/docu/images/diagnostics_system.gif b/docu/images/diagnostics_system.gif
index ab26b9dfb..4a0ae27e4 100644
Binary files a/docu/images/diagnostics_system.gif and b/docu/images/diagnostics_system.gif differ
diff --git a/docu/images/diagnostics_system_complete.gif b/docu/images/diagnostics_system_complete.gif
index 962dbaaa2..26ef3764c 100644
Binary files a/docu/images/diagnostics_system_complete.gif and b/docu/images/diagnostics_system_complete.gif differ
diff --git a/docu/images/docker-compose.png b/docu/images/docker-compose.png
new file mode 100644
index 000000000..6f8e2ea0e
Binary files /dev/null and b/docu/images/docker-compose.png differ
diff --git a/docu/images/domainModelsError.gif b/docu/images/domainModelsError.gif
index ff1c08397..595585f93 100644
Binary files a/docu/images/domainModelsError.gif and b/docu/images/domainModelsError.gif differ
diff --git a/docu/images/eclipse_installer1.png b/docu/images/eclipse_installer1.png
index 3a91aed89..11df7d306 100644
Binary files a/docu/images/eclipse_installer1.png and b/docu/images/eclipse_installer1.png differ
diff --git a/docu/images/eclipse_installer3.png b/docu/images/eclipse_installer3.png
new file mode 100644
index 000000000..dfdc847b2
Binary files /dev/null and b/docu/images/eclipse_installer3.png differ
diff --git a/docu/images/github_secrets.png b/docu/images/github_secrets.png
new file mode 100644
index 000000000..b3b15f14b
Binary files /dev/null and b/docu/images/github_secrets.png differ
diff --git a/docu/images/github_workflows_folder.png b/docu/images/github_workflows_folder.png
new file mode 100644
index 000000000..72c07c894
Binary files /dev/null and b/docu/images/github_workflows_folder.png differ
diff --git a/docu/images/install_eclipse_jdk_version.png b/docu/images/install_eclipse_jdk_version.png
new file mode 100644
index 000000000..62331b5d3
Binary files /dev/null and b/docu/images/install_eclipse_jdk_version.png differ
diff --git a/docu/images/install_eclipse_modeling.png b/docu/images/install_eclipse_modeling.png
new file mode 100644
index 000000000..b7e3217ef
Binary files /dev/null and b/docu/images/install_eclipse_modeling.png differ
diff --git a/docu/images/install_updatesite.png b/docu/images/install_updatesite.png
index dd78fad6a..6425027ef 100644
Binary files a/docu/images/install_updatesite.png and b/docu/images/install_updatesite.png differ
diff --git a/docu/images/jackal_deployment_gen.png b/docu/images/jackal_deployment_gen.png
new file mode 100644
index 000000000..94bd39fea
Binary files /dev/null and b/docu/images/jackal_deployment_gen.png differ
diff --git a/docu/images/new_component1.gif b/docu/images/new_component1.gif
index c784a86b4..9caf659b8 100644
Binary files a/docu/images/new_component1.gif and b/docu/images/new_component1.gif differ
diff --git a/docu/images/parameter_set.gif b/docu/images/parameter_set.gif
index a5a60b68d..65d2183d1 100644
Binary files a/docu/images/parameter_set.gif and b/docu/images/parameter_set.gif differ
diff --git a/docu/images/pub_sub_ros2_deployment_gen.png b/docu/images/pub_sub_ros2_deployment_gen.png
new file mode 100644
index 000000000..b9978c7d6
Binary files /dev/null and b/docu/images/pub_sub_ros2_deployment_gen.png differ
diff --git a/docu/images/pubsub_tutorial1.gif b/docu/images/pubsub_tutorial1.gif
new file mode 100644
index 000000000..b46adad4d
--- /dev/null
+++ b/docu/images/pubsub_tutorial1.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:baba89f6876ab6a8e09c2ceb9b75eafe12110fd537deb38842b85eee85f8be8d
+size 537126
diff --git a/docu/images/pubsub_tutorial2.gif b/docu/images/pubsub_tutorial2.gif
new file mode 100644
index 000000000..56c8fd21e
--- /dev/null
+++ b/docu/images/pubsub_tutorial2.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e89d2ec10f56b096f0a1f24a82d59c48eff1f1da672f0ac230b47b3977203a5b
+size 504312
diff --git a/docu/images/pubsub_tutorial3.gif b/docu/images/pubsub_tutorial3.gif
new file mode 100644
index 000000000..c6bfa59f5
--- /dev/null
+++ b/docu/images/pubsub_tutorial3.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0e00b2b76c2c06fa9df18ff206177151c03bcc4f2bc77ed6552629fb532ad4f7
+size 839426
diff --git a/docu/images/pubsub_tutorial4.gif b/docu/images/pubsub_tutorial4.gif
new file mode 100644
index 000000000..db2879130
--- /dev/null
+++ b/docu/images/pubsub_tutorial4.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:897edd28d009b1a3550af1a72405c8bd8dd1f4218bac63d762a450fd6e9f3a67
+size 1561771
diff --git a/docu/images/pubsub_tutorial5.gif b/docu/images/pubsub_tutorial5.gif
new file mode 100644
index 000000000..0b712cfa7
--- /dev/null
+++ b/docu/images/pubsub_tutorial5.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ea7842520157ce0b5e84d5ae9a3b10cbd9dff51a8abb2f1358de5a281ee94a83
+size 1126282
diff --git a/docu/images/pubsub_tutorial6.gif b/docu/images/pubsub_tutorial6.gif
new file mode 100644
index 000000000..4a908beeb
--- /dev/null
+++ b/docu/images/pubsub_tutorial6.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f6c1c00d21c086638c295d9cbe2ce1f5bd01e0635915fafe98819c92049976d1
+size 998262
diff --git a/docu/images/pubsub_tutorial7.gif b/docu/images/pubsub_tutorial7.gif
new file mode 100644
index 000000000..b5e9259cf
--- /dev/null
+++ b/docu/images/pubsub_tutorial7.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d8cd4346ce103f2047bfc41ff2753991c1bc9d9ca15d64114f040ec14d4b7028
+size 670048
diff --git a/docu/images/rossystem_deployment_repo.png b/docu/images/rossystem_deployment_repo.png
new file mode 100644
index 000000000..e38dc6f45
Binary files /dev/null and b/docu/images/rossystem_deployment_repo.png differ
diff --git a/docu/images/rostooling_deployment.gif b/docu/images/rostooling_deployment.gif
new file mode 100644
index 000000000..e546beb70
--- /dev/null
+++ b/docu/images/rostooling_deployment.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8236bc391db8ff256c99e2e571f103b8129e68c0dadce4e31eb62e25eac86739
+size 973247
diff --git a/docu/images/rostooling_deployment_jackal.gif b/docu/images/rostooling_deployment_jackal.gif
new file mode 100644
index 000000000..1a585a765
--- /dev/null
+++ b/docu/images/rostooling_deployment_jackal.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f5ed35fb490d91ef35fc74460de4c7c40657dbe20b0a48c664c6cd4d903e3a7a
+size 2215403
diff --git a/docu/images/system_class_diagram.jpg b/docu/images/system_class_diagram.jpg
new file mode 100644
index 000000000..678df5cbd
Binary files /dev/null and b/docu/images/system_class_diagram.jpg differ
diff --git a/docu/images/turtlesim_tutorial1.gif b/docu/images/turtlesim_tutorial1.gif
new file mode 100644
index 000000000..57f790aa9
--- /dev/null
+++ b/docu/images/turtlesim_tutorial1.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f2d484059a8e75bead8f499bf33f6126d1384cae26c3bcd249b0e7a2d1240db8
+size 852660
diff --git a/docu/images/turtlesim_tutorial2.gif b/docu/images/turtlesim_tutorial2.gif
new file mode 100644
index 000000000..89a95dfc5
--- /dev/null
+++ b/docu/images/turtlesim_tutorial2.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:060594b69cff80ad462e4a498dca2ec4c0b72289f36eed56a3e7885f0e036f90
+size 1117813
diff --git a/docu/images/turtlesim_tutorial3.gif b/docu/images/turtlesim_tutorial3.gif
new file mode 100644
index 000000000..0ceb06c44
--- /dev/null
+++ b/docu/images/turtlesim_tutorial3.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2a6f04cc2ba5559167e8e7d5bf5a9d2fab5286a85e12992a1ca6f043f800fa02
+size 834328
diff --git a/docu/images/turtlesim_tutorial4.gif b/docu/images/turtlesim_tutorial4.gif
new file mode 100644
index 000000000..a13b5c53b
--- /dev/null
+++ b/docu/images/turtlesim_tutorial4.gif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5e1a3694bd81c33326476cfee16733a0c80471d4cdc6df12cddd865400195f1a
+size 971306
diff --git a/docu/images/turtlesim_tutorial_refproject.png b/docu/images/turtlesim_tutorial_refproject.png
new file mode 100644
index 000000000..94df6c09c
Binary files /dev/null and b/docu/images/turtlesim_tutorial_refproject.png differ
diff --git a/docu/introspection.rosinstall b/docu/introspection.rosinstall
deleted file mode 100644
index 6a559db02..000000000
--- a/docu/introspection.rosinstall
+++ /dev/null
@@ -1,8 +0,0 @@
-- git:
- local-name: ros_model_parser
- uri: https://github.com/ipa-nhg/ros_model_parser.git
- version: fix-value
-- git:
- local-name: rosgraph_monitor
- uri: https://github.com/ipa-nhg/rosgraph_monitor.git
- version: rossystem_snapshot
diff --git a/docu/CompareSpec.md b/docu/old/CompareSpec.md
similarity index 72%
rename from docu/CompareSpec.md
rename to docu/old/CompareSpec.md
index 3c3c08c70..40953c9ee 100644
--- a/docu/CompareSpec.md
+++ b/docu/old/CompareSpec.md
@@ -4,14 +4,14 @@ If you want to check that the model of your node is following a concrete specifi
Press the button of ROS model checker:
-![alt text](images/compare_icon.png)
+![alt text](../images/compare_icon.png)
-Select as input your model file and as specification the model that defines the standard you want to follow (some specifications are available under **de.fraunhofer.ipa.ros.communication.objects/BasicSpecs**).
+Select as input your model file and as specification the model that defines the standard you want to follow (some specifications are available under **de.fraunhofer.ipa.ros.communication.objects/BasicSpecs**).
-![alt text](images/compare_select.png)
+![alt text](../images/compare_select.png)
-To use this feature you have to locate your model file in your eclipse workspace by importing the project that contains it.
+To use this feature you have to locate your model file in your eclipse workspace by importing the project that contains it.
By pressing *Finish* a dialog will give you a summary of your analysis:
-![alt text](images/compare_result.png)
+![alt text](../images/compare_result.png)
diff --git a/docu/ModelCombine.md b/docu/old/ModelCombine.md
similarity index 96%
rename from docu/ModelCombine.md
rename to docu/old/ModelCombine.md
index 7fcdde4dc..c03046404 100644
--- a/docu/ModelCombine.md
+++ b/docu/old/ModelCombine.md
@@ -6,11 +6,11 @@ This feature allows the merge of two different ROS system models. To combine t
-![CombineModels](images/CombineModels_1.png)
+![CombineModels](../images/CombineModels_1.png)
A pop-up menu will ask you for the two models to combine (have to be on imported project of your workspace) and the path where to save the resulted file (that will be called *result.rossystem*. Finally the user can check the box "Combine to the minimal model (restrictive strategy)" to switch the strategy.
-![CombineModels](images/CombineModels_2.png)
+![CombineModels](../images/CombineModels_2.png)
@@ -23,7 +23,7 @@ The idea if the first strategy is to sum components and interfaces into a single
```
RosSystem { Name 'cob4-25'
- RosComponents (
+ RosComponents (
ComponentInterface { name '/base_laser_front/driver'},
ComponentInterface { name '/torso_cam3d_down/realsense2_camera'},
ComponentInterface { name '/arm_right/driver'},
@@ -45,4 +45,4 @@ If I combine this model with the runtime one I get as result a new system with o
Other use of this feature is the composition of system files got from the auto models extractors that we offer ([static analysis](https://github.com/ipa320/ros-model/blob/master/docu/NewRosModel.md) and [runtime introspection](https://github.com/ipa-led/ros_graph_parser)).
-While the static analyzer of code extracts all the information for each node, the amount of extracted data is quite limited. Conversely, the runtime introspection can't find some static information of the nodes (like the ROS package that contains it and the dependencies) but this method is able to find almost all the interfaces running on the system. With the model combination and using the static analysis extraction as the first model to combine , you can make a good use of the benefits of both methods results.
\ No newline at end of file
+While the static analyzer of code extracts all the information for each node, the amount of extracted data is quite limited. Conversely, the runtime introspection can't find some static information of the nodes (like the ROS package that contains it and the dependencies) but this method is able to find almost all the interfaces running on the system. With the model combination and using the static analysis extraction as the first model to combine , you can make a good use of the benefits of both methods results.
diff --git a/docu/NewComponent.md b/docu/old/NewComponent.md
similarity index 90%
rename from docu/NewComponent.md
rename to docu/old/NewComponent.md
index 156eddf7b..a3e9bac65 100644
--- a/docu/NewComponent.md
+++ b/docu/old/NewComponent.md
@@ -4,7 +4,7 @@ Please be sure that the tool is installed and your workspace setup, see the [ins
To create a new component you have to press the button "Add new Component from Ros node"
-![alt text](images/add_new_component.png)
+![alt text](../images/add_new_component.png)
A dialog will be open and ask you to select a folder to contain your new model (we recommend the "components" one) and to give a name to your component.
@@ -12,5 +12,4 @@ The next menu will ask you to give to your component a name and a namespace (opt
Your component will be automatically created, in case you want to modify the default remaps of the interfaces you can edit the file using the EMF editor
-![](images/modify_component.png)
-
+![](../images/modify_component.png)
diff --git a/docu/NewProject.md b/docu/old/NewProject.md
similarity index 84%
rename from docu/NewProject.md
rename to docu/old/NewProject.md
index c157adaec..c61ff883d 100644
--- a/docu/NewProject.md
+++ b/docu/old/NewProject.md
@@ -4,16 +4,16 @@ Please be sure that the tool is installed and your workspace setup, see the [ins
To create a new project you have to press the button "Add new Ros Project"
-![alt text](images/new_project.png)
+![alt text](../images/new_project.png)
-A pop-up dialog will ask you to define the name of the project. Once you press finish a new folder will be created with a collection of common messages and services and a predefined ROS model. To describe easily the model you can use a Sirius representation.
-
+![](../images/new_artifact_representation.png)-->
-A new window will be opened where you can choose and add elements by selecting them on the side toolbar. Using the properties view you can modify and describe the properties of each element.
+A new window will be opened where you can choose and add elements by selecting them on the side toolbar. Using the properties view you can modify and describe the properties of each element.
-![](images/node_representation.png)
+![](../images/node_representation.png)
Once you finish you can open the file under the folder "rosnodes" that describes your model and check that all the information is correct. This editor has an autocomplete function (by pressing Ctrl+Space) and will report any error made by editing.
diff --git a/docu/NewSystem.md b/docu/old/NewSystem.md
similarity index 66%
rename from docu/NewSystem.md
rename to docu/old/NewSystem.md
index 8de6dbede..053ea4547 100644
--- a/docu/NewSystem.md
+++ b/docu/old/NewSystem.md
@@ -10,21 +10,21 @@ scan_system_demo
To create a new system you have to press the button "Add new Ros System"
-![alt text](images/add_new_system.gif)
+![alt text](../images/add_new_system.gif)
A dialog will be open and ask you to select a folder to contain your new model, you can just select the "scan_system_demo" folder. Give a name to your new system and press "Next > ", the new dialog window will ask you for a Ros Components, this step is not required, you can just press "Finish".
To modify easily the model you can use a Sirius representation. Open the file representation.aird with the Aird editor and in the menu representations choose the "RosSystem" option and press "New.." then choose the Ros System entity of your "*.rossystem" model and press finish.
-![alt text](images/RosSystem_entity.gif)
+![alt text](../images/RosSystem_entity.gif)
A new window will appear where you can choose and add elements by selecting them on the side toolbar and the properties view. With the toolbar you can add a new component. Press the option "New component", a window will be opened and ask for a new name for you component:
-![alt text](images/add_new_component_name.gif)
+![alt text](../images/add_new_component_name.gif)
Give a name and (optionally) a namespace to a new component, for example:
-![alt text](images/new_component1.gif)
+![alt text](../images/new_component1.gif)
Press the button "Browse.." and select the model "sick_s300.ros" of the rosnode folder. Repeat the previous process for the creation of other tree components:
@@ -42,13 +42,13 @@ RosModel: rosnodes/sick_s300.ros
```
Name: scan_unifier
-NameSpace:
+NameSpace:
RosModel: rosnodes/scan_unifier.ros
```
Now that the components are created you can define the desired connections between the components using the tool "Topic Connection", the only imposed rule to create connections is that the information object (message or service type) is the same on both sides. For our example the natural connection to be created are the shown on the following figure:
-![alt text](images/rossystem_withconnections.png)
+![alt text](../images/rossystem_withconnections.png)
If the modifications are correct and after save the changes, two files will be automatically generated 1) a componentinterface file of your full system in the folder "components" and 2) a launch file to start the selected ROS nodes in the correct predefined Namespace (in a new folder "src-gen").
@@ -58,24 +58,24 @@ The resulted launch file contains the defined namespaces and remap the topics of
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
```
We can also try removing the namespace of the diagnostics topics for the scanners. Choose the different diagnostics publisher and modify using the properties view its names to for example:
-![alt text](images/diagnostics_names.gif)
+![alt text](../images/diagnostics_names.gif)
These changes should change the roslaunch file to:
@@ -83,21 +83,21 @@ These changes should change the roslaunch file to:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
```
@@ -106,24 +106,24 @@ The next part of this tutorial shows the creation of a new System by the composi
To create a new system you have to press the button "Add new Ros System" and a dialog will be open and ask you to select a folder to contain your new model, you can just select the "scan_system_demo" folder. Give a name to your new system and press "Next > ", the new dialog window will ask you for a Ros Components press "Browse.." and select the componentinterface autogenerated by the previous example (i.e. scan_system_demo/components/scan_composition.componentinterface).
-![alt text](images/composition_subsystem.gif)
+![alt text](../images/composition_subsystem.gif)
To modify easily the model you can use a Sirius representation. Open the file representation.aird with the Aird editor and in the menu representations choose the "RosSystem" option and press "New.." then choose the Ros System entity of your "*.rossystem" model and press finish.
-A new window will appear where you can choose and add elements by selecting them on the side toolbar and the properties view.
+A new window will appear where you can choose and add elements by selecting them on the side toolbar and the properties view.
-![alt text](images/diagnostics_system.gif)
+![alt text](../images/diagnostics_system.gif)
The new system already contains the previous system model as a single block and can be composed by adding new components, for example you can create a new component with the following configuration:
```
Name: diagnostics
-NameSpace:
+NameSpace:
RosModel: rosnodes/diagnostic_aggregator.ros
```
And join the diagnostics interfaces with a connection. The resulted launch file will include the previous generated launch file and the new imported node.
-![alt text](images/diagnostics_system_complete.gif)
+![alt text](../images/diagnostics_system_complete.gif)
```
diff --git a/docu/Parameters.md b/docu/old/Parameters.md
similarity index 92%
rename from docu/Parameters.md
rename to docu/old/Parameters.md
index 96583a26a..c093553ad 100644
--- a/docu/Parameters.md
+++ b/docu/old/Parameters.md
@@ -3,19 +3,19 @@
The types of parameters supported by the ROS tooling are the following:
* Boolean (true or false)
-* Integer
+* Integer
* Double
* String
* Base64
-* List
+* List
* Array
* Struc
-and their description is allowed at ROS and ROSSystem model level.
+and their description is allowed at ROS and ROSSystem model level.
The definition of a parameter at ROS model level means that the ROS original node get or set a new parameter, this case is partially supported by the graphical editor, which allows only the definition of parameters of primitive types: String, Double, Integer and Boolean without a default value.
-![alt text](images/parameter_set.gif)
+![alt text](../images/parameter_set.gif)
For the complete definition of parameters the user has to open the ROS model editor, where the language format is the following:
@@ -30,7 +30,7 @@ PackageSet {
CatkinPackage test_parameters{
Artifact test_parameters {
Node { name test
- Parameters {
+ Parameters {
Parameter { name string_test type String },
Parameter { name bool_tets type Boolean },
Parameter { name array_tets type Array {type String}},
@@ -38,7 +38,7 @@ PackageSet {
Parameter { name double_test type Double},
Parameter {name int_test type Integer},
Parameter {name list_test type List {Integer,Integer,String}},
- Parameter {name struc_test type Struc
+ Parameter {name struc_test type Struc
{first_element Integer ,
second_element List { Integer, String},
third_element String ,
@@ -53,12 +53,12 @@ These parameters can be re-set at Rossystem level (that means for ROS developers
Continuing the previous example, the parameters redefinition looks:
```
-RosSystem { Name 'test_parameters_system'
- RosComponents (
+RosSystem { Name 'test_parameters_system'
+ RosComponents (
ComponentInterface {
name test_param_component
RosParameters {
- RosParameter {
+ RosParameter {
RefParameter "test_parameters.test_parameters.test.string_test" value test},
RosParameter {
RefParameter "test_parameters.test_parameters.test.bool_tets" value true },
@@ -73,9 +73,9 @@ RosSystem { Name 'test_parameters_system'
RosParameter {
RefParameter "test_parameters.test_parameters.test.struc_test" value {
{ second_element {value{1,dsad}}},
- { last_element { value {
+ { last_element { value {
{ hello {value 3} },
- { what {value sd} }
+ { what {value sd} }
}}}}}}})
}
```
diff --git a/docu/ROSSeRoNet.md b/docu/old/ROSSeRoNet.md
similarity index 89%
rename from docu/ROSSeRoNet.md
rename to docu/old/ROSSeRoNet.md
index ce7c586a5..bb4e546bc 100644
--- a/docu/ROSSeRoNet.md
+++ b/docu/old/ROSSeRoNet.md
@@ -28,17 +28,17 @@ Go to Menu Window -> Perspective -> Open Perspective -> Other... -> ROS develope
This example requires the common ROS interfaces, by clicking the button *Import Common ROS Objects* you will get the latest version from GitHub and import them automatically to your workspace, this function button is only available for the ROS developer perspective: menu *Window* => *Perspective* => *Open Perspective* => *ROS developer*.
-![alt text](images/01-ImportCommnObjects.png)
+![alt text](../images/01-ImportCommnObjects.png)
-And you can import now the project to be transformed, for example [cob_light](https://github.com/ipa-nhg/ros-model-examples/tree/master/RosComponents/cob_light) from the ros-model-examples repository (previously cloned).
+And you can import now the project to be transformed, for example [cob_light](https://github.com/ipa-nhg/ros-model-examples/tree/master/RosComponents/cob_light) from the ros-model-examples repository (previously cloned).
-![alt text](images/ROSSeRoNet_import_cob_light.gif)
+![alt text](../images/ROSSeRoNet_import_cob_light.gif)
By openning the representation file you can see the following model visualization:
-![alt text](images/ROSSeRoNet_cob_light_representation.gif)
+![alt text](../images/ROSSeRoNet_cob_light_representation.gif)
-Or you can create a [new project from an empty model](https://github.com/ipa320/ros-model/blob/master/docu/NewProject.md). In case you have an existing ROS package that contains the C++ code of your component we recommend to use the [extractor](https://github.com/ipa320/ros-model/blob/master/docu/NewRosModel.md) instead of start from scratch the model definition.
+Or you can create a [new project from an empty model](https://github.com/ipa320/ros-model/blob/master/docu/NewProject.md). In case you have an existing ROS package that contains the C++ code of your component we recommend to use the [extractor](https://github.com/ipa320/ros-model/blob/master/docu/NewRosModel.md) instead of start from scratch the model definition.
NOTE: all the msgs, srvs or actions used by your node (package dependencies) have to be also described, we made available a model of the most [common ROS interfaces](https://github.com/ipa320/ros-model/tree/master/ROSCommonObjects/de.fraunhofer.ipa.ros.communication.objects/basic_msgs). In case one of your package dependencies is not included in this list you have to create the models usin the following [script](https://github.com/ipa320/ros-model/blob/master/docu/NewCommunicationObjects.md)
@@ -46,21 +46,21 @@ NOTE: all the msgs, srvs or actions used by your node (package dependencies) hav
By default the tooling will automatically autogenerate the corresponding component interface (a generic model of a component) of all the nodes on your ROS project. The autogenerated components are always located under a new folder called *components/*. This model is the bridge from ROS to other frameworks. For the case of SeRoNet the tooling includes a special function that can be activated by a right click on the file an choosing the option *Generate ROS-SeRoNet Mixed Port*.
-![alt text](images/ROSSeRoNet_cob_lightComponentToSeRoNet.gif)
+![alt text](../images/ROSSeRoNet_cob_lightComponentToSeRoNet.gif)
The result of this call is a rospoolinterface file. Start point of the following tutorial: https://wiki.servicerobotik-ulm.de/tutorials:ros:mixed-port-component-ros.
Complementarily and to make easier the relay of interfaces we incorporated an extra help function that automatically relays one of the ROS interfaces. The previous function through its pop-up dialog guides the user to generates not only the rospoolinterface model but also a suggestion of a SeRoNet component with a ROS mixed Port. The resulted files will be generated under the folder *src-gen/SeRoNetComponent*
-![alt text](images/ROSSeRoNet_generatedFilesSeRoNet.gif)
+![alt text](../images/ROSSeRoNet_generatedFilesSeRoNet.gif)
-These two files can be used to create a [new SeRoNet component](https://wiki.servicerobotik-ulm.de/tutorials:develop-your-first-component:start). First the presperctive have to be changed to the "Component Supplier" one. This perspective will add the option to create a new Component Project by giving a name and a localization. The previosly generated SeRoNetComponent files can simply be copied to the model folder of the new project.
+These two files can be used to create a [new SeRoNet component](https://wiki.servicerobotik-ulm.de/tutorials:develop-your-first-component:start). First the presperctive have to be changed to the "Component Supplier" one. This perspective will add the option to create a new Component Project by giving a name and a localization. The previosly generated SeRoNetComponent files can simply be copied to the model folder of the new project.
-![alt text](images/ROSSeRoNet_SeRoNetComponent.gif)
+![alt text](../images/ROSSeRoNet_SeRoNetComponent.gif)
For this example the corresponding SeRoNet component with a ROS Mixed Port (by creating a [new SeRoNet component](https://wiki.servicerobotik-ulm.de/tutorials:develop-your-first-component:start) and including the autogenerated files) will shows:
-![alt text](images/result.png)
+![alt text](../images/result.png)
For further information please check: [Automatic transformation of ROS Components to SeRoNet mixed Ports](https://github.com/seronet-project/SeRoNet-Tooling-ROS-Mixed-Port/tree/master/de.seronet_projekt.ros.componentGateway.generator#automatic-transformation-of-ros-components-to-seronet-mixed-ports)
@@ -71,19 +71,19 @@ For some cases like the cob_light driver, the ROS node definition requires some
This will generate the file services and the file types under the folder *src-gen*.
-![alt text](images/cob_light_obtects_to_SeRoNet.gif)
+![alt text](../images/cob_light_obtects_to_SeRoNet.gif)
-![alt text](images/cob_light_obtects_to_SeRoNet2.gif)
+![alt text](../images/cob_light_obtects_to_SeRoNet2.gif)
-![alt text](images/cob_light_obtects_to_SeRoNet3.gif)
+![alt text](../images/cob_light_obtects_to_SeRoNet3.gif)
-For further information please see: https://github.com/ipa-nhg/SeRoNet-Tooling-ROS-Mixed-Port/tree/M2MCommunicationObjectsReadme/de.seronet_projekt.ros.componentGateway.generator#automatic-transformation-of-communication-objects
+For further information please see: https://github.com/ipa-nhg/SeRoNet-Tooling-ROS-Mixed-Port/tree/M2MCommunicationObjectsReadme/de.seronet_projekt.ros.componentGateway.generator#automatic-transformation-of-communication-objects
These files are the input for a SeRoNet Domain Model. By creating a [new Domain Project](https://wiki.servicerobotik-ulm.de/tutorials:develop-your-first-domain-model:start) you can just copy these two files and the models will be automatically added to the interpreter.
Probably after create the new Domain Models project and add the types and services files you will get an error because some dependencies are missed.
-![alt text](images/domainModelsError.gif)
+![alt text](../images/domainModelsError.gif)
For the most common ROS objects the project dependencies are already available. We suggest to import *always* by default the following projects from the GitHub repositories previously cloned:
@@ -93,4 +93,4 @@ For the most common ROS objects the project dependencies are already available.
Then open the Domain Expert perspective (Go to Menu Window -> Perspective -> Open Perspective -> Other... -> Domain Expert) and for the created Domain Models expert that holds your communcaition object add the import dependencies (Right click on *imports* folder).
-![alt text](images/ImportSolve.png)
+![alt text](../images/ImportSolve.png)
diff --git a/docu/old/deployment.md b/docu/old/deployment.md
new file mode 100644
index 000000000..73ca6e0a0
--- /dev/null
+++ b/docu/old/deployment.md
@@ -0,0 +1,93 @@
+## How to get deployment artifacts
+
+
+### Preparation
+
+Please be sure that the tool is installed and your workspace setup, see the [installation guide](../README.md) for further details.
+
+Import the example project pub_sub_ros2 (from the [ros-model-examples](https://github.com/ipa-nhg/ros-model-examples) repository) to the workbench of your application:
+
+```
+pub_sub_ros2
+```
+
+Import the example project agriculture_demo_sprint2 (from the [ros-model-examples](https://github.com/ipa-nhg/ros-model-examples) repository) to the workbench of your application:
+
+```
+agriculture_demo_sprint2
+```
+
+Install docker and docker-compose
+
+### Get get deployment artifacts
+
+To create deployment artifacts you need to right click "*.rossystem" file.
+
+#### Rossystem without parameters
+In this case, you need to right click "communication.rossystem". Then you need to choose "Deployment Artifacts Generator".
+
+A dialog will be open and ask you to select a ROS Distro. In this case, the rossystem doesn't contain parameters, so you only need to choose a ROS Distro.
+
+This process is as shown blow.
+
+![alt text](../images/rostooling_deployment.gif)
+
+Then deployment artifacts will automatically created, as you can find under "src-gen" folder
+
+![alt text](../images/pub_sub_ros2_deployment_gen.png)
+
+
+#### Rossystem with parameters
+
+In some case, you need to choose device ports based on parameters defined in a rossystem.
+
+For example, if you want to run teleop with a joystick in a docker container, docker need to know which port is the joystick connect to.
+
+In this case, you need to right click "communication.rossystem". Then you need to choose "Deployment Artifacts Generator".
+
+A dialog will be open and ask you to select a ROS Distro. In this case, the rossystem contains parameters, you need to choose the corresponding parameter to the joystick port value.
+
+This process is as shown blow.
+
+![alt text](../images/rostooling_deployment_jackal.gif)
+
+Then deployment artifacts will automatically created.
+
+![alt text](../images/jackal_deployment_gen.png)
+
+### Use github action to generate docker images
+
+Once you get deployment artifacts, you can use git action to build and release docker images automatically.
+
+If you already have a repository in github, you can use it. If not, you need to create a repository. For example, we use ("rossystem-deployment" repository)[https://github.com/ipa-rwu/rossystem-deployment.
+
+You also need a dockerhub account. Once you have dockerhub account, you need to add your Docker ID as a secret to GitHub.
+1. Add your Docker ID as a secret to GitHub. Navigate to your GitHub repository and click Settings > Secrets > New secret.
+2. Create DOCKER_USERNAME and DOCKER_PASSWORD
+
+The result should looks like below.
+
+![alt text](../images/github_secrets.png)
+
+In this repository, you need to create a folder ".github/workflows". Then you need to put a file with suffix "_workflow.yml" from a generated folder to this folder. For example, you can put "communication_foxy_workflow.yml" or "agriculture_robot_sprint3_noetic_workflow.yml" under ".github/workflows" folder, as shown below.
+
+![alt text](../images/github_workflows_folder.png)
+
+
+Then you need to put the generated folder in this repository. For example, we put "communication_ros2" and "agriculture_robot_sprint3" in the repository. The locations of these two folder as shown below.
+
+![alt text](../images/rossystem_deployment_repo.png)
+
+You can push them to github. Github action will build docker image and push images in dockerhub.
+
+### Start the system
+
+Before starting the system, you need to modify "docker-compose" file. You need to add your docker account as prefix before a docker image name.
+For example, we add "kogrob2" (docker hub account name) in front of "communication_foxy:latest", as shown below.
+
+![alt text](../images/docker-compose.png)
+
+Then you can use the command below to start the system.
+```
+docker-compose up
+```
diff --git a/docu/simulateRuntime.md b/docu/old/simulateRuntime.md
similarity index 83%
rename from docu/simulateRuntime.md
rename to docu/old/simulateRuntime.md
index 5ec53d22c..8c28dd153 100644
--- a/docu/simulateRuntime.md
+++ b/docu/old/simulateRuntime.md
@@ -2,18 +2,18 @@
In ROS, when executing a launch file that defines several nodes, the connections will be automatically created by the rosmaster. To "simulate" this behaviour, the tooling infrastructure offers a button that creates the connections that will be wired automatically at runtime, that means: all interfaces with the same name and the same message (communication object) type.
-This function can be called from the system graphical editor. The definition of ROS systems is covered in this tutorial: [Define a ROS system as a composition of components](NewSystem.md).
+This function can be called from the system graphical editor. The definition of ROS systems is covered in this tutorial: [Define a ROS system as a composition of components](NewSystem.md).
-![alt text](images/system_instrospection.png)
+![alt text](../images/system_instrospection.png)
The menu can be opened by right-clicking on the system background. It offers 3 options:
* Simulate Runtime connections: this option will create all connections that are automatically built at runtime (interfaces with same name and same message (communication object) type). In the example diagram these are the "diagnostics" topics:
-![alt text](images/system_introspection_simulate_runtime.png)
+![alt text](../images/system_introspection_simulate_runtime.png)
* Auto Connect open ports: this option will suggest likely connections, i.e. it will join interfaces with the same message (communication object) type and will remap consequently the names of the ports. For the example diagram the result will be:
-![alt text](images/system_introspection_autoconnect.png)
-
+![alt text](../images/system_introspection_autoconnect.png)
+
* Remove all connections: to clear the connections of the model
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/.classpath b/plugins/de.fraunhofer.ipa.componentInterface.edit/.classpath
deleted file mode 100644
index 22f30643c..000000000
--- a/plugins/de.fraunhofer.ipa.componentInterface.edit/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/.project b/plugins/de.fraunhofer.ipa.componentInterface.edit/.project
deleted file mode 100644
index 22df8c053..000000000
--- a/plugins/de.fraunhofer.ipa.componentInterface.edit/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
- de.fraunhofer.ipa.componentInterface.edit
-
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- org.eclipse.pde.ManifestBuilder
-
-
-
-
- org.eclipse.pde.SchemaBuilder
-
-
-
-
-
- org.eclipse.jdt.core.javanature
- org.eclipse.pde.PluginNature
-
-
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/META-INF/MANIFEST.MF b/plugins/de.fraunhofer.ipa.componentInterface.edit/META-INF/MANIFEST.MF
deleted file mode 100644
index a15555166..000000000
--- a/plugins/de.fraunhofer.ipa.componentInterface.edit/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,18 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: de.fraunhofer.ipa.componentInterface.edit;singleton:=true
-Automatic-Module-Name: de.fraunhofer.ipa.componentInterface.edit
-Bundle-Version: 2.0.0.qualifier
-Bundle-ClassPath: .
-Bundle-Activator: componentInterface.provider.ComponentInterfaceEditPlugin$Implementation
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: componentInterface.provider
-Require-Bundle: org.eclipse.core.runtime,
- de.fraunhofer.ipa.componentInterface;visibility:=reexport,
- org.eclipse.emf.edit;visibility:=reexport,
- de.fraunhofer.ipa.ros;visibility:=reexport,
- de.fraunhofer.ipa.ros.edit;visibility:=reexport
-Bundle-ActivationPolicy: lazy
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/build.properties b/plugins/de.fraunhofer.ipa.componentInterface.edit/build.properties
deleted file mode 100644
index 6e3e902e8..000000000
--- a/plugins/de.fraunhofer.ipa.componentInterface.edit/build.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-
-bin.includes = .,\
- icons/,\
- META-INF/,\
- plugin.xml,\
- plugin.properties
-jars.compile.order = .
-source.. = src/
-output.. = bin/
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rosparameter_RosParameter.gif b/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rosparameter_RosParameter.gif
deleted file mode 100644
index bfcb3a1d0..000000000
Binary files a/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rosparameter_RosParameter.gif and /dev/null differ
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rospublisher_RosPublisher.gif b/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rospublisher_RosPublisher.gif
deleted file mode 100644
index dd919f9b1..000000000
Binary files a/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rospublisher_RosPublisher.gif and /dev/null differ
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rosserviceclient_RosServiceClient.gif b/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rosserviceclient_RosServiceClient.gif
deleted file mode 100644
index ca9cabaa9..000000000
Binary files a/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rosserviceclient_RosServiceClient.gif and /dev/null differ
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rosserviceserver_RosServiceServer.gif b/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rosserviceserver_RosServiceServer.gif
deleted file mode 100644
index 045200f3e..000000000
Binary files a/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rosserviceserver_RosServiceServer.gif and /dev/null differ
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rossubscriber_RosSubscriber.gif b/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rossubscriber_RosSubscriber.gif
deleted file mode 100644
index 7f033f3de..000000000
Binary files a/plugins/de.fraunhofer.ipa.componentInterface.edit/icons/full/ctool16/CreateComponentInterface_rossubscriber_RosSubscriber.gif and /dev/null differ
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/plugin.properties b/plugins/de.fraunhofer.ipa.componentInterface.edit/plugin.properties
deleted file mode 100644
index b4ddd0185..000000000
--- a/plugins/de.fraunhofer.ipa.componentInterface.edit/plugin.properties
+++ /dev/null
@@ -1,77 +0,0 @@
-#
-
-pluginName = ComponentInterface Edit Support
-providerName = Fraunhofer IPA
-
-_UI_CreateChild_text = {0}
-_UI_CreateChild_text2 = {1} {0}
-_UI_CreateChild_text3 = {1}
-_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
-_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
-_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.
-
-_UI_PropertyDescriptor_description = The {0} of the {1}
-
-_UI_ComponentInterface_type = Component Interface
-_UI_RosPublisher_type = Ros Publisher
-_UI_RosSubscriber_type = Ros Subscriber
-_UI_RosServiceServer_type = Ros Service Server
-_UI_RosServiceClient_type = Ros Service Client
-_UI_Unknown_type = Object
-
-_UI_Unknown_datatype= Value
-
-_UI_ComponentInterface_RosTopicPublisher_feature = Ros Topic Publisher
-_UI_ComponentInterface_RosTopicSubscriber_feature = Ros Topic Subscriber
-_UI_ComponentInterface_RosServiceServer_feature = Ros Service Server
-_UI_ComponentInterface_RosServiceClient_feature = Ros Service Client
-_UI_RosPublisher_TopicName_feature = Topic Name
-_UI_RosPublisher_NameSpace_feature = Name Space
-_UI_RosSubscriber_TopicName_feature = Topic Name
-_UI_RosSubscriber_NameSpace_feature = Name Space
-_UI_RosServiceServer_ServiceName_feature = Service Name
-_UI_RosServiceServer_NameSpace_feature = Name Space
-_UI_RosServiceClient_ServiceName_feature = Service Name
-_UI_RosServiceClient_NameSpace_feature = Name Space
-_UI_Unknown_feature = Unspecified
-
-_UI_ComponentInterface_rospublisher_feature = Rospublisher
-_UI_ComponentInterface_rossubscriber_feature = Rossubscriber
-_UI_ComponentInterface_rosserviceserver_feature = Rosserviceserver
-_UI_ComponentInterface_rosserviceclient_feature = Rosserviceclient
-_UI_RosPublisher_name_feature = Name
-_UI_RosPublisher_ns_feature = Ns
-_UI_RosPublisher_publisher_feature = Publisher
-_UI_RosSubscriber_name_feature = Name
-_UI_RosSubscriber_ns_feature = Ns
-_UI_RosSubscriber_subscriber_feature = Subscriber
-_UI_RosServiceServer_name_feature = Name
-_UI_RosServiceServer_ns_feature = Ns
-_UI_RosServiceClient_name_feature = Name
-_UI_RosServiceClient_ns_feature = Ns
-_UI_InterfaceRef_type = Interface Ref
-_UI_RosServiceServer_srvserver_feature = Srvserver
-_UI_RosServiceClient_srvclient_feature = Srvclient
-_UI_InterfaceRef_name_feature = Name
-_UI_InterfaceRef_ns_feature = Ns
-_UI_NameSpaceComponent_type = Name Space Component
-_UI_NameSpaceComponent_name_feature = Name
-_UI_NameSpaceComponent_NameSpace_feature = Name Space
-_UI_RosActionServer_type = Ros Action Server
-_UI_RosActionClient_type = Ros Action Client
-_UI_RosActionServer_actserver_feature = Actserver
-_UI_RosActionServer_name_feature = Name
-_UI_RosActionServer_ns_feature = Ns
-_UI_RosActionClient_actclient_feature = Actclient
-_UI_RosActionClient_name_feature = Name
-_UI_RosActionClient_ns_feature = Ns
-_UI_ComponentInterface_rosactionserver_feature = Rosactionserver
-_UI_ComponentInterface_rosactionclient_feature = Rosactionclient
-_UI_RosParameter_type = Ros Parameter
-_UI_RosParameter_publisher_feature = Publisher
-_UI_RosParameter_name_feature = Name
-_UI_RosParameter_ns_feature = Ns
-_UI_RosParameter_parameter_feature = Parameter
-_UI_ComponentInterface_rosparameter_feature = Rosparameter
-_UI_RosParameter_value_feature = Value
-_UI_ComponentInterface_FromRosNode_feature = From Ros Node
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/plugin.xml b/plugins/de.fraunhofer.ipa.componentInterface.edit/plugin.xml
deleted file mode 100644
index 38b1503bc..000000000
--- a/plugins/de.fraunhofer.ipa.componentInterface.edit/plugin.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/pom.xml b/plugins/de.fraunhofer.ipa.componentInterface.edit/pom.xml
deleted file mode 100644
index 00f7f0582..000000000
--- a/plugins/de.fraunhofer.ipa.componentInterface.edit/pom.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
- 4.0.0
-
- de.fraunhofer.ipa.ros
- de.fraunhofer.ipa.ros.parent
- 2.0.0-SNAPSHOT
- ../de.fraunhofer.ipa.ros.parent/pom.xml
-
- de.fraunhofer.ipa.componentInterface.edit
- eclipse-plugin
-
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/src/componentInterface/provider/ComponentInterfaceEditPlugin.java b/plugins/de.fraunhofer.ipa.componentInterface.edit/src/componentInterface/provider/ComponentInterfaceEditPlugin.java
deleted file mode 100644
index 35b63c9a8..000000000
--- a/plugins/de.fraunhofer.ipa.componentInterface.edit/src/componentInterface/provider/ComponentInterfaceEditPlugin.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- */
-package componentInterface.provider;
-
-import org.eclipse.emf.common.EMFPlugin;
-
-import org.eclipse.emf.common.util.ResourceLocator;
-
-import ros.provider.RosEditPlugin;
-
-/**
- * This is the central singleton for the ComponentInterface edit plugin.
- *
- *
- * @generated
- */
-public final class ComponentInterfaceEditPlugin extends EMFPlugin {
- /**
- * Keep track of the singleton.
- *
- *
- * @generated
- */
- public static final ComponentInterfaceEditPlugin INSTANCE = new ComponentInterfaceEditPlugin();
-
- /**
- * Keep track of the singleton.
- *
- *
- * @generated
- */
- private static Implementation plugin;
-
- /**
- * Create the instance.
- *
- *
- * @generated
- */
- public ComponentInterfaceEditPlugin() {
- super
- (new ResourceLocator [] {
- RosEditPlugin.INSTANCE,
- });
- }
-
- /**
- * Returns the singleton instance of the Eclipse plugin.
- *
- *
- * @return the singleton instance.
- * @generated
- */
- @Override
- public ResourceLocator getPluginResourceLocator() {
- return plugin;
- }
-
- /**
- * Returns the singleton instance of the Eclipse plugin.
- *
- *
- * @return the singleton instance.
- * @generated
- */
- public static Implementation getPlugin() {
- return plugin;
- }
-
- /**
- * The actual implementation of the Eclipse Plugin.
- *
- *
- * @generated
- */
- public static class Implementation extends EclipsePlugin {
- /**
- * Creates an instance.
- *
- *
- * @generated
- */
- public Implementation() {
- super();
-
- // Remember the static instance.
- //
- plugin = this;
- }
- }
-
-}
diff --git a/plugins/de.fraunhofer.ipa.componentInterface.edit/src/componentInterface/provider/ComponentInterfaceItemProvider.java b/plugins/de.fraunhofer.ipa.componentInterface.edit/src/componentInterface/provider/ComponentInterfaceItemProvider.java
deleted file mode 100644
index d6499b9a4..000000000
--- a/plugins/de.fraunhofer.ipa.componentInterface.edit/src/componentInterface/provider/ComponentInterfaceItemProvider.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/**
- */
-package componentInterface.provider;
-
-
-import componentInterface.ComponentInterface;
-import componentInterface.ComponentInterfaceFactory;
-import componentInterface.ComponentInterfacePackage;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.common.util.ResourceLocator;
-
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.IItemPropertySource;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-
-/**
- * This is the item provider adapter for a {@link componentInterface.ComponentInterface} object.
- *
- *
- * @generated
- */
-public class ComponentInterfaceItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
- /**
- * This constructs an instance from a factory and a notifier.
- *
- *
- * @generated
- */
- public ComponentInterfaceItemProvider(AdapterFactory adapterFactory) {
- super(adapterFactory);
- }
-
- /**
- * This returns the property descriptors for the adapted class.
- *
- *
- * @generated
- */
- @Override
- public List getPropertyDescriptors(Object object) {
- if (itemPropertyDescriptors == null) {
- super.getPropertyDescriptors(object);
-
- addNamePropertyDescriptor(object);
- addNameSpacePropertyDescriptor(object);
- addRosactionserverPropertyDescriptor(object);
- addRosactionclientPropertyDescriptor(object);
- addFromRosNodePropertyDescriptor(object);
- }
- return itemPropertyDescriptors;
- }
-
- /**
- * This adds a property descriptor for the Name feature.
- *
- *
- * @generated
- */
- protected void addNamePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_NameSpaceComponent_name_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_NameSpaceComponent_name_feature", "_UI_NameSpaceComponent_type"),
- ComponentInterfacePackage.Literals.NAME_SPACE_COMPONENT__NAME,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Name Space feature.
- *
- *
- * @generated
- */
- protected void addNameSpacePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_NameSpaceComponent_NameSpace_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_NameSpaceComponent_NameSpace_feature", "_UI_NameSpaceComponent_type"),
- ComponentInterfacePackage.Literals.NAME_SPACE_COMPONENT__NAME_SPACE,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Rosactionserver feature.
- *
- *
- * @generated
- */
- protected void addRosactionserverPropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_ComponentInterface_rosactionserver_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_ComponentInterface_rosactionserver_feature", "_UI_ComponentInterface_type"),
- ComponentInterfacePackage.Literals.COMPONENT_INTERFACE__ROSACTIONSERVER,
- true,
- false,
- true,
- null,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Rosactionclient feature.
- *
- *
- * @generated
- */
- protected void addRosactionclientPropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_ComponentInterface_rosactionclient_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_ComponentInterface_rosactionclient_feature", "_UI_ComponentInterface_type"),
- ComponentInterfacePackage.Literals.COMPONENT_INTERFACE__ROSACTIONCLIENT,
- true,
- false,
- true,
- null,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the From Ros Node feature.
- *
- *
- * @generated
- */
- protected void addFromRosNodePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_ComponentInterface_FromRosNode_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_ComponentInterface_FromRosNode_feature", "_UI_ComponentInterface_type"),
- ComponentInterfacePackage.Literals.COMPONENT_INTERFACE__FROM_ROS_NODE,
- true,
- false,
- true,
- null,
- null,
- null));
- }
-
- /**
- * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
- * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
- * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
- *
- *
- * @generated
- */
- @Override
- public Collection extends EStructuralFeature> getChildrenFeatures(Object object) {
- if (childrenFeatures == null) {
- super.getChildrenFeatures(object);
- childrenFeatures.add(ComponentInterfacePackage.Literals.COMPONENT_INTERFACE__ROSPUBLISHER);
- childrenFeatures.add(ComponentInterfacePackage.Literals.COMPONENT_INTERFACE__ROSSUBSCRIBER);
- childrenFeatures.add(ComponentInterfacePackage.Literals.COMPONENT_INTERFACE__ROSSERVICESERVER);
- childrenFeatures.add(ComponentInterfacePackage.Literals.COMPONENT_INTERFACE__ROSSERVICECLIENT);
- childrenFeatures.add(ComponentInterfacePackage.Literals.COMPONENT_INTERFACE__ROSPARAMETER);
- }
- return childrenFeatures;
- }
-
- /**
- *
- *
- * @generated
- */
- @Override
- protected EStructuralFeature getChildFeature(Object object, Object child) {
- // Check the type of the specified child object and return the proper feature to use for
- // adding (see {@link AddCommand}) it as a child.
-
- return super.getChildFeature(object, child);
- }
-
- /**
- * This returns ComponentInterface.gif.
- *
- *
- * @generated
- */
- @Override
- public Object getImage(Object object) {
- return overlayImage(object, getResourceLocator().getImage("full/obj16/ComponentInterface"));
- }
-
- /**
- * This returns the label text for the adapted class.
- *
- *
- * @generated
- */
- @Override
- public String getText(Object object) {
- String label = ((ComponentInterface)object).getName();
- return label == null || label.length() == 0 ?
- getString("_UI_ComponentInterface_type") :
- getString("_UI_ComponentInterface_type") + " " + label;
- }
-
-
- /**
- * This handles model notifications by calling {@link #updateChildren} to update any cached
- * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
- *
- *
- * @generated
- */
- @Override
- public void notifyChanged(Notification notification) {
- updateChildren(notification);
-
- switch (notification.getFeatureID(ComponentInterface.class)) {
- case ComponentInterfacePackage.COMPONENT_INTERFACE__NAME:
- case ComponentInterfacePackage.COMPONENT_INTERFACE__NAME_SPACE:
- fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
- return;
- case ComponentInterfacePackage.COMPONENT_INTERFACE__ROSPUBLISHER:
- case ComponentInterfacePackage.COMPONENT_INTERFACE__ROSSUBSCRIBER:
- case ComponentInterfacePackage.COMPONENT_INTERFACE__ROSSERVICESERVER:
- case ComponentInterfacePackage.COMPONENT_INTERFACE__ROSSERVICECLIENT:
- case ComponentInterfacePackage.COMPONENT_INTERFACE__ROSPARAMETER:
- fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
- return;
- }
- super.notifyChanged(notification);
- }
-
- /**
- * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
- * that can be created under this object.
- *
- *
- * @generated
- */
- @Override
- protected void collectNewChildDescriptors(Collection