Skip to content

Commit

Permalink
Foxy RMW interface (#27)
Browse files Browse the repository at this point in the history
* adapt to foxy api

Signed-off-by: Knese Karsten <karsten.knese@us.bosch.com>

* remove poco

Signed-off-by: Knese Karsten <karsten.knese@us.bosch.com>
  • Loading branch information
Karsten1987 authored Apr 29, 2020
1 parent 4bcbdab commit a0b7646
Show file tree
Hide file tree
Showing 14 changed files with 144 additions and 102 deletions.
5 changes: 2 additions & 3 deletions iceoryx_ros2_bridge/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,8 @@ find_package(ament_cmake REQUIRED)
find_package(ament_index_cpp REQUIRED)
find_package(iceoryx_posh REQUIRED)
find_package(iceoryx_utils REQUIRED)
find_package(poco_vendor)
find_package(Poco COMPONENTS Foundation)
find_package(rclcpp REQUIRED)
find_package(rcpputils REQUIRED)
find_package(rmw_iceoryx_cpp REQUIRED)
find_package(rosidl_generator_cpp REQUIRED)
find_package(rosidl_typesupport_cpp REQUIRED)
Expand All @@ -33,8 +32,8 @@ add_library(iceoryx_typesupport_helpers
)
ament_target_dependencies(iceoryx_typesupport_helpers
ament_index_cpp
Poco
rclcpp
rcpputils
rosidl_generator_cpp
rosidl_typesupport_introspection_cpp
rosidl_typesupport_cpp
Expand Down
2 changes: 1 addition & 1 deletion iceoryx_ros2_bridge/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
<depend>ament_index_cpp</depend>
<depend>iceoryx_posh</depend>
<depend>iceoryx_utils</depend>
<depend>poco_vendor</depend>
<depend>rclcpp</depend>
<depend>rcpputils</depend>
<depend>rmw_iceoryx_cpp</depend>
<depend>rosidl_generator_cpp</depend>
<depend>rosidl_typesupport_cpp</depend>
Expand Down
8 changes: 6 additions & 2 deletions iceoryx_ros2_bridge/src/generic_publisher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,18 @@
#include <memory>
#include <string>

#include "rcpputils/shared_library.hpp"

namespace iceoryx_ros2_bridge
{

GenericPublisher::GenericPublisher(
rclcpp::node_interfaces::NodeBaseInterface * node_base,
const std::string & topic,
const rosidl_message_type_support_t & type_support)
: rclcpp::PublisherBase(node_base, topic, type_support, rcl_publisher_get_default_options())
const rosidl_message_type_support_t & type_support,
std::shared_ptr<rcpputils::SharedLibrary> library_handle)
: rclcpp::PublisherBase(node_base, topic, type_support, rcl_publisher_get_default_options()),
ts_library_handle_(library_handle)
{}

void GenericPublisher::publish(std::shared_ptr<rmw_serialized_message_t> message)
Expand Down
11 changes: 10 additions & 1 deletion iceoryx_ros2_bridge/src/generic_publisher.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@

#include "rclcpp/rclcpp.hpp"

namespace rcpputils
{
class SharedLibrary;
} // namespace rcpputils

namespace iceoryx_ros2_bridge
{

Expand All @@ -29,13 +34,17 @@ class GenericPublisher : public rclcpp::PublisherBase
GenericPublisher(
rclcpp::node_interfaces::NodeBaseInterface * node_base,
const std::string & topic,
const rosidl_message_type_support_t & type_support);
const rosidl_message_type_support_t & type_support,
std::shared_ptr<rcpputils::SharedLibrary> library_handle);

~GenericPublisher() override = default;

void publish(std::shared_ptr<rmw_serialized_message_t> message);

void publish(const rmw_serialized_message_t * message);

private:
std::shared_ptr<rcpputils::SharedLibrary> ts_library_handle_;
};

} // namespace iceoryx_ros2_bridge
Expand Down
35 changes: 8 additions & 27 deletions iceoryx_ros2_bridge/src/generic_subscription.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ GenericSubscription::GenericSubscription(
rclcpp::node_interfaces::NodeBaseInterface * node_base,
const rosidl_message_type_support_t & ts,
const std::string & topic_name,
std::function<void(std::shared_ptr<rmw_serialized_message_t>)> callback)
std::function<void(std::shared_ptr<rclcpp::SerializedMessage>)> callback)
: SubscriptionBase(
node_base,
ts,
Expand All @@ -53,7 +53,7 @@ GenericSubscription::GenericSubscription(
{}

void GenericSubscription::set_callback(
std::function<void(std::shared_ptr<rmw_serialized_message_t>)> callback)
std::function<void(std::shared_ptr<rclcpp::SerializedMessage>)> callback)
{
callback_ = callback;
}
Expand All @@ -63,7 +63,7 @@ std::shared_ptr<void> GenericSubscription::create_message()
return create_serialized_message();
}

std::shared_ptr<rmw_serialized_message_t> GenericSubscription::create_serialized_message()
std::shared_ptr<rclcpp::SerializedMessage> GenericSubscription::create_serialized_message()
{
return borrow_serialized_message(0);
}
Expand All @@ -72,18 +72,18 @@ void GenericSubscription::handle_message(
std::shared_ptr<void> & message, const rclcpp::MessageInfo & message_info)
{
(void) message_info;
auto typed_message = std::static_pointer_cast<rmw_serialized_message_t>(message);
auto typed_message = std::static_pointer_cast<rclcpp::SerializedMessage>(message);
callback_(typed_message);
}

void GenericSubscription::return_message(std::shared_ptr<void> & message)
{
auto typed_message = std::static_pointer_cast<rmw_serialized_message_t>(message);
auto typed_message = std::static_pointer_cast<rclcpp::SerializedMessage>(message);
return_serialized_message(typed_message);
}

void GenericSubscription::return_serialized_message(
std::shared_ptr<rmw_serialized_message_t> & message)
std::shared_ptr<rclcpp::SerializedMessage> & message)
{
message.reset();
}
Expand All @@ -96,29 +96,10 @@ void GenericSubscription::handle_loaned_message(
(void) message_info;
}

std::shared_ptr<rmw_serialized_message_t>
std::shared_ptr<rclcpp::SerializedMessage>
GenericSubscription::borrow_serialized_message(size_t capacity)
{
auto message = new rmw_serialized_message_t;
*message = rmw_get_zero_initialized_serialized_message();
auto init_return = rmw_serialized_message_init(message, capacity, &default_allocator_);
if (init_return != RCL_RET_OK) {
rclcpp::exceptions::throw_from_rcl_error(init_return);
}

auto serialized_msg = std::shared_ptr<rmw_serialized_message_t>(
message,
[](rmw_serialized_message_t * msg) {
auto fini_return = rmw_serialized_message_fini(msg);
delete msg;
if (fini_return != RCL_RET_OK) {
RCLCPP_ERROR_STREAM(
rclcpp::get_logger("iceoryx_ros2_bridge"),
"Failed to destroy serialized message: " << rcl_get_error_string().str);
}
});

return serialized_msg;
return std::make_shared<rclcpp::SerializedMessage>(capacity);
}

} // namespace iceoryx_ros2_bridge
12 changes: 6 additions & 6 deletions iceoryx_ros2_bridge/src/generic_subscription.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class GenericSubscription : public rclcpp::SubscriptionBase
rclcpp::node_interfaces::NodeBaseInterface * node_base,
const rosidl_message_type_support_t & ts,
const std::string & topic_name,
std::function<void(std::shared_ptr<rmw_serialized_message_t>)> callback);
std::function<void(std::shared_ptr<rclcpp::SerializedMessage>)> callback);

/**
* Constructor. In order to properly subscribe to a topic, this subscription needs to be added to
Expand All @@ -64,30 +64,30 @@ class GenericSubscription : public rclcpp::SubscriptionBase
const rosidl_message_type_support_t & ts,
const std::string & topic_name);

void set_callback(std::function<void(std::shared_ptr<rmw_serialized_message_t>)> callback);
void set_callback(std::function<void(std::shared_ptr<rclcpp::SerializedMessage>)> callback);

// Same as create_serialized_message() as the subscription is to serialized_messages only
std::shared_ptr<void> create_message() override;

std::shared_ptr<rmw_serialized_message_t> create_serialized_message() override;
std::shared_ptr<rclcpp::SerializedMessage> create_serialized_message() override;

void handle_message(
std::shared_ptr<void> & message, const rclcpp::MessageInfo & message_info) override;

// Same as return_serialized_message() as the subscription is to serialized_messages only
void return_message(std::shared_ptr<void> & message) override;

void return_serialized_message(std::shared_ptr<rmw_serialized_message_t> & message) override;
void return_serialized_message(std::shared_ptr<rclcpp::SerializedMessage> & message) override;

void handle_loaned_message(
void * loaned_message, const rclcpp::MessageInfo & message_info) override;

private:
RCLCPP_DISABLE_COPY(GenericSubscription)

std::shared_ptr<rmw_serialized_message_t> borrow_serialized_message(size_t capacity);
std::shared_ptr<rclcpp::SerializedMessage> borrow_serialized_message(size_t capacity);
rcutils_allocator_t default_allocator_;
std::function<void(std::shared_ptr<rmw_serialized_message_t>)> callback_;
std::function<void(std::shared_ptr<rclcpp::SerializedMessage>)> callback_;
};

} // namespace iceoryx_ros2_bridge
Expand Down
Loading

0 comments on commit a0b7646

Please sign in to comment.