From 23b35656ed03e3852accec0025f8693b6d3211d0 Mon Sep 17 00:00:00 2001 From: ipa-nhg Date: Mon, 13 Nov 2023 11:11:52 +0100 Subject: [PATCH] [Documentation] Update ros1 and ros2 model description --- README.md | 8 +- docu/IntrospectionNode.md | 26 ++-- docu/NewRosModel.md | 12 +- docu/RosModelDescription.md | 183 ++++++++++++++++++++++++- docu/images/RosModelAutocomplete.gif | Bin 0 -> 495271 bytes docu/images/RosModelEmbededChecker.gif | Bin 0 -> 453491 bytes 6 files changed, 205 insertions(+), 24 deletions(-) create mode 100644 docu/images/RosModelAutocomplete.gif create mode 100644 docu/images/RosModelEmbededChecker.gif diff --git a/README.md b/README.md index 87f44d0d0..c57ba7937 100644 --- a/README.md +++ b/README.md @@ -40,14 +40,14 @@ Publications: - [(Only for tooling developers) From Source code in eclipse](docu/Installation.md#option-2-using-the-eclipse-installer---source-installation-ros-tooling-developers) - VS Code plugin(tbd) - WIP [vscode-RosTooling](https://github.com/ipa320/vscode-RosTooling) -## Tutorials +## Tutorials v3 - Create component models: - (Prerequisite) [Add communication objects](docu/NewCommunicationObjects.md) - - [Create a ROS model from your source code(static code analyzer)](docu/NewRosModel.md) + - [Create manually a new ROS component description](docu/RosModelDescription.md) + - [Generation of code from models](https://github.com/CoreSenseEU/rossdl#usage) - [Create a ROS model from a deployed robot using our introspection at runtime tool](docu/IntrospectionNode.md) - - [Create new ROS component description](docu/RosModelDescription.md) - - [Generation of code from models](docu/CodeGeneration.md) + - [Create a ROS model from your source code(static code analyzer)](docu/NewRosModel.md)) - Combine components to form a ROS System - [Create manually a new RosSystem description](docu/RosSystemModelDescription.md) diff --git a/docu/IntrospectionNode.md b/docu/IntrospectionNode.md index 5655a068d..1fbeb9a11 100644 --- a/docu/IntrospectionNode.md +++ b/docu/IntrospectionNode.md @@ -1,4 +1,4 @@ -## Create a ROS model from a deployed robot using our introspection at runtime tool +## 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. @@ -7,19 +7,23 @@ The tools documented here were conceived as a simple way to obtain models of sys 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) +cd YourRos2WS/src +git clone git@github.com:ipa-nhg/ros2model.git +cd YourRos2WS +colcon 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: +To ask the monitoring module to capture all the nodes running on the system, please use the following command: ``` -source my_catkin_ws/devel/setup.bash -rosrun rosgraph_monitor rossystem_snapshot +ros2 model running_node -ga -d ~/PathToModelsFolderOutput ``` -This script will generate automatically a new file (.rossystem) under the folder: 'rosgraph_monitor/results'. +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/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/RosModelDescription.md b/docu/RosModelDescription.md index c1f6417b2..5326422ce 100644 --- a/docu/RosModelDescription.md +++ b/docu/RosModelDescription.md @@ -1 +1,182 @@ -## TBD +# 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 describe ros nodes and their interfaces. +To create a new model, you can easily just create a new file with the correct extension. +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) + +## ROS (1) + +In ros1 the 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" + **subscribers:** + awesome_sub: + **type:** "std_msgs/msg/Bool" + **serviceclients:** + awesome_client: + **type:** "std_srvs/srv/Empty" + **serviceservers:** + awesome_server: + **type:** "std_srvs/srv/Empty" + **actionclients:** + awesome_action: + **type:** "control_msgs/action/JointTrajectory" + **actionservers:** + awesome_action: + **type:** "control_msgs/action/JointTrajectory" + **parameters:** + awesome_param: + **type:** String + **default:** "Hello" +``` + +For the known teleop ROS package the models looks like: + +``` +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 + + +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 +``` diff --git a/docu/images/RosModelAutocomplete.gif b/docu/images/RosModelAutocomplete.gif new file mode 100644 index 0000000000000000000000000000000000000000..8525f8112e1471cbc1a18562b9e2ec8612e27d60 GIT binary patch literal 495271 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