BMI088 IMU

This driver exposes the BMI088 IMU (Inertial Measurement Unit) data to GXF applications. The gyroscope and accelerometer data are published on separate channels because these sensors run on different clocks and can be running at slightly different rates even at the same nominal frequency. They can optionally be combined into a unified IMU message using the IMU Message Combiner (extensions/imu_utils/imu_message_combiner).

None

  • imu_frame: The optional PoseTreeID for IMU data. The default value is zero if this parameter is not specified.

  • accel_index: The device index for the accelerometer. The default value is 0.

  • gyro_index: The device index for the gyroscope. The default value is 1.

  • accel_frequency: The frequency (in Hz) to set the accelerometer to. The default value is 100.

  • gyro_frequency: The frequency (in Hz) to set the gyroscope to. The default value is 100.

  • sync_scheduling_term: The term for scheduling execution when new data is ready to publish.

  • tx_accelerometer (AccelerometerMessage): The transmitter for the accelerometer data

  • tx_gyroscope (GyroscopeMessage): The transmitter for the gyroscope data

Here is an example that does not use the IMU Message Combiner:

Copy
Copied!
            

--- name: atlas components: - name: pose_tree type: nvidia::isaac::PoseTree - type: nvidia::isaac::PoseTreeSetup parameters: pose_tree: pose_tree - name: imu_frame type: nvidia::isaac::PoseTreeFrame parameters: pose_tree: pose_tree --- name: bmi088_imu components: - type: nvidia::gxf::Subgraph parameters: location: extensions/bmi088_imu/graphs/bmi088.yaml prerequisites: imu_frame: atlas/imu_frame --- name: accel_visualizer components: - name: rx_accelerometer type: nvidia::gxf::DoubleBufferReceiver parameters: policy: 0 - name: tx_sight type: nvidia::isaac::SightTransmitter parameters: capacity: 6 - name: allocator type: nvidia::gxf::UnboundedAllocator - type: nvidia::isaac::AccelerometerVisualizer parameters: rx_accelerometer: rx_accelerometer tx_sight: tx_sight allocator: allocator - type: nvidia::gxf::MessageAvailableSchedulingTerm parameters: receiver: rx_accelerometer min_size: 1 --- name: gyro_visualizer components: - name: rx_gyroscope parameters: policy: 0 type: nvidia::gxf::DoubleBufferReceiver - name: tx_sight type: nvidia::isaac::SightTransmitter parameters: capacity: 6 - name: allocator type: nvidia::gxf::UnboundedAllocator - type: nvidia::isaac::GyroscopeVisualizer parameters: rx_gyroscope: rx_gyroscope tx_sight: tx_sight allocator: allocator - type: nvidia::gxf::MessageAvailableSchedulingTerm parameters: receiver: rx_gyroscope min_size: 1 --- name: sight components: - name: sight_router type: nvidia::isaac::SightRouter - type: nvidia::isaac::SightWebserver parameters: sight_router: sight_router port: 3000 webroot: packages/sight/webroot asset_root: ../isaac_assets asset_prefix: /apps/assets/ app_name: imu_bmi088 app_config: '{ "windows":{ "IMU":{ "renderer":"plot", "channels":[ {"name":"imu_bmi088/accel_visualizer/tx_sight/linear_acceleration_x"}, {"name":"imu_bmi088/accel_visualizer/tx_sight/linear_acceleration_y"}, {"name":"imu_bmi088/accel_visualizer/tx_sight/linear_acceleration_z"}, {"name":"imu_bmi088/gyro_visualizer/tx_sight/angular_velocity_x"}, {"name":"imu_bmi088/gyro_visualizer/tx_sight/angular_velocity_y"}, {"name":"imu_bmi088/gyro_visualizer/tx_sight/angular_velocity_z"} ] } } }' - type: nvidia::gxf::PeriodicSchedulingTerm parameters: recess_period: 200Hz --- components: - type: nvidia::gxf::Connection parameters: source: bmi088_imu/tx_accelerometer target: accel_visualizer/rx_accelerometer - type: nvidia::gxf::Connection parameters: source: bmi088_imu/tx_gyroscope target: gyro_visualizer/rx_gyroscope --- components: - name: clock type: nvidia::gxf::RealtimeClock parameters: use_time_since_epoch: true - type: nvidia::gxf::MultiThreadScheduler parameters: clock: clock worker_thread_number: 4 check_recession_period_ms: 1 - type: nvidia::gxf::JobStatistics parameters: clock: clock

Here is a basic example that uses the IMU Message Combiner:

Copy
Copied!
            

--- name: atlas components: - name: pose_tree type: nvidia::isaac::PoseTree - type: nvidia::isaac::PoseTreeSetup parameters: pose_tree: pose_tree - name: imu_frame type: nvidia::isaac::PoseTreeFrame parameters: pose_tree: pose_tree --- name: bmi088_imu_combined components: - type: nvidia::gxf::Subgraph parameters: location: extensions/bmi088_imu/graphs/bmi088_combined.yaml prerequisites: imu_frame: atlas/imu_frame --- name: imu_visualizer components: - name: rx_imu type: nvidia::gxf::DoubleBufferReceiver parameters: capacity: 1024 - name: tx_sight type: nvidia::isaac::SightTransmitter parameters: capacity: 6 - name: allocator type: nvidia::gxf::UnboundedAllocator - type: nvidia::isaac::ImuVisualizer parameters: rx_imu: rx_imu tx_sight: tx_sight allocator: allocator - type: nvidia::gxf::MessageAvailableSchedulingTerm parameters: receiver: rx_imu min_size: 1 --- name: sight components: - name: sight_router type: nvidia::isaac::SightRouter - type: nvidia::isaac::SightWebserver parameters: sight_router: sight_router port: 3000 webroot: packages/sight/webroot asset_root: ../isaac_assets asset_prefix: /apps/assets/ app_name: imu_bmi088 app_config: '{ "windows":{ "IMU":{ "renderer":"plot", "channels":[ {"name":"imu_bmi088/imu_visualizer/tx_sight/linear_acceleration_x"}, {"name":"imu_bmi088/imu_visualizer/tx_sight/linear_acceleration_y"}, {"name":"imu_bmi088/imu_visualizer/tx_sight/linear_acceleration_z"}, {"name":"imu_bmi088/imu_visualizer/tx_sight/angular_velocity_x"}, {"name":"imu_bmi088/imu_visualizer/tx_sight/angular_velocity_y"}, {"name":"imu_bmi088/imu_visualizer/tx_sight/angular_velocity_z"} ] } } }' - type: nvidia::gxf::PeriodicSchedulingTerm parameters: recess_period: 200Hz --- components: - type: nvidia::gxf::Connection parameters: source: bmi088_imu_combined/tx_imu target: imu_visualizer/rx_imu --- components: - name: clock type: nvidia::gxf::RealtimeClock parameters: use_time_since_epoch: true - type: nvidia::gxf::MultiThreadScheduler parameters: clock: clock worker_thread_number: 4 check_recession_period_ms: 1 - type: nvidia::gxf::JobStatistics parameters: clock: clock

© Copyright 2018-2023, NVIDIA Corporation. Last updated on Oct 23, 2023.