ROS2 run을 할 때 마다 arduino nano를 하드웨어적으로 해제했다가 연결해줘야 하는데(포트가 한번 설정되면 launch 가 끝나도 사용되는것으로 인식)
재 연결시 /dev/ttyUSB1로 바뀌는 경우가 있다.
그래서 nano의 USB 정보가 들어오면 해당 정보의 USB는 정의한 내용으로 잡히게 해달라는 규칙을 추가해야한다.
Arduino nano /dev/ttyUSB0
로 고정하기 위한 udev 규칙 생성
sudo nano /etc/udev/rules.d/99-arduino.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", KERNEL=="ttyUSB*", NAME="ttyUSB0", SYMLINK+="ttyUSB0", MODE="0666"
각 속성의 의미:
SUBSYSTEM: "tty" (시리얼 포트)
ATTRS{idVendor}: "1a86" (제조사 ID)
ATTRS{idProduct}: "7523" (제품 ID)
ATTRS{product}: "USB Serial" (제품명)
KERNEL: "ttyUSB*" (커널에서 인식하는 장치 이름 패턴)
NAME: "ttyUSB0" (지정할 장치 이름)
SYMLINK: "ttyUSB0" (심볼릭 링크)
MODE: "0666" (읽기/쓰기 권한)
2-1. arduino nano의 USB 정보 값
usb 1-1.3: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.64
usb 1-1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0
usb 1-1.3: Product: USB Serial
이 Arduino(CH341 칩셋)의 정보는:
Vendor ID: 1a86 (QinHeng Electronics)
Product ID: 7523 (CH341 USB to Serial converter)
Product Name: USB Serial
Device Path: 1-1.3 (USB 포트 위치)
Device Type: ch341-uart converter
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo bash -c 'echo "options ch341 break_on_timeout=0" > /etc/modprobe.d/ch341.conf'
sudo usermod -a -G dialout $USER
sudo reboot
재부팅 후 Arduino를 연결하면 항상 /dev/ttyUSB0
로 인식될 것입니다. 작동 여부를 확인하려면:
ls -l /dev/ttyUSB*
이 설정으로 Arduino를 재연결하거나 다른 USB 포트에 연결해도 항상 ttyUSB0로 인식 된다.