From f9276a81f80d5f2f8fad1bcda724f9c3c216c8b5 Mon Sep 17 00:00:00 2001 From: Neeraj Cherakara Date: Sun, 12 Jul 2026 23:40:01 +0100 Subject: [PATCH 01/18] update vinca.yaml to include moveit_task_constructor_demo --- vinca.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/vinca.yaml b/vinca.yaml index b18bba5..46b8788 100644 --- a/vinca.yaml +++ b/vinca.yaml @@ -99,6 +99,7 @@ packages_select_by_deps: - moveit-ros-control-interface - moveit-ros-trajectory-cache - moveit-servo + - moveit-task-constructor-demo - moveit-visual-tools - nav2_bringup - navigation2 From 01d683af3fbf206fa2c96ed20be6cd6505fafb22 Mon Sep 17 00:00:00 2001 From: Neeraj Cherakara Date: Sun, 12 Jul 2026 23:56:17 +0100 Subject: [PATCH 02/18] add patch for mtc-core --- ...lyrical-moveit-task-constructor-core.patch | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 patch/ros-lyrical-moveit-task-constructor-core.patch diff --git a/patch/ros-lyrical-moveit-task-constructor-core.patch b/patch/ros-lyrical-moveit-task-constructor-core.patch new file mode 100644 index 0000000..3602653 --- /dev/null +++ b/patch/ros-lyrical-moveit-task-constructor-core.patch @@ -0,0 +1,78 @@ +diff --git a/python/bindings/CMakeLists.txt b/python/bindings/CMakeLists.txt +index 26c86ac..d5cd670 100644 +--- a/python/bindings/CMakeLists.txt ++++ b/python/bindings/CMakeLists.txt +@@ -17,6 +17,7 @@ pybind11_add_module(pymoveit_mtc + ) + target_include_directories(pymoveit_mtc PUBLIC $) + target_link_libraries(pymoveit_mtc PUBLIC ${PROJECT_NAME} ${PROJECT_NAME}_stages ${PROJECT_NAME}_python_tools) ++set_target_properties(pymoveit_mtc PROPERTIES CXX_SCAN_FOR_MODULES OFF) + + # install libs + install(TARGETS ${PROJECT_NAME}_python_tools +diff --git a/src/cost_terms.cpp b/src/cost_terms.cpp +index 9ddb94f..9896d36 100644 +--- a/src/cost_terms.cpp ++++ b/src/cost_terms.cpp +@@ -298,8 +298,8 @@ double Clearance::operator()(const SubTrajectory& s, std::string& comment) const + } }; + + auto collision_comment = [=](const auto& distance) { +- return fmt::format(PREFIX + "allegedly valid solution collides between '{}' and '{}'", distance.link_names[0], +- distance.link_names[1]); ++ return fmt::format(fmt::runtime(PREFIX + "allegedly valid solution collides between '{}' and '{}'"), ++ distance.link_names[0], distance.link_names[1]); + }; + + double distance{ 0.0 }; +@@ -313,10 +313,10 @@ double Clearance::operator()(const SubTrajectory& s, std::string& comment) const + } + distance = distance_data.distance; + if (!cumulative) +- comment = fmt::format(PREFIX + "distance {} between '{}' and '{}'", distance, distance_data.link_names[0], +- distance_data.link_names[1]); ++ comment = fmt::format(fmt::runtime(PREFIX + "distance {} between '{}' and '{}'"), distance, ++ distance_data.link_names[0], distance_data.link_names[1]); + else +- comment = fmt::format(PREFIX + "cumulative distance {}", distance); ++ comment = fmt::format(fmt::runtime(PREFIX + "cumulative distance {}"), distance); + } else { // check trajectory + for (size_t i = 0; i < s.trajectory()->getWayPointCount(); ++i) { + auto distance_data = check_distance(state, s.trajectory()->getWayPoint(i)); +@@ -327,7 +327,7 @@ double Clearance::operator()(const SubTrajectory& s, std::string& comment) const + distance += distance_data.distance; + } + distance /= s.trajectory()->getWayPointCount(); +- comment = fmt::format(PREFIX + "average{} distance: {}", (cumulative ? " cumulative" : ""), distance); ++ comment = fmt::format(fmt::runtime(PREFIX + "average{} distance: {}"), (cumulative ? " cumulative" : ""), distance); + } + + return distance_to_cost(distance); +diff --git a/src/properties.cpp b/src/properties.cpp +index 8c001de..6fd0217 100644 +--- a/src/properties.cpp ++++ b/src/properties.cpp +@@ -38,6 +38,7 @@ + + #include + #include ++#include + #include + #include + #include +diff --git a/src/stage.cpp b/src/stage.cpp +index b64ce0a..a9eb8a0 100644 +--- a/src/stage.cpp ++++ b/src/stage.cpp +@@ -909,8 +909,9 @@ bool Connecting::compatible(const InterfaceState& from_state, const InterfaceSta + const planning_scene::PlanningSceneConstPtr& from = from_state.scene(); + const planning_scene::PlanningSceneConstPtr& to = to_state.scene(); + +- auto false_with_debug = [](auto... args) { +- RCLCPP_DEBUG_STREAM(rclcpp::get_logger("Connecting"), fmt::format(args...)); ++ auto false_with_debug = [](fmt::string_view format_str, auto&&... args) { ++ RCLCPP_DEBUG_STREAM(rclcpp::get_logger("Connecting"), ++ fmt::vformat(format_str, fmt::make_format_args(args...))); + return false; + }; + From 65a9c0dadb7f1b20e64d86aab84e3561e8a538a8 Mon Sep 17 00:00:00 2001 From: Neeraj Cherakara Date: Sun, 12 Jul 2026 23:56:37 +0100 Subject: [PATCH 03/18] add patch for mtc-visualization --- ...oveit-task-constructor-visualization.patch | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 patch/ros-lyrical-moveit-task-constructor-visualization.patch diff --git a/patch/ros-lyrical-moveit-task-constructor-visualization.patch b/patch/ros-lyrical-moveit-task-constructor-visualization.patch new file mode 100644 index 0000000..18574d7 --- /dev/null +++ b/patch/ros-lyrical-moveit-task-constructor-visualization.patch @@ -0,0 +1,47 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index a220b3a..ae44a55 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -19,10 +19,10 @@ find_package(rviz_ogre_vendor REQUIRED) + add_definitions(-DBOOST_MATH_DISABLE_FLOAT128) + + # Qt Stuff +-find_package(Qt5 REQUIRED COMPONENTS Core Widgets) +-set(QT_LIBRARIES Qt5::Widgets) ++find_package(Qt6 REQUIRED COMPONENTS Core Widgets) ++set(QT_LIBRARIES Qt6::Widgets) + macro(qt_wrap_ui) +- qt5_wrap_ui(${ARGN}) ++ qt6_wrap_ui(${ARGN}) + endmacro() + + set(CMAKE_INCLUDE_CURRENT_DIR ON) +diff --git a/motion_planning_tasks/src/remote_task_model.cpp b/motion_planning_tasks/src/remote_task_model.cpp +index d28cfd6..8926cba 100644 +--- a/motion_planning_tasks/src/remote_task_model.cpp ++++ b/motion_planning_tasks/src/remote_task_model.cpp +@@ -526,7 +526,7 @@ QVariant RemoteSolutionModel::data(const QModelIndex& index, int role) const { + return item.creation_rank; + case 1: + if (std::isinf(item.cost)) +- return tr(u8"∞"); ++ return tr("∞"); + if (std::isnan(item.cost)) + return QVariant(); + return QLocale().toString(item.cost, 'f', 4); +diff --git a/motion_planning_tasks/src/task_list_model.cpp b/motion_planning_tasks/src/task_list_model.cpp +index 3cd6466..7c471d5 100644 +--- a/motion_planning_tasks/src/task_list_model.cpp ++++ b/motion_planning_tasks/src/task_list_model.cpp +@@ -61,9 +61,9 @@ QVariant TaskListModel::horizontalHeader(int column, int role) { + case 0: + return tr("name"); + case 1: +- return tr(u8"✓"); ++ return tr("✓"); + case 2: +- return tr(u8"✗"); ++ return tr("✗"); + case 3: + return tr("time"); + } From ea68d2ea04a8230db554848be13e6a552cbf3853 Mon Sep 17 00:00:00 2001 From: Tobias Fischer Date: Mon, 13 Jul 2026 15:53:51 +1000 Subject: [PATCH 04/18] Add PYTHONIOENCODING environment variable --- .github/workflows/testpr.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/testpr.yml b/.github/workflows/testpr.yml index feb4296..b6fd69b 100644 --- a/.github/workflows/testpr.yml +++ b/.github/workflows/testpr.yml @@ -4,6 +4,7 @@ on: env: ROS_VERSION: 2 + PYTHONIOENCODING: utf-8 # Change to 'true' to enable the cache upload as artifacts SAVE_CACHE_AS_ARTIFACT: 'true' # Change to 'true' to ignore cache and force a full rebuild, but please restore to 'false' before merging From 5b4728dd57d5632da917394e577b3637b6aaa014 Mon Sep 17 00:00:00 2001 From: Tobias Fischer Date: Tue, 14 Jul 2026 07:32:53 +1000 Subject: [PATCH 05/18] Rename module to module_ for C++20 compatibility Updated the import statements to use 'module_' instead of 'module' for C++20 compatibility. --- patch/ros-lyrical-py-binding-tools.patch | 41 ++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 patch/ros-lyrical-py-binding-tools.patch diff --git a/patch/ros-lyrical-py-binding-tools.patch b/patch/ros-lyrical-py-binding-tools.patch new file mode 100644 index 0000000..9060a24 --- /dev/null +++ b/patch/ros-lyrical-py-binding-tools.patch @@ -0,0 +1,41 @@ +From 954461c74ba6c3c7298c628e1ef5b8daaed694fc Mon Sep 17 00:00:00 2001 +From: Tobias Fischer +Date: Tue, 14 Jul 2026 07:31:29 +1000 +Subject: [PATCH] Rename module to module_ for C++20 compatibility + +This has been changed in pybind11 a while ago as far as I know +--- + include/py_binding_tools/ros_msg_typecasters.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/include/py_binding_tools/ros_msg_typecasters.h b/include/py_binding_tools/ros_msg_typecasters.h +index 30c5edc..b85fd21 100644 +--- a/include/py_binding_tools/ros_msg_typecasters.h ++++ b/include/py_binding_tools/ros_msg_typecasters.h +@@ -102,7 +102,7 @@ struct type_caster + // convert from rclcpp::Time to rclpy::Time + static handle cast(const rclcpp::Time& src, return_value_policy /* policy */, handle /* parent */) + { +- object Time = module::import("rclpy.time").attr("Time"); ++ object Time = module_::import("rclpy.time").attr("Time"); + object ClockType = Time().attr("clock_type").attr("__class__"); + + return Time(arg("nanoseconds") = src.nanoseconds(), +@@ -131,7 +131,7 @@ struct RosMsgTypeCaster + object cls = py_binding_tools::createMessageClass(rosidl_generator_traits::name()); + + // deserialize into python object +- module rclpy = module::import("rclpy.serialization"); ++ module_ rclpy = module_::import("rclpy.serialization"); + object msg = rclpy.attr("deserialize_message")(buf, cls); + + return msg.release(); +@@ -145,7 +145,7 @@ struct RosMsgTypeCaster + return false; + + // serialize src into python buffer +- module rclpy = module::import("rclpy.serialization"); ++ module_ rclpy = module_::import("rclpy.serialization"); + bytes buf = rclpy.attr("serialize_message")(src); + + // deserialize into C++ object From dae75917956c4f7bd0e44743a9f6b9d5104b147a Mon Sep 17 00:00:00 2001 From: Tobias Fischer Date: Tue, 14 Jul 2026 07:40:50 +1000 Subject: [PATCH 06/18] Rename module for C++20 compatibility Updated CMakeLists.txt and header files for C++20 compatibility by renaming module and exporting functions correctly. --- patch/ros-lyrical-py-binding-tools.patch | 90 +++++++++++++++++++++--- 1 file changed, 80 insertions(+), 10 deletions(-) diff --git a/patch/ros-lyrical-py-binding-tools.patch b/patch/ros-lyrical-py-binding-tools.patch index 9060a24..36311b7 100644 --- a/patch/ros-lyrical-py-binding-tools.patch +++ b/patch/ros-lyrical-py-binding-tools.patch @@ -1,13 +1,83 @@ -From 954461c74ba6c3c7298c628e1ef5b8daaed694fc Mon Sep 17 00:00:00 2001 -From: Tobias Fischer -Date: Tue, 14 Jul 2026 07:31:29 +1000 -Subject: [PATCH] Rename module to module_ for C++20 compatibility - -This has been changed in pybind11 a while ago as far as I know ---- - include/py_binding_tools/ros_msg_typecasters.h | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - +diff --git a/CMakeLists.txt b/CMakeLists.txt +index e940609..a743203 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,6 +1,8 @@ + cmake_minimum_required(VERSION 3.5) + project(py_binding_tools) + ++set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) ++ + find_package(ament_cmake REQUIRED) + find_package(ament_cmake_python REQUIRED) + find_package(rclcpp REQUIRED) +@@ -13,9 +15,14 @@ add_library(${PROJECT_NAME} SHARED + src/ros_msg_typecasters.cpp + src/initializer.cpp + ) ++ ++include(GenerateExportHeader) ++generate_export_header(${PROJECT_NAME}) ++ + target_include_directories(${PROJECT_NAME} + PUBLIC + $ ++ $ + $) + ament_target_dependencies(${PROJECT_NAME} rclcpp geometry_msgs pybind11) + +@@ -34,6 +41,8 @@ install( + DESTINATION include/${PROJECT_NAME} + ) + ++install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_export.h DESTINATION include) ++ + _ament_cmake_python_register_environment_hook() + + pybind11_add_module(rclcpp src/rclcpp.cpp) +diff --git a/include/py_binding_tools/initializer.h b/include/py_binding_tools/initializer.h +index c42e81a..9c23de2 100644 +--- a/include/py_binding_tools/initializer.h ++++ b/include/py_binding_tools/initializer.h +@@ -36,6 +36,8 @@ + #include + #include + ++#include ++ + namespace py_binding_tools + { + /** The constructor of this class ensures that rclcpp::init() has been called. +@@ -48,7 +50,7 @@ public: + ~RCLInitializer(); + }; + +-void init(const std::vector& args); +-void shutdown(); ++void PY_BINDING_TOOLS_EXPORT init(const std::vector& args); ++void PY_BINDING_TOOLS_EXPORT shutdown(); + + } // namespace py_binding_tools +diff --git a/src/rclcpp.cpp b/src/rclcpp.cpp +index 50232c9..794421d 100644 +--- a/src/rclcpp.cpp ++++ b/src/rclcpp.cpp +@@ -38,12 +38,14 @@ + #include + #include + ++#include ++ + namespace py = pybind11; + using namespace py_binding_tools; + + namespace py_binding_tools + { +-void add_node(const rclcpp::Node::SharedPtr& node); ++void PY_BINDING_TOOLS_EXPORT add_node(const rclcpp::Node::SharedPtr& node); + } + + namespace diff --git a/include/py_binding_tools/ros_msg_typecasters.h b/include/py_binding_tools/ros_msg_typecasters.h index 30c5edc..b85fd21 100644 --- a/include/py_binding_tools/ros_msg_typecasters.h From 16f5d9d263f2e18d1769169ef3a4d07c8b9fc19e Mon Sep 17 00:00:00 2001 From: Neeraj Cherakara <35414531+iamnambiar@users.noreply.github.com> Date: Tue, 14 Jul 2026 20:59:03 +0000 Subject: [PATCH 07/18] rename uint to uint32_t --- ...lyrical-moveit-task-constructor-core.patch | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/patch/ros-lyrical-moveit-task-constructor-core.patch b/patch/ros-lyrical-moveit-task-constructor-core.patch index 3602653..fc634d5 100644 --- a/patch/ros-lyrical-moveit-task-constructor-core.patch +++ b/patch/ros-lyrical-moveit-task-constructor-core.patch @@ -1,3 +1,29 @@ +diff --git a/include/moveit/task_constructor/introspection.h b/include/moveit/task_constructor/introspection.h +index cf4dfb7..b7e26d5 100644 +--- a/include/moveit/task_constructor/introspection.h ++++ b/include/moveit/task_constructor/introspection.h +@@ -111,7 +111,7 @@ private: + /// retrieve or set id of given stage + uint32_t stageId(const moveit::task_constructor::Stage* const s); + /// retrieve solution with given id +- const SolutionBase* solutionFromId(uint id) const; ++ const SolutionBase* solutionFromId(uint32_t id) const; + }; + } // namespace task_constructor + } // namespace moveit +diff --git a/include/moveit/task_constructor/properties.h b/include/moveit/task_constructor/properties.h +index e217ad6..708a2fb 100644 +--- a/include/moveit/task_constructor/properties.h ++++ b/include/moveit/task_constructor/properties.h +@@ -90,7 +90,7 @@ public: + /// exception thrown when trying to set a value not matching the declared type + class type_error; + +- using SourceFlags = uint; ++ using SourceFlags = uint32_t; + /// function callback used to initialize property value from another PropertyMap + using InitializerFunction = std::function; + diff --git a/python/bindings/CMakeLists.txt b/python/bindings/CMakeLists.txt index 26c86ac..d5cd670 100644 --- a/python/bindings/CMakeLists.txt @@ -48,6 +74,19 @@ index 9ddb94f..9896d36 100644 } return distance_to_cost(distance); +diff --git a/src/introspection.cpp b/src/introspection.cpp +index d938f95..85292d9 100644 +--- a/src/introspection.cpp ++++ b/src/introspection.cpp +@@ -214,7 +214,7 @@ void Introspection::publishAllSolutions(bool wait) { + }; + } + +-const SolutionBase* Introspection::solutionFromId(uint id) const { ++const SolutionBase* Introspection::solutionFromId(uint32_t id) const { + auto it = impl->id_solution_bimap_.left.find(id); + if (it == impl->id_solution_bimap_.left.end()) + return nullptr; diff --git a/src/properties.cpp b/src/properties.cpp index 8c001de..6fd0217 100644 --- a/src/properties.cpp @@ -60,6 +99,28 @@ index 8c001de..6fd0217 100644 #include #include #include +diff --git a/src/solvers/pipeline_planner.cpp b/src/solvers/pipeline_planner.cpp +index 9e30131..18e6fb9 100644 +--- a/src/solvers/pipeline_planner.cpp ++++ b/src/solvers/pipeline_planner.cpp +@@ -59,7 +59,7 @@ PipelinePlanner::PipelinePlanner( + , stopping_criterion_callback_(stopping_criterion_callback) + , solution_selection_function_(solution_selection_function) { + // Declare properties of the MotionPlanRequest +- properties().declare("num_planning_attempts", 1u, "number of planning attempts"); ++ properties().declare("num_planning_attempts", 1u, "number of planning attempts"); + properties().declare( + "workspace_parameters", moveit_msgs::msg::WorkspaceParameters(), "allowed workspace of mobile base?"); + +@@ -182,7 +182,7 @@ PlannerInterface::Result PipelinePlanner::plan(const planning_scene::PlanningSce + request.planner_id = planner_id; + request.allowed_planning_time = timeout; + request.start_state.is_diff = true; // we don't specify an extra start state +- request.num_planning_attempts = properties().get("num_planning_attempts"); ++ request.num_planning_attempts = properties().get("num_planning_attempts"); + request.max_velocity_scaling_factor = properties().get("max_velocity_scaling_factor"); + request.max_acceleration_scaling_factor = properties().get("max_acceleration_scaling_factor"); + request.workspace_parameters = properties().get("workspace_parameters"); diff --git a/src/stage.cpp b/src/stage.cpp index b64ce0a..a9eb8a0 100644 --- a/src/stage.cpp From f2fa0aae6f61cf4c0a035997d5d99169ccab6e77 Mon Sep 17 00:00:00 2001 From: Neeraj Cherakara <35414531+iamnambiar@users.noreply.github.com> Date: Tue, 14 Jul 2026 21:15:19 +0000 Subject: [PATCH 08/18] replace __attribute__((unused)) with [[maybe_unused]] --- .../ros-lyrical-moveit-task-constructor-core.patch | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/patch/ros-lyrical-moveit-task-constructor-core.patch b/patch/ros-lyrical-moveit-task-constructor-core.patch index fc634d5..40f736e 100644 --- a/patch/ros-lyrical-moveit-task-constructor-core.patch +++ b/patch/ros-lyrical-moveit-task-constructor-core.patch @@ -36,6 +36,20 @@ index 26c86ac..d5cd670 100644 # install libs install(TARGETS ${PROJECT_NAME}_python_tools +diff --git a/src/container.cpp b/src/container.cpp +index febc00f..fded044 100644 +--- a/src/container.cpp ++++ b/src/container.cpp +@@ -57,8 +57,7 @@ namespace moveit { + namespace task_constructor { + + // for debugging of how children interfaces evolve over time +-__attribute__((unused)) // silent unused-function warning +-static void ++[[maybe_unused]] static void + printChildrenInterfaces(const ContainerBasePrivate& container, bool success, const Stage& creator, + std::ostream& os = std::cerr) { + static unsigned int id = 0; diff --git a/src/cost_terms.cpp b/src/cost_terms.cpp index 9ddb94f..9896d36 100644 --- a/src/cost_terms.cpp From f4211e49ca991c54ed495a59eb6f9d3fab40cec3 Mon Sep 17 00:00:00 2001 From: Tobias Fischer Date: Wed, 15 Jul 2026 08:40:05 +1000 Subject: [PATCH 09/18] Update introspection.cpp with additional includes --- patch/ros-lyrical-moveit-task-constructor-core.patch | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/patch/ros-lyrical-moveit-task-constructor-core.patch b/patch/ros-lyrical-moveit-task-constructor-core.patch index 40f736e..c94baa1 100644 --- a/patch/ros-lyrical-moveit-task-constructor-core.patch +++ b/patch/ros-lyrical-moveit-task-constructor-core.patch @@ -92,6 +92,17 @@ diff --git a/src/introspection.cpp b/src/introspection.cpp index d938f95..85292d9 100644 --- a/src/introspection.cpp +++ b/src/introspection.cpp +@@ -49,6 +49,10 @@ + #include + #include + ++#ifdef _WIN32 ++#include ++#endif ++ + namespace ros { + namespace names { + bool isValidCharInName(char c); // unfortunately this is not declared in ros/names.h @@ -214,7 +214,7 @@ void Introspection::publishAllSolutions(bool wait) { }; } From 3498255b8886f89eaa43914a76ca7b152090d93f Mon Sep 17 00:00:00 2001 From: Neeraj Cherakara <35414531+iamnambiar@users.noreply.github.com> Date: Tue, 14 Jul 2026 23:10:06 +0000 Subject: [PATCH 10/18] update interospection to get hostname and pid using winsock2 --- ...lyrical-moveit-task-constructor-core.patch | 48 +++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/patch/ros-lyrical-moveit-task-constructor-core.patch b/patch/ros-lyrical-moveit-task-constructor-core.patch index c94baa1..acf341a 100644 --- a/patch/ros-lyrical-moveit-task-constructor-core.patch +++ b/patch/ros-lyrical-moveit-task-constructor-core.patch @@ -89,21 +89,53 @@ index 9ddb94f..9896d36 100644 return distance_to_cost(distance); diff --git a/src/introspection.cpp b/src/introspection.cpp -index d938f95..85292d9 100644 +index d938f95..35d502a 100644 --- a/src/introspection.cpp +++ b/src/introspection.cpp -@@ -49,6 +49,10 @@ - #include +@@ -50,6 +50,14 @@ #include + #include +#ifdef _WIN32 -+#include ++ #include ++ #include ++ #pragma comment(lib, "ws2_32.lib") ++#else ++ #include +#endif + - namespace ros { - namespace names { - bool isValidCharInName(char c); // unfortunately this is not declared in ros/names.h -@@ -214,7 +214,7 @@ void Introspection::publishAllSolutions(bool wait) { + static auto LOGGER = rclcpp::get_logger("introspection"); + + namespace moveit { +@@ -60,12 +68,26 @@ std::string getTaskId(const TaskPrivate* task) { + static const std::string ALLOWED = "_/"; + std::ostringstream oss; + char our_hostname[256] = { 0 }; ++ #ifdef _WIN32 ++ { ++ static bool wsa_initialised = false; ++ if (wsa_initialised) { ++ WSADATA wsaData; ++ WSAStartup(MAKEWORD(2, 2), &wsaData); ++ wsa_initialised = true; ++ } ++ } ++ #endif + gethostname(our_hostname, sizeof(our_hostname) - 1); + // Replace all invalid ROS-name chars with an underscore + std::replace_if( + our_hostname, our_hostname + strlen(our_hostname), + [](const char ch) { return !rcutils_isalnum_no_locale(ch) && ALLOWED.find(ch) == std::string::npos; }, '_'); +- oss << our_hostname << "_" << getpid() << "_" << reinterpret_cast(task); ++ #ifdef _WIN32 ++ oss << our_hostname << "_" << _getpid() << "_" << reinterpret_cast(task); ++ # else ++ oss << our_hostname << "_" << getpid() << "_" << reinterpret_cast(task); ++ #endif + return oss.str(); + } + } // namespace +@@ -214,7 +236,7 @@ void Introspection::publishAllSolutions(bool wait) { }; } From 2fce518cf2cdb351a8f8cae87de50e3b10c6686b Mon Sep 17 00:00:00 2001 From: Neeraj C Date: Fri, 24 Jul 2026 22:57:32 +0100 Subject: [PATCH 11/18] rename uint to uint32_t --- ...lyrical-moveit-task-constructor-core.patch | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/patch/ros-lyrical-moveit-task-constructor-core.patch b/patch/ros-lyrical-moveit-task-constructor-core.patch index acf341a..21acb86 100644 --- a/patch/ros-lyrical-moveit-task-constructor-core.patch +++ b/patch/ros-lyrical-moveit-task-constructor-core.patch @@ -194,3 +194,44 @@ index b64ce0a..a9eb8a0 100644 return false; }; +diff --git a/src/stages/generate_place_pose.cpp b/src/stages/generate_place_pose.cpp +index 76b9559..042882d 100644 +--- a/src/stages/generate_place_pose.cpp ++++ b/src/stages/generate_place_pose.cpp +@@ -109,11 +109,11 @@ void GeneratePlacePose::compute() { + scene->getTransforms().transformPose(pose_msg.header.frame_id, target_pose, target_pose); + + // spawn the nominal target object pose, considering flip about z and rotations about z-axis +- auto spawner = [&s, &scene, &ik_frame, this](const Eigen::Isometry3d& nominal, uint z_flips, uint z_rotations = 10) { +- for (uint flip = 0; flip <= z_flips; ++flip) { ++ auto spawner = [&s, &scene, &ik_frame, this](const Eigen::Isometry3d& nominal, uint32_t z_flips, uint32_t z_rotations = 10) { ++ for (uint32_t flip = 0; flip <= z_flips; ++flip) { + // flip about object's x-axis + Eigen::Isometry3d object = nominal * Eigen::AngleAxisd(flip * M_PI, Eigen::Vector3d::UnitX()); +- for (uint i = 0; i < z_rotations; ++i) { ++ for (uint32_t i = 0; i < z_rotations; ++i) { + // rotate object at target pose about world's z-axis + Eigen::Vector3d pos = object.translation(); + object.pretranslate(-pos) +@@ -139,7 +139,7 @@ void GeneratePlacePose::compute() { + } + }; + +- uint z_flips = props.get("allow_z_flip") ? 1 : 0; ++ uint32_t z_flips = props.get("allow_z_flip") ? 1 : 0; + if (object && object->getShapes().size() == 1) { + switch (object->getShapes()[0]->type) { + case shapes::CYLINDER: +diff --git a/test/test_stage.cpp b/test/test_stage.cpp +index 1c0553c..39bfa92 100644 +--- a/test/test_stage.cpp ++++ b/test/test_stage.cpp +@@ -36,7 +36,7 @@ TEST(Stage, registerCallbacks) { + StandaloneGeneratorMockup g{ PredefinedCosts::constant(0.0) }; + g.init(getModel()); + +- uint called = 0; ++ uint32_t called = 0; + auto cb = [&called](const SolutionBase& /* s */) { + ++called; + return true; From b05b4b3c3e0f1a7c5a0f72bd3856d5bb46fcb789 Mon Sep 17 00:00:00 2001 From: Neeraj C Date: Fri, 24 Jul 2026 22:58:41 +0100 Subject: [PATCH 12/18] fix fmt and pybind11 bugs --- ...lyrical-moveit-task-constructor-core.patch | 76 ++++++++++++++++--- 1 file changed, 65 insertions(+), 11 deletions(-) diff --git a/patch/ros-lyrical-moveit-task-constructor-core.patch b/patch/ros-lyrical-moveit-task-constructor-core.patch index 21acb86..e9cc914 100644 --- a/patch/ros-lyrical-moveit-task-constructor-core.patch +++ b/patch/ros-lyrical-moveit-task-constructor-core.patch @@ -24,18 +24,19 @@ index e217ad6..708a2fb 100644 /// function callback used to initialize property value from another PropertyMap using InitializerFunction = std::function; -diff --git a/python/bindings/CMakeLists.txt b/python/bindings/CMakeLists.txt -index 26c86ac..d5cd670 100644 ---- a/python/bindings/CMakeLists.txt -+++ b/python/bindings/CMakeLists.txt -@@ -17,6 +17,7 @@ pybind11_add_module(pymoveit_mtc +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 82e9875..147aa7b 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -38,7 +38,7 @@ add_library(${PROJECT_NAME} SHARED + solvers/multi_planner.cpp ) - target_include_directories(pymoveit_mtc PUBLIC $) - target_link_libraries(pymoveit_mtc PUBLIC ${PROJECT_NAME} ${PROJECT_NAME}_stages ${PROJECT_NAME}_python_tools) -+set_target_properties(pymoveit_mtc PROPERTIES CXX_SCAN_FOR_MODULES OFF) - - # install libs - install(TARGETS ${PROJECT_NAME}_python_tools + target_link_libraries(${PROJECT_NAME} +- fmt ++ fmt::fmt + ${moveit_core_TARGETS} + ${moveit_ros_planning_TARGETS} + ${moveit_ros_planning_interface_TARGETS} diff --git a/src/container.cpp b/src/container.cpp index febc00f..fded044 100644 --- a/src/container.cpp @@ -235,3 +236,56 @@ index 1c0553c..39bfa92 100644 auto cb = [&called](const SolutionBase& /* s */) { ++called; return true; +diff --git a/python/bindings/CMakeLists.txt b/python/bindings/CMakeLists.txt +--- a/python/bindings/CMakeLists.txt ++++ b/python/bindings/CMakeLists.txt +@@ -2,8 +2,15 @@ + add_library(${PROJECT_NAME}_python_tools SHARED + ${INCLUDES}/properties.h + src/properties.cpp + ) ++# Force our vendored (smart_holder) pybind11 to be found before any pybind11 ++# pulled in transitively via py_binding_tools, which links against the plain ++# upstream pybind11 package. Mixing the two copies in one translation unit ++# causes duplicate-definition errors, since smart_holder.h only exists in ++# the vendored fork. ++target_include_directories(${PROJECT_NAME}_python_tools BEFORE PUBLIC ++ ${CMAKE_CURRENT_SOURCE_DIR}/../pybind11/include) + target_link_libraries(${PROJECT_NAME}_python_tools PUBLIC ${PROJECT_NAME} + pybind11::pybind11 py_binding_tools::py_binding_tools) + # Use minimum-size optimization for pybind11 bindings + target_link_libraries(${PROJECT_NAME}_python_tools PUBLIC pybind11::opt_size) +@@ -15,7 +15,9 @@ + src/stages.cpp + src/module.cpp + ) ++target_include_directories(pymoveit_mtc BEFORE PUBLIC ++ ${CMAKE_CURRENT_SOURCE_DIR}/../pybind11/include) + target_include_directories(pymoveit_mtc PUBLIC $) + target_link_libraries(pymoveit_mtc PUBLIC ${PROJECT_NAME} ${PROJECT_NAME}_stages ${PROJECT_NAME}_python_tools) + + # install libs +diff --git a/python/bindings/src/properties.cpp b/python/bindings/src/properties.cpp +--- a/python/bindings/src/properties.cpp ++++ b/python/bindings/src/properties.cpp +@@ -158,6 +158,8 @@ + return REGISTRY_SINGLETON.insert(type_index, ros_msg_name, to, from); + } + ++#if !defined(_MSC_VER) + __attribute__((visibility("default"))) // export this symbol as visible in the shared library ++#endif + void export_properties(py::module& m) { + // clang-format off +diff --git a/python/bindings/src/solvers.cpp b/python/bindings/src/solvers.cpp +--- a/python/bindings/src/solvers.cpp ++++ b/python/bindings/src/solvers.cpp +@@ -73,7 +73,7 @@ + pipelinePlanner = core.PipelinePlanner(node, 'ompl', 'PRMkConfigDefault') + pipelinePlanner.num_planning_attempts = 10 + )") +- .property("num_planning_attempts", "int: Number of planning attempts") ++ .property("num_planning_attempts", "int: Number of planning attempts") + .property( + "workspace_parameters", + ":moveit_msgs:`WorkspaceParameters`: Specifies workspace box to be used for Cartesian sampling") From f1317cd943ec7923d26cc0189171ee88bcb4f1c7 Mon Sep 17 00:00:00 2001 From: Neeraj C Date: Fri, 24 Jul 2026 23:00:47 +0100 Subject: [PATCH 13/18] add mtc capabilities patch --- ...yrical-moveit-task-constructor-capabilities.patch | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 patch/ros-lyrical-moveit-task-constructor-capabilities.patch diff --git a/patch/ros-lyrical-moveit-task-constructor-capabilities.patch b/patch/ros-lyrical-moveit-task-constructor-capabilities.patch new file mode 100644 index 0000000..2367f35 --- /dev/null +++ b/patch/ros-lyrical-moveit-task-constructor-capabilities.patch @@ -0,0 +1,12 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -20,7 +20,7 @@ add_library(${PROJECT_NAME} SHARED + src/execute_task_solution_capability.cpp + ) + target_link_libraries(${PROJECT_NAME} PUBLIC +- fmt ++ fmt::fmt + ${rclcpp_action_TARGETS} + ${moveit_core_TARGETS} + ${moveit_ros_move_group_TARGETS} From 4c519f44bace0fa1b7da5e9e2598d50e3997a229 Mon Sep 17 00:00:00 2001 From: Neeraj C Date: Fri, 24 Jul 2026 23:54:32 +0100 Subject: [PATCH 14/18] fix mtc-visualization windows build errors --- ...oveit-task-constructor-visualization.patch | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/patch/ros-lyrical-moveit-task-constructor-visualization.patch b/patch/ros-lyrical-moveit-task-constructor-visualization.patch index 18574d7..baacb0a 100644 --- a/patch/ros-lyrical-moveit-task-constructor-visualization.patch +++ b/patch/ros-lyrical-moveit-task-constructor-visualization.patch @@ -45,3 +45,82 @@ index 3cd6466..7c471d5 100644 case 3: return tr("time"); } +diff --git a/motion_planning_tasks/src/CMakeLists.txt b/motion_planning_tasks/src/CMakeLists.txt +--- a/motion_planning_tasks/src/CMakeLists.txt ++++ b/motion_planning_tasks/src/CMakeLists.txt +@@ -6,6 +6,8 @@ + global_settings.ui + ) + ++qt6_add_resources(QRC_SOURCES resources.qrc) ++ + add_library(${MOVEIT_LIB_NAME} SHARED + factory_model.cpp + icons.cpp +@@ -22,7 +24,7 @@ + + ${UIC_FILES} + +- resources.qrc ++ ${QRC_SOURCES} + ) + + set_target_properties(${MOVEIT_LIB_NAME} PROPERTIES VERSION "${${PROJECT_NAME}_VERSION}") +diff --git a/motion_planning_tasks/utils/flat_merge_proxy_model.h b/motion_planning_tasks/utils/flat_merge_proxy_model.h +--- a/motion_planning_tasks/utils/flat_merge_proxy_model.h ++++ b/motion_planning_tasks/utils/flat_merge_proxy_model.h +@@ -38,6 +38,16 @@ + + #include + #include ++#if defined(_WIN32) ++#if defined(motion_planning_tasks_utils_EXPORTS) ++#define MOVEIT_RVIZ_UTILS_EXPORT __declspec(dllexport) ++#else ++#define MOVEIT_RVIZ_UTILS_EXPORT __declspec(dllimport) ++#endif ++#else ++#define MOVEIT_RVIZ_UTILS_EXPORT ++#endif ++ + + namespace moveit_rviz_plugin { + namespace utils { +@@ -49,7 +59,7 @@ + * Removing top-level items will remove the whole embedded model if all top-level items from + * this model are to be removed. Otherwise, removal is forwarded to the embedded model. + */ +-class FlatMergeProxyModel : public QAbstractItemModel ++class MOVEIT_RVIZ_UTILS_EXPORT FlatMergeProxyModel : public QAbstractItemModel + { + Q_OBJECT + Q_DECLARE_PRIVATE(FlatMergeProxyModel) +diff --git a/motion_planning_tasks/utils/tree_merge_proxy_model.h b/motion_planning_tasks/utils/tree_merge_proxy_model.h +--- a/motion_planning_tasks/utils/tree_merge_proxy_model.h ++++ b/motion_planning_tasks/utils/tree_merge_proxy_model.h +@@ -38,6 +38,16 @@ + + #include + #include ++#if defined(_WIN32) ++#if defined(motion_planning_tasks_utils_EXPORTS) ++#define MOVEIT_RVIZ_UTILS_EXPORT __declspec(dllexport) ++#else ++#define MOVEIT_RVIZ_UTILS_EXPORT __declspec(dllimport) ++#endif ++#else ++#define MOVEIT_RVIZ_UTILS_EXPORT ++#endif ++ + + namespace moveit_rviz_plugin { + namespace utils { +@@ -48,7 +58,7 @@ + * Each embedded model becomes a top-level item (with a given name) + * and all the model's top-level items will appear as its children. + */ +-class TreeMergeProxyModel : public QAbstractItemModel ++class MOVEIT_RVIZ_UTILS_EXPORT TreeMergeProxyModel : public QAbstractItemModel + { + Q_OBJECT + Q_DECLARE_PRIVATE(TreeMergeProxyModel) From 335d27af33d24531ce53b834bbb700843e3280a1 Mon Sep 17 00:00:00 2001 From: Neeraj Cherakara Date: Sat, 25 Jul 2026 01:41:34 +0100 Subject: [PATCH 15/18] revert module scanning off --- patch/ros-lyrical-moveit-task-constructor-core.patch | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/patch/ros-lyrical-moveit-task-constructor-core.patch b/patch/ros-lyrical-moveit-task-constructor-core.patch index e9cc914..a9124d0 100644 --- a/patch/ros-lyrical-moveit-task-constructor-core.patch +++ b/patch/ros-lyrical-moveit-task-constructor-core.patch @@ -255,7 +255,7 @@ diff --git a/python/bindings/CMakeLists.txt b/python/bindings/CMakeLists.txt pybind11::pybind11 py_binding_tools::py_binding_tools) # Use minimum-size optimization for pybind11 bindings target_link_libraries(${PROJECT_NAME}_python_tools PUBLIC pybind11::opt_size) -@@ -15,7 +15,9 @@ +@@ -15,7 +15,13 @@ src/stages.cpp src/module.cpp ) @@ -263,7 +263,11 @@ diff --git a/python/bindings/CMakeLists.txt b/python/bindings/CMakeLists.txt + ${CMAKE_CURRENT_SOURCE_DIR}/../pybind11/include) target_include_directories(pymoveit_mtc PUBLIC $) target_link_libraries(pymoveit_mtc PUBLIC ${PROJECT_NAME} ${PROJECT_NAME}_stages ${PROJECT_NAME}_python_tools) - ++# CMake's C++20 module dependency scanner misparses pybind11::module-typed ++# locals in headers pulled in transitively (py_binding_tools) as module ++# control-lines; this target doesn't use C++20 modules, so just disable it. ++set_target_properties(pymoveit_mtc PROPERTIES CXX_SCAN_FOR_MODULES OFF) + # install libs diff --git a/python/bindings/src/properties.cpp b/python/bindings/src/properties.cpp --- a/python/bindings/src/properties.cpp From 511f83d609aadc1d74aed551c4de8da4114d10c7 Mon Sep 17 00:00:00 2001 From: Neeraj C Date: Sun, 26 Jul 2026 21:31:09 +0100 Subject: [PATCH 16/18] drop vendored pybind11 and use the stock one --- ...lyrical-moveit-task-constructor-core.patch | 218 ++++++++++++++++-- 1 file changed, 196 insertions(+), 22 deletions(-) diff --git a/patch/ros-lyrical-moveit-task-constructor-core.patch b/patch/ros-lyrical-moveit-task-constructor-core.patch index a9124d0..75d12a2 100644 --- a/patch/ros-lyrical-moveit-task-constructor-core.patch +++ b/patch/ros-lyrical-moveit-task-constructor-core.patch @@ -237,38 +237,20 @@ index 1c0553c..39bfa92 100644 ++called; return true; diff --git a/python/bindings/CMakeLists.txt b/python/bindings/CMakeLists.txt +index 26c86ac..22bf5e1 100644 --- a/python/bindings/CMakeLists.txt +++ b/python/bindings/CMakeLists.txt -@@ -2,8 +2,15 @@ - add_library(${PROJECT_NAME}_python_tools SHARED - ${INCLUDES}/properties.h - src/properties.cpp +@@ -17,6 +17,10 @@ pybind11_add_module(pymoveit_mtc ) -+# Force our vendored (smart_holder) pybind11 to be found before any pybind11 -+# pulled in transitively via py_binding_tools, which links against the plain -+# upstream pybind11 package. Mixing the two copies in one translation unit -+# causes duplicate-definition errors, since smart_holder.h only exists in -+# the vendored fork. -+target_include_directories(${PROJECT_NAME}_python_tools BEFORE PUBLIC -+ ${CMAKE_CURRENT_SOURCE_DIR}/../pybind11/include) - target_link_libraries(${PROJECT_NAME}_python_tools PUBLIC ${PROJECT_NAME} - pybind11::pybind11 py_binding_tools::py_binding_tools) - # Use minimum-size optimization for pybind11 bindings - target_link_libraries(${PROJECT_NAME}_python_tools PUBLIC pybind11::opt_size) -@@ -15,7 +15,13 @@ - src/stages.cpp - src/module.cpp - ) -+target_include_directories(pymoveit_mtc BEFORE PUBLIC -+ ${CMAKE_CURRENT_SOURCE_DIR}/../pybind11/include) target_include_directories(pymoveit_mtc PUBLIC $) target_link_libraries(pymoveit_mtc PUBLIC ${PROJECT_NAME} ${PROJECT_NAME}_stages ${PROJECT_NAME}_python_tools) +# CMake's C++20 module dependency scanner misparses pybind11::module-typed +# locals in headers pulled in transitively (py_binding_tools) as module +# control-lines; this target doesn't use C++20 modules, so just disable it. +set_target_properties(pymoveit_mtc PROPERTIES CXX_SCAN_FOR_MODULES OFF) - + # install libs + install(TARGETS ${PROJECT_NAME}_python_tools diff --git a/python/bindings/src/properties.cpp b/python/bindings/src/properties.cpp --- a/python/bindings/src/properties.cpp +++ b/python/bindings/src/properties.cpp @@ -293,3 +275,195 @@ diff --git a/python/bindings/src/solvers.cpp b/python/bindings/src/solvers.cpp .property( "workspace_parameters", ":moveit_msgs:`WorkspaceParameters`: Specifies workspace box to be used for Cartesian sampling") +diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt +index 181e1a4..fcb7315 100644 +--- a/python/CMakeLists.txt ++++ b/python/CMakeLists.txt +@@ -1,28 +1,12 @@ +-# We rely on pybind11's smart_holder branch imported pybind11 via git submodule +- ++# Use the pybind11 provided by the environment (with upstream smart_holder support since 3.0), ++# rather than vendoring our own fork, so we share a single pybind11 with py_binding_tools. + find_package(ament_cmake_python REQUIRED) + find_package(Python3 COMPONENTS Interpreter Development) +-# pybind11 must use the ROS python version +-set(PYBIND11_PYTHON_VERSION ${PYTHON_VERSION}) ++find_package(pybind11 REQUIRED) + + # Use minimum-size optimization for pybind11 bindings + add_compile_options("-Os") + +-# configure pybind11 install for use by downstream packages in install space +-set(PYBIND11_INSTALL ON CACHE INTERNAL "Install pybind11") +-set(CMAKE_INSTALL_INCLUDEDIR include/moveit/python) +-set(PYBIND11_CMAKECONFIG_INSTALL_DIR share/${PROJECT_NAME}/cmake +- CACHE INTERNAL "install path for pybind11 cmake files") +- +-# source pybind11 folder, which exposes its targets and installs them +-if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/pybind11/CMakeLists.txt") +- message("Missing content of submodule pybind11: Use 'git clone --recurse-submodule' in future.\n" +- "Checking out content automatically") +- execute_process(COMMAND git submodule init WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +- execute_process(COMMAND git submodule update WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +-endif() +-add_subdirectory(pybind11) +- + # C++ wrapper code + add_subdirectory(bindings) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 1b8d21a..1d9f5d7 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -12,6 +12,8 @@ find_package(moveit_core REQUIRED) + find_package(moveit_ros_planning REQUIRED) + find_package(moveit_ros_planning_interface REQUIRED) + find_package(moveit_task_constructor_msgs REQUIRED) ++find_package(Python3 REQUIRED COMPONENTS Interpreter Development) ++find_package(pybind11 REQUIRED) + find_package(py_binding_tools REQUIRED) + find_package(rclcpp REQUIRED) + find_package(rviz_marker_tools REQUIRED) +diff --git a/include/moveit/python/task_constructor/properties.h b/include/moveit/python/task_constructor/properties.h +index 46c0e97..70bf30e 100644 +--- a/include/moveit/python/task_constructor/properties.h ++++ b/include/moveit/python/task_constructor/properties.h +@@ -1,14 +1,10 @@ + #pragma once + +-#include + #include + #include + #include + #include + +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::Property) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::PropertyMap) +- + namespace moveit { + namespace python { + +diff --git a/python/bindings/src/core.h b/python/bindings/src/core.h +index 7ab1437..b9bdc2c 100644 +--- a/python/bindings/src/core.h ++++ b/python/bindings/src/core.h +@@ -34,12 +34,12 @@ + + #pragma once + ++#include + #include + #include + #include + #include + #include +-#include + + /** Trampoline classes to allow inheritance in Python (overriding virtual functions) */ + +@@ -109,36 +109,3 @@ public: + } // namespace task_constructor + } // namespace moveit + +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::solvers::PlannerInterface) +- +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::SolutionBase) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::SubTrajectory) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(ordered) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::InterfaceState) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::core::MoveItErrorCode) +- +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::CostTerm) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::TrajectoryCostTerm) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::cost::PathLength) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::cost::DistanceToReference) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::cost::TrajectoryDuration) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::cost::LinkMotion) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::cost::LinkRotation) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::cost::Clearance) +- +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::Stage) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::PropagatingEitherWay) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::PropagatingForward) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::PropagatingBackward) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::Generator) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::MonitoringGenerator) +- +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::ContainerBase) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::SerialContainer) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::ParallelContainerBase) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::Alternatives) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::Fallbacks) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::Merger) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::WrapperBase) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::Task) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(moveit::task_constructor::Introspection) +diff --git a/python/bindings/src/module.cpp b/python/bindings/src/module.cpp +index a797711..cd66917 100644 +--- a/python/bindings/src/module.cpp ++++ b/python/bindings/src/module.cpp +@@ -32,7 +32,7 @@ + * POSSIBILITY OF SUCH DAMAGE. + *********************************************************************/ + +-#include ++#include + + namespace moveit { + namespace python { +diff --git a/python/bindings/src/solvers.cpp b/python/bindings/src/solvers.cpp +index 7c6a12f..eebfa2e 100644 +--- a/python/bindings/src/solvers.cpp ++++ b/python/bindings/src/solvers.cpp +@@ -46,12 +46,6 @@ using namespace py::literals; + using namespace moveit::task_constructor; + using namespace moveit::task_constructor::solvers; + +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(PlannerInterface) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(PipelinePlanner) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(JointInterpolationPlanner) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(CartesianPath) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(MultiPlanner) +- + namespace moveit { + namespace python { + +diff --git a/python/bindings/src/stages.cpp b/python/bindings/src/stages.cpp +index 1dead16..f51308f 100644 +--- a/python/bindings/src/stages.cpp ++++ b/python/bindings/src/stages.cpp +@@ -48,26 +48,6 @@ using namespace py::literals; + using namespace moveit::task_constructor; + using namespace moveit::task_constructor::stages; + +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(ModifyPlanningScene) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(CurrentState) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(FixedState) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(ComputeIK) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(MoveTo) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(MoveRelative) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(Connect) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(FixCollisionObjects) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(GenerateGraspPose) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(GeneratePlacePose) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(GenerateRandomPose) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(GeneratePose) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(Pick) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(Place) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(SimpleGraspBase) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(SimpleGrasp) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(SimpleUnGrasp) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(PassThrough) +-PYBIND11_SMART_HOLDER_TYPE_CASTERS(LimitSolutions) +- + namespace moveit { + namespace python { + +@@ -369,7 +349,6 @@ void export_stages(pybind11::module& m) { + )") + .def(py::init(), "name"_a = std::string("Generate Place Pose")); + +- + properties::class_(m, "GenerateGraspPose", R"( + GenerateGraspPose stage derives from monitoring generator and can + be used to generate poses for grasping. Set the desired attributes From d7d0279f2a0a97830c319cc4a2f57fc020158ed1 Mon Sep 17 00:00:00 2001 From: Neeraj Cherakara Date: Sun, 26 Jul 2026 22:38:53 +0100 Subject: [PATCH 17/18] copilot suggestion: fix wsa_initialised guard --- patch/ros-lyrical-moveit-task-constructor-core.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patch/ros-lyrical-moveit-task-constructor-core.patch b/patch/ros-lyrical-moveit-task-constructor-core.patch index 75d12a2..ce07cc4 100644 --- a/patch/ros-lyrical-moveit-task-constructor-core.patch +++ b/patch/ros-lyrical-moveit-task-constructor-core.patch @@ -115,7 +115,7 @@ index d938f95..35d502a 100644 + #ifdef _WIN32 + { + static bool wsa_initialised = false; -+ if (wsa_initialised) { ++ if (!wsa_initialised) { + WSADATA wsaData; + WSAStartup(MAKEWORD(2, 2), &wsaData); + wsa_initialised = true; From b7e0683315544c204361cb00ca275b84773fcfef Mon Sep 17 00:00:00 2001 From: Neeraj Cherakara Date: Sun, 26 Jul 2026 22:44:46 +0100 Subject: [PATCH 18/18] copilot suggestion: fix install destination for py_binding_tools export header --- patch/ros-lyrical-py-binding-tools.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patch/ros-lyrical-py-binding-tools.patch b/patch/ros-lyrical-py-binding-tools.patch index 36311b7..f72c6c2 100644 --- a/patch/ros-lyrical-py-binding-tools.patch +++ b/patch/ros-lyrical-py-binding-tools.patch @@ -30,7 +30,7 @@ index e940609..a743203 100644 DESTINATION include/${PROJECT_NAME} ) -+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_export.h DESTINATION include) ++install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_export.h DESTINATION include/${PROJECT_NAME}) + _ament_cmake_python_register_environment_hook()