ROS on Ubuntu でUSB interfaceのセンサを使う場面がよくある,というかそればかりだ.
Packageでは対象となるデバイスが接続されているポート? (e.g. /dev/ttyUSB0) を指定する必要がある.
しかし,これらのポートナンバーはデバイス固有ではなく,USBに挿した順番によって変動する.
複数のデバイスを使用する際イロイロ面倒くさいので,デバイス固有の名前を付けたい.以下はその手順のまとめ.
デバイス固有の情報を取得する
udevadm info -a -n /dev/ttyUSB*
このコマンドでイロイロ出てくる.-a -nとかのオプションに関しては知らぬ.
isVendor とか isProduct など,デバイス固有の情報が分かる.
デバイス固有の名前を定義する
/etc/udev/rule.d/ にユーザー定義の設定ファイルを作成する. (e.g. 71-device.rules)
先頭の数字は優先順位だそうで.
isVendor, isProduct product などのデバイス固有のキーと名前を記述する.
デバイスを探し出すキーの項目(e.g. isVendor, isProduct, product)は == で,新たに設定する項目は = で記述する.
ATTRS{idVendor}=="*XXXX*", ATTRS{idProduct}=="*XXXX*",ATTRS{serial}=="*XXXXXX*", ATTRS{product}=="FT232R USB UART", MODE="0666", SYMLINK="robotics/USB2Dynamixel"
ATTRS{idVendor}=="*XXXX*", ATTRS{idProduct}=="*XXXX*", ATTRS{product}=="USB-Serial Controller", MODE="0666", SYMLINK="robotics/Pioneer-3DX"
面倒だから,ここでアクセス権限についても記述する.(e.g. MODE="0666",読み書き可?)
デバイス関連のサービスを再起動
sudo service udev restart
以上.