ros2打开外接摄像头

接着前几节课讲的项目,创建一个camera_oepn.py

#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from cv_bridge import CvBridge, CvBridgeError
from sensor_msgs.msg import Image
import cv2

class CameraNode(Node):
    def __init__(self):
        super().__init__('camera_node')  # 使用 'camera_node' 作为节点名称
        self.bridge = CvBridge()
        self.image_pub = self.create_publisher(Image, 'camera/image', 10)
        self.timer = self.create_timer(0.1, self.timer_callback)  # 100ms interval
        self.cap = cv2.VideoCapture(0)  # 打开摄像头
        if not self.cap.isOpened():
            self.get_logger().error('Failed to open camera device.')

    def timer_callback(self):
        ret, cv_image = self.cap.read()  # 读取摄像头图像
        if ret:
            try:
                ros_image = self.bridge.cv2_to_imgmsg(cv_image, encoding="bgr8")
                ros_image.header.stamp = self.get_clock().now().to_msg()
                self.image_pub.publish(ros_image)
                cv2.imshow('Camera Image', cv_image)  # 显示图像
                cv2.waitKey(1)  # 等待1毫秒,以便更新窗口
            except CvBridgeError as e:
                self.get_logger().warn('CvBridge Error: %s', e)

    def destroy_node(self):
        self.cap.release()  # 释放摄像头资源
        cv2.destroyAllWindows()  # 关闭所有OpenCV窗口
        super().destroy_node()

def main(args=None):
    rclpy.init(args=args)
    camera_node = CameraNode()
    rclpy.spin(camera_node)
    camera_node.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

在setup.py添加路径

此时我们需要把外接摄像头的usb接上

输入ls /dev/,可以看到video

运行成功打开

效果如下:

注意!如果你的画面没打开的话,按照以下操作

点击设置

这里切换2.0或者3.1尝试一下,切换之后记得再次插拔摄像头usb口,重新识别一下。

### 如何在 RVIZ 中配置和显示外接摄像头的视频流 #### 配置 ROS 节点来发布摄像头图像 为了使外部 USB 摄像头能够在 RVIZ 中显示,首先需要通过合适的驱动节点将摄像头的数据作为 ROS topic 发布出去。对于大多数标准 USB 摄像头而言,`usb_cam` 或者 `cv_camera` 这样的包能够满足需求。 当使用 `cv_camera` 包时,在启动该节点之前应当确认所使用的设备 ID 正确无误[^1]。通常情况下,笔记本电脑内置的摄像头会被识别为 `/dev/video0` 对应于 device_id=0;而额外连接上的第一个USB摄像头则可能是 `/dev/video1` 即 device_id=1,依此类推。可以通过查看 `/etc/` 下面是否存在相应的 video 文件来确定具体的映射关系。 一旦明确了要使用的摄像头编号之后,则可以在终端执行如下命令以启动 cv_camera 的实例: ```bash roslaunch cv_camera cv_camera.launch device:=<your_device> ``` 这里的 `<your_device>` 应替换为你实际想要访问的那个摄像头路径或者是其对应的整数ID。 #### 显示图像至 RVIZ 完成上述步骤后,下一步就是在 RVIZ 中订阅由前面提到过的节点发布的图像消息并将其可视化出来。这一步骤相对简单得多,只需按照以下操作即可实现目标: - 打开一个新的终端窗口,并输入 `rviz` 启动图形界面工具; - 在左侧栏找到 "Add" 按钮点击它,随后会弹出一个小对话框列出了多种可添加的功能组件; - 从中挑选 “Image”,这是专门用于展示来自传感器或者其他来源传入图片帧的一个插件; - 添加成功以后,记得调整 Image 插件中的 Topic 字段指向正确的主题名称,默认情况下应该是类似于 `/cv_camera/image_raw` 的形式[^3]。 此时如果一切设置都正确的话,应该就能看到从指定摄像头获取的画面实时更新在 RVIZ 窗口中了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值