My Project 1.0
Holistic Fusion: A Generic Framework for Multimodal Sensor Fusion
Loading...
Searching...
No Matches
smb_se::SmbEstimator Class Reference

#include <SmbEstimator.h>

Inheritance diagram for smb_se::SmbEstimator:
Collaboration diagram for smb_se::SmbEstimator:

Public Member Functions

 SmbEstimator (std::shared_ptr< ros::NodeHandle > privateNodePtr)
 ~SmbEstimator ()=default
void setup ()
Public Member Functions inherited from holistic_fusion::HolisticFusionRos
 HolisticFusionRos (const std::shared_ptr< ros::NodeHandle > &privateNodePtr)
 ~HolisticFusionRos () override=default
void setup (const std::shared_ptr< StaticTransforms > staticTransformsPtr)
Public Member Functions inherited from holistic_fusion::HolisticFusionClassic
 HolisticFusionClassic ()
virtual ~HolisticFusionClassic ()=default
void addUnaryRollAbsoluteMeasurement (const UnaryMeasurementXDAbsolute< double, 1 > &roll_F_S) override
 Unary Measurements / Absolute Measurements.
void addUnaryPitchAbsoluteMeasurement (const UnaryMeasurementXDAbsolute< double, 1 > &pitch_F_S) override
void addUnaryYawAbsoluteMeasurement (const UnaryMeasurementXDAbsolute< double, 1 > &yaw_W_S) override
void addBinaryPose3Measurement (const BinaryMeasurementXD< Eigen::Isometry3d, 6 > &F_T_F_S) override
 Binary Measurements.
Public Member Functions inherited from holistic_fusion::HolisticFusion
 HolisticFusion ()
 Constructor --------—.
virtual ~HolisticFusion ()
 Destructor --------—.
void setup (const std::shared_ptr< GraphConfig > graphConfigPtr, const std::shared_ptr< StaticTransforms > staticTransformsPtr)
bool initYawAndPositionInWorld (const double yaw_W_frame1, const Eigen::Vector3d &W_t_W_frame2, const std::string &frame1, const std::string &frame2)
bool initYawAndPosition (const UnaryMeasurementXD< Eigen::Isometry3d, 6 > &unary6DMeasurement)
bool initWorldFrameToFixedFrameTransform (const Eigen::Isometry3d &T_W_F, const std::string &fixedFrame)
bool optimizeSlowBatchSmoother (int maxIterations, const std::string &savePath, const bool saveCovarianceFlag)
std::optional< BatchOptimizationResult > optimizeSlowBatchSmoother (int maxIterations, const bool computePoseCovarianceFlag)
bool logRealTimeNavStates (const std::string &savePath)
bool areYawAndPositionInited () const
bool areRollAndPitchInited () const
bool isGraphInited () const
bool getNormalOperationFlag () const
bool addCoreImuMeasurementAndGetState (const Eigen::Vector3d &linearAcc, const Eigen::Vector3d &angularVel, const double imuTimeK, std::shared_ptr< SafeIntegratedNavState > &returnPreIntegratedNavStatePtr, std::shared_ptr< SafeNavStateWithCovarianceAndBias > &returnOptimizedStateWithCovarianceAndBiasPtr, Eigen::Matrix< double, 6, 1 > &returnAddedImuMeasurements)
 Main: IMU --------------------—.
bool addZeroMotionFactor (double timeKm1, double timeK, double noiseDensity)
bool addZeroVelocityFactor (double timeK, double noiseDensity)
Public Member Functions inherited from holistic_fusion::HolisticFusionHolistic
 HolisticFusionHolistic ()
virtual ~HolisticFusionHolistic ()=default
void addUnaryPose3AbsoluteMeasurement (const UnaryMeasurementXDAbsolute< Eigen::Isometry3d, 6 > &R_T_R_S, const bool addToOnlineSmootherFlag=true) override
 Unary Measurements / Absolute Measurements: In reference frame --> systematic drift.
void addUnaryPosition3AbsoluteMeasurement (UnaryMeasurementXDAbsolute< Eigen::Vector3d, 3 > &R_t_R_S) override
void addUnaryHeadingAbsoluteMeasurement (const UnaryMeasurementXDAbsolute< Eigen::Matrix3d, 1 > &R_M_S)
void addUnaryVelocity3AbsoluteMeasurement (UnaryMeasurementXDAbsolute< Eigen::Vector3d, 3 > &R_v_R_S) override
void addUnaryVelocity3LocalMeasurement (UnaryMeasurementXD< Eigen::Vector3d, 3 > &S_v_F_S) override
void addUnaryVelocity3LocalMovingFrameMeasurement (UnaryMeasurementXD< Eigen::Vector3d, 3 > &S_v_F_S, const Eigen::Isometry3d &T_I_sensorFrame, const Eigen::Vector3d &I_w_W_I)
void addUnaryPosition3LandmarkMeasurement (UnaryMeasurementXDLandmark< Eigen::Vector3d, 3 > &S_t_S_L, const int landmarkCreationCounter) override
 Landmark Measurements: No systematic drift.
void addUnaryBearing3LandmarkMeasurement (UnaryMeasurementXDLandmark< Eigen::Vector3d, 3 > &S_bearing_S_L) override

Protected Member Functions

void readParams (const ros::NodeHandle &privateNode) override
void initializePublishers (ros::NodeHandle &privateNode) override
void initializeSubscribers (ros::NodeHandle &privateNode) override
void initializeMessages (ros::NodeHandle &privateNode) override
void initializeServices (ros::NodeHandle &privateNode) override
void imuCallback (const sensor_msgs::Imu::ConstPtr &imuPtr) override
Protected Member Functions inherited from holistic_fusion::HolisticFusionRos
virtual bool srvOfflineSmootherOptimizeCallback (holistic_fusion_ros_msgs::OfflineOptimizationTrigger::Request &req, holistic_fusion_ros_msgs::OfflineOptimizationTrigger::Response &res)
bool srvLogRealTimeNavStatesCallback (std_srvs::Trigger::Request &req, std_srvs::Trigger::Response &res)
virtual void publishState (const std::shared_ptr< holistic_fusion::SafeIntegratedNavState > &integratedNavStatePtr, const std::shared_ptr< holistic_fusion::SafeNavStateWithCovarianceAndBias > &optimizedStateWithCovarianceAndBiasPtr)
void publishNonTimeCriticalData (const Eigen::Matrix< double, 6, 6 > poseCovarianceRos, const Eigen::Matrix< double, 6, 6 > twistCovarianceRos, const Eigen::Vector3d positionVarianceRos, const Eigen::Vector3d orientationVarianceRos, const std::shared_ptr< const holistic_fusion::SafeIntegratedNavState > integratedNavStatePtr, const std::shared_ptr< const holistic_fusion::SafeNavStateWithCovarianceAndBias > optimizedStateWithCovarianceAndBiasPtr)
void publishOptimizedStateAndBias (const std::shared_ptr< const holistic_fusion::SafeNavStateWithCovarianceAndBias > optimizedStateWithCovarianceAndBiasPtr, const Eigen::Matrix< double, 6, 6 > &poseCovarianceRos, const Eigen::Matrix< double, 6, 6 > &twistCovarianceRos)
void publishTfTreeTransform (const std::string &frameName, const std::string &childFrameName, double timeStamp, const Eigen::Isometry3d &T_frame_childFrame)
void publishImuOdoms (const std::shared_ptr< const holistic_fusion::SafeIntegratedNavState > &preIntegratedNavStatePtr, const Eigen::Matrix< double, 6, 6 > &poseCovarianceRos, const Eigen::Matrix< double, 6, 6 > &twistCovarianceRos) const
void publishDiagVarianceVectors (const Eigen::Vector3d &posVarianceRos, const Eigen::Vector3d &rotVarianceRos, const double timeStamp) const
void publishVelocityMarkers (const std::shared_ptr< const holistic_fusion::SafeIntegratedNavState > &navStatePtr) const
void publishImuPaths (const std::shared_ptr< const holistic_fusion::SafeIntegratedNavState > &navStatePtr) const
void publishAddedImuMeas (const Eigen::Matrix< double, 6, 1 > &addedImuMeas, const ros::Time &stamp) const
long secondsSinceStart ()
Protected Member Functions inherited from holistic_fusion::HolisticFusion
template<int DIM>
bool isCovarianceViolated_ (const Eigen::Matrix< double, DIM, 1 > &covariance, const double covarianceViolationThreshold)
 Convenience functions.
void pretendFirstMeasurementReceived ()
bool checkAndPrintCovarianceViolation_ (const std::string &measurementName, const bool violatedFlag)

Private Member Functions

void lidarOdometryCallback_ (const nav_msgs::Odometry::ConstPtr &lidarOdomPtr)
void wheelOdometryPoseCallback_ (const nav_msgs::Odometry::ConstPtr &wheelOdomPtr)
void wheelLinearVelocitiesCallback_ (const std_msgs::Float64MultiArray::ConstPtr &wheelsSpeedsPtr)
void vioOdometryCallback_ (const nav_msgs::Odometry::ConstPtr &vioOdomPtr)

Private Attributes

std::chrono::time_point< std::chrono::high_resolution_clock > startTime_
std::chrono::time_point< std::chrono::high_resolution_clock > currentTime_
double lioOdometryRate_ = 5.0
double wheelOdometryBetweenRate_ = 50.0
double wheelLinearVelocitiesRate_ = 50.0
double vioOdometryRate_ = 50.0
Eigen::Matrix< double, 6, 1 > initialSe3AlignmentNoise_ = 1.0 * Eigen::Matrix<double, 6, 1>::Ones()
Eigen::Matrix< double, 6, 1 > lioSe3AlignmentRandomWalk_ = 0.0 * Eigen::Matrix<double, 6, 1>::Ones()
Eigen::Matrix< double, 6, 1 > lioPoseUnaryNoise_
Eigen::Matrix< double, 6, 1 > wheelPoseBetweenNoise_
Eigen::Matrix< double, 3, 1 > wheelLinearVelocitiesNoise_
Eigen::Matrix< double, 6, 1 > vioPoseBetweenNoise_
int wheelOdometryCallbackCounter_ = -1
Eigen::Isometry3d T_O_Bw_km1_
double wheelOdometryTimeKm1_ = 0.0
ros::Subscriber subLioOdometry_
ros::Subscriber subWheelOdometryBetween_
ros::Subscriber subWheelLinearVelocities_
ros::Subscriber subVioOdometry_
tf::TransformListener tfListener_
ros::Publisher pubMeasMapLioPath_
ros::Publisher pubMeasMapVioPath_
nav_msgs::PathPtr measLio_mapImuPathPtr_
nav_msgs::PathPtr measVio_mapImuPathPtr_
bool useLioOdometryFlag_ = true
bool useWheelOdometryBetweenFlag_ = false
bool useWheelLinearVelocitiesFlag_ = false
bool useVioOdometryFlag_ = false
double wheelRadiusMeter_ = 0.195

Additional Inherited Members

Static Protected Member Functions inherited from holistic_fusion::HolisticFusionRos
static void addToPathMsg (const nav_msgs::PathPtr &pathPtr, const std::string &frameName, const ros::Time &stamp, const Eigen::Vector3d &t, int maxBufferLength)
static void addToOdometryMsg (const nav_msgs::OdometryPtr &msgPtr, const std::string &fixedFrame, const std::string &movingFrame, const ros::Time &stamp, const Eigen::Isometry3d &T, const Eigen::Vector3d &W_v_W_F, const Eigen::Vector3d &W_w_W_F, const Eigen::Matrix< double, 6, 6 > &poseCovariance=Eigen::Matrix< double, 6, 6 >::Zero(), const Eigen::Matrix< double, 6, 6 > &twistCovariance=Eigen::Matrix< double, 6, 6 >::Zero())
static void addToPoseWithCovarianceStampedMsg (const geometry_msgs::PoseWithCovarianceStampedPtr &msgPtr, const std::string &frameName, const ros::Time &stamp, const Eigen::Isometry3d &T, const Eigen::Matrix< double, 6, 6 > &transformCovariance=Eigen::Matrix< double, 6, 6 >::Zero())
static void addToLandmarkMarkerArrayMsg (const visualization_msgs::MarkerArrayPtr &markerArrayPtr, const std::string &referenceFrameName, const ros::Time &stamp, const Eigen::Isometry3d &T_R_L, const std::string &transformName)
static void extractCovariancesFromOptimizedState (Eigen::Matrix< double, 6, 6 > &poseCovarianceRos, Eigen::Matrix< double, 6, 6 > &twistCovarianceRos, const std::shared_ptr< holistic_fusion::SafeNavStateWithCovarianceAndBias > &optimizedStateWithCovarianceAndBiasPtr)
static void createVelocityMarker (const std::string &referenceFrameName, const ros::Time &stamp, const Eigen::Vector3d &velocity, const Eigen::Vector3d &colorRgb, visualization_msgs::Marker &marker)
static void createContactMarker (const std::string &referenceFrameName, const ros::Time &stamp, const Eigen::Vector3d &position, const std::string &nameSpace, const int id, const Eigen::Vector3d &colorRgb, visualization_msgs::Marker &marker)
Protected Attributes inherited from holistic_fusion::HolisticFusionRos
ros::NodeHandle privateNode
std::chrono::time_point< std::chrono::high_resolution_clock > startTime
std::chrono::time_point< std::chrono::high_resolution_clock > currentTime
tf::TransformBroadcaster tfBroadcaster
std::string referenceFrameAlignedNameId = "_holistic_fusion_aligned"
std::string sensorFrameCorrectedNameId = "_holistic_fusion_corrected"
std::string optimizationResultLoggingPath = ""
Protected Attributes inherited from holistic_fusion::HolisticFusion
std::shared_ptr< GraphConfig > graphConfigPtr_ = nullptr
std::shared_ptr< StaticTransforms > staticTransformsPtr_ = nullptr
std::shared_ptr< GraphManager > graphMgrPtr_ = nullptr
std::shared_ptr< holistic_fusion::ImuBuffer > coreImuBufferPtr_
std::mutex optimizeGraphMutex_
bool alignedImuFlag_ = false
 Flags / Initialization.
bool foundInitialYawAndPositionFlag_ = false
bool initedGraphFlag_ = false
bool validFirstMeasurementReceivedFlag_ = false
bool optimizeGraphFlag_ = false
bool normalOperationFlag_ = false
long imuCallbackCounter_ = 0
std::unordered_set< std::string > measurementsWithViolatedCovariance_

Detailed Description

Definition at line 30 of file SmbEstimator.h.

Constructor & Destructor Documentation

◆ SmbEstimator()

smb_se::SmbEstimator::SmbEstimator ( std::shared_ptr< ros::NodeHandle > privateNodePtr)

Definition at line 22 of file SmbEstimator.cpp.

◆ ~SmbEstimator()

smb_se::SmbEstimator::~SmbEstimator ( )
default

Member Function Documentation

◆ imuCallback()

void smb_se::SmbEstimator::imuCallback ( const sensor_msgs::Imu::ConstPtr & imuPtr)
overrideprotectedvirtual

Reimplemented from holistic_fusion::HolisticFusionRos.

Definition at line 108 of file SmbEstimator.cpp.

◆ initializeMessages()

void smb_se::SmbEstimator::initializeMessages ( ros::NodeHandle & privateNode)
overrideprotectedvirtual

Reimplemented from holistic_fusion::HolisticFusionRos.

Definition at line 98 of file SmbEstimator.cpp.

◆ initializePublishers()

void smb_se::SmbEstimator::initializePublishers ( ros::NodeHandle & privateNode)
overrideprotectedvirtual

Reimplemented from holistic_fusion::HolisticFusionRos.

Definition at line 61 of file SmbEstimator.cpp.

◆ initializeServices()

void smb_se::SmbEstimator::initializeServices ( ros::NodeHandle & privateNode)
overrideprotectedvirtual

Reimplemented from holistic_fusion::HolisticFusionRos.

Definition at line 104 of file SmbEstimator.cpp.

◆ initializeSubscribers()

void smb_se::SmbEstimator::initializeSubscribers ( ros::NodeHandle & privateNode)
overrideprotectedvirtual

Reimplemented from holistic_fusion::HolisticFusionRos.

Definition at line 67 of file SmbEstimator.cpp.

◆ lidarOdometryCallback_()

void smb_se::SmbEstimator::lidarOdometryCallback_ ( const nav_msgs::Odometry::ConstPtr & lidarOdomPtr)
private

Definition at line 131 of file SmbEstimator.cpp.

◆ readParams()

void smb_se::SmbEstimator::readParams ( const ros::NodeHandle & privateNode)
overrideprotectedvirtual

LiDAR Odometry

Wheel Odometry Between

Linear Velocities

VIO Odometry

LiDAR odometry frame

Wheel Odometry frame

Whel Linear Velocities frames Left

Right

VIO Odometry frame

Reimplemented from holistic_fusion::HolisticFusionRos.

Definition at line 20 of file readParams.cpp.

◆ setup()

void smb_se::SmbEstimator::setup ( )

Definition at line 33 of file SmbEstimator.cpp.

◆ vioOdometryCallback_()

void smb_se::SmbEstimator::vioOdometryCallback_ ( const nav_msgs::Odometry::ConstPtr & vioOdomPtr)
private

Definition at line 291 of file SmbEstimator.cpp.

◆ wheelLinearVelocitiesCallback_()

void smb_se::SmbEstimator::wheelLinearVelocitiesCallback_ ( const std_msgs::Float64MultiArray::ConstPtr & wheelsSpeedsPtr)
private

Definition at line 235 of file SmbEstimator.cpp.

◆ wheelOdometryPoseCallback_()

void smb_se::SmbEstimator::wheelOdometryPoseCallback_ ( const nav_msgs::Odometry::ConstPtr & wheelOdomPtr)
private

Definition at line 177 of file SmbEstimator.cpp.

Member Data Documentation

◆ currentTime_

std::chrono::time_point<std::chrono::high_resolution_clock> smb_se::SmbEstimator::currentTime_
private

Definition at line 50 of file SmbEstimator.h.

◆ initialSe3AlignmentNoise_

Eigen::Matrix<double, 6, 1> smb_se::SmbEstimator::initialSe3AlignmentNoise_ = 1.0 * Eigen::Matrix<double, 6, 1>::Ones()
private

Definition at line 61 of file SmbEstimator.h.

◆ lioOdometryRate_

double smb_se::SmbEstimator::lioOdometryRate_ = 5.0
private

Definition at line 55 of file SmbEstimator.h.

◆ lioPoseUnaryNoise_

Eigen::Matrix<double, 6, 1> smb_se::SmbEstimator::lioPoseUnaryNoise_
private

Definition at line 66 of file SmbEstimator.h.

◆ lioSe3AlignmentRandomWalk_

Eigen::Matrix<double, 6, 1> smb_se::SmbEstimator::lioSe3AlignmentRandomWalk_ = 0.0 * Eigen::Matrix<double, 6, 1>::Ones()
private

Definition at line 62 of file SmbEstimator.h.

◆ measLio_mapImuPathPtr_

nav_msgs::PathPtr smb_se::SmbEstimator::measLio_mapImuPathPtr_
private

Definition at line 111 of file SmbEstimator.h.

◆ measVio_mapImuPathPtr_

nav_msgs::PathPtr smb_se::SmbEstimator::measVio_mapImuPathPtr_
private

Definition at line 112 of file SmbEstimator.h.

◆ pubMeasMapLioPath_

ros::Publisher smb_se::SmbEstimator::pubMeasMapLioPath_
private

Definition at line 107 of file SmbEstimator.h.

◆ pubMeasMapVioPath_

ros::Publisher smb_se::SmbEstimator::pubMeasMapVioPath_
private

Definition at line 108 of file SmbEstimator.h.

◆ startTime_

std::chrono::time_point<std::chrono::high_resolution_clock> smb_se::SmbEstimator::startTime_
private

Definition at line 49 of file SmbEstimator.h.

◆ subLioOdometry_

ros::Subscriber smb_se::SmbEstimator::subLioOdometry_
private

Definition at line 95 of file SmbEstimator.h.

◆ subVioOdometry_

ros::Subscriber smb_se::SmbEstimator::subVioOdometry_
private

Definition at line 101 of file SmbEstimator.h.

◆ subWheelLinearVelocities_

ros::Subscriber smb_se::SmbEstimator::subWheelLinearVelocities_
private

Definition at line 99 of file SmbEstimator.h.

◆ subWheelOdometryBetween_

ros::Subscriber smb_se::SmbEstimator::subWheelOdometryBetween_
private

Definition at line 97 of file SmbEstimator.h.

◆ T_O_Bw_km1_

Eigen::Isometry3d smb_se::SmbEstimator::T_O_Bw_km1_
private

Definition at line 89 of file SmbEstimator.h.

◆ tfListener_

tf::TransformListener smb_se::SmbEstimator::tfListener_
private

Definition at line 103 of file SmbEstimator.h.

◆ useLioOdometryFlag_

bool smb_se::SmbEstimator::useLioOdometryFlag_ = true
private

Definition at line 115 of file SmbEstimator.h.

◆ useVioOdometryFlag_

bool smb_se::SmbEstimator::useVioOdometryFlag_ = false
private

Definition at line 118 of file SmbEstimator.h.

◆ useWheelLinearVelocitiesFlag_

bool smb_se::SmbEstimator::useWheelLinearVelocitiesFlag_ = false
private

Definition at line 117 of file SmbEstimator.h.

◆ useWheelOdometryBetweenFlag_

bool smb_se::SmbEstimator::useWheelOdometryBetweenFlag_ = false
private

Definition at line 116 of file SmbEstimator.h.

◆ vioOdometryRate_

double smb_se::SmbEstimator::vioOdometryRate_ = 50.0
private

Definition at line 58 of file SmbEstimator.h.

◆ vioPoseBetweenNoise_

Eigen::Matrix<double, 6, 1> smb_se::SmbEstimator::vioPoseBetweenNoise_
private

Definition at line 73 of file SmbEstimator.h.

◆ wheelLinearVelocitiesNoise_

Eigen::Matrix<double, 3, 1> smb_se::SmbEstimator::wheelLinearVelocitiesNoise_
private

Definition at line 71 of file SmbEstimator.h.

◆ wheelLinearVelocitiesRate_

double smb_se::SmbEstimator::wheelLinearVelocitiesRate_ = 50.0
private

Definition at line 57 of file SmbEstimator.h.

◆ wheelOdometryBetweenRate_

double smb_se::SmbEstimator::wheelOdometryBetweenRate_ = 50.0
private

Definition at line 56 of file SmbEstimator.h.

◆ wheelOdometryCallbackCounter_

int smb_se::SmbEstimator::wheelOdometryCallbackCounter_ = -1
private

Definition at line 88 of file SmbEstimator.h.

◆ wheelOdometryTimeKm1_

double smb_se::SmbEstimator::wheelOdometryTimeKm1_ = 0.0
private

Definition at line 90 of file SmbEstimator.h.

◆ wheelPoseBetweenNoise_

Eigen::Matrix<double, 6, 1> smb_se::SmbEstimator::wheelPoseBetweenNoise_
private

Definition at line 69 of file SmbEstimator.h.

◆ wheelRadiusMeter_

double smb_se::SmbEstimator::wheelRadiusMeter_ = 0.195
private

Definition at line 121 of file SmbEstimator.h.


The documentation for this class was generated from the following files: