My Project 1.0
Holistic Fusion: A Generic Framework for Multimodal Sensor Fusion
Loading...
Searching...
No Matches
eigen_wrapped_gtsam_utils.cpp
Go to the documentation of this file.
1/*
2Copyright 2024 by Julian Nubert, Robotic Systems Lab, ETH Zurich.
3All rights reserved.
4This file is released under the "BSD-3-Clause License".
5Please see the LICENSE file that has been included as part of this package.
6 */
7
8// GTSAM
9#include <gtsam/base/types.h>
10#include <gtsam/geometry/Rot3.h>
11
12// Workspace
14
15// Implementation
17
18namespace holistic_fusion {
19
20// Transformation Functions ---------------------------------------------------
21// Remove roll and pitch
22void inPlaceRemoveRollPitch(Eigen::Isometry3d& T) {
23 // Extract the rotation matrix
24 gtsam::Rot3 R(T.rotation());
25 // Remove the roll and pitch
26 R = gtsam::Rot3::Ypr(R.yaw(), 0.0, 0.0);
27 // Set the rotation matrix
28 T.linear() = R.matrix();
29}
30// Calculate yaw from Isometry
31double getYawFromIsometry(const Eigen::Isometry3d& T) {
32 gtsam::Rot3 R(T.rotation());
33 return R.yaw();
34}
35
36// Creation of Files -----------------------------------------------------------
37// Pose 3
38void createPose3CsvFileStream(std::map<std::string, std::ofstream>& fileStreams, const std::string& savePath,
39 const std::string& transformIdentifier, const std::string& timeString, const bool saveCovarianceFlag) {
40 // Create the file stream
41 FileLogger::createPose3CsvFileStream(fileStreams, savePath, transformIdentifier, timeString, saveCovarianceFlag);
42}
43
44// Latitude, Longitude, Altitude
45void createLatLonAltCsvFileStream(std::map<std::string, std::ofstream>& fileStreams, const std::string& savePath,
46 const std::string& transformIdentifier, const std::string& timeString) {
47 // Create the file stream
48 FileLogger::createLatLonAltCsvFileStream(fileStreams, savePath, transformIdentifier, timeString);
49}
50
51// Addition to Files -----------------------------------------------------------
52// Pose 3
53void writePose3ToCsvFile(std::map<std::string, std::ofstream>& fileStreams, const Eigen::Isometry3d pose,
54 const std::string& transformIdentifier, const double timeStamp, const bool saveCovarianceFlag,
55 const std::optional<Eigen::Matrix<double, 6, 6>>& optionalPoseCovarianceInWorldRos) {
56 // Convert
57 gtsam::Pose3 poseGtsam = gtsam::Pose3(pose.matrix());
58 // Write to the file
59 FileLogger::writePose3ToCsvFile(fileStreams, poseGtsam, transformIdentifier, timeStamp, saveCovarianceFlag,
60 optionalPoseCovarianceInWorldRos);
61}
62// Latitude, Longitude, Altitude
63void writeLatLonAltToCsvFile(std::map<std::string, std::ofstream>& fileStreams, const Eigen::Vector3d& latLonAlt,
64 const std::string& transformIdentifier, const double timeStamp) {
65 // Write to the file
66 FileLogger::writeLatLonAltToCsvFile(fileStreams, latLonAlt, transformIdentifier, timeStamp);
67}
68
69} // namespace holistic_fusion
static void writeLatLonAltToCsvFile(std::map< std::string, std::ofstream > &fileStreams, const gtsam::Point3 &point, const std::string &transformIdentifier, const double timeStamp)
static void createLatLonAltCsvFileStream(std::map< std::string, std::ofstream > &fileStreams, const std::string &savePath, const std::string &transformIdentifier, const std::string &timeString)
static void writePose3ToCsvFile(std::map< std::string, std::ofstream > &fileStreams, const gtsam::Pose3 &pose, const std::string &transformIdentifier, const double timeStamp, const bool saveCovarianceFlag, const std::optional< Eigen::Matrix< double, 6, 6 > > &optionalPoseCovarianceInWorldRos=std::nullopt)
static void createPose3CsvFileStream(std::map< std::string, std::ofstream > &fileStreams, const std::string &savePath, const std::string &transformIdentifier, const std::string &timeString, const bool saveCovarianceFlag)
void createPose3CsvFileStream(std::map< std::string, std::ofstream > &fileStreams, const std::string &savePath, const std::string &transformIdentifier, const std::string &timeString, const bool saveCovarianceFlag)
void createLatLonAltCsvFileStream(std::map< std::string, std::ofstream > &fileStreams, const std::string &savePath, const std::string &transformIdentifier, const std::string &timeString)
void writeLatLonAltToCsvFile(std::map< std::string, std::ofstream > &fileStreams, const Eigen::Vector3d &latLonAlt, const std::string &transformIdentifier, const double timeStamp)
void inPlaceRemoveRollPitch(Eigen::Isometry3d &T)
void writePose3ToCsvFile(std::map< std::string, std::ofstream > &fileStreams, const Eigen::Isometry3d pose, const std::string &transformIdentifier, const double timeStamp, const bool saveCovarianceFlag, const std::optional< Eigen::Matrix< double, 6, 6 > > &optionalPoseCovarianceInWorldRos=std::nullopt)
double getYawFromIsometry(const Eigen::Isometry3d &T)