Hi_Link_LD2410C
シリアルポートに接続した Hi-Link HLK-LD2410C(24 GHz ミリ波人感レーダー)のドライバです。解読した目標の状態・距離・エネルギーを出力します。
処理内容
- 開始時にポートを 256000 bps(8N1)で開きます。センサを設定モードにし、ファームウェアのバージョン、距離分解能、現在の検出の設定(最大ゲート、感度、無人の時間)をコンソールに出力し、engineering_mode に従ってエンジニアリングモードを ON/OFF にしてから、設定モードを終了します。各コマンドは ACK を待ち、ACK が来なければエラーで停止します。
- apply_sensor_settings が true のとき、プロパティと違う検出の設定をセンサに書き込み、読み直して確かめます。この設定はセンサに保存され、電源を切っても残ります。false のときは、センサの設定を変えません。
- polling_ratio_in_ms ごとにシリアルポートを読みます。受信したバイト列から報告フレーム(ヘッダ F4 F3 F2 F1、テール F8 F7 F6 F5)を取り出し、長さ・AA/55/00 の位置・テールを確かめます。形式が合わないフレームは捨て、その数を停止時にコンソールに出力します。
- 正しいフレームごとに 1 回出力します。1 つのフレームから出す出力は、すべてバイト列を読んだ時刻をタイムスタンプに持ちます。
- polling_ratio_in_ms は 50 ms(20 Hz、報告のレートの 2 倍)以下に制限しているので、1 回の読み取りに入るフレームはふだん 1 つまでです。それでも複数のフレームが入った読み取り(それらのフレームは同じタイムスタンプになります)は回数を数え、停止時にコンソールに出力します。
使い方
- 主な出力:
moving_distance_in_m→Oscilloscope.inputA、stationary_distance_in_m→Oscilloscope.inputB、detection_distance_in_m→Oscilloscope.inputC、target_state→Oscilloscope.inputA。
データ形式
- target_state: 0 なし、1 動いている、2 静止、3 動いている+静止(4〜6 は背景ノイズ検出の実行中だけ)。
- 距離は cm から m に変換します。エネルギーは 0〜100 です。
- エンジニアリングモードのみ: moving_gate_energy と stationary_gate_energy は距離ゲート 0〜N ごとに 1 つの値を持ちます(工場出荷の設定では 9 個、1 ゲート 0.75 m)。light_level は 0〜255、out_pin は OUT ピンの状態です。基本モードではこの 4 つは出力しません。
注意事項
- port_name にシリアルデバイス(例: COM3、/dev/ttyUSB0)を指定してください。センサのボーレートは工場出荷値の 256000 である必要があります。
- 検出の設定は、apply_sensor_settings が true のときだけ変更します。プロパティの初期値は工場出荷値と同じです。初期値のまま apply_sensor_settings = true で 1 回動かすと、工場出荷の設定に戻ります。
- センサの報告周期は約 10 Hz です。
- バージョン 1.02: 生のデータ出力を解読した出力に置き換え、engineering_mode と検出の設定のプロパティを追加しました。
- バージョン 1.03:polling_ratio_in_ms は 1〜50 です。それより大きい値(バージョン 1.01 で保存された 100 など)では、エラーで停止します。
参考文献
- [1] Shenzhen Hi-Link Electronic Co., Ltd., HLK-LD2410C Serial Communication Protocol, V1.07, 2024-08-05. — 使っている機能:シリアルのフレーム、コマンド、報告データ。
プロパティ
| 名前 | 既定値 | 説明 |
|---|---|---|
port_name | COM1 | シリアルポート名(例: COM3、/dev/ttyUSB0)。空にはできません。 |
engineering_mode | true | true のとき、センサをエンジニアリングモードにし、ゲートごとのエネルギー・光センサの値・OUT ピンの状態を出力します。 |
polling_ratio_in_ms | 10 | シリアルポートを読む周期 [ms](1〜50。それ以外のときはエラーで停止します)。この上限で、ポーリングを報告のレート(約 10 Hz)の 2 倍の 20 Hz 以上に保ちます。 |
apply_sensor_settings | false | true のとき、下の 5 つの検出の設定をセンサに書き込みます(違う値だけ)。センサに保存され、電源を切っても残ります。 |
max_moving_gate | 8 | 動いている目標の最大ゲート(2〜8)。apply_sensor_settings が true のときだけ使います。 |
max_stationary_gate | 8 | 静止している目標の最大ゲート(2〜8)。apply_sensor_settings が true のときだけ使います。 |
no_one_duration_in_s | 5 | 最後に検出してから「なし」になるまでの時間 [s](0〜65535)。apply_sensor_settings が true のときだけ使います。 |
moving_sensitivity | 50,50,40,30,20,15,15,15,15 | ゲート 0〜8 の動きの感度。0〜100 の整数をカンマ区切りで 9 個。エネルギーがこの値を超えると検出します。100 にするとそのゲートでは検出しません。apply_sensor_settings が true のときだけ使います。 |
stationary_sensitivity | 0,0,40,40,30,30,20,20,20 | ゲート 0〜8 の静止の感度(形式は同じ)。ゲート 0、1 は設定できないので無視します。apply_sensor_settings が true のときだけ使います。 |
出力
| 名前 | 説明 |
|---|---|
target_state | 目標の状態: 0 なし、1 動いている、2 静止、3 両方(4〜6: 背景ノイズ検出)。 型: Integer32 |
moving_distance_in_m | 動いている目標の距離 [m]。 型: Float64 |
moving_energy | 動いている目標のエネルギー(0〜100)。 型: Integer32 |
stationary_distance_in_m | 静止している目標の距離 [m]。 型: Float64 |
stationary_energy | 静止している目標のエネルギー(0〜100)。 型: Integer32 |
detection_distance_in_m | 検出距離 [m]。 型: Float64 |
moving_gate_energy | 距離ゲート 0〜N ごとの動きのエネルギー(エンジニアリングモードのみ)。 型: Integer32 |
stationary_gate_energy | 距離ゲート 0〜N ごとの静止のエネルギー(エンジニアリングモードのみ)。 型: Integer32 |
light_level | 光センサの値、0〜255(エンジニアリングモードのみ)。 型: Integer32 |
out_pin | OUT ピンの状態。人を検出しているとき 1(エンジニアリングモードのみ)。 型: Integer32 |
RTMaps ツールキット ドキュメント