By configuration the Zenoh router can perform downsampling (i.e. reducing the frequency of messages) for some topics published via a specified interface.
Follow up with the same partner than the previous exercise.
In container A add this downsampling
configuration at the end of your zenoh_confs/ROUTER_CONFIG.json5
file (just before the last }
):
downsampling: [
{
// Downsampling publications in egress on WiFi interface
interfaces: ["<YOUR_WIFI_INTERFACE>"],
flow: "egress",
rules: [
// 0.5Hz for the Zenoh key expression used for the "/chatter_public" topic
{
key_expr: "0/chatter_public/std_msgs::msg::dds_::String_/RIHS01_df668c740482bbd48fb39d76a70dfd4bd59db1288021743503259e948f6b1a18",
freq: 0.5
},
],
},
],
Run the same commands than for previous exercise:
- In container A:
- Start the router (with the custom configuration):
ZENOH_ROUTER_CONFIG_URI=/ros_ws/zenoh_confs/ROUTER_CONFIG.json5 ros2 run rmw_zenoh_cpp rmw_zenohd
You can also add this environment variable to see the router applying the access control:RUST_LOG=info,zenoh::net::routing::interceptor=debug
- Start the publisher on the denied topic:
ros2 topic pub /chatter std_msgs/msg/String "data: Hello just me!"
- Start another publisher on an allowed topic:
ros2 topic pub /chatter_public std_msgs/msg/String "data: Hello World!"
- Start the router (with the custom configuration):
- In container B:
- Start the router (with the default configuration):
ros2 run rmw_zenoh_cpp rmw_zenohd
- Start the listener on the denied topic:
ros2 topic echo /chatter
- Start the listener on an allowed topic:
ros2 topic echo /chatter_public
- Start the router (with the default configuration):
And see the result in the listener on /chatter_public
.