From 4fa9aa205f542affb2dff6862d6d047326dd10c6 Mon Sep 17 00:00:00 2001 From: JoelJ18 <101486509+JoelJ18@users.noreply.github.com> Date: Wed, 15 Oct 2025 04:04:51 -0400 Subject: [PATCH] [Docs] MicroStrain driver documentation (#25376) * Initial Draft * prettier + parent INS doc addition * Typo fixes and param description improvements * LinkedFileMissingAnchor Fix * External mag and optical flow doc update * Reverting module.yaml * Apply suggestion from @hamishwillee --------- Co-authored-by: Hamish Willee --- .../inertial/microstrain_3dm_cv7_hbk.png | Bin 0 -> 41713 bytes docs/en/SUMMARY.md | 1 + docs/en/sensor/inertial_navigation_systems.md | 1 + docs/en/sensor/microstrain.md | 212 ++++++++++++++++++ 4 files changed, 214 insertions(+) create mode 100644 docs/assets/hardware/sensors/inertial/microstrain_3dm_cv7_hbk.png create mode 100644 docs/en/sensor/microstrain.md diff --git a/docs/assets/hardware/sensors/inertial/microstrain_3dm_cv7_hbk.png b/docs/assets/hardware/sensors/inertial/microstrain_3dm_cv7_hbk.png new file mode 100644 index 0000000000000000000000000000000000000000..5670c47c82b3dd73075d1b9186552c6ec0c24434 GIT binary patch literal 41713 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 literal 0 HcmV?d00001 diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md index c34718f6d3..af73a928d1 100644 --- a/docs/en/SUMMARY.md +++ b/docs/en/SUMMARY.md @@ -284,6 +284,7 @@ - [CubePilot Here+ (Discontined)](gps_compass/rtk_gps_hex_hereplus.md) - [INS (Inertial Navigation/GNSS)](sensor/inertial_navigation_systems.md) - [InertialLabs](sensor/inertiallabs.md) + - [MicroStrain](sensor/microstrain.md) - [sbgECom](sensor/sbgecom.md) - [VectorNav](sensor/vectornav.md) - [Optical Flow](sensor/optical_flow.md) diff --git a/docs/en/sensor/inertial_navigation_systems.md b/docs/en/sensor/inertial_navigation_systems.md index 090fd5bca6..bdf7f39b6d 100644 --- a/docs/en/sensor/inertial_navigation_systems.md +++ b/docs/en/sensor/inertial_navigation_systems.md @@ -9,6 +9,7 @@ However PX4 can also use some INS devices as either sources of raw data, or as a INS systems that can be used as a replacement for EKF2 in PX4: - [InertialLabs](../sensor/inertiallabs.md) +- [MicroStrain](../sensor/microstrain.md): Includes VRU, AHRS, INS, and GNSS/INS devices. - [SBG Systems](../sensor/sbgecom.md): IMU/AHRS, GNSS/INS, Dual GNSS/INS systems that can be used as an external INS or as a source of raw sensor data. - [VectorNav](../sensor/vectornav.md): IMU/AHRS, GNSS/INS, Dual GNSS/INS systems that can be used as an external INS or as a source of raw sensor data. diff --git a/docs/en/sensor/microstrain.md b/docs/en/sensor/microstrain.md new file mode 100644 index 0000000000..c4aad808eb --- /dev/null +++ b/docs/en/sensor/microstrain.md @@ -0,0 +1,212 @@ +# MicroStrain (INS, IMU, VRU, AHRS) + +MicroStrain by HBK provides high-performance inertial sensors engineered for reliability and precision in challenging environments. +Widely used across industries like aerospace, robotics, industrial automation, and research, MicroStrain sensors are optimized for real-time, accurate motion tracking and orientation data. + +![CV7](../../assets/hardware/sensors/inertial/microstrain_3dm_cv7_hbk.png) + +The driver currently supports the following hardware: + +- [`MicroStrain CV7-AR`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/vertical-reference-units--vru-/3dm-cv7-ar): Inertial Measurement Unit (IMU) and Vertical Reference Unit (VRU) +- [`MicroStrain CV7-AHRS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/attitude-and-heading-reference-systems--ahrs-/3dm-cv7-ahrs): Inertial Measurement Unit (IMU) and Attitude Heading Reference System (AHRS) +- [`MicroStrain CV7-INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS). +- [`MicroStrain CV7-GNSS/INS`](https://www.hbkworld.com/en/products/transducers/inertial-sensors/inertial-navigation-systems--ins-/3dm-cv7-gnss-ins): Inertial Measurement Unit (IMU) and Inertial Navigation System (INS) combined with dual multiband (GNSS) receivers. + +PX4 can use these sensors to provide raw IMU data for EKF2 or to replace EKF2 as an external INS. +For more information, including user manuals and datasheets, please refer to the sensors product page. + +## Where to Buy + +MicroStrain sensors can be purchased through HBK's official [MicroStrain product page](https://www.hbkworld.com/en/products/transducers/inertial-sensors) or through authorized distributors globally. +For large orders, custom requirements, or technical inquiries, reach out directly to [sales](https://www.hbkworld.com/en/contact-us/contact-sales-microstrain) + +## Hardware Setup + +### Wiring + +Connect the main UART port of the MicroStrain sensor to any unused serial port on the flight controller. +This port needs to be specified while starting the device. + +### Mounting + +The MicroStrain sensor can be mounted in any orientation. +The default coordinate system uses X for the front, Y for the right, and Z for down, with directions marked on the device. + +## Firmware Configuration + +### PX4 Configuration + +To use the MicroStrain driver: + +1. Include the module in firmware in the [kconfig board configuration](../hardware/porting_guide_config.md#px4-board-configuration-kconfig) by setting the kconfig variables: `CONFIG_DRIVERS_INS_MICROSTRAIN` or `CONFIG_COMMON_INS`. +2. Configure the driver mode by setting [MS_MODE](../advanced_config/parameter_reference.md#MS_MODE) + + - To use the MicroStrain sensor to provide raw IMU data to EKF2 + + 1. Set [MS_MODE](../advanced_config/parameter_reference.md#MS_MODE) to 0 + 2. Update the [EKF2_MULTI_IMU](../advanced_config/parameter_reference.md#EKF2_MULTI_IMU) parameter to account for the added MicroStrain sensor. + 3. Enable EKF2 by setting [EKF2_EN](../advanced_config/parameter_reference.md#EKF2_EN) to 1 + 4. To prioritize MicroStrain sensor output, adjust the priority level of individual sensors from 0-100 using the following parameters: + + - [CAL_ACCn_PRIO](../advanced_config/parameter_reference.md#CAL_ACC0_PRIO) + - [CAL_GYROn_PRIO](../advanced_config/parameter_reference.md#CAL_GYRO0_PRIO) + - [CAL_MAGn_PRIO](../advanced_config/parameter_reference.md#CAL_MAG0_PRIO) + - [CAL_BAROn_PRIO](../advanced_config/parameter_reference.md#CAL_BARO0_PRIO) + + where `n` corresponds to the index of the corresponding sensor. + + ::: tip + Sensors can be identified by their device id, which can be found by checking the parameters: + + - [CAL_ACCn_ID](../advanced_config/parameter_reference.md#CAL_ACC0_ID) + - [CAL_GYROn_ID](../advanced_config/parameter_reference.md#CAL_GYRO0_ID) + - [CAL_MAGn_ID](../advanced_config/parameter_reference.md#CAL_MAG0_ID) + - [CAL_BAROn_ID](../advanced_config/parameter_reference.md#CAL_BARO0_ID) + + ::: + + - To use the MicroStrain sensor as an external INS + 1. Set [MS_MODE](../advanced_config/parameter_reference.md#MS_MODE) to 1 + 2. Disable EKF2 by setting [EKF2_EN](../advanced_config/parameter_reference.md#EKF2_EN) to 0 + +3. Reboot and start the driver + - `microstrain start -d ` + - To start the driver automatically when the flight controller powers on, set [SENS_MS_CFG](../advanced_config/parameter_reference.md#SENS_MS_CFG) to the sensor’s connected port. + +## MicroStrain Configuration + +1. Rates: + + - By default, accel and gyro data are published at 500 Hz, magnetometer at 50 Hz, and barometric pressure at 50 Hz. + This can be changed by adjusting the following parameters: + + - [MS_IMU_RATE_HZ](../advanced_config/parameter_reference.md#MS_IMU_RATE_HZ) + - [MS_MAG_RATE_HZ](../advanced_config/parameter_reference.md#MS_MAG_RATE_HZ) + - [MS_BARO_RATE_HZ](../advanced_config/parameter_reference.md#MS_BARO_RATE_HZ) + + - Global position, local position, attitude and odometry will be published at 250 Hz by default. + This can be configured via: + + - [MS_FILT_RATE_HZ](../advanced_config/parameter_reference.md#MS_FILT_RATE_HZ) + + - For the CV7-GNSS/INS, the GNSS receiver 1 and 2 will publish data at 5Hz by default. + This can be changed using: + + - [MS_GNSS_RATE_HZ](../advanced_config/parameter_reference.md#MS_GNSS_RATE_HZ) + + - The driver will automatically configure data outputs based on the specific sensor model and available data streams. + - The driver is scheduled to run at twice the fastest configured data rate. + +2. Aiding measurements: + + - If supported, GNSS position and velocity aiding are always enabled. + - Internal/external magnetometer and heading aiding, as well as optical flow aiding, are disabled by default. They can be enabled using the following parameters: + + - [MS_INT_MAG_EN](../advanced_config/parameter_reference.md#MS_INT_MAG_EN) + - [MS_INT_HEAD_EN](../advanced_config/parameter_reference.md#MS_INT_HEAD_EN) + - [MS_EXT_HEAD_EN](../advanced_config/parameter_reference.md#MS_EXT_HEAD_EN) + - [MS_EXT_MAG_EN](../advanced_config/parameter_reference.md#MS_EXT_MAG_EN) + - [MS_OPT_FLOW_EN](../advanced_config/parameter_reference.md#MS_OPT_FLOW_EN) + + - The aiding frames for external sources can be configured using the following parameters: + + - [MS_EHEAD_YAW](../advanced_config/parameter_reference.md#MS_EHEAD_YAW) + - [MS_EMAG_ROLL](../advanced_config/parameter_reference.md#MS_EMAG_ROLL) + - [MS_EMAG_PTCH](../advanced_config/parameter_reference.md#MS_EMAG_PTCH) + - [MS_EMAG_YAW](../advanced_config/parameter_reference.md#MS_EMAG_YAW) + - [MS_OFLW_OFF_X](../advanced_config/parameter_reference.md#MS_OFLW_OFF_X) + - [MS_OFLW_OFF_Y](../advanced_config/parameter_reference.md#MS_OFLW_OFF_Y) + - [MS_OFLW_OFF_Z](../advanced_config/parameter_reference.md#MS_OFLW_OFF_Z) + - [SENS_FLOW_ROT](../advanced_config/parameter_reference.md#SENS_FLOW_ROT) + + - The uncertainty for optical flow and external magnetometer aiding must be specified using the following parameters: + + - [MS_EMAG_UNCERT](../advanced_config/parameter_reference.md#MS_EMAG_UNCERT) + - [MS_OFLW_UNCERT](../advanced_config/parameter_reference.md#MS_OFLW_UNCERT) + + ::: tip + 1. When optical flow aiding is enabled, the sensor uses the `vehicle_optical_flow_vel` output from the flight controller as a body-frame velocity aiding measurement. + 2. If the MicroStrain sensor does not support these aiding sources but they are enabled, sensor initialization will fail. + + ::: + +3. Initial heading alignment: + + - Initial heading alignment is set to kinematic by default. This can be changed by adjusting + + - [MS_ALIGNMENT](../advanced_config/parameter_reference.md#MS_ALIGNMENT) + +4. GNSS Aiding Source Control (GNSS/INS only) + + - The Source of the GNSS aiding data can be configured using: + + - [MS_GNSS_AID_SRC](../advanced_config/parameter_reference.md#MS_GNSS_AID_SRC) + +5. Sensor to vehicle transform: + + - If the sensor is mounted in an orientation different from the vehicle frame. A sensor to vehicle transform can be enabled using + + - [MS_SVT_EN](../advanced_config/parameter_reference.md#MS_SVT_EN) + + - The transform is defined using the following parameters + + - [MS_SENSOR_ROLL](../advanced_config/parameter_reference.md#MS_SENSOR_ROLL) + - [MS_SENSOR_PTCH](../advanced_config/parameter_reference.md#MS_SENSOR_PTCH) + - [MS_SENSOR_YAW](../advanced_config/parameter_reference.md#MS_SENSOR_YAW) + +6. IMU ranges: + + - The accelerometer and gyroscope ranges on the device are configurable using: + + - [MS_ACCEL_RANGE](../advanced_config/parameter_reference.md#MS_ACCEL_RANGE) + - [MS_GYRO_RANGE](../advanced_config/parameter_reference.md#MS_GYRO_RANGE) + + ::: tip + Available range settings depend on the specific [sensor](https://www.hbkworld.com/en/products/transducers/inertial-sensors) and can be found in the corresponding user manual. + By default, the ranges are not changed. + + ::: + +7. GNSS Lever arm offsets: + + - The lever arm offset for the external GNSS receiver can be configured using: + + - [MS_GNSS_OFF1_X](../advanced_config/parameter_reference.md#MS_GNSS_OFF1_X) + - [MS_GNSS_OFF1_Y](../advanced_config/parameter_reference.md#MS_GNSS_OFF1_Y) + - [MS_GNSS_OFF1_Z](../advanced_config/parameter_reference.md#MS_GNSS_OFF1_Z) + + - For dual-antenna configurations, the second GNSS receiver’s offset is configured using: + + - [MS_GNSS_OFF2_X](../advanced_config/parameter_reference.md#MS_GNSS_OFF2_X) + - [MS_GNSS_OFF2_Y](../advanced_config/parameter_reference.md#MS_GNSS_OFF2_Y) + - [MS_GNSS_OFF2_Z](../advanced_config/parameter_reference.md#MS_GNSS_OFF2_Z) + +## Published Data + +The MicroStrain driver continuously publishes sensor data to the following uORB topics: + +- [sensor_accel](../msg_docs/SensorAccel.md) +- [sensor_gyro](../msg_docs/SensorGyro.md) +- [sensor_mag](../msg_docs/SensorMag.md) +- [sensor_baro](../msg_docs/SensorBaro.md) + +For GNSS/INS devices, GPS data is also published to: + +- [sensor_gps](../msg_docs/SensorGps.md) + +If used as an external INS replacing EKF2, it publishes: + +- [vehicle_global_position](../msg_docs/VehicleGlobalPosition.md) +- [vehicle_local_position](../msg_docs/VehicleLocalPosition.md) +- [vehicle_attitude](../msg_docs/VehicleAttitude.md) +- [vehicle_odometry](../msg_docs/VehicleOdometry.md) + +otherwise the same data is published to the following topics + +- `external_ins_global_position` +- `external_ins_attitude` +- `external_ins_local_position` + +::: tip +Published topics can be viewed using the `listener` command. +:::