From edd4e459835c3949b7bddb9defc4e084684c41b0 Mon Sep 17 00:00:00 2001 From: Marty McFly Bot Date: Fri, 17 Jul 2026 20:22:11 +0000 Subject: [PATCH 1/2] chore: remove ROS Humble support --- .github/workflows/ci.yaml | 17 ++++++----------- Dockerfile | 2 +- .../robotiq_controllers/CMakeLists.txt | 9 --------- .../src/robotiq_activation_controller.cpp | 11 ----------- .../robotiq_driver/CMakeLists.txt | 11 +---------- .../robotiq_driver/hardware_interface.hpp | 5 ----- .../robotiq_driver/src/hardware_interface.cpp | 12 ------------ .../test_robotiq_gripper_hardware_interface.cpp | 6 +----- .../config/control/picknik_ur.ros2_control.yaml | 8 -------- ...avigate_to_clicked_point_with_replanning.xml | 2 +- .../test/objectives_integration_test.py | 3 +-- .../CMakeLists.txt | 9 --------- .../src/protective_stop_manager_node.cpp | 8 -------- 13 files changed, 11 insertions(+), 92 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3d7a2c22b..9fe7fd932 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -111,22 +111,19 @@ jobs: // appends any suffix itself (the `gpu_image_suffix` input was removed // in v0.9.0 / PR #37) — so the suffix must live in `image_ref`. // - // example_ws runs integration jazzy-only (humble is disabled), so the - // map carries only `jazzy`. The default must track what moveit_pro + // example_ws runs integration on Jazzy, so the map carries only + // `jazzy`. The default must track what moveit_pro // actually publishes for jazzy: since the CUDA 13.2 migration // (#19583 fanout), jazzy images carry -cuda13.2-cudnn9 ONLY — the // old -cuda12.6 jazzy variant is no longer built, so a stale default // 404s every `needs:` pull. moveit_pro owns the distro<->CUDA // coupling (its build-matrix exclusion anchors) and is the single // source of truth: on a repository_dispatch its payload overrides - // this value. To re-enable humble: add a `humble` entry here AND to - // integration-test's `ros_distro` matrix. + // this value. let gpu_image_suffixes = { jazzy: '-cuda13.2-cudnn9' }; // The single ros_distro example_ws runs integration on — must match // the `integration-test` matrix / `ros_distros` input below. The - // suffix is selected for THIS distro. If humble is ever re-enabled, - // one `image_ref` template can no longer carry two different - // suffixes across the matrix — switch to per-distro `uses:` calls. + // suffix is selected for this distro. const ACTIVE_DISTRO = 'jazzy'; // Suffix to bake into image_ref. moveit_pro_ci v0.9.0 (PR #37) pulls // image_ref VERBATIM and no longer appends a suffix, so the CUDA @@ -258,8 +255,7 @@ jobs: image_ref: ${{ needs.resolve.outputs.image_ref }} git_ref: ${{ needs.resolve.outputs.git_ref }} config_package: ${{ matrix.config_package }} - # Jazzy-only: humble integration tests are turned off to cut CI cost. - # Drives the reusable workflow's ros_distro matrix (default both distros). + # Drive the reusable workflow's ros_distro matrix explicitly. ros_distros: '["jazzy"]' colcon_test_args: "--executor sequential" # GPU runner + enable_gpu are required so MuJoCo's EGL offscreen @@ -563,8 +559,7 @@ jobs: # publish-and-comment below aggregates every config_package x ros_distro # produced here. config_package: [lab_sim, hangar_sim] - # Jazzy-only: humble integration tests are turned off (see the - # `ros_distros` input on `integration-test`). + # Keep in sync with the `ros_distros` input on `integration-test`. ros_distro: [jazzy] steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 diff --git a/Dockerfile b/Dockerfile index 214c1de2d..54f5f7519 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ # # Specify the MoveIt Pro release to build on top of. -ARG MOVEIT_PRO_BASE_IMAGE=picknikciuser/moveit-studio:${MOVEIT_DOCKER_TAG:-main}-${MOVEIT_ROS_DISTRO:-humble} +ARG MOVEIT_PRO_BASE_IMAGE=picknikciuser/moveit-studio:${MOVEIT_DOCKER_TAG:-main}-${MOVEIT_ROS_DISTRO:-jazzy} ARG USERNAME=moveit-pro-user ARG USER_UID=1000 ARG USER_GID=1000 diff --git a/src/external_dependencies/ros2_robotiq_gripper/robotiq_controllers/CMakeLists.txt b/src/external_dependencies/ros2_robotiq_gripper/robotiq_controllers/CMakeLists.txt index 66bbec6df..c4334bc5a 100644 --- a/src/external_dependencies/ros2_robotiq_gripper/robotiq_controllers/CMakeLists.txt +++ b/src/external_dependencies/ros2_robotiq_gripper/robotiq_controllers/CMakeLists.txt @@ -5,15 +5,6 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) endif() -# Detect ROS distro for API compatibility -if(DEFINED ENV{ROS_DISTRO}) - if("$ENV{ROS_DISTRO}" STREQUAL "jazzy") - add_compile_definitions(ROS_DISTRO_JAZZY) - elseif("$ENV{ROS_DISTRO}" STREQUAL "humble") - add_compile_definitions(ROS_DISTRO_HUMBLE) - endif() -endif() - # find dependencies find_package(ament_cmake REQUIRED) find_package(controller_interface REQUIRED) diff --git a/src/external_dependencies/ros2_robotiq_gripper/robotiq_controllers/src/robotiq_activation_controller.cpp b/src/external_dependencies/ros2_robotiq_gripper/robotiq_controllers/src/robotiq_activation_controller.cpp index d448ae089..699dd5aa3 100644 --- a/src/external_dependencies/ros2_robotiq_gripper/robotiq_controllers/src/robotiq_activation_controller.cpp +++ b/src/external_dependencies/ros2_robotiq_gripper/robotiq_controllers/src/robotiq_activation_controller.cpp @@ -107,7 +107,6 @@ rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn Roboti bool RobotiqActivationController::reactivateGripper(std_srvs::srv::Trigger::Request::SharedPtr /*req*/, std_srvs::srv::Trigger::Response::SharedPtr resp) { -#ifdef ROS_DISTRO_JAZZY std::ignore = command_interfaces_[REACTIVATE_GRIPPER_RESPONSE].set_value(ASYNC_WAITING); std::ignore = command_interfaces_[REACTIVATE_GRIPPER_CMD].set_value(1.0); @@ -116,16 +115,6 @@ bool RobotiqActivationController::reactivateGripper(std_srvs::srv::Trigger::Requ std::this_thread::sleep_for(std::chrono::milliseconds(50)); } resp->success = command_interfaces_[REACTIVATE_GRIPPER_RESPONSE].get_optional().value(); -#else - command_interfaces_[REACTIVATE_GRIPPER_RESPONSE].set_value(ASYNC_WAITING); - command_interfaces_[REACTIVATE_GRIPPER_CMD].set_value(1.0); - - while (command_interfaces_[REACTIVATE_GRIPPER_RESPONSE].get_value() == ASYNC_WAITING) - { - std::this_thread::sleep_for(std::chrono::milliseconds(50)); - } - resp->success = command_interfaces_[REACTIVATE_GRIPPER_RESPONSE].get_value(); -#endif return resp->success; } diff --git a/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/CMakeLists.txt b/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/CMakeLists.txt index 2173b2268..2af40f96c 100644 --- a/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/CMakeLists.txt +++ b/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/CMakeLists.txt @@ -1,4 +1,4 @@ -# See https://docs.ros.org/en/humble/How-To-Guides/Ament-CMake-Documentation.html +# See https://docs.ros.org/en/jazzy/How-To-Guides/Ament-CMake-Documentation.html cmake_minimum_required(VERSION 3.8) project(robotiq_driver LANGUAGES CXX) @@ -10,15 +10,6 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) endif() -# Detect ROS distro for API compatibility -if(DEFINED ENV{ROS_DISTRO}) - if("$ENV{ROS_DISTRO}" STREQUAL "jazzy") - add_compile_definitions(ROS_DISTRO_JAZZY) - elseif("$ENV{ROS_DISTRO}" STREQUAL "humble") - add_compile_definitions(ROS_DISTRO_HUMBLE) - endif() -endif() - find_package(ament_cmake REQUIRED) find_package(hardware_interface REQUIRED) find_package(pluginlib REQUIRED) diff --git a/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/include/robotiq_driver/hardware_interface.hpp b/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/include/robotiq_driver/hardware_interface.hpp index 5ac439574..da4fcb7e2 100644 --- a/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/include/robotiq_driver/hardware_interface.hpp +++ b/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/include/robotiq_driver/hardware_interface.hpp @@ -76,13 +76,8 @@ class RobotiqGripperHardwareInterface : public hardware_interface::SystemInterfa * @returns CallbackReturn::SUCCESS if required data are provided and can be * parsed or CallbackReturn::ERROR if any error happens or data are missing. */ -#ifdef ROS_DISTRO_JAZZY ROBOTIQ_DRIVER_PUBLIC CallbackReturn on_init(const hardware_interface::HardwareComponentInterfaceParams& params) override; -#else - ROBOTIQ_DRIVER_PUBLIC - CallbackReturn on_init(const hardware_interface::HardwareInfo& info) override; -#endif /** * Connect to the hardware. diff --git a/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/src/hardware_interface.cpp b/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/src/hardware_interface.cpp index 45067ca6b..3131741e0 100644 --- a/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/src/hardware_interface.cpp +++ b/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/src/hardware_interface.cpp @@ -72,7 +72,6 @@ RobotiqGripperHardwareInterface::RobotiqGripperHardwareInterface(std::unique_ptr { } -#ifdef ROS_DISTRO_JAZZY hardware_interface::CallbackReturn RobotiqGripperHardwareInterface::on_init(const hardware_interface::HardwareComponentInterfaceParams& params) { RCLCPP_DEBUG(kLogger, "on_init"); @@ -81,17 +80,6 @@ hardware_interface::CallbackReturn RobotiqGripperHardwareInterface::on_init(cons { return CallbackReturn::ERROR; } -#else -hardware_interface::CallbackReturn RobotiqGripperHardwareInterface::on_init(const hardware_interface::HardwareInfo& info) -{ - RCLCPP_DEBUG(kLogger, "on_init"); - - if (hardware_interface::SystemInterface::on_init(info) != CallbackReturn::SUCCESS) - { - return CallbackReturn::ERROR; - } -#endif - // Read parameters. gripper_closed_pos_ = stod(info_.hardware_parameters["gripper_closed_position"]); diff --git a/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/tests/test_robotiq_gripper_hardware_interface.cpp b/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/tests/test_robotiq_gripper_hardware_interface.cpp index b4061d6ac..1198dd8a4 100644 --- a/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/tests/test_robotiq_gripper_hardware_interface.cpp +++ b/src/external_dependencies/ros2_robotiq_gripper/robotiq_driver/tests/test_robotiq_gripper_hardware_interface.cpp @@ -65,7 +65,7 @@ TEST(TestRobotiqGripperHardwareInterface, load_urdf) /dev/ttyUSB0 0.7929 - + 0.7929 @@ -76,12 +76,8 @@ TEST(TestRobotiqGripperHardwareInterface, load_urdf) )"; auto urdf = ros2_control_test_assets::urdf_head + urdf_control_ + ros2_control_test_assets::urdf_tail; -#ifdef ROS_DISTRO_JAZZY hardware_interface::ResourceManager rm(urdf, std::make_shared(RCL_ROS_TIME), rclcpp::get_logger("test_robotiq_gripper_hardware_interface")); -#else - hardware_interface::ResourceManager rm(urdf); -#endif // Check interfaces EXPECT_EQ(1u, rm.system_components_size()); diff --git a/src/hangar_sim/config/control/picknik_ur.ros2_control.yaml b/src/hangar_sim/config/control/picknik_ur.ros2_control.yaml index abdd64463..769a5ca24 100644 --- a/src/hangar_sim/config/control/picknik_ur.ros2_control.yaml +++ b/src/hangar_sim/config/control/picknik_ur.ros2_control.yaml @@ -239,14 +239,6 @@ joint_trajectory_controller: rotational_yaw_joint: p: 2.0 ff_velocity_scale: 1.0 - # The base yaw is a continuous joint that accumulates past +/-pi over a run. Without wraparound the - # velocity controller drives error = command - state literally, so a goal expressed as a 2*pi-shifted - # equivalent of the current heading makes the base spin a full turn the long way (the "pirouette" of - # moveit_pro#19973). Wrapping the error to the shortest path keeps it on the short arc for any goal - # representation. This mitigates the upstream trajectory-representation splice tracked in that issue - # but is the correct configuration for a continuous joint regardless. Humble-specific: Jazzy's - # joint_trajectory_controller detects continuous joints from the URDF and wraps automatically. - angle_wraparound: true constraints: stopped_velocity_tolerance: 0.0 goal_time: 0.0 diff --git a/src/hangar_sim/objectives/navigate_to_clicked_point_with_replanning.xml b/src/hangar_sim/objectives/navigate_to_clicked_point_with_replanning.xml index 9b08e5550..6292d3d16 100644 --- a/src/hangar_sim/objectives/navigate_to_clicked_point_with_replanning.xml +++ b/src/hangar_sim/objectives/navigate_to_clicked_point_with_replanning.xml @@ -31,7 +31,7 @@ diff --git a/src/hangar_sim/test/objectives_integration_test.py b/src/hangar_sim/test/objectives_integration_test.py index 53cd84678..0d6516153 100644 --- a/src/hangar_sim/test/objectives_integration_test.py +++ b/src/hangar_sim/test/objectives_integration_test.py @@ -112,8 +112,7 @@ # reasons. "Teleoperate", # DoTeleoperateAction rejects the goal with no UI subscribed. "Marker Visualization Example", # GetTextFromUser server unavailable headless. - # Jazzy CI-runner flakes (pass on the slower humble runner, intermittent on - # jazzy). Skipped so the suite is deterministic on both distros. + # Intermittent Jazzy CI-runner flakes. Skipped so the suite is deterministic. # # "Solution - Draw Picknik" is the suite's longest objective and sits on # the 90 s execute-timeout boundary on the jazzy runner. When it overruns, diff --git a/src/moveit_pro_kinova_configs/moveit_studio_kinova_pstop_manager/CMakeLists.txt b/src/moveit_pro_kinova_configs/moveit_studio_kinova_pstop_manager/CMakeLists.txt index 76c4050a5..306743b5a 100644 --- a/src/moveit_pro_kinova_configs/moveit_studio_kinova_pstop_manager/CMakeLists.txt +++ b/src/moveit_pro_kinova_configs/moveit_studio_kinova_pstop_manager/CMakeLists.txt @@ -8,15 +8,6 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)") add_compile_options(-Wpedantic) endif() -# Detect ROS distro for API compatibility -if(DEFINED ENV{ROS_DISTRO}) - if("$ENV{ROS_DISTRO}" STREQUAL "jazzy") - add_compile_definitions(ROS_DISTRO_JAZZY) - elseif("$ENV{ROS_DISTRO}" STREQUAL "humble") - add_compile_definitions(ROS_DISTRO_HUMBLE) - endif() -endif() - # find dependencies find_package(ament_cmake REQUIRED) find_package(ament_cmake_ros REQUIRED) diff --git a/src/moveit_pro_kinova_configs/moveit_studio_kinova_pstop_manager/src/protective_stop_manager_node.cpp b/src/moveit_pro_kinova_configs/moveit_studio_kinova_pstop_manager/src/protective_stop_manager_node.cpp index 7c485d50a..a0954c8e7 100644 --- a/src/moveit_pro_kinova_configs/moveit_studio_kinova_pstop_manager/src/protective_stop_manager_node.cpp +++ b/src/moveit_pro_kinova_configs/moveit_studio_kinova_pstop_manager/src/protective_stop_manager_node.cpp @@ -80,11 +80,7 @@ void ProtectiveStopManager::recoverFromProtectiveStop(const std_srvs::srv::Trigg return; } auto deactivate_all_controllers_request = std::make_shared(); -#ifdef ROS_DISTRO_JAZZY deactivate_all_controllers_request->deactivate_controllers = all_controller_names; -#else - deactivate_all_controllers_request->stop_controllers = all_controller_names; -#endif // Use BEST_EFFORT strictness because some controllers may already be inactive, and attempting to stop them while // using STRICT strictness would introduce an unnecessary error. deactivate_all_controllers_request->strictness = SwitchController::Request::BEST_EFFORT; @@ -113,11 +109,7 @@ void ProtectiveStopManager::recoverFromProtectiveStop(const std_srvs::srv::Trigg // This resets the state of the robot controllers to match the state it was in at startup. RCLCPP_INFO_STREAM(kLogger, "Reactivating default controllers..."); auto activate_default_controllers_request = std::make_shared(); -#ifdef ROS_DISTRO_JAZZY activate_default_controllers_request->activate_controllers = active_controller_names; -#else - activate_default_controllers_request->start_controllers = active_controller_names; -#endif // BEST_EFFORT is good enough to put the system back into an operational state without throwing unnecessary errors. activate_default_controllers_request->strictness = SwitchController::Request::BEST_EFFORT; auto activate_default_controllers_future = From 89f90e017957028b8028becbacdcfc236a18910a Mon Sep 17 00:00:00 2001 From: Marty McFly Bot Date: Fri, 17 Jul 2026 20:50:40 +0000 Subject: [PATCH 2/2] chore: move shared Humble removal upstream --- .github/workflows/ci.yaml | 17 +++++++++++------ Dockerfile | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 9fe7fd932..3d7a2c22b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -111,19 +111,22 @@ jobs: // appends any suffix itself (the `gpu_image_suffix` input was removed // in v0.9.0 / PR #37) — so the suffix must live in `image_ref`. // - // example_ws runs integration on Jazzy, so the map carries only - // `jazzy`. The default must track what moveit_pro + // example_ws runs integration jazzy-only (humble is disabled), so the + // map carries only `jazzy`. The default must track what moveit_pro // actually publishes for jazzy: since the CUDA 13.2 migration // (#19583 fanout), jazzy images carry -cuda13.2-cudnn9 ONLY — the // old -cuda12.6 jazzy variant is no longer built, so a stale default // 404s every `needs:` pull. moveit_pro owns the distro<->CUDA // coupling (its build-matrix exclusion anchors) and is the single // source of truth: on a repository_dispatch its payload overrides - // this value. + // this value. To re-enable humble: add a `humble` entry here AND to + // integration-test's `ros_distro` matrix. let gpu_image_suffixes = { jazzy: '-cuda13.2-cudnn9' }; // The single ros_distro example_ws runs integration on — must match // the `integration-test` matrix / `ros_distros` input below. The - // suffix is selected for this distro. + // suffix is selected for THIS distro. If humble is ever re-enabled, + // one `image_ref` template can no longer carry two different + // suffixes across the matrix — switch to per-distro `uses:` calls. const ACTIVE_DISTRO = 'jazzy'; // Suffix to bake into image_ref. moveit_pro_ci v0.9.0 (PR #37) pulls // image_ref VERBATIM and no longer appends a suffix, so the CUDA @@ -255,7 +258,8 @@ jobs: image_ref: ${{ needs.resolve.outputs.image_ref }} git_ref: ${{ needs.resolve.outputs.git_ref }} config_package: ${{ matrix.config_package }} - # Drive the reusable workflow's ros_distro matrix explicitly. + # Jazzy-only: humble integration tests are turned off to cut CI cost. + # Drives the reusable workflow's ros_distro matrix (default both distros). ros_distros: '["jazzy"]' colcon_test_args: "--executor sequential" # GPU runner + enable_gpu are required so MuJoCo's EGL offscreen @@ -559,7 +563,8 @@ jobs: # publish-and-comment below aggregates every config_package x ros_distro # produced here. config_package: [lab_sim, hangar_sim] - # Keep in sync with the `ros_distros` input on `integration-test`. + # Jazzy-only: humble integration tests are turned off (see the + # `ros_distros` input on `integration-test`). ros_distro: [jazzy] steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 diff --git a/Dockerfile b/Dockerfile index 54f5f7519..214c1de2d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ # # Specify the MoveIt Pro release to build on top of. -ARG MOVEIT_PRO_BASE_IMAGE=picknikciuser/moveit-studio:${MOVEIT_DOCKER_TAG:-main}-${MOVEIT_ROS_DISTRO:-jazzy} +ARG MOVEIT_PRO_BASE_IMAGE=picknikciuser/moveit-studio:${MOVEIT_DOCKER_TAG:-main}-${MOVEIT_ROS_DISTRO:-humble} ARG USERNAME=moveit-pro-user ARG USER_UID=1000 ARG USER_GID=1000