DynamicEdges Service
Package: nav2_msgs
Category: Nav2 Route Services
Dynamically modify route graph edges during navigation
Message Definitions
Request Message
Field | Type | Description |
---|---|---|
closed_edges |
uint16[] |
Array of edge IDs to close |
opened_edges |
uint16[] |
Array of edge IDs to open |
adjust_edges |
EdgeCost[] |
Array of edges with modified costs |
Response Message
Field | Type | Description |
---|---|---|
success |
bool |
Whether edge modifications were successful |
Usage Examples
Python
import rclpy
from rclpy.node import Node
from nav2_msgs.srv import DynamicEdges
class DynamicEdgesClient(Node):
def __init__(self):
super().__init__('dynamicedges_client')
self.client = self.create_client(DynamicEdges, 'route_graph/dynamic_edges')
def send_request(self):
request = DynamicEdges.Request()
request.closed_edges = [1, 2, 5] # Edge IDs to close
request.opened_edges = [3, 4] # Edge IDs to open
request.adjust_edges = [] # No cost adjustments
self.client.wait_for_service()
future = self.client.call_async(request)
return future
def main():
rclpy.init()
client = DynamicEdgesClient()
future = client.send_request()
rclpy.spin_until_future_complete(client, future)
if future.result():
client.get_logger().info('Modify route graph edges dynamically completed')
else:
client.get_logger().error('Failed to modify route graph edges dynamically')
client.destroy_node()
rclpy.shutdown()
C++
#include "rclcpp/rclcpp.hpp"
#include "nav2_msgs/srv/dynamicedges.hpp"
class DynamicEdgesClient : public rclcpp::Node
{
public:
DynamicEdgesClient() : Node("dynamicedges_client")
{
client_ = create_client<nav2_msgs::srv::DynamicEdges>("route_graph/dynamic_edges");
}
void send_request()
{
auto request = std::make_shared<nav2_msgs::srv::DynamicEdges::Request>();
request->closed_edges = {1, 2, 5}; // Edge IDs to close
request->opened_edges = {3, 4}; // Edge IDs to open
request->adjust_edges = {}; // No cost adjustments
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(), "Modify route graph edges dynamically completed");
}
else
{
RCLCPP_ERROR(get_logger(), "Failed to modify route graph edges dynamically");
}
}
private:
rclcpp::Client<nav2_msgs::srv::DynamicEdges>::SharedPtr client_;
};
int main(int argc, char ** argv)
{
rclcpp::init(argc, argv);
auto client = std::make_shared<DynamicEdgesClient>();
client->send_request();
rclcpp::shutdown();
return 0;
}