香橙派上进行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
浙公网安备 33010602011771号