Skip to content

Commit a5ae0c5

Browse files
Feature/dynamic configs (#23)
* use new infrastructure to set config_utilities settings * actually try and use dynamic configs instead of custom config wrapper * fix config bug and dynamic config namespacing * fix duplicated config names * fix path resolution and add gui to launch
1 parent a0dad81 commit a5ae0c5

21 files changed

+112
-260
lines changed

hydra_ros/app/hydra_node.cpp

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,6 @@ struct RunSettings {
5050
size_t robot_id = 0;
5151
bool exit_after_clock = false;
5252
bool force_shutdown = false;
53-
size_t print_width = 100;
54-
size_t print_indent = 45;
55-
bool print_missing = false;
56-
bool allow_plugins = true;
57-
bool verbose_plugins = false;
58-
bool trace_plugin_allocations = false;
5953
std::vector<std::string> paths;
6054
int config_verbosity = 1;
6155
bool forward_glog_to_ros = true;
@@ -71,12 +65,6 @@ void declare_config(RunSettings& config) {
7165
field(config.robot_id, "robot_id");
7266
field(config.exit_after_clock, "exit_after_clock");
7367
field(config.force_shutdown, "force_shutdown");
74-
field(config.print_width, "print_width");
75-
field(config.print_indent, "print_indent");
76-
field(config.print_missing, "print_missing");
77-
field(config.allow_plugins, "allow_plugins");
78-
field(config.verbose_plugins, "verbose_plugins");
79-
field(config.trace_plugin_allocations, "trace_plugin_allocations");
8068
field(config.paths, "paths");
8169
field(config.config_verbosity, "config_verbosity");
8270
field(config.forward_glog_to_ros, "forward_glog_to_ros");
@@ -123,6 +111,7 @@ struct RosSink : google::LogSink {
123111

124112
int main(int argc, char* argv[]) {
125113
config::initContext(argc, argv, true);
114+
config::setConfigSettingsFromContext();
126115
rclcpp::init(argc, argv);
127116

128117
const auto settings = config::fromContext<hydra::RunSettings>();
@@ -144,12 +133,6 @@ int main(int argc, char* argv[]) {
144133
}
145134

146135
config::Settings().setLogger("glog");
147-
config::Settings().print_width = settings.print_width;
148-
config::Settings().print_indent = settings.print_indent;
149-
config::Settings().print_missing = settings.print_missing;
150-
config::Settings().allow_external_libraries = settings.allow_plugins;
151-
config::Settings().verbose_external_load = settings.verbose_plugins;
152-
config::Settings().print_external_allocations = settings.trace_plugin_allocations;
153136
[[maybe_unused]] const auto plugins = config::loadExternalFactories(settings.paths);
154137

155138
ianvs::NodeHandle nh(*node);
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
---
2-
external_plugins:
3-
allow_plugins: true
4-
trace_plugin_allocations: true
5-
paths: [hydra_ros]
2+
external_libraries: {enabled: true}
3+
external_library_paths: [hydra_ros]

hydra_ros/include/hydra_ros/frontend/places_visualizer.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@
3333
* purposes notwithstanding any copyright notation herein.
3434
* -------------------------------------------------------------------------- */
3535
#pragma once
36+
#include <config_utilities/dynamic_config.h>
3637
#include <hydra/frontend/gvd_place_extractor.h>
3738
#include <hydra_visualizer/color/colormap_utilities.h>
3839
#include <hydra_visualizer/layer_info.h>
39-
#include <hydra_visualizer/utils/config_wrapper.h>
4040
#include <hydra_visualizer/utils/marker_group_pub.h>
4141
#include <ianvs/node_handle.h>
4242

@@ -77,8 +77,8 @@ class PlacesVisualizer : public GvdPlaceExtractor::Sink {
7777
protected:
7878
ianvs::NodeHandle nh_;
7979
MarkerGroupPub pubs_;
80-
visualizer::ConfigWrapper<GvdVisualizerConfig> gvd_config_;
81-
visualizer::ConfigWrapper<visualizer::LayerConfig> layer_config_;
80+
config::DynamicConfig<GvdVisualizerConfig> gvd_config_;
81+
config::DynamicConfig<visualizer::LayerConfig> layer_config_;
8282
const visualizer::RangeColormap colormap_;
8383

8484
private:

hydra_ros/src/frontend/places_visualizer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ PlacesVisualizer::PlacesVisualizer(const Config& config)
7272
: config(config),
7373
nh_(getHydraNodeHandle(config.ns)),
7474
pubs_(nh_),
75-
gvd_config_(nh_, "gvd"),
76-
layer_config_(nh_, "graph"),
75+
gvd_config_("gvd"),
76+
layer_config_("graph"),
7777
colormap_(config.colormap) {}
7878

7979
std::string PlacesVisualizer::printInfo() const { return config::toString(config); }

hydra_visualizer/CMakeLists.txt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ option(BUILD_SHARED_LIBS "Build shared libraries" ON)
1313

1414
find_package(ament_cmake REQUIRED)
1515
find_package(config_utilities REQUIRED)
16+
find_package(config_utilities_ros REQUIRED)
1617
find_package(glog REQUIRED)
1718
find_package(gflags REQUIRED)
1819
find_package(hydra_msgs REQUIRED)
@@ -59,6 +60,7 @@ target_include_directories(
5960
target_link_libraries(
6061
${PROJECT_NAME}
6162
PUBLIC config_utilities::config_utilities
63+
config_utilities_ros::config_utilities_ros
6264
ianvs::ianvs
6365
rclcpp::rclcpp
6466
spark_dsg::spark_dsg
@@ -76,12 +78,22 @@ ament_target_dependencies(
7678
)
7779

7880
add_executable(hydra_visualizer_node app/hydra_visualizer_node.cpp)
79-
target_link_libraries(hydra_visualizer_node ${PROJECT_NAME} gflags glog::glog)
81+
target_link_libraries(
82+
hydra_visualizer_node
83+
${PROJECT_NAME}
84+
gflags
85+
glog::glog
86+
)
8087

8188
if(BUILD_TESTING)
8289
find_package(ament_cmake_gtest)
8390
ament_add_gtest(test_${PROJECT_NAME} tests/main.cpp tests/test_ear_clipping.cpp)
84-
target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME} gflags glog::glog)
91+
target_link_libraries(
92+
test_${PROJECT_NAME}
93+
${PROJECT_NAME}
94+
gflags
95+
glog::glog
96+
)
8597
endif()
8698

8799
install(
@@ -100,6 +112,7 @@ install(DIRECTORY rviz DESTINATION share/${PROJECT_NAME})
100112
ament_export_targets(${PROJECT_NAME}-targets HAS_LIBRARY_TARGET)
101113
ament_export_dependencies(
102114
config_utilities
115+
config_utilities_ros
103116
hydra_msgs
104117
ianvs
105118
kimera_pgmo_msgs

hydra_visualizer/app/hydra_visualizer_node.cpp

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -46,40 +46,26 @@
4646
#include "hydra_visualizer/visualizer_node.h"
4747

4848
namespace hydra::visualizer {
49-
struct ExternalPluginConfig {
50-
bool allow_plugins = true;
51-
bool verbose_plugins = false;
52-
bool trace_plugin_allocations = false;
53-
std::vector<std::string> paths;
54-
};
5549

5650
struct NodeSettings {
57-
ExternalPluginConfig external_plugins;
5851
int glog_verbosity = 1;
5952
int glog_level = 0;
53+
std::vector<std::string> external_library_paths;
6054
};
6155

62-
void declare_config(ExternalPluginConfig& config) {
63-
using namespace config;
64-
name("ExternalPluginConfig");
65-
field(config.allow_plugins, "allow_plugins");
66-
field(config.verbose_plugins, "verbose_plugins");
67-
field(config.trace_plugin_allocations, "trace_plugin_allocations");
68-
field(config.paths, "paths");
69-
}
70-
7156
void declare_config(NodeSettings& config) {
7257
using namespace config;
7358
name("NodeSettings");
74-
field(config.external_plugins, "external_plugins");
7559
field(config.glog_verbosity, "glog_verbosity");
7660
field(config.glog_level, "glog_level");
61+
field(config.external_library_paths, "external_library_paths");
7762
}
7863

7964
} // namespace hydra::visualizer
8065

8166
int main(int argc, char** argv) {
8267
config::initContext(argc, argv, true);
68+
config::setConfigSettingsFromContext();
8369
rclcpp::init(argc, argv);
8470

8571
const auto node_settings = config::fromContext<hydra::visualizer::NodeSettings>();
@@ -96,14 +82,8 @@ int main(int argc, char** argv) {
9682

9783
VLOG(1) << "Settings:\n" << config::toString(node_settings);
9884

99-
auto& settings = config::Settings();
100-
settings.allow_external_libraries = node_settings.external_plugins.allow_plugins;
101-
settings.verbose_external_load = node_settings.external_plugins.verbose_plugins;
102-
settings.print_external_allocations =
103-
node_settings.external_plugins.trace_plugin_allocations;
10485
[[maybe_unused]] const auto plugins =
105-
config::loadExternalFactories(node_settings.external_plugins.paths);
106-
86+
config::loadExternalFactories(node_settings.external_library_paths);
10787

10888
rclcpp::executors::MultiThreadedExecutor executor;
10989
{ // start visualizer scope
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
---
2-
external_plugins:
3-
allow_plugins: false
2+
external_libraries: {enabled: false}

hydra_visualizer/include/hydra_visualizer/layer_info.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,13 +153,13 @@ class LayerInfo {
153153
std::function<spark_dsg::Color(const spark_dsg::SceneGraphNode&)>;
154154
using TextFunction = std::function<std::string(const spark_dsg::SceneGraphNode&)>;
155155

156-
LayerInfo(const LayerConfig& config);
156+
LayerInfo(const LayerConfig config);
157157
LayerInfo& offset(double offset_size = 1.0, bool collapse = true);
158158
LayerInfo& graph(const spark_dsg::DynamicSceneGraph& graph, spark_dsg::LayerId layer);
159159

160160
bool shouldVisualize(const spark_dsg::SceneGraphNode& node) const;
161161

162-
const LayerConfig& config;
162+
const LayerConfig config;
163163

164164
double z_offset;
165165
ColorFunction node_color;

hydra_visualizer/include/hydra_visualizer/plugins/basis_point_plugin.h

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,16 @@
3434
* -------------------------------------------------------------------------- */
3535
#pragma once
3636

37+
#include <config_utilities/dynamic_config.h>
3738
#include <ianvs/node_handle.h>
3839

3940
#include <rclcpp/publisher.hpp>
4041
#include <visualization_msgs/msg/marker_array.hpp>
4142

4243
#include "hydra_visualizer/color/colormap_utilities.h"
44+
#include "hydra_visualizer/layer_info.h"
4345
#include "hydra_visualizer/plugins/visualizer_plugin.h"
44-
#include "hydra_visualizer/utils/config_wrapper.h"
4546
#include "hydra_visualizer/utils/marker_tracker.h"
46-
#include "hydra_visualizer/layer_info.h"
4747

4848
namespace hydra {
4949

@@ -58,7 +58,9 @@ class BasisPointPlugin : public VisualizerPlugin {
5858
double basis_point_scale = 0.1;
5959
double basis_point_alpha = 0.8;
6060
visualizer::CategoricalColormap::Config colormap;
61-
} const config;
61+
visualizer::LayerConfig graph;
62+
};
63+
6264
BasisPointPlugin(const Config& config, ianvs::NodeHandle nh, const std::string& name);
6365

6466
virtual ~BasisPointPlugin() = default;
@@ -73,22 +75,21 @@ class BasisPointPlugin : public VisualizerPlugin {
7375
const spark_dsg::DynamicSceneGraph& graph,
7476
visualization_msgs::msg::MarkerArray& msg) const;
7577

76-
void drawNodes(const std_msgs::msg::Header& header,
77-
const spark_dsg::DynamicSceneGraph& graph,
78-
visualization_msgs::msg::MarkerArray& msg) const;
79-
80-
void drawEdges(const std_msgs::msg::Header& header,
78+
void drawEdges(const Config& config,
79+
const visualizer::CategoricalColormap& colormap,
80+
const std_msgs::msg::Header& header,
8181
const spark_dsg::DynamicSceneGraph& graph,
8282
visualization_msgs::msg::MarkerArray& msg) const;
8383

84-
void drawBasisPoints(const std_msgs::msg::Header& header,
84+
void drawBasisPoints(const Config& config,
85+
const visualizer::CategoricalColormap& colormap,
86+
const std_msgs::msg::Header& header,
8587
const spark_dsg::DynamicSceneGraph& graph,
8688
visualization_msgs::msg::MarkerArray& msg) const;
8789

8890
mutable MarkerTracker tracker_;
91+
config::DynamicConfig<Config> config_;
8992
rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr pub_;
90-
visualizer::ConfigWrapper<visualizer::LayerConfig> layer_config_;
91-
const visualizer::CategoricalColormap colormap_;
9293
};
9394

9495
void declare_config(BasisPointPlugin::Config& config);

hydra_visualizer/include/hydra_visualizer/plugins/places_freespace_plugin.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,14 @@
3333
* purposes notwithstanding any copyright notation herein.
3434
* -------------------------------------------------------------------------- */
3535
#pragma once
36+
#include <config_utilities/dynamic_config.h>
3637
#include <ianvs/node_handle.h>
3738

3839
#include <visualization_msgs/msg/marker_array.hpp>
3940

40-
#include "hydra_visualizer/color/colormap_utilities.h"
41+
#include "hydra_visualizer/layer_info.h"
4142
#include "hydra_visualizer/plugins/visualizer_plugin.h"
42-
#include "hydra_visualizer/utils/config_wrapper.h"
4343
#include "hydra_visualizer/utils/marker_tracker.h"
44-
#include "hydra_visualizer/layer_info.h"
4544

4645
namespace hydra {
4746

@@ -51,7 +50,8 @@ class PlacesFreespacePlugin : public VisualizerPlugin {
5150
bool draw_edges = true;
5251
spark_dsg::Color sphere_color{spark_dsg::Color::red()};
5352
double sphere_alpha = 0.5;
54-
} const config;
53+
visualizer::LayerConfig graph;
54+
};
5555

5656
PlacesFreespacePlugin(const Config& config,
5757
ianvs::NodeHandle nh,
@@ -69,13 +69,14 @@ class PlacesFreespacePlugin : public VisualizerPlugin {
6969
const spark_dsg::DynamicSceneGraph& graph,
7070
visualization_msgs::msg::MarkerArray& msg) const;
7171

72-
void drawSpheres(const std_msgs::msg::Header& header,
72+
void drawSpheres(const Config& config,
73+
const std_msgs::msg::Header& header,
7374
const spark_dsg::SceneGraphLayer& places,
7475
visualization_msgs::msg::MarkerArray& msg) const;
7576

7677
mutable MarkerTracker tracker_;
78+
config::DynamicConfig<Config> config_;
7779
rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr pub_;
78-
visualizer::ConfigWrapper<visualizer::LayerConfig> layer_config_;
7980
};
8081

8182
void declare_config(PlacesFreespacePlugin::Config& config);

0 commit comments

Comments
 (0)