본문 바로가기
ROS

[ROS]디바이스 이름 고정

by 플레이코드 2024. 11. 29.
728x90

로봇에서 Ubuntu 컴퓨터 제어기에 외부 장비를 연결할 경우, 연결 순서나 연결 시점의 제어기 상태에 따라 장비이름이 다르게 설정된다.  rplidar의 경우  장비를 연결하거나 부팅할 때 ttyUSB0 나 ttyUSB1 등 같이 다양한 이름을 갖게 된다. 이 경우 하드웨어 설정 file과 하드웨어 연결이 일치하지 않아 문제가 발생하게 되기 때문에 이 이름을 고정할 필요가 있다. 
예를 들어 rplidar 실행화일인 launch file에 설정되는 항목 중 <param name=”serial_port”    type=”string” value=”/dev/ttyUSB0”/>와 같이 설정할 경우, 제어기를 켜거나 끌때 마다 USB0에서 USB1으로 변경될 수 있어, 경우에 따라 연결이 되지 않을 수도 있다.
고정하는 방법은 디바이스 고유 정보를 확인하고 이를 aliasing 해 주는 방식으로 진행한다. 

리눅스 커널의 디바이스 관리자인 udev 를 사용하여, udev 규칙 파일을 설정한다. 설정 규칙은 etc/udev/rules.d 의 99-usb-serial.rules 라는 파일에 저장되며, 제어기를 부팅할 때 마다 이 파일을 참조하여 디바이스 명칭을 일정하게 유지하여 준다. 

 

디바이스 고유 정보 확인

먼저 /dev 디렉토리로 이동하여 list 명령으로 디바이스 명칭을 찾는다.

cd /dev
ls -l

 

Device 명칭이 ttyUSB0 일 경우 고유 정보 확인

udevadm info /dev/ttyUSB0

 

ubuntu는 다음과 같은 결과를 보여준다.

P: /devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1.2/3-1.2:1.0/ttyUSB1/tty/ttyUSB1
N: ttyUSB1
L: 0
S: serial/by-path/pci-0000:00:14.0-usb-0:1.2:1.0-port0
S: serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb3/3-1/3-1.2/3-1.2:1.0/ttyUSB1/tty/ttyUSB1
E: DEVNAME=/dev/ttyUSB1
E: MAJOR=188
E: MINOR=1
E: SUBSYSTEM=tty
E: USEC_INITIALIZED=4624972
E: ID_BUS=usb
E: ID_VENDOR_ID=10c4
E: ID_MODEL_ID=ea60
E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller
E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI
E: ID_VENDOR_FROM_DATABASE=Silicon Labs
E: ID_VENDOR=Silicon_Labs
E: ID_VENDOR_ENC=Silicon\x20Labs
E: ID_MODEL=CP2102_USB_to_UART_Bridge_Controller
E: ID_MODEL_ENC=CP2102\x20USB\x20to\x20UART\x20Bridge\x20Controller
E: ID_REVISION=0100
E: ID_SERIAL=Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001
E: ID_SERIAL_SHORT=0001
E: ID_TYPE=generic
E: ID_USB_INTERFACES=:ff0000:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=cp210x
E: ID_MODEL_FROM_DATABASE=CP210x UART Bridge
E: ID_PATH=pci-0000:00:14.0-usb-0:1.2:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_1_2_1_0
E: ID_MM_CANDIDATE=1
E: DEVLINKS=/dev/serial/by-path/pci-0000:00:14.0-usb-0:1.2:1.0-port0 /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0
E: TAGS=:systemd:

 

VENDER_ID 정보와 MODEL_ID, SERIAL_SHORT 정보를 확인하고, 기록해 둔다.

 

규칙문서 수정 또는 작성

rules.d 이동하여 device symlink를 작성하고 udevadm을 다시 시작한다. 

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

 

위와 같이 입력하면, rules.d 디렉토리의 규칙 파일 99-usb-serial.rules 을 열어 수정할 수 있다.  

rplidar를 추가할 경우 다음과 같은 내용을 추가한다.

SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", ATTRS{serial}=="0001", SYMLINK+="rplidar"

 

 ATTRS 특성 설정을 위한 key word 이며, { } 포함된 키워드의 value 참조한다. idVender 제조사 아이디, idProduct 제품 아이디 serial 일련번호를 의미한다. SYMLINK+   symbolic link 더한다는 의미로 추가 device link(윈도위의 바로가기 개념) 만들어 준다

문서 작성을 마치면, 저장하고, udevadm을 재시작한다.

 

sudo udevadm control --reload-rules

 

재시작 후 ls -l 명령을 통해 설정 수정이 반영되었는지 확인하고, 재시작을 하여도 반영되지 않을 경우 reboot를 수행한다.

728x90
LIST