(04)PythonでTOF距離センサー

 2nd January 2023 at 11:20am

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で距離を測定することができました。


Homeへプログラミングの記事Topへ