/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 435Bus 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와 일치하는 디바이스를 찾아서 연결