From b6597f298474b303c210dbad197e900dc63a1c1a Mon Sep 17 00:00:00 2001 From: Jacob Dahl <37091262+dakejahl@users.noreply.github.com> Date: Mon, 17 Mar 2025 21:19:10 -0800 Subject: [PATCH] gz: set realtime clock at startup (#24530) --- src/modules/simulation/gz_bridge/GZBridge.cpp | 11 ++++++++++- src/modules/simulation/gz_bridge/GZBridge.hpp | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/modules/simulation/gz_bridge/GZBridge.cpp b/src/modules/simulation/gz_bridge/GZBridge.cpp index 6cf1734da5e..3042edc8ff5 100644 --- a/src/modules/simulation/gz_bridge/GZBridge.cpp +++ b/src/modules/simulation/gz_bridge/GZBridge.cpp @@ -182,7 +182,16 @@ void GZBridge::clockCallback(const gz::msgs::Clock &msg) struct timespec ts; ts.tv_sec = msg.sim().sec(); ts.tv_nsec = msg.sim().nsec(); - px4_clock_settime(CLOCK_MONOTONIC, &ts); + + if (!_realtime_clock_set) { + // Set initial real time clock at startup + px4_clock_settime(CLOCK_REALTIME, &ts); + _realtime_clock_set = true; + + } else { + // Keep monotonic clock synchronized + px4_clock_settime(CLOCK_MONOTONIC, &ts); + } } void GZBridge::opticalFlowCallback(const px4::msgs::OpticalFlow &msg) diff --git a/src/modules/simulation/gz_bridge/GZBridge.hpp b/src/modules/simulation/gz_bridge/GZBridge.hpp index ac096744c26..3dd4f09c972 100644 --- a/src/modules/simulation/gz_bridge/GZBridge.hpp +++ b/src/modules/simulation/gz_bridge/GZBridge.hpp @@ -162,6 +162,7 @@ private: float _temperature{288.15}; // 15 degrees + bool _realtime_clock_set{false}; gz::transport::Node _node; // GPS noise model