树莓派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资源
相关推荐
欧云服务器2 天前
怎么让脚本命令可以同时在centos、debian、ubuntu执行?
ubuntu·centos·debian
智渊AI2 天前
Ubuntu 20.04/22.04 下通过 NVM 安装 Node.js 22(LTS 稳定版)
ubuntu·node.js·vim
The️3 天前
Linux驱动开发之Read_Write函数
linux·运维·服务器·驱动开发·ubuntu·交互
再战300年3 天前
Samba在ubuntu上安装部署
linux·运维·ubuntu
qwfys2003 天前
How to install golang 1.26.0 to Ubuntu 24.04
ubuntu·golang·install
代码游侠3 天前
STM32开发——基础外设
linux·运维·arm开发·stm32·单片机·嵌入式硬件·学习
木尧大兄弟3 天前
Ubuntu 系统安装 OpenClaw 并接入飞书记录
linux·ubuntu·飞书·openclaw
小虾爬滑丫爬3 天前
ubuntu上设置Tomcat 开机启动
ubuntu·tomcat·开机启动
老师用之于民3 天前
【DAY25】线程与进程通信:共享内存、同步机制及实现方案
linux·c语言·ubuntu·visual studio code
小虾爬滑丫爬3 天前
Ubuntu 上设置防火墙
ubuntu·防火墙