Program Listing for File BasaltVIO.hpp
↰ Return to documentation for file (include/depthai/basalt/BasaltVIO.hpp)
#pragma once
#define SOPHUS_USE_BASIC_LOGGING
#include "depthai/pipeline/Subnode.hpp"
#include "depthai/pipeline/ThreadedHostNode.hpp"
#include "depthai/pipeline/datatype/IMUData.hpp"
#include "depthai/pipeline/datatype/TransformData.hpp"
#include "depthai/pipeline/node/Sync.hpp"
#include "depthai/utility/Pimpl.hpp"
namespace dai {
namespace node {
class BasaltVIO : public NodeCRTP<ThreadedHostNode, BasaltVIO> {
public:
constexpr static const char* NAME = "BasaltVIO";
BasaltVIO();
~BasaltVIO();
Subnode<node::Sync> sync{*this, "sync"};
InputMap& inputs = sync->inputs;
std::string leftInputName = "left";
std::string rightInputName = "right";
void buildInternal() override;
Input& left = inputs[leftInputName];
Input& right = inputs[rightInputName];
Input imu{*this, {"inIMU", DEFAULT_GROUP, false, 0, {{DatatypeEnum::IMUData, true}}}};
Output transform{*this, {"transform", DEFAULT_GROUP, {{DatatypeEnum::TransformData, true}}}};
Output passthrough{*this, {"imgPassthrough", DEFAULT_GROUP, {{DatatypeEnum::ImgFrame, true}}}};
void setImuUpdateRate(int rate) {
imuUpdateRate = rate;
}
void setConfigPath(const std::string& path) {
configPath = path;
}
void setUseSpecTranslation(bool use) {
useSpecTranslation = use;
}
void setLocalTransform(const std::shared_ptr<TransformData>& transform);
void setImuExtrinsics(const std::shared_ptr<TransformData>& imuExtr);
void setAccelBias(const std::vector<double>& accelBias);
void setAccelNoiseStd(const std::vector<double>& accelNoiseStd);
void setGyroBias(const std::vector<double>& gyroBias);
void setGyroNoiseStd(const std::vector<double>& gyroNoiseStd);
void setDefaultVIOConfig();
void runSyncOnHost(bool runOnHost);
private:
// pimpl
class Impl;
Pimpl<Impl> pimpl;
void run() override;
void initialize(std::vector<std::shared_ptr<ImgFrame>> frames);
void stereoCB(std::shared_ptr<ADatatype> in);
void imuCB(std::shared_ptr<ADatatype> imuData);
void stop() override;
Input inSync{*this, {"inSync", DEFAULT_GROUP, false, 0, {{DatatypeEnum::MessageGroup, true}}}};
std::shared_ptr<ImgFrame> leftImg;
bool initialized = false;
std::string configPath = "";
int imuUpdateRate = 200;
int threadNum = 1;
bool useSpecTranslation = true;
std::optional<std::shared_ptr<TransformData>> imuExtrinsics;
std::optional<std::vector<double>> accelBias;
std::optional<std::vector<double>> accelNoiseStd;
std::optional<std::vector<double>> gyroBias;
std::optional<std::vector<double>> gyroNoiseStd;
};
} // namespace node
} // namespace dai