JiaXin‘s Blog

Back

T265 在 ROS 2 跑通

前言#

T265 是一颗内置 Movidius VPU 芯片的双目鱼眼追踪相机——两个鱼眼镜头 + 200Hz IMU,芯片内部跑 VIO,USB 直接输出 6-DOF 位姿。Intel 2023 年宣布停产、2025 年停止软件支持。

实验室刚好有一颗,记录一下配置和学习过程。

环境:Ubuntu 22.04,ROS 2 Humble,librealsense v2.50.0。


一、硬件识别#

插上 T265,lsusb 显示:

Bus 003 Device 007: ID 03e7:2150 Intel Myriad VPU [Movidius Neural Compute Stick]
plaintext

这不是神经网络加速棒。 T265 内部的 Movidius Myriad 2 芯片在固件上传前处于 bootloader 模式,USB PID 为 2150。固件上传后芯片进入相机模式,PID 变为 0B37

系统自带的 librealsense 2.58 完全检测不到设备——因为 Intel 在 v2.55 之后从源码中移除了 T265 支持。rs-enumerate-devicesrealsense-viewer 都输出 No RealSense devices were found!


二、SDK 版本选择#

Intel 官方对 T265 的支持时间线:

AI给我的图:

版本T265 支持状态
v2.50.0✅ 完整支持我选的是这个
v2.54.2⚠️ 官方称支持,但固件下载代码不完整不可用
v2.55+❌ 源码完全移除不可用
v2.58(系统当前)不可用

可以独立编译一个目录下,比如我在 ~/桌面/OpenCV/cameras/t265/ 下,和系统的 2.58 互不干扰:

cd ~/桌面/OpenCV/cameras/t265
git clone https://github.com/IntelRealSense/librealsense -b v2.50.0 librealsense
cd librealsense && mkdir build && cd build

cmake .. \
  -DFORCE_RSUSB_BACKEND=true \
  -DCMAKE_INSTALL_PREFIX=$HOME/桌面/OpenCV/cameras/t265/librealsense/install \
  -DCMAKE_BUILD_TYPE=Release

make -j$(nproc)
make install
bash

FORCE_RSUSB_BACKEND=true 跳过内核模块,直接用 libusb 读写设备——不需要 dkms,不会和系统 librealsense 冲突。

编译完成后验证:

export LD_LIBRARY_PATH=~/桌面/OpenCV/cameras/t265/librealsense/install/lib:$LD_LIBRARY_PATH
~/桌面/OpenCV/cameras/t265/librealsense/install/bin/rs-enumerate-devices
bash

输出:

Device info:
    Name                          :     Intel RealSense T265
    Serial Number                 :     230322110123
    Firmware Version              :     0.2.0.951
    Product Id                    :     0B37              ← 相机模式!

Stream Profiles supported by Tracking Module
 Supported modes:
    stream       resolution      fps       format
    Fisheye 1     848x800       @ 30Hz     Y8
    Fisheye 2     848x800       @ 30Hz     Y8
    Gyro         N/A            @ 200Hz    MOTION_XYZ32F
    Accel        N/A            @ 62Hz     MOTION_XYZ32F
    Pose         N/A            @ 200Hz    6DOF
plaintext

四个流——两路鱼眼灰度图、200Hz 陀螺仪、62Hz 加速度计、200Hz 内置 VIO 位姿。


三、ROS 2 的 T265#

ROS 1 :完美支持#

T265 上市于 2019 年,正值 ROS 1 的黄金年代。官方 realsense-ros 提供了完整的 T265 支持:

# ROS 1 下一条命令启动 T265
roslaunch realsense2_camera rs_t265.launch
bash

自动发布两路鱼眼图、IMU 数据、6-DOF 位姿、TF 树——全部开箱即用。Kaliibr 联合标定、ORB-SLAM3 双目模式、VINS-Fusion,教程遍布全网。

ROS 2 没赶上#

2019  T265 上市,ROS 1 驱动成熟
2021  T265 累计出货量不理想
2022  ROS 2 Humble 发布
2023  Intel 宣布 T265 停产
2025  realsense-ros ROS 2 版适配完 D400 系列,T265 源码被删
plaintext

T265 赶上了 ROS 1 的末班车,没赶上 ROS 2 的头班车。realsense-ros 的 ROS 2 分支(ros2-masterros2-development)从未包含 rs_t265.launch——它们在 2023 年后才稳定,而那时 T265 已经停产、SDK 里的通信代码也被移除了。

为什么不能直接用#

系统 aptros-humble-realsense2-camera 是 v4.57.7,链 librealsense 2.57——没有 T265 通信代码。实测:固件加载后跑 ros2 launch realsense2_camera rs_launch.py,输出 No RealSense devices were found!

有尝试者试图把 v4.51 的 realsense-ros 源码(最后一个含 T265 支持的版本)搬到 Humble 下编译——但它的 CMake 消息定义(rosidl_generate_interfaces)和 Humble 的 rosidl_cmake 不兼容,报 list index out of range

最终方案#

ROS 1 的 rs_t265.launch 做了三件事:调 SDK 读数据流 → 包成 ROS 消息 → 发话题。我在 ROS 2 下做完全一样的事——写 了个 t265_driver 节点,直接链 v2.50 SDK,不依赖 realsense-ros

// 核心:用 v2.50 API 遍历帧,按流类型分发到 ROS 话题
for (auto f : frames) {
    auto stream = f.get_profile().stream_type();
    auto index  = f.get_profile().stream_index();

    if (stream == RS2_STREAM_FISHEYE) {
        if (index == 1) publish_fisheye(...);  // → /camera/fisheye1/image_raw
        if (index == 2) publish_fisheye(...);  // → /camera/fisheye2/image_raw
    }
}
// IMU 和 Pose 同理
cpp

colcon 包结构:

cameras/t265/ws/src/t265_driver/
├── CMakeLists.txt     ← 链 v2.50 librealsense + ROS 2
├── package.xml
└── t265_node.cpp      
plaintext

踩过的 API 兼容坑#

v2.50 的 C++ API 和 v2.58 有两个差异:

first_or_default 签名不同

// v2.58(能用)
frames.first_or_default(RS2_STREAM_FISHEYE, 1);   // 第二参数是 stream_index

// v2.50(不能用)
frames.first_or_default(RS2_STREAM_FISHEYE, RS2_FORMAT_ANY);  // 第二参数是 format
// stream_index 要从 frame.get_profile().stream_index() 取
cpp

② 帧迭代返回右值

for (auto& f : frames) { ... }   // v2.58 OK,v2.50 编译报错
for (auto f : frames) { ... }    // v2.50:按值拷贝
cpp

四、完整运行方式#

编译#

cd ~/桌面/OpenCV/cameras/t265/ws
source /opt/ros/humble/setup.bash
colcon build --symlink-install \
  --packages-select t265_driver \
  --cmake-args -DCMAKE_PREFIX_PATH=$HOME/桌面/OpenCV/cameras/t265/librealsense/install
bash

运行#

source ~/桌面/OpenCV/cameras/t265/ws/install/setup.bash
export LD_LIBRARY_PATH=$HOME/桌面/OpenCV/cameras/t265/librealsense/install/lib:$LD_LIBRARY_PATH
ros2 run t265_driver t265_node
bash

验证#

ros2 topic list | grep camera
# /camera/fisheye1/image_raw   ← 30Hz 鱼眼灰度
# /camera/fisheye2/image_raw   ← 30Hz 鱼眼灰度
# /camera/imu                  ← 200Hz
# /camera/odom                 ← 200Hz 内置 VIO 位姿

ros2 topic hz /camera/fisheye1/image_raw
# average rate: 59.753    ← 正常 60Hz
bash

也可以用 SDK 自带的图形工具直接看鱼眼画面:

~/桌面/OpenCV/cameras/t265/librealsense/install/bin/realsense-viewer
bash

简单看——ROS 2 看鱼眼图:

终端:T265 跑着的同时

ros2 run rqt_image_view rqt_image_view
plaintext

选 /camera/fisheye1/image_raw 好看点——T265 SDK 自带的 viewer:

export LD_LIBRARY_PATH=$HOME/桌面/OpenCV/cameras/t265/librealsense/install/lib:$LD_LIBRARY_PATH
~/桌面/OpenCV/cameras/t265/librealsense/install/bin/realsense-viewer
plaintext

这两个都能直接看到两路鱼眼画面。先试试。


五、和 D435i 共存#

T265 用自编译 v2.50 SDK,D435i 用系统 apt 安装的 v2.58。两者通过环境变量隔离:

# 用 D435i(默认——系统 SDK)
ros2 launch realsense2_camera rs_launch.py

# 用 T265(source 自编工作区 + LD_LIBRARY_PATH)
source ~/桌面/OpenCV/cameras/t265/ws/install/setup.bash
export LD_LIBRARY_PATH=~/桌面/OpenCV/cameras/t265/librealsense/install/lib:$LD_LIBRARY_PATH
ros2 run t265_driver t265_node
bash

两个相机插在同一台机器上同时跑,互不影响。


六、踩坑清单#

现象根因解决
系统 SDK 不认设备rs-enumerate-devices 无输出2.58 删了 T265 支持自编译 v2.50
2.54 固件缺失编译通过但检测不到CMakeLists 未下载 TM2 固件换 v2.50.0
ROS 驱动不兼容list index out of rangerealsense-ros 新分支和 Humble rosidl 冲突手写最小节点
v2.50 API 签名差异invalid conversion from int to rs2_formatfirst_or_default 参数顺序不同遍历 frame 用 stream_index()
帧是右值cannot bind non-const lvalue referencev2.50 返回右值auto f 替代 auto& f
固件上传前lsusb 显示 Neural Compute StickMovidius 在 bootloader 模式v2.50 SDK 启动时自动上传

后续#

就这样吧,先记录着,后面再看看怎么优化。


参考#

  • T265 产品页面(已归档):Intel RealSense T265
  • librealsense v2.50.0 源码:realsenseai/librealsense
  • T265 固件 v0.2.0.951 直链:https://librealsense.intel.com/Releases/TM2/FW/target/0.2.0.951/target-0.2.0.951.mvcmd
  • 社区确认:ROS 2 Humble 需配合 SDK v2.51.1 + realsense-ros v4.51.1 才能使用 T265
T265 在 ROS 2 跑通
https://jiaxin404.top/tech/t265_ros2/
Author 嘉心糖
Published at 2026年7月2日
Comment seems to stuck. Try to refresh?✨