/dev/videoX
장치 간의 관계도 다룹니다.즉, 커널은:
운영체제는 하나의 물리적 장치(RealSense 카메라)에서 오는 여러 데이터 스트림을 구분하기 위해 여러 가상 장치(/dev/videoX
)를 만듭니다. 각 가상 장치는 물리적 장치의 특정 스트림(예: Depth, RGB, IR 등)에 대응됩니다.
uvcvideo
)가 전체 RealSense 카메라를 관리/dev/videoX
로 분리하여 제공합니다./dev/videoX
)를 통해 각 스트림을 처리하고 접근할 수 있도록 합니다./dev/videoX
마다 별도의 커널이 존재하지 않고, 하나의 커널이 여러 스트림을 처리하고 각 스트림을 /dev/videoX
형태로 분리해 주는 것입니다.특정 위치의 물리적 USB port
에 연결된 realsense는, 무조건 "realsense%d" 이름의 SYMLINK를 가지도록 규칙을 정하자.Bus 010 Device 004: ID 8086:0b07 Intel Corp. Intel(R) RealSense(TM) Depth Camera 435
Bus 001 Device 007: ID 8086:0b07 Intel Corp. Intel(R) RealSense(TM) Depth Camera 435
Bus 010 Device 002
:
Bus 010
: Device 002
: 두 번째 장치
라는 의미ID 8086:0b07
:
8086
:8086
은 Intel의 고유한 ID0b07
: Intel Corp. Intel(R) RealSense(TM) Depth Camera 435
:
Intel Corp.
: 이 장치를 만든 회사는 Intel입니다.Intel(R) RealSense(TM) Depth Camera 435
: 이 장치의 이름은 Intel RealSense 435 깊이 카메라입니다. 이 카메라는 3D 깊이 데이터를 캡처할 수 있는 카메라입니다.가상 장치(virtual devices)
를 만듭니다. 여러 개의 /dev/videoX 장치들은 하나의 물리적인 장치에 있는 여러 스트림을 구분해서 접근할 수 있게 해주는 것입니다.
/dev/video%d
에 연결되어 있는지 확인하는 방법은 다음과 같습니다.v4l2-ctl
명령어로 장치 확인v4l2-ctl
명령어로 연결된 장치와 그에 해당하는 /dev/video%d
파일을 확인할 수 있습니다.v4l2-ctl --list-devices
/dev/video%d
파일들을 보여줍니다.Intel(R) RealSense(TM) Depth Camera 435
와 그에 연결된 /dev/video0
, /dev/video1
, ... 파일들을 찾을 수 있습니다.Intel(R) RealSense(TM) Depth Ca (usb-0000:00:14.0-6):
/dev/video12 # depth
/dev/video13 # 메타데이터 스트림
/dev/video14 # 적외선 센서(Infrared Sensor)
/dev/video15 # 메타데이터 스트림
/dev/video16 # rgb
/dev/video17 # 메타데이터 스트림
/dev/video%d
로 부터 KERNEL 찾기xxx@xxx-company-desktop:~/Desktop$ udevadm info -q path /dev/video0
/devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:45:00.3/usb10/10-4/10-4:1.0/video4linux/video0
mvp-510a@d907:~/workspace/next-navigation/bringup$ udevadm info -q path /dev/video12
/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/video4linux/video12
mvp-510a@d907:~/workspace/next-navigation/bringup$ udevadm info -q path /dev/video13
/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/video4linux/video13
mvp-510a@d907:~/workspace/next-navigation/bringup$ udevadm info -q path /dev/video14
/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/video4linux/video14
mvp-510a@d907:~/workspace/next-navigation/bringup$ udevadm info -q path /dev/video15
/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6:1.0/video4linux/video15
realsense0
)에 대해 심볼릭 링크(일종의 바로가기)를 설정하는 방법lsusb
를 통해 장치가 연결된 위치(포트)를 파악한 다음,udevadm info -q path
로 해당 장치의 커널 경로(KERNELS 위치)를 확인realsense0
이라는 이름으로, 특정 장치 파일에 접근할 수 있게 설정하고 싶을 때, lsusb
명령어를 사용하여 연결된 USB 장치 목록
을 확인어떤 포트에 있는지
를 알 수 있음udevadm info -q path
명령어를 사용하여 경로
를 찾습니다.해당 장치 파일
과 관련된 커널 경로를 보여줍니다. echo '
SUBSYSTEM=="video4linux", KERNELS=="2-3.1", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b07", ENV{ID_USB_INTERFACE_NUM}=="00", ATTR{index}=="0", SYMLINK+="realsense0"
SUBSYSTEM=="video4linux", KERNELS=="2-3.2", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b07", ENV{ID_USB_INTERFACE_NUM}=="00", ATTR{index}=="0", SYMLINK+="realsense1"
SUBSYSTEM=="video4linux", KERNELS=="2-3.3", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b07", ENV{ID_USB_INTERFACE_NUM}=="00", ATTR{index}=="0", SYMLINK+="realsense2"
SUBSYSTEM=="video4linux", KERNELS=="2-2.1", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b07", ENV{ID_USB_INTERFACE_NUM}=="00", ATTR{index}=="0", SYMLINK+="realsense3"
' | tee /etc/udev/rules.d/realsense.rules
USB 포트
와 특정 조건에 맞는 Intel Realsense 카메라 장치가 연결될 때마다 realsense0
, realsense1
등)으로 접근할 수 있게 하기 위해 udev
규칙을 설정하는 것입니다. udev
규칙이란?udev
는 Linux 시스템에서 장치가 연결되거나 제거될 때 실행되는 규칙을 정의할 수 있는 시스템realsense0
라는 이름의 심볼릭 링크를 만들 수 있습니다.tee /etc/udev/rules.d/realsense.rules
명령어를 사용하여 /etc/udev/rules.d/realsense.rules
파일을 생성하거나 업데이트합니다. udev
규칙을 정의하는 파일입니다.각 줄은 특정 조건에 맞는 장치가 연결될 때 적용될 규칙을 정의합니다.
예시 규칙:
SUBSYSTEM=="video4linux", KERNELS=="2-3.1", ATTRS{idVendor}=="8086", ATTRS{idProduct}=="0b07", ENV{ID_USB_INTERFACE_NUM}=="00", ATTR{index}=="0", SYMLINK+="realsense0"
2-3.1
에 연결되었을 때 적용됩니다.8086
일 때 적용됩니다. (Intel의 벤더 ID)0b07
일 때 적용됩니다.00
일 때 적용됩니다.0
일 때 적용됩니다./dev/realsense0
이라는 심볼릭 링크가 생성됩니다.다른 줄들도 비슷한 규칙을 정의하고 있으며, USB 포트와 연결된 장치에 따라 각각 realsense1
, realsense2
, realsense3
이라는 심볼릭 링크를 만듭니다.
Intel Realsense
카메라가 연결될 때마다 udev
가 자동으로 심볼릭 링크를 만들어 줍니다. 2-3.1
포트에 연결된 카메라는 /dev/realsense0
이라는 이름으로 접근할 수 있게 됩니다./dev/realsense%d
) 규칙을 생성해주기 idx_physical_port: str = "/sys" + subprocess.Popen(
"udevadm info --query=path --name=/dev/realsense%d" %
self.args.camera_idx,
shell=True,
bufsize=64,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
close_fds=True).stdout.read().decode('utf-8').strip().split('\n')[0]
for a_connected_device in rs_context.devices:
device_physical_port = a_connected_device.get_info(
rs.camera_info.physical_port)
target RGBD camera의 physical port
와 일치하는 디바이스를 찾아서 연결