Skip to content

Commit 437eb97

Browse files
committed
Feature/openset places (#33)
* add openset feature publisher to uhumans example * add verbosity control and fix remap
1 parent 3a1a7b7 commit 437eb97

File tree

5 files changed

+38
-13
lines changed

5 files changed

+38
-13
lines changed

hydra_ros/config/datasets/uhumans2.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ input:
77
left_cam:
88
receiver: {type: ClosedSetImageReceiver}
99
sensor: {type: camera_info, min_range: 0.1, max_range: 5.0, extrinsics: {type: ros, robot_frame: base_link_gt}}
10+
features: {type: FeatureReceiver}

hydra_ros/include/hydra_ros/input/feature_receiver.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ class FeatureReceiver : public Module {
5454
TFLookup::Config tf_lookup;
5555
//! Sensors to not subscribe to
5656
std::vector<std::string> sensors_to_exclude;
57+
//! Verbosity for receiver
58+
size_t verbosity = 0;
5759
} const config;
5860

5961
explicit FeatureReceiver(const Config& config);

hydra_ros/launch/datasets/uhumans2.launch.yaml

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,30 @@
22
launch:
33
- arg: {name: scene, default: office, description: uhumans2 scene name}
44
- arg: {name: use_gt_semantics, default: 'true'}
5+
- arg: {name: use_openset_places, default: 'false'}
56
- arg: {name: labelspace, default: $(if $(var use_gt_semantics) uhumans2_$(var scene) ade20k_full)}
67
- arg: {name: log_prefix, default: uhumans2_$(var scene)}
78
- arg: {name: label_remap_path, default: $(find-pkg-share hydra)/config/label_remaps/uhumans2_$(var scene).yaml}
89
- set_remap: {from: hydra/input/left_cam/depth_registered/image_rect, to: /tesse/depth_cam/mono/image_raw}
910
- set_remap: {from: hydra/input/left_cam/rgb/image_raw, to: /tesse/left_cam/rgb/image_raw}
1011
- set_remap: {from: hydra/input/left_cam/rgb/camera_info, to: /tesse/left_cam/camera_info}
11-
- set_remap: {from: hydra/input/left_cam/semantic/image_raw, to: /tesse/seg_cam/converted/image_raw, if: $(var use_gt_semantics)}
12-
- set_remap: {from: hydra/input/left_cam/semantic/image_raw, to: semantic/image_raw, if: $(not $(var use_gt_semantics))}
12+
- set_remap: {from: hydra/input/left_cam/semantic/image_raw, to: $(if $(var use_gt_semantics) /tesse/seg_cam/converted/image_raw /tesse/left_cam/semantic/image_raw)}
13+
- set_remap: {from: hydra/input/left_cam/feature, to: /tesse/left_cam/semantic/feature}
1314
- let: {name: extra_yaml_gt, value: '{semantic_label_remap_filepath: $(var label_remap_path)}'}
1415
- let: {name: extra_yaml_no_gt, value: '{}'}
1516
- group:
16-
- set_remap: {from: color/image_raw, to: /tesse/left_cam/rgb/image_raw}
17-
- include:
18-
if: $(not $(var use_gt_semantics))
19-
file: $(find-pkg-share semantic_inference_ros)/launch/closed_set.launch.yaml
20-
arg:
21-
- {name: labelspace_name, value: $(var labelspace)}
17+
- push_ros_namespace: {namespace: tesse/left_cam}
18+
- set_remap: {from: color/image_raw, to: rgb/image_raw}
19+
- include:
20+
if: $(not $(var use_gt_semantics))
21+
file: $(find-pkg-share semantic_inference_ros)/launch/closed_set.launch.yaml
22+
arg:
23+
- {name: labelspace_name, value: $(var labelspace)}
24+
- include:
25+
if: $(var use_openset_places)
26+
file: $(find-pkg-share semantic_inference_ros)/launch/image_embedding_node.launch.yaml
27+
arg:
28+
- {name: min_period_s, value: '0.2'}
2229
- include:
2330
file: $(find-pkg-share hydra_ros)/launch/hydra.launch.yaml
2431
arg:

hydra_ros/launch/hydra.launch.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,8 @@ launch:
5454
# hydra visualizer
5555
- set_remap: {from: hydra_visualizer/dsg, to: hydra/backend/dsg}
5656
- arg: {name: start_visualizer, default: 'true', description: run hydra visualizer}
57-
- include: {file: $(find-pkg-share hydra_visualizer)/launch/streaming_visualizer.launch.yaml, if: $(var start_visualizer)}
57+
- include:
58+
file: $(find-pkg-share hydra_visualizer)/launch/streaming_visualizer.launch.yaml
59+
if: $(var start_visualizer)
60+
arg:
61+
- {name: external_plugins_path, value: $(find-pkg-share hydra_ros)/config/hydra_ros_visualizer_plugins.yaml}

hydra_ros/src/input/feature_receiver.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ void declare_config(FeatureReceiver::Config& config) {
5555
field(config.queue_size, "queue_size");
5656
field(config.tf_lookup, "tf_lookup");
5757
field(config.sensors_to_exclude, "sensors_to_exclude");
58+
field(config.verbosity, "verbosity");
5859
}
5960

6061
using semantic_inference_msgs::msg::FeatureVectorStamped;
@@ -66,20 +67,23 @@ struct FeatureSubscriber {
6667
FeatureSubscriber(ianvs::NodeHandle nh,
6768
const std::string& sensor_name,
6869
const Callback& pose_callback,
69-
size_t queue_size = 10);
70+
size_t queue_size = 10,
71+
size_t verbosity = 0);
7072

7173
void callback(const FeatureVectorStamped& msg);
7274

7375
rclcpp::Subscription<FeatureVectorStamped>::SharedPtr sub;
7476
const std::string sensor_name;
7577
const Callback pose_callback;
78+
const size_t verbosity;
7679
};
7780

7881
FeatureSubscriber::FeatureSubscriber(ianvs::NodeHandle nh,
7982
const std::string& sensor_name,
8083
const Callback& pose_callback,
81-
size_t queue_size)
82-
: sensor_name(sensor_name), pose_callback(pose_callback) {
84+
size_t queue_size,
85+
size_t verbosity)
86+
: sensor_name(sensor_name), pose_callback(pose_callback), verbosity(verbosity) {
8387
const std::string topic = sensor_name + "/feature";
8488
sub = nh.create_subscription<FeatureVectorStamped>(
8589
topic, queue_size, &FeatureSubscriber::callback, this);
@@ -105,6 +109,8 @@ void FeatureSubscriber::callback(const FeatureVectorStamped& msg) {
105109
Eigen::Map<const Eigen::VectorXf>(vec.data(), vec.size()),
106110
GlobalInfo::instance().getSensor(sensor_name).get());
107111

112+
LOG_IF(INFO, verbosity >= 2) << "Pushing new feature to input queue @ "
113+
<< timestamp_ns << "[ns] for '" << sensor_name << "'";
108114
PipelineQueues::instance().input_features_queue.push(std::move(packet));
109115
}
110116

@@ -114,15 +120,20 @@ void FeatureReceiver::start() {
114120
const auto sensor_names = GlobalInfo::instance().getAvailableSensors();
115121
for (const auto& name : sensor_names) {
116122
if (to_exclude.count(name)) {
123+
LOG_IF(INFO, config.verbosity >= 1)
124+
<< "Excluding '" << name << "' from feature receivers!";
117125
continue;
118126
}
119127

120128
auto nh = getHydraNodeHandle(config.ns);
129+
LOG_IF(INFO, config.verbosity >= 1)
130+
<< "Making feature receiver for '" << name << "'";
121131
subs_.push_back(std::make_unique<FeatureSubscriber>(
122132
nh,
123133
name,
124134
[this](uint64_t timestamp_ns) { return lookup_.getBodyPose(timestamp_ns); },
125-
config.queue_size));
135+
config.queue_size,
136+
config.verbosity));
126137
}
127138
}
128139

0 commit comments

Comments
 (0)