本ページではSICK社製レーザーレンジファインダ LMS200を、開発したUSB-シリアル変換器で接続した事例について紹介します。
現状で、
Windowsはいろいろと制約が多い関係で、いまのところ、普通?の方法では500kbpsの通信はできていません。 レジストリを書き換えて(FTDIの解説をヒントに小細工)、Windowsをだまして実現しています。
この項準備中。
Linuxでは、FTDIのドライバが、現行の2.6では標準で搭載されているため、USBコネクタに接続するだけで、認識されます。
(認識の確認は、刺したところでrootでdmesgコマンド)
あとは、普通にシリアルポート用のプログラムを書くだけで、通信速度設定でB500000を指定するのみです。
以下、動作を確認したプログラムをご参考までおいておきます。
LMS200との通信クラス (2008/03/15, 12,179 bytes)
180[deg]/0.25[deg]スキャンで距離データをダンプするプログラム (2008/03/15, 4,145 bytes)
同、グラフ表示(以下参照) (2008/03/15, 5,839 bytes)
EGGX用g++スクリプト (2008/03/15, 1,274 bytes)
sickcomif.ccは、LMS200と通信するために開発したC++のクラスです。
最低限のテレグラムコマンドしか実装していませんが、一応、データの検出はできます。
ただし、かなりいい加減&動けばいいやなので、通信がちゃんとつながらない場合があります(おそらく、ハンドシェークでなにかミスがある)。
![]() |
sickmap.cc の実行例 |
sickmap.ccは右図のように、画面にリアルタイムに検出値を表示します。
ただし、コンパイルにはEGGX / ProCALLが必要です。また力任せに書くため、PCにもそれなりにスペックが必要です(Xが速ければいい)。
EGGX付属のコンパイルスクリプト egg は C言語プログラムのコンパイル用なので、それを修正して作ったeg++を用いて、
eg++ -o sickmap sickmap.cc
でコンパイルして使います。
sickcomif.cc は3年ほど前に勢いで作ったこともあって、すでにわからなくなっている部分もあり、お問い合わせや拡張にはお答えできない可能性が大です。が、ご自分で適当に書き換えて使う分にはいっこうにかまいません。
なお、通信ポートの設定については、SickLMSIF::SetComSpeed(int baud,int local) をご覧ください。シリアルポートの使い方の例にはなるかと思われます。
蛇足:制御専用機なのでrootでログインして、そのまま作業しています。気にしないでください:-)