@TOC关于相机D455使用的IMU信息传输问题
问题简介
在使用realsense d455相机的过程中采集IMU数据踩坑如下
import pyrealsense2 as rs
try:
# 配置相机并启动流
pipeline = rs.pipeline()
config = rs.config()
config.enable_stream(rs.stream.accel, rs.format.motion_xyz32f, 100) # 启用加速度计数据流,帧率为100Hz
config.enable_stream(rs.stream.gyro, rs.format.motion_xyz32f, 100) # 启用陀螺仪数据流,帧率为100Hz
pipeline.start(config)
print("IMU数据获取中,请等待...")
while True:
# 等待一组协调的帧
frames = pipeline.wait_for_frames()
# 获取加速度计和陀螺仪帧
accel_frame = frames.first_or_default(rs.stream.accel)
gyro_frame = frames.first_or_default(rs.stream.gyro)
if accel_frame and gyro_frame:
# 从帧中获取IMU数据
accel_data = accel_frame.as_motion_frame().get_motion_data()
gyro_data = gyro_frame.as_motion_frame().get_motion_data()
# 打印IMU数据
print("Accelerometer data:", accel_data)
print("Gyroscope data:", gyro_data)
except Exception as e:
print("发生错误:", e)
想要使用d455采集更新频率为100hz的数据,但是在运行该代码的过程中反复报错
发生错误: Couldn't resolve requests
百思不得其解,在对应的github的issue中也没有找到合适的回答
最终运行下列代码得到了答案
rs-enumerate-devices
其中IMU的更新频率分别如下所示
Supported modes:
stream resolution fps format
Accel N/A @ 200Hz MOTION_XYZ32F
Accel N/A @ 100Hz MOTION_XYZ32F
Gyro N/A @ 400Hz MOTION_XYZ32F
Gyro N/A @ 200Hz MOTION_XYZ32F
也就是说利用数据管道的方式仅支持加速度计的100hz输出,所以程序报错
将两个更新频率均修改为200hz即成功运行
真是很坑,在ros下面很轻松就能拿到100hz数据,遇事需多思考