> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 使用 qrb_ros_imu 发布 IMU 数据

> qrb_ros_imu 示例应用发布从 Qualcomm 机器人平台上 ICM-42688 硬件采集的惯性测量单元 (IMU) 数据。

[qrb\_ros\_imu](https://github.com/qualcomm-qrb-ros/qrb_ros_imu) 示例应用发布从 Qualcomm 机器人平台上 ICM-42688 硬件采集的惯性测量单元 (IMU) 数据。它提供以下功能：

* 支持可组合 ROS 节点。

* 由 [QRB ROS Transport](https://github.com/qualcomm-qrb-ros/qrb_ros_transport) 提供支持的零拷贝传输。

## `qrb_ros_imu` 的管道流程

下图展示了 `qrb_ros_imu` 的管道流程。

<Frame caption="qrb_ros_imu 管道。">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/qualcomm-prod/zh/SDKs/QIR-SDK-Ubuntu/images/image15.svg" alt="Inertial measurement unit hardware feeding the QRB-ROS-IMU node, which gets the data from SLPI and publishes it to a ROS topic." />
</Frame>

[qrb\_ros\_imu](https://github.com/qualcomm-qrb-ros/qrb_ros_imu/tree/main/qrb_ros_imu) 是一个 ROS 2 包。它使用 `qrb_ros_transport` 创建了一个用于零拷贝传输的发布者。它支持节点组合，能够使用 ROS 进程内通信提升性能。

## `qrb_ros_imu` API

`qrb_ros_imu` 包公开了 ROS 接口、ROS 参数以及 `qrb_sensor_client` 库 API。使用它们订阅所发布的惯性测量单元 (IMU) 数据，并配置节点如何读取传感器。

### ROS 接口

下表描述了 `qrb_ros_imu` 提供的 ROS 接口。

| 接口          | 名称     | 类型                    | 说明                 |
| ----------- | ------ | --------------------- | ------------------ |
| `Publisher` | `/imu` | `sensor_msgs/msg/Imu` | 输出惯性测量单元 (IMU) 数据。 |

### ROS 参数

下表描述了 `qrb_ros_imu` 的 ROS 参数。

| 名称      | 类型     | 说明                           | 默认值     |
| ------- | ------ | ---------------------------- | ------- |
| `debug` | `bool` | 用于测量从 IMU 数据生成到 ROS 节点输出的延迟。 | `false` |

### `qrb_sensor_client` API

下表描述了 `qrb_sensor_client` API。

| 函数                                                                                                     | 参数                                                                                   | 说明                                                                                                 |
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
| `bool create_connection()`                                                                             | 空                                                                                    | 与传感器服务建立连接，返回 `true` 表示创建成功。                                                                       |
| `void disconnect_server()`                                                                             | 空                                                                                    | 断开与传感器服务的连接。                                                                                       |
| `bool get_imu_data(sensors_event_t ** accel_ptr, sensors_event_t ** gyro_ptr, int32_t * sample_count)` | • `accel_ptr`：指向加速度计数据的指针<br />• `gyro_ptr`：指向陀螺仪数据的指针<br />• `sample_count`：可用样本的数量 | 检索 IMU 数据。成功时返回 `true`。如果为 `true`，`accel_ptr` 和 `gyro_ptr` 指向最新的 IMU 数据，`sample_count` 指定检索到的样本数量。 |

## 前提条件

你已根据[安装 QIR SDK](./install-the-qir-sdk)完成设备设置，并在设备上安装了 ROS2 Jazzy 和 Qualcomm Intelligent Robotics (QIR) SDK。

## 开箱即用运行 `qrb_ros_imu`

<Steps>
  <Step title="安装 qrb_ros_transport 包">
    ```bash Install the packages theme={null}
    sudo apt install ros-jazzy-qrb-ros-imu
    sudo apt install qcom-sensor\*
    reboot
    ```
  </Step>

  <Step title="使用 IMU 节点">
    ```bash Run the IMU node theme={null}
    source /opt/ros/jazzy/setup.bash
    ros2 run qrb_ros_imu imu_node
    ```
  </Step>

  <Step title="检查话题名为 /imu 的 ROS 话题">
    ```bash theme={null}
    source /opt/ros/jazzy/setup.bash
    ros2 topic echo /imu
    ```
  </Step>
</Steps>

## 构建并运行 `qrb_ros_imu`

<Steps>
  <Step title="安装依赖">
    ```bash Install the dependencies theme={null}
    sudo apt install ros-jazzy-qrb-ros-transport-imu-type \
    ros-dev-tools
    ```
  </Step>

  <Step title="将仓库克隆到设备上">
    ```bash Download the source code theme={null}
    mkdir -p ~/qrb_ros_ws/src
    cd ~/qrb_ros_ws/src
    git clone https://github.com/qualcomm-qrb-ros/qrb_ros_imu.git
    ```
  </Step>

  <Step title="构建并运行 qrb_ros_imu">
    ```bash Build and run theme={null}
    cd ~/qrb_ros_ws
    colcon build
    source install/setup.bash
    ros2 run qrb_ros_imu imu_node
    ```
  </Step>
</Steps>
