使用ros2创建调用USB摄像头的包并编写launch文件

首先在工作空间下创建一个包,如果没有工作空间,则使用

mkdir -p ~/ros2_workspace/src

进入到src目录,并执行以下命令创建一个新的包。假设你要创建一个名为my_package的包:

cd ~/ros2_workspace/src
ros2 pkg create --build-type ament_python capture_img

这个命令将会创建一个名为capture_img的包,它的类型是 Python 的构建类型(ament_python)。

进入在src路径下生成的capture_img文件夹,编写我们采集图片的节点

import cv2
import rclpy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge

def main():
    rclpy.init()

    # 创建 ROS 2 节点
    node = rclpy.create_node('capture_image')

    # 创建发布者,发布图像消息到 '/processed_image' 话题
    publisher = node.create_publisher(Image, '/capture_image', 10)

    cap = cv2.VideoCapture(0)
    while cap.isOpened():
        codec = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
        cap.set(cv2.CAP_PROP_FOURCC, codec)
        cap.set(cv2.CAP_PROP_FPS, 30)
        cap.set(cv2.CAP_PROP_FRAME_WIDTH, 300)
        cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 380)

        ret, frame = cap.read()
        if not ret:
            break

        # 在这里进行图像处理
        # 比如,你可以在这里添加你的图像处理代码

        # 创建 CvBridge 对象
        bridge = CvBridge()

        # 将 OpenCV 格式的图像转换为 ROS 消息格式
        img_msg = bridge.cv2_to_imgmsg(frame, encoding="bgr8")

        # 发布图像消息到 ROS 2 话题
        publisher.publish(img_msg)

        # 显示图像
        cv2.imshow('YOLO', frame)

        if cv2.waitKey(10) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

    # 退出 ROS 2 节点
    rclpy.shutdown()

if __name__ == '__main__':
    main()

将文件命名为capture.py,同时在同一个路径下生成一个空的__init__.py

接下来编写我们的launch文件

在/src/capture_img路径下新建一个launch文件夹,编写capture_img.launch.py

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='capture_img',  # 替换为你的包名
            executable='capture_img',  # 替换为你的节点文件名
            name='capture_img_node',  # 节点名称
            output='screen',  # 输出方式为屏幕
        )
    ])

但是现在如果直接编译的话install文件架里面可能会找不到launch文件,此时还需要修改setup.py

from setuptools import setup
from glob import glob
import os

package_name = 'capture_img'

setup(
    name=package_name,
    version='0.0.0',
    packages=[package_name],
    data_files=[
        ('share/ament_index/resource_index/packages',
            ['resource/' + package_name]),
        ('share/' + package_name, ['package.xml']),
        (os.path.join('share', package_name,'launch'), glob('launch/*.launch.py')),
    ],
    install_requires=['setuptools'],
    zip_safe=True,
    maintainer='qing',
    maintainer_email='qing@todo.todo',
    description='TODO: Package description',
    license='TODO: License declaration',
    tests_require=['pytest'],
    entry_points={
        'console_scripts': [
            'capture_img = capture_img.capture:main',
        ],
    },
)

修改后即可

colcon build

运行launch文件

source install/setup.bash
 ros2 launch capture_img capture_img.launch.py

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值