Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
463d6f7
Full rebuild (to update stale simulation interface packages)
ayushgnv May 8, 2026
a8c632b
Patch io_context for asio 1.36 (drop io_service)
ayushgnv May 8, 2026
4ed9a38
Applied additional patches
ayushgnv May 9, 2026
fb56bcb
Added some more fixes
ayushgnv May 11, 2026
21c5308
Added macos patch
ayushgnv May 11, 2026
9b525c3
apply qt_gui_cpp patch
ayushgnv May 11, 2026
0decdd3
Update vinca.yaml
ayushgnv May 12, 2026
98d6d4e
Applied review changes
ayushgnv May 12, 2026
7d26f8b
Refresh conda_build_config.yaml
traversaro May 12, 2026
3005ae4
Remove vtk package from mutex package
traversaro May 12, 2026
a550e3a
Update cache rebuild setting and clean up comments
traversaro May 12, 2026
6e7e118
Update package override versions in YAML config
traversaro May 12, 2026
a0a5c3f
Update CMakeLists.txt for urdfdom_headers package
traversaro May 13, 2026
642f022
Fix sdformat-urdf patch
traversaro May 13, 2026
32d6482
updated sdformat-urdf patches
ayushgnv May 13, 2026
cccbea1
clearpath diagnostics and ublox gps patches
ayushgnv May 14, 2026
40805ad
Added to ros-jazzy-ublox-gps
ayushgnv May 19, 2026
5468096
Applied foxglove bridge patch
ayushgnv May 20, 2026
0bbf917
Try bumping timeout from 1.5 → 5 for osx
ayushgnv May 21, 2026
bf1f5a5
Disable full rebuild by default in testpr.yml
Tobias-Fischer May 21, 2026
17c2613
Merge branch 'main' into ayushg/full_rebuild_v18
Tobias-Fischer May 21, 2026
65a608c
Fix Windows foxglove-bridge build; sync robot-state-publisher
ayushgnv May 21, 2026
a6558f0
Drop stale clang <19 pin from nav2_mppi_controller
ayushgnv May 22, 2026
7ca3a13
Fixup mppi-controller with newer clang
Tobias-Fischer May 23, 2026
312b63f
Update ros-jazzy-tinyxml2-vendor.patch
Tobias-Fischer May 23, 2026
65d9ab7
Remove outdated cache for ros-jazzy-tinyxml2-vendor
Tobias-Fischer May 23, 2026
22e80c0
Add patch to unvendor mujoco_vendor
traversaro May 23, 2026
3eda699
Add patch for rviz overlay plugins
traversaro May 23, 2026
182b5e9
Remove outdated cache entries from workflow
traversaro May 24, 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
26 changes: 13 additions & 13 deletions conda_build_config.yaml
Original file line number Diff line number Diff line change
@@ -1,23 +1,21 @@
numpy:
- 2
assimp:
- 5
- 6
libprotobuf:
- 6.31.1
- 6.33.5
protobuf:
- 6.31.1
- 6.33.5
spdlog:
- 1.17
pugixml:
- '1.15'
libopencv:
- 4.12.0
- 4.13.0
libxml2:
- 2.14.*
graphviz:
- 14.*
# Mitigation for
# https://github.com/RoboStack/ros-jazzy/pull/126#issuecomment-3515455380
libcap:
- 2.77
fmt:
Expand Down Expand Up @@ -47,7 +45,7 @@ c_compiler:
- vs2022 # [win]
c_compiler_version: # [unix]
- 14 # [linux]
- 18 # [osx]
- 19 # [osx]
c_stdlib:
- sysroot # [linux]
- macosx_deployment_target # [osx]
Expand All @@ -62,7 +60,7 @@ cxx_compiler:
- vs2022 # [win]
cxx_compiler_version: # [unix]
- 14 # [linux]
- 18 # [osx]
- 19 # [osx]

lbr_fri_client_sdk:
- '1.11'
Expand All @@ -72,18 +70,20 @@ lbr_fri_client_sdk:
- '1.17'

libzenohc:
- 1.7.2
- 1.9.0
libzenohcxx:
- 1.7.2

- 1.9.0
libhwloc:
- 2.12.2

eigen_abi_devel:
- '3.4.0'

urdfdom:
- '4.0'
- '5.1'

libmujoco:
- 3.5.0
- 3.8.1

vtk:
- 9.6.0
2 changes: 0 additions & 2 deletions patch/dependencies.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,6 @@ nav2_util:
add_host: ["libboost-devel"]
nav2_constrained_smoother:
add_host: ["${{ 'openblas' if win }}"]
nav2_mppi_controller:
add_build: ["${{ 'clang <19' if osx }}"]
ompl:
add_host: ["ompl"]
pybind11_vendor:
Expand Down
28 changes: 28 additions & 0 deletions patch/ros-jazzy-clearpath-diagnostics.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: RoboStack <maintainers@robostack.org>
Date: Wed, 13 May 2026 23:30:00 +0000
Subject: [PATCH] Undef glibc major/minor macros before Version class

glibc's <sys/sysmacros.h> (pulled in transitively on aarch64) defines
major()/minor() as macros that expand to gnu_dev_major/gnu_dev_minor,
colliding with clearpath::Version's int members.
---
--- a/include/clearpath_diagnostics/clearpath_diagnostic_updater.hpp 2026-05-13 23:40:50.389941101 -0700
+++ b/include/clearpath_diagnostics/clearpath_diagnostic_updater.hpp 2026-05-13 23:43:40.451520115 -0700
@@ -47,6 +47,16 @@
#include "clearpath_platform_msgs/msg/status.hpp"
#include "clearpath_platform_msgs/msg/stop_status.hpp"

+// glibc's <sys/sysmacros.h> defines major/minor as macros that expand to
+// gnu_dev_major/gnu_dev_minor, which collides with clearpath::Version's
+// member names. Undefine them before declaring the class.
+#ifdef major
+#undef major
+#endif
+#ifdef minor
+#undef minor
+#endif
+
namespace clearpath
{

246 changes: 162 additions & 84 deletions patch/ros-jazzy-foxglove-bridge.osx.patch
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 611816f..597036e 100644
index 71deedd..602397c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -185,6 +185,13 @@ target_link_libraries(foxglove_bridge_component
@@ -87,7 +87,7 @@ target_sources(foxglove_cpp_shared PRIVATE ${FOXGLOVE_SDK_SOURCES})
# Import the prebuilt C shared library from the fetched SDK
add_library(foxglove-shared SHARED IMPORTED)
set_target_properties(foxglove-shared PROPERTIES
- IMPORTED_LOCATION ${foxglove_sdk_SOURCE_DIR}/lib/libfoxglove.so
+ IMPORTED_LOCATION ${foxglove_sdk_SOURCE_DIR}/lib/libfoxglove.dylib
)
target_link_libraries(foxglove_cpp_shared PRIVATE foxglove-shared)
set_target_properties(foxglove_cpp_shared PROPERTIES
@@ -165,6 +165,13 @@ target_link_libraries(foxglove_bridge_component
rosx_introspection::rosx_introspection
)

Expand All @@ -15,107 +24,84 @@ index 611816f..597036e 100644
+
rclcpp_components_register_nodes(foxglove_bridge_component "foxglove_bridge::FoxgloveBridge")
enable_strict_compiler_warnings(foxglove_bridge_component)

set_target_properties(foxglove_bridge_component PROPERTIES
diff --git a/src/ros2_foxglove_bridge.cpp b/src/ros2_foxglove_bridge.cpp
index 978c732..4883047 100644
index 2229aad..9431dbd 100644
--- a/src/ros2_foxglove_bridge.cpp
+++ b/src/ros2_foxglove_bridge.cpp
@@ -282,7 +282,7 @@ void FoxgloveBridge::updateAdvertisedTopics(
std::string topic(channel.topic());
const TopicAndDatatype topicAndSchemaName = {topic, schemaName};
if (latestTopics.find(topicAndSchemaName) == latestTopics.end()) {
- RCLCPP_INFO(this->get_logger(), "Removing channel %lu for topic \"%s\" (%s)", channel.id(),
+ RCLCPP_INFO(this->get_logger(), "Removing channel %llu for topic \"%s\" (%s)", channel.id(),
topic.c_str(), schemaName.c_str());
channel.close();
channelIt = _channels.erase(channelIt);
@@ -349,7 +349,7 @@ void FoxgloveBridge::updateAdvertisedTopics(
@@ -479,7 +479,7 @@ void FoxgloveBridge::updateAdvertisedTopics(
const TopicAndDatatype topicAndSchemaName = {topic, schemaName};
if (latestTopics.find(topicAndSchemaName) == latestTopics.end()) {
const auto channelId = channel.id();
- RCLCPP_INFO(this->get_logger(), "Removing channel %lu for topic \"%s\" (%s)", channelId,
+ RCLCPP_INFO(this->get_logger(), "Removing channel %llu for topic \"%s\" (%s)", channelId,
topic.c_str(), schemaName.c_str());
// Remove any active subscriptions for this channel
_subscriptions.erase(channelId);
@@ -549,7 +549,7 @@ void FoxgloveBridge::updateAdvertisedTopics(
}

const ChannelId channelId = channelResult.value().id();
- RCLCPP_INFO(this->get_logger(), "Advertising new channel %lu for topic \"%s\"", channelId,
+ RCLCPP_INFO(this->get_logger(), "Advertising new channel %llu for topic \"%s\"", channelId,
topic.c_str());
_channels.insert({channelId, std::move(channelResult.value())});
}
@@ -814,7 +814,7 @@ void FoxgloveBridge::subscribeConnectionGraph(bool subscribe) {
}

const ChannelId channelId = channelResult.value().id();
- RCLCPP_INFO(this->get_logger(), "Advertising new channel %lu for topic \"%s\"", channelId,
+ RCLCPP_INFO(this->get_logger(), "Advertising new channel %llu for topic \"%s\"", channelId,
topic.c_str());
_channels.insert({channelId, std::move(channelResult.value())});
}
@@ -570,14 +570,14 @@ void FoxgloveBridge::subscribeConnectionGraph(bool subscribe) {
void FoxgloveBridge::subscribe(ChannelId channelId, const foxglove::ClientMetadata& client) {
if (!client.sink_id.has_value()) {
RCLCPP_ERROR(this->get_logger(),
- "received subscribe request from client %u for channel %lu but client "
+ "received subscribe request from client %u for channel %llu but client "
"has no sink ID",
client.id, channelId);
return;
}

RCLCPP_INFO(this->get_logger(),
- "received subscribe request for channel %lu from client %u (sink %lu)", channelId,
+ "received subscribe request for channel %llu from client %u (sink %llu)", channelId,
client.id, client.sink_id.value());
std::lock_guard<std::mutex> lock(_subscriptionsMutex);

@@ -585,7 +585,7 @@ void FoxgloveBridge::subscribe(ChannelId channelId, const foxglove::ClientMetada
// calling this callback?
auto it = _channels.find(channelId);
if (it == _channels.end()) {
- RCLCPP_INFO(this->get_logger(), "received subscribe request for channel %lu from client %u",
+ RCLCPP_INFO(this->get_logger(), "received subscribe request for channel %llu from client %u",
channelId, client.id);
createOrIncrementSubscription(channelId, client.id, false, client.sink_id);
}
@@ -867,7 +867,7 @@ void FoxgloveBridge::createOrIncrementSubscriptionLocked(ChannelId channelId, Cl
std::optional<SinkId> sinkId) {
auto channelIt = _channels.find(channelId);
if (channelIt == _channels.end()) {
- RCLCPP_ERROR(this->get_logger(), "received subscribe request for unknown channel: %lu",
+ RCLCPP_ERROR(this->get_logger(), "received subscribe request for unknown channel: %llu",
channelId);
return;
}
@@ -615,7 +615,7 @@ void FoxgloveBridge::subscribe(ChannelId channelId, const foxglove::ClientMetada
@@ -898,7 +898,7 @@ void FoxgloveBridge::createOrIncrementSubscriptionLocked(ChannelId channelId, Cl
auto [it, inserted] = _subscriptions.emplace(channelId, std::move(channelSub));
subIt = it;

if (!client.sink_id.has_value()) {
RCLCPP_ERROR(this->get_logger(),
- "received subscribe request for channel %lu but client "
+ "received subscribe request for channel %llu but client "
"has no sink ID",
channelId);
return;
@@ -623,19 +623,19 @@ void FoxgloveBridge::subscribe(ChannelId channelId, const foxglove::ClientMetada
- RCLCPP_INFO(this->get_logger(), "Created ROS subscription on %s (%s) for channel %lu",
+ RCLCPP_INFO(this->get_logger(), "Created ROS subscription on %s (%s) for channel %llu",
topic.c_str(), datatype.c_str(), channelId);
}

_subscriptions.insert({{channelId, client.id}, subscription});
RCLCPP_INFO(this->get_logger(),
- "created ROS subscription on %s (%s) successfully for channel %lu (client "
- "%u, sink %lu)",
+ "created ROS subscription on %s (%s) successfully for channel %llu (client "
+ "%u, sink %llu)",
topic.c_str(), datatype.c_str(), channelId, client.id, client.sink_id.value());
@@ -922,7 +922,7 @@ void FoxgloveBridge::createOrIncrementSubscriptionLocked(ChannelId channelId, Cl
}

void FoxgloveBridge::unsubscribe(ChannelId channelId, const foxglove::ClientMetadata& client) {
std::lock_guard<std::mutex> lock(_subscriptionsMutex);

- RCLCPP_INFO(this->get_logger(), "received unsubscribe request for channel %lu", channelId);
+ RCLCPP_INFO(this->get_logger(), "received unsubscribe request for channel %llu", channelId);

auto it = _channels.find(channelId);
if (it == _channels.end()) {
- RCLCPP_ERROR(this->get_logger(), "received unsubscribe request for unknown channel %lu",
+ RCLCPP_ERROR(this->get_logger(), "received unsubscribe request for unknown channel %llu",
channelId);
return;
}
@@ -643,7 +643,7 @@ void FoxgloveBridge::unsubscribe(ChannelId channelId, const foxglove::ClientMeta
auto subscriptionIt = _subscriptions.find({channelId, client.id});
if (subscriptionIt == _subscriptions.end()) {
- RCLCPP_INFO(this->get_logger(), "received unsubscribe request for channel %lu from client %u",
+ RCLCPP_INFO(this->get_logger(), "received unsubscribe request for channel %llu from client %u",
channelId, client.id);
removeOrDecrementSubscription(channelId, client.id, false);
}
@@ -938,7 +938,7 @@ void FoxgloveBridge::removeOrDecrementSubscriptionLocked(ChannelId channelId, Cl
auto subIt = _subscriptions.find(channelId);
if (subIt == _subscriptions.end()) {
RCLCPP_ERROR(this->get_logger(),
- "Client %u tried unsubscribing from channel %lu but a corresponding ROS "
+ "Client %u tried unsubscribing from channel %llu but a corresponding ROS "
"subscription doesn't exist",
client.id, channelId);
- "Client %u tried unsubscribing from channel %lu but no subscription exists",
+ "Client %u tried unsubscribing from channel %llu but no subscription exists",
clientId, channelId);
return;
@@ -651,7 +651,7 @@ void FoxgloveBridge::unsubscribe(ChannelId channelId, const foxglove::ClientMeta

const std::string& topic = subscriptionIt->second->get_topic_name();
RCLCPP_INFO(this->get_logger(),
- "Cleaned up subscription to topic %s for client %u on channel %lu", topic.c_str(),
+ "Cleaned up subscription to topic %s for client %u on channel %llu", topic.c_str(),
client.id, channelId);
_subscriptions.erase(subscriptionIt);
}
@@ -953,7 +953,7 @@ void FoxgloveBridge::removeOrDecrementSubscriptionLocked(ChannelId channelId, Cl
// If no more subscribers, destroy the ROS subscription
if (subIt->second.wsClientIds.empty() && subIt->second.gatewayClientIds.empty()) {
RCLCPP_INFO(this->get_logger(),
- "Cleaned up ROS subscription for channel %lu (no more subscribers)", channelId);
+ "Cleaned up ROS subscription for channel %llu (no more subscribers)", channelId);
_subscriptions.erase(subIt);
}
}
@@ -755,7 +755,7 @@ void FoxgloveBridge::clientUnadvertise(ClientId clientId, ChannelId clientChanne
@@ -1092,7 +1092,7 @@ void FoxgloveBridge::clientUnadvertise(ClientId clientId, ChannelId clientChanne

const auto& publisher = it->second.publisher;
RCLCPP_INFO(this->get_logger(),
Expand All @@ -124,3 +110,95 @@ index 978c732..4883047 100644
publisher->get_topic_name(), publisher->get_subscription_count(), clientChannelId);

_clientAdvertisedTopics.erase(it);
@@ -1460,13 +1460,13 @@ void FoxgloveBridge::gatewaySubscribe(uint32_t clientId,
auto sinkId = _gateway->sinkId();
if (!sinkId.has_value()) {
RCLCPP_WARN(this->get_logger(),
- "Gateway: subscribe request for channel %lu (\"%s\") from client %u "
+ "Gateway: subscribe request for channel %llu (\"%s\") from client %u "
"but gateway session has no sink ID (reconnecting?); "
"cached transient_local messages will not be replayed",
channel.id(), std::string(channel.topic()).c_str(), clientId);
}
RCLCPP_INFO(this->get_logger(),
- "Gateway: received subscribe request for channel %lu (\"%s\") from client %u",
+ "Gateway: received subscribe request for channel %llu (\"%s\") from client %u",
channel.id(), std::string(channel.topic()).c_str(), clientId);
createOrIncrementSubscription(channel.id(), clientId, true, sinkId);
}
@@ -1474,7 +1474,7 @@ void FoxgloveBridge::gatewaySubscribe(uint32_t clientId,
void FoxgloveBridge::gatewayUnsubscribe(uint32_t clientId,
const foxglove::ChannelDescriptor& channel) {
RCLCPP_INFO(this->get_logger(),
- "Gateway: received unsubscribe request for channel %lu (\"%s\") from client %u",
+ "Gateway: received unsubscribe request for channel %llu (\"%s\") from client %u",
channel.id(), std::string(channel.topic()).c_str(), clientId);
removeOrDecrementSubscription(channel.id(), clientId, true);
}
@@ -1489,7 +1489,7 @@ void FoxgloveBridge::gatewayClientAdvertise(uint32_t clientId,

ChannelAndClientId key = {channelId, clientId};
if (_gatewayClientAdvertisedTopics.find(key) != _gatewayClientAdvertisedTopics.end()) {
- RCLCPP_WARN(this->get_logger(), "Gateway: client %u already advertised channel %lu (\"%s\")",
+ RCLCPP_WARN(this->get_logger(), "Gateway: client %u already advertised channel %llu (\"%s\")",
clientId, channelId, topicName.c_str());
return;
}
@@ -1506,7 +1506,7 @@ void FoxgloveBridge::gatewayClientAdvertise(uint32_t clientId,

if (topicType.empty()) {
RCLCPP_ERROR(this->get_logger(),
- "Gateway: client %u advertised channel %lu (\"%s\") with empty schema name",
+ "Gateway: client %u advertised channel %llu (\"%s\") with empty schema name",
clientId, channelId, topicName.c_str());
return;
}
@@ -1514,12 +1514,12 @@ void FoxgloveBridge::gatewayClientAdvertise(uint32_t clientId,
try {
auto ad = createClientPublisher(topicName, topicType, encoding, schemaData, schemaLen);
RCLCPP_INFO(this->get_logger(),
- "Gateway: client %u is advertising channel %lu \"%s\" (%s) with encoding \"%s\"",
+ "Gateway: client %u is advertising channel %llu \"%s\" (%s) with encoding \"%s\"",
clientId, channelId, topicName.c_str(), topicType.c_str(), encoding.c_str());
_gatewayClientAdvertisedTopics.emplace(key, std::move(ad));
} catch (const std::exception& ex) {
RCLCPP_ERROR(this->get_logger(),
- "Gateway: failed to create publisher for client %u channel %lu (\"%s\"): %s",
+ "Gateway: failed to create publisher for client %u channel %llu (\"%s\"): %s",
clientId, channelId, topicName.c_str(), ex.what());
}
}
@@ -1533,13 +1533,13 @@ void FoxgloveBridge::gatewayClientUnadvertise(uint32_t clientId,

auto it = _gatewayClientAdvertisedTopics.find(key);
if (it == _gatewayClientAdvertisedTopics.end()) {
- RCLCPP_WARN(this->get_logger(), "Gateway: client %u unadvertised unknown channel %lu (\"%s\")",
+ RCLCPP_WARN(this->get_logger(), "Gateway: client %u unadvertised unknown channel %llu (\"%s\")",
clientId, channelId, std::string(channel.topic()).c_str());
return;
}

RCLCPP_INFO(this->get_logger(),
- "Gateway: client %u is no longer advertising channel %lu (\"%s\")", clientId,
+ "Gateway: client %u is no longer advertising channel %llu (\"%s\")", clientId,
channelId, it->second.topicName.c_str());
_gatewayClientAdvertisedTopics.erase(it);

@@ -1563,7 +1563,7 @@ void FoxgloveBridge::gatewayClientMessage(uint32_t clientId,
auto it = _gatewayClientAdvertisedTopics.find(key);
if (it == _gatewayClientAdvertisedTopics.end()) {
RCLCPP_ERROR(this->get_logger(),
- "Gateway: dropping message from client %u for unknown channel %lu", clientId,
+ "Gateway: dropping message from client %u for unknown channel %llu", clientId,
channelId);
return;
}
@@ -1574,7 +1574,7 @@ void FoxgloveBridge::gatewayClientMessage(uint32_t clientId,
try {
publishClientData(ad, data, dataLen);
} catch (const std::exception& ex) {
- RCLCPP_ERROR(this->get_logger(), "Gateway: dropping message from client %u for channel %lu: %s",
+ RCLCPP_ERROR(this->get_logger(), "Gateway: dropping message from client %u for channel %llu: %s",
clientId, channelId, ex.what());
}
}
Loading
Loading