{
  "id": 583676,
  "title": "What is the sample rate on the IMU device?",
  "url": "/competitions/cmi-detect-behavior-with-sensor-data/discussion/583676",
  "author_name": "",
  "post_date": "2025-06-08T13:26:23.501460Z",
  "votes": 5,
  "comment_count": 8,
  "views": 0,
  "content": "<p>Hi, </p>\n<p>What is the sample rate on the IMU device?</p>",
  "messages": [
    {
      "id": "3219904",
      "postDate": "06/08/2025 13:26:23",
      "content": "<p>Hi, </p>\n<p>What is the sample rate on the IMU device?</p>",
      "rawMarkdown": "Hi, \n\nWhat is the sample rate on the IMU device?",
      "votes": null
    },
    {
      "id": "3219906",
      "postDate": "06/08/2025 13:38:48",
      "content": "<p><strong>TL;DR:</strong> Given the column names, we’re almost certainly looking at fused outputs. The BNO080/BNO085 doesn’t run every channel at a fixed 1 kHz. You request a report rate <em>R</em>, and it picks the nearest supported ODR within</p>\n<pre><code>.·R ≤ ConfiguredRate ≤ .·R\n</code></pre>\n<p>up to each feature’s ceiling (e.g. raw accel 500 Hz, raw gyro 400 Hz, gyro-rotation vector 1 000 Hz, etc.). You enable whichever raw or fused streams you need, and the sensor hub programs its MEMS ODRs and MotionEngine fusion core accordingly.</p>\n<hr>\n<h2>First Comment</h2>\n<p>Hi,<br>\nFrom <a href=\"https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/overview:\" target=\"_blank\">https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/overview:</a></p>\n<blockquote>\n  <p>1x Inertial Measurement Unit (IMU; BNO080/BNO085): An integrated sensor that combines accelerometer, gyroscope, and magnetometer measurements with onboard processing to provide orientation and motion data.</p>\n</blockquote>\n<p>The Helios IMU (BNO080/BNO085 SiP) seems to deliver a fixed 1 kHz sampling rate. In the product brief you’ll find:</p>\n<blockquote>\n  <p>“1 KHz Sample Rate – Enables flawless, smooth head-tracking with low latency…”</p>\n</blockquote>\n<p>No alternate rates are listed, so you might consider the sample rate to be fixed at 1 kHz.</p>\n<hr>\n<h2>Update 1</h2>\n<p>The competition linked pdf calls out the Helios IMU (BNO080/BNO085) as having a “1 kHz Sample Rate – Enables flawless, smooth head-tracking with low latency…” (from the product brief), which might suggest a fixed data rate.<br>\nHowever, the official BNO08X datasheet shows that <strong>all</strong> sensor and fusion outputs are <em>configurable</em> by the requested report rate R, and that the device picks the nearest supported Output Data Rate (ODR) such that</p>\n<pre><code>. · R ≤ ConfiguredRate ≤ . · R\n</code></pre>\n<p>Each feature has its own maximum ceiling:</p>\n<table>\n<thead>\n<tr>\n<th>Feature / Sensor</th>\n<th>Max. Report Rate</th>\n<th>Fused?</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Raw accelerometer</strong></td>\n<td>500 Hz</td>\n<td>No</td>\n</tr>\n<tr>\n<td><strong>Raw gyroscope</strong></td>\n<td>400 Hz</td>\n<td>No</td>\n</tr>\n<tr>\n<td><strong>Raw magnetometer</strong></td>\n<td>100 Hz</td>\n<td>No</td>\n</tr>\n<tr>\n<td><strong>Gyro-rotation vector</strong></td>\n<td>1 000 Hz</td>\n<td>Yes (gyro+accel+mag)</td>\n</tr>\n<tr>\n<td><strong>Rotation vector</strong></td>\n<td>400 Hz</td>\n<td>Yes (accel+gyro+mag)</td>\n</tr>\n<tr>\n<td><strong>Gaming rotation vector</strong></td>\n<td>400 Hz</td>\n<td>Yes (accel+gyro)</td>\n</tr>\n<tr>\n<td><strong>Geomagnetic rotation vector</strong></td>\n<td>90 Hz</td>\n<td>Yes (accel+mag)</td>\n</tr>\n<tr>\n<td><strong>Gravity</strong></td>\n<td>400 Hz</td>\n<td>Yes (accel+gyro)</td>\n</tr>\n<tr>\n<td><strong>Linear acceleration</strong></td>\n<td>400 Hz</td>\n<td>Yes (accel+gyro)</td>\n</tr>\n</tbody>\n</table>\n<p>So rather than a hard-wired 1 kHz on <em>all</em> channels, you request whatever rate you need (up to each feature’s maximum) and the BNO08X will program the underlying MEMS ODRs and/or MotionEngine fusion core accordingly.</p>\n<p>—</p>\n<p>*Source: BNO080/085 Datasheet: <a href=\"https://www.ceva-ip.com/wp-content/uploads/BNO080_085-Datasheet.pdf*\" target=\"_blank\">https://www.ceva-ip.com/wp-content/uploads/BNO080_085-Datasheet.pdf*</a></p>",
      "rawMarkdown": "**TL;DR:** Given the column names, we’re almost certainly looking at fused outputs. The BNO080/BNO085 doesn’t run every channel at a fixed 1 kHz. You request a report rate *R*, and it picks the nearest supported ODR within\n\n```\n0.9·R ≤ ConfiguredRate ≤ 2.1·R\n```\n\nup to each feature’s ceiling (e.g. raw accel 500 Hz, raw gyro 400 Hz, gyro-rotation vector 1 000 Hz, etc.). You enable whichever raw or fused streams you need, and the sensor hub programs its MEMS ODRs and MotionEngine fusion core accordingly.\n\n---\n\n## First Comment\nHi,\nFrom https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/overview:\n>1x Inertial Measurement Unit (IMU; BNO080/BNO085): An integrated sensor that combines accelerometer, gyroscope, and magnetometer measurements with onboard processing to provide orientation and motion data.\n\nThe Helios IMU (BNO080/BNO085 SiP) seems to deliver a fixed 1 kHz sampling rate. In the product brief you’ll find:\n> “1 KHz Sample Rate – Enables flawless, smooth head-tracking with low latency…”\n\nNo alternate rates are listed, so you might consider the sample rate to be fixed at 1 kHz.\n\n---\n## Update 1\nThe competition linked pdf calls out the Helios IMU (BNO080/BNO085) as having a “1 kHz Sample Rate – Enables flawless, smooth head-tracking with low latency…” (from the product brief), which might suggest a fixed data rate.\nHowever, the official BNO08X datasheet shows that **all** sensor and fusion outputs are *configurable* by the requested report rate R, and that the device picks the nearest supported Output Data Rate (ODR) such that\n\n```\n0.9 · R ≤ ConfiguredRate ≤ 2.1 · R\n```\n\nEach feature has its own maximum ceiling:\n\n| Feature / Sensor                | Max. Report Rate |        Fused?        |\n| ------------------------------- | :--------------: | :------------------: |\n| **Raw accelerometer**           |      500 Hz      |          No          |\n| **Raw gyroscope**               |      400 Hz      |          No          |\n| **Raw magnetometer**            |      100 Hz      |          No          |\n| **Gyro-rotation vector**        |     1 000 Hz     | Yes (gyro+accel+mag) |\n| **Rotation vector**             |      400 Hz      | Yes (accel+gyro+mag) |\n| **Gaming rotation vector**      |      400 Hz      |   Yes (accel+gyro)   |\n| **Geomagnetic rotation vector** |       90 Hz      |    Yes (accel+mag)   |\n| **Gravity**                     |      400 Hz      |   Yes (accel+gyro)   |\n| **Linear acceleration**         |      400 Hz      |   Yes (accel+gyro)   |\n\nSo rather than a hard-wired 1 kHz on *all* channels, you request whatever rate you need (up to each feature’s maximum) and the BNO08X will program the underlying MEMS ODRs and/or MotionEngine fusion core accordingly.\n\n—\n\n*Source: BNO080/085 Datasheet: https://www.ceva-ip.com/wp-content/uploads/BNO080_085-Datasheet.pdf*",
      "votes": null
    },
    {
      "id": "3219930",
      "postDate": "06/08/2025 14:26:55",
      "content": "<p>This would imply we have to classify the position based on observations that last ~0.1 second each</p>",
      "rawMarkdown": "This would imply we have to classify the position based on observations that last ~0.1 second each",
      "votes": null
    },
    {
      "id": "3219972",
      "postDate": "06/08/2025 15:27:42",
      "content": "<p><a href=\"https://www.kaggle.com/defdet\" target=\"_blank\">@defdet</a> Exacly  what I thought… just doesn't add up.<br>\nLooks 50Hz'ish by the provided videos (about 1.5 second movements).<br>\nHope competition organizers will shed some light.</p>",
      "rawMarkdown": "defdet Exacly  what I thought... just doesn't add up.\nLooks 50Hz'ish by the provided videos (about 1.5 second movements).\nHope competition organizers will shed some light.",
      "votes": null
    },
    {
      "id": "3219979",
      "postDate": "06/08/2025 15:41:24",
      "content": "<p><a href=\"https://www.kaggle.com/roysegalz\" target=\"_blank\">@roysegalz</a> <a href=\"https://www.kaggle.com/defdet\" target=\"_blank\">@defdet</a> <br>\nUpdated my comment. <br>\n<a href=\"https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/discussion/583676#3219906\" target=\"_blank\">https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/discussion/583676#3219906</a></p>",
      "rawMarkdown": "roysegalz @defdet \nUpdated my comment. \nhttps://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/discussion/583676#3219906",
      "votes": null
    },
    {
      "id": "3220013",
      "postDate": "06/08/2025 16:31:19",
      "content": "<p>yeah, it would be nice to receive some concrete answer, instead of having to speculate</p>",
      "rawMarkdown": "yeah, it would be nice to receive some concrete answer, instead of having to speculate",
      "votes": null
    },
    {
      "id": "3220028",
      "postDate": "06/08/2025 17:06:21",
      "content": "<p>Well absolutely, I did not know how this IMU works ;) Sorry for bothering you.</p>",
      "rawMarkdown": "Well absolutely, I did not know how this IMU works ;) Sorry for bothering you.",
      "votes": null
    },
    {
      "id": "3220226",
      "postDate": "06/09/2025 03:18:25",
      "content": "<p>as per the visualizer script, shared here: <a href=\"https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/discussion/583118\" target=\"_blank\">https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/discussion/583118</a></p>\n<pre><code> ():\n    ...\n\n ():\n    ...\n    parser.add_argument(\n        , =, default=, =\n    )\n    ...\n</code></pre>\n<p>the data can be interpreted at a sampling rate of 10 Hz (10 rows per second)</p>",
      "rawMarkdown": "as per the visualizer script, shared here: https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/discussion/583118\n\n```python\n\ndef render_animation(sequence_data, output_file, framerate=10):\n    ...\n\ndef main():\n    ...\n    parser.add_argument(\n        \"--framerate\", type=int, default=10, help=\"Frame rate for output video\"\n    )\n    ...\n```\n\nthe data can be interpreted at a sampling rate of 10 Hz (10 rows per second)",
      "votes": null
    },
    {
      "id": "3227525",
      "postDate": "06/19/2025 04:26:58",
      "content": "<p>It looks reasonable, also it's completely in line with demo videos from competition page.</p>",
      "rawMarkdown": "It looks reasonable, also it's completely in line with demo videos from competition page.",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 3219906,
      "author_name": "maxstickel",
      "author_url": "",
      "post_date": "06/08/2025 13:38:48",
      "content": "<p><strong>TL;DR:</strong> Given the column names, we’re almost certainly looking at fused outputs. The BNO080/BNO085 doesn’t run every channel at a fixed 1 kHz. You request a report rate <em>R</em>, and it picks the nearest supported ODR within</p>\n<pre><code>.·R ≤ ConfiguredRate ≤ .·R\n</code></pre>\n<p>up to each feature’s ceiling (e.g. raw accel 500 Hz, raw gyro 400 Hz, gyro-rotation vector 1 000 Hz, etc.). You enable whichever raw or fused streams you need, and the sensor hub programs its MEMS ODRs and MotionEngine fusion core accordingly.</p>\n<hr>\n<h2>First Comment</h2>\n<p>Hi,<br>\nFrom <a href=\"https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/overview:\" target=\"_blank\">https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/overview:</a></p>\n<blockquote>\n  <p>1x Inertial Measurement Unit (IMU; BNO080/BNO085): An integrated sensor that combines accelerometer, gyroscope, and magnetometer measurements with onboard processing to provide orientation and motion data.</p>\n</blockquote>\n<p>The Helios IMU (BNO080/BNO085 SiP) seems to deliver a fixed 1 kHz sampling rate. In the product brief you’ll find:</p>\n<blockquote>\n  <p>“1 KHz Sample Rate – Enables flawless, smooth head-tracking with low latency…”</p>\n</blockquote>\n<p>No alternate rates are listed, so you might consider the sample rate to be fixed at 1 kHz.</p>\n<hr>\n<h2>Update 1</h2>\n<p>The competition linked pdf calls out the Helios IMU (BNO080/BNO085) as having a “1 kHz Sample Rate – Enables flawless, smooth head-tracking with low latency…” (from the product brief), which might suggest a fixed data rate.<br>\nHowever, the official BNO08X datasheet shows that <strong>all</strong> sensor and fusion outputs are <em>configurable</em> by the requested report rate R, and that the device picks the nearest supported Output Data Rate (ODR) such that</p>\n<pre><code>. · R ≤ ConfiguredRate ≤ . · R\n</code></pre>\n<p>Each feature has its own maximum ceiling:</p>\n<table>\n<thead>\n<tr>\n<th>Feature / Sensor</th>\n<th>Max. Report Rate</th>\n<th>Fused?</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Raw accelerometer</strong></td>\n<td>500 Hz</td>\n<td>No</td>\n</tr>\n<tr>\n<td><strong>Raw gyroscope</strong></td>\n<td>400 Hz</td>\n<td>No</td>\n</tr>\n<tr>\n<td><strong>Raw magnetometer</strong></td>\n<td>100 Hz</td>\n<td>No</td>\n</tr>\n<tr>\n<td><strong>Gyro-rotation vector</strong></td>\n<td>1 000 Hz</td>\n<td>Yes (gyro+accel+mag)</td>\n</tr>\n<tr>\n<td><strong>Rotation vector</strong></td>\n<td>400 Hz</td>\n<td>Yes (accel+gyro+mag)</td>\n</tr>\n<tr>\n<td><strong>Gaming rotation vector</strong></td>\n<td>400 Hz</td>\n<td>Yes (accel+gyro)</td>\n</tr>\n<tr>\n<td><strong>Geomagnetic rotation vector</strong></td>\n<td>90 Hz</td>\n<td>Yes (accel+mag)</td>\n</tr>\n<tr>\n<td><strong>Gravity</strong></td>\n<td>400 Hz</td>\n<td>Yes (accel+gyro)</td>\n</tr>\n<tr>\n<td><strong>Linear acceleration</strong></td>\n<td>400 Hz</td>\n<td>Yes (accel+gyro)</td>\n</tr>\n</tbody>\n</table>\n<p>So rather than a hard-wired 1 kHz on <em>all</em> channels, you request whatever rate you need (up to each feature’s maximum) and the BNO08X will program the underlying MEMS ODRs and/or MotionEngine fusion core accordingly.</p>\n<p>—</p>\n<p>*Source: BNO080/085 Datasheet: <a href=\"https://www.ceva-ip.com/wp-content/uploads/BNO080_085-Datasheet.pdf*\" target=\"_blank\">https://www.ceva-ip.com/wp-content/uploads/BNO080_085-Datasheet.pdf*</a></p>",
      "votes": null,
      "replies": [
        {
          "id": 3219930,
          "author_name": "defdet",
          "author_url": "",
          "post_date": "06/08/2025 14:26:55",
          "content": "<p>This would imply we have to classify the position based on observations that last ~0.1 second each</p>",
          "votes": null,
          "replies": [
            {
              "id": 3219972,
              "author_name": "roysegalz",
              "author_url": "",
              "post_date": "06/08/2025 15:27:42",
              "content": "<p><a href=\"https://www.kaggle.com/defdet\" target=\"_blank\">@defdet</a> Exacly  what I thought… just doesn't add up.<br>\nLooks 50Hz'ish by the provided videos (about 1.5 second movements).<br>\nHope competition organizers will shed some light.</p>",
              "votes": null,
              "replies": [
                {
                  "id": 3220013,
                  "author_name": "defdet",
                  "author_url": "",
                  "post_date": "06/08/2025 16:31:19",
                  "content": "<p>yeah, it would be nice to receive some concrete answer, instead of having to speculate</p>",
                  "votes": null,
                  "replies": [
                    {
                      "id": 3220028,
                      "author_name": "maxstickel",
                      "author_url": "",
                      "post_date": "06/08/2025 17:06:21",
                      "content": "<p>Well absolutely, I did not know how this IMU works ;) Sorry for bothering you.</p>",
                      "votes": null,
                      "replies": []
                    }
                  ]
                }
              ]
            },
            {
              "id": 3219979,
              "author_name": "maxstickel",
              "author_url": "",
              "post_date": "06/08/2025 15:41:24",
              "content": "<p><a href=\"https://www.kaggle.com/roysegalz\" target=\"_blank\">@roysegalz</a> <a href=\"https://www.kaggle.com/defdet\" target=\"_blank\">@defdet</a> <br>\nUpdated my comment. <br>\n<a href=\"https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/discussion/583676#3219906\" target=\"_blank\">https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/discussion/583676#3219906</a></p>",
              "votes": null,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3220226,
      "author_name": "jaejohn",
      "author_url": "",
      "post_date": "06/09/2025 03:18:25",
      "content": "<p>as per the visualizer script, shared here: <a href=\"https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/discussion/583118\" target=\"_blank\">https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/discussion/583118</a></p>\n<pre><code> ():\n    ...\n\n ():\n    ...\n    parser.add_argument(\n        , =, default=, =\n    )\n    ...\n</code></pre>\n<p>the data can be interpreted at a sampling rate of 10 Hz (10 rows per second)</p>",
      "votes": null,
      "replies": [
        {
          "id": 3227525,
          "author_name": "ogurtsov",
          "author_url": "",
          "post_date": "06/19/2025 04:26:58",
          "content": "<p>It looks reasonable, also it's completely in line with demo videos from competition page.</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "3219904": "Hi, \n\nWhat is the sample rate on the IMU device?",
    "3219906": "**TL;DR:** Given the column names, we’re almost certainly looking at fused outputs. The BNO080/BNO085 doesn’t run every channel at a fixed 1 kHz. You request a report rate *R*, and it picks the nearest supported ODR within\n\n```\n0.9·R ≤ ConfiguredRate ≤ 2.1·R\n```\n\nup to each feature’s ceiling (e.g. raw accel 500 Hz, raw gyro 400 Hz, gyro-rotation vector 1 000 Hz, etc.). You enable whichever raw or fused streams you need, and the sensor hub programs its MEMS ODRs and MotionEngine fusion core accordingly.\n\n---\n\n## First Comment\nHi,\nFrom https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/overview:\n>1x Inertial Measurement Unit (IMU; BNO080/BNO085): An integrated sensor that combines accelerometer, gyroscope, and magnetometer measurements with onboard processing to provide orientation and motion data.\n\nThe Helios IMU (BNO080/BNO085 SiP) seems to deliver a fixed 1 kHz sampling rate. In the product brief you’ll find:\n> “1 KHz Sample Rate – Enables flawless, smooth head-tracking with low latency…”\n\nNo alternate rates are listed, so you might consider the sample rate to be fixed at 1 kHz.\n\n---\n## Update 1\nThe competition linked pdf calls out the Helios IMU (BNO080/BNO085) as having a “1 kHz Sample Rate – Enables flawless, smooth head-tracking with low latency…” (from the product brief), which might suggest a fixed data rate.\nHowever, the official BNO08X datasheet shows that **all** sensor and fusion outputs are *configurable* by the requested report rate R, and that the device picks the nearest supported Output Data Rate (ODR) such that\n\n```\n0.9 · R ≤ ConfiguredRate ≤ 2.1 · R\n```\n\nEach feature has its own maximum ceiling:\n\n| Feature / Sensor                | Max. Report Rate |        Fused?        |\n| ------------------------------- | :--------------: | :------------------: |\n| **Raw accelerometer**           |      500 Hz      |          No          |\n| **Raw gyroscope**               |      400 Hz      |          No          |\n| **Raw magnetometer**            |      100 Hz      |          No          |\n| **Gyro-rotation vector**        |     1 000 Hz     | Yes (gyro+accel+mag) |\n| **Rotation vector**             |      400 Hz      | Yes (accel+gyro+mag) |\n| **Gaming rotation vector**      |      400 Hz      |   Yes (accel+gyro)   |\n| **Geomagnetic rotation vector** |       90 Hz      |    Yes (accel+mag)   |\n| **Gravity**                     |      400 Hz      |   Yes (accel+gyro)   |\n| **Linear acceleration**         |      400 Hz      |   Yes (accel+gyro)   |\n\nSo rather than a hard-wired 1 kHz on *all* channels, you request whatever rate you need (up to each feature’s maximum) and the BNO08X will program the underlying MEMS ODRs and/or MotionEngine fusion core accordingly.\n\n—\n\n*Source: BNO080/085 Datasheet: https://www.ceva-ip.com/wp-content/uploads/BNO080_085-Datasheet.pdf*",
    "3219930": "This would imply we have to classify the position based on observations that last ~0.1 second each",
    "3219972": "defdet Exacly  what I thought... just doesn't add up.\nLooks 50Hz'ish by the provided videos (about 1.5 second movements).\nHope competition organizers will shed some light.",
    "3219979": "roysegalz @defdet \nUpdated my comment. \nhttps://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/discussion/583676#3219906",
    "3220013": "yeah, it would be nice to receive some concrete answer, instead of having to speculate",
    "3220028": "Well absolutely, I did not know how this IMU works ;) Sorry for bothering you.",
    "3220226": "as per the visualizer script, shared here: https://www.kaggle.com/competitions/cmi-detect-behavior-with-sensor-data/discussion/583118\n\n```python\n\ndef render_animation(sequence_data, output_file, framerate=10):\n    ...\n\ndef main():\n    ...\n    parser.add_argument(\n        \"--framerate\", type=int, default=10, help=\"Frame rate for output video\"\n    )\n    ...\n```\n\nthe data can be interpreted at a sampling rate of 10 Hz (10 rows per second)",
    "3227525": "It looks reasonable, also it's completely in line with demo videos from competition page."
  },
  "source": "meta"
}