Commit 7ad855ba authored by Adkins, Cameron's avatar Adkins, Cameron
Browse files

wip: single read

parent 119b2ff5
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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(
@@ -33,7 +33,7 @@ list(
  rclcpp::rclcpp
  fmt::fmt
  open62541pp::open62541pp
  oru::core
  ${std_msgs_TARGETS}
)

# Interface generation.
+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"
@@ -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": {
@@ -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": {
@@ -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": {
@@ -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": {
@@ -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",
+9 −12
Original line number Diff line number Diff line
@@ -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,

@@ -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 = [
@@ -47,9 +40,13 @@
          buildInputs = [
            rclcpp
            rclcpp-action
            oru
            open62541
            open62541pp
            fmt
          ];

          propagatedBuildInputs = [
            std-msgs
          ];

          meta = {
+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;
    };
}
+8 −2
Original line number Diff line number Diff line
@@ -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 {
@@ -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