Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix rolling builds #289

Merged
merged 4 commits into from
Feb 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 8 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,14 @@ elseif("$ENV{ROS_VERSION}" STREQUAL "2")
ros2_foxglove_bridge/src/parameter_interface.cpp
ros2_foxglove_bridge/src/generic_client.cpp
)

target_compile_definitions(foxglove_bridge_component
PRIVATE
RCLCPP_VERSION_MAJOR=${rclcpp_VERSION_MAJOR}
RCLCPP_VERSION_MINOR=${rclcpp_VERSION_MINOR}
RCLCPP_VERSION_PATCH=${rclcpp_VERSION_PATCH}
)

target_include_directories(foxglove_bridge_component
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/foxglove_bridge_base/include>
Expand Down
24 changes: 24 additions & 0 deletions ros2_foxglove_bridge/src/generic_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,21 @@

#include <foxglove_bridge/generic_client.hpp>

// clang-format off
/* True if the version of RCLCPP is at least major.minor.patch */
#define RCLCPP_VERSION_GTE(major, minor, patch) \
(major < RCLCPP_VERSION_MAJOR \
? true \
: major > RCLCPP_VERSION_MAJOR \
? false \
: minor < RCLCPP_VERSION_MINOR \
? true \
: minor > RCLCPP_VERSION_MINOR \
? false \
: patch < RCLCPP_VERSION_PATCH ? true \
: patch > RCLCPP_VERSION_PATCH ? false : true)
// clang-format on

namespace {

// Copy of github.com/ros2/rclcpp/blob/33dae5d67/rclcpp/src/rclcpp/typesupport_helpers.cpp#L69-L92
Expand Down Expand Up @@ -123,10 +138,19 @@ GenericClient::GenericClient(rclcpp::node_interfaces::NodeBaseInterface* nodeBas
_typeIntrospectionHdl = (reinterpret_cast<decltype(get_ts)>(
_typeIntrospectionLib->get_symbol(typeinstrospection_symbol_name)))();

// get_typesupport_handle is deprecated since rclcpp 25.0.0
// (https://github.com/ros2/rclcpp/pull/2209)
#if RCLCPP_VERSION_GTE(25, 0, 0)
_requestTypeSupportHdl =
rclcpp::get_message_typesupport_handle(requestTypeName, TYPESUPPORT_LIB_NAME, *_typeSupportLib);
_responseTypeSupportHdl = rclcpp::get_message_typesupport_handle(
responseTypeName, TYPESUPPORT_LIB_NAME, *_typeSupportLib);
#else
_requestTypeSupportHdl =
rclcpp::get_typesupport_handle(requestTypeName, TYPESUPPORT_LIB_NAME, *_typeSupportLib);
_responseTypeSupportHdl =
rclcpp::get_typesupport_handle(responseTypeName, TYPESUPPORT_LIB_NAME, *_typeSupportLib);
#endif

rcl_ret_t ret = rcl_client_init(this->get_client_handle().get(), this->get_rcl_node_handle(),
_serviceTypeSupportHdl, serviceName.c_str(), &client_options);
Expand Down
4 changes: 3 additions & 1 deletion ros2_foxglove_bridge/src/ros2_foxglove_bridge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,9 @@ void FoxgloveBridge::subscribe(foxglove::ChannelId channelId, ConnectionHandle c
try {
auto subscriber = this->create_generic_subscription(
topic, datatype, qos,
std::bind(&FoxgloveBridge::rosMessageHandler, this, channelId, clientHandle, _1),
[this, channelId, clientHandle](std::shared_ptr<rclcpp::SerializedMessage> msg) {
this->rosMessageHandler(channelId, clientHandle, msg);
},
subscriptionOptions);
subscriptionsByClient.emplace(clientHandle, std::move(subscriber));
} catch (const std::exception& ex) {
Expand Down