From f43633e8307bfa269c80308aa1c4548a913c6bbe Mon Sep 17 00:00:00 2001
From: Hoop77 <p.badenhoop@gmx.de>
Date: Mon, 14 May 2018 16:11:59 +0200
Subject: [PATCH] improved timing for uss data and sending timestamp

---
 modules/catkin_ws/src/car/CMakeLists.txt      |  7 +++++--
 .../src/car/include/ultrasonic/Ultrasonic.h   |  4 +++-
 .../car/include/ultrasonic/UltrasonicSensor.h |  2 +-
 modules/catkin_ws/src/car/msg/ussDataMsg.msg  |  1 +
 .../src/car/src/ultrasonic/Ultrasonic.cpp     | 21 ++++++++++---------
 .../car/src/ultrasonic/UltrasonicSensor.cpp   |  1 -
 6 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/modules/catkin_ws/src/car/CMakeLists.txt b/modules/catkin_ws/src/car/CMakeLists.txt
index a3da590d..9d7ff7fc 100644
--- a/modules/catkin_ws/src/car/CMakeLists.txt
+++ b/modules/catkin_ws/src/car/CMakeLists.txt
@@ -150,8 +150,11 @@ add_library(ultrasonic ${USS_SOURCE_FILES})
 add_dependencies(ultrasonic ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
 target_link_libraries(ultrasonic
     ${catkin_LIBRARIES}
-    libwiringPi.so
-)
+    NetworkingLib
+    libwiringPi.so)
+target_include_directories(ultrasonic PUBLIC
+        ${NetworkingLib_INCLUDE_DIRS}
+        ${MessageLib_INCLUDE_DIRS})
 
 find_package( OpenCV REQUIRED )
 add_library(camera ${CAMERA_SOURCE_FILES})
diff --git a/modules/catkin_ws/src/car/include/ultrasonic/Ultrasonic.h b/modules/catkin_ws/src/car/include/ultrasonic/Ultrasonic.h
index 4c5c900a..d8d20227 100644
--- a/modules/catkin_ws/src/car/include/ultrasonic/Ultrasonic.h
+++ b/modules/catkin_ws/src/car/include/ultrasonic/Ultrasonic.h
@@ -8,6 +8,7 @@
 #include "StreamMedianFilter.h"
 #include <thread>
 #include <logging/MessageOStream.h>
+#include "NetworkingLib/Timer.h"
 
 namespace car
 {
@@ -25,7 +26,8 @@ private:
     ros::Publisher ussData;
     UltrasonicSensor sensor;
     StreamMedianFilter streamMedianFilter;
-    std::thread sensorThread;
+    networking::Networking net;
+    networking::time::Timer::Ptr timer;
 };
 
 }
diff --git a/modules/catkin_ws/src/car/include/ultrasonic/UltrasonicSensor.h b/modules/catkin_ws/src/car/include/ultrasonic/UltrasonicSensor.h
index 7d1711a6..8150e355 100644
--- a/modules/catkin_ws/src/car/include/ultrasonic/UltrasonicSensor.h
+++ b/modules/catkin_ws/src/car/include/ultrasonic/UltrasonicSensor.h
@@ -21,7 +21,7 @@ public:
     static constexpr int RESULT_LOW_BYTE = 0x03;
     static constexpr int RANGING_MODE_CM = 0x51;
 
-    static constexpr int DELAY = 10; //70 ms for ranging to finish
+    static constexpr int DELAY = 70; //70 ms for ranging to finish
 
     static constexpr int MAX_DISTANCE = 255;
 
diff --git a/modules/catkin_ws/src/car/msg/ussDataMsg.msg b/modules/catkin_ws/src/car/msg/ussDataMsg.msg
index 5cd4939c..5d17d4de 100644
--- a/modules/catkin_ws/src/car/msg/ussDataMsg.msg
+++ b/modules/catkin_ws/src/car/msg/ussDataMsg.msg
@@ -1 +1,2 @@
 float32 distance
+time timestamp
diff --git a/modules/catkin_ws/src/car/src/ultrasonic/Ultrasonic.cpp b/modules/catkin_ws/src/car/src/ultrasonic/Ultrasonic.cpp
index 4de34f01..847e7b17 100644
--- a/modules/catkin_ws/src/car/src/ultrasonic/Ultrasonic.cpp
+++ b/modules/catkin_ws/src/car/src/ultrasonic/Ultrasonic.cpp
@@ -23,18 +23,19 @@ void Ultrasonic::onInit()
 
     ussData = nh.advertise<ussDataMsg>("ussData", 1);
     sensor.init();
-    sensorThread = std::thread{
-        [this]
+    timer = networking::time::Timer::create(net);
+    timer->startPeriodicTimeout(
+        std::chrono::milliseconds(UltrasonicSensor::DELAY),
+        [&]
         {
-            for (;;)
-            {
-                ussDataMsg msg;
-                auto distance = streamMedianFilter.moveWindow(sensor.getDistance());
-                msg.distance = distance;
-                ussData.publish(msg);
-            }
-        }};
+            ussDataMsg msg;
+            auto distance = streamMedianFilter.moveWindow(sensor.getDistance());
+            msg.distance = distance;
+            msg.timestamp = ros::Time::now();
+            ussData.publish(msg);
+        });
 
     messageOStream.write("onInit", "END");
 }
+
 }
diff --git a/modules/catkin_ws/src/car/src/ultrasonic/UltrasonicSensor.cpp b/modules/catkin_ws/src/car/src/ultrasonic/UltrasonicSensor.cpp
index 266fa489..f61a6013 100644
--- a/modules/catkin_ws/src/car/src/ultrasonic/UltrasonicSensor.cpp
+++ b/modules/catkin_ws/src/car/src/ultrasonic/UltrasonicSensor.cpp
@@ -36,7 +36,6 @@ int UltrasonicSensor::getDistance()
         throw std::runtime_error{"Sensor not initialized!\n"};
 
     wiringPiI2CWriteReg8(fd, COMMAND_REGISTER, RANGING_MODE_CM);
-    usleep(DELAY * 1000);
     int distance = wiringPiI2CReadReg16(fd, RESULT_LOW_BYTE);
     if (distance == 0)  // 0 means distance too far
         distance = 255;
-- 
GitLab