Skip to content
Snippets Groups Projects
Commit 7a579ee3 authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Merge branch '46-bug/invalid-registration' into 'master'

Resolve "Do not use registration with singe RGB-D input"

Closes #46

See merge request nicolas.pope/ftl!14
parents fd7a061c 38b3e8d9
No related branches found
No related tags found
1 merge request!14Resolve "Do not use registration with singe RGB-D input"
Pipeline #11034 passed
...@@ -189,8 +189,7 @@ std::map<string, Eigen::Matrix4f> loadRegistration() { ...@@ -189,8 +189,7 @@ std::map<string, Eigen::Matrix4f> loadRegistration() {
// Use identity transform if no registration // Use identity transform if no registration
if (!file.is_open()) { if (!file.is_open()) {
Eigen::Matrix4f T; LOG(ERROR) << "Error loading registration from file!";
registration["default"] = T.setIdentity();
return registration; return registration;
} }
...@@ -231,7 +230,6 @@ struct Cameras { ...@@ -231,7 +230,6 @@ struct Cameras {
template <template<class> class Container> template <template<class> class Container>
std::map<string, Eigen::Matrix4f> runRegistration(ftl::net::Universe &net, Container<Cameras> &inputs) { std::map<string, Eigen::Matrix4f> runRegistration(ftl::net::Universe &net, Container<Cameras> &inputs) {
std::map<string, Eigen::Matrix4f> registration; std::map<string, Eigen::Matrix4f> registration;
// NOTE: uses config["registration"] // NOTE: uses config["registration"]
...@@ -361,7 +359,7 @@ static void run() { ...@@ -361,7 +359,7 @@ static void run() {
return; return;
} }
std::deque<Cameras> inputs; std::vector<Cameras> inputs;
//std::vector<Display> displays; //std::vector<Display> displays;
// TODO Allow for non-net source types // TODO Allow for non-net source types
...@@ -399,16 +397,60 @@ static void run() { ...@@ -399,16 +397,60 @@ static void run() {
LOG(INFO) << "LOAD REG"; LOG(INFO) << "LOAD REG";
registration = loadRegistration(); registration = loadRegistration();
} }
LOG(INFO) << "Assigning poses"; // verify that registration and configuration is valid
vector<Eigen::Matrix4f> T; // (registration includes every camera)
bool valid_registration = true;
string ref_input = config["registration"]["reference-source"];
// check every camera is included in registration
for (auto &input : inputs) { for (auto &input : inputs) {
LOG(INFO) << (unsigned long long)input.source; string uri = input.source->getConfig()["uri"];
Eigen::Matrix4f RT = (registration.count(input.source->getConfig()["uri"].get<string>()) > 0) ? registration[(string)input.source->getConfig()["uri"]] : registration["default"]; if (registration.find(uri) == registration.end()) {
T.push_back(RT); valid_registration = false;
input.source->setPose(RT); LOG(ERROR) << "Camera pose for " + uri + " not found in registration!";
}
}
if (registration.find(ref_input) == registration.end()) {
LOG(WARNING) << "reference input " + ref_input + " not found in registration";
} }
// if registration not valid, use reference input or first input
if (!valid_registration) {
vector<Cameras> inputs_;
for (auto &input : inputs) {
if ((string) input.source->getConfig()["uri"] == ref_input) {
inputs_.push_back(input);
break;
}
}
if (inputs_.size() == 0) {
LOG(ERROR) << "Reference input not found in configured inputs, using first input: " + (string) inputs[0].source->getConfig()["uri"];
inputs_.push_back(inputs[0]);
}
inputs = inputs_;
inputs[0].source->setPose(Eigen::Matrix4f::Identity());
}
else {
LOG(INFO) << "Registration valid, assigning poses";
vector<Eigen::Matrix4f> T;
for (auto &input : inputs) {
LOG(INFO) << (unsigned long long)input.source;
Eigen::Matrix4f RT = (registration.count(input.source->getConfig()["uri"].get<string>()) > 0) ?
registration[(string)input.source->getConfig()["uri"]] : Eigen::Matrix4f::Identity();
T.push_back(RT);
input.source->setPose(RT);
}
}
LOG(INFO) << "Using sources:";
for (auto &input : inputs) { LOG(INFO) << " " + (string) input.source->getConfig()["uri"]; }
//vector<PointCloud<PointXYZRGB>::Ptr> clouds(inputs.size()); //vector<PointCloud<PointXYZRGB>::Ptr> clouds(inputs.size());
Display display_merged(config["display"], "Merged"); // todo Display display_merged(config["display"], "Merged"); // todo
CUDARayCastSDF rays(config["voxelhash"]); CUDARayCastSDF rays(config["voxelhash"]);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment