当Jetson TX2遇上Realsense D435i,这对嵌入式视觉领域的黄金组合能碰撞出怎样的火花?作为NVIDIA边缘计算平台的代表作,Jetson TX2凭借其强大的GPU性能和低功耗特性,成为移动机器人、无人机和工业检测设备的首选大脑。而Intel Realsense D435i以其卓越的深度感知能力和内置IMU,为三维重建、视觉SLAM等应用提供了高性价比的硬件支持。本文将带你深入探索这对组合的完整配置流程,避开那些官方文档未曾提及的"暗礁"。
Jetson TX2运行的是NVIDIA定制的L4T(Linux for Tegra)系统,基于Ubuntu 16.04但内核经过深度修改。这种特殊性导致许多标准Linux驱动无法直接使用,特别是涉及内核模块的设备驱动。Realsense D435i作为一款结合深度视觉和惯性测量的设备,其驱动安装更需要特别注意以下几点:
在开始前,请确保系统已更新至最新状态:
bash复制sudo apt update && sudo apt dist-upgrade -y
sudo reboot
验证内核版本:
bash复制uname -r
# 预期输出:4.9.140-tegra 或类似
安装必要工具链:
bash复制sudo apt install -y git cmake libssl-dev libusb-1.0-0-dev \
libgtk-3-dev libglfw3-dev libtool autoconf
针对Jetson TX2平台,librealsense提供了两种安装方式,各有优劣:
| 安装方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 二进制安装 | 简单快捷,自动处理依赖 | 版本固定,无法自定义功能 | 快速验证硬件 |
| 源码编译 | 可定制功能,版本灵活 | 流程复杂,需手动打补丁 | 生产环境部署 |
这是最快捷的入门方式,适合初次接触Realsense设备的开发者:
bash复制sudo apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || \
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo xenial main" -u
sudo apt update
sudo apt install -y librealsense2-utils librealsense2-dev
安装完成后,连接设备并验证:
bash复制realsense-viewer
注意:如果设备无法识别,可能需要手动加载内核模块:
bash复制sudo modprobe uvcvideo sudo modprobe videobuf2-core
对于需要长期稳定运行的项目,推荐从源码编译以获得最佳性能:
bash复制git clone https://github.com/IntelRealSense/librealsense.git
cd librealsense
git checkout v2.50.0 # 选择稳定版本
应用Jetson专用补丁:
bash复制./scripts/patch-realsense-ubuntu-L4T.sh
配置编译选项(关键步骤):
bash复制mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=release \
-DBUILD_EXAMPLES=true \
-DFORCE_RSUSB_BACKEND=false \
-DBUILD_WITH_CUDA=true \
-DBUILD_PYTHON_BINDINGS=true
make -j$(nproc)
sudo make install
配置udev规则:
bash复制sudo cp ../config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
验证安装:
bash复制rs-enumerate-devices | grep "Intel RealSense"
Realsense-ROS驱动版本与librealsense的兼容性至关重要。以下版本组合经过实测稳定:
| librealsense版本 | realsense-ros版本 | 备注 |
|---|---|---|
| 2.50.0 | 2.3.2 | 推荐组合 |
| 2.48.0 | 2.2.22 | 旧设备兼容 |
bash复制mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_init_workspace
bash复制cd ~/catkin_ws/src
git clone https://github.com/IntelRealSense/realsense-ros.git
cd realsense-ros
git checkout 2.3.2 # 与librealsense版本匹配
解决依赖关系:
bash复制rosdep install --from-paths src --ignore-src -r -y
编译安装:
bash复制cd ~/catkin_ws
catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
catkin_make install
bash复制echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
基础测试:
bash复制roslaunch realsense2_camera rs_camera.launch
带IMU同步的启动配置(重要参数):
xml复制<launch>
<arg name="unite_imu_method" default="linear_interpolation"/>
<arg name="enable_sync" default="true"/>
<include file="$(find realsense2_camera)/launch/rs_camera.launch">
<arg name="unite_imu_method" value="$(arg unite_imu_method)"/>
<arg name="enable_sync" value="$(arg enable_sync)"/>
</include>
</launch>
验证数据流:
bash复制rostopic list
# 应看到/camera/color/image_raw、/camera/imu等话题
安装必要组件:
bash复制sudo apt install ros-kinetic-rtabmap-ros \
ros-kinetic-robot-localization \
ros-kinetic-imu-filter-madgwick
配置启动文件:
xml复制<launch>
<include file="$(find realsense2_camera)/launch/rs_rtabmap.launch">
<arg name="rgb_topic" value="/camera/color/image_raw" />
<arg name="depth_topic" value="/camera/aligned_depth_to_color/image_raw" />
<arg name="camera_info_topic" value="/camera/color/camera_info" />
<arg name="imu_topic" value="/camera/imu" />
<arg name="rtabmap_args" value="--delete_db_on_start" />
<arg name="visual_odometry" value="true" />
</include>
</launch>
解决Octomap报错:
bash复制sudo apt install ros-kinetic-octomap*
安装依赖库:
bash复制sudo apt install libgoogle-glog-dev libatlas-base-dev libsuitesparse-dev
Eigen3升级(关键步骤):
bash复制wget https://gitlab.com/libeigen/eigen/-/archive/3.3.9/eigen-3.3.9.tar.gz
tar xzf eigen-3.3.9.tar.gz
cd eigen-3.3.9
mkdir build && cd build
cmake ..
sudo make install
配置realsense_color_config.yaml:
yaml复制imu_topic: "/camera/imu"
image_topic: "/camera/color/image_raw"
imu_parameters:
acc_n: 0.02
gyr_n: 0.002
acc_w: 0.0002
gyr_w: 2.0e-6
解决编译错误:
cpp复制// 在ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_rgbd.cc开头添加
#include <unistd.h>
修改CMakeLists.txt:
cmake复制set(LIBS
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
-lboost_system
)
Jetson TX2的USB控制器在高负载下可能出现不稳定,建议:
bash复制roslaunch realsense2_camera rs_camera.launch \
depth_width:=424 \
depth_height:=240 \
depth_fps:=15
D435i的IMU需要定期校准:
bash复制# 安装校准工具
sudo apt install librealsense2-tools
# 运行校准
rs-imu-calibration
长时间运行时可能出现过热降频,建议:
bash复制tegrastats | grep GPU
bash复制sudo nvpmodel -m 0 # MAX-N模式
sudo jetson_clocks
在实际项目中,我们发现D435i的深度精度受环境光影响较大,建议在室内使用时补充850nm红外光源以获得最佳效果。对于SLAM应用,IMU与相机的时间同步至关重要,务必确保enable_sync参数设置为true。