Read config from file.

This commit is contained in:
James Pace 2026-07-22 21:40:43 -04:00
parent c38407bbd8
commit ef9c5f6656
5 changed files with 77 additions and 6 deletions

View File

@ -30,8 +30,16 @@ rclcpp_components_register_node(zenoh_bridge_component
EXECUTABLE zenoh_bridge
)
add_executable(get_default_config
src/bin/get_default_config.cpp
)
target_link_libraries(get_default_config
zenohcxx::zenohc
fmt::fmt
)
ament_export_targets(export_${PROJECT_NAME} HAS_LIBRARY_TARGET)
install(TARGETS zenoh_bridge_component
install(TARGETS zenoh_bridge_component get_default_config
EXPORT export_${PROJECT_NAME}
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib

View File

@ -1,8 +1,10 @@
<launch>
<node name="in_node" pkg="j7s_zenoh_bridge" exec="zenoh_bridge">
<param name="zenoh_config_path" value="$(find-pkg-share j7s_zenoh_bridge)/params/DEFAULT_CONFIG.json5"/>
<param from="$(find-pkg-share j7s_zenoh_bridge)/params/in.yaml"/>
</node>
<node name="out_node" pkg="j7s_zenoh_bridge" exec="zenoh_bridge">
<param name="zenoh_config_path" value="$(find-pkg-share j7s_zenoh_bridge)/params/DEFAULT_CONFIG.json5"/>
<param from="$(find-pkg-share j7s_zenoh_bridge)/params/out.yaml"/>
</node>
</launch>

View File

@ -0,0 +1,41 @@
{
/// The node's mode (router, peer or client)
mode: "peer",
/// The node's metadata (name, location, DNS name, etc.) Arbitrary JSON data not interpreted by zenoh and available in admin space @/<zid>/router, @/<zid>/peer or @/<zid>/client
metadata: {
},
/// Which endpoints to connect to. E.g. tcp/localhost:7447.
/// By configuring the endpoints, it is possible to tell zenoh which router/peer to connect to at startup.
connect: {
/// timeout waiting for all endpoints connected (0: no retry, -1: infinite timeout)
/// Accepts a single value (e.g. timeout_ms: 0)
/// or different values for router, peer and client (e.g. timeout_ms: { router: -1, peer: -1, client: 0 }).
timeout_ms: { router: -1, peer: -1, client: 0 },
/// The list of endpoints to connect to.
/// Accepts a single list (e.g. endpoints: ["tcp/10.10.10.10:7447", "tcp/11.11.11.11:7447"])
/// or different lists for router, peer and client (e.g. endpoints: { router: ["tcp/10.10.10.10:7447"], peer: ["tcp/11.11.11.11:7447"] }).
///
/// See https://docs.rs/zenoh/latest/zenoh/config/struct.EndPoint.html
endpoints: [
// "<proto>/<address>"
],
},
/// Which endpoints to listen on. E.g. tcp/0.0.0.0:7447.
/// By configuring the endpoints, it is possible to tell zenoh which are the endpoints that other routers,
/// peers, or client can use to establish a zenoh session.
listen: {
/// The list of endpoints to listen on.
/// Accepts a single list (e.g. endpoints: ["tcp/[::]:7447", "udp/[::]:7447"])
/// or different lists for router, peer and client (e.g. endpoints: { router: ["tcp/[::]:7447"], peer: ["tcp/[::]:0"] }).
///
/// See https://docs.rs/zenoh/latest/zenoh/config/struct.EndPoint.html
endpoints: ["tcp/[::]:0"],
},
}

View File

@ -18,17 +18,17 @@ namespace j7s
ZenohBridge::ZenohBridge(const rclcpp::NodeOptions & options) : Node("zenoh_bridge", options)
{
// Should this be from a file?
// TODO: static inline Config from_file(const std::string &path, ZResult *err = nullptr)
auto config = zenoh::Config::create_default();
m_zenohSession = std::make_shared<zenoh::Session>(std::move(config));
const auto emptyVector = std::vector<std::string>();
const auto zenohSourceNames =
this->declare_parameter<std::vector<std::string>>("zenoh_sources", emptyVector);
const auto rosSourceNames =
this->declare_parameter<std::vector<std::string>>("ros_sources", emptyVector);
const auto zenohConfigPath = this->declare_parameter<std::string>("zenoh_config_path");
auto config = zenoh::Config::from_file(zenohConfigPath);
m_zenohSession = std::make_shared<zenoh::Session>(std::move(config));
// Make all the zenoh subs.
for (const auto & source : zenohSourceNames)
{

View File

@ -0,0 +1,20 @@
//
// Copyright 2026 James Pace
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
//
// This Source Code Form is "Incompatible With Secondary Licenses", as
// defined by the Mozilla Public License, v. 2.0.
//
#include <fmt/core.h>
#include "zenoh.hxx"
int main(int, char **)
{
const auto config = zenoh::Config::create_default();
const auto configJson = config.to_string();
std::cout << configJson << std::endl;
}