香橙派 5 PLUS 调用摄像头(ROS2)

3 篇文章 0 订阅
1 篇文章 0 订阅

         我需要在ROS2 Humble 环境下调用香橙派 5 PLUS 的摄像头。

硬件:香橙派 5 PLUS、OV13855(摄像头)

硬件自己连接哈 。

 注:黑色金属外壳散热效果一般。

1、硬件初始化

        首先,按照文件

OrangePi_5_Plus_RK3588_用户手册_v1.8.pdf

中,

3.34. OV13850 和 OV13855 MIPI 摄像头的测试方法

操作一遍。

2、安装pip

注:通过pip安装opencv-python

Ubuntu22系统没有预先安装pip,需要自己安装,方法如下:

sudo apt update

sudo apt install python3-pip

3、安装opencv-python

注:调用摄像头需要用到opencv

Ubuntu22系统没有预先安装opencv-python,需要自己安装,方法如下:

sudo apt update

pip3 install opencv-python

4、创建一个ROS2节点

        节点的创建不做描述,我的文件目录如下

向node.py 文件内复制如下代码:

#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
import cv2


class MyNode(Node):
    """
    创建一个MyNode节点,并在初始化时输出一个话
    """
    def __init__(self, name):
        super().__init__(name)
        self.get_logger().info("大家好,我是%s!" % name)
        for device in [11, 16]:
            if self.open_camera(device):
                break


    def open_camera(self, device_id):
        # 打开摄像头
        cap = cv2.VideoCapture(device_id)

        # 设置分辨率
        cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)  # 设置宽度
        cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)  # 设置高度    
            
        if not cap.isOpened():
            self.get_logger().error(f"Can not find camera at /dev/video{device_id}")
            return False

        self.get_logger().info(f"Camera /dev/video{device_id} is opened successfully.")

        while True:
            # 捕获帧
            ret, frame = cap.read()

            if not ret:
                self.get_logger().error("Failed to grab frame")
                break

            # 显示帧
            cv2.imshow(f"Camera /dev/video{device_id}", frame)

            # 按下 'q' 键退出
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break

        # 释放摄像头并关闭所有OpenCV窗口
        cap.release()
        cv2.destroyAllWindows()
        return True


def main(args=None):
    rclpy.init(args=args)  # 初始化rclpy
    node = MyNode("node")  # 新建一个节点
    rclpy.spin(node)  # 保持节点运行,检测是否收到退出指令(Ctrl+C)
    rclpy.shutdown()  # 关闭rclpy


if __name__ == "__main__":
    main()

下面这部分代码中数组 [11, 16]代表着设备号

for device in [11, 16]:
    if self.open_camera(device):
        break

 你可以通过命令ls /dev/video*查看有哪些视频设备可用

ls /dev/video*

比如我的:

 

 5、保存代码,编译、source、运行

colcon build 
source install/setup.bash 
ros2 run node node 

运行效果如下 :

 补充:仅仅调用香橙派摄像头

如果不是 ROS2 环境,仅仅调用香橙派摄像头,也可以用下面的代码。未实测,勿喷。

import cv2

def open_camera(device_id):
    # 打开摄像头
    cap = cv2.VideoCapture(device_id)
    
    if not cap.isOpened():
        print(f"Can not find camera at /dev/video{device_id}")
        return

    print(f"Camera /dev/video{device_id} is opened successfully.")

    while True:
        # 捕获帧
        ret, frame = cap.read()

        if not ret:
            print("Failed to grab frame")
            break

        # 显示帧
        cv2.imshow(f"Camera /dev/video{device_id}", frame)

        # 按下 'q' 键退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    # 释放摄像头并关闭所有OpenCV窗口
    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    # 尝试打开不同的摄像头设备
    for device in [11、16、18]:
        open_camera(device)

最后,我有话说:

        如果文章对你有帮助,我很开心。有疑问请留言,看到后,我会回复。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值