Skip to content
Snippets Groups Projects
Commit ae249c21 authored by Hoop77's avatar Hoop77 Committed by lenoelda
Browse files

improved timing for uss data and sending timestamp

parent d4874787
No related merge requests found
...@@ -150,8 +150,11 @@ add_library(ultrasonic ${USS_SOURCE_FILES}) ...@@ -150,8 +150,11 @@ add_library(ultrasonic ${USS_SOURCE_FILES})
add_dependencies(ultrasonic ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp) add_dependencies(ultrasonic ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
target_link_libraries(ultrasonic target_link_libraries(ultrasonic
${catkin_LIBRARIES} ${catkin_LIBRARIES}
libwiringPi.so NetworkingLib
) libwiringPi.so)
target_include_directories(ultrasonic PUBLIC
${NetworkingLib_INCLUDE_DIRS}
${MessageLib_INCLUDE_DIRS})
find_package( OpenCV REQUIRED ) find_package( OpenCV REQUIRED )
add_library(camera ${CAMERA_SOURCE_FILES}) add_library(camera ${CAMERA_SOURCE_FILES})
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "StreamMedianFilter.h" #include "StreamMedianFilter.h"
#include <thread> #include <thread>
#include <logging/MessageOStream.h> #include <logging/MessageOStream.h>
#include "NetworkingLib/Timer.h"
namespace car namespace car
{ {
...@@ -25,7 +26,8 @@ private: ...@@ -25,7 +26,8 @@ private:
ros::Publisher ussData; ros::Publisher ussData;
UltrasonicSensor sensor; UltrasonicSensor sensor;
StreamMedianFilter streamMedianFilter; StreamMedianFilter streamMedianFilter;
std::thread sensorThread; networking::Networking net;
networking::time::Timer::Ptr timer;
}; };
} }
......
...@@ -21,7 +21,7 @@ public: ...@@ -21,7 +21,7 @@ public:
static constexpr int RESULT_LOW_BYTE = 0x03; static constexpr int RESULT_LOW_BYTE = 0x03;
static constexpr int RANGING_MODE_CM = 0x51; 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; static constexpr int MAX_DISTANCE = 255;
......
float32 distance float32 distance
time timestamp
...@@ -23,18 +23,19 @@ void Ultrasonic::onInit() ...@@ -23,18 +23,19 @@ void Ultrasonic::onInit()
ussData = nh.advertise<ussDataMsg>("ussData", 1); ussData = nh.advertise<ussDataMsg>("ussData", 1);
sensor.init(); sensor.init();
sensorThread = std::thread{ timer = networking::time::Timer::create(net);
[this] timer->startPeriodicTimeout(
std::chrono::milliseconds(UltrasonicSensor::DELAY),
[&]
{ {
for (;;) ussDataMsg msg;
{ auto distance = streamMedianFilter.moveWindow(sensor.getDistance());
ussDataMsg msg; msg.distance = distance;
auto distance = streamMedianFilter.moveWindow(sensor.getDistance()); msg.timestamp = ros::Time::now();
msg.distance = distance; ussData.publish(msg);
ussData.publish(msg); });
}
}};
messageOStream.write("onInit", "END"); messageOStream.write("onInit", "END");
} }
} }
...@@ -36,7 +36,6 @@ int UltrasonicSensor::getDistance() ...@@ -36,7 +36,6 @@ int UltrasonicSensor::getDistance()
throw std::runtime_error{"Sensor not initialized!\n"}; throw std::runtime_error{"Sensor not initialized!\n"};
wiringPiI2CWriteReg8(fd, COMMAND_REGISTER, RANGING_MODE_CM); wiringPiI2CWriteReg8(fd, COMMAND_REGISTER, RANGING_MODE_CM);
usleep(DELAY * 1000);
int distance = wiringPiI2CReadReg16(fd, RESULT_LOW_BYTE); int distance = wiringPiI2CReadReg16(fd, RESULT_LOW_BYTE);
if (distance == 0) // 0 means distance too far if (distance == 0) // 0 means distance too far
distance = 255; distance = 255;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment