From bf2b527a303bd7b97c36f7bcbe96f1bcd9e0fdd6 Mon Sep 17 00:00:00 2001 From: chyoo Date: Wed, 30 Sep 2026 15:14:40 +0900 Subject: [PATCH] feat: parameterize Yahboom camera identity for multiple cameras --- README.md | 20 ++++++++++++++++++++ src/yahboom_camera/launch/camera.launch.py | 12 ++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c7a1c38..16a1289 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,29 @@ LMS 전용 템플릿 저장소입니다. 설치 폴더: `[lms-nav2-yahboom-camer LMS에서 설치 -> 빌드 -> 실행합니다. - ROS_DOMAIN_ID는 ESP32 설정과 일치시킵니다. GPU 가속은 끕니다. - 컨테이너 장치: video_device (기본 /dev/video0) +- 노드명: camera_name (기본 yahboom_camera) +- 토픽 네임스페이스: camera_namespace (기본 빈 문자열) +- 영상 프레임: frame_id (기본 camera) - SLAM과 Localization은 동시에 실행하지 않습니다. - 실차 검증 전 소스입니다. 바퀴를 띄우고 비상정지와 명령 타임아웃을 확인하세요. 원본 소스: https://github.com/KingKiser/hkit_yahboom_ws 작성자 박승휘, 원본 package.xml 저작자 Leo Cho, 원본 라이선스 표기 Apache 2.0. 재배포 전 자산 라이선스를 확인하세요. + +## 여러 카메라 사용 + +카메라별 모듈에 서로 다른 장치, 노드명, 네임스페이스, 프레임을 지정합니다. + +```text +video_device:=/dev/video0 camera_name:=front_camera camera_namespace:=front frame_id:=front_camera_link +video_device:=/dev/video2 camera_name:=rear_camera camera_namespace:=rear frame_id:=rear_camera_link +``` + +영상 토픽은 `/front/image_raw`, `/rear/image_raw`로, 카메라 정보 토픽은 +`/front/camera_info`, `/rear/camera_info`로 분리됩니다. 기본 파라미터로 실행하면 +기존 토픽명과 프레임을 유지합니다. 장치 번호는 실제 기체에서 확인하세요. + +각 모듈의 설치 폴더와 컨테이너 이름도 달라야 합니다. 현재 공통 LMS 실행기는 +정식 야붐 카메라 폴더명을 기준으로 장치를 전달하므로, 임의 이름의 커스텀 모듈은 +별도로 실행 스크립트의 장치 전달 및 빌드/런치 대상을 설정해야 합니다. diff --git a/src/yahboom_camera/launch/camera.launch.py b/src/yahboom_camera/launch/camera.launch.py index 6e068ee..96b75fb 100644 --- a/src/yahboom_camera/launch/camera.launch.py +++ b/src/yahboom_camera/launch/camera.launch.py @@ -1,5 +1,3 @@ -import os -from ament_index_python.packages import get_package_share_directory from launch import LaunchDescription from launch.actions import DeclareLaunchArgument from launch.substitutions import LaunchConfiguration @@ -8,10 +6,16 @@ from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ DeclareLaunchArgument("video_device", default_value="/dev/video0"), - Node(package="usb_cam", executable="usb_cam_node_exe", name="yahboom_camera", + DeclareLaunchArgument("camera_name", default_value="yahboom_camera"), + DeclareLaunchArgument("camera_namespace", default_value=""), + DeclareLaunchArgument("frame_id", default_value="camera"), + Node(package="usb_cam", executable="usb_cam_node_exe", + name=LaunchConfiguration("camera_name"), + namespace=LaunchConfiguration("camera_namespace"), output="screen", parameters=[{ "video_device": LaunchConfiguration("video_device"), "image_width": 640, "image_height": 480, "framerate": 15.0, - "pixel_format": "mjpeg2rgb", "frame_id": "camera", + "pixel_format": "mjpeg2rgb", + "frame_id": LaunchConfiguration("frame_id"), }]), ])