Alexander David Hellwig committed Feb 25, 2018 1 # EMAM2Middleware  Alexander David Hellwig committed Jul 09, 2018 2 3 ![pipeline](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Middleware/badges/master/build.svg) ![coverage](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Middleware/badges/master/coverage.svg)  Alexander David Hellwig committed Jun 26, 2018 4 5 6 ## Writing your own Middleware Generator see [TUTORIAL_ADD_MIDDLEWARE.md](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Middleware/blob/master/TUTORIAL_ADD_MIDDLEWARE.md)  Alexander David Hellwig committed Aug 12, 2018 7 ## Dependencies needed to compile the generated projects  Alexander David Hellwig committed Oct 21, 2018 8 9 10 11 12 13 14 15 16 17 18 19 ### All generated projects CMake, Make, and a C++ compiler are required to compile the generated projects. #### Linux Gcc is recommended as the C++ compiler. Example install of all needed packages for ubuntu: bash sudo apt install gcc cmake make  #### Windows Mingw gcc is recommended as the C++ compiler. See http://www.mingw.org/wiki/howto_install_the_mingw_gcc_compiler_suite for installation details. CMake for Windows: https://cmake.org/download/ Make for Windows: http://gnuwin32.sourceforge.net/packages/make.htm  Alexander David Hellwig committed Aug 12, 2018 20   Alexander David Hellwig committed Oct 21, 2018 21 22 23 24 25 26 27 28 29 30 31 32 #### Linux Navigate to your build directory and run bash cmake /path/to/generated/project/source make  #### Windows Navigate to your build directory and run batch cmake C:\path\to\generated\project\source make   Alexander David Hellwig committed Aug 12, 2018 33   Alexander David Hellwig committed Oct 21, 2018 34 ### Projects with cpp generator  Alexander David Hellwig committed Aug 12, 2018 35 36 Armadillo version 8 or higher. The version used in EMAStudio can be downloaded from:  Alexander David Hellwig committed Oct 19, 2018 37 * [Windows](https://rwth-aachen.sciebo.de/s/igDWzLpdO5zYHBj/download?path=%2Fwin64&files=armadillo-8.200.2.zip)  Alexander David Hellwig committed Aug 12, 2018 38 39 40 41 42 43 44 * [Linux](https://rwth-aachen.sciebo.de/s/igDWzLpdO5zYHBj/download?path=%2Fubuntu%2F18.06.20-armadillo-linux&files=armadillo-8.500.1-linux.zip) WARNING: Both linked versions contain a copy of the file armadillo called armadillo.h, which is not contained in standard armadillo distributions. It is required by the code generated by EMAM2Cpp. The environment variable Armadillo_HOME needs to be set to the base directory of your armadillo installation.  Alexander David Hellwig committed Oct 21, 2018 45 ### Projects with roscpp generator  Alexander David Hellwig committed Aug 12, 2018 46 47 48 Only for generated projects that contain a ROS adapter(e.g. -g=cpp,roscpp). ROS Kinetic currently only supports Linux and the installation is described [here](http://wiki.ros.org/kinetic/Installation/Ubuntu).  ahellwig committed Feb 25, 2018 49 ## Usage  Alexander David Hellwig committed Jun 26, 2018 50 51 52 53 54 55 56 57 58 ### CLI Maven generates the jar embedded-montiarc-math-middleware-generator-{Version}-jar-with-dependencies.jar and the cli is located in de.monticore.lang.monticar.generator.middleware.DistributedTargetGeneratorCli. CLI Options: * -m/--models-dir: full path to directory with EMAM models * -r/--root-model: fully qualified name of the root model * -o/--output-dir: full path to output directory for generated files * -g/--generators: identifiers for the generators that should be used  Alexander David Hellwig committed Aug 12, 2018 59 60 61  * currently supported: * cpp * roscpp  Alexander David Hellwig committed Jun 26, 2018 62 63 64 65 66  * seperated by ',' * example: cpp,roscpp Example: [CliUsage.sh](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Middleware/blob/master/src/test/resources/CliUsage.sh)  ahellwig committed Feb 25, 2018 67 ### Defining the connection between a component and the middleware  Alexander David Hellwig committed Feb 25, 2018 68 The connection between middleware and the component is defined as tags on Ports in .tag files.  Alexander David Hellwig committed Jun 26, 2018 69 ### Example with ROS Middleware:  Alexander David Hellwig committed Feb 25, 2018 70 71 Tags of the type RosConnection can either be simple tags(see Example 3) or define a topic(http://wiki.ros.org/Topics) with name, type and optional msgField(http://wiki.ros.org/msg , 2.) Examples:  Alexander David Hellwig committed Jun 26, 2018 72 73 74 1. [src/test/resources/tests/a/Add.tag](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Middleware/blob/master/src/test/resources/tests/a/Add.tag) 1. [src/test/resources/tests/a/Echo.tag](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Middleware/blob/master/src/test/resources/tests/a/Echo.tag) 1. [src/test/resources/tests/dist/SimpleDist.tag](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Middleware/blob/master/src/test/resources/tests/dist/SimpleDist.tag)  Alexander David Hellwig committed Feb 25, 2018 75   Alexander David Hellwig committed Jun 26, 2018 76 77 #### Use-case 1: Creating 1 executable Look at [GenerationTest::testMiddlewareGenerator](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Middleware/blob/master/src/test/java/de/monticore/lang/monticar/generator/middleware/GenerationTest.java). The component is defined in [src/test/resources/tests/a/AddComp.emam](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Middleware/blob/master/src/test/resources/tests/a/AddComp.emam) and the tags for the connection to ros are defined in [src/test/resources/tests/a/Add.tag](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Middleware/blob/master/src/test/resources/tests/a/Add.tag)  Alexander David Hellwig committed Feb 25, 2018 78   Alexander David Hellwig committed Jun 26, 2018 79 80 #### Use-case 2: Creating multiple executables for distributed systems Look at [GenerationTest::testDistributedTargetGenerator](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Middleware/blob/master/src/test/java/de/monticore/lang/monticar/generator/middleware/GenerationTest.java). The component is defined in [src/test/resources/dist/DistComp.emam](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Middleware/blob/master/src/test/resources/tests/dist/DistComp.emam) and the tags for the connection to ros are defined in [src/test/resources/tests/dist/SimpleDist.tag](https://git.rwth-aachen.de/monticore/EmbeddedMontiArc/generators/EMAM2Middleware/blob/master/src/test/resources/tests/dist/SimpleDist.tag)  Alexander David Hellwig committed Feb 25, 2018 81   Alexander David Hellwig committed Jun 26, 2018 82 #### Compile and run the generated ROS Projects  Alexander David Hellwig committed Feb 25, 2018 83 84 85 1. install needed software: * ROS Kinetic(http://wiki.ros.org/kinetic/Installation) * CMake(https://cmake.org/)  Alexander David Hellwig committed Jun 21, 2018 86 87  * Armadillo 8 or higher( www.arma.sourceforge.net) * creating a copy of the library named armadillo.h might be necessary.  Alexander David Hellwig committed Feb 25, 2018 88 89 90 91 92 93 94 95 96 1. source your ros environment(http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment , 2.) 1. a) run src/test/resources/TargetCompilation.sh from **this project's** root 1. or b) compile a single project by * changing to the **generated project's** root * create a folder build/ and change into it * run: cmake ../src * run: make 1. Start ros and the other nodes * minimal working example: run: roscore  ahellwig committed Feb 25, 2018 97 1. If the project was created by a MiddlewareGenerator, run the executable(s) at build/coordinator(/)/Coordinator_<(sub)component.name>  Alexander David Hellwig committed Jun 26, 2018 98