Demo
Command Line
1~/examples/IMU$ python3 imu_gyroscope_accelerometer.py
2Accelerometer timestamp: 27 days, 4:31:26.532170
3Latency [ms]: 0:00:00.004806
4Accelerometer [m/s^2]: x: -0.098162 y: -0.062249 z: -9.715671
5Gyroscope timestamp: 27 days, 4:31:26.532170
6Gyroscope [rad/s]: x: 0.002131 y: 0.019175 z: 0.001065
7Accelerometer timestamp: 27 days, 4:31:26.534664
8Latency [ms]: 0:00:00.006309
9Accelerometer [m/s^2]: x: -0.064643 y: -0.119710 z: -9.758766
10Gyroscope timestamp: 27 days, 4:31:26.534664
11Gyroscope [rad/s]: x: 0.002131 y: 0.019175 z: 0.002131Pipeline
Source code
Python
C++
Python
PythonGitHub
1#!/usr/bin/env python3
2import depthai as dai
3
4
5def timeDeltaToMilliS(delta) -> float:
6 return delta.total_seconds()*1000
7
8
9# Create pipeline
10with dai.Pipeline() as pipeline:
11 # Define sources and outputs
12 imu = pipeline.create(dai.node.IMU)
13
14 # enable ACCELEROMETER_RAW at 500 hz rate
15 imu.enableIMUSensor(dai.IMUSensor.ACCELEROMETER_RAW, 480)
16 # enable GYROSCOPE_RAW at 400 hz rate
17 imu.enableIMUSensor(dai.IMUSensor.GYROSCOPE_RAW, 400)
18 # it's recommended to set both setBatchReportThreshold and setMaxBatchReports to 20 when integrating in a pipeline with a lot of input/output connections
19 # above this threshold packets will be sent in batch of X, if the host is not blocked and USB bandwidth is available
20 imu.setBatchReportThreshold(1)
21 # maximum number of IMU packets in a batch, if it's reached device will block sending until host can receive it
22 # if lower or equal to batchReportThreshold then the sending is always blocking on device
23 # useful to reduce device's CPU load and number of lost packets, if CPU load is high on device side due to multiple nodes
24 imu.setMaxBatchReports(10)
25
26 imuQueue = imu.out.createOutputQueue(maxSize=50, blocking=False)
27
28 pipeline.start()
29 baseTs = None
30 while pipeline.isRunning():
31 try:
32 imuData = imuQueue.get()
33 except KeyboardInterrupt:
34 break
35 assert isinstance(imuData, dai.IMUData)
36 imuPackets = imuData.packets
37 for imuPacket in imuPackets:
38 acceleroValues = imuPacket.acceleroMeter
39 gyroValues = imuPacket.gyroscope
40
41 acceleroTs = acceleroValues.getTimestamp()
42 gyroTs = gyroValues.getTimestamp()
43
44 imuF = "{:.06f}"
45 tsF = "{:.03f}"
46
47 print(f"Accelerometer timestamp: {acceleroTs}")
48 print(f"Latency [ms]: {dai.Clock.now() - acceleroValues.getTimestamp()}")
49 print(f"Accelerometer [m/s^2]: x: {imuF.format(acceleroValues.x)} y: {imuF.format(acceleroValues.y)} z: {imuF.format(acceleroValues.z)}")
50 print(f"Gyroscope timestamp: {gyroTs}")
51 print(f"Gyroscope [rad/s]: x: {imuF.format(gyroValues.x)} y: {imuF.format(gyroValues.y)} z: {imuF.format(gyroValues.z)} ")
52 print()Need assistance?
Head over to Discussion Forum for technical support or any other questions you might have.