카메라 포트 번호 고정 가이드

왜 카메라 포트 고정이 필요한가?

USB 카메라를 매번 연결할 때마다 /dev/video0, /dev/video2 등의 번호가 달라지는 문제가 있습니다.
이로 인해 상단 카메라와 손목 카메라가 바뀌어 인식되면,
녹화 데이터가 뒤섞이거나 학습에 잘못된 영상이 사용될 위험이 있습니다.
이 문제를 udev 규칙을 통해 간단히 해결할 수 있습니다.


목적 및 개요

LeRobot 텔레오퍼레이션을 진행할 때, 여러 대의 카메라가 USB 포트를 통해 PC와 연결됩니다. 하지만 Ubuntu에서는
카메라를 연결할 때마다 포트 번호(/dev/video0, /dev/video2)가 자동으로 바뀌는 경우가 있습니다.

이로 인해 다음과 같은 문제가 발생할 수 있습니다.

이 가이드에서는 위 문제를 해결하기 위해,
각 카메라의 USB 포트 위치(KERNELS) 를 기반으로 고정 포트를 지정하는 udev 규칙 설정 방법을 설명합니다.

이 과정을 완료하면, USB 케이블을 재연결하더라도 항상 아래처럼 고정된 경로로 인식됩니다.


1. 카메라 정보 확인

먼저 연결된 카메라들의 장치 경로를 확인해야 합니다.

v4l2-ctl 도구를 설치합니다.

sudo apt install v4l-utils

연결된 비디오 장치 목록을 확인합니다.

v4l2-ctl --list-devices

출력 결과에서 확인하려는 카메라의 /dev/videoX 번호를 찾습니다. 일반적으로 /dev/video2, /dev/video4와 같은 짝수 번호가 USB 카메라입니다.

💡TIP
비디오 장치가 여러 개 표시되는 이유

각 카메라는 보통 2개의 장치(/dev/video2, /dev/video3)로 표시됩니다.
하나는 실제 영상 스트림용이고, 하나는 메타데이터용입니다.
짝수 번호가 일반적으로 영상 스트림용입니다.


2. 포트 위치(KERNELS) 확인

일부 저가형 웹캠은 시리얼 번호가 없거나 동일하게 표기될 수 있습니다.
이 경우 시리얼 번호 대신 USB 포트 위치(KERNELS) 정보를 사용해야 합니다.

각 카메라가 연결된 고유한 하드웨어 경로를 확인합니다.

udevadm info -a -n /dev/video2 | grep 'KERNELS=="[0-9]' | head -n 1

예시 출력:

KERNELS=="1-1:1.0"

다른 카메라도 동일하게 확인합니다.

udevadm info -a -n /dev/video4 | grep 'KERNELS=="[0-9]' | head -n 1

출력 예시:

KERNELS=="1-2:1.0"

경고 ⚠️ WARN
KERNELS 값이 안 보인다면

grep 'KERNELS=="[0-9]' 대신 grep 'KERNELS'만 사용해서 전체 결과를 확인해보세요.
USB 버스 위치를 나타내는 값을 찾으시면 됩니다.


3. udev 규칙 파일 생성

이제 확인한 KERNELS 값을 기반으로, 고정된 심볼릭 링크(/dev/cam_top, /dev/cam_wrist)를 생성합니다.

sudo nano /etc/udev/rules.d/99-serial.rules

다음 내용을 추가합니다:

SUBSYSTEM=="video4linux", KERNELS=="1-1:1.0", ATTR{index}=="0", SYMLINK+="cam_top"
SUBSYSTEM=="video4linux", KERNELS=="1-2:1.0", ATTR{index}=="0", SYMLINK+="cam_wrist"

💡TIP
심볼릭 링크 이름 변경

cam_top, cam_wrist 대신 cam_left, cam_right 또는 cam_hand
본인이 구분하기 쉬운 이름으로 정하셔도 됩니다.


4. 규칙 적용 및 확인

규칙을 적용합니다.

sudo udevadm control --reload-rules
sudo udevadm trigger

적용 후, 새로운 경로를 확인합니다.

ls -l /dev/cam_*

예시 출력:

lrwxrwxrwx 1 root root 7 1월 10 15:30 /dev/cam_top -> video2
lrwxrwxrwx 1 root root 7 1월 10 15:30 /dev/cam_wrist -> video4

성공SUCCESS
이제 완벽히 고정되었습니다!

이제 카메라를 재연결하더라도 /dev/cam_top, /dev/cam_wrist로 항상 동일하게 인식됩니다.


주의사항

경고 ⚠️ WARN
물리적 USB 포트 위치 고정

이 방식은 물리적인 USB 포트 위치를 기준으로 고정하는 방식입니다.
따라서 카메라 케이블을 다른 USB 포트에 꽂으면 인식이 되지 않거나 경로가 바뀔 수 있습니다.
앞으로는 정해진 포트에만 해당 카메라를 꽂아서 사용해야 합니다.


다음 단계