diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index b1e26761..db444ffd 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -27,5 +27,4 @@ ENV DEBIAN_FRONTEND=dialog # TEST COMMANDS: # bundle install -# bundle exec jekyll serve # bundle exec jekyll serve --incremental diff --git a/_docs/overview/hardware/imgs/NUCLEO-F446ZE.jpg b/_docs/overview/hardware/imgs/NUCLEO-F446ZE.jpg new file mode 100644 index 00000000..722b2a5c Binary files /dev/null and b/_docs/overview/hardware/imgs/NUCLEO-F446ZE.jpg differ diff --git a/_docs/overview/hardware/imgs/NUCLEO-F746ZG.jpg b/_docs/overview/hardware/imgs/NUCLEO-F746ZG.jpg new file mode 100644 index 00000000..26842b6d Binary files /dev/null and b/_docs/overview/hardware/imgs/NUCLEO-F746ZG.jpg differ diff --git a/_docs/overview/hardware/imgs/NUCLEO-H743ZI.jpg b/_docs/overview/hardware/imgs/NUCLEO-H743ZI.jpg new file mode 100644 index 00000000..882a34e1 Binary files /dev/null and b/_docs/overview/hardware/imgs/NUCLEO-H743ZI.jpg differ diff --git a/_docs/overview/hardware/imgs/arduinodue.jpg b/_docs/overview/hardware/imgs/arduinodue.jpg new file mode 100644 index 00000000..751c0c86 Binary files /dev/null and b/_docs/overview/hardware/imgs/arduinodue.jpg differ diff --git a/_docs/overview/hardware/imgs/arduinozero.jpg b/_docs/overview/hardware/imgs/arduinozero.jpg new file mode 100644 index 00000000..a0b1faae Binary files /dev/null and b/_docs/overview/hardware/imgs/arduinozero.jpg differ diff --git a/_docs/overview/hardware/imgs/opencr10.png b/_docs/overview/hardware/imgs/opencr10.png new file mode 100644 index 00000000..f5159e9c Binary files /dev/null and b/_docs/overview/hardware/imgs/opencr10.png differ diff --git a/_docs/overview/hardware/imgs/teensy32.jpg b/_docs/overview/hardware/imgs/teensy32.jpg new file mode 100644 index 00000000..333a99f8 Binary files /dev/null and b/_docs/overview/hardware/imgs/teensy32.jpg differ diff --git a/_docs/overview/hardware/imgs/teensy41.jpg b/_docs/overview/hardware/imgs/teensy41.jpg new file mode 100755 index 00000000..b289c7a0 Binary files /dev/null and b/_docs/overview/hardware/imgs/teensy41.jpg differ diff --git a/_docs/overview/hardware/index.md b/_docs/overview/hardware/index.md index 327319e6..99c963fa 100644 --- a/_docs/overview/hardware/index.md +++ b/_docs/overview/hardware/index.md @@ -3,114 +3,317 @@ title: Supported Hardware permalink: /docs/overview/hardware/ --- -micro-ROS targets mid-range and high-performance 32-bits microcontrollers families. -For the moment, all official ports are based on the [STM32 series](https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html) from [ST](https://www.st.com/content/st_com/en.html) and on the [ESP32](https://www.espressif.com/en/products/socs/esp32) from [Espressif](https://www.espressif.com/en). -The former feature ARM Cortex-M processors with many peripherals such as GPIO, communication or coprocessors, and the second are highly-integrated chips with in-built antenna switches, RF balun, power amplifier, low-noise receive amplifier, filters, and power management modules. - -By default, micro-ROS uses [NuttX RTOS](https://nuttx.org/), but it also has ports for [FreeRTOS](https://www.freertos.org/) and [Zephyr](https://www.zephyrproject.org/). These RTOSes have a big variety of supported MCUs and development boards. The following list shows some of them: - -+ MicroChip PIC32MX Family -+ Atmel SAMA5Dx -+ STM32F1/2/3/4 and STM32L1/4, that includes many Nucleo board support. -+ Renesas M16C/26 -+ NXP/Freescale i.MX1/6 and i.MX RT -+ Silicon Labs EFM32 Gecko and Giant Gecko -+ XTENSA board, that includes ESP32 -+ RISC-V boards - - - - -Among the many boards that can be used potentially by virtue of the variety of RTOSes supported, for the moment we officially supoort the four boards listed and detailed below. These are the hardware platforms that we use to test and develop micro-ROS, with which we also present accessories that we frequently refer to, such as add-on boards, and JTAG probes. - -For the ease of use, micro-ROS provides a ready to use example for some development boards. These out-of-the-box examples aim to show micro-ROS capabilities and they are also a starting point for developing embedded ROS 2 applications. - -## Reference Platforms {#evaluation-boards} - -This section describes the main characteristic of the boards officially supported by the micro-ROS project. - -## Olimex LTD STM32-E407 - -![Olimex](https://www.olimex.com/Products/ARM/ST/STM32-E407/images/STM32-E407-02.jpg) - -The [Olimex LTD STM32-E407](https://www.olimex.com/Products/ARM/ST/STM32-E407/open-source-hardware) is an open-hardware low-cost entry board for developing custom applications with the STM32F407ZGT6 Cortex-M4F microcontrollers from STMicroelectronics. - -It contains 196KB of RAM and 1MB of Flash. It is a very complete board thanks to the wide variety of communication interfaces it offers: USB OTG, Ethernet, SD Card slot, SPI, CAN or I2C buses are exposed. The board contains various expansion options available: Arduino-like headers for attaching daughter boards, many pins exposed, as well as a UEXT connector. This connector is a custom pin-out bus and is used to attach sensor breakouts that manufacturer sells. - -Ports for micro-ROS on all supported RTOS are available for this board. Please see our [**First micro-ROS Application on an RTOS**](/docs/tutorials/core/first_application_rtos/) tutorial for how to start developing with this board. - -### Development tools - -In order to flash and debug the board, it is required to get a JTAG probe. We recommend getting one of the following JTAG probes: - -+ [ARM-USB-OCD-H](https://www.olimex.com/Products/ARM/JTAG/ARM-USB-OCD-H/) -+ [ARM-USB-TINY-H](https://www.olimex.com/Products/ARM/JTAG/ARM-USB-TINY-H/) - -### Resources - -+ [Vendor main page](https://www.olimex.com/Products/ARM/ST/STM32-E407/open-source-hardware) -+ [Schematics in PDF](https://github.com/OLIMEX/STM32F4/blob/master/HARDWARE/STM32-E407/STM32-E407_Rev_F.pdf) -+ [CAD files](https://github.com/OLIMEX/STM32F4) -+ [User Manual](https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407.pdf) - -## STM32L4 Discovery kit IoT - -The [ST B-L475E-IOT01A](https://www.st.com/en/evaluation-tools/b-l475e-iot01a.html) evaluation board is a ready to use IoT kit. This board supports an out-of-the-box micro-ROS + Zephyr port. - - - -The STM32L4 Discovery kit IoT enables a wide diversity of applications by exploiting low-power communication, multiway sensing and Arm Cortex M4 core-based STM32L4 Series features. -The support for Arduino and PMOD connectivity provides unlimited expansion capabilities with a large choice of specialized add-on boards. - -This board features a STM32L475E MCU with 1 MB of Flash memory and 128 KB of RAM. In addition to the MCU peripherals, the board includes: - - 64 Mb SPI Flash memory - - Bluetooth V4.1 module (SPBTLE-RF) - - 915 MHz low-power RF module (SPSGRF-915) - - 802.11 b/g/n module (ISM43362-M3G-L44) - - NFC tag based on M24SR with printed antenna - - 2 digital microphones (MP34DT01) - - relative humidity and temperature digital sensor (HTS221) - - 3-axis magnetometer (LIS3MDL) - - 3-axis accelerometer and gyroscope (LSM6DSL) - - digital barometer (LPS22HB) - - Time-of-Flight and gesture-detection sensor (VL53L0X) - - programmable push-buttons - - USB OTG FS with Micro-AB connector - - on-board ST-LINK/V2 debugger and programmer - -Examples on how to start developing with this board are available [here](/docs/tutorials/demos/tof_demo/). - - -## Crazyflie 2.1 Drone - -As an integration example, the open-source [Crazyflie 2.1](https://www.bitcraze.io/products/crazyflie-2-1/) platform has its own micro-ROS + FreeRTOS port. - - - -The Crazyflie 2.1 is a versatile open-source flying development platform that only weighs 27g and fits in the palm of your hand. Crazyflie 2.1 is equipped with multiple inertial sensors and low-latency/long-range radio as well as Bluetooth LE. - -This little drone features a STM32F405 ARM Cortex-M4 MCU running up to 168 MHz with 1 MB of Flash and 192 KB of RAM. It also features the following sensors and coprocessors: - - nRF51822 radio and power management MCU (Cortex-M0, 32Mhz, 16kb SRAM, 128kb flash) - - USB - - LiPo battery charger - - 8KB EEPROM - - 3-axis accelerometer and gyroscope (BMI088) - - pressure sensor (BMP388) - - headers with peripheral access: SPI, I2C, UART, 1-wire and GPIO - -Examples on how to start developing with this board are available [here](/docs/tutorials/demos/crazyflie_demo/). - -## ESP32-DevKitC - - - -The ESP32-DevKitC is a low-footprint and entry-level development board that is part of the [ESP32 series](https://www.espressif.com/en/products/socs/esp32) from [Espressif](https://www.espressif.com/en). The ESP32 is an ultra-low power consumption dual-core system with two Xtensa LX6 CPUs, exposing a large collection of peripherals and with integrated Wi-Fi and dual-mode Bluetooth. The ESP32-DevKitC has all the ESP32 pins exposed and offers a Flash memory of 4 MB, 448 KB ROM for booting and core functions, 520 KB SRAM for data and instructions and 16 KB SRAM in RTC. The ESP32 comes with a native FreeRTOS support, over which the micro-ROS port has been carried out, both with serial and Wi-Fi transports. - -The board specifically supported by the project hosts an [ESP32-WROOM-32E module](https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32e_esp32-wroom-32ue_datasheet_en.pdf), which is an ESP32-based module with integrated flash. - -These modules have a complete set of interfaces and peripherals that makes suitable for micro-ROS wireless applications: - - Networking interfaces: Ethernet MAC, Wi-Fi 802.11 b/g/n, Bluetooth v4.2 BR/EDR and BLE - - Communication interfaces: SPI, I2C, I2S, UART, SDIO, CAN - - Peripherals: GPIO, ADC/DAC, PWM (LED and Motor drivers) - - Cryptographic hardware acceleration - \ No newline at end of file + + +Micro-ROS aims to **bring ROS 2 to a wide set of microcontrollers** to allow having first-class ROS 2 entities in the embedded world. + +The main targets of micro-ROS are mid-range 32-bits microcontroller families. Usually, the minimum requirements for running micro-ROS in an embedded platform are memory constraints. Since memory usage in micro-ROS is a complex matter we provide a [complete article](https://micro-ros.github.io/docs/concepts/memo_prof/) describing it and a tutorial on [how to tune the memory consuption](https://micro-ros.github.io/docs/tutorials/core/microxrcedds_rmw_configuration/) in the micro-ROS middleware. + +In general micro-ROS will need MCUs that have tens of kilobytes of RAM memory and communication peripherals that enable the micro-ROS [Client to Agent communication](https://micro-ros.github.io//docs/overview/features/). + +The micro-ROS hardware support is divided into three categories: +- reference micro-ROS board, +- tier 2 boards and, +- community supported boards. + +*In order to check the most recent hardware support visit the [micro_ros_setup repo](https://github.com/micro-ROS/micro_ros_setup)*. + +## Reference micro-ROS board + +The micro-ROS reference boards are the ones officially supported for all RTOSes and with complete support for all available transports. + +
+
+

Olimex LTD STM32-E407

+
+ Key features: +
    +
  • MCU: STM32F407ZGT6 Cortex-M4F
  • +
  • RAM: 196 kB
  • +
  • Flash: 1 MB
  • +
  • Peripherals: USB OTG, Ethernet, SD Card slot, SPI, CAN, I2C...
  • +
+ + Resources: + +
+
+ +
+ +
+
+ +## Tier 2 micro-ROS boards + +The micro-ROS Tier 2 boards are officially supported for one or more RTOSes and transports. + +
+
+

Espressif ESP32 DevKitC

+
+ Key features: +
    +
  • MCU: ultra-low power dual-core Xtensa LX6
  • +
  • RAM: 520 kB
  • +
  • Flash: 4 MB
  • +
  • Peripherals: Ethernet MAC, Wi-Fi 802.11 b/g/n, Bluetooth v4.2 BR/EDR, BLE, SPI, I2C, I2S, UART, SDIO, CAN, GPIO, ADC/DAC, PWM
  • +
+ Resources: + +
+
+ +
+ +
+
+ +
+
+

Teensy 3.2

+
+ Key features: +
    +
  • MCU: ARM Cortex-M4 MK20DX256VLH7
  • +
  • RAM: 64 kB
  • +
  • Flash: 256 kB
  • +
  • Peripherals: USB, SPI, I2C, CAN, I2S...
  • +
+ Resources: + + This board is supported under micro-ROS for Arduino +
+
+ +
+ +
+
+ +
+
+

Teensy 4.0/4.1

+
+ Key features: +
    +
  • MCU: ARM Cortex-M7 iMXRT1062
  • +
  • RAM: 1024 kB
  • +
  • Flash: 2048 kB
  • +
  • Peripherals: USB, PWM, SPI, I2C, CAN, I2S, SDIO,...
  • +
+ Resources: + + This board is supported under micro-ROS for Arduino +
+
+ +
+ +
+
+ +
+
+

ROBOTIS OpenCR 1.0

+
+ Key features: +
    +
  • MCU: ARM Cortex-M7 STM32F746ZGT6
  • +
  • RAM: 320 kB
  • +
  • Flash: 1024 kB
  • +
  • Peripherals: 3-axis IMU, Dynamixel ports, SPI, I2C...
  • +
+ Resources: + + This board is supported under micro-ROS for Arduino +
+
+ +
+ +
+
+ +
+
+

STM32L4 Discovery kit IoT

+
+ Key features: +
    +
  • MCU: ARM Cortex-M4 STM32L4
  • +
  • RAM: 128 kB
  • +
  • Flash: 1 MB
  • +
  • Peripherals: Bluetooth, low-power RF module, 802.11 b/g/n, NFC, 2 digital microphone, temperature/humidity sensor, 3 axis IMU, ToF sensor...
  • +
+ + Resources: + +
+
+ +
+ +
+
+ +
+
+

Crazyflie 2.1 Drone

+
+ Key features: +
    +
  • MCU: ARM Cortex-M4 STM32F405
  • +
  • RAM: 192 kB
  • +
  • Flash: 1 MB
  • +
  • Peripherals: 3 axis IMU, pressure sensor, SPI, I2C, UART, nRF51822 radio....
  • +
+ + Resources: + +
+
+ +
+ +
+
+ + +## Community supported boards + +The micro-ROS community supported boards are contributions of micro-ROS' users and community, and are not guaranteed to be officially supported. + +
+
+

Arduino Due

+
+ Key features: +
    +
  • MCU: ARM Cortex-M3 AT91SAM3X8E
  • +
  • RAM: 96 kB
  • +
  • Flash: 512 kB
  • +
+ Resources: + + This board is supported under micro-ROS for Arduino +
+
+ +
+ +
+
+ +
+
+

Arduino Zero

+
+ Key features: +
    +
  • MCU: ARM Cortex-M0+ ATSAMD21G18
  • +
  • RAM: 32 kB
  • +
  • Flash: 256 kB
  • +
+ Resources: + + This board is supported under micro-ROS for Arduino +
+
+ +
+ +
+
+ +
+
+

ST NUCLEO-F446ZE

+
+ Resources: + +
+
+ +
+ +
+
+ +
+
+

ST NUCLEO-F746ZG

+
+ Resources: + +
+
+ +
+ +
+
+ +
+
+

ST NUCLEO-H743ZI

+
+ Resources: + +
+
+ +
+ +
+
diff --git a/_docs/overview/transports/index.md b/_docs/overview/transports/index.md index 0e1d6b69..662be3a1 100644 --- a/_docs/overview/transports/index.md +++ b/_docs/overview/transports/index.md @@ -5,10 +5,26 @@ permalink: /docs/overview/transports/ micro-ROS uses the resource-optimized [DDS for Extremely Resource Constrained Environments (DDS-XRCE) standard](https://www.omg.org/spec/DDS-XRCE/), implemented by [eProsima's Micro-XRCE-DDS](https://github.com/eProsima/Micro-XRCE-DDS/). -It supports are variety of data link and transport protocols. However, the support depends on the underlying RTOS, as specified in the following table. +It supports a variety of data link and transport protocols. However, the support depends on the underlying RTOS and selected hardware. -| | Serial UART | Serial USB | UDP over Ethernet | UDP over IEEE 802.11 | 6LoWPAN | Bluetooth | -| -------------------------------------------- | :---------: | :--------: | :---------------: | :------------------: | :-----: | :-------: | -| [**FreeRTOS**](https://www.freertos.org/) | ✓ | WIP | ✓ | | | ✓ | -| [**NuttX**](http://nuttx.apache.org/) | ✓ | ✓ | ✓ | ✓ | ✓ | | -| [**Zephyr**](https://www.zephyrproject.org/) | ✓ | ✓ | WIP | WIP | | | +The following table specifies the available transports for the Reference and Tier-2 micro-ROS boards for each officially supported RTOS. You can find detailed information about hardware support [here](/docs/overview/hardware/). + +| | [**NuttX**](http://nuttx.apache.org/) | [**FreeRTOS**](https://www.freertos.org/) | [**Zephyr**](https://www.zephyrproject.org/) | [Arduino](https://github.com/micro-ROS/micro_ros_arduino) | +| ------------------ | :-----------------------------------: | :---------------------------------------: | :------------------------------------------: | :---------------------------------------------------------------------: | +| Olimex STM32-E407 | USB, UART, Network | UART, Network | USB, UART | - | +| ST B-L475E-IOT01A | - | - | USB, UART, Network | - | +| Crazyflie 2.1 | - | Custom Radio Link | - | - | +| Espressif ESP32 | - | UART, WiFI UDP | - | - | +| Teensy 3.2 | - | - | - | USB, UART | +| Teensy 4.0/4.1 | - | - | - | USB, UART | +| ROBOTIS OpenCR 1.0 | - | - | - | USB, UART | + +Regarding the **community supported** boards, at the moment of writing the available transports are: + +| | [**NuttX**](http://nuttx.apache.org/) | [**FreeRTOS**](https://www.freertos.org/) | [**Zephyr**](https://www.zephyrproject.org/) | [Arduino](https://github.com/micro-ROS/micro_ros_arduino) | +| ---------------- | :-----------------------------------: | :---------------------------------------: | :------------------------------------------: | :---------------------------------------------------------------------: | +| Arduino Due | - | - | - | USB, UART | +| Arduino Zero | - | - | - | USB, UART | +| ST Nucleo F446ZE | - | UART | - | - | +| ST Nucleo H743ZI | - | UART | - | - | +| ST Nucleo F746ZG | - | UART | - | - | diff --git a/_docs/tutorials/advanced/nuttx/debugging/index.md b/_docs/tutorials/advanced/nuttx/debugging/index.md index 232e52b7..e717f8bc 100644 --- a/_docs/tutorials/advanced/nuttx/debugging/index.md +++ b/_docs/tutorials/advanced/nuttx/debugging/index.md @@ -20,8 +20,9 @@ NuttX integration for OpenOCD is relatively new as of the time of writing (early #### Hardware - * a [supported embedded board](/docs/overview/hardware#evaluation-boards) - * a [support debugger probe](/docs/overview/hardware#development-tools) + + * a supported embedded board + * a support debugger probe #### Software diff --git a/_posts/2020-10-01-zephyr_partnership.md b/_posts/2020-10-01-zephyr_partnership.md index d4beb585..d8f39bce 100644 --- a/_posts/2020-10-01-zephyr_partnership.md +++ b/_posts/2020-10-01-zephyr_partnership.md @@ -7,7 +7,7 @@ micro-ROS is now an Associate Partner of the [Zephyr Project](https://www.zephyr Zephyr -Zephyr is a scalable open source Real-Time Operating System (RTOS) designed to fit resource constrained and embedded systems, with safety and security in mind. It forms part of [the Linux Foundation](https://www.linuxfoundation.org/), which supports a wide range of open source projects. Zephyr targets the same range of systems and applications with deterministic and time-critical constrains as micro-ROS, such as connected sensors and actuators, microcontrollers and small IoT devices of all kinds. micro-ROS and Zephyr complement each other by allowing to easily create heterogeneous distributed robotic systems and also integrate these devices seamlessly into the ROS 2 ecosystem. +Zephyr is a scalable open source Real-Time Operating System (RTOS) designed to fit resource constrained and embedded systems, with safety and security in mind. It forms part of [the Linux Foundation](https://www.linuxfoundation.org/), which supports a wide range of open source projects. Zephyr targets the same range of systems and applications with deterministic and time-critical constraints as micro-ROS, such as connected sensors and actuators, microcontrollers and small IoT devices of all kinds. micro-ROS and Zephyr complement each other by allowing to easily create heterogeneous distributed robotic systems and also integrate these devices seamlessly into the ROS 2 ecosystem. For additional information and the official press release by the Zephyr Project, follow this [link](https://www.zephyrproject.org/google-and-facebook-select-zephyr-rtos-for-next-generation-products/).