Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- nextjs
- 이미지 데이터 타입
- silent printing
- ffi-napi
- Failed to compiled
- ELECTRON
- augmentedDevice
- rolldown
- device in use
- react-native
- github pdf
- Recoil
- animation
- react-native-dotenv
- adb connect
- github 100mb
- Can't resolve
- vercel git lfs
- custom printing
- github lfs
- electron-packager
- npm package
- html
- camera permission
- 티스토리 성능
- Each child in a list should have a unique "key" prop.
- dvh
- Git
- camera access
- adb pair
Archives
- Today
- Total
Bleeding edge
ROS 2에서 카메라 노드 제어: Inactive vs Subprocess 본문
ROS 2에서 카메라 노드 제어: Inactive vs Subprocess
로봇 시스템을 개발하다 보면, 센서나 카메라 노드를 켰다 껐다(on/off) 해야 하는 경우가 많습니다. 예를 들어, 카메라를 계속 켜두면 전력이나 리소스를 많이 차지할 수 있고, 다른 프로세스에서 카메라 장치를 접근해야 하는 경우도 있죠. 이때 ROS 2에서는 크게 두 가지 접근 방식이 있습니다:
- Lifecycle Node의 inactive 상태 활용
- 프로세스(subprocess) 단위로 노드를 완전히 종료 후 재실행
1. Lifecycle Node의 inactive
상태
ROS 2에는 Managed Lifecycle Node라는 개념이 있습니다.
Lifecycle Node는 노드가 여러 상태(unconfigured → inactive → active → finalized
)를 가지며, 필요에 따라 상태 전환을 할 수 있습니다.
active
: 토픽 publish/subscription, 타이머, 서비스 등 모든 콜백이 동작inactive
: 파라미터 설정만 가능, 퍼블리시/콜백은 멈춤deactivate()
호출 시 노드가 리소스를 잠시 놓고 대기하는 느낌
장점
- 노드 프로세스를 유지한 채 빠르게 on/off 가능
- 연속적인 토글이 필요한 경우 유리
ros2 lifecycle set /node_name deactivate
명령어나 서비스 호출로 제어 가능
단점
- 디바이스 핸들을 해제하지 않을 수 있음 (카메라 드라이버 구현에 따라 다름)
- 즉, inactive 상태여도 여전히 카메라 리소스를 독점할 수 있음
- 전력 절감 효과가 제한적일 수 있음
2. Subprocess 기반 실행/종료
두 번째 방법은 아예 카메라 노드를 프로세스 단위로 실행/종료하는 방식입니다.
즉, 버튼 이벤트나 서비스 호출 시:
- 시작 →
ros2 launch my_pkg camera_launch.py
실행 - 중지 → 해당 프로세스
terminate()
또는kill
Python 예시:
import subprocess
process = None
def start_camera():
global process
process = subprocess.Popen(
["ros2", "launch", "my_camera_pkg", "camera_launch.py"]
)
def stop_camera():
global process
if process:
process.terminate()
process = None
장점
- 카메라 디바이스 핸들을 확실히 해제
- 메모리, CPU, GPU 등 자원 완전 반환
- 다른 노드나 프로그램이 카메라를 다시 사용할 수 있음
단점
- 다시 실행할 때 초기화 시간이 걸림 (드라이버 로드, 장치 open)
- 토글이 잦을 경우 지연 발생
어떤 방식을 선택해야 할까?
리소스 독점이 중요한 센서(카메라, LiDAR 등)
→ Subprocess 방식이 더 적합합니다.
→ 프로세스를 종료하면 디바이스 핸들이 완전히 닫혀 충돌이 방지됩니다.빠른 전환만 필요하고 리소스 충돌 위험이 적은 경우
→ Lifecycle Nodeinactive
사용도 가능.
결론
- USB/MIPI 카메라처럼 장치 리소스를 독점하는 하드웨어라면 → 프로세스 종료/재실행
- 단순히 토픽 퍼블리시만 잠시 멈추고 싶을 때라면 → Lifecycle inactive
'CS' 카테고리의 다른 글
ROS2 DDS 환경 설정 확인하기: `ps` 명령어 활용 가이드 (0) | 2025.08.19 |
---|---|
ROS 2 통신의 기반, DDS(Data Distribution Service)란 (2) | 2025.08.10 |
유무선 네트워크 본딩 설정 방법 (Bonding) (0) | 2025.02.25 |
zsh: command not found: code - 해결방법 (0) | 2023.06.15 |
CORS (0) | 2022.09.01 |