Terabee社製の「TeraRanger Evo Mini USB」
数年前にI2Cの距離センサーを使うことがありました。自分の拙い技術で配線をして使っていたのであまり気に入ってはいませんでした。それ以来、USBなどで繋げるかっちりしたものを何となく探していました。当然、Pythonからも制御できるものです。
最近、Terabee社製の「TeraRanger Evo Mini USB」を見つけ、値段が4000~5000円程度(2020年1月)だったので、試しに買ってみました。
Terabee社は、3D TOFカメラ、TOF距離センサー、サーマルカメラなどを作っている会社です。スイスの国境に近いフランスの会社です。製品の用途は、ロボティクス、自動化、監視、IoTのようです。
購入は正規販売店のMouser Electronicsにしました。こちらを参照してください。他にも販売店はあったのですが、ホームページに「東京でのサポート」と書いてあったので、こちらにしました。
在庫は無く、1月に発注して納期まで2か月くらいかかりました。以下は適合証明書と本体の写真です。
動作確認
まずは、必要なものをこちらからダウンロードします。
データシート、マニュアル、TeraRanger Evo GUI(簡易GUI)をダウンロードしましょう。上の方には簡単な特徴なども書いてくれているので、読んでおくと良いと思います。
TeraRangerEvoInstaller_***.zip
を展開し、TeraRangerEvoInstaller_***.exe
をインストールします。
次に、動作の確認を行います。(ちなみに私の環境はWindows10 64bitです)
TeraRanger Evo Mini USB(以降、Evo Mini)をPCにつないで、スタートメニューからTeraRanger Evoを実行します。File - Connectで正常に距離が測定されていれば、動作確認OKです。
Pythonでの利用
マニュアル(英語なので、苦手な方は翻訳サイトを駆使しましょう)によれば、USBはシリアル制御で動くようです。
Pythonではpyserialがありますので、インストールされていない場合は「pip install pyserial」しておきましょう。
以下の条件で接続します。
- Baud rate
- 115200 bit/s
- Data bits
- 8
- Parity bit
- None
- Stop bit
- 1
また、簡易GUIのTeraRanger Evoによると、私の環境ではポートはCOM4でした。
Pythonインタプリタを起動します。(私はIDLEを使います)
import serial
conn = serial.Serial(port='COM4', baudrate=115200, bytesize=8, parity=serial.PARITY_NONE, stopbits=1)
conn.read()
conn.read() するとEvo Miniから何かの信号が帰ってきているのがわかります。
さらにマニュアルのP.20「5.1. USB/UART list of commands」に実行できるコマンドの一覧があります。以下のように設定します。
- PRINT OUT MODE
- ・TEXT
- ・BYTE配列で「00 11 01 45」
- PIXEL MODE
- ・1PX MODE
- ・BYTE配列で「00 21 01 BC」
- RANGE MODE
- ・LONG RANGE MODE
- ・BYTE配列で「00 61 03 E9」
import serial
import time
PRINTOUT_TEXT = bytearray(b'\x00\x11\x01\x45')
PX1 = bytearray(b'\x00\x21\x01\xBC')
RANGE_LONG = bytearray(b'\x00\x61\x03\xE9')
conn = serial.Serial(port='COM4', baudrate=115200, bytesize=8, parity=serial.PARITY_NONE, stopbits=1)
conn.write(PX1)
conn.write(RANGE_LONG)
conn.write(PRINTOUT_TEXT)
val = ''
for i in range(100):
res = conn.read().decode()
if res == '\n':
print(val)
val = ''
else:
val = val + res
上のスクリプトを実行すると以下のような結果になりました。非常に簡単にPythonで距離を測定することができました。