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

Code tidy

parent 1fa5733d
No related branches found
No related tags found
1 merge request!55Resolves #103 with integration refactor
Pipeline #11934 passed
......@@ -15,40 +15,21 @@
#include <ftl/rgbd/streamer.hpp>
#include <ftl/slave.hpp>
// #include <zlib.h>
// #include <lz4.h>
#include <string>
#include <vector>
#include <thread>
#include <chrono>
#include <mutex>
#include <opencv2/opencv.hpp>
#include <ftl/net/universe.hpp>
#include <ftl/rgbd_display.hpp>
#include <nlohmann/json.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core/utility.hpp>
#include <ftl/utility/opencv_to_pcl.hpp>
#include <ftl/registration.hpp>
#ifdef WIN32
#pragma comment(lib, "Rpcrt4.lib")
#endif
#ifdef HAVE_PCL
#include <pcl/point_cloud.h>
#include <pcl/common/transforms.h>
#include <pcl/filters/uniform_sampling.h>
#endif
using ftl::net::Universe;
using ftl::rgbd::Display;
using std::string;
using std::vector;
using ftl::rgbd::Source;
......@@ -57,22 +38,14 @@ using ftl::config::json_t;
using json = nlohmann::json;
using std::this_thread::sleep_for;
using std::chrono::milliseconds;
using std::mutex;
using std::unique_lock;
//using std::mutex;
//using std::unique_lock;
using std::vector;
using cv::Mat;
//using cv::Mat;
using ftl::registration::loadTransformations;
using ftl::registration::saveTransformations;
struct Cameras {
Source *source;
DepthCameraData gpu;
DepthCameraParams params;
};
static void run(ftl::Configurable *root) {
Universe *net = ftl::create<Universe>(root, "net");
ftl::ctrl::Slave slave(net, root);
......@@ -80,56 +53,24 @@ static void run(ftl::Configurable *root) {
net->start();
net->waitConnections();
std::vector<Cameras> inputs;
auto sources = ftl::createArray<Source>(root, "sources", net); //root->get<vector<json_t>>("sources");
// Create a vector of all input RGB-Depth sources
auto sources = ftl::createArray<Source>(root, "sources", net);
if (sources.size() == 0) {
LOG(ERROR) << "No sources configured!";
return;
}
// TODO move this block in its own method and add automated tests
// for error cases
std::optional<json_t> merge = root->get<json_t>("merge");
if (!merge) {
LOG(WARNING) << "Input merging not configured, using only first input in configuration";
sources = { sources[0] };
sources[0]->setPose(Eigen::Matrix4d::Identity());
}
// Must find pose for each source...
if (sources.size() > 1) {
std::map<std::string, Eigen::Matrix4d> transformations;
/*if ((*merge)["register"]) {
LOG(INFO) << "Registration requested";
ftl::registration::Registration *reg = ftl::registration::ChessboardRegistration::create(*merge);
for (auto &input : inputs) {
while(!input.source->isReady()) { std::this_thread::sleep_for(std::chrono::milliseconds(50)); }
reg->addSource(input.source);
}
reg->run();
if (reg->findTransformations(transformations)) {
if (!saveTransformations(string(FTL_LOCAL_CONFIG_ROOT) + "/registration.json", transformations)) {
LOG(ERROR) << "Error saving new registration";
};
}
else {
LOG(ERROR) << "Registration failed";
}
free(reg);
if (loadTransformations(string(FTL_LOCAL_CONFIG_ROOT) + "/registration.json", transformations)) {
LOG(INFO) << "Loaded camera trasformations from file";
}
else {
LOG(ERROR) << "Error loading camera transformations from file";
}
else {*/
if (loadTransformations(string(FTL_LOCAL_CONFIG_ROOT) + "/registration.json", transformations)) {
LOG(INFO) << "Loaded camera trasformations from file";
}
else {
LOG(ERROR) << "Error loading camera transformations from file";
}
//}
for (auto &input : sources) {
string uri = input->getURI();
......@@ -146,24 +87,15 @@ static void run(ftl::Configurable *root) {
}
}
// Displays and Inputs configured
//LOG(INFO) << "Using sources:";
//for (auto &input : inputs) { LOG(INFO) << " " + (string) input.source->getURI(); }
//ftl::rgbd::Display *display = ftl::create<ftl::rgbd::Display>(root, "display");
ftl::voxhash::SceneRep *scene = ftl::create<ftl::voxhash::SceneRep>(root, "voxelhash");
ftl::rgbd::Streamer *stream = ftl::create<ftl::rgbd::Streamer>(root, "stream", net);
ftl::rgbd::Source *virt = ftl::create<ftl::rgbd::Source>(root, "virtual", net);
auto virtimpl = new ftl::rgbd::VirtualSource(virt);
virt->customImplementation(virtimpl);
ftl::voxhash::SceneRep *scene = ftl::create<ftl::voxhash::SceneRep>(root, "voxelhash");
virtimpl->setScene(scene);
//display->setSource(virt);
ftl::rgbd::Streamer *stream = ftl::create<ftl::rgbd::Streamer>(root, "stream", net);
stream->add(virt);
// Also proxy all inputs
for (int i=0; i<sources.size(); i++) {
Source *in = sources[i];
stream->add(in);
......@@ -173,11 +105,6 @@ static void run(ftl::Configurable *root) {
unsigned char frameCount = 0;
bool paused = false;
// Keyboard camera controls
//display->onKey([&paused](int key) {
// if (key == 32) paused = !paused;
//});
int active = sources.size();
while (ftl::running) {
if (active == 0) {
......@@ -188,22 +115,27 @@ static void run(ftl::Configurable *root) {
active = 0;
if (!slave.isPaused()) {
//net.broadcast("grab"); // To sync cameras
// Mark voxels as cleared
scene->nextFrame();
// Grab, upload frames and allocate voxel blocks
active = scene->upload();
// Make sure previous virtual camera frame has finished rendering
stream->wait();
// Merge new frames into the voxel structure
scene->integrate();
// Remove any redundant voxels
scene->garbage();
} else {
active = 1;
}
// Start virtual camera rendering and previous frame compression
stream->poll();
//display->update();
//sleep_for(milliseconds(10));
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment