Loading CMakeLists.txt +2 −2 Original line number Diff line number Diff line Loading @@ -22,10 +22,10 @@ find_package(rosidl_default_generators REQUIRED) # ROS find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) # Standard (e.g. fmt) find_package(fmt REQUIRED) find_package(oru REQUIRED) find_package(open62541pp REQUIRED) list( Loading @@ -33,7 +33,7 @@ list( rclcpp::rclcpp fmt::fmt open62541pp::open62541pp oru::core ${std_msgs_TARGETS} ) # Interface generation. Loading flake.lock +277 −92 Original line number Diff line number Diff line { "nodes": { "extended-msgs": { "fire": { "inputs": { "fire": [ "oru", "fire" "firepkgs": "firepkgs", "nixpkgs": [ "fire", "firepkgs", "nixpkgs" ], "ornlpkgs": [ "fire", "firepkgs", "ornlpkgs" ], "parts": [ "fire", "firepkgs", "parts" ], "ros2nix": [ "fire", "firepkgs", "ros2nix" ] }, "locked": { "lastModified": 1753312847, "narHash": "sha256-v9MNcFVlHw/xyn7v/aT0zh+Ze8ZEn+k9CM8AhqI59Nw=", "ref": "master", "rev": "956da98e4f4714062841f9508cd8a3ddc26bb374", "revCount": 8, "type": "git", "url": "ssh://git@code.ornl.gov/mdf/ros/extended-msgs.git" "host": "code.ornl.gov", "lastModified": 1774901632, "narHash": "sha256-pzsobcm+54pQVQ8TRTLRBgYCiTe7MeCTBiY8W+usNKs=", "owner": "ros", "repo": "fire", "rev": "30401a919d428a18d5123ede392fe1837ed76d7f", "type": "gitlab" }, "original": { "ref": "master", "type": "git", "url": "ssh://git@code.ornl.gov/mdf/ros/extended-msgs.git" "host": "code.ornl.gov", "owner": "ros", "repo": "fire", "type": "gitlab" } }, "fire": { "firepkgs": { "inputs": { "lasm": "lasm", "nixpkgs": [ "fire", "ornlpkgs", "nixpkgs" ], "nixpkgs": "nixpkgs", "nro": "nro", "ornlpkgs": "ornlpkgs", "parts": [ "fire", "firepkgs", "ornlpkgs", "parts" ] ], "ros2nix": "ros2nix" }, "locked": { "host": "code.ornl.gov", "lastModified": 1753319212, "narHash": "sha256-/E79cRl3C5bNMHCkLIMRxklT6JnOaQ6+POZH1GkexQY=", "owner": "ros", "repo": "fire", "rev": "ecbd67c9f5fd31ecfc3fc9fd8bddbaea843486d1", "lastModified": 1774901529, "narHash": "sha256-BIKv7PFeqnZQg+wy4KQ6AbAx/YT1OFPql33gcKCRejo=", "owner": "ros%2Fsupport", "repo": "firepkgs", "rev": "9ad7d1f9b806213a61f835d82f93b0c8f9b5f592", "type": "gitlab" }, "original": { "host": "code.ornl.gov", "owner": "ros", "repo": "fire", "owner": "ros%2Fsupport", "repo": "firepkgs", "type": "gitlab" } }, "flake-compat": { "locked": { "lastModified": 1696426674, "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "revCount": 57, "type": "tarball", "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" }, "original": { "type": "tarball", "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" } }, "flake-utils": { "inputs": { "systems": "systems" Loading @@ -72,55 +101,93 @@ "type": "github" } }, "flake-utils_2": { "inputs": { "systems": "systems_2" }, "locked": { "lastModified": 1731533236, "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { "owner": "numtide", "repo": "flake-utils", "type": "github" } }, "flake-utils_3": { "inputs": { "systems": "systems_3" }, "locked": { "lastModified": 1710146030, "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { "owner": "numtide", "repo": "flake-utils", "type": "github" } }, "lasm": { "inputs": { "flake-utils": [ "fire", "nro", "flake-utils" ], "flake-utils": "flake-utils_2", "nixpkgs": [ "fire", "firepkgs", "ornlpkgs", "nixpkgs" ] }, "locked": { "lastModified": 1749414546, "narHash": "sha256-K28T2POA8mKNs0TwfjYZCSCAljPX3rLy9KnCcRrRvbY=", "owner": "cadkin", "repo": "ld-audit-search-mod", "rev": "b662dd19c285acc2cd912f45a6f563882ad4913a", "type": "github" "host": "code.ornl.gov", "lastModified": 1770138893, "narHash": "sha256-1NTCgbqtdQeoJzfUdyBCFbOCaHYbfmkrbYZxiDkxIDM=", "owner": "nix%2Fsupport", "repo": "lasm", "rev": "22b7f045757293cbe055b3c0e5ad4faea943b913", "type": "gitlab" }, "original": { "owner": "cadkin", "repo": "ld-audit-search-mod", "type": "github" "host": "code.ornl.gov", "owner": "nix%2Fsupport", "repo": "lasm", "type": "gitlab" } }, "nixpkgs": { "locked": { "lastModified": 1748026580, "narHash": "sha256-rWtXrcIzU5wm/C8F9LWvUfBGu5U5E7cFzPYT1pHIJaQ=", "owner": "NixOS", "host": "code.ornl.gov", "lastModified": 1774888729, "narHash": "sha256-GavVD61xL/3jWZj7KRnXP1fOh/TuWmaZqGDcIK0w4i0=", "owner": "nix", "repo": "nixpkgs", "rev": "11cb3517b3af6af300dd6c055aeda73c9bf52c48", "type": "github" "rev": "8bb41805823d2de3df19dd8085258d86168d3fc8", "type": "gitlab" }, "original": { "owner": "NixOS", "ref": "25.05", "host": "code.ornl.gov", "owner": "nix", "ref": "release-25.11", "repo": "nixpkgs", "type": "github" "type": "gitlab" } }, "nixpkgs-lib": { "locked": { "lastModified": 1751159883, "narHash": "sha256-urW/Ylk9FIfvXfliA1ywh75yszAbiTEVgpPeinFyVZo=", "lastModified": 1769909678, "narHash": "sha256-cBEymOf4/o3FD5AZnzC3J9hLbiZ+QDT/KDuyHXVJOpM=", "owner": "nix-community", "repo": "nixpkgs.lib", "rev": "14a40a1d7fb9afa4739275ac642ed7301a9ba1ab", "rev": "72716169fe93074c333e8d0173151350670b824c", "type": "github" }, "original": { Loading @@ -129,40 +196,83 @@ "type": "github" } }, "nixpkgs-unstable": { "locked": { "lastModified": 1770931844, "narHash": "sha256-5Y5thtqieBPqI6+aks6i5Zsu1taAf7/uvaF9AVA6IXc=", "owner": "NixOS", "repo": "nixpkgs", "rev": "3a685a83d56c9777be8c20ca98e143f801eee99a", "type": "github" }, "original": { "owner": "NixOS", "ref": "master", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_2": { "locked": { "lastModified": 1761236834, "narHash": "sha256-+pthv6hrL5VLW2UqPdISGuLiUZ6SnAXdd2DdUE+fV2Q=", "owner": "nixos", "repo": "nixpkgs", "rev": "d5faa84122bc0a1fd5d378492efce4e289f8eac1", "type": "github" }, "original": { "owner": "nixos", "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, "nro": { "inputs": { "flake-utils": "flake-utils", "nixpkgs": [ "fire", "firepkgs", "ornlpkgs", "nixpkgs" ] }, "locked": { "lastModified": 1748720382, "narHash": "sha256-8CC1XSJMO+6LU9LOm58u4dqjHTb6dpRFXv+YoA2EO98=", "owner": "lopsided98", "host": "code.ornl.gov", "lastModified": 1774820398, "narHash": "sha256-Y/wfhmxO0bon2lOrEiUeBqyfQeWd9ZaidbLvWMl5+0g=", "owner": "ros%2Fsupport", "repo": "nix-ros-overlay", "rev": "2435baa8acbd4bf244551dff13a42978f8075319", "type": "github" "rev": "21d7c9153ebefb192c550587bb06ccdb31ed4d0f", "type": "gitlab" }, "original": { "owner": "lopsided98", "host": "code.ornl.gov", "owner": "ros%2Fsupport", "ref": "nixos-unstable", "repo": "nix-ros-overlay", "type": "github" "type": "gitlab" } }, "ornlpkgs": { "inputs": { "nixpkgs": "nixpkgs", "lasm": "lasm", "nixpkgs": [ "fire", "firepkgs", "nixpkgs" ], "nixpkgs-unstable": "nixpkgs-unstable", "parts": "parts" }, "locked": { "host": "code.ornl.gov", "lastModified": 1752346665, "narHash": "sha256-1wC9lnFEU9y7N+y6xUr8Bpm7KnoYJynND5gyNEI2W70=", "lastModified": 1774469816, "narHash": "sha256-rqLMKvX8rhb1LmG8/bwj02f7ZBGxf1mX/h1RwLhN19c=", "owner": "nix", "repo": "ornlpkgs", "rev": "2539d16f222c02ada3704993b78238cdc662388e", "rev": "e1a11bd9f75b3ba3008ce525250636c89e98b693", "type": "gitlab" }, "original": { Loading @@ -172,38 +282,16 @@ "type": "gitlab" } }, "oru": { "inputs": { "extended-msgs": "extended-msgs", "fire": [ "fire" ] }, "locked": { "lastModified": 1753373956, "narHash": "sha256-YN8VBE6UFOJyrbmmL2CBbSD8zb4wdxslSFJcqvAWB/k=", "ref": "master", "rev": "4f7b8dc7ac2e64fe00e5b7d612012be1357ebbbc", "revCount": 15, "type": "git", "url": "ssh://git@code.ornl.gov/mdf/ros/oru.git" }, "original": { "ref": "master", "type": "git", "url": "ssh://git@code.ornl.gov/mdf/ros/oru.git" } }, "parts": { "inputs": { "nixpkgs-lib": "nixpkgs-lib" }, "locked": { "lastModified": 1751413152, "narHash": "sha256-Tyw1RjYEsp5scoigs1384gIg6e0GoBVjms4aXFfRssQ=", "lastModified": 1769996383, "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "owner": "hercules-ci", "repo": "flake-parts", "rev": "77826244401ea9de6e3bac47c2db46005e1f30b5", "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "type": "github" }, "original": { Loading @@ -214,8 +302,57 @@ }, "root": { "inputs": { "fire": "fire", "oru": "oru" "fire": "fire" } }, "ros2nix": { "inputs": { "flake-compat": "flake-compat", "flake-utils": "flake-utils_3", "nix-ros-overlay": [ "fire", "firepkgs", "nro" ], "nixpkgs": [ "fire", "firepkgs", "nixpkgs" ], "rosdistro": "rosdistro", "treefmt-nix": "treefmt-nix" }, "locked": { "host": "code.ornl.gov", "lastModified": 1772729386, "narHash": "sha256-tU9VxhXU2wRMQyxyrUcx9b7OhXjnEdHcRcZYWLIk53Q=", "owner": "ros%2Fsupport", "repo": "ros2nix", "rev": "34bb749dfdf606462ba8460361e9a291d669714b", "type": "gitlab" }, "original": { "host": "code.ornl.gov", "owner": "ros%2Fsupport", "ref": "fire", "repo": "ros2nix", "type": "gitlab" } }, "rosdistro": { "flake": false, "locked": { "lastModified": 1772615193, "narHash": "sha256-Er+II9A92TPAn6zIp/3K3XDi7DF7D057lVIT5RiAPvw=", "owner": "ros", "repo": "rosdistro", "rev": "5a10a970c0e4639a64518ac8fe16a047f67873f6", "type": "github" }, "original": { "owner": "ros", "repo": "rosdistro", "type": "github" } }, "systems": { Loading @@ -232,6 +369,54 @@ "repo": "default", "type": "github" } }, "systems_2": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "owner": "nix-systems", "repo": "default", "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "type": "github" }, "original": { "owner": "nix-systems", "repo": "default", "type": "github" } }, "systems_3": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "owner": "nix-systems", "repo": "default", "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "type": "github" }, "original": { "owner": "nix-systems", "repo": "default", "type": "github" } }, "treefmt-nix": { "inputs": { "nixpkgs": "nixpkgs_2" }, "locked": { "lastModified": 1767122417, "narHash": "sha256-yOt/FTB7oSEKQH9EZMFMeuldK1HGpQs2eAzdS9hNS/o=", "owner": "numtide", "repo": "treefmt-nix", "rev": "dec15f37015ac2e774c84d0952d57fcdf169b54d", "type": "github" }, "original": { "owner": "numtide", "repo": "treefmt-nix", "type": "github" } } }, "root": "root", Loading flake.nix +9 −12 Original line number Diff line number Diff line Loading @@ -8,23 +8,16 @@ repo = "fire"; host = "code.ornl.gov"; }; oru = { type = "git"; url = "git@code.ornl.gov:mdf/ros/oru.git"; ref = "master"; inputs.fire.follows = "fire"; }; }; outputs = inputs @ { self, fire, ... }: ( fire.lib.mkPackage inputs { name = "opcua-bridge"; version = "0.0.1"; version = "0.1.0"; package = ( { src, version, name, src, version, lib, buildRosPackage, Loading @@ -32,11 +25,11 @@ rclcpp, rclcpp-action, rosidl-default-generators, oru, open62541, open62541pp open62541, open62541pp, fmt, std-msgs }: buildRosPackage { pname = "opcua-bridge"; pname = name; inherit version src; nativeBuildInputs = [ Loading @@ -47,9 +40,13 @@ buildInputs = [ rclcpp rclcpp-action oru open62541 open62541pp fmt ]; propagatedBuildInputs = [ std-msgs ]; meta = { Loading include/opcua_bridge/log.hpp 0 → 100644 +122 −0 Original line number Diff line number Diff line #pragma once // ROS2 #include <rclcpp/rclcpp.hpp> #include <rclcpp/logger.hpp> #include <rcutils/logging_macros.h> // fmt #include <fmt/core.h> #include <fmt/ranges.h> namespace ornl::ros::util { namespace log { template<typename... args_t> void dump(rclcpp::Logger logger, args_t&&... args) { for (const auto& printable : { args... }) { RCLCPP_DEBUG(logger, fmt::format("{}", printable).c_str()); } } template<typename... args_t> void debug(rclcpp::Logger logger, fmt::format_string<args_t...> format, args_t&&... args) { RCLCPP_DEBUG(logger, fmt::format(format, std::forward<args_t>(args)...).c_str()); } template<typename... args_t> void info(rclcpp::Logger logger, fmt::format_string<args_t...> format, args_t&&... args) { RCLCPP_INFO(logger, fmt::format(format, std::forward<args_t>(args)...).c_str()); } template<typename... args_t> void warn(rclcpp::Logger logger, fmt::format_string<args_t...> format, args_t&&... args) { RCLCPP_WARN(logger, fmt::format(format, std::forward<args_t>(args)...).c_str()); } template<typename... args_t> void error(rclcpp::Logger logger, fmt::format_string<args_t...> format, args_t&&... args) { RCLCPP_ERROR(logger, fmt::format(format, std::forward<args_t>(args)...).c_str()); } template<typename... args_t> void fatal(rclcpp::Logger logger, fmt::format_string<args_t...> format, args_t&&... args) { RCLCPP_FATAL(logger, fmt::format(format, std::forward<args_t>(args)...).c_str()); } } class CapturedLogger { public: CapturedLogger( rclcpp::Logger logger, std::string prefix = {} ) : m_rcl_logger(logger) { if (!prefix.empty()) { m_prefix = "[" + prefix + "]"; m_prefix += " "; } } template<typename... args_t> void dump(args_t&&... args) const { for (const auto& printable : { args... }) { this->info("dump: {}", printable); } } template<typename... args_t> void debug(fmt::format_string<args_t...> format, args_t&&... args) const { log::debug( m_rcl_logger, "{}{}", m_prefix, fmt::format(format, std::forward<args_t>(args)...) ); } template<typename... args_t> void info(fmt::format_string<args_t...> format, args_t&&... args) const { log::info( m_rcl_logger, "{}{}", m_prefix, fmt::format(format, std::forward<args_t>(args)...) ); } template<typename... args_t> void warn(fmt::format_string<args_t...> format, args_t&&... args) const { log::warn( m_rcl_logger, "{}{}", m_prefix, fmt::format(format, std::forward<args_t>(args)...) ); } template<typename... args_t> void error(fmt::format_string<args_t...> format, args_t&&... args) const { log::error( m_rcl_logger, "{}{}", m_prefix, fmt::format(format, std::forward<args_t>(args)...) ); } template<typename... args_t> void fatal(fmt::format_string<args_t...> format, args_t&&... args) const { log::fatal( m_rcl_logger, "{}{}", m_prefix, fmt::format(format, std::forward<args_t>(args)...) ); } private: rclcpp::Logger m_rcl_logger; std::string m_prefix; }; } include/opcua_bridge/node.hpp +8 −2 Original line number Diff line number Diff line Loading @@ -4,10 +4,11 @@ #include <rclcpp/rclcpp.hpp> // oru #include "oru/rclcpp/log.hpp" #include "opcua_bridge/log.hpp" // open62541pp #include <open62541pp/client.hpp> #include <open62541pp/node.hpp> namespace obridge { class OpcuaNode final : public rclcpp::Node { Loading @@ -26,7 +27,12 @@ namespace obridge { ornl::ros::util::CapturedLogger m_logger; opcua::Client m_client; std::map<std::string, rclcpp::PublisherBase::SharedPtr> m_publishers; struct OpcuaData { std::shared_ptr<opcua::Node<opcua::Client>> node; rclcpp::PublisherBase::SharedPtr publisher; }; std::map<std::string, OpcuaData> m_publishers; }; } Loading
CMakeLists.txt +2 −2 Original line number Diff line number Diff line Loading @@ -22,10 +22,10 @@ find_package(rosidl_default_generators REQUIRED) # ROS find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) # Standard (e.g. fmt) find_package(fmt REQUIRED) find_package(oru REQUIRED) find_package(open62541pp REQUIRED) list( Loading @@ -33,7 +33,7 @@ list( rclcpp::rclcpp fmt::fmt open62541pp::open62541pp oru::core ${std_msgs_TARGETS} ) # Interface generation. Loading
flake.lock +277 −92 Original line number Diff line number Diff line { "nodes": { "extended-msgs": { "fire": { "inputs": { "fire": [ "oru", "fire" "firepkgs": "firepkgs", "nixpkgs": [ "fire", "firepkgs", "nixpkgs" ], "ornlpkgs": [ "fire", "firepkgs", "ornlpkgs" ], "parts": [ "fire", "firepkgs", "parts" ], "ros2nix": [ "fire", "firepkgs", "ros2nix" ] }, "locked": { "lastModified": 1753312847, "narHash": "sha256-v9MNcFVlHw/xyn7v/aT0zh+Ze8ZEn+k9CM8AhqI59Nw=", "ref": "master", "rev": "956da98e4f4714062841f9508cd8a3ddc26bb374", "revCount": 8, "type": "git", "url": "ssh://git@code.ornl.gov/mdf/ros/extended-msgs.git" "host": "code.ornl.gov", "lastModified": 1774901632, "narHash": "sha256-pzsobcm+54pQVQ8TRTLRBgYCiTe7MeCTBiY8W+usNKs=", "owner": "ros", "repo": "fire", "rev": "30401a919d428a18d5123ede392fe1837ed76d7f", "type": "gitlab" }, "original": { "ref": "master", "type": "git", "url": "ssh://git@code.ornl.gov/mdf/ros/extended-msgs.git" "host": "code.ornl.gov", "owner": "ros", "repo": "fire", "type": "gitlab" } }, "fire": { "firepkgs": { "inputs": { "lasm": "lasm", "nixpkgs": [ "fire", "ornlpkgs", "nixpkgs" ], "nixpkgs": "nixpkgs", "nro": "nro", "ornlpkgs": "ornlpkgs", "parts": [ "fire", "firepkgs", "ornlpkgs", "parts" ] ], "ros2nix": "ros2nix" }, "locked": { "host": "code.ornl.gov", "lastModified": 1753319212, "narHash": "sha256-/E79cRl3C5bNMHCkLIMRxklT6JnOaQ6+POZH1GkexQY=", "owner": "ros", "repo": "fire", "rev": "ecbd67c9f5fd31ecfc3fc9fd8bddbaea843486d1", "lastModified": 1774901529, "narHash": "sha256-BIKv7PFeqnZQg+wy4KQ6AbAx/YT1OFPql33gcKCRejo=", "owner": "ros%2Fsupport", "repo": "firepkgs", "rev": "9ad7d1f9b806213a61f835d82f93b0c8f9b5f592", "type": "gitlab" }, "original": { "host": "code.ornl.gov", "owner": "ros", "repo": "fire", "owner": "ros%2Fsupport", "repo": "firepkgs", "type": "gitlab" } }, "flake-compat": { "locked": { "lastModified": 1696426674, "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "revCount": 57, "type": "tarball", "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" }, "original": { "type": "tarball", "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" } }, "flake-utils": { "inputs": { "systems": "systems" Loading @@ -72,55 +101,93 @@ "type": "github" } }, "flake-utils_2": { "inputs": { "systems": "systems_2" }, "locked": { "lastModified": 1731533236, "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { "owner": "numtide", "repo": "flake-utils", "type": "github" } }, "flake-utils_3": { "inputs": { "systems": "systems_3" }, "locked": { "lastModified": 1710146030, "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { "owner": "numtide", "repo": "flake-utils", "type": "github" } }, "lasm": { "inputs": { "flake-utils": [ "fire", "nro", "flake-utils" ], "flake-utils": "flake-utils_2", "nixpkgs": [ "fire", "firepkgs", "ornlpkgs", "nixpkgs" ] }, "locked": { "lastModified": 1749414546, "narHash": "sha256-K28T2POA8mKNs0TwfjYZCSCAljPX3rLy9KnCcRrRvbY=", "owner": "cadkin", "repo": "ld-audit-search-mod", "rev": "b662dd19c285acc2cd912f45a6f563882ad4913a", "type": "github" "host": "code.ornl.gov", "lastModified": 1770138893, "narHash": "sha256-1NTCgbqtdQeoJzfUdyBCFbOCaHYbfmkrbYZxiDkxIDM=", "owner": "nix%2Fsupport", "repo": "lasm", "rev": "22b7f045757293cbe055b3c0e5ad4faea943b913", "type": "gitlab" }, "original": { "owner": "cadkin", "repo": "ld-audit-search-mod", "type": "github" "host": "code.ornl.gov", "owner": "nix%2Fsupport", "repo": "lasm", "type": "gitlab" } }, "nixpkgs": { "locked": { "lastModified": 1748026580, "narHash": "sha256-rWtXrcIzU5wm/C8F9LWvUfBGu5U5E7cFzPYT1pHIJaQ=", "owner": "NixOS", "host": "code.ornl.gov", "lastModified": 1774888729, "narHash": "sha256-GavVD61xL/3jWZj7KRnXP1fOh/TuWmaZqGDcIK0w4i0=", "owner": "nix", "repo": "nixpkgs", "rev": "11cb3517b3af6af300dd6c055aeda73c9bf52c48", "type": "github" "rev": "8bb41805823d2de3df19dd8085258d86168d3fc8", "type": "gitlab" }, "original": { "owner": "NixOS", "ref": "25.05", "host": "code.ornl.gov", "owner": "nix", "ref": "release-25.11", "repo": "nixpkgs", "type": "github" "type": "gitlab" } }, "nixpkgs-lib": { "locked": { "lastModified": 1751159883, "narHash": "sha256-urW/Ylk9FIfvXfliA1ywh75yszAbiTEVgpPeinFyVZo=", "lastModified": 1769909678, "narHash": "sha256-cBEymOf4/o3FD5AZnzC3J9hLbiZ+QDT/KDuyHXVJOpM=", "owner": "nix-community", "repo": "nixpkgs.lib", "rev": "14a40a1d7fb9afa4739275ac642ed7301a9ba1ab", "rev": "72716169fe93074c333e8d0173151350670b824c", "type": "github" }, "original": { Loading @@ -129,40 +196,83 @@ "type": "github" } }, "nixpkgs-unstable": { "locked": { "lastModified": 1770931844, "narHash": "sha256-5Y5thtqieBPqI6+aks6i5Zsu1taAf7/uvaF9AVA6IXc=", "owner": "NixOS", "repo": "nixpkgs", "rev": "3a685a83d56c9777be8c20ca98e143f801eee99a", "type": "github" }, "original": { "owner": "NixOS", "ref": "master", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_2": { "locked": { "lastModified": 1761236834, "narHash": "sha256-+pthv6hrL5VLW2UqPdISGuLiUZ6SnAXdd2DdUE+fV2Q=", "owner": "nixos", "repo": "nixpkgs", "rev": "d5faa84122bc0a1fd5d378492efce4e289f8eac1", "type": "github" }, "original": { "owner": "nixos", "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, "nro": { "inputs": { "flake-utils": "flake-utils", "nixpkgs": [ "fire", "firepkgs", "ornlpkgs", "nixpkgs" ] }, "locked": { "lastModified": 1748720382, "narHash": "sha256-8CC1XSJMO+6LU9LOm58u4dqjHTb6dpRFXv+YoA2EO98=", "owner": "lopsided98", "host": "code.ornl.gov", "lastModified": 1774820398, "narHash": "sha256-Y/wfhmxO0bon2lOrEiUeBqyfQeWd9ZaidbLvWMl5+0g=", "owner": "ros%2Fsupport", "repo": "nix-ros-overlay", "rev": "2435baa8acbd4bf244551dff13a42978f8075319", "type": "github" "rev": "21d7c9153ebefb192c550587bb06ccdb31ed4d0f", "type": "gitlab" }, "original": { "owner": "lopsided98", "host": "code.ornl.gov", "owner": "ros%2Fsupport", "ref": "nixos-unstable", "repo": "nix-ros-overlay", "type": "github" "type": "gitlab" } }, "ornlpkgs": { "inputs": { "nixpkgs": "nixpkgs", "lasm": "lasm", "nixpkgs": [ "fire", "firepkgs", "nixpkgs" ], "nixpkgs-unstable": "nixpkgs-unstable", "parts": "parts" }, "locked": { "host": "code.ornl.gov", "lastModified": 1752346665, "narHash": "sha256-1wC9lnFEU9y7N+y6xUr8Bpm7KnoYJynND5gyNEI2W70=", "lastModified": 1774469816, "narHash": "sha256-rqLMKvX8rhb1LmG8/bwj02f7ZBGxf1mX/h1RwLhN19c=", "owner": "nix", "repo": "ornlpkgs", "rev": "2539d16f222c02ada3704993b78238cdc662388e", "rev": "e1a11bd9f75b3ba3008ce525250636c89e98b693", "type": "gitlab" }, "original": { Loading @@ -172,38 +282,16 @@ "type": "gitlab" } }, "oru": { "inputs": { "extended-msgs": "extended-msgs", "fire": [ "fire" ] }, "locked": { "lastModified": 1753373956, "narHash": "sha256-YN8VBE6UFOJyrbmmL2CBbSD8zb4wdxslSFJcqvAWB/k=", "ref": "master", "rev": "4f7b8dc7ac2e64fe00e5b7d612012be1357ebbbc", "revCount": 15, "type": "git", "url": "ssh://git@code.ornl.gov/mdf/ros/oru.git" }, "original": { "ref": "master", "type": "git", "url": "ssh://git@code.ornl.gov/mdf/ros/oru.git" } }, "parts": { "inputs": { "nixpkgs-lib": "nixpkgs-lib" }, "locked": { "lastModified": 1751413152, "narHash": "sha256-Tyw1RjYEsp5scoigs1384gIg6e0GoBVjms4aXFfRssQ=", "lastModified": 1769996383, "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "owner": "hercules-ci", "repo": "flake-parts", "rev": "77826244401ea9de6e3bac47c2db46005e1f30b5", "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "type": "github" }, "original": { Loading @@ -214,8 +302,57 @@ }, "root": { "inputs": { "fire": "fire", "oru": "oru" "fire": "fire" } }, "ros2nix": { "inputs": { "flake-compat": "flake-compat", "flake-utils": "flake-utils_3", "nix-ros-overlay": [ "fire", "firepkgs", "nro" ], "nixpkgs": [ "fire", "firepkgs", "nixpkgs" ], "rosdistro": "rosdistro", "treefmt-nix": "treefmt-nix" }, "locked": { "host": "code.ornl.gov", "lastModified": 1772729386, "narHash": "sha256-tU9VxhXU2wRMQyxyrUcx9b7OhXjnEdHcRcZYWLIk53Q=", "owner": "ros%2Fsupport", "repo": "ros2nix", "rev": "34bb749dfdf606462ba8460361e9a291d669714b", "type": "gitlab" }, "original": { "host": "code.ornl.gov", "owner": "ros%2Fsupport", "ref": "fire", "repo": "ros2nix", "type": "gitlab" } }, "rosdistro": { "flake": false, "locked": { "lastModified": 1772615193, "narHash": "sha256-Er+II9A92TPAn6zIp/3K3XDi7DF7D057lVIT5RiAPvw=", "owner": "ros", "repo": "rosdistro", "rev": "5a10a970c0e4639a64518ac8fe16a047f67873f6", "type": "github" }, "original": { "owner": "ros", "repo": "rosdistro", "type": "github" } }, "systems": { Loading @@ -232,6 +369,54 @@ "repo": "default", "type": "github" } }, "systems_2": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "owner": "nix-systems", "repo": "default", "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "type": "github" }, "original": { "owner": "nix-systems", "repo": "default", "type": "github" } }, "systems_3": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "owner": "nix-systems", "repo": "default", "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "type": "github" }, "original": { "owner": "nix-systems", "repo": "default", "type": "github" } }, "treefmt-nix": { "inputs": { "nixpkgs": "nixpkgs_2" }, "locked": { "lastModified": 1767122417, "narHash": "sha256-yOt/FTB7oSEKQH9EZMFMeuldK1HGpQs2eAzdS9hNS/o=", "owner": "numtide", "repo": "treefmt-nix", "rev": "dec15f37015ac2e774c84d0952d57fcdf169b54d", "type": "github" }, "original": { "owner": "numtide", "repo": "treefmt-nix", "type": "github" } } }, "root": "root", Loading
flake.nix +9 −12 Original line number Diff line number Diff line Loading @@ -8,23 +8,16 @@ repo = "fire"; host = "code.ornl.gov"; }; oru = { type = "git"; url = "git@code.ornl.gov:mdf/ros/oru.git"; ref = "master"; inputs.fire.follows = "fire"; }; }; outputs = inputs @ { self, fire, ... }: ( fire.lib.mkPackage inputs { name = "opcua-bridge"; version = "0.0.1"; version = "0.1.0"; package = ( { src, version, name, src, version, lib, buildRosPackage, Loading @@ -32,11 +25,11 @@ rclcpp, rclcpp-action, rosidl-default-generators, oru, open62541, open62541pp open62541, open62541pp, fmt, std-msgs }: buildRosPackage { pname = "opcua-bridge"; pname = name; inherit version src; nativeBuildInputs = [ Loading @@ -47,9 +40,13 @@ buildInputs = [ rclcpp rclcpp-action oru open62541 open62541pp fmt ]; propagatedBuildInputs = [ std-msgs ]; meta = { Loading
include/opcua_bridge/log.hpp 0 → 100644 +122 −0 Original line number Diff line number Diff line #pragma once // ROS2 #include <rclcpp/rclcpp.hpp> #include <rclcpp/logger.hpp> #include <rcutils/logging_macros.h> // fmt #include <fmt/core.h> #include <fmt/ranges.h> namespace ornl::ros::util { namespace log { template<typename... args_t> void dump(rclcpp::Logger logger, args_t&&... args) { for (const auto& printable : { args... }) { RCLCPP_DEBUG(logger, fmt::format("{}", printable).c_str()); } } template<typename... args_t> void debug(rclcpp::Logger logger, fmt::format_string<args_t...> format, args_t&&... args) { RCLCPP_DEBUG(logger, fmt::format(format, std::forward<args_t>(args)...).c_str()); } template<typename... args_t> void info(rclcpp::Logger logger, fmt::format_string<args_t...> format, args_t&&... args) { RCLCPP_INFO(logger, fmt::format(format, std::forward<args_t>(args)...).c_str()); } template<typename... args_t> void warn(rclcpp::Logger logger, fmt::format_string<args_t...> format, args_t&&... args) { RCLCPP_WARN(logger, fmt::format(format, std::forward<args_t>(args)...).c_str()); } template<typename... args_t> void error(rclcpp::Logger logger, fmt::format_string<args_t...> format, args_t&&... args) { RCLCPP_ERROR(logger, fmt::format(format, std::forward<args_t>(args)...).c_str()); } template<typename... args_t> void fatal(rclcpp::Logger logger, fmt::format_string<args_t...> format, args_t&&... args) { RCLCPP_FATAL(logger, fmt::format(format, std::forward<args_t>(args)...).c_str()); } } class CapturedLogger { public: CapturedLogger( rclcpp::Logger logger, std::string prefix = {} ) : m_rcl_logger(logger) { if (!prefix.empty()) { m_prefix = "[" + prefix + "]"; m_prefix += " "; } } template<typename... args_t> void dump(args_t&&... args) const { for (const auto& printable : { args... }) { this->info("dump: {}", printable); } } template<typename... args_t> void debug(fmt::format_string<args_t...> format, args_t&&... args) const { log::debug( m_rcl_logger, "{}{}", m_prefix, fmt::format(format, std::forward<args_t>(args)...) ); } template<typename... args_t> void info(fmt::format_string<args_t...> format, args_t&&... args) const { log::info( m_rcl_logger, "{}{}", m_prefix, fmt::format(format, std::forward<args_t>(args)...) ); } template<typename... args_t> void warn(fmt::format_string<args_t...> format, args_t&&... args) const { log::warn( m_rcl_logger, "{}{}", m_prefix, fmt::format(format, std::forward<args_t>(args)...) ); } template<typename... args_t> void error(fmt::format_string<args_t...> format, args_t&&... args) const { log::error( m_rcl_logger, "{}{}", m_prefix, fmt::format(format, std::forward<args_t>(args)...) ); } template<typename... args_t> void fatal(fmt::format_string<args_t...> format, args_t&&... args) const { log::fatal( m_rcl_logger, "{}{}", m_prefix, fmt::format(format, std::forward<args_t>(args)...) ); } private: rclcpp::Logger m_rcl_logger; std::string m_prefix; }; }
include/opcua_bridge/node.hpp +8 −2 Original line number Diff line number Diff line Loading @@ -4,10 +4,11 @@ #include <rclcpp/rclcpp.hpp> // oru #include "oru/rclcpp/log.hpp" #include "opcua_bridge/log.hpp" // open62541pp #include <open62541pp/client.hpp> #include <open62541pp/node.hpp> namespace obridge { class OpcuaNode final : public rclcpp::Node { Loading @@ -26,7 +27,12 @@ namespace obridge { ornl::ros::util::CapturedLogger m_logger; opcua::Client m_client; std::map<std::string, rclcpp::PublisherBase::SharedPtr> m_publishers; struct OpcuaData { std::shared_ptr<opcua::Node<opcua::Client>> node; rclcpp::PublisherBase::SharedPtr publisher; }; std::map<std::string, OpcuaData> m_publishers; }; }