Merge pull request #46 from ros2/ignore_local_publications
add flag to ignore local publications
This commit is contained in:
		
						commit
						586250bdc9
					
				
					 4 changed files with 25 additions and 12 deletions
				
			
		| 
						 | 
					@ -156,9 +156,11 @@ protected:
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    std::shared_ptr<void> message = subscription->create_message();
 | 
					    std::shared_ptr<void> message = subscription->create_message();
 | 
				
			||||||
    bool taken = false;
 | 
					    bool taken = false;
 | 
				
			||||||
    rmw_take(subscription->subscription_handle_, message.get(), &taken);
 | 
					    rmw_ret_t status = rmw_take(subscription->subscription_handle_, message.get(), &taken);
 | 
				
			||||||
 | 
					    if (status == RMW_RET_OK) {
 | 
				
			||||||
      if (taken) {
 | 
					      if (taken) {
 | 
				
			||||||
        subscription->handle_message(message);
 | 
					        subscription->handle_message(message);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      std::cout << "[rclcpp::error] take failed for subscription on topic: " <<
 | 
					      std::cout << "[rclcpp::error] take failed for subscription on topic: " <<
 | 
				
			||||||
        subscription->get_topic_name() << std::endl;
 | 
					        subscription->get_topic_name() << std::endl;
 | 
				
			||||||
| 
						 | 
					@ -179,13 +181,15 @@ protected:
 | 
				
			||||||
    std::shared_ptr<void> request_header = service->create_request_header();
 | 
					    std::shared_ptr<void> request_header = service->create_request_header();
 | 
				
			||||||
    std::shared_ptr<void> request = service->create_request();
 | 
					    std::shared_ptr<void> request = service->create_request();
 | 
				
			||||||
    bool taken = false;
 | 
					    bool taken = false;
 | 
				
			||||||
    rmw_take_request(
 | 
					    rmw_ret_t status = rmw_take_request(
 | 
				
			||||||
      service->service_handle_,
 | 
					      service->service_handle_,
 | 
				
			||||||
      request_header.get(),
 | 
					      request_header.get(),
 | 
				
			||||||
      request.get(),
 | 
					      request.get(),
 | 
				
			||||||
      &taken);
 | 
					      &taken);
 | 
				
			||||||
 | 
					    if (status == RMW_RET_OK) {
 | 
				
			||||||
      if (taken) {
 | 
					      if (taken) {
 | 
				
			||||||
        service->handle_request(request_header, request);
 | 
					        service->handle_request(request_header, request);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      std::cout << "[rclcpp::error] take failed for service on service: " <<
 | 
					      std::cout << "[rclcpp::error] take failed for service on service: " <<
 | 
				
			||||||
        service->get_service_name() << std::endl;
 | 
					        service->get_service_name() << std::endl;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -126,7 +126,8 @@ public:
 | 
				
			||||||
    std::string topic_name,
 | 
					    std::string topic_name,
 | 
				
			||||||
    size_t queue_size,
 | 
					    size_t queue_size,
 | 
				
			||||||
    std::function<void(const std::shared_ptr<MessageT> &)> callback,
 | 
					    std::function<void(const std::shared_ptr<MessageT> &)> callback,
 | 
				
			||||||
    rclcpp::callback_group::CallbackGroup::SharedPtr group = nullptr);
 | 
					    rclcpp::callback_group::CallbackGroup::SharedPtr group = nullptr,
 | 
				
			||||||
 | 
					    bool ignore_local_publications = false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* Create a timer. */
 | 
					  /* Create a timer. */
 | 
				
			||||||
  rclcpp::timer::WallTimer::SharedPtr
 | 
					  rclcpp::timer::WallTimer::SharedPtr
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -106,12 +106,13 @@ Node::create_subscription(
 | 
				
			||||||
  std::string topic_name,
 | 
					  std::string topic_name,
 | 
				
			||||||
  size_t queue_size,
 | 
					  size_t queue_size,
 | 
				
			||||||
  std::function<void(const std::shared_ptr<MessageT> &)> callback,
 | 
					  std::function<void(const std::shared_ptr<MessageT> &)> callback,
 | 
				
			||||||
  rclcpp::callback_group::CallbackGroup::SharedPtr group)
 | 
					  rclcpp::callback_group::CallbackGroup::SharedPtr group,
 | 
				
			||||||
 | 
					  bool ignore_local_publications)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  using rosidl_generator_cpp::get_message_type_support_handle;
 | 
					  using rosidl_generator_cpp::get_message_type_support_handle;
 | 
				
			||||||
  auto type_support_handle = get_message_type_support_handle<MessageT>();
 | 
					  auto type_support_handle = get_message_type_support_handle<MessageT>();
 | 
				
			||||||
  rmw_subscription_t * subscriber_handle = rmw_create_subscription(
 | 
					  rmw_subscription_t * subscriber_handle = rmw_create_subscription(
 | 
				
			||||||
    node_handle_, type_support_handle, topic_name.c_str(), queue_size);
 | 
					    node_handle_, type_support_handle, topic_name.c_str(), queue_size, ignore_local_publications);
 | 
				
			||||||
  if (!subscriber_handle) {
 | 
					  if (!subscriber_handle) {
 | 
				
			||||||
    throw std::runtime_error(
 | 
					    throw std::runtime_error(
 | 
				
			||||||
      std::string("could not create subscription: ") +
 | 
					      std::string("could not create subscription: ") +
 | 
				
			||||||
| 
						 | 
					@ -123,6 +124,7 @@ Node::create_subscription(
 | 
				
			||||||
  auto sub = Subscription<MessageT>::make_shared(
 | 
					  auto sub = Subscription<MessageT>::make_shared(
 | 
				
			||||||
    subscriber_handle,
 | 
					    subscriber_handle,
 | 
				
			||||||
    topic_name,
 | 
					    topic_name,
 | 
				
			||||||
 | 
					    ignore_local_publications,
 | 
				
			||||||
    callback);
 | 
					    callback);
 | 
				
			||||||
  auto sub_base_ptr = std::dynamic_pointer_cast<SubscriptionBase>(sub);
 | 
					  auto sub_base_ptr = std::dynamic_pointer_cast<SubscriptionBase>(sub);
 | 
				
			||||||
  if (group) {
 | 
					  if (group) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,8 +44,11 @@ public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SubscriptionBase(
 | 
					  SubscriptionBase(
 | 
				
			||||||
    rmw_subscription_t * subscription_handle,
 | 
					    rmw_subscription_t * subscription_handle,
 | 
				
			||||||
    std::string & topic_name)
 | 
					    std::string & topic_name,
 | 
				
			||||||
  : subscription_handle_(subscription_handle), topic_name_(topic_name)
 | 
					    bool ignore_local_publications)
 | 
				
			||||||
 | 
					  : subscription_handle_(subscription_handle),
 | 
				
			||||||
 | 
					    topic_name_(topic_name),
 | 
				
			||||||
 | 
					    ignore_local_publications_(ignore_local_publications)
 | 
				
			||||||
  {}
 | 
					  {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::string get_topic_name()
 | 
					  std::string get_topic_name()
 | 
				
			||||||
| 
						 | 
					@ -61,6 +64,7 @@ private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  rmw_subscription_t * subscription_handle_;
 | 
					  rmw_subscription_t * subscription_handle_;
 | 
				
			||||||
  std::string topic_name_;
 | 
					  std::string topic_name_;
 | 
				
			||||||
 | 
					  bool ignore_local_publications_;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,8 +78,10 @@ public:
 | 
				
			||||||
  Subscription(
 | 
					  Subscription(
 | 
				
			||||||
    rmw_subscription_t * subscription_handle,
 | 
					    rmw_subscription_t * subscription_handle,
 | 
				
			||||||
    std::string & topic_name,
 | 
					    std::string & topic_name,
 | 
				
			||||||
 | 
					    bool ignore_local_publications,
 | 
				
			||||||
    CallbackType callback)
 | 
					    CallbackType callback)
 | 
				
			||||||
  : SubscriptionBase(subscription_handle, topic_name), callback_(callback)
 | 
					  : SubscriptionBase(subscription_handle, topic_name, ignore_local_publications),
 | 
				
			||||||
 | 
					    callback_(callback)
 | 
				
			||||||
  {}
 | 
					  {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::shared_ptr<void> create_message()
 | 
					  std::shared_ptr<void> create_message()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue