Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
206b9f7
Add rmf_dev [skip ci]
Tobias-Fischer Oct 18, 2026
d8c07ef
humble: the rest of the RMF stack for rmf_dev [skip ci]
Tobias-Fischer Oct 19, 2026
c8d2dc4
nlohmann_json_schema_validator_vendor: shared CMake 4 fix for humble …
Tobias-Fischer Oct 19, 2026
8af33ae
pybind11_json_vendor: conda-forge's pybind11_json for every distribut…
Tobias-Fischer Oct 19, 2026
59cdd6f
jazzy: rmf_traffic patch for rmf_dev [skip ci]
Tobias-Fischer Oct 19, 2026
51926ca
rmf_dev: port rolling's RMF fixes to humble and jazzy [skip ci]
Tobias-Fischer Oct 19, 2026
4bceba6
jazzy: rmf_visualization_floorplans and rmf_robot_sim_common with Eig…
Tobias-Fischer Oct 19, 2026
c63f1fc
jazzy: rmf_websocket without Boost.System; drop the duplicate rmf_uti…
Tobias-Fischer Oct 19, 2026
a873a8d
rmf_dev: jazzy rmf_websocket on io_context; drop the visualization_sc…
Tobias-Fischer Oct 19, 2026
3d83a91
rmf_visualization_floorplans: only the Eigen 5 fix [skip ci]
Tobias-Fischer Oct 19, 2026
b84b1f7
jazzy: rmf_fleet_adapter with GCC 15 and on macOS [skip ci]
Tobias-Fischer Oct 19, 2026
45ad918
jazzy: rmf_traffic on macOS [skip ci]
Tobias-Fischer Oct 19, 2026
d837241
jazzy: rmf_traffic tests on macOS too [skip ci]
Tobias-Fischer Oct 19, 2026
7bb50f8
jazzy: rmf_robot_sim_gz_plugins on macOS [skip ci]
Tobias-Fischer Oct 19, 2026
de96bc3
jazzy: rmf_visualization_schedule links OpenSSL [skip ci]
Tobias-Fischer Oct 19, 2026
b13c834
rmf_fleet_adapter_python: build rmf_adapter as a module, not SHARED […
Tobias-Fischer Oct 19, 2026
050505c
rmf_fleet_adapter_python: recipe test that rmf_adapter imports and wo…
Tobias-Fischer Oct 19, 2026
940736e
rmf_fleet_adapter_python: recipe test without newer submodules [skip ci]
Tobias-Fischer Oct 19, 2026
44b58d2
rmf_dev: shared patches where the distributions had the same one [ski…
Tobias-Fischer Oct 19, 2026
13ae6b6
Merge remote-tracking branch 'origin/main' into pr114
Tobias-Fischer Oct 24, 2026
01b3a22
rmf_dev (humble): try the Gazebo Classic plugins on Windows, exclude …
Tobias-Fischer Oct 24, 2026
31ba7a3
rmf_dev on Windows for humble and jazzy; keep the shared patches in e…
Tobias-Fischer Oct 24, 2026
ec11228
rmf_dev on Windows: rmf_traffic_editor, rmf_traffic_examples, rmf_rob…
Tobias-Fischer Oct 24, 2026
ad2e590
nlohmann_json_schema_validator_vendor on Windows (humble, jazzy)
Tobias-Fischer Oct 24, 2026
e654be6
nlohmann_json_schema_validator_vendor (Windows): don't build the vali…
Tobias-Fischer Oct 24, 2026
3da71ef
rmf_building_sim_common and the Gazebo Classic plugins on Windows (hu…
Tobias-Fischer Oct 24, 2026
9a2c1d3
jazzy: rmf_building_sim_gz_plugins on Windows
Tobias-Fischer Oct 24, 2026
25817b3
rmf_dev on Windows: exclude the Gazebo Classic plugins again; jazzy g…
Tobias-Fischer Oct 24, 2026
c68a14b
jazzy: rmf_robot_sim_gz_plugins on Windows without GZ_SIM_VISIBLE on …
Tobias-Fischer Oct 24, 2026
f214aed
rmf_traffic_editor_test_maps on Windows: generate the worlds without …
Tobias-Fischer Oct 24, 2026
0881d28
Merge remote-tracking branch 'origin/main' into HEAD
Tobias-Fischer Oct 25, 2026
cf52e83
rmf_traffic_editor on Windows: GCC warning flags only off MSVC (humbl…
Tobias-Fischer Oct 25, 2026
9cc578c
rmf_traffic_editor on Windows: NOGDI (humble, jazzy)
Tobias-Fischer Oct 25, 2026
1848e0b
rmf_visualization_rviz2_plugins on Windows: iso646.h
Tobias-Fischer Oct 25, 2026
18c06a2
rmf_dev on Windows: rmf_fleet_adapter links yaml-cpp::yaml-cpp (humbl…
Tobias-Fischer Oct 25, 2026
474b14a
rmf_dev on Windows: full_control without optimizations (humble); sche…
Tobias-Fischer Oct 25, 2026
4aa7e0a
rmf_fleet_adapter on Windows (humble, jazzy): without full_control; t…
Tobias-Fischer Oct 25, 2026
e5e3772
rmf_fleet_adapter (humble) on Windows: export the nested Stubbornness…
Tobias-Fischer Oct 25, 2026
0b12de5
rmf_fleet_adapter, rmf_websocket (humble, jazzy) on Windows: install …
Tobias-Fischer Oct 25, 2026
deba2a0
rmf_traffic_ros2, rmf_task_ros2 (humble, jazzy) on Windows: DLLs to b…
Tobias-Fischer Oct 25, 2026
d57cd0e
rmf_utils (humble, jazzy) on Windows: install the DLL to bin
Tobias-Fischer Oct 25, 2026
78bde4a
RMF (lyrical, rolling) on Windows: DLLs to bin; rebuild the published…
Tobias-Fischer Oct 25, 2026
15b5842
rmf_fleet_adapter_python test: temporary DLL diagnostic on Windows
Tobias-Fischer Oct 25, 2026
59b4303
rmf_fleet_adapter_python test: also build a json_validator on Windows…
Tobias-Fischer Oct 25, 2026
b46fbfa
rmf_fleet_adapter_python test: remove the temporary Windows diagnostic
Tobias-Fischer Oct 25, 2026
8a3acb9
Merge main into ports/rmf-humble
Tobias-Fischer Oct 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions distros/humble/patch/dependencies.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,6 @@ py_trees_ros_tutorials:
# PyQt6 (the rqt stack) can't be installed together
remove_run: ["pyqt", "pyqt-builder"]
add_run: ["pyqt6"]
pybind11_json_vendor:
add_host: ["pybind11_json"]
add_run: ["pybind11_json"]
python_qt_binding:
# pyside2 has no python 3.14 build; port to PyQt6 instead.
remove_host: ["qt-main", "pyqt"]
Expand Down
27 changes: 27 additions & 0 deletions distros/humble/patch/ros2-menge-vendor.win.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7b578b1..5475546 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -60,10 +60,21 @@ add_library(

target_include_directories( menge_vendor PUBLIC ${TinyXML_INCLUDE_DIRS} )

-target_link_libraries ( menge_vendor PUBLIC dl PRIVATE ${TinyXML_LIBRARIES} )
+if(WIN32)
+ target_link_libraries ( menge_vendor PRIVATE ${TinyXML_LIBRARIES} )
+else()
+ target_link_libraries ( menge_vendor PUBLIC dl PRIVATE ${TinyXML_LIBRARIES} )
+endif()

set_target_properties( menge_vendor PROPERTIES LINKER_LANGUAGE CXX )

+if(WIN32)
+ # CoreConfig.h exports MENGE_API symbols only with MENGECORE_EXPORTS (dllimport otherwise,
+ # and MSVC rejects defining dllimport static data members); no libdl on Windows
+ # (SharedLibrary.h uses LoadLibrary there).
+ target_compile_definitions( menge_vendor PRIVATE MENGECORE_EXPORTS )
+endif()
+
include(GNUInstallDirs)

ament_export_include_directories(include)
45 changes: 45 additions & 0 deletions distros/humble/patch/ros2-rmf-api-msgs.win.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 27156a0..44d4528 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -83,11 +83,20 @@ install(

# Generate python schemas mode whenever colcon is triggered
message(" Generating schema as py mods")
+# "eval" is a POSIX shell builtin, not a real command -- fails on Windows
+# with "'eval' is not recognized". Pass the command as plain CMake
+# arguments instead of a quoted shell string; portable everywhere.
+# conda-forge's Windows Python is "python.exe", not "python3.exe".
+if(WIN32)
+ set(PY_EXECUTABLE_NAME python)
+else()
+ set(PY_EXECUTABLE_NAME python3)
+endif()
ADD_CUSTOM_TARGET(
py_schemas_gen ALL
- COMMAND eval "python3 generate_py_schemas.py \
- --schemas_dir ${CMAKE_CURRENT_LIST_DIR}/schemas \
- --output_file ${CMAKE_CURRENT_LIST_DIR}/rmf_api_msgs/schemas.py"
+ COMMAND ${PY_EXECUTABLE_NAME} generate_py_schemas.py
+ --schemas_dir ${CMAKE_CURRENT_LIST_DIR}/schemas
+ --output_file ${CMAKE_CURRENT_LIST_DIR}/rmf_api_msgs/schemas.py
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/scripts)

# Generate pydantic models according to schemas
@@ -97,11 +106,11 @@ if(PY_MODELGEN_AVAIL)
message(" Generating py models with 'datamodel-codegen'")
ADD_CUSTOM_TARGET(
py_models_gen ALL
- COMMAND eval "datamodel-codegen \
- --disable-timestamp \
- --input-file-type jsonschema \
- --input ${CMAKE_CURRENT_LIST_DIR}/schemas \
- --output ${CMAKE_CURRENT_LIST_DIR}/rmf_api_msgs/models"
+ COMMAND datamodel-codegen
+ --disable-timestamp
+ --input-file-type jsonschema
+ --input ${CMAKE_CURRENT_LIST_DIR}/schemas
+ --output ${CMAKE_CURRENT_LIST_DIR}/rmf_api_msgs/models
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/scripts)
else()
message(
35 changes: 35 additions & 0 deletions distros/humble/patch/ros2-rmf-battery.win.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b00fb4c..bd84a62 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,6 +12,13 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()

+if(MSVC)
+ # M_PI et al. are non-standard extensions MSVC only defines when this
+ # is set. Used both in rmf_traffic's installed Interpolate.hpp
+ # (consumed here) and in this package's own test_battery_drain.cpp.
+ add_compile_definitions(_USE_MATH_DEFINES)
+endif()
+
if(NOT CMAKE_BUILD_TYPE)
# Use the Release build type by default if the user has not specified one
set(CMAKE_BUILD_TYPE Release)
@@ -36,6 +43,16 @@ add_library(rmf_battery SHARED
${core_lib_srcs}
)

+if(WIN32)
+ # rmf_battery has no dllexport annotations at all. As a shared library
+ # on Windows with nothing explicitly exported, link.exe does not
+ # produce an import .lib, so every consumer fails with LNK1181
+ # "cannot open input file 'rmf_battery.lib'" even though
+ # rmf_battery.dll itself builds fine. Auto-export everything, same
+ # fix used for rmf_utils/rmf_traffic earlier in this package family.
+ set_target_properties(rmf_battery PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
+endif()
+
target_link_libraries(rmf_battery
PUBLIC
rmf_utils::rmf_utils
24 changes: 0 additions & 24 deletions distros/humble/patch/ros2-rmf-building-map-tools.patch

This file was deleted.

17 changes: 17 additions & 0 deletions distros/humble/patch/ros2-rmf-building-sim-common.win.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 19810d4..fd41036 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,12 @@
cmake_minimum_required(VERSION 3.5)
project(rmf_building_sim_common)

+if(MSVC)
+ # Menge's headers include windows.h: without NOMINMAX its min/max macros break
+ # rclcpp's std::numeric_limits<...>::max() (C2589); M_PI needs _USE_MATH_DEFINES
+ add_compile_definitions(NOMINMAX _USE_MATH_DEFINES)
+endif()
+
# Default to C99
if(NOT CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9ffa144..c890ff0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -148,6 +148,9 @@ target_include_directories(crowd_simulator
${rmf_building_sim_common_INCLUDE_DIRS}
)

+# libgazebo and sdformat (macOS links with -undefined error)
+target_link_libraries(crowd_simulator ${GAZEBO_LIBRARIES})
+
###############################
# install stuff
###############################
diff --git a/src/thumbnail_generator.cpp b/src/thumbnail_generator.cpp
index 584a92f..c41c8cf 100644
--- a/src/thumbnail_generator.cpp
+++ b/src/thumbnail_generator.cpp
@@ -21,6 +21,10 @@
#include <boost/program_options.hpp>
#include <ignition/transport/Node.hh>
#include <opencv2/opencv.hpp>
+#if __has_include(<opencv2/geometry.hpp>)
+// OpenCV 5 moved cv::boundingRect to the geometry module
+#include <opencv2/geometry.hpp>
+#endif

#include "gazebo/msgs/msgs.hh"
#include "gazebo/transport/transport.hh"
140 changes: 140 additions & 0 deletions distros/humble/patch/ros2-rmf-fleet-adapter.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
diff --git a/rmf_rxcpp/RxCpp-4.1.0/Rx/v2/src/rxcpp/rx-notification.hpp b/rmf_rxcpp/RxCpp-4.1.0/Rx/v2/src/rxcpp/rx-notification.hpp
index 20e0c69..0fae30f 100644
--- a/rmf_rxcpp/RxCpp-4.1.0/Rx/v2/src/rxcpp/rx-notification.hpp
+++ b/rmf_rxcpp/RxCpp-4.1.0/Rx/v2/src/rxcpp/rx-notification.hpp
@@ -150,7 +150,6 @@ private:
}
on_error_notification(const on_error_notification& o) : ep(o.ep) {}
on_error_notification(const on_error_notification&& o) : ep(std::move(o.ep)) {}
- on_error_notification& operator=(on_error_notification o) { ep = std::move(o.ep); return *this; }
virtual void out(std::ostream& os) const {
os << "on_error(";
os << rxu::what(ep);
diff --git a/src/full_control/main.cpp b/src/full_control/main.cpp
index e979212..6ae1df8 100644
--- a/src/full_control/main.cpp
+++ b/src/full_control/main.cpp
@@ -1039,8 +1039,12 @@ std::shared_ptr<Connections> make_fleet(
request_msg->fleet_name.empty())
return;

- connections->fleet->open_lanes(request_msg->open_lanes);
- connections->fleet->close_lanes(request_msg->close_lanes);
+ connections->fleet->open_lanes(
+ std::vector<std::size_t>(
+ request_msg->open_lanes.begin(), request_msg->open_lanes.end()));
+ connections->fleet->close_lanes(
+ std::vector<std::size_t>(
+ request_msg->close_lanes.begin(), request_msg->close_lanes.end()));

std::unordered_set<std::size_t> newly_closed_lanes;
for (const auto& l : request_msg->close_lanes)
@@ -1093,7 +1097,9 @@ std::shared_ptr<Connections> make_fleet(
requests.push_back(std::move(request));
}
connections->fleet->limit_lane_speeds(requests);
- connections->fleet->remove_speed_limits(request_msg->remove_limits);
+ connections->fleet->remove_speed_limits(
+ std::vector<std::size_t>(
+ request_msg->remove_limits.begin(), request_msg->remove_limits.end()));
});

connections->interrupt_request_sub =
diff --git a/src/rmf_fleet_adapter/LegacyTask.cpp b/src/rmf_fleet_adapter/LegacyTask.cpp
index bdbb184..191d04a 100644
--- a/src/rmf_fleet_adapter/LegacyTask.cpp
+++ b/src/rmf_fleet_adapter/LegacyTask.cpp
@@ -22,7 +22,9 @@

#include <rxcpp/rx-observable.hpp>

+#if defined(__linux__)
#include <malloc.h>
+#endif

namespace rmf_fleet_adapter {

@@ -157,7 +159,9 @@ void LegacyTask::_start_next_phase()
//
// TODO(MXG): Remove this when the planner has been made more
// memory-efficient.
+#if defined(__linux__)
malloc_trim(0);
+#endif

return;
}
diff --git a/src/rmf_fleet_adapter/TaskManager.cpp b/src/rmf_fleet_adapter/TaskManager.cpp
index 6edcf44..e9e8d78 100644
--- a/src/rmf_fleet_adapter/TaskManager.cpp
+++ b/src/rmf_fleet_adapter/TaskManager.cpp
@@ -344,9 +344,9 @@ nlohmann::json& copy_phase_data(
phase_state["category"] = header.category();
phase_state["detail"] = header.detail();
phase_state["original_estimate_millis"] =
- std::max(0l, to_millis(header.original_duration_estimate()).count());
+ std::max<int64_t>(0, to_millis(header.original_duration_estimate()).count());
phase_state["estimate_millis"] =
- std::max(0l, to_millis(snapshot.estimate_remaining_time()).count());
+ std::max<int64_t>(0, to_millis(snapshot.estimate_remaining_time()).count());
phase_state["final_event_id"] = snapshot.final_event()->id();
auto& event_states = phase_state["events"];

@@ -410,7 +410,7 @@ void copy_phase_data(
phase["category"] = header.category();
phase["detail"] = header.detail();
phase["estimate_millis"] =
- std::max(0l, to_millis(header.original_duration_estimate()).count());
+ std::max<int64_t>(0, to_millis(header.original_duration_estimate()).count());
}

//==============================================================================
@@ -484,9 +484,9 @@ void TaskManager::ActiveTask::publish_task_state(TaskManager& mgr)
_state_msg["unix_millis_finish_time"] =
to_millis(finish_estimate.time_since_epoch()).count();
_state_msg["original_estimate_millis"] =
- std::max(0l, to_millis(header.original_duration_estimate()).count());
+ std::max<int64_t>(0, to_millis(header.original_duration_estimate()).count());
_state_msg["estimate_millis"] =
- std::max(0l, to_millis(remaining_time_estimate).count());
+ std::max<int64_t>(0, to_millis(remaining_time_estimate).count());
copy_assignment(_state_msg["assigned_to"], *mgr._context);
_state_msg["status"] =
status_to_string(_task->status_overview());
@@ -1838,7 +1838,7 @@ rmf_task::State TaskManager::_publish_pending_task(
const auto estimate =
pending.finish_state().time().value() - pending.deployment_time();
pending_json["original_estimate_millis"] =
- std::max(0l, to_millis(estimate).count());
+ std::max<int64_t>(0, to_millis(estimate).count());
}
copy_assignment(pending_json["assigned_to"], *_context);
pending_json["status"] = "queued";
diff --git a/src/rmf_fleet_adapter/agv/internal_FleetUpdateHandle.hpp b/src/rmf_fleet_adapter/agv/internal_FleetUpdateHandle.hpp
index 56e8e5a..a27465c 100644
--- a/src/rmf_fleet_adapter/agv/internal_FleetUpdateHandle.hpp
+++ b/src/rmf_fleet_adapter/agv/internal_FleetUpdateHandle.hpp
@@ -73,7 +73,9 @@
#include <iostream>
#include <unordered_set>
#include <optional>
+#if defined(__linux__)
#include <malloc.h>
+#endif

namespace rmf_fleet_adapter {
namespace agv {
@@ -360,7 +362,12 @@ public:
// TODO(MXG): Remove this when the planner has been made more
// memory-efficient.
handle->_pimpl->memory_trim_timer = handle->_pimpl->node->create_wall_timer(
- std::chrono::minutes(5), []() { malloc_trim(0); });
+ std::chrono::minutes(5), []()
+ {
+#if defined(__linux__)
+ malloc_trim(0);
+#endif
+ });

// Create subs and pubs for bidding
auto transient_qos = rclcpp::QoS(10).transient_local();
Loading
Loading