
**bloom** to oficjalne **narzędzie release management** dla ekosystemu ROS i ROS 2, stworzone przez Willow Garage i obecnie utrzymywane przez Open Robotics / OSRF. Jego rolą jest automatyzacja procesu publikacji pakietów ROS na **buildfarm ROS** (jenkins.ros.org / build.ros2.org), który następnie buduje pakiety binarne `.deb` (Debian/Ubuntu) i `.rpm` (RHEL/Fedora) i publikuje je w oficjalnych repozytoriach apt/yum (`packages.ros.org`).
## Workflow release'u
Każdy maintainer pakietu ROS, który chce żeby jego pakiet pojawił się w oficjalnym `apt install ros-humble-my-package`, musi przejść proces bloom:
1. **Tag wydania** — np. `git tag 1.2.3 && git push --tags` w repo źródłowym pakietu.
2. **bloom-release** — `bloom-release --rosdistro humble --track humble my_package` — bloom klonuje release repo (`my_package-release.git`), pobiera tag źródłowy, generuje `debian/control`, `debian/rules`, `debian/changelog` z `package.xml`, tworzy gałąź `debian/humble/my_package` i wysyła do GitHub.
3. **Pull request do ros/rosdistro** — bloom automatycznie otwiera PR do [`ros/rosdistro`](https://github.com/ros/rosdistro) z nowym wpisem `version: 1.2.3` w `humble/distribution.yaml`.
4. **Code review + merge** — zespół Open Robotics merguje PR.
5. **Buildfarm** — jenkins.ros.org wykrywa zmianę w `distribution.yaml`, buduje pakiety dla wszystkich obsługiwanych platform (Ubuntu Jammy amd64/arm64, RHEL 9 itd.) i wypycha do `packages.ros.org`.
## Kluczowe komendy
- `bloom-release` — pełny end-to-end release (tag → debianize → PR).
- `git-bloom-config` — konfiguracja tracking branches (release repo).
- `git-bloom-import-upstream` — import nowej wersji upstream do release repo.
- `git-bloom-generate` — generacja `debian/` lub `rpm/` artifacts dla konkretnej platformy.
- `git-bloom-release` — publikacja gałęzi release.
## Architektura
bloom napisany w Pythonie, używa **GitPython** do operacji na release repo, **rosdistro** do walidacji wpisów w distribution.yaml, oraz **catkin_pkg** do parsowania `package.xml`. Generatory pakietów: `bloom.generators.debian` (dpkg) i `bloom.generators.rpm` (rpmbuild). Wsparcie dla ROS 1 i ROS 2 jednoczesne — jeden bloom obsługuje wszystkie dystrybucje od Indigo (ROS 1) do Rolling (ROS 2).
## Status i utrzymanie
bloom jest **aktywnie utrzymywany** przez OSRF i Open Robotics, ale w trybie 'mature / stable' — feature set jest stabilny od ~2019 r., zmiany dotyczą głównie wsparcia dla nowych OS-ów (Ubuntu Noble, RHEL 10) i nowych dystrybucji ROS. Licencja: BSD 3-clause. Repozytorium: [`ros-infrastructure/bloom`](https://github.com/ros-infrastructure/bloom). Dystrybucja: PyPI (`pip install -U bloom`) i apt (`python3-bloom`).
Developer Tool to oprogramowanie przeznaczone do wspierania pracy deweloperskiej, w tym konfiguracji, debugowania, testowania, monitorowania, walidacji lub integracji systemów robotycznych i embedded.
CLI Tool to program uruchamiany z linii komend, wykorzystywany do administracji, integracji, konfiguracji, testów i diagnostyki urządzeń oraz oprogramowania robotycznego.
Developer Enablement oznacza rolę oprogramowania wspierającego deweloperów w integracji, debugowaniu, walidacji, konfiguracji, testowaniu i uruchamianiu systemów robotycznych oraz ich komponentów.
Diagnostics & Monitoring oznacza rolę oprogramowania odpowiedzialnego za zbieranie telemetrii, monitoring stanu, wykrywanie błędów, diagnostykę pracy robota i analizę kondycji komponentów systemu.
Zbiór oficjalnych narzędzi command-line wspierających workflow developera ROS / ROS 2: budowanie wielopakietowych workspace'ów, rozwiązywanie zależności systemowych i pakowanie do dystrybucji binarnej. Obejmuje m.in. colcon, rosdep i bloom.
**~3 500 pakietów ROS** w `packages.ros.org` (każdy z nich został kiedyś wydany przez bloom). **Co tydzień** open robotics merguje ~30-50 PR-ów wygenerowanych przez bloom do `ros/rosdistro`. **NVIDIA Isaac ROS** — wszystkie binarne paczki Isaac ROS (`isaac_ros_*`) są wydawane przez bloom do `packages.ros.org`. **MoveIt 2**, **Nav2**, **ros2_control**, **rmw_*** implementations, **rclcpp**, **rclpy** — wszystkie core ROS 2 paczki są releasowane przez bloom. **Robotis OP3**, **Clearpath Husky/Jackal**, **Franka Robotics** — przykładowe firmy używające bloom do swoich oficjalnych pakietów ROS.
Repozytorium ros-infrastructure/bloom: ~200 ★, ~190 forków, ~80 kontrybutorów (2025). PyPI `bloom`: ~25 000 pobrań/miesiąc. ros/rosdistro: ~700 ★, ~1 100 forków, ~700 unikalnych kontrybutorów (każdy maintainer ROS package musi otwierać PR do rosdistro przez bloom). ROS Discourse: ~400 wątków oznaczonych `bloom` / `release`. ROS REP-141 (proces release'u) i REP-149 (`package.xml` format 3) określają semantykę używaną przez bloom.
Python to wysokopoziomowy język programowania szeroko stosowany w robotyce, AI, computer vision, automatyzacji, testach i szybkiej integracji komponentów sprzętowych oraz software'owych.
Ubuntu 22.04 LTS to długoterminowo wspierana wersja systemu Linux wykorzystywana w robotyce, AI, systemach edge i środowiskach programistycznych. Stanowi popularną bazę dla nowszych stosów oprogramowania oraz dystrybucji ROS 2.
Ubuntu 20.04 LTS to długoterminowo wspierana wersja systemu Linux, szeroko wykorzystywana w robotyce, systemach embedded, AI i środowiskach developerskich. Jest popularna m.in. w środowiskach ROS oraz na platformach obliczeniowych takich jak NVIDIA Jetson.
Debian to jedna z najbardziej stabilnych i powszechnie stosowanych dystrybucji Linux, wykorzystywana jako baza dla wielu systemów embedded, robotycznych i serwerowych.
macOS to system operacyjny Apple wykorzystywany głównie na stacjach roboczych i laptopach deweloperskich do budowy, testowania i integracji oprogramowania.
Release repo (np. my_package-release.git) zwykle zajmuje 2-10 MB. Lokalna kopia trzymana w `/tmp/bloom-*` w trakcie release'u.
Oficjalny menedżer pakietów języka Python i rejestr PyPI (Python Package Index – pypi.org). Pakiety instalowane przez narzędzie pip ('pip install <package>') lub pip3 dla Pythona 3. Szeroko stosowany w ekosystemie robotycznym dla: bibliotek Pythona do komunikacji z SDK (Unitree Python SDK2 dostępne przez pip), wrapperów Pythona dla algorytmów (OpenCV Python: 'pip install opencv-python'), narzędzi deweloperskich (colcon, rosdep, vcstool instalowane przez pip). Obsługuje wirtualne środowiska (venv, virtualenv, conda) izolujące zależności między projektami. Format pakietów: wheel (.whl, binarne) i sdist (.tar.gz, source distribution wymagająca kompilacji). PyPI zawiera ponad 500,000 pakietów – największy ekosystem pakietów Python. Integracja z ROS 2: pakiety Python ROS 2 mogą być instalowane zarówno przez apt (ros-humble-rclpy) jak i pip, przy czym apt jest preferowany dla pakietów ROS 2 core. Wsparcie dla pinowania wersji przez requirements.txt i Pipfile. Ograniczenie: brak native obsługi zależności systemowych (C libraries) – rosdep uzupełnia tę lukę w ekosystemie ROS.
Menedżer pakietów Debian/Ubuntu – apt-get install.
Zestaw narzędzi specyficznych dla ekosystemu ROS do zarządzania zależnościami i tworzenia wydań pakietów. rosdep: narzędzie instalujące zależności systemowe pakietów ROS – analizuje pliki package.xml i instaluje brakujące zależności przez natywny menedżer pakietów systemu (apt na Ubuntu, brew na macOS, pip dla Pythona). Komendy: 'rosdep install --from-paths src --ignore-src -r -y' (instalacja wszystkich zależności workspace). bloom: narzędzie tworzące oficjalne wydania pakietów ROS – generuje pliki debian/rpm z package.xml, tworzy tagi Git i zgłasza pakiet do buildfarm Open Robotics. Buildfarm: infrastruktura CI/CD Open Robotics kompilująca i testująca pakiety ROS dla wszystkich obsługiwanych platform (Ubuntu x86_64, aarch64) i dystrybucji. Po przejściu buildfarm pakiet dostępny przez apt. REP-2004 (Quality Levels): poziomy jakości QL1–QL5 definiujące wymagania dla oficjalnych pakietów ROS 2 (testy, dokumentacja, CI). Kluczowe narzędzia dla maintainerów pakietów ROS chcących dystrybucji przez oficjalne repozytoria packages.ros.org.
64-bitowa architektura procesora wywodząca się z rodziny x86, opracowana przez AMD (jako AMD64) i zaadoptowana przez Intel (jako Intel 64 / EM64T). Dominująca architektura w komputerach osobistych, serwerach, stacjach roboczych i komputerach przemysłowych. W robotyce stosowana jako główna platforma obliczeniowa dla: stacji operatorskich i komputerów deweloperskich (Ubuntu 22.04/24.04 x86_64), serwerów fleet management i cloud robotics, symulatorów (Gazebo, Isaac Sim wymagają x86_64 z GPU NVIDIA dla pełnej wydajności), komputerów pokładowych robotów mobilnych wyższej klasy (Intel NUC, mini-PC przemysłowe jak Nuvo, OnLogic). Oficjalne wsparcie ROS 2 dla x86_64 jest tier-1 – wszystkie dystrybucje ROS 2 (Humble, Jazzy, Kilted) są w pełni wspierane i testowane. Pakiety apt dostępne przez packages.ros.org dla Ubuntu x86_64. Dominuje w środowiskach deweloperskich i symulacyjnych. Na robotach mobilnych i humanoidach x86_64 jest stosowane gdy wymagana jest wysoka moc obliczeniowa (np. Intel Core Ultra, AMD Ryzen Embedded) bez ograniczeń energetycznych typowych dla ARM. Przykłady hardware: Intel NUC 13 Pro, AMD Ryzen Embedded V2000, Advantech MIC-770.
64-bitowa architektura ARM (Advanced RISC Machine) w wersji ARMv8-A i nowszych – dominująca architektura w embedded computing, robotyce mobilnej i edge AI. Dwie nazwy oznaczają to samo: ARM64 (nazwa stosowana przez Apple i w kontekście macOS/iOS), AArch64 (oficjalna nazwa architektury ARM, używana w Linuksie i ekosystemie embedded). Absolutnie dominująca architektura w nowoczesnej robotyce mobilnej i humanoidalnej: NVIDIA Jetson (Orin NX, AGX Orin – Cortex-A78AE), Raspberry Pi 4/5 (Cortex-A72/A76), Qualcomm Robotics RB5/RB6 (Kryo), Apple M1/M2/M3 (dla stacji deweloperskich macOS), procesory w smartfonach używanych jako moduły robotyczne. Oficjalne wsparcie ROS 2 tier-1 dla aarch64 od dystrybucji Humble – pakiety apt dostępne przez packages.ros.org dla Ubuntu 22.04/24.04 aarch64. Unitree SDK2 dostępne dla aarch64 (target: Jetson Orin NX w G1). Boston Dynamics Spot: Qualcomm aarch64. Zalety wobec x86_64: znacznie niższy pobór energii (TDP 5–65W vs 45–125W), lepsza wydajność na wat, wbudowane NPU/GPU dla edge AI, mniejszy footprint fizyczny. Ograniczenia: historycznie mniejsza dostępność prebuildowanych pakietów (szybko zmniejsza się), niektóre biblioteki x86-only nie są portowane.
ARM 64-bit – NVIDIA Jetson, Raspberry Pi 4/5, Apple Silicon.
Procesory Apple Silicon (M1, M2, M3, M4 i warianty Pro/Max/Ultra) oparte na architekturze AArch64 (ARMv8.5-A+), stosowane w MacBook, Mac mini, Mac Studio i Mac Pro od 2020 r. Platforma deweloperska rosnącego znaczenia w ekosystemie robotycznym – wielu deweloperów ROS 2 używa MacBooków z Apple Silicon. Wsparcie ROS 2: tier-3 (community supported) dla macOS, ROS 2 Humble i Jazzy można zainstalować przez: Homebrew ('brew install ros-humble' przez tap), RoboStack (conda-forge – najwygodniejsza metoda: 'conda install -c conda-forge ros-humble-desktop'), budowanie ze źródeł przez colcon. RoboStack/conda-forge jest rekomendowaną metodą instalacji ROS 2 na Apple Silicon macOS. Apple Silicon: unified memory architecture (CPU, GPU i Neural Engine współdzielą pamięć), Metal GPU API (brak CUDA – wymaga PyTorch z Metal Performance Shaders backend), Core ML / Apple Neural Engine dla inference. Ograniczenia: brak wsparcia CUDA (biblioteki NVIDIA CUDA-only nie działają natywnie), Rosetta 2 umożliwia uruchomienie x86_64 binary ale bez pełnej wydajności, niektóre pakiety ROS 2 wymagają patchowania dla macOS. Gazebo/Ignition: dostępne na macOS ARM64. Zastosowanie: deweloperzy piszący i testujący kod ROS 2, symulacje, narzędzia CLI – nie deployment na robot.
Architektura komunikacji usługowej oparta na protokole HTTP z semantyką zasobów (GET, POST, PUT, DELETE, PATCH). Stosowana w cloud robotics i fleet management. Nie nadaje się do sterowania real-time.
Klasa przetwarzania wsadowego lub offline – operacje trwające od kilku minut do godzin lub dni. Brak wymogów latencji – liczy się throughput i poprawność wyniku. Zastosowania: trenowanie modeli foundation (VLA, world models), przetwarzanie dużych zbiorów danych z sensorów, symulacje Monte Carlo, rendering syntetycznych datasetów w Isaac Sim, analiza długoterminowych logów, certyfikacja i walidacja oprogramowania.
Local Workstation oznacza typ wdrożenia, w którym software działa na komputerze lokalnym użytkownika, dewelopera lub operatora, np. laptopie, desktopie lub stacji roboczej.
Containerized oznacza typ wdrożenia, w którym oprogramowanie jest pakowane i uruchamiane w kontenerach, np. Docker lub innych technologiach konteneryzacji, co ułatwia przenoszenie, replikację i zarządzanie zależnościami.
Rodzina licencji: Licencja permisywna
Licencja BSD z trzema klauzulami – rozszerza BSD 2-Clause o trzeci warunek zakazujący używania nazwy organizacji ani nazwisk kontrybutorów do promocji produktów pochodnych bez pisemnej zgody (non-endorsement clause). Zwana też 'New BSD License' lub 'Modified BSD License'.
Oficjalna licencja Unitree SDK2 i Unitree Python SDK2. Powszechna w pakietach ROS 2 i bibliotekach robotycznych. Klauzula non-endorsement chroni reputację oryginalnych twórców przed nieuprawnioną asocjacją z produktami pochodnymi. Praktycznie identyczna z MIT pod względem swobody użytkowania.
Bieżąca seria z poprawkami dla ROS 2 Kilted Kaiju. Lepsze raportowanie błędów PR do rosdistro.
Wsparcie dla Ubuntu Noble 24.04 (ROS 2 Jazzy). Lepsze handling tagów semantic-version.
Wsparcie dla Ubuntu Jammy 22.04 (ROS 2 Humble). Drobne usprawnienia logging.
Wsparcie dla ROS 2 (Foxy, Eloquent). Bloom obsługuje równolegle ROS 1 i ROS 2 — jeden binary, dwie ścieżki kodu.
Wsparcie dla ROS Kinetic. Generator RPM (Fedora/CentOS). Stabilizacja API.
Refaktor dla ROS Indigo, wprowadzenie tracks (śledzenie wielu wersji upstream równolegle), wsparcie pull request workflow do rosdistro.
Pierwsza wersja stworzona w Willow Garage. Wsparcie tylko Debian (dpkg-buildpackage) dla ROS Fuerte.