ページ

2013年10月28日月曜日

udevの設定をして、Linuxで複数センサのデバイス名をわかりやすい名前に変更する

ロボット用のセンサの多くは、USBでPCとの接続を行いシリアル通信によってセンサ情報を取得します。
また、独自に作成したマイコンボードをPCに接続するときは、FTDIなどのUSBシリアル変換ICを使って接続することが多々あると思います。

Windowsではポート番号でどのセンサと通信するかを管理しており、USBコネクタの物理的位置に依存してポート番号が割り当てられます。そのため、センサを挿す位置を固定しておけばポート番号とセンサの対応付けを行うことができます。
しかし、Linuxではカーネル起動からの認識順序によって/dev/ttyUSB*のようなデバイス名がふられるため、何かの原因で認識順序が変わるとデバイス名とセンサとの対応が崩れてしまいます。

これを解決するために、udevの設定を変更し、センサのシリアル番号を基準にセンサに割り振るデバイス名を変更してみました。

まず、とりあえずセンサを挿します。すると、自動的に認識され、/dev/ttyUSB*のような番号が割り当てられると思います。その番号をもとに、センサの情報を取得します。
参考ページ

udevadm info -a -n /dev/ttyUSB0

そして、その情報を下に、udevルールを記述します。
/etc/udev/rules.dの中に70-sensors.rulesのようなファイルを作成し、その中にルールを記述していきます。
参考ページ

Dynamixelサーボ(USB2Dynamixel)、TopURG、Xbox360コントローラを接続した際のルールを以下のように記述してみました。

KERNEL=="ttyUSB*", ATTRS{product}=="FT232R USB UART", ATTRS{serial}=="AH01FMSR", SYMLINK+="sensors/ttyUSB2Dynamixel"
KERNEL=="ttyACM*", ATTRS{product}=="URG-Series USB Driver", SYMLINK+="sensors/ttyTopURG"
KERNEL=="js*", ATTRS{name}=="Microsoft X-Box 360 pad", SYMLINK+="sensors/jsController"

※TopURGはシリアル名がドライバから読み取れないようで、2つのTopURGを区別するようなルールを記述することはできませんでした。
※FTDIのドライバなどでは、自動的にシリアル番号などの情報をもとに/dev/serial/by-id以下などにシンボリックリンクが作られるようです。単にセンサを区別するだけならこれを使えば良いかもしれません。(参考)

0 件のコメント:

コメントを投稿