conversion.cpp
Go to the documentation of this file.
2 
4 
5 #include <chrono>
6 #include <cmath>
7 
8 namespace ensenso_conversion
9 {
10 namespace
11 {
12 double const NXLIB_TIMESTAMP_OFFSET = 11644473600;
13 
14 double timeNowAsSeconds()
15 {
16  // TODO Check if this also works with Windows and Mac in ROS2
18  auto nanoseconds = std::chrono::duration_cast<std::chrono::nanoseconds>(t.time_since_epoch()).count();
19  return (double)nanoseconds / 1e09;
20 }
21 
22 double fixTimestamp(double const& timestamp, bool isFileCamera = false)
23 {
24  if (std::isnan(timestamp))
25  {
26  // Handle missing timestamps.
27  ENSENSO_WARN("NxLib timestamp is \'nan\', using current ROS time instead.");
28  return timeNowAsSeconds();
29  }
30  else if (isFileCamera)
31  {
32  // File camera timestamps are too old for ROS, use the current time instead.
33  return timeNowAsSeconds();
34  }
35 
36  return timestamp - NXLIB_TIMESTAMP_OFFSET;
37 }
38 } // namespace
39 
40 double nxLibToRosTimestamp(double const& timestamp, bool isFileCamera)
41 {
42  return fixTimestamp(timestamp, isFileCamera);
43 }
44 
45 double nxLibToPclTimestamp(double const& timestamp, bool isFileCamera)
46 {
47  // PCL timestamp is in microseconds and Unix time.
48  return nxLibToRosTimestamp(timestamp, isFileCamera) * 1e6;
49 }
50 
51 geometry_msgs::msg::Point32 toRosPoint(NxLibItem const& itemArray, bool convertUnits)
52 {
53  geometry_msgs::msg::Point32 point;
54  if (convertUnits)
55  {
56  point.x = itemArray[0].asDouble() / conversionFactor;
57  point.y = itemArray[1].asDouble() / conversionFactor;
58  point.z = itemArray[2].asDouble() / conversionFactor;
59  }
60  else
61  {
62  point.x = itemArray[0].asDouble();
63  point.y = itemArray[1].asDouble();
64  point.z = itemArray[2].asDouble();
65  }
66 
67  return point;
68 }
69 
70 NxLibItem toEnsensoPoint(geometry_msgs::msg::Point32 const& point, bool convertUnits)
71 {
72  NxLibItem itemPoint;
73  if (convertUnits)
74  {
75  itemPoint[0] = point.x * conversionFactor;
76  itemPoint[1] = point.y * conversionFactor;
77  itemPoint[2] = point.z * conversionFactor;
78  }
79  else
80  {
81  itemPoint[0] = point.x;
82  itemPoint[1] = point.y;
83  itemPoint[2] = point.z;
84  }
85 
86  return itemPoint;
87 }
88 
89 } // namespace ensenso_conversion
ENSENSO_WARN
void ENSENSO_WARN(T... args)
Definition: logging.h:210
ensenso_conversion::nxLibToPclTimestamp
double nxLibToPclTimestamp(double const &timestamp, bool isFileCamera=false)
Definition: conversion.cpp:45
ensenso_conversion
Definition: conversion.h:9
conversion.h
ensenso::ros::now
inline ::ros::Time now(ensenso::ros::NodeHandle const &nh)
Definition: time.h:76
logging.h
ensenso_conversion::conversionFactor
const int conversionFactor
Definition: conversion.h:16
ensenso_conversion::toRosPoint
geometry_msgs::msg::Point32 toRosPoint(NxLibItem const &itemArray, bool convertUnits=true)
Definition: conversion.cpp:51
ensenso_conversion::nxLibToRosTimestamp
double nxLibToRosTimestamp(double const &timestamp, bool isFileCamera=false)
Definition: conversion.cpp:40
t
geometry_msgs::TransformStamped t
ensenso_conversion::toEnsensoPoint
NxLibItem toEnsensoPoint(geometry_msgs::msg::Point32 const &point, bool convertUnits=true)
Definition: conversion.cpp:70


ensenso_camera
Author(s): Ensenso
autogenerated on Wed Apr 2 2025 02:37:46