🤖 roboto_origin_03 Wiki
首页 / IMU 子模块 / 环境依赖与安装

本页面向初次使用 roboto_imu 的开发者,系统讲解从零开始准备编译环境、安装系统依赖、完成源码编译或 Debian 包部署的全过程。阅读完本页后,你将拥有一套可正常编译和运行 IMU 驱动程序的环境。如果你已经熟悉系统配置,可直接跳至 快速开始 查看编译命令与第一个示例程序;若仅需了解接口接线,请前往 CAN 接口配置指南串口接口配置指南

Sources: README_CN.md, CMakeLists.txt

系统要求

roboto_imu 采用现代 C++ 设计,对编译器和构建工具有明确的最低版本要求。在开始前,请确认你的系统满足以下条件。

项目 最低要求 说明
操作系统 Ubuntu 20.04+ / Debian 11+ 推荐 Ubuntu 22.04 LTS,CI 工作流已验证
处理器架构 x86_64 / arm64 arm64 为嵌入式部署常用架构
CMake 3.12+ 构建系统入口,通过 cmake_minimum_required 强制校验
C++ 标准 C++17 通过 CMAKE_CXX_STANDARD 17 设定
编译器 GCC 9+ / Clang 10+ 需完整支持 C++17 特性
Python 3.8+(含 Development 头文件) 用于编译 Python 绑定模块

项目默认启用 ccache 作为编译器启动器以加速重复构建,并开启 -O3-march=native 优化。如果你使用交叉编译,-march=native 会自动关闭。

Sources: CMakeLists.txt, .github/workflows/build-deb.yml

依赖总览

本项目的依赖可分为编译时依赖运行时依赖两类。编译时依赖必须在执行 cmake 之前安装到位;运行时依赖则在程序执行或 Debian 包安装时按需解析。

graph TD
    subgraph 编译时依赖
        A[CMake 3.12+] --> B[spdlog]
        A --> C[fmt]
        A --> D[pybind11]
        A --> E[Python3-dev]
        A --> F[pthread]
        A --> G[ament_cmake<br/>可选]
    end

    subgraph 运行时依赖
        H[roboto-base >= 1.0.0]
        I[can-utils]
        J[udev 服务]
    end

    B --> K[libimu.a]
    C --> K
    D --> L[imu_py.so]
    E --> L
    F --> M[libimu_protocol.a]
    H --> N[.deb 包安装]
    I --> O[init_imu.sh 配置脚本]

从依赖关系可以看出,spdlogfmtpybind11Python3 是贯穿 C++ 核心库与 Python SDK 的关键支柱;ament_cmake 仅在 ROS 2 工作空间内被需要,且 CMake 通过 find_package(ament_cmake QUIET) 静默探测,不会阻塞非 ROS 环境的构建。Debian 包额外声明了 roboto-base 运行时依赖,确保系统底层库环境一致。

Sources: CMakeLists.txt, package.xml, debian/control

安装构建依赖

在 Ubuntu 或 Debian 系统上,你可以通过 apt 一次性安装所有必需的编译依赖。以下命令摘取自 CI 工作流,已在 ubuntu-22.04-arm 环境中验证通过。

sudo apt-get update
sudo apt-get install -y --no-install-recommends \
    build-essential cmake ccache dpkg-dev \
    libspdlog-dev libfmt-dev \
    python3-dev pybind11-dev

如果你计划在 ROS 2 工作空间内编译,还需要额外安装 ament_cmakecolcon。以 ROS 2 Humble 为例:

sudo apt-get install -y ros-humble-ament-cmake ros-humble-pybind11-vendor
# 或安装完整 colcon 构建工具
sudo apt-get install -y python3-colcon-common-extensions

对于需要使用 IMU 配置脚本(init_imu.sh)的开发者,建议同时安装 can-utils,它提供了 cansend 等命令行工具,用于通过 CAN 总线修改设备波特率和输出数据类型。若你仅使用串口通信,则可跳过此步骤。

Sources: .github/workflows/build-deb.yml, package.xml, init_imu.sh

编译与安装

roboto_imu 提供三种安装路径,分别对应开发、集成与部署三种场景。你可以根据自身环境选择最合适的一条。

安装方式 适用场景 安装路径 ROS 2 依赖
ROS 2 colcon 构建 在 ROS 2 工作空间内开发 install/roboto_imu/ 必需
纯 CMake 手动构建 独立 C++/Python 项目集成 自定义前缀 不需要
Debian 包安装 生产环境部署与版本管理 /opt/roboparty 可选(WITH_ROS=1

方式一:ROS 2 colcon 构建

将本仓库克隆至你的 ROS 2 工作空间 src 目录下,执行标准 colcon 构建流程。构建完成后,ament_cmake 会自动导出头文件目录与库目标,其他 ROS 2 包可通过 find_package(roboto_imu) 直接引用。

cd ~/ros2_ws/src
# 克隆或放置 roboto_imu 目录
cd ~/ros2_ws
colcon build --packages-select roboto_imu
source install/setup.bash

此方式下,ament_cmake 会执行 ament_export_librariesament_export_include_directories,确保依赖本包的其他 ROS 2 组件能够正确链接。

Sources: CMakeLists.txt, package.xml

方式二:纯 CMake 手动构建

如果你不使用 ROS 2,或者希望将本库集成至独立的 CMake 项目,可直接调用 CMake。以下命令以 Release 模式编译静态库与 Python 模块。

cd roboto_imu
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)

默认情况下,库文件(libimu.alibhipnuc_imu.alibimu_protocol.a)与头文件将安装至 CMake 默认前缀(通常是 /usr/local)。你可以通过 CMAKE_INSTALL_PREFIX 指定自定义路径:

cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/roboparty
make -j$(nproc)
sudo make install

安装完成后,非 ROS 2 的 CMake 项目可通过 find_package(roboto_imu CONFIG) 定位本库。配置模块 roboto_imuConfig.cmake 会自动查找 fmtspdlog,并导出 roboto_imu::roboto_imu 接口目标。

Sources: CMakeLists.txt, cmake/roboto_imuConfig.cmake

方式三:打包为 Debian 安装包

对于生产环境部署,推荐使用仓库根目录下的 build_deb.sh 脚本生成 .deb 包。该脚本会自动处理版本号、架构探测、安装路径填充与维护者脚本打包。

cd roboto_imu
./build_deb.sh
sudo dpkg -i roboto-imu_1.1.3_*.deb

脚本默认采用独立部署模式(WITH_ROS=0),安装前缀固定为 /opt/roboparty,包含 C++ 头文件、静态库、Python 模块以及 init_imu.sh 工具脚本。如果你需要生成带有 ROS 2 ament 元数据的包,可显式启用 ROS 2 模式:

WITH_ROS=1 ./build_deb.sh

此时脚本会自动扫描 /opt/ros 下已安装的发行版(按 jazzy → iron → humble → rolling 优先级),并 source 对应环境后再执行编译。

Sources: build_deb.sh, debian/control

安装后配置

无论采用哪种安装方式,完成安装后还需执行几项系统级配置,确保 Python 模块可被正确导入、串口设备拥有访问权限、以及 Debian 包变更即时生效。

动态链接器缓存更新

Debian 包的维护者脚本会在安装和卸载时自动调用 ldconfig,刷新系统的共享库缓存。如果你通过 make install 手动安装至非标准路径(如 /opt/roboparty/lib),建议手动执行一次:

sudo ldconfig /opt/roboparty/lib

Sources: debian/postinst, debian/postrm

udev 规则重载

若安装包内包含 udev 规则文件(用于串口设备权限或别名映射),维护者脚本会在安装后自动重载规则并触发设备事件,无需手动干预。

# 等效于 debian/postinst 内部自动执行的逻辑
sudo udevadm control --reload-rules
sudo udevadm trigger

Sources: build_deb.sh, debian/postinst

串口设备权限

当使用串口连接 IMU 时,普通用户通常需要具备访问 /dev/ttyUSB*/dev/ttyACM* 的权限。最稳健的做法是将当前用户加入 dialout 组,然后重新登录或重启会话使权限生效:

sudo usermod -aG dialout $USER
# 注销并重新登录,或执行:
newgrp dialout

加入 dialout 组后,你便无需每次使用 sudo 即可打开串口设备。

Sources: README_CN.md

Python 模块路径

通过 Debian 包安装时,Python 绑定模块(imu_py.so)会被放置于 /opt/roboparty/lib/python3.x/site-packages/ 目录下。为了让 Python 解释器能够找到该模块,你需要确保上述路径出现在 sys.path 中。常见做法包括:

如果你通过 colcon build 编译,Python 模块通常已经位于工作空间的 install 目录下,source 对应的 setup.bash 即可自动配置路径。

Sources: CMakeLists.txt, build_deb.sh

验证安装

完成上述步骤后,可通过以下方式快速验证环境是否就绪。

验证 C++ 头文件与库:

# 检查头文件是否存在
ls /opt/roboparty/include/imu_driver.hpp
# 检查静态库是否生成
ls /opt/roboparty/lib/libimu.a

验证 Python 模块:

python3 -c "import imu_py; print('Python SDK 导入成功')"

若导入失败并提示 ModuleNotFoundError,请检查 PYTHONPATH 是否包含正确的 site-packages 目录。

验证 CAN 工具链(CAN 用户):

which cansend
# 应输出 /usr/bin/cansend

Sources: CMakeLists.txt, init_imu.sh

常见问题速查

现象 可能原因 解决方案
cmake 报错找不到 pybind11 pybind11-dev 未安装 sudo apt-get install pybind11-dev
cmake 报错找不到 ament_cmake 未安装 ROS 2 且未忽略可选依赖 无需处理,ament_cmakeQUIET 查找,非阻塞
编译时 fmt 符号未定义 libfmt-dev 版本过低 升级至 Ubuntu 22.04 自带的 libfmt-dev
dpkg -i 提示依赖不满足 缺少 roboto-base 先安装 roboto-base 包或添加公司私有 apt 源
串口打开失败 Permission denied 用户不在 dialout sudo usermod -aG dialout $USER 后重新登录
Python 无法导入 imu_py PYTHONPATH 未包含安装路径 手动导出 PYTHONPATH 或创建 .pth 文件

Sources: CMakeLists.txt, debian/control

下一步

环境就绪后,你可以按照以下顺序继续探索 roboto_imu

  1. 快速开始 — 在 10 分钟内完成首次编译并读取传感器数据,包含 Python 与 C++ 的最小可运行示例。
  2. Python SDK 快速上手 — 深入了解 Python 模块的导入细节、虚拟环境配置与更丰富的数据读取示例。
  3. C++ SDK 快速上手 — 学习如何在独立 CMake 项目中通过 find_package 引入本库,并正确链接静态库目标。
  4. CAN 接口配置指南串口接口配置指南 — 根据你的硬件连接方式,完成主机侧接口初始化与排错。