问题分析
根据你的补充信息(板载官方 BMI088 模块 + I2C 跳线),结合社区历史案例,核心问题是:
- 中断引脚配置缺失:
failed to get irq of imu number表明驱动无法获取中断号,BMI088 在 I2C 模式下需要中断引脚触发数据就绪 - 系统版本与驱动不匹配:社区反馈 3.5.0+ 系统需使用免驱版本,旧驱动可能不兼容
- I2C 设备识别问题:需确认 I2C 总线是否正确扫描到 BMI088 的两个地址(0x19 加速度计 + 0x69 陀螺仪)
解决步骤
确认系统版本
# 查看系统版本
cat /etc/hobot_version
- 3.5.0+:使用免驱版本(推荐)
- 3.4.1 及以下:需编译驱动或升级系统
验证 I2C 设备识别
# 扫描 I2C 总线 5(根据你的日志是 bus 5)
i2cdetect -y 5
# 应看到 0x19 (ACC) 和 0x69 (GYR) 两个设备
# 如果看不到,检查跳线帽和接线
使用免驱版本(推荐)
根据社区最新反馈,免驱版本已支持 I2C/SPI 自动切换:
# 1. 克隆仓库并切换到免驱分支
cd ~
git clone https://github.com/D-Robotics/rdk_imu.git
cd rdk_imu
git branch -a # 查看可用分支,找 driverless 或类似名称
# 2. 如果已有旧版本,先清理
rm -rf ~/hobot_imu_sensor
# 3. 按照免驱分支 README 重新安装
# (具体命令查看仓库 README,通常只需 source 即可)
检查中断引脚配置
BMI088 I2C 模式需要中断引脚,查看设备树是否配置:
# 查看设备树中 BMI088 配置
dtc -I dtb -O dts /boot/hobot/x5-rdk-v1p0.dts | grep -A 20 bmi088
# 或查看 dmesg 中 IRQ 信息
dmesg | grep -i bmi
如果中断未配置,可能需要:
- 确认跳线帽是否连接了 INT 引脚
- 或切换到 SPI 模式(SPI 模式下中断配置可能不同)
测试 SPI 模式(备选方案)
如果 I2C 持续失败,建议切换到 SPI 模式(社区反馈 SPI 更稳定):
# 1. 修改跳线帽到 SPI 位置
# 2. 重启系统
sudo reboot
# 3. 验证 SPI 设备
ls /sys/bus/iio/devices/
cat /sys/bus/iio/devices/iio:deviceX/name
# 4. 重新运行 IMU 节点
ros2 launch imu_sensor imu_sensor.launch.py
参考案例
根据社区帖子 x5 板接 BMI088 IMU 模块的问题:
- 用户最终通过免驱版本解决问题
- 3.4.1 系统也可用,但 3.5.0+ 更稳定
- SPI 模式比 I2C 更容易调试
需要补充的信息
请提供以下信息以便进一步定位:
- 系统版本:
cat /etc/hobot_version输出 - I2C 扫描结果:
i2cdetect -y 5输出(确认 0x19 和 0x69 是否存在) - dmesg 日志:
dmesg | grep -i bmi输出 - 跳线帽位置:确认 INT 引脚是否连接
快速建议
如果急于调试,建议:
- 切换到 SPI 模式(跳线帽改到 SPI,重启)
- 使用免驱版本(GitHub 仓库 driverless 分支)
- 升级系统到 3.5.0+(如果当前版本较低)
需要帮助可以随时补充日志!