# micro_ros_setup **Repository Path**: soil-lentil/micro_ros_setup ## Basic Information - **Project Name**: micro_ros_setup - **Description**: fork from https://github.com/micro-ROS/micro_ros_setup.git - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: humble - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-09-22 - **Last Updated**: 2022-09-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README


This ROS 2 package is the entry point for building micro-ROS apps for different embedded platforms. - [Supported platforms](#supported-platforms) - [Standalone build system tools](#standalone-build-system-tools) - [Dependencies](#dependencies) - [Quick start](#quick-start) - [Building](#building) - [Creating micro-ROS firmware](#creating-micro-ros-firmware) - [Configuring micro-ROS firmware](#configuring-micro-ros-firmware) - [Building micro-ROS firmware](#building-micro-ros-firmware) - [Flashing micro-ROS firmware](#flashing-micro-ros-firmware) - [Building micro-ROS-Agent](#building-micro-ros-agent) - [Contributing](#contributing) - [Purpose of the Project](#purpose-of-the-project) - [License](#license) - [Known Issues / Limitations](#known-issues--limitations) # Supported platforms This package provides tools and utils to crosscompile micro-ROS with just the common ROS 2 tools for the following platforms platforms. **Note that this package provides basic support only, intended in particular for ROS developers who are new to microcontrollers. Micro-ROS [components for each platform](#standalone-build-system-tools) are available and provide a deeper and more flexible integration with the platform-specific build systems.** | RTOS | Platform | Version | Example | Recommended Alternative | | ------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | | [Azure RTOS](https://azure.microsoft.com/es-es/services/rtos/) / [FreeRTOS](https://www.freertos.org/) / Bare metal | [Renesas RA6M5](https://www.renesas.com/us/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ra6m5-200mhz-arm-cortex-m33-trustzone-highest-integration-ethernet-and-can-fde) | Renesas e2 studio | `renesas_ra ra6m5` | **[micro-ROS component for Renesas e2 studio and RA6M5](https://github.com/micro-ROS/micro_ros_renesas2estudio_component)** | | [FreeRTOS](https://www.freertos.org/) | [ST Nucleo F446RE](https://www.st.com/en/evaluation-tools/nucleo-f446re.html) 1 | STM32CubeMX latest | `freertos nucleo_f446re` | **[micro-ROS utils for STM32CubeMX and STM32CubeIDE](https://github.com/micro-ROS/micro_ros_stm32cubemx_utils)** | | [FreeRTOS](https://www.freertos.org/) | [ST Nucleo F446ZE](https://www.st.com/en/evaluation-tools/nucleo-f446ze.html) 1 | STM32CubeMX latest | `freertos nucleo_f446ze` | **[micro-ROS utils for STM32CubeMX and STM32CubeIDE](https://github.com/micro-ROS/micro_ros_stm32cubemx_utils)** | | [FreeRTOS](https://www.freertos.org/) | [ST Nucleo F746ZG](https://www.st.com/en/evaluation-tools/nucleo-f746zg.html) 1 | STM32CubeMX latest | `freertos nucleo_f746zg` | **[micro-ROS utils for STM32CubeMX and STM32CubeIDE](https://github.com/micro-ROS/micro_ros_stm32cubemx_utils)** | | [FreeRTOS](https://www.freertos.org/) | [ST Nucleo F767ZI](https://www.st.com/en/evaluation-tools/nucleo-f746zg.html) 1 | STM32CubeMX latest | `freertos nucleo_f767zi` | **[micro-ROS utils for STM32CubeMX and STM32CubeIDE](https://github.com/micro-ROS/micro_ros_stm32cubemx_utils)** | | [FreeRTOS](https://www.freertos.org/) | [Espressif ESP32](https://www.espressif.com/en/products/socs/esp32/overview) | v8.2.0 | `freertos esp32` | **[micro-ROS component for ESP-IDF](https://github.com/micro-ROS/micro_ros_espidf_component)** | | [FreeRTOS](https://www.freertos.org/) | [Crazyflie 2.1](https://www.bitcraze.io/crazyflie-2-1/) | v10.2.1 - CF 2020.06 | `freertos crazyflie21` | | | [Zephyr](https://www.zephyrproject.org/) | [Olimex STM32-E407](https://www.olimex.com/Products/ARM/ST/STM32-E407/open-source-hardware) | v2.6.0 | `zephyr olimex-stm32-e407` | **[micro-ROS module for Zephyr RTOS](https://github.com/micro-ROS/micro_ros_zephyr_module)** | | [Zephyr](https://www.zephyrproject.org/) | [ST Nucleo F446RE](https://www.st.com/en/evaluation-tools/nucleo-f446re.html) 1 | v2.6.0 | `zephyr nucleo_f446re` | **[micro-ROS module for Zephyr RTOS](https://github.com/micro-ROS/micro_ros_zephyr_module)** | | [Zephyr](https://www.zephyrproject.org/) | [ST B-L475E-IOT01A](https://docs.zephyrproject.org/latest/boards/arm/disco_l475_iot1/doc/index.html) | v2.6.0 | `zephyr discovery_l475_iot1` | **[micro-ROS module for Zephyr RTOS](https://github.com/micro-ROS/micro_ros_zephyr_module)** | | [Zephyr](https://www.zephyrproject.org/) | [ST Nucleo H743ZI](https://www.st.com/en/evaluation-tools/nucleo-h743zi.html) 1 | v2.6.0 | `zephyr nucleo_h743zi` | **[micro-ROS module for Zephyr RTOS](https://github.com/micro-ROS/micro_ros_zephyr_module)** | | [Zephyr](https://www.zephyrproject.org/) | [Zephyr emulator](https://docs.zephyrproject.org/2.3.0/boards/posix/native_posix/doc/index.html) | v2.6.0 | `zephyr host` | **[micro-ROS module for Zephyr RTOS](https://github.com/micro-ROS/micro_ros_zephyr_module)** | | [Mbed](https://os.mbed.com/) | [ST B-L475E-IOT01A](https://os.mbed.com/platforms/ST-Discovery-L475E-IOT01A/) | v6.6 | `mbed disco_l475vg_iot01a` | **[micro-ROS module for Mbed RTOS](https://github.com/micro-ROS/micro_ros_mbed)** | | - | Static library (.a) and headers (.h) 3 | - | `generate_lib` | | | Linux | *Host 2* | Ubuntu 18.04/20.04 | `host` | | | Android | [AOSP](https://source.android.com) 1 | Latest | `android generic` | | *1 Community supported, may have lack of official support* *2 Support for compiling apps in a native Linux host for testing and debugging* *3 a valid CMake toolchain with custom crosscompilation definition is required* ## Standalone build system tools `micro_ros_setup` provides access to standalone build system tools using the `component` command. After [building this package](#building) just run: ```bash ros2 run micro_ros_setup component --help ``` micro-ROS standalone module for specific platforms are: - a standalone **[micro-ROS component for Renesas e2 studio and RA6M5](https://github.com/micro-ROS/micro_ros_renesas2estudio_component)**: this package enables the integration of micro-ROS in Renesas e2 studio and RA6M5 MCU family. - a standalone **[micro-ROS component for ESP-IDF](https://github.com/micro-ROS/micro_ros_espidf_component)**: this package enables the integration of micro-ROS in any Espressif ESP32 IDF project. - a standalone **[micro-ROS module for Zephyr RTOS](https://github.com/micro-ROS/micro_ros_zephyr_module)**: this package enables the integration of micro-ROS in any Zephyr RTOS workspace. - a standalone **[micro-ROS module for Mbed RTOS](https://github.com/micro-ROS/micro_ros_mbed)**: this package enables the integration of micro-ROS in any Mbed RTOS workspace. - a standalone **[micro-ROS module for NuttX RTOS](https://github.com/micro-ROS/micro_ros_nuttx_app)**: this package enables the integration of micro-ROS in any NuttX RTOS workspace. - a standalone **[micro-ROS module for Microsoft Azure RTOS](https://github.com/micro-ROS/micro_ros_azure_rtos_app)**: this package enables the integration of micro-ROS in a Microsoft Azure RTOS workspace. - a standalone **[micro-ROS app for TI Tiva™ C Series](https://github.com/micro-ROS/micro_ros_tivac_launchpad_app)**: this package enables the integration of micro-ROS in a exas Instruments Tiva™ C Series. - a set of **[micro-ROS utils for STM32CubeMX and STM32CubeIDE](https://github.com/micro-ROS/micro_ros_stm32cubemx_utils)**: this package enables the integration of micro-ROS in STM32CubeMX and STM32CubeIDE. - a library builder for **[PlatformIO](https://github.com/micro-ROS/micro_ros_platformio)**: this package enables the integration of micro-ROS in PlatformIO. - a precompiled set of **[Arduino IDE libraries](https://github.com/micro-ROS/micro_ros_arduino)**: this package enables the integration of micro-ROS in the Arduino IDE for some hardware platforms. - a precompiled set of **[Raspberry Pi Pico SDK libraries](https://github.com/micro-ROS/micro_ros_raspberrypi_pico_sdk)**: this package enables the integration of micro-ROS in the Raspberry Pi Pico SDK. # Dependencies This package targets the **ROS 2** installation. ROS 2 supported distributions are: | ROS 2 Distro | State | Branch | | ------------ | --------- | ---------- | | Crystal | EOL | `crystal` | | Dashing | EOL | `dashing` | | Foxy | Supported | `foxy` | | Galactic | Supported | `galactic` | | Humble | Supported | `humble` | | Rolling | Supported | `main` | Some other prerequisites needed for building a firmware using this package are: ``` sudo apt install python3-rosdep ``` Building for Android needs [Latest Android NDK](https://developer.android.com/ndk/downloads) to be installed and the following environment variables to be set: - ```ANDROID_ABI```: CPU variant, refer [here](https://developer.android.com/ndk/guides/abis) for details. - ```ANDROID_NATIVE_API_LEVEL```: Android platform version, refer [here](https://developer.android.com/ndk/guides/cmake#android_native_api_level) for details. - ```ANDROID_NDK```: root path of the installed NDK. # Quick start Download [here](https://www.eprosima.com/index.php/downloads-all) the micro-ROS docker image that contains a pre-installed client and agent as well as some compiled examples. # Building Create a ROS 2 workspace and build this package for a given ROS 2 distro (see table above): ```bash source /opt/ros/$ROS_DISTRO/setup.bash mkdir uros_ws && cd uros_ws git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup rosdep update && rosdep install --from-paths src --ignore-src -y colcon build source install/local_setup.bash ``` Once the package is built, the firmware scripts are ready to run. You can find tutorials for moving your first steps with micro-ROS on an RTOS in the [micro-ROS webpage](https://micro-ros.github.io/docs/tutorials/core/first_application_rtos/). ## Creating micro-ROS firmware Using the `create_firmware_ws.sh [RTOS] [Platform]` command, a firmware folder will be created with the required code for building a micro-ROS app. For example, for our reference platform, the invocation is: ```bash # Creating a FreeRTOS + micro-ROS firmware workspace ros2 run micro_ros_setup create_firmware_ws.sh freertos olimex-stm32-e407 # Creating a Zephyr + micro-ROS firmware workspace ros2 run micro_ros_setup create_firmware_ws.sh zephyr olimex-stm32-e407 ``` ## Configuring micro-ROS firmware By running `configure_firmware.sh` command the installed firmware is configured and modified in a pre-build step. This command will show its usage if parameters are not provided: ``` ros2 run micro_ros_setup configure_firmware.sh [configuration] [options] ``` By running this command without any argument the available demo applications and configurations will be shown. Common options available at this configuration step are: - `--transport` or `-t`: `udp`, `serial` or any hardware specific transport label - `--dev` or `-d`: agent string descriptor in a serial-like transport (optional) - `--ip` or `-i`: agent IP in a network-like transport (optional) - `--port` or `-p`: agent port in a network-like transport (optional) Please note that each RTOS has its configuration approach that you might use for further customization of these base configurations. Visit the [micro-ROS webpage](https://micro-ros.github.io/docs/tutorials/core/first_application_rtos/) for detailed information about RTOS configuration. In summary, the supported configurations for transports are: | | FreeRTOS | Zephyr | Mbed | | ----------------------------- | :---------------: | :----------------: | :---: | | Olimex STM32-E407 | UART, Network | USB, UART | - | | ST B-L475E-IOT01A | - | USB, UART, Network | UART | | Crazyflie 2.1 | Custom Radio Link | - | - | | Espressif ESP32 | UART, WiFI UDP | - | - | | ST Nucleo F446RE 1 | UART | UART | - | | ST Nucleo F446ZE 1 | UART | - | - | | ST Nucleo H743ZI 1 | - | UART | - | | ST Nucleo F746ZG 1 | UART | UART | - | | ST Nucleo F767ZI 1 | UART | - | - | *1 Community supported, may have lack of official support* ## Building micro-ROS firmware By running `build_firmware.sh` the firmware is built: ``` ros2 run micro_ros_setup build_firmware.sh ``` ## Flashing micro-ROS firmware In order to flash the target platform run `flash_firmware.sh` command. This step may need some platform-specific procedure to boot the platform in flashing mode: ``` ros2 run micro_ros_setup flash_firmware.sh ``` # Building micro-ROS-Agent Using this package is possible to install a ready to use **micro-ROS-Agent**: ``` ros2 run micro_ros_setup create_agent_ws.sh ros2 run micro_ros_setup build_agent.sh source install/local_setup.sh ros2 run micro_ros_agent micro_ros_agent [parameters] ``` # Contributing As it is explained along this document, the firmware building system takes **four steps**: creating, configuring, building and flashing. New combinations of platforms and RTOS are intended to be included in `config` folder. For example, the scripts for building a **micro-ROS** app for **Crazyflie 2.1** using **FreeRTOS** is located in `config/freertos/crazyflie21`. This folder contains up to four scripts: - `create.sh`: gets a variable named `$FW_TARGETDIR` and installs in this path all the dependencies and code required for the firmware. - `configure.sh`: modifies and configure parameters of the installed dependencies. This step is **optional**. - `build.sh`: builds the firmware and create a platform-specific linked binary. - `flash.sh`: flashes the binary in the target platform. Some other required files inside the folder can be accessed from these scripts using the following paths: ```bash # Files inside platform folder $PREFIX/config/$RTOS/$PLATFORM/ # Files inside config folder $PREFIX/config ``` # Purpose of the Project This software is not ready for production use. It has neither been developed nor tested for a specific use case. However, the license conditions of the applicable Open Source licenses allow you to adapt the software to your needs. Before using it in a safety relevant setting, make sure that the software fulfills your requirements and adjust it according to any applicable safety standards, e.g., ISO 26262. # License This repository is open-sourced under the Apache-2.0 license. See the [LICENSE](LICENSE) file for details. For a list of other open-source components included in ROS 2 system_modes, see the file [3rd-party-licenses.txt](3rd-party-licenses.txt). # Known Issues / Limitations There are no known limitations. If you find issues, [please report them](https://github.com/micro-ROS/micro_ros_setup/issues).