树莓派4B(ARM架构)的Ubuntu 22.04(Jammy)上安装Intel RealSense SDK和ROS2驱动

在树莓派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

六、故障排除

常见问题解决:

  1. 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
  1. 内存不足
bash 复制代码
# 增加交换空间
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
  1. 编译错误
bash 复制代码
# 清除并重新编译
cd ~/realsense_ws/librealsense/build
rm -rf *
cmake .. -DFORCE_RSUSB_BACKEND=true -DBUILD_EXAMPLES=false
make -j2  # 使用更少的核心减少内存使用
  1. 检查设备连接
bash 复制代码
# 查看USB设备
lsusb | grep 8086
# 应该能看到Intel Corp.设备

# 检查内核模块
lsmod | grep uvcvideo

七、优化建议

  1. 使用VNC或RDP进行远程桌面(如果需要GUI):
bash 复制代码
sudo apt install -y xrdp
sudo systemctl enable xrdp
  1. 设置性能模式
bash 复制代码
# 设置CPU为性能模式
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
  1. 监控系统资源
bash 复制代码
# 安装监控工具
sudo apt install -y htop
htop  # 查看资源使用情况

注意事项

  1. 树莓派4B的USB 3.0接口是真正的USB 3.0,确保使用蓝色接口连接RealSense
  2. 编译过程可能需要较长时间(1-2小时),请确保设备供电稳定
  3. 如果使用RealSense D435/D435i,建议使用有源USB集线器
  4. 实时处理时,建议关闭不必要的服务以释放CPU资源
相关推荐
ONLYOFFICE2 小时前
ONLYOFFICE 桌面编辑器现已推出 Linux ARM 版本
linux·运维·arm开发
阿钱真强道2 小时前
04 ubuntu20下 OpenHarmony-3.0-LTS qemu mps2-an386 运行 liteos_m
linux·嵌入式硬件·ubuntu·harmonyos
qq_526099132 小时前
机器视觉网卡与普通网卡的5点关键不同
arm开发·计算机视觉·自动化
Jason_zhao_MR2 小时前
米尔RK3576成功上车!ROS2 Humble生态系统体验
linux·嵌入式硬件·物联网·ubuntu·嵌入式
oMcLin11 小时前
如何在 Ubuntu 22.10 上通过 Kubernetes 和 Helm 管理微服务应用,简化跨平台电商平台的自动化部署?
ubuntu·微服务·kubernetes
CheungChunChiu11 小时前
Linux 内核动态打印机制详解
android·linux·服务器·前端·ubuntu
oMcLin12 小时前
如何在Ubuntu 20.04上配置并优化容器化的SaaS应用平台,实现弹性伸缩与跨区域分布?
ubuntu·sass
HIT_Weston20 小时前
97、【Ubuntu】【Hugo】搭建私人博客:搜索功能(二)
linux·运维·ubuntu
wjhx21 小时前
对ubuntu22.04版本日志的处理
linux·ubuntu