Export GPS poses: set 8 decimals (1 mm accuracy) https://github.com/introlab/rtabmap_ros/issues/833

This commit is contained in:
matlabbe
2022-11-02 11:35:54 -07:00
parent 2889cf8048
commit c9d50ef445
3 changed files with 17 additions and 16 deletions
+10 -10
View File
@@ -524,9 +524,9 @@ bool exportGPS(
for(std::map<int, GPS>::const_iterator iter=gpsValues.begin(); iter!=gpsValues.end(); ++iter) for(std::map<int, GPS>::const_iterator iter=gpsValues.begin(); iter!=gpsValues.end(); ++iter)
{ {
values += uFormat("%s,%s,%s ", values += uFormat("%s,%s,%s ",
uReplaceChar(uNumber2Str(iter->second.longitude()), ',', '.').c_str(), uReplaceChar(uNumber2Str(iter->second.longitude(), 8), ',', '.').c_str(),
uReplaceChar(uNumber2Str(iter->second.latitude()), ',', '.').c_str(), uReplaceChar(uNumber2Str(iter->second.latitude(), 8), ',', '.').c_str(),
uReplaceChar(uNumber2Str(iter->second.altitude()), ',', '.').c_str()); uReplaceChar(uNumber2Str(iter->second.altitude(), 8), ',', '.').c_str());
} }
// switch argb (Qt format) -> abgr // switch argb (Qt format) -> abgr
@@ -580,13 +580,13 @@ bool exportGPS(
fprintf(fout, "# stamp longitude latitude altitude error bearing\n"); fprintf(fout, "# stamp longitude latitude altitude error bearing\n");
for(std::map<int, GPS>::const_iterator iter=gpsValues.begin(); iter!=gpsValues.end(); ++iter) for(std::map<int, GPS>::const_iterator iter=gpsValues.begin(); iter!=gpsValues.end(); ++iter)
{ {
fprintf(fout, "%f %f %f %f %f %f\n", fprintf(fout, "%f %.*f %.*f %.*f %.*f %.*f\n",
iter->second.stamp(), iter->second.stamp(),
iter->second.longitude(), 8, iter->second.longitude(),
iter->second.latitude(), 8, iter->second.latitude(),
iter->second.altitude(), 8, iter->second.altitude(),
iter->second.error(), 8, iter->second.error(),
iter->second.bearing()); 8, iter->second.bearing());
} }
} }
@@ -109,13 +109,13 @@ std::string UTILITE_EXP uNumber2Str(int number);
* @param number the number to convert in a string * @param number the number to convert in a string
* @return the string * @return the string
*/ */
std::string UTILITE_EXP uNumber2Str(float number); std::string UTILITE_EXP uNumber2Str(float number, int precision=6);
/** /**
* Convert a number (double) to a string. * Convert a number (double) to a string.
* @param number the number to convert in a string * @param number the number to convert in a string
* @return the string * @return the string
*/ */
std::string UTILITE_EXP uNumber2Str(double number); std::string UTILITE_EXP uNumber2Str(double number, int precision=6);
/** /**
* Convert a string to an integer. * Convert a string to an integer.
+5 -4
View File
@@ -24,6 +24,7 @@
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <iomanip>
#ifdef _WIN32 #ifdef _WIN32
#include <windows.h> #include <windows.h>
@@ -101,17 +102,17 @@ std::string uNumber2Str(int number)
return s.str(); return s.str();
} }
std::string uNumber2Str(float number) std::string uNumber2Str(float number, int precision)
{ {
std::stringstream s; std::stringstream s;
s << number; s << std::setprecision(precision) << std::fixed << number;
return s.str(); return s.str();
} }
std::string uNumber2Str(double number) std::string uNumber2Str(double number, int precision)
{ {
std::stringstream s; std::stringstream s;
s << number; s << std::setprecision(precision) << std::fixed << number;
return s.str(); return s.str();
} }