Skip to content

Commit 87725d8

Browse files
Feature/partition configs (#56)
* rename adapters and add config validation * (wip) switch renderer to use layer keys for info and configs * fix compilation error * get default configs working again * (wip) start on interlayer edge configs * rework renderer to use specific interlayer edge configs * (wip) work on using same config keys for interlayer edges * fix key parsing and matching for layers * (wip) actually start on interlayer edge configs * separate key selector from renderer and test * update config and add interlayer color back * fix edge subsampling behavior * make config names more uniform in visualizer * fix formatting * update new adapter to use layer key * turn off place labels for now
1 parent e8f4e19 commit 87725d8

23 files changed

Lines changed: 680 additions & 352 deletions

hydra_ros/include/hydra_ros/visualizer/feature_color_adaptors.h

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22
#include <hydra/openset/embedding_distances.h>
3-
#include <hydra_visualizer/adapters/graph_color.h>
3+
#include <hydra_visualizer/adapters/node_color.h>
44
#include <hydra_visualizer/adapters/text.h>
55

66
#include <rclcpp/subscription.hpp>
@@ -10,7 +10,7 @@
1010

1111
namespace hydra {
1212

13-
class FeatureScoreColor : public GraphColorAdapter {
13+
class FeatureScoreColor : public NodeColorAdapter {
1414
public:
1515
struct Config {
1616
std::string ns = "~";
@@ -23,7 +23,7 @@ class FeatureScoreColor : public GraphColorAdapter {
2323
explicit FeatureScoreColor(const Config& config);
2424
~FeatureScoreColor();
2525
void setGraph(const spark_dsg::DynamicSceneGraph& graph,
26-
spark_dsg::LayerId layer) override;
26+
spark_dsg::LayerKey layer) override;
2727
spark_dsg::Color getColor(const spark_dsg::DynamicSceneGraph& graph,
2828
const spark_dsg::SceneGraphNode& node) const override;
2929

@@ -46,15 +46,11 @@ class FeatureScoreColor : public GraphColorAdapter {
4646
Eigen::VectorXf feature_;
4747
std::unordered_map<spark_dsg::NodeId, float> values_;
4848
std::unique_ptr<EmbeddingDistance> metric_;
49-
50-
inline static const auto registration_ =
51-
config::RegistrationWithConfig<GraphColorAdapter, FeatureScoreColor, Config>(
52-
"FeatureScoreColor");
5349
};
5450

5551
void declare_config(FeatureScoreColor::Config& config);
5652

57-
class NearestFeatureColor : public GraphColorAdapter {
53+
class NearestFeatureColor : public NodeColorAdapter {
5854
public:
5955
struct Config {
6056
config::VirtualConfig<EmbeddingDistance> metric{CosineDistance::Config()};
@@ -70,15 +66,11 @@ class NearestFeatureColor : public GraphColorAdapter {
7066
std::unique_ptr<EmbeddingDistance> metric_;
7167
std::unique_ptr<EmbeddingGroup> features_;
7268
const visualizer::DiscreteColormap colormap_;
73-
74-
inline static const auto registration_ =
75-
config::RegistrationWithConfig<GraphColorAdapter, NearestFeatureColor, Config>(
76-
"NearestFeatureColor");
7769
};
7870

7971
void declare_config(NearestFeatureColor::Config& config);
8072

81-
class NearestFeatureLabel : public visualizer::GraphTextAdapter {
73+
class NearestFeatureLabel : public visualizer::NodeTextAdapter {
8274
public:
8375
struct Config {
8476
config::VirtualConfig<EmbeddingDistance> metric{CosineDistance::Config()};
@@ -94,10 +86,6 @@ class NearestFeatureLabel : public visualizer::GraphTextAdapter {
9486
private:
9587
std::unique_ptr<EmbeddingDistance> metric_;
9688
std::unique_ptr<EmbeddingGroup> features_;
97-
98-
inline static const auto registration_ =
99-
config::RegistrationWithConfig<GraphTextAdapter, NearestFeatureLabel, Config>(
100-
"NearestFeatureLabel");
10189
};
10290

10391
} // namespace hydra

hydra_ros/src/visualizer/feature_color_adaptors.cpp

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,24 @@
1212
#include <spark_dsg/node_symbol.h>
1313

1414
namespace hydra {
15+
namespace {
16+
17+
static const auto score_registration =
18+
config::RegistrationWithConfig<NodeColorAdapter,
19+
FeatureScoreColor,
20+
FeatureScoreColor::Config>("FeatureScoreColor");
21+
22+
static const auto nearest_registration =
23+
config::RegistrationWithConfig<NodeColorAdapter,
24+
NearestFeatureColor,
25+
NearestFeatureColor::Config>("NearestFeatureColor");
26+
27+
static const auto text_registration =
28+
config::RegistrationWithConfig<visualizer::NodeTextAdapter,
29+
NearestFeatureLabel,
30+
NearestFeatureLabel::Config>("NearestFeatureLabel");
31+
32+
} // namespace
1533

1634
using namespace spark_dsg;
1735
using semantic_inference_msgs::msg::FeatureVectorStamped;
@@ -103,13 +121,13 @@ FeatureScoreColor::FeatureScoreColor(const Config& config)
103121

104122
FeatureScoreColor::~FeatureScoreColor() = default;
105123

106-
void FeatureScoreColor::setGraph(const DynamicSceneGraph& graph, LayerId layer_id) {
124+
void FeatureScoreColor::setGraph(const DynamicSceneGraph& graph, LayerKey layer_key) {
107125
values_.clear();
108126
if (!has_feature_ || !metric_) {
109127
return;
110128
}
111129

112-
const auto& layer = graph.getLayer(layer_id);
130+
const auto& layer = graph.getLayer(layer_key.layer, layer_key.partition);
113131
range_.min = 1.0f;
114132
range_.max = 0.0f;
115133
for (const auto& [node_id, node] : layer.nodes()) {

hydra_visualizer/CMakeLists.txt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.22.1)
22
project(hydra_visualizer)
33

4-
set(CMAKE_CXX_STANDARD 17)
4+
set(CMAKE_CXX_STANDARD 20)
55
set(CMAKE_CXX_STANDARD_REQUIRED ON)
66
set(CMAKE_CXX_EXTENSIONS OFF)
77

@@ -31,8 +31,8 @@ add_library(
3131
${PROJECT_NAME}
3232
src/plugins/traversability_plugin.cpp
3333
src/adapters/edge_color.cpp
34-
src/adapters/graph_color.cpp
3534
src/adapters/mesh_color.cpp
35+
src/adapters/node_color.cpp
3636
src/adapters/text.cpp
3737
src/color/colormap_utilities.cpp
3838
src/drawing.cpp
@@ -50,6 +50,7 @@ add_library(
5050
src/plugins/pose_plugin.cpp
5151
src/scene_graph_renderer.cpp
5252
src/utils/ear_clipping.cpp
53+
src/utils/layer_key_selector.cpp
5354
src/utils/marker_group_pub.cpp
5455
src/utils/marker_tracker.cpp
5556
src/utils/polygon_utilities.cpp
@@ -89,7 +90,11 @@ target_link_libraries(
8990

9091
if(BUILD_TESTING)
9192
find_package(ament_cmake_gtest)
92-
ament_add_gtest(test_${PROJECT_NAME} tests/main.cpp tests/test_ear_clipping.cpp)
93+
ament_add_gtest(test_${PROJECT_NAME}
94+
tests/main.cpp
95+
tests/test_ear_clipping.cpp
96+
tests/test_layer_key_selector.cpp
97+
)
9398
target_link_libraries(
9499
test_${PROJECT_NAME}
95100
${PROJECT_NAME}

hydra_visualizer/app/hydra_visualizer_node.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@
4040
#include <glog/logging.h>
4141
#include <ianvs/node_init.h>
4242

43-
#include <filesystem>
44-
4543
#include <rclcpp/rclcpp.hpp>
4644

4745
#include "hydra_visualizer/visualizer_node.h"

hydra_visualizer/config/visualizer_config.yaml

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,50 +9,37 @@ renderer:
99
nodes: {scale: 0.40, color: {type: LabelColorAdapter}, alpha: 0.8, use_sphere: false}
1010
text: {draw: true, collapse: true, adapter: {type: LabelTextAdapter}, height: 0.5, scale: 0.45}
1111
bounding_boxes: {draw: true, collapse: true, scale: 0.05, edge_scale: 0.05, alpha: 0.9, edge_break_ratio: 0.5}
12-
edges: {interlayer_use_source: true, interlayer_scale: 0.08, interlayer_alpha: 0.5}
1312
3:
1413
z_offset_scale: 3.0
1514
visualize: true
1615
nodes: {scale: 0.2, color: {type: ParentColorAdapter, colormap: {palette: colorbrewer}}, alpha: 0.9, use_sphere: true}
17-
edges:
18-
scale: 0.01
19-
alpha: 0.5
20-
color: {type: UniformEdgeColorAdapter}
21-
interlayer_use_source: false
22-
interlayer_scale: 0.08
23-
interlayer_alpha: 0.4
24-
interlayer_insertion_skip: 0
16+
edges: {scale: 0.01, alpha: 0.5, color: {type: UniformEdgeColorAdapter}}
2517
4:
2618
z_offset_scale: 4.2
2719
visualize: true
2820
nodes: {scale: 0.6, color: {type: IdColorAdapter, colormap: {palette: colorbrewer}}, alpha: 0.8, use_sphere: false}
2921
text: {draw: true, height: 1.25, scale: 1.0}
30-
edges:
31-
scale: 0.1
32-
alpha: 0.2
33-
color: {type: UniformEdgeColorAdapter}
34-
interlayer_use_source: true
35-
interlayer_scale: 0.08
36-
interlayer_alpha: 0.4
37-
interlayer_insertion_skip: 0
38-
partitions:
39-
2:
22+
edges: {scale: 0.1, alpha: 0.2, color: {type: UniformEdgeColorAdapter}}
23+
2p*:
4024
z_offset_scale: 0.0
4125
visualize: true
4226
nodes: {scale: 0.15, alpha: 0.9, use_sphere: false, color: {type: PartitionColorAdapter}}
4327
edges: {scale: 0.05, alpha: 0.9, draw_interlayer: false}
4428
text: {draw_layer: true, height: 0.9, scale: 0.8}
45-
3:
29+
3p1:
30+
z_offset_scale: 3.0
31+
visualize: true
32+
nodes: {scale: 0.2, color: {type: LabelColorAdapter}, alpha: 0.9, use_sphere: true}
33+
boundaries: {draw: true, collapse: false, wireframe_scale: 0.1, use_node_color: true, alpha: 1.0}
34+
edges: {scale: 0.01, alpha: 0.5, color: {type: UniformEdgeColorAdapter}}
35+
3p2:
4636
z_offset_scale: 3.0
4737
visualize: true
4838
nodes: {scale: 0.2, color: {type: LabelColorAdapter}, alpha: 0.9, use_sphere: true}
4939
boundaries: {draw: true, collapse: false, wireframe_scale: 0.1, use_node_color: true, alpha: 1.0}
50-
text: {draw: true, collapse: true, adapter: {type: IdTextAdapter}, height: 0.5, scale: 0.45}
51-
edges:
52-
scale: 0.1
53-
alpha: 0.8
54-
color: {type: TraversabilityEdgeColorAdapter}
55-
interlayer_use_source: false
56-
interlayer_scale: 0.08
57-
interlayer_alpha: 0.4
58-
interlayer_insertion_skip: 0
40+
text: {draw: false, collapse: true, adapter: {type: IdTextAdapter}, height: 0.5, scale: 0.45}
41+
edges: {scale: 0.1, alpha: 0.8, color: {type: TraversabilityEdgeColorAdapter}}
42+
interlayer_edges:
43+
- {from: 3*, to: 2p*, draw: false}
44+
- {from: 3*, to: 2, use_child_color: true, scale: 0.08, alpha: 0.5}
45+
- {from: 4, to: 3*, scale: 0.08, alpha: 0.4}

hydra_visualizer/include/hydra_visualizer/adapters/edge_color.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ struct EdgeColorAdapter {
7070
* any edge colors when drawing the scene graph
7171
*/
7272
virtual void setGraph(const spark_dsg::DynamicSceneGraph& /* graph */,
73-
spark_dsg::LayerId /* layer */) {}
73+
spark_dsg::LayerKey /* layer */) {}
7474
};
7575

7676
struct UniformEdgeColorAdapter : EdgeColorAdapter {
@@ -112,7 +112,7 @@ struct ValueEdgeColorAdapter : EdgeColorAdapter {
112112

113113
explicit ValueEdgeColorAdapter(const Config& config);
114114
void setGraph(const spark_dsg::DynamicSceneGraph& graph,
115-
spark_dsg::LayerId layer) override;
115+
spark_dsg::LayerKey layer) override;
116116
EdgeColor getColor(const spark_dsg::DynamicSceneGraph& graph,
117117
const spark_dsg::SceneGraphEdge& edge) const override;
118118

@@ -137,7 +137,7 @@ struct TraversabilityEdgeColorAdapter : EdgeColorAdapter {
137137

138138
explicit TraversabilityEdgeColorAdapter(const Config& config);
139139
void setGraph(const spark_dsg::DynamicSceneGraph& graph,
140-
spark_dsg::LayerId layer) override;
140+
spark_dsg::LayerKey layer) override;
141141
EdgeColor getColor(const spark_dsg::DynamicSceneGraph& graph,
142142
const spark_dsg::SceneGraphEdge& edge) const override;
143143

0 commit comments

Comments
 (0)