香橙派上进行realsense深度相机开发(一)SDK安装、ROS发布、运行

基本信息

主机:Orangepi5max 16G (ARM64 架构) + 64G tf卡
相机:realsense 455 相机
线缆:3m USB3.2线材
系统:Orangepi5max_1.0.0_ubuntu_jammy_desktop_xfce_linux5.10.160(ubuntu 22.04)
系统配置说明:已经使用fishros安装ROS Humble、rosdepc,更换ros源为华为云源

驱动安装

一些必要说明

目前github项目位置已经改为realsenseai

SDK安装与release-viewer配置

ros 配置

先确保 SDK 能正常枚举 D455,再处理 ROS 调用:

# 2.57版本无需--force-rsusb,直接枚举设备
rs-enumerate-devices

# 若仍提示"No device detected",修复udev权限(香橙派必做)
sudo cp ~/ws_realsense/librealsense/config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
sudo usermod -aG plugdev $USER

# 注销并重新登录(权限生效),再次执行
rs-enumerate-devices

准备 ROS2 工作空间

# 创建/进入ROS2工作空间(若未创建)
mkdir -p ~/ros2_humble_ws/src && cd ~/ros2_humble_ws/src

# 卸载可能冲突的apt版功能包
sudo apt purge -y ros-humble-realsense2-camera
sudo apt autoremove -y

克隆realsense-ros(对应2.57 SDK的版本)

git clone https://github.com/IntelRealSense/realsense-ros.git
cd realsense-ros
git checkout 4.57.1  # 4.57.1版本适配SDK 2.57.5
cd ~/ros2_humble_ws

解决编译依赖(手动指定 SDK 路径)
由于缺少librealsense2.pc,需在CMakeLists.txt中手动指定 SDK 的库和头文件路径:

# 编辑realsense2_camera的CMakeLists.txt
nano ~/ros2_humble_ws/src/realsense-ros/realsense2_camera/CMakeLists.txt

在文件开头cmake_minimum_required(...)后,添加以下内容(手动指定 SDK 路径):

# 手动指定librealsense2的头文件和库路径(适配香橙派ARM64)
set(REALSENSE2_INCLUDE_DIR /usr/local/include)
set(REALSENSE2_LIBRARY /usr/local/lib/librealsense2.so)

# 强制链接到本地SDK库
link_directories(/usr/local/lib)
include_directories(${REALSENSE2_INCLUDE_DIR})

保存退出(Ctrl+O → Enter → Ctrl+X)。
替换清华源

# 替换20-default.list中的源
sudo sed -i 's|raw.githubusercontent.com/ros/rosdistro/master|mirrors.tuna.tsinghua.edu.cn/github-raw/ros/rosdistro/master|g' /etc/ros/rosdep/sources.list.d/20-default.list

# 替换rosdistro索引地址(解决index-v4.yaml超时)
sudo sed -i 's|https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml|https://mirrors.tuna.tsinghua.edu.cn/github-raw/ros/rosdistro/master/index-v4.yaml|g' /usr/lib/python3/dist-packages/rosdep2/rosdistrohelper.py

清理 rosdep 缓存并重新更新,可能会有部分无法hit到,多尝试几次

# 清除旧缓存
sudo rm -rf /var/lib/rosdep/*
rm -rf ~/.ros/rosdep/cache/*

# 重新执行rosdep update
rosdep update

编译ros包

若手动编译仍有问题,直接安装香橙派 ARM64 适配的预编译包

# 添加第三方ARM64 ROS包源
echo "deb [arch=arm64] http://packages.ros.org/ros2/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list
sudo apt update

# 安装预编译的realsense2_camera
sudo apt install -y ros-humble-realsense2-camera ros-humble-realsense2-description

# 直接启动(无需编译)
source /opt/ros/humble/setup.bash
ros2 launch realsense2_camera rs_launch.py

测试运行

直接使用 Python SDK 绕过 ROS2 节点

创建 ROS2 Python 发布节点(~/d455_publisher.py)

点击查看代码
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import pyrealsense2 as rs
import numpy as np
import cv2

class D455Publisher(Node):
    def __init__(self):
        super().__init__('d455_publisher')
        # 创建RGB和深度话题发布者
        self.rgb_pub = self.create_publisher(Image, '/color/image_raw', 10)
        self.depth_pub = self.create_publisher(Image, '/depth/image_rect_raw', 10)
        self.bridge = CvBridge()
        
        # 配置D455流
        self.pipeline = rs.pipeline()
        config = rs.config()
        config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
        config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
        
        # 启动相机
        try:
            self.pipeline.start(config)
            self.get_logger().info("D455相机启动成功!")
        except Exception as e:
            self.get_logger().error(f"相机启动失败: {e}")
            exit(1)
        
        # 定时发布图像
        self.timer = self.create_timer(0.03, self.publish_frames)

    def publish_frames(self):
        # 获取帧
        frames = self.pipeline.wait_for_frames()
        color_frame = frames.get_color_frame()
        depth_frame = frames.get_depth_frame()
        
        if not color_frame or not depth_frame:
            return
        
        # 转换为numpy数组
        color_img = np.asanyarray(color_frame.get_data())
        depth_img = np.asanyarray(depth_frame.get_data())
        
        # 发布ROS2图像消息
        self.rgb_pub.publish(self.bridge.cv2_to_imgmsg(color_img, 'bgr8'))
        self.depth_pub.publish(self.bridge.cv2_to_imgmsg(depth_img, '16UC1'))

    def destroy_node(self):
        self.pipeline.stop()
        super().destroy_node()

def main(args=None):
    rclpy.init(args=args)
    node = D455Publisher()
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

运行发布节点

# 安装依赖
pip3 install pyrealsense2 opencv-python numpy

# 运行节点
source /opt/ros/humble/setup.bash
chmod +x ./d455_publisher.py
python3 ./d455_publisher.py

# 新开终端可视化
ros2 run rqt_image_view rqt_image_view /color/image_raw
ros2 run rqt_image_view rqt_image_view /depth/image_rect_raw

常规使用

# 运行节点
cd ~/project/
conda activate project
source /opt/ros/humble/setup.bash
chmod +x ./d455_publisher.py
python3 ./d455_publisher.py
# 新开终端可视化(无conda)
source /opt/ros/humble/setup.bash
ros2 run rqt_image_view rqt_image_view /color/image_raw
# 新开终端可视化(无conda)
source /opt/ros/humble/setup.bash
ros2 run rqt_image_view rqt_image_view /depth/image_rect_raw

posted on 2026-01-22 21:32  fmix  阅读(112)  评论(0)    收藏  举报

导航