AddExclusionZone Service

Package: nav2_msgs
Category: Other Services

Add an exclusion zone to a collision monitor / detector source at runtime.

Message Definitions

Request Message

Field Type Description
zone nav2_msgs/ExclusionZoneDescription Add an exclusion zone to a collision monitor / detector source at runtime.

Response Message

Field Type Description
success bool Whether the operation completed successfully
message string String value or identifier

Usage Examples

Python

import rclpy
from rclpy.node import Node
from nav2_msgs.srv import AddExclusionZone

class AddExclusionZoneClient(Node):
    def __init__(self):
        super().__init__('add_exclusion_zone_client')
        self.client = self.create_client(AddExclusionZone, 'add_exclusion_zone')
        
    def send_request(self):
        request = AddExclusionZone.Request()
        # Set request.zone as needed
        
        self.client.wait_for_service()
        future = self.client.call_async(request)
        return future

def main():
    rclpy.init()
    client = AddExclusionZoneClient()
    
    future = client.send_request()
    rclpy.spin_until_future_complete(client, future)
    
    if future.result():
        client.get_logger().info('Service call completed')
    else:
        client.get_logger().error('Service call failed')
        
    client.destroy_node()
    rclpy.shutdown()

C++

#include "rclcpp/rclcpp.hpp"
#include "nav2_msgs/srv/add_exclusion_zone.hpp"

class AddExclusionZoneClient : public rclcpp::Node
{
public:
    AddExclusionZoneClient() : Node("add_exclusion_zone_client")
    {
        client_ = create_client<nav2_msgs::srv::AddExclusionZone>("add_exclusion_zone");
    }

    void send_request()
    {
        auto request = std::make_shared<nav2_msgs::srv::AddExclusionZone::Request>();
        // Set request->zone as needed

        client_->wait_for_service();
        
        auto result_future = client_->async_send_request(request);
        if (rclcpp::spin_until_future_complete(shared_from_this(), result_future) ==
            rclcpp::FutureReturnCode::SUCCESS)
        {
            RCLCPP_INFO(get_logger(), "Service call completed");
        }
        else
        {
            RCLCPP_ERROR(get_logger(), "Service call failed");
        }
    }

private:
    rclcpp::Client<nav2_msgs::srv::AddExclusionZone>::SharedPtr client_;
};