1. 项目概述
在Ubuntu 20.04平台上安装Intel RealSense T265深度相机驱动时,很多开发者会遇到一个典型问题:最新版的pyrealsense2库已经移除了对T265的支持。这个问题困扰了不少机器人开发者和计算机视觉工程师,因为T265作为一款优秀的追踪相机,在SLAM、VR/AR等领域有着广泛应用。
我最近在一个机器人导航项目中就遇到了这个坑,花了大半天时间才找到解决方案。本文将详细介绍如何通过安装v2.51.1版本的librealsense驱动库来解决这个问题,并提供完整的安装指南和常见问题排查方法。
2. 环境准备与依赖安装
2.1 系统要求确认
首先确保你的系统满足以下要求:
- Ubuntu 20.04 LTS(其他版本可能需要调整)
- Python 3.8(系统默认版本)
- 至少4GB可用磁盘空间
- 稳定的网络连接(编译过程需要下载依赖)
提示:如果你使用的是其他Linux发行版,可能需要调整部分安装步骤,特别是包管理器的命令。
2.2 安装必要依赖
在开始编译安装前,我们需要安装一些基础依赖包。这些依赖包括编译工具、USB驱动支持、图形界面库等:
bash复制sudo apt-get update
sudo apt-get install -y \
git cmake build-essential \
libudev-dev pkg-config libgtk-3-dev \
libusb-1.0-0-dev libglfw3-dev libssl-dev
这里解释下几个关键依赖的作用:
libudev-dev:提供设备管理支持libusb-1.0-0-dev:USB设备通信库libglfw3-dev:OpenGL窗口和输入支持libssl-dev:安全通信支持(用于固件下载)
如果遇到依赖安装失败,可以尝试先更新软件源:
bash复制sudo apt-get update --fix-missing
3. 获取并编译librealsense驱动
3.1 获取指定版本源码
由于新版驱动不再支持T265,我们需要获取v2.51.1版本的源码:
bash复制mkdir -p ~/realsense_ws && cd ~/realsense_ws
git clone -b v2.51.1 https://github.com/IntelRealSense/librealsense.git
cd librealsense
注意:务必使用v2.51.1分支,这是最后一个完整支持T265的稳定版本。
3.2 配置udev规则
为了让系统能够正确识别RealSense设备,需要安装udev规则:
bash复制sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
这个步骤非常重要,否则可能会出现设备权限问题导致无法访问相机。
3.3 编译安装驱动
现在开始编译驱动,这个过程可能需要30分钟到1小时,取决于你的机器性能:
bash复制mkdir build && cd build
cmake ../ -DBUILD_EXAMPLES=true -DBUILD_PYTHON_BINDINGS=bool=true -DPYTHON_EXECUTABLE=$(which python3)
make -j$(nproc)
sudo make install
编译选项说明:
-DBUILD_EXAMPLES=true:编译示例程序-DBUILD_PYTHON_BINDINGS=true:生成Python绑定-DPYTHON_EXECUTABLE:指定Python3路径
常见问题:如果编译过程中出现第三方库下载失败,可以手动下载后修改对应的CMake文件。例如curl库下载失败,可以:
- 手动下载指定版本的curl源码
- 修改
librealsense/CMake/external_libcurl.cmake文件- 将GIT仓库地址替换为本地路径
4. 环境配置与验证
4.1 设置Python路径
编译安装完成后,需要将Python绑定添加到PYTHONPATH:
bash复制echo 'export PYTHONPATH="/usr/lib/python3/dist-packages/pyrealsense2:$PYTHONPATH"' >> ~/.bashrc
source ~/.bashrc
验证安装是否成功:
bash复制python3 -c "import pyrealsense2 as rs; print(rs.__version__)"
应该输出2.51.1。
4.2 测试相机连接
使用RealSense查看器验证相机是否正常工作:
bash复制realsense-viewer
如果看不到设备,尝试重新插拔相机。在查看器中你应该能看到T265的6自由度位姿数据和鱼眼图像。
5. Python接口使用示例
5.1 获取位姿数据
下面是一个简单的Python示例,展示如何获取T265的位姿数据:
python复制#!/usr/bin/python3
import pyrealsense2 as rs
# 创建管道和配置
pipe = rs.pipeline()
cfg = rs.config()
cfg.enable_stream(rs.stream.pose)
# 开始传输
pipe.start(cfg)
try:
for _ in range(50):
frames = pipe.wait_for_frames()
pose = frames.get_pose_frame()
if pose:
data = pose.get_pose_data()
print(f"Frame #{pose.frame_number}")
print(f"Position: {data.translation}")
print(f"Velocity: {data.velocity}")
print(f"Acceleration: {data.acceleration}\n")
finally:
pipe.stop()
5.2 获取欧拉角数据
T265返回的是四元数形式的旋转数据,我们可以转换为更直观的欧拉角:
python复制#!/usr/bin/python3
import pyrealsense2 as rs
import math as m
pipe = rs.pipeline()
cfg = rs.config()
cfg.enable_stream(rs.stream.pose)
pipe.start(cfg)
try:
while True:
frames = pipe.wait_for_frames()
pose = frames.get_pose_frame()
if pose:
data = pose.get_pose_data()
# 四元数转欧拉角
w = data.rotation.w
x = -data.rotation.z
y = data.rotation.x
z = -data.rotation.y
pitch = -m.asin(2.0 * (x*z - w*y)) * 180.0 / m.pi
roll = m.atan2(2.0 * (w*x + y*z), w*w - x*x - y*y + z*z) * 180.0 / m.pi
yaw = m.atan2(2.0 * (w*z + x*y), w*w + x*x - y*y - z*z) * 180.0 / m.pi
print(f"Frame #{pose.frame_number}")
print(f"RPY [deg]: Roll: {roll:.2f}, Pitch: {pitch:.2f}, Yaw: {yaw:.2f}")
finally:
pipe.stop()
6. 常见问题与解决方案
6.1 Python导入失败
如果出现ImportError: No module named 'pyrealsense2',可能是以下原因:
-
PYTHONPATH未正确设置:
bash复制echo $PYTHONPATH确认包含
/usr/lib/python3/dist-packages/pyrealsense2 -
安装位置不正确:
bash复制ls /usr/lib/python3/dist-packages/pyrealsense2如果不存在,检查编译日志确认安装位置
-
多Python环境冲突:
确保使用的python3命令与编译时指定的Python版本一致
6.2 设备未识别
如果realsense-viewer中看不到设备:
- 检查USB连接(T265需要USB3.0接口)
- 重新加载udev规则:
bash复制sudo udevadm control --reload-rules && sudo udevadm trigger - 查看设备列表:
bash复制
应该能看到Intel RealSense设备lsusb | grep Intel
6.3 编译错误处理
常见编译错误及解决方法:
-
网络问题导致依赖下载失败:
- 手动下载依赖包
- 修改对应的CMake文件指向本地路径
-
内存不足:
- 减少并行编译线程数:
make -j4替代make -j$(nproc)
- 减少并行编译线程数:
-
权限问题:
- 确保有sudo权限
- 检查磁盘空间:
df -h
7. 进阶使用建议
7.1 多设备同步
如果需要使用多个T265设备,可以通过设置每个设备的串号来区分:
python复制cfg = rs.config()
cfg.enable_device('812612070222') # 替换为你的设备串号
获取设备串号:
bash复制rs-enumerate-devices | grep Serial
7.2 与ROS集成
虽然本文主要介绍原生驱动安装,但如果你使用ROS,可以考虑:
- 安装ROS版的RealSense驱动:
bash复制sudo apt-get install ros-noetic-realsense2-camera - 或者从源码编译:
bash复制mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/IntelRealSense/realsense-ros.git cd .. && catkin_make
7.3 性能优化
- 降低延迟:
python复制cfg.enable_stream(rs.stream.pose, rs.format.xyz32f, 200) # 200Hz - 时间同步:
python复制frames = pipe.wait_for_frames(1000) # 1秒超时 timestamp = frames.get_timestamp()
8. 卸载与清理
如果需要卸载librealsense:
bash复制# 查看已安装的realsense相关包
dpkg -l | grep "realsense" | cut -d " " -f 3 | xargs sudo dpkg --purge
# 手动删除安装的文件
sudo rm -rf /usr/local/lib/librealsense*
sudo rm -rf /usr/local/include/librealsense2
sudo rm -rf /usr/lib/python3/dist-packages/pyrealsense2
在实际项目中,T265的稳定性和低延迟特性使其成为机器人定位的理想选择。我在一个室内导航项目中使用了T265,配合这套驱动方案,实现了厘米级的定位精度。关键是要确保驱动版本正确,环境配置无误,这样就能充分发挥T265的性能优势。
