imu_video_synced.cpp
Go to the documentation of this file.
1 #include <iostream>
2 #include <opencv2/opencv.hpp>
3 
4 #include "depthai/depthai.hpp"
5 
6 int main() {
7  dai::Device device;
8 
9  auto imuType = device.getConnectedIMU();
10  auto imuFirmwareVersion = device.getIMUFirmwareVersion();
11  std::cout << "IMU type: " << imuType << ", firmware version: " << imuFirmwareVersion << std::endl;
12 
13  if(imuType != "BNO086") {
14  std::cout << "Rotation vector output is supported only by BNO086!" << std::endl;
15  return 1;
16  }
17 
18  dai::Pipeline pipeline;
19 
20  auto colorCamera = pipeline.create<dai::node::ColorCamera>();
21  auto imu = pipeline.create<dai::node::IMU>();
22  auto sync = pipeline.create<dai::node::Sync>();
23  auto xoutGroup = pipeline.create<dai::node::XLinkOut>();
24 
25  xoutGroup->setStreamName("xout");
26 
27  colorCamera->setCamera("color");
28 
29  imu->enableIMUSensor(dai::IMUSensor::ROTATION_VECTOR, 120);
30  imu->setBatchReportThreshold(1);
31  imu->setMaxBatchReports(10);
32 
33  sync->setSyncThreshold(std::chrono::milliseconds(10));
34  sync->setSyncAttempts(-1); // Infinite attempts
35 
36  colorCamera->video.link(sync->inputs["video"]);
37  imu->out.link(sync->inputs["imu"]);
38 
39  sync->out.link(xoutGroup->input);
40 
41  device.startPipeline(pipeline);
42 
43  auto groupQueue = device.getOutputQueue("xout", 3, false);
44 
45  while(true) {
46  auto groupMessage = groupQueue->get<dai::MessageGroup>();
47  auto imuData = groupMessage->get<dai::IMUData>("imu");
48  auto colorData = groupMessage->get<dai::ImgFrame>("video");
49  auto timeDifference = imuData->getTimestampDevice() - colorData->getTimestampDevice();
50  auto timeDifferenceUs = std::chrono::duration_cast<std::chrono::microseconds>(timeDifference).count();
51 
52  std::cout << "Time difference between messages is: " << std::abs(timeDifferenceUs / 1000.0) << " ms" << std::endl;
53 
54  for(auto& packet : imuData->packets) {
55  auto& rv = packet.rotationVector;
56 
57  printf(
58  "Quaternion: i: %.3f j: %.3f k: %.3f real: %.3f\n"
59  "Accuracy (rad): %.3f \n",
60  rv.i,
61  rv.j,
62  rv.k,
63  rv.real,
64  rv.rotationVectorAccuracy);
65  }
66 
67  cv::imshow("Color", colorData->getCvFrame());
68  if(cv::waitKey(1) == 'q') {
69  break;
70  }
71  }
72 
73  return 0;
74 }
dai::DeviceBase::startPipeline
bool startPipeline()
Definition: DeviceBase.cpp:1511
dai::node::XLinkOut
XLinkOut node. Sends messages over XLink.
Definition: XLinkOut.hpp:14
dai::Pipeline
Represents the pipeline, set of nodes and connections between them.
Definition: Pipeline.hpp:100
dai::MessageGroup
Definition: MessageGroup.hpp:16
main
int main()
Definition: imu_video_synced.cpp:6
dai::node::Sync
Definition: Sync.hpp:11
dai::node::IMU::out
Output out
Definition: IMU.hpp:27
dai::IMUData
Definition: IMUData.hpp:14
dai::node::ColorCamera
ColorCamera node. For use with color sensors.
Definition: ColorCamera.hpp:16
dai::IMUSensor::ROTATION_VECTOR
@ ROTATION_VECTOR
dai::node::IMU
IMU node for BNO08X.
Definition: IMU.hpp:14
dai::Buffer::getTimestampDevice
std::chrono::time_point< std::chrono::steady_clock, std::chrono::steady_clock::duration > getTimestampDevice() const
Definition: Buffer.cpp:30
dai::DeviceBase::getIMUFirmwareVersion
dai::Version getIMUFirmwareVersion()
Definition: DeviceBase.cpp:1125
dai::Device::getOutputQueue
std::shared_ptr< DataOutputQueue > getOutputQueue(const std::string &name)
Definition: Device.cpp:86
dai::DeviceBase::getConnectedIMU
std::string getConnectedIMU()
Definition: DeviceBase.cpp:1121
depthai.hpp
dai::Pipeline::create
std::shared_ptr< N > create()
Definition: Pipeline.hpp:145
dai::ImgFrame
Definition: ImgFrame.hpp:25
dai::Device
Definition: Device.hpp:21
dai::MessageGroup::get
std::shared_ptr< T > get(const std::string &name)
Definition: MessageGroup.hpp:30


depthai
Author(s): Martin Peterlin
autogenerated on Sat Mar 22 2025 02:58:19