Связь между временными метками датчиков и временем UTC с использованием приложения-витрины или скрипта PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Связь между временными метками датчиков и временем UTC с использованием приложения-витрины или скрипта Python

Сообщение Anonymous »

Я использую датчик Movesense MD для клинических исследований для сбора данных IMU. При записи данных через приложение Movesense Medical временные метки являются относительными и представляют собой накопленное значение в миллисекундах от временной метки (с момента сброса датчика).
В разделе «Информация о датчике» в приложении movenense showcase. есть значение «Установить время», но похоже, что относительная метка времени не рассчитывается на основе этого значения.
Изображение

Я также написал сценарий Python для прямого подключения к датчику Movesense, и пока я успешно получил относительные метки времени и данные, я не смог получить доступ к базовой метке времени.
Вот мои вопросы:
Есть ли способ определить взаимосвязь между временными метками датчика и Время UTC с помощью приложения-витрины или скрипта Python? Является ли мой подход с использованием Python правильным способом получения этой информации (с использованием встроенного ПО Sample GATT SensorData) или мне следует попробовать другой метод?

Код: Выделить всё

async def subscribe_time_detailed(self, client_ref=120):
"""
Subscribe to the /Time/Detailed resource to receive UTC time updates.

Parameters:
- client_ref (int): A unique client reference identifier (1-255).
"""
path = "/Time/Detailed"
command = bytearray([1, client_ref]) + bytearray(path, "utf-8")

await self.client.write_gatt_char(
self.WRITE_CHARACTERISTIC_UUID,
command,
response=True  # Ensure that you get a response from the sensor
)
print(f"Subscribed to {path} with client reference {client_ref}.")

Код: Выделить всё

    async def notification_handler(self, sender, data):
d = DataView(data)
packet_type = d.get_uint_8(0)

if packet_type == PACKET_TYPE_DATA:
# Store the first part of the incoming IMU9 data
self.ongoing_data_update = d

elif packet_type == PACKET_TYPE_DATA_PART2:
if not self.ongoing_data_update:
print("Received PACKET_TYPE_DATA_PART2 without a preceding PACKET_TYPE_DATA.")
return

# Combine the stored first part with the new data
combined_data = self.ongoing_data_update.array + data[2:]
d = DataView(combined_data)
self.ongoing_data_update = None

# Extract timestamp
timestamp = d.get_uint_32(2)
for i in range(0, 8):
# Interpolate timestamp within the data notification
row_timestamp = timestamp + int(i * 1000 / 208)
## IMU9 package starts with timestamp and then three arrays (len 8*4 bytes) of xyz's
## Each "row"  therefore starts (3*4 bytes after each other interleaving to acc, gyro and magn)
offset = 6 + i * 3 * 4
skip = 3 * 8 * 4
acc_x = d.get_float_32(offset)
acc_y = d.get_float_32(offset + 4)
acc_z = d.get_float_32(offset + 8)
gyro_x = d.get_float_32(offset + skip + 0)
gyro_y = d.get_float_32(offset + skip + 4)
gyro_z = d.get_float_32(offset + skip + 8)

# Format the message with system UTC time only
system_utc = datetime.now(timezone.utc).strftime('%Y-%m-%d %H:%M:%S.%f %Z')

msg_row = "{},{:.2f},{:.2f},{:.2f},{:.2f},{:.2f},{:.2f},{}".format(
row_timestamp,
acc_x,
acc_y,
acc_z,
gyro_x,
gyro_y,
gyro_z,
system_utc
)
if self.queue_active:
self.data_queue.put(msg_row)

elif packet_type == PACKET_TYPE_TIME_DETAILED:
try:
# Extract utcTime (uint64 at offset 2)
sensor_utc_time = d.get_uint_64(2)
self.sensor_utc_datetime=sensor_utc_time

# Extract relativeTime (uint32 at offset 10)
relative_time = d.get_uint_32(10)

self.sensor_relative_time = relative_time

print(f"Received sensor time details: UTC={self.sensor_utc_datetime}, RelativeTime={relative_time}")
self.utc_time_received = True  # Mark that at least one time packet was received
except Exception as e:
print(f"Failed to parse sensor Time/Detailed data: {e}")

else:
logger.warning(f"Unknown packet type received: {packet_type}")
спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... -app-or-py
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»