DepthAI v2 has been superseded by DepthAI v3. You are viewing legacy documentation.
此页面由 AI 自动翻译。查看英文原版

本页目录

  • 如何放置它
  • 输入和输出
  • 限制
  • IMU 传感器频率
  • 用法
  • IMU 传感器
  • 功能示例
  • 参考

IMU

IMU(惯性测量单元)节点可用于接收设备上 IMU 芯片的数据。我们的 OAK 设备使用以下两种之一:
  • BNO085数据手册在此),9 轴传感器,结合了加速度计、陀螺仪和磁力计。它还在(IMU)芯片本身上进行传感器融合。我们已将此驱动程序高效集成到 DepthAI 中。
  • BMI270,6 轴传感器,结合了加速度计和陀螺仪。
IMU 芯片通过 SPI 连接到 RVC。请参阅OAK 硬件文档,以检查您的 OAK 相机是否集成了 IMU。

如何放置它

Python

Python
1pipeline = dai.Pipeline()
2imu = pipeline.create(dai.node.IMU)

C++

C++
1dai::Pipeline pipeline;
2auto imu = pipeline.create<dai::node::IMU>();

输入和输出

限制

  • 对于 BNO086,由于传感器硬件限制,高于 400Hz 的陀螺仪频率有时可能会产生一些抖动。

IMU 传感器频率

以下是每个(原始)IMU 传感器可用的稳定频率。某些最大 IMU 频率更高,例如,对于 BNO086,陀螺仪的最大频率为 1000Hz,但最高 400Hz 是稳定的(由于驱动程序限制)。BNO086:请注意,BNO IMU 会将输入频率“向上舍入”到下一个可用频率。例如,如果您将频率设置为 101,它将舍入到 200Hz。
  • 加速度计:15Hz、31Hz、62Hz、125Hz、250Hz 500Hz
  • 陀螺仪:25Hz、33Hz、50Hz、100Hz、200Hz、400Hz
  • 磁力计:100Hz
BNO086 最大频率:
BNO086 传感器 最大频率
ACCELEROMETER_RAW 512 Hz
ACCELEROMETER 512 Hz
LINEAR_ACCELERATION 400 Hz
GRAVITY 400 Hz
GYROSCOPE_RAW 1000 Hz
GYROSCOPE_CALIBRATED / GYROSCOPE_UNCALIBRATED 100 Hz
MAGNETOMETER_RAW 100 Hz
MAGNETOMETER_CALIBRATED / MAGNETOMETER_UNCALIBRATED 100 Hz
ROTATION_VECTOR 400 Hz
GAME_ROTATION_VECTOR 400 Hz
GEOMAGNETIC_ROTATION_VECTOR 100 Hz
ARVR_STABILIZED_ROTATION_VECTOR 100 Hz
ARVR_STABILIZED_GAME_ROTATION_VECTOR 100 Hz
BMI270:请注意,BMI270 会将输入频率“向下舍入”到下一个可用频率。例如,如果您将频率设置为 99,它将舍入到 50Hz。 此外,当输入大于 400Hz 时,当前最大频率约为 250 Hz。
  • 加速度计:25Hz、50Hz、100Hz、200Hz、250Hz
  • 陀螺仪:25Hz、50Hz、100Hz、200Hz、250Hz

用法

Python

Python
1pipeline = dai.Pipeline()
2imu = pipeline.create(dai.node.IMU)
3
4# 以 100 Hz 的速率启用 ACCELEROMETER_RAW 和 GYROSCOPE_RAW
5imu.enableIMUSensor([dai.IMUSensor.ACCELEROMETER_RAW, dai.IMUSensor.GYROSCOPE_RAW], 100)
6# 在此阈值之上,数据包将以 X 的批次发送,如果主机未被阻塞且 USB 带宽可用
7imu.setBatchReportThreshold(1)
8# 批次中的最大 IMU 数据包数量,如果达到此数量,设备将阻止发送,直到主机可以接收它
9# 如果小于或等于 batchReportThreshold,则发送始终在设备上阻塞
10# 有助于减少设备的 CPU 负载和丢失的数据包数量,如果设备端由于多个节点导致 CPU 负载很高
11imu.setMaxBatchReports(10)

C++

C++
1dai::Pipeline pipeline;
2auto imu = pipeline.create<dai::node::IMU>();
3
4// 以 100 Hz 的速率启用 ACCELEROMETER_RAW 和 GYROSCOPE_RAW
5imu->enableIMUSensor({dai::IMUSensor::ACCELEROMETER_RAW, dai::IMUSensor::GYROSCOPE_RAW}, 100);
6// 在此阈值之上,数据包将以 X 的批次发送,如果主机未被阻塞且 USB 带宽可用
7imu->setBatchReportThreshold(1);
8// 批次中的最大 IMU 数据包数量,如果达到此数量,设备将阻止发送,直到主机可以接收它
9// 如果小于或等于 batchReportThreshold,则发送始终在设备上阻塞
10// 有助于减少设备的 CPU 负载和丢失的数据包数量,如果设备端由于多个节点导致 CPU 负载很高
11imu->setMaxBatchReports(10);

IMU 传感器

在启用 IMU 传感器(imu.enableIMUSensor())时,您可以在以下传感器之间进行选择:
  • ACCELEROMETER_RAW
  • ACCELEROMETER
  • LINEAR_ACCELERATION
  • GRAVITY
  • GYROSCOPE_RAW
  • GYROSCOPE_CALIBRATED
  • GYROSCOPE_UNCALIBRATED
  • MAGNETOMETER_RAW
  • MAGNETOMETER_CALIBRATED
  • MAGNETOMETER_UNCALIBRATED
  • ROTATION_VECTOR
  • GAME_ROTATION_VECTOR
  • GEOMAGNETIC_ROTATION_VECTOR
  • ARVR_STABILIZED_ROTATION_VECTOR
  • ARVR_STABILIZED_GAME_ROTATION_VECTOR
以下是所有传感器的描述

功能示例

参考

class

depthai.node.IMU(depthai.Node)

method
method
method
getBatchReportThreshold(self) -> int: int
Above this packet threshold data will be sent to host, if queue is not blocked
method
getMaxBatchReports(self) -> int: int
Maximum number of IMU packets in a batch report
method
setBatchReportThreshold(self, batchReportThreshold: typing.SupportsInt)
Above this packet threshold data will be sent to host, if queue is not blocked
method
setMaxBatchReports(self, maxBatchReports: typing.SupportsInt)
Maximum number of IMU packets in a batch report
property
out
Outputs IMUData message that carries IMU packets.

需要帮助?

请前往 Discussion Forum 获取技术支持或提出您可能有的任何其他问题。