1. 项目背景与需求解析
在嵌入式计算机视觉领域,Intel RealSense深度相机因其出色的性价比和丰富的功能接口而广受欢迎。而树莓派4B作为目前最流行的ARM架构开发板之一,其强大的性能和丰富的扩展能力使其成为移动机器人、边缘计算等场景的理想选择。本文将详细介绍在树莓派4B(ARMv8架构)上运行Ubuntu 22.04 LTS(Jammy Jellyfish)系统时,如何完整部署Intel RealSense SDK 2.0及其ROS2驱动。
这个组合方案特别适合以下场景:
- 移动机器人自主导航(SLAM应用)
- 三维物体识别与测量
- 人机交互中的手势识别
- 教育领域的计算机视觉实验
注意:虽然RealSense官方对ARM架构的支持有限,但通过本文的方法可以稳定运行D435i等主流型号,实测帧率可达30FPS@640x480。
2. 系统环境准备
2.1 基础系统配置
首先需要确保树莓派4B运行的是64位Ubuntu系统。推荐使用Ubuntu 22.04 LTS Server版本(无桌面环境)以获得最佳性能:
bash复制# 查看系统架构确认
uname -m
# 应显示aarch64
# 更新系统基础组件
sudo apt update && sudo apt upgrade -y
sudo apt install -y git cmake build-essential
对于需要图形化界面的开发者,可以安装Ubuntu Desktop或轻量级的LXDE桌面:
bash复制sudo apt install -y ubuntu-desktop # 或 lubuntu-desktop
2.2 内核模块配置
RealSense设备需要特定的USB和视频内核模块支持。Ubuntu 22.04默认内核(5.15)已包含所需模块,但需要手动加载:
bash复制# 加载内核模块
sudo modprobe uvcvideo
sudo modprobe videobuf2-core
sudo modprobe videobuf2-vmalloc
为确保开机自动加载,创建配置文件:
bash复制echo -e "uvcvideo\nvideobuf2-core\nvideobuf2-vmalloc" | sudo tee /etc/modules-load.d/realsense.conf
3. Intel RealSense SDK安装
3.1 依赖项安装
RealSense SDK需要以下关键依赖:
bash复制sudo apt install -y \
libssl-dev \
libusb-1.0-0-dev \
pkg-config \
libgtk-3-dev \
libglfw3-dev \
libgl1-mesa-dev \
libglu1-mesa-dev
对于Python开发者还需安装:
bash复制sudo apt install -y python3-dev python3-pip
pip3 install numpy pyrealsense2
3.2 源码编译安装
由于ARM架构没有官方预编译包,我们需要从源码构建:
bash复制git clone https://github.com/IntelRealSense/librealsense.git
cd librealsense
git checkout v2.54.1 # 使用稳定版本
# 配置编译选项
mkdir build && cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_EXAMPLES=true \
-DBUILD_GRAPHICAL_EXAMPLES=false # 图形示例在ARM上可能有问题
# 编译安装(约需1小时)
make -j$(nproc)
sudo make install
3.3 udev规则配置
允许普通用户访问USB设备:
bash复制sudo cp ../config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
验证安装:
bash复制realsense-viewer
常见问题:如果出现"Failed to resolve usb interface"错误,尝试重新插拔设备或重启树莓派。
4. ROS2驱动安装与配置
4.1 ROS2 Humble安装
推荐使用ROS2 Humble版本(与Ubuntu 22.04兼容):
bash复制sudo apt install -y software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install -y curl
curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt install -y ros-humble-desktop
4.2 RealSense ROS2包编译
创建工作空间并编译驱动:
bash复制mkdir -p ~/realsense_ws/src
cd ~/realsense_ws/src
git clone -b humble https://github.com/IntelRealSense/realsense-ros.git
cd ..
# 安装依赖
sudo apt install -y python3-rosdep
rosdep init
rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro humble
# 编译
source /opt/ros/humble/setup.bash
colcon build
4.3 驱动测试
启动相机节点:
bash复制source install/setup.bash
ros2 launch realsense2_camera rs_launch.py
在另一个终端查看话题列表:
bash复制ros2 topic list
# 应看到类似/camera/color/image_raw等话题
5. 性能优化与问题排查
5.1 ARM架构优化技巧
- 内存管理优化:
bash复制sudo nano /etc/sysctl.conf
# 添加以下内容
vm.swappiness = 10
vm.min_free_kbytes = 65536
- CPU调度策略:
bash复制sudo apt install -y cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl restart cpufrequtils
- USB带宽管理:
对于多摄像头场景,建议使用带独立供电的USB3.0 Hub,并限制分辨率:
yaml复制# 在ros2 launch文件中添加参数
parameters:
- name: "depth_width"
value: "640"
- name: "depth_height"
value: "480"
- name: "color_width"
value: "640"
- name: "color_height"
value: "480"
5.2 常见问题解决方案
问题1:USB带宽不足导致帧丢失
- 解决方案:降低分辨率或帧率,使用
rs-enumerate-devices -c检查实际带宽占用
问题2:ROS2节点启动后无数据
- 排查步骤:
- 确认
realsense-viewer能正常显示 - 检查
dmesg | grep uvc输出 - 尝试
v4l2-ctl --list-devices
- 确认
问题3:深度图像与彩色图像未对齐
- 解决方法:在launch文件中启用对齐:
yaml复制parameters:
- name: "align_depth"
value: "true"
6. 应用实例:构建RGB-D SLAM系统
6.1 安装RTAB-Map
bash复制sudo apt install -y ros-humble-rtabmap-ros
6.2 启动SLAM节点
创建启动文件~/realsense_ws/src/slam_launch.py:
python复制from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='realsense2_camera',
executable='realsense2_camera_node',
parameters=[{'align_depth': True}]
),
Node(
package='rtabmap_ros',
executable='rtabmap',
parameters=[{'frame_id': 'camera_link'}]
)
])
6.3 可视化结果
bash复制ros2 run rviz2 rviz2
# 添加PointCloud2和Map显示
在实际使用中,我发现树莓派4B的性能虽然可以满足基本的RealSense应用,但对于高精度的实时SLAM还是有些吃力。建议将点云分辨率设置为QVGA(320x240)并关闭点云着色,这样可以获得更稳定的帧率。另外,使用带散热风扇的外壳可以有效防止CPU降频,我在连续运行1小时后温度可以控制在65°C以下。
