From 2a3b66b584686ca8f0fd33e08080fa981a557cd6 Mon Sep 17 00:00:00 2001 From: Esteve Fernandez Date: Tue, 12 May 2026 15:59:58 +0100 Subject: [PATCH 1/6] chore: add Turtlebot 4 packages Signed-off-by: Esteve Fernandez --- packages-ignore.yaml | 8 ++ patch/dependencies.yaml | 4 +- patch/ros-humble-depthai.patch | 66 +++++++++ patch/ros-humble-turtlebot4-base.patch | 179 +++++++++++++++++++++++++ robostack.yaml | 12 ++ vinca.yaml | 31 +++++ 6 files changed, 299 insertions(+), 1 deletion(-) create mode 100644 patch/ros-humble-depthai.patch create mode 100644 patch/ros-humble-turtlebot4-base.patch diff --git a/packages-ignore.yaml b/packages-ignore.yaml index eb1a61627..64bf8d5f3 100644 --- a/packages-ignore.yaml +++ b/packages-ignore.yaml @@ -2,6 +2,14 @@ rti-connext-dds-5.3.1: conda-forge: [] +# System service/runtime packages used by TurtleBot 4 setup and GUI launchers. +chrony: + robostack: [] +network-manager: + robostack: [] +qml-module-qtquick-extras: + robostack: [] + # rmw_cyclonedds_cpp: # conda-forge: [] # rviz_ogre_vendor: diff --git a/patch/dependencies.yaml b/patch/dependencies.yaml index 279874584..8d33c3012 100644 --- a/patch/dependencies.yaml +++ b/patch/dependencies.yaml @@ -95,6 +95,8 @@ backward_ros: # binutils is added only on linux to avoid the -liberty library not found in macos # see https://github.com/RoboStack/ros-jazzy/pull/95#issuecomment-3113166166 add_host: ["${{ 'binutils' if linux }}", "${{ 'elfutils' if linux }}", "ros-humble-ament-cmake-libraries"] +depthai: + add_host: ["${{ 'elfutils' if linux }}"] nav2_smac_planner: add_build: ["${{ 'llvm-openmp' if osx }}"] add_host: ["${{ 'llvm-openmp' if osx }}", "ompl", "libode"] @@ -293,4 +295,4 @@ franka_ign_ros2_control: add_run: ["ros-humble-urdf", "ros-humble-kdl-parser", "ros-humble-tf2-geometry-msgs", "ros-humble-tf2-eigen"] lbr_ros2_control: add_host: ["ros-humble-kinematics-interface"] - add_run: ["ros-humble-kinematics-interface"] \ No newline at end of file + add_run: ["ros-humble-kinematics-interface"] diff --git a/patch/ros-humble-depthai.patch b/patch/ros-humble-depthai.patch new file mode 100644 index 000000000..cd4b021f8 --- /dev/null +++ b/patch/ros-humble-depthai.patch @@ -0,0 +1,66 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Esteve Fernandez +Date: Tue, 12 May 2026 14:01:42 +0100 +Subject: [PATCH] fix(depthai): keep Hunter cache in build tree and disable CURL + +Signed-off-by: Esteve Fernandez + +--- + CMakeLists.txt | 2 ++ + shared/depthai-bootloader-shared.cmake | 8 +++++--- + shared/depthai-shared.cmake | 8 +++++--- + 3 files changed, 12 insertions(+), 6 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 049db26..9d7dd37 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -60,6 +60,8 @@ else() + message(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}") + endif() + ++set(HUNTER_ROOT "${CMAKE_BINARY_DIR}/.hunter" CACHE PATH "Hunter package cache") ++set(DEPTHAI_ENABLE_CURL OFF CACHE BOOL "Enable CURL support" FORCE) + include("cmake/HunterGate.cmake") + HunterGate( + URL "https://github.com/cpp-pm/hunter/archive/9d9242b60d5236269f894efd3ddd60a9ca83dd7f.tar.gz" +diff --git a/shared/depthai-bootloader-shared.cmake b/shared/depthai-bootloader-shared.cmake +index c68df9d..4fe9622 100644 +--- a/shared/depthai-bootloader-shared.cmake ++++ b/shared/depthai-bootloader-shared.cmake +@@ -29,9 +29,11 @@ if(GIT_FOUND AND NOT DEPTHAI_DOWNLOADED_SOURCES) + OUTPUT_VARIABLE statusCommit + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE + ) +- string(SUBSTRING ${statusCommit} 0 1 status) +- if("${status}" STREQUAL "-") +- message(FATAL_ERROR "Submodule 'depthai-bootloader-shared' not initialized/updated. Run 'git submodule update --init --recursive' first") ++ if(statusCommit) ++ string(SUBSTRING "${statusCommit}" 0 1 status) ++ if("${status}" STREQUAL "-") ++ message(FATAL_ERROR "Submodule 'depthai-bootloader-shared' not initialized/updated. Run 'git submodule update --init --recursive' first") ++ endif() + endif() + endif() + +-- +2.54.0 +diff --git a/shared/depthai-shared.cmake b/shared/depthai-shared.cmake +index 548253d..713b263 100644 +--- a/shared/depthai-shared.cmake ++++ b/shared/depthai-shared.cmake +@@ -35,9 +35,11 @@ if(GIT_FOUND AND NOT DEPTHAI_DOWNLOADED_SOURCES) + OUTPUT_VARIABLE statusCommit + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE + ) +- string(SUBSTRING ${statusCommit} 0 1 status) +- if("${status}" STREQUAL "-") +- message(FATAL_ERROR "Submodule 'depthai-shared' not initialized/updated. Run 'git submodule update --init --recursive' first") ++ if(statusCommit) ++ string(SUBSTRING "${statusCommit}" 0 1 status) ++ if("${status}" STREQUAL "-") ++ message(FATAL_ERROR "Submodule 'depthai-shared' not initialized/updated. Run 'git submodule update --init --recursive' first") ++ endif() + endif() + endif() + diff --git a/patch/ros-humble-turtlebot4-base.patch b/patch/ros-humble-turtlebot4-base.patch new file mode 100644 index 000000000..86f265546 --- /dev/null +++ b/patch/ros-humble-turtlebot4-base.patch @@ -0,0 +1,179 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Esteve Fernandez +Date: Tue, 12 May 2026 14:02:58 +0100 +Subject: [PATCH] fix(turtlebot4-base): support both libgpiod 1 and 2 + +Signed-off-by: Esteve Fernandez + +--- + CMakeLists.txt | 7 ++++ + include/turtlebot4_base/gpio_interface.hpp | 5 ++- + src/gpio_interface.cpp | 66 ++++++++++++++++++++++++++++++ + 3 files changed, 77 insertions(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 6aeeea9..aeb64b4 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -25,6 +25,12 @@ find_package(std_msgs REQUIRED) + find_package(sensor_msgs REQUIRED) + find_package(turtlebot4_msgs REQUIRED) + find_package(turtlebot4_node REQUIRED) ++find_package(PkgConfig REQUIRED) ++pkg_check_modules(GPIOD REQUIRED libgpiod) ++ ++if(NOT GPIOD_VERSION VERSION_LESS 2.0) ++ add_definitions(-DTURTLEBOT4_BASE_GPIOD_V2) ++endif() + + find_library(gpiod_library NAMES libgpiod.so) + +@@ -32,6 +38,7 @@ find_library(gpiod_library NAMES libgpiod.so) + + include_directories( + include ++ ${GPIOD_INCLUDE_DIRS} + ) + + add_library(${PROJECT_NAME}_lib +diff --git a/include/turtlebot4_base/gpio_interface.hpp b/include/turtlebot4_base/gpio_interface.hpp +index c25317e..b1b27a3 100644 +--- a/include/turtlebot4_base/gpio_interface.hpp ++++ b/include/turtlebot4_base/gpio_interface.hpp +@@ -19,7 +19,6 @@ + #ifndef TURTLEBOT4_BASE__GPIO_INTERFACE_HPP_ + #define TURTLEBOT4_BASE__GPIO_INTERFACE_HPP_ + +-#include + #include + + #include +@@ -56,7 +55,11 @@ private: + + gpiod_chip * chip_; + ++#ifdef TURTLEBOT4_BASE_GPIOD_V2 ++ std::map lines_; ++#else + std::map lines_; ++#endif + }; + + } // namespace turtlebot4_base +diff --git a/src/gpio_interface.cpp b/src/gpio_interface.cpp +index 3127ba3..a21b977 100644 +--- a/src/gpio_interface.cpp ++++ b/src/gpio_interface.cpp +@@ -50,7 +50,16 @@ GpioInterface::GpioInterface(const uint8_t & gpio_chip_number) + */ + void GpioInterface::open_chip() + { ++#ifdef TURTLEBOT4_BASE_GPIOD_V2 ++ std::string gpio_chip_path = gpio_chip_; ++ if (gpio_chip_path.empty() || gpio_chip_path.front() != '/') { ++ gpio_chip_path = "/dev/" + gpio_chip_path; ++ } ++ ++ chip_ = gpiod_chip_open(gpio_chip_path.c_str()); ++#else + chip_ = gpiod_chip_open_by_name(gpio_chip_.c_str()); ++#endif + } + + /** +@@ -59,7 +68,11 @@ void GpioInterface::open_chip() + void GpioInterface::close_chip() + { + for (auto line : lines_) { ++#ifdef TURTLEBOT4_BASE_GPIOD_V2 ++ gpiod_line_request_release(line.second); ++#else + gpiod_line_release(line.second); ++#endif + } + + gpiod_chip_close(chip_); +@@ -70,6 +83,47 @@ void GpioInterface::close_chip() + */ + void GpioInterface::add_line(uint8_t line, GpioInterfaceLineDirection direction) + { ++#ifdef TURTLEBOT4_BASE_GPIOD_V2 ++ unsigned int offset = line; ++ gpiod_request_config * request_config = gpiod_request_config_new(); ++ gpiod_line_config * line_config = gpiod_line_config_new(); ++ gpiod_line_settings * line_settings = gpiod_line_settings_new(); ++ ++ if (request_config == nullptr || line_config == nullptr || line_settings == nullptr) { ++ gpiod_request_config_free(request_config); ++ gpiod_line_config_free(line_config); ++ gpiod_line_settings_free(line_settings); ++ std::cerr << "Failed to configure GPIO Line" << std::endl; ++ return; ++ } ++ ++ if (direction != LINE_DIRECTION_INPUT && direction != LINE_DIRECTION_OUTPUT) { ++ gpiod_request_config_free(request_config); ++ gpiod_line_config_free(line_config); ++ gpiod_line_settings_free(line_settings); ++ std::cerr << "Invalid GPIO Line Direction" << std::endl; ++ return; ++ } ++ ++ gpiod_request_config_set_consumer(request_config, "Turtlebot4"); ++ gpiod_line_settings_set_direction(line_settings, static_cast(direction)); ++ if (direction == LINE_DIRECTION_OUTPUT) { ++ gpiod_line_settings_set_output_value(line_settings, GPIOD_LINE_VALUE_INACTIVE); ++ } ++ gpiod_line_config_add_line_settings(line_config, &offset, 1, line_settings); ++ ++ gpiod_line_request * gpio_line = gpiod_chip_request_lines(chip_, request_config, line_config); ++ ++ gpiod_request_config_free(request_config); ++ gpiod_line_config_free(line_config); ++ gpiod_line_settings_free(line_settings); ++ ++ if (gpio_line != nullptr) { ++ lines_.insert(std::pair(line, gpio_line)); ++ } else { ++ std::cerr << "Invalid GPIO Line" << std::endl; ++ } ++#else + gpiod_line * gpio_line = gpiod_chip_get_line(chip_, line); + + if (gpio_line != nullptr) { +@@ -86,6 +140,7 @@ void GpioInterface::add_line(uint8_t line, GpioInterfaceLineDirection direction) + } else { + std::cerr << "Invalid GPIO Line Direction" << std::endl; + } ++#endif + } + + /** +@@ -93,7 +148,14 @@ void GpioInterface::add_line(uint8_t line, GpioInterfaceLineDirection direction) + */ + void GpioInterface::write(uint8_t line, uint8_t value) + { ++#ifdef TURTLEBOT4_BASE_GPIOD_V2 ++ gpiod_line_request_set_value( ++ lines_[line], ++ line, ++ value ? GPIOD_LINE_VALUE_ACTIVE : GPIOD_LINE_VALUE_INACTIVE); ++#else + gpiod_line_set_value(lines_[line], value); ++#endif + } + + /** +@@ -101,5 +163,9 @@ void GpioInterface::write(uint8_t line, uint8_t value) + */ + uint8_t GpioInterface::read(uint8_t line) + { ++#ifdef TURTLEBOT4_BASE_GPIOD_V2 ++ return static_cast(gpiod_line_request_get_value(lines_[line], line)); ++#else + return gpiod_line_get_value(lines_[line]); ++#endif + } + +-- +2.54.0 diff --git a/robostack.yaml b/robostack.yaml index 2e1cb4180..cc57fc42a 100644 --- a/robostack.yaml +++ b/robostack.yaml @@ -183,6 +183,11 @@ ignition-gazebo6: win64: [libignition-gazebo6] ignition-gui5: robostack: [libignition-gui5] +ignition-gui6: + robostack: + linux: [libignition-gui6, libgl-devel] + osx: [libignition-gui6] + win64: [libignition-gui6] ignition-math6: robostack: [libignition-math6] ignition-msgs5: @@ -191,6 +196,8 @@ ignition-msgs8: robostack: [libignition-msgs8] ignition-msgs7: robostack: [libignition-msgs7] +ignition-plugin: + robostack: [libignition-plugin1] ignition-rendering5: robostack: [libignition-rendering5] ignition-transport8: @@ -323,6 +330,11 @@ libgeos++-dev: robostack: [geos] libgflags-dev: robostack: [gflags] +libgpiod-dev: + robostack: + linux: [libgpiod] + osx: [] + win64: [] libglew-dev: robostack: [glew] libglfw3-dev: diff --git a/vinca.yaml b/vinca.yaml index 267899d5b..44f8f75e8 100644 --- a/vinca.yaml +++ b/vinca.yaml @@ -33,6 +33,12 @@ packages_skip_by_deps: then: - pendulum_control - rttest + - turtlebot4_base + - turtlebot4_bringup + - turtlebot4_diagnostics + - turtlebot4_robot + - turtlebot4_setup + - turtlebot4_tests - tlsf - tlsf_cpp - if: wasm32 @@ -75,6 +81,12 @@ packages_remove_from_deps: then: - pendulum_control - rttest + - turtlebot4_base + - turtlebot4_bringup + - turtlebot4_diagnostics + - turtlebot4_robot + - turtlebot4_setup + - turtlebot4_tests - tlsf - tlsf_cpp - if: wasm32 @@ -234,6 +246,25 @@ packages_select_by_deps: - turtlebot3 - turtlebot3_simulations - turtlebot3_gazebo + - turtlebot4_base + - turtlebot4_bringup + - turtlebot4_cpp_tutorials + - turtlebot4_description + - turtlebot4_desktop + - turtlebot4_diagnostics + - turtlebot4_ignition_bringup + - turtlebot4_ignition_gui_plugins + - turtlebot4_ignition_toolbox + - turtlebot4_msgs + - turtlebot4_navigation + - turtlebot4_node + - turtlebot4_python_tutorials + - turtlebot4_robot + - turtlebot4_setup + - turtlebot4_simulator + - turtlebot4_tests + - turtlebot4_tutorials + - turtlebot4_viz # requested in https://github.com/RoboStack/ros-humble/issues/307 - urdf_tutorial - geometry_tutorials From f231bb44b4acd4e04d37a14b27129fb6884825ab Mon Sep 17 00:00:00 2001 From: Esteve Fernandez Date: Tue, 12 May 2026 22:26:36 +0100 Subject: [PATCH 2/6] fix: address TurtleBot 4 CI failures Skip Humble gz control packages on Windows and make DepthAI use bundled shared sources for CI commit checks. Signed-off-by: Esteve Fernandez --- patch/ros-humble-depthai.patch | 89 +++++++++++++++++++++++++++++----- vinca.yaml | 6 +++ 2 files changed, 84 insertions(+), 11 deletions(-) diff --git a/patch/ros-humble-depthai.patch b/patch/ros-humble-depthai.patch index cd4b021f8..34ed73b2a 100644 --- a/patch/ros-humble-depthai.patch +++ b/patch/ros-humble-depthai.patch @@ -1,18 +1,18 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Esteve Fernandez Date: Tue, 12 May 2026 14:01:42 +0100 -Subject: [PATCH] fix(depthai): keep Hunter cache in build tree and disable CURL +Subject: [PATCH] fix(depthai): make conda builds use bundled release sources Signed-off-by: Esteve Fernandez --- CMakeLists.txt | 2 ++ - shared/depthai-bootloader-shared.cmake | 8 +++++--- - shared/depthai-shared.cmake | 8 +++++--- - 3 files changed, 12 insertions(+), 6 deletions(-) + shared/depthai-bootloader-shared.cmake | 37 ++++++++++++++++++---------------- + shared/depthai-shared.cmake | 35 +++++++++++++++++--------------- + 3 files changed, 41 insertions(+), 33 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt -index 049db26..9d7dd37 100644 +index 109d9da..24d9aff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,6 +60,8 @@ else() @@ -25,10 +25,10 @@ index 049db26..9d7dd37 100644 HunterGate( URL "https://github.com/cpp-pm/hunter/archive/9d9242b60d5236269f894efd3ddd60a9ca83dd7f.tar.gz" diff --git a/shared/depthai-bootloader-shared.cmake b/shared/depthai-bootloader-shared.cmake -index c68df9d..4fe9622 100644 +index d0db905..3bdb1b0 100644 --- a/shared/depthai-bootloader-shared.cmake +++ b/shared/depthai-bootloader-shared.cmake -@@ -29,9 +29,11 @@ if(GIT_FOUND AND NOT DEPTHAI_DOWNLOADED_SOURCES) +@@ -29,25 +29,28 @@ if(GIT_FOUND AND NOT DEPTHAI_DOWNLOADED_SOURCES) OUTPUT_VARIABLE statusCommit ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) @@ -43,13 +43,48 @@ index c68df9d..4fe9622 100644 endif() endif() --- -2.54.0 +- # Get depthai-bootloader-shared current commit +- execute_process( +- COMMAND ${GIT_EXECUTABLE} rev-parse HEAD +- WORKING_DIRECTORY ${DEPTHAI_BOOTLOADER_SHARED_FOLDER} +- RESULT_VARIABLE DEPTHAI_BOOTLOADER_SHARED_COMMIT_RESULT +- OUTPUT_VARIABLE DEPTHAI_BOOTLOADER_SHARED_COMMIT_HASH +- ERROR_QUIET +- OUTPUT_STRIP_TRAILING_WHITESPACE +- ) +- if(${DEPTHAI_BOOTLOADER_SHARED_COMMIT_RESULT} EQUAL 0) +- set(DEPTHAI_BOOTLOADER_SHARED_COMMIT_FOUND TRUE) +- else() +- set(DEPTHAI_BOOTLOADER_SHARED_COMMIT_FOUND FALSE) ++ set(DEPTHAI_BOOTLOADER_SHARED_COMMIT_FOUND FALSE) ++ if(EXISTS "${DEPTHAI_BOOTLOADER_SHARED_FOLDER}/.git") ++ # Release archives include shared sources without a nested Git checkout. ++ execute_process( ++ COMMAND ${GIT_EXECUTABLE} rev-parse HEAD ++ WORKING_DIRECTORY ${DEPTHAI_BOOTLOADER_SHARED_FOLDER} ++ RESULT_VARIABLE DEPTHAI_BOOTLOADER_SHARED_COMMIT_RESULT ++ OUTPUT_VARIABLE DEPTHAI_BOOTLOADER_SHARED_COMMIT_HASH ++ ERROR_QUIET ++ OUTPUT_STRIP_TRAILING_WHITESPACE ++ ) ++ if(DEPTHAI_BOOTLOADER_SHARED_COMMIT_RESULT EQUAL 0) ++ set(DEPTHAI_BOOTLOADER_SHARED_COMMIT_FOUND TRUE) ++ endif() + endif() + endif() + +@@ -56,4 +59,4 @@ foreach(source_file ${DEPTHAI_BOOTLOADER_SHARED_SOURCES}) + if(NOT EXISTS ${source_file}) + message(FATAL_ERROR "depthai-bootloader-shared submodule files missing. Make sure to download prepackaged release instead of \"Source code\" on GitHub. Example: depthai-core-vX.Y.Z.tar.gz") + endif() +-endforeach() +\ No newline at end of file ++endforeach() diff --git a/shared/depthai-shared.cmake b/shared/depthai-shared.cmake -index 548253d..713b263 100644 +index 414e1eb..94a007d 100644 --- a/shared/depthai-shared.cmake +++ b/shared/depthai-shared.cmake -@@ -35,9 +35,11 @@ if(GIT_FOUND AND NOT DEPTHAI_DOWNLOADED_SOURCES) +@@ -35,25 +35,28 @@ if(GIT_FOUND AND NOT DEPTHAI_DOWNLOADED_SOURCES) OUTPUT_VARIABLE statusCommit ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ) @@ -64,3 +99,35 @@ index 548253d..713b263 100644 endif() endif() +- # Get depthai-shared current commit +- execute_process( +- COMMAND ${GIT_EXECUTABLE} rev-parse HEAD +- WORKING_DIRECTORY ${DEPTHAI_SHARED_FOLDER} +- RESULT_VARIABLE DEPTHAI_SHARED_COMMIT_RESULT +- OUTPUT_VARIABLE DEPTHAI_SHARED_COMMIT_HASH +- ERROR_QUIET +- OUTPUT_STRIP_TRAILING_WHITESPACE +- ) +- if(${DEPTHAI_SHARED_COMMIT_RESULT} EQUAL 0) +- set(DEPTHAI_SHARED_COMMIT_FOUND TRUE) +- else() +- set(DEPTHAI_SHARED_COMMIT_FOUND FALSE) ++ set(DEPTHAI_SHARED_COMMIT_FOUND FALSE) ++ if(EXISTS "${DEPTHAI_SHARED_FOLDER}/.git") ++ # Release archives include shared sources without a nested Git checkout. ++ execute_process( ++ COMMAND ${GIT_EXECUTABLE} rev-parse HEAD ++ WORKING_DIRECTORY ${DEPTHAI_SHARED_FOLDER} ++ RESULT_VARIABLE DEPTHAI_SHARED_COMMIT_RESULT ++ OUTPUT_VARIABLE DEPTHAI_SHARED_COMMIT_HASH ++ ERROR_QUIET ++ OUTPUT_STRIP_TRAILING_WHITESPACE ++ ) ++ if(DEPTHAI_SHARED_COMMIT_RESULT EQUAL 0) ++ set(DEPTHAI_SHARED_COMMIT_FOUND TRUE) ++ endif() + endif() + endif() + +-- +2.54.0 diff --git a/vinca.yaml b/vinca.yaml index 44f8f75e8..9c27fef69 100644 --- a/vinca.yaml +++ b/vinca.yaml @@ -75,6 +75,9 @@ packages_skip_by_deps: - ros_ign_gazebo - ros_ign_gazebo_demos - ros_ign_image + - gz_ros2_control + - ign_ros2_control + - ur_simulation_gz packages_remove_from_deps: - if: not linux @@ -123,6 +126,9 @@ packages_remove_from_deps: - ros_ign_gazebo - ros_ign_gazebo_demos - ros_ign_image + - gz_ros2_control + - ign_ros2_control + - ur_simulation_gz packages_select_by_deps: # These are the packages that are build on all platforms, including wasm32 From fccde073aefac55cef0b4818d815973536f0f304 Mon Sep 17 00:00:00 2001 From: Esteve Fernandez Date: Wed, 13 May 2026 11:15:18 +0100 Subject: [PATCH 3/6] fix: export irobot Create symbols on Windows Signed-off-by: Esteve Fernandez --- patch/ros-humble-irobot-create-nodes.patch | 28 ++++++++++++++++++++ patch/ros-humble-irobot-create-toolbox.patch | 28 ++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 patch/ros-humble-irobot-create-nodes.patch create mode 100644 patch/ros-humble-irobot-create-toolbox.patch diff --git a/patch/ros-humble-irobot-create-nodes.patch b/patch/ros-humble-irobot-create-nodes.patch new file mode 100644 index 000000000..fa52a783e --- /dev/null +++ b/patch/ros-humble-irobot-create-nodes.patch @@ -0,0 +1,28 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Esteve Fernandez +Date: Wed, 13 May 2026 09:37:28 +0100 +Subject: [PATCH] fix(irobot-create-nodes): export symbols on Windows + +Signed-off-by: Esteve Fernandez + +--- + CMakeLists.txt | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1bb5609..33c05bf 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -10,6 +10,10 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) + endif() + ++if(WIN32) ++ set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) ++endif() ++ + find_package(ament_cmake REQUIRED) + find_package(angles REQUIRED) + find_package(control_msgs REQUIRED) +-- +2.54.0 diff --git a/patch/ros-humble-irobot-create-toolbox.patch b/patch/ros-humble-irobot-create-toolbox.patch new file mode 100644 index 000000000..ea1037476 --- /dev/null +++ b/patch/ros-humble-irobot-create-toolbox.patch @@ -0,0 +1,28 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Esteve Fernandez +Date: Wed, 13 May 2026 09:34:52 +0100 +Subject: [PATCH] fix(irobot-create-toolbox): export symbols on Windows + +Signed-off-by: Esteve Fernandez + +--- + CMakeLists.txt | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 794be2b..91a9a5d 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -10,6 +10,10 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) + endif() + ++if(WIN32) ++ set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) ++endif() ++ + find_package(ament_cmake REQUIRED) + find_package(ignition-math6 REQUIRED) + find_package(rclcpp REQUIRED) +-- +2.54.0 From 26ed65fd1a80044491e2cec8b7cbdda2590b39c9 Mon Sep 17 00:00:00 2001 From: Esteve Fernandez Date: Wed, 13 May 2026 12:00:08 +0100 Subject: [PATCH 4/6] fix: enable available TurtleBot dependencies Signed-off-by: Esteve Fernandez --- packages-ignore.yaml | 6 +----- robostack.yaml | 10 ++++++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages-ignore.yaml b/packages-ignore.yaml index 64bf8d5f3..3c398a2c4 100644 --- a/packages-ignore.yaml +++ b/packages-ignore.yaml @@ -2,13 +2,9 @@ rti-connext-dds-5.3.1: conda-forge: [] -# System service/runtime packages used by TurtleBot 4 setup and GUI launchers. -chrony: - robostack: [] +# System service/runtime package used by TurtleBot 4 setup. network-manager: robostack: [] -qml-module-qtquick-extras: - robostack: [] # rmw_cyclonedds_cpp: # conda-forge: [] diff --git a/robostack.yaml b/robostack.yaml index cc57fc42a..21b8e41ff 100644 --- a/robostack.yaml +++ b/robostack.yaml @@ -45,6 +45,11 @@ ca-certificates: robostack: [ca-certificates] cargo: robostack: [rust] +chrony: + robostack: + linux: [chrony] + osx: [chrony] + win64: [] clang-format: robostack: [clang-format] clang-tidy: @@ -1050,6 +1055,11 @@ python3-yaml: robostack: [pyyaml] python3-zmq: robostack: [pyzmq] +qml-module-qtquick-extras: + robostack: + linux: [qt-main, libopengl-devel, libgl-devel] + osx: [qt-main] + win64: [qt-main] qt5-image-formats-plugins: robostack: linux: [qt-main, libopengl-devel, libgl-devel] From 86799ce7ccf90c37414930cb88ebe07a9378f54a Mon Sep 17 00:00:00 2001 From: Esteve Fernandez Date: Wed, 13 May 2026 12:57:21 +0100 Subject: [PATCH 5/6] fix: skip Humble Ignition sim packages on Windows Signed-off-by: Esteve Fernandez --- vinca.yaml | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/vinca.yaml b/vinca.yaml index 9c27fef69..62332b2ad 100644 --- a/vinca.yaml +++ b/vinca.yaml @@ -77,6 +77,13 @@ packages_skip_by_deps: - ros_ign_image - gz_ros2_control - ign_ros2_control + - irobot_create_ignition_bringup + - irobot_create_ignition_plugins + - irobot_create_ignition_toolbox + - turtlebot4_ignition_bringup + - turtlebot4_ignition_gui_plugins + - turtlebot4_ignition_toolbox + - turtlebot4_simulator - ur_simulation_gz packages_remove_from_deps: @@ -128,6 +135,13 @@ packages_remove_from_deps: - ros_ign_image - gz_ros2_control - ign_ros2_control + - irobot_create_ignition_bringup + - irobot_create_ignition_plugins + - irobot_create_ignition_toolbox + - turtlebot4_ignition_bringup + - turtlebot4_ignition_gui_plugins + - turtlebot4_ignition_toolbox + - turtlebot4_simulator - ur_simulation_gz packages_select_by_deps: @@ -258,16 +272,12 @@ packages_select_by_deps: - turtlebot4_description - turtlebot4_desktop - turtlebot4_diagnostics - - turtlebot4_ignition_bringup - - turtlebot4_ignition_gui_plugins - - turtlebot4_ignition_toolbox - turtlebot4_msgs - turtlebot4_navigation - turtlebot4_node - turtlebot4_python_tutorials - turtlebot4_robot - turtlebot4_setup - - turtlebot4_simulator - turtlebot4_tests - turtlebot4_tutorials - turtlebot4_viz @@ -484,6 +494,10 @@ packages_select_by_deps: # look to Jazzy or Kilted if you are interested in it, see # https://github.com/RoboStack/ros-humble/pull/320 - ros_gz + - turtlebot4_ignition_bringup + - turtlebot4_ignition_gui_plugins + - turtlebot4_ignition_toolbox + - turtlebot4_simulator # Some nominmax/max macro problems on octomap-server, easy to fix with a bit of time - grid_map # error C2338: static_assert failed: 'N4971 [rand.util.seedseq]/7 requires the value type of the iterator From f4bb06b0d334a3b816849778a43b125a3141fddc Mon Sep 17 00:00:00 2001 From: Esteve Fernandez Date: Wed, 13 May 2026 14:55:54 +0100 Subject: [PATCH 6/6] fix: skip TurtleBot 4 packages on Windows Signed-off-by: Esteve Fernandez --- vinca.yaml | 75 +++++++++++++++++------------------------------------- 1 file changed, 24 insertions(+), 51 deletions(-) diff --git a/vinca.yaml b/vinca.yaml index 62332b2ad..e0808a4c3 100644 --- a/vinca.yaml +++ b/vinca.yaml @@ -33,12 +33,6 @@ packages_skip_by_deps: then: - pendulum_control - rttest - - turtlebot4_base - - turtlebot4_bringup - - turtlebot4_diagnostics - - turtlebot4_robot - - turtlebot4_setup - - turtlebot4_tests - tlsf - tlsf_cpp - if: wasm32 @@ -75,28 +69,12 @@ packages_skip_by_deps: - ros_ign_gazebo - ros_ign_gazebo_demos - ros_ign_image - - gz_ros2_control - - ign_ros2_control - - irobot_create_ignition_bringup - - irobot_create_ignition_plugins - - irobot_create_ignition_toolbox - - turtlebot4_ignition_bringup - - turtlebot4_ignition_gui_plugins - - turtlebot4_ignition_toolbox - - turtlebot4_simulator - - ur_simulation_gz packages_remove_from_deps: - if: not linux then: - pendulum_control - rttest - - turtlebot4_base - - turtlebot4_bringup - - turtlebot4_diagnostics - - turtlebot4_robot - - turtlebot4_setup - - turtlebot4_tests - tlsf - tlsf_cpp - if: wasm32 @@ -133,16 +111,6 @@ packages_remove_from_deps: - ros_ign_gazebo - ros_ign_gazebo_demos - ros_ign_image - - gz_ros2_control - - ign_ros2_control - - irobot_create_ignition_bringup - - irobot_create_ignition_plugins - - irobot_create_ignition_toolbox - - turtlebot4_ignition_bringup - - turtlebot4_ignition_gui_plugins - - turtlebot4_ignition_toolbox - - turtlebot4_simulator - - ur_simulation_gz packages_select_by_deps: # These are the packages that are build on all platforms, including wasm32 @@ -266,21 +234,6 @@ packages_select_by_deps: - turtlebot3 - turtlebot3_simulations - turtlebot3_gazebo - - turtlebot4_base - - turtlebot4_bringup - - turtlebot4_cpp_tutorials - - turtlebot4_description - - turtlebot4_desktop - - turtlebot4_diagnostics - - turtlebot4_msgs - - turtlebot4_navigation - - turtlebot4_node - - turtlebot4_python_tutorials - - turtlebot4_robot - - turtlebot4_setup - - turtlebot4_tests - - turtlebot4_tutorials - - turtlebot4_viz # requested in https://github.com/RoboStack/ros-humble/issues/307 - urdf_tutorial - geometry_tutorials @@ -425,6 +378,30 @@ packages_select_by_deps: - rot-conv - slider-publisher - twist-stamper + + # TurtleBot 4 officially supports Linux only. + - if: linux + then: + - turtlebot4_base + - turtlebot4_bringup + - turtlebot4_cpp_tutorials + - turtlebot4_description + - turtlebot4_desktop + - turtlebot4_diagnostics + - turtlebot4_ignition_bringup + - turtlebot4_ignition_gui_plugins + - turtlebot4_ignition_toolbox + - turtlebot4_msgs + - turtlebot4_navigation + - turtlebot4_node + - turtlebot4_python_tutorials + - turtlebot4_robot + - turtlebot4_setup + - turtlebot4_simulator + - turtlebot4_tests + - turtlebot4_tutorials + - turtlebot4_viz + # These packages are currently only build on Linux, # as trying to build them in the past on macos or Windows resulted in errors, # but probably they can work on all platform with some work @@ -494,10 +471,6 @@ packages_select_by_deps: # look to Jazzy or Kilted if you are interested in it, see # https://github.com/RoboStack/ros-humble/pull/320 - ros_gz - - turtlebot4_ignition_bringup - - turtlebot4_ignition_gui_plugins - - turtlebot4_ignition_toolbox - - turtlebot4_simulator # Some nominmax/max macro problems on octomap-server, easy to fix with a bit of time - grid_map # error C2338: static_assert failed: 'N4971 [rand.util.seedseq]/7 requires the value type of the iterator