8#ifndef POSITION3_ESTIMATOR_H
9#define POSITION3_ESTIMATOR_H
15#include <message_filters/subscriber.h>
16#include <message_filters/sync_policies/exact_time.h>
17#include <message_filters/synchronizer.h>
18#include <nav_msgs/Odometry.h>
19#include <nav_msgs/Path.h>
20#include <sensor_msgs/Imu.h>
21#include <sensor_msgs/NavSatFix.h>
22#include <tf/transform_listener.h>
25#include <geometry_msgs/PointStamped.h>
34#define POS_COVARIANCE_VIOLATION_THRESHOLD 0.2
35#define NUM_GNSS_CALLBACKS_UNTIL_START 20
36#define NUM_GNSS_CALLBACKS_UNTIL_YAW_INIT 300
62 holistic_fusion_ros_msgs::OfflineOptimizationTrigger::Response& res)
override;
102 std::chrono::time_point<std::chrono::high_resolution_clock>
startTime_;
103 std::chrono::time_point<std::chrono::high_resolution_clock>
currentTime_;
ros::NodeHandle privateNode
Eigen::Isometry3d T_totalStation_totalStationOld_
Position3Estimator(std::shared_ptr< ros::NodeHandle > privateNodePtr)
nav_msgs::PathPtr measPosition_worldGnssPositionPathPtr_
std::string gnssReferenceFrame_
bool alignedPrismAndGnssFlag_
tf::TransformListener tfListener_
Eigen::Vector3d initialPrismPosition_
bool srvOfflineSmootherOptimizeCallback(holistic_fusion_ros_msgs::OfflineOptimizationTrigger::Request &req, holistic_fusion_ros_msgs::OfflineOptimizationTrigger::Response &res) override
double gnssPositionMeasUnaryNoise_
void initializeMessages(ros::NodeHandle &privateNode) override
ros::ServiceServer srvToggleGnssPositionUnary_
std::chrono::time_point< std::chrono::high_resolution_clock > currentTime_
std::shared_ptr< holistic_fusion::GnssHandler > gnssHandlerPtr_
int prismPositionCallbackCounter_
void initializeServices(ros::NodeHandle &privateNode) override
void gnssPositionCallback_(const sensor_msgs::NavSatFix::ConstPtr &gnssPositionPtr)
Eigen::Matrix< double, 6, 1 > gnssSe3AlignmentRandomWalk_
ros::Publisher pubMeasWorldPrismPositionPath_
void initializePublishers(ros::NodeHandle &privateNode) override
ros::Subscriber subGnssOfflinePose_
void readParams(const ros::NodeHandle &privateNode) override
std::chrono::time_point< std::chrono::high_resolution_clock > startTime_
ros::Publisher pubMeasWorldGnssOfflinePosePath_
double prismPositionRate_
void gnssOfflinePoseCallback_(const nav_msgs::Odometry::ConstPtr &gnssOfflinePosePtr)
Eigen::Matrix< double, 6, 1 > gnssOfflinePoseMeasUnaryNoise_
std::string totalStationReferenceFrame_
bool initializeUsingGnssFlag_
void prismPositionCallback_(const geometry_msgs::PointStamped::ConstPtr &leicaPositionPtr)
double gnssOfflinePoseRate_
Eigen::Matrix< double, 6, 1 > initialSe3AlignmentNoise_
double prismPositionMeasUnaryNoise_
ros::ServiceServer srvToggleGnssOfflinePoseUnary_
ros::ServiceServer srvTogglePrismPositionUnary_
~Position3Estimator()=default
bool prismMovedEnoughFlag_
int gnssOfflinePoseCallbackCounter_
std::shared_ptr< holistic_fusion::TrajectoryAlignmentHandler > trajectoryAlignmentHandler_
nav_msgs::PathPtr measPosition_worldGnssOfflinePosePathPtr_
Eigen::Isometry3d T_totalStation_enu_
ros::Subscriber subPrismPosition_
int gnssPositionCallbackCounter_
Eigen::Matrix< double, 6, 1 > prismSe3AlignmentRandomWalk_
static constexpr bool constexprUseGnssPositionUnaryFlag_
Eigen::Vector3d accumulatedGnssCoordinates_
bool usePrismPositionUnaryFlag_
ros::Publisher pubMeasWorldGnssPositionPath_
static constexpr bool constexprUsePrismPositionUnaryFlag_
static constexpr double PRISM_MOVED_ENOUGH_THRESHOLD
bool useGnssPositionUnaryFlag_
nav_msgs::PathPtr measPosition_worldPrismPositionPathPtr_
bool srvToggleGnssOfflinePoseUnaryCallback_(std_srvs::Trigger::Request &req, std_srvs::Trigger::Response &res)
void initializeSubscribers(ros::NodeHandle &privateNode) override
ros::Subscriber subGnssPosition_
static constexpr bool constexprUseGnssOfflinePoseUnaryFlag_
bool srvToggleGnssUnaryCallback_(std_srvs::Trigger::Request &req, std_srvs::Trigger::Response &res)
bool useGnssOfflinePoseUnaryFlag_
bool srvTogglePrismUnaryCallback_(std_srvs::Trigger::Request &req, std_srvs::Trigger::Response &res)