云计算百科
云计算领域专业知识百科平台

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

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

硬件:香橙派 5 PLUS、OV13855(摄像头)、USB 摄像头(罗技720P)

 

硬件自己连接哈 。

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

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)

最后,我有话说:

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

赞(0)
未经允许不得转载:网硕互联帮助中心 » 香橙派 5 PLUS 调用摄像头(ROS2)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!