42 template <
bool QUAT_REPR = true,
bool TUM_FORMAT = true>
45 std::vector<std::string> curr_tokens;
49 curr_tokens.size() == 7,
51 "Invalid number of tokens in given string\n" 53 "\tTokens size: %" USIZE_STR
"\n",
57 quat.
r(atof(curr_tokens[6].c_str()));
58 quat.
x(atof(curr_tokens[3].c_str()));
59 quat.
y(atof(curr_tokens[4].c_str()));
60 quat.
z(atof(curr_tokens[5].c_str()));
65 atof(curr_tokens[0].c_str()),
66 atof(curr_tokens[1].c_str()),
67 atof(curr_tokens[2].c_str()),
83 THROW_EXCEPTION(
"Invalid combination: QUAT_REPR=false, TUM_FORMAT=true");
133 template <
class POSE_T>
135 const std::string& fname, std::vector<POSE_T>* poses_vec,
136 std::vector<mrpt::system::TTimeStamp>* timestamps = NULL,
137 bool substract_init_offset =
false)
144 using namespace internal;
149 "\nFile %s was not found.\n" 150 "Either specify a valid filename or set set the " 151 "m_visualize_GT flag to false\n",
156 file_GT.fileOpenCorrectly(),
157 "\nreadGTFileRGBD_TUM: Couldn't openGT file\n");
158 ASSERTMSG_(poses_vec,
"std::vector<POSE_T>* is not valid.");
163 for (
size_t i = 0; file_GT.readLine(curr_line); i++)
165 if (curr_line.at(0) !=
'#')
172 POSE_T pose_offset_opposite;
173 if (substract_init_offset)
178 curr_line.begin() + curr_line.find_first_of(
" \t") + 1,
181 pose_offset_opposite = pose_offset.getOppositeScalar();
185 for (; file_GT.readLine(curr_line);)
190 std::string timestamp_str = std::string(
192 curr_line.begin() + curr_line.find_first_of(
" \t"));
193 timestamps->push_back(atof(timestamp_str.c_str()));
199 curr_line.begin() + curr_line.find_first_of(
" \t") + 1,
204 if (substract_init_offset)
206 curr_pose.addComponents(pose_offset_opposite);
210 poses_vec->push_back(curr_pose);
#define THROW_EXCEPTION(msg)
std::string std::string format(std::string_view fmt, ARGS &&... args)
T y() const
Return y coordinate of the quaternion.
bool fileExists(const std::string &fileName)
Test if a given file (or directory) exists.
void fromStringRaw(const std::string &s)
Same as fromString, but without requiring the square brackets in the string.
void tokenize(const std::string &inString, const std::string &inDelimiters, OUT_CONTAINER &outTokens, bool skipBlankTokens=true) noexcept
Tokenizes a string according to a set of delimiting characters.
void fromStringRaw(const std::string &s)
Same as fromString, but without requiring the square brackets in the string.
T r() const
Return r (real part) coordinate of the quaternion.
void readFileWithPoses(const std::string &fname, std::vector< POSE_T > *poses_vec, std::vector< mrpt::system::TTimeStamp > *timestamps=NULL, bool substract_init_offset=false)
Parse the textfile and fill in the corresponding poses vector.
#define ASSERTMSG_(f, __ERROR_MSG)
Defines an assertion mechanism.
mrpt::io::CFileInputStream CFileInputStream
A class used to store a 3D pose as a translation (x,y,z) and a quaternion (qr,qx,qy,qz).
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
void getPoseFromString< false, true >(const std::string &s, mrpt::poses::CPose3D &p)
Invalid form.
T x() const
Return x coordinate of the quaternion.
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle...
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
void setFromValues(const double x0, const double y0, const double z0, const double yaw=0, const double pitch=0, const double roll=0)
Set the pose from a 3D position (meters) and yaw/pitch/roll angles (radians) - This method recomputes...
void getPoseFromString(const std::string &s, mrpt::poses::CPose2D &p)
A quaternion, which can represent a 3D rotation as pair , with a real part "r" and a 3D vector ...
T z() const
Return z coordinate of the quaternion.
void rpy(T &roll, T &pitch, T &yaw) const
Return the yaw, pitch & roll angles associated to quaternion.