在树莓派4B(ARM架构)的Ubuntu 22.04(Jammy)上安装Intel RealSense SDK和ROS2驱动需要特别注意ARM兼容性。
一、系统准备和依赖安装
1. 更新系统和安装依赖
bash
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装编译工具和依赖
sudo apt install -y \
git cmake build-essential \
libssl-dev libusb-1.0-0-dev pkg-config \
libgtk-3-dev libglfw3-dev \
libgl1-mesa-dev libglu1-mesa-dev \
python3-dev python3-pip \
ros-humble-desktop \
ros-dev-tools
# 安装额外的ROS2依赖
sudo apt install -y \
ros-humble-cv-bridge \
ros-humble-image-transport \
ros-humble-tf2 \
ros-humble-tf2-ros \
ros-humble-diagnostic-updater \
ros-humble-rviz2
二、安装Intel RealSense SDK(从源码编译)
2.1 下载源码
bash
# 创建工作目录
mkdir -p ~/realsense_ws
cd ~/realsense_ws
# 克隆librealsense仓库(使用稳定版本)
git clone https://github.com/IntelRealSense/librealsense.git
cd librealsense
git checkout v2.54.2 # 使用稳定版本
2.2 配置内核模块(DKMS)
bash
# 安装内核头文件(匹配当前运行的内核)
sudo apt install -y linux-headers-$(uname -r)
# 配置udev规则
sudo cp config/99-realsense-libusb.rules /etc/apt/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
2.3 编译并安装librealsense
bash
# 创建构建目录
mkdir build && cd build
# 配置CMake(特别为ARM优化)
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_EXAMPLES=true \
-DBUILD_GRAPHICAL_EXAMPLES=false \
-DBUILD_WITH_OPENMP=false \
-DBUILD_PYTHON_BINDINGS=true \
-DPYTHON_EXECUTABLE=/usr/bin/python3 \
-DFORCE_RSUSB_BACKEND=true \
-DBUILD_WITH_TM2=false \
-DCMAKE_CXX_FLAGS="-march=armv8-a+crc -mtune=cortex-a72"
# 编译(使用4个核心,根据你的情况调整)
make -j4
# 安装
sudo make install
# 将库路径添加到系统
sudo ldconfig
三、安装ROS2 RealSense驱动
3.1 创建工作空间
bash
# 创建ROS2工作空间
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
3.2 克隆RealSense ROS2包
bash
# 克隆realsense-ros包(使用humble分支)
git clone https://github.com/IntelRealSense/realsense-ros.git -b ros2-development
3.3 安装依赖并编译
bash
# 返回工作空间根目录
cd ~/ros2_ws
# 安装依赖
rosdep update
rosdep install -i --from-path src --rosdistro humble -y
# 编译
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
3.4 配置环境变量
bash
# 添加到.bashrc
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
# 设置USB权限
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="8086", MODE="0666"' | sudo tee /etc/apt/udev/rules.d/99-realsense-usb.rules
sudo udevadm control --reload-rules && sudo udevadm trigger
四、测试安装
4.1 测试RealSense SDK
bash
# 运行realsense-viewer(如果有GUI)
# realsense-viewer
# 或使用命令行工具
rs-enumerate-devices # 应该能看到连接的设备
# 查看深度信息
rs-depth # 按Ctrl+C退出
4.2 测试ROS2节点
bash
# 在一个终端启动RealSense ROS2节点
ros2 launch realsense2_camera rs_launch.py
# 在另一个终端查看发布的topic
ros2 topic list
# 应该能看到类似 /camera/color/image_raw 等话题
# 查看摄像头信息
ros2 topic echo /camera/color/camera_info
五、使用示例
5.1 创建Python测试脚本
bash
cat > ~/test_realsense.py << 'EOF'
#!/usr/bin/env python3
import pyrealsense2 as rs
import numpy as np
# 配置管道
pipeline = rs.pipeline()
config = rs.config()
# 获取设备
context = rs.context()
if len(context.devices) == 0:
print("未检测到RealSense设备")
exit()
# 启用流
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
# 开始流
pipeline.start(config)
try:
for i in range(30):
# 等待一组帧
frames = pipeline.wait_for_frames()
# 获取深度帧
depth_frame = frames.get_depth_frame()
color_frame = frames.get_color_frame()
if not depth_frame or not color_frame:
continue
print(f"帧 {i+1}: 深度={depth_frame.get_width()}x{depth_frame.get_height()}, "
f"颜色={color_frame.get_width()}x{color_frame.get_height()}")
finally:
pipeline.stop()
print("测试完成")
EOF
# 运行测试
python3 ~/test_realsense.py
5.2 ROS2 C++示例节点
bash
cat > ~/ros2_ws/src/test_realsense_node.cpp << 'EOF'
#include <rclcpp/rclcpp.hpp>
#include <sensor_msgs/msg/image.hpp>
class RealSenseTestNode : public rclcpp::Node
{
public:
RealSenseTestNode() : Node("realsense_test_node")
{
depth_sub_ = this->create_subscription<sensor_msgs::msg::Image>(
"/camera/depth/image_rect_raw", 10,
[this](const sensor_msgs::msg::Image::SharedPtr msg) {
RCLCPP_INFO(this->get_logger(), "收到深度图像: %dx%d",
msg->width, msg->height);
});
color_sub_ = this->create_subscription<sensor_msgs::msg::Image>(
"/camera/color/image_raw", 10,
[this](const sensor_msgs::msg::Image::SharedPtr msg) {
RCLCPP_INFO(this->get_logger(), "收到彩色图像: %dx%d",
msg->width, msg->height);
});
}
private:
rclcpp::Subscription<sensor_msgs::msg::Image>::SharedPtr depth_sub_;
rclcpp::Subscription<sensor_msgs::msg::Image>::SharedPtr color_sub_;
};
int main(int argc, char** argv)
{
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<RealSenseTestNode>());
rclcpp::shutdown();
return 0;
}
EOF
六、故障排除
常见问题解决:
- USB带宽不足:
bash
# 降低分辨率或帧率
ros2 run realsense2_camera realsense2_camera_node \
--ros-args -p enable_color:=true \
-p color_width:=640 -p color_height:=480 -p color_fps:=15
- 内存不足:
bash
# 增加交换空间
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
- 编译错误:
bash
# 清除并重新编译
cd ~/realsense_ws/librealsense/build
rm -rf *
cmake .. -DFORCE_RSUSB_BACKEND=true -DBUILD_EXAMPLES=false
make -j2 # 使用更少的核心减少内存使用
- 检查设备连接:
bash
# 查看USB设备
lsusb | grep 8086
# 应该能看到Intel Corp.设备
# 检查内核模块
lsmod | grep uvcvideo
七、优化建议
- 使用VNC或RDP进行远程桌面(如果需要GUI):
bash
sudo apt install -y xrdp
sudo systemctl enable xrdp
- 设置性能模式:
bash
# 设置CPU为性能模式
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
- 监控系统资源:
bash
# 安装监控工具
sudo apt install -y htop
htop # 查看资源使用情况
注意事项
- 树莓派4B的USB 3.0接口是真正的USB 3.0,确保使用蓝色接口连接RealSense
- 编译过程可能需要较长时间(1-2小时),请确保设备供电稳定
- 如果使用RealSense D435/D435i,建议使用有源USB集线器
- 实时处理时,建议关闭不必要的服务以释放CPU资源