로봇에서 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를 수행한다.
'ROS' 카테고리의 다른 글
[ROS] ROS remote를 사용한 로봇 원격 제어 (3) | 2024.12.01 |
---|---|
[ROS] NUC mini PC 자동 Power up(전원 켜지면 자동 부팅) (4) | 2024.11.29 |
[ROS] rplidar launch file 내용 (1) | 2024.11.29 |
[ROS] serial 번호가 같은 2개 이상의 rplidar 사용 (2) | 2024.11.29 |