Skip to content

micro-ROS/micro_ros_arduino

Folders and files

NameName
Last commit message
Last commit date
Apr 16, 2025
Apr 28, 2022
Nov 25, 2024
Jul 10, 2024
May 6, 2025
Jan 18, 2021
Jan 18, 2021
Jan 18, 2021
Jan 18, 2021
Jan 18, 2021
Nov 25, 2024
Mar 31, 2025
May 6, 2025
Nov 25, 2024

Repository files navigation

banner banner

micro-ROS for Arduino

This is a micro-ROS library for baremetal projects based on Arduino IDE or Arduino CLI.

As the build process for ROS 2 and micro-ROS is based on custom meta-build system tools and CMake, this library is provided as a precompiled library. However, users can rebuild their own precompiled libraries in order to modify the micro-ROS configuration or RMW parameters by customizing the respective .meta file.

Supported boards

Supported boards are:

Board Min version State Details .meta file
Arduino Portenta H7 M7 Core v1.8.5 Supported Official Arduino support colcon.meta
Arduino Nano RP2040 Connect v1.8.5 Supported Official Arduino support colcon_verylowmem.meta
OpenCR v1.4.16 Supported Based on custom board colcon.meta
Teensy 4.0 v1.8.5 Not tested Based on Teensyduino (1.58.x) colcon.meta
Teensy 4.1 v1.8.5 Supported Based on Teensyduino (1.58.x) colcon.meta
Teensy 3.2/3.1 v1.8.5 Supported Based on Teensyduino (1.58.x) colcon_lowmem.meta
Teensy 3.5 v1.8.5 Not tested Based on Teensyduino (1.58.x) colcon_lowmem.meta
Teensy 3.6 v1.8.5 Supported Based on Teensyduino (1.58.x) colcon_lowmem.meta
ESP32 Dev Module v1.8.5 Supported Arduino core for the ESP32 (v2.0.2) colcon.meta

Community contributed boards are:

Board Min version Contributor Details .meta file
Arduino Due - @lukicdarkoo colcon_verylowmem.meta
Arduino Zero - @lukicdarkoo colcon_verylowmem.meta
Kakute F7 - @amfern colcon.meta
STM32-E407 - @dominikn colcon.meta
Wio Terminal - @maehara-keisuke colcon.meta
Raspberry Pi Pico - @maehara-keisuke with ESP-AT colcon_verylowmem.meta
Seeed Studio XIAO SAMD21 - @maehara-keisuke with ESP-AT colcon_verylowmem.meta
Seeed Studio XIAO RP2040 - @maehara-keisuke with ESP-AT colcon_verylowmem.meta
Arduino Giga R1 - @gbr1 colcon.meta
Arduino UNO R4 WiFi - @gbr1 colcon.meta
Arduino UNO R4 Minima - @gbr1 colcon.meta
Arduino Opta - @gbr1 colcon.meta

You can find the available precompiled ROS 2 types for messages and services in available_ros2_types.

How to use the precompiled library

Arduino IDE

Go to link to release section and download the last release of micro-ROS library for Arduino.

Include it in your project using Sketch -> Include library -> Add .ZIP Library...

You can test micro-ROS examples located in this repo examples folder.

Remember that is possible to use a micro-ROS Agent just with this docker command:

# Serial micro-ROS Agent
docker run -it --rm -v /dev:/dev --privileged --net=host microros/micro-ros-agent:jazzy serial --dev [YOUR BOARD PORT] -v6

PlatformIO

PlatformIO support for this repository has been deprecated in favor of its own build system: micro_ros_platformio

How to build the precompiled library

If you need to add custom packages or types, or customize any internal parameter of the micro-ROS stack, you will need to recompile this library from source code:

docker pull microros/micro_ros_static_library_builder:jazzy
docker run -it --rm -v $(pwd):/project --env MICROROS_LIBRARY_FOLDER=extras microros/micro_ros_static_library_builder:jazzy

Optionally a specific single target can be built using the -p <LIBRARY_TARGET> argument like this:

docker run -it --rm -v $(pwd):/project --env MICROROS_LIBRARY_FOLDER=extras microros/micro_ros_static_library_builder:jazzy -p <LIBRARY_TARGET>

Available targets LIBRARY_TARGETS are available on the top of the extras/library_generation/library_generation.sh file

Folders added to extras/library_generation/extra_packages and entries added to extras/library_generation/extra_packages/extra_packages.repos will be taken into account by this build system. This should be used for example when adding custom messages types or custom micro-ROS packages.

You can configure many parameters of the library by editing the respective .meta file in the extras/library_generation/ directory.

Patch Arduino board for support precompiled libraries

Patch Teensyduino

Go inside your Arduino + Teensyduino installation and replace platform.txt:

export TEENSYDUINO_VERSION=[Your Teensyduino library version, e.g: 1.58.0]
export ARDUINO_PATH=[Your Arduino + Teensyduino path]
cd $ARDUINO_PATH/hardware/avr/$TEENSYDUINO_VERSION/
curl https://raw.githubusercontent.com/micro-ROS/micro_ros_arduino/main/extras/patching_boards/platform_teensy.txt > platform.txt

The patch applies the changes detailed on the first two sections of this post: Solution for adding support for pre-compiled Libraries

Patch SAM

Go inside your Arduino installation and replace platform.txt:

export ARDUINO_PATH=[Your Arduino path]
cd $ARDUINO_PATH/hardware/sam/1.6.12/
curl https://raw.githubusercontent.com/micro-ROS/micro_ros_arduino/main/extras/patching_boards/platform_arduinocore_sam.txt > platform.txt

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 file for details.

For a list of other open-source components included in this repository, see the file 3rd-party-licenses.txt.

Known Issues/Limitations

  • When using provided precompiled libraries, users should take into account the already configured static memory pools in middleware layers. More info here.
  • micro-ROS transports should be refactored in order to provide a pluggable mechanisms. Only USB serial transports are provided.
  • Teensyduino support files have to be patched in order to use precompiled libraries.
  • To solve Python errors on ESP32 compilation: apt install python-is-python3 && pip3 install pyserial