dwm_loc_get

測距アンカーまでの最新の距離を取得し、位置を取得します。イベントが生成され、すべてのTWR測定が完了するとステータスが変更され、新しい位置データがユーザーに提供されます。低電力モードを使用している場合も、同様に動作します。

アンカー ノードの場合、位置と距離は、自動位置決め手順が完了している場合にのみ使用できます。自動位置決め手順は、BLE インターフェイス経由で実行されます。

void dwm_loc_get(dwm_loc_data_t *loc);
パラメータ
  • output -- ステータスコード, [position], [cnt, {an_pos, addr, distance, pqf}]

  • cnt -- 0,1,2,3,4 (アンカーまでの距離)

  • an_pos -- 位置 (距離に対応するアンカーの位置)

  • addr -- 16 ビット整数 (特定のアンカーの UWB アドレス/ID)

  • distance -- 32 ビット整数 (特定のアンカーまでの距離 (ミリメートル))

  • pqf -- 8 ビット整数 (品質係数)

注釈

パラメータ an_posタグ ノード にのみ適用されます

Cコード例

dwm_loc_data_t loc;
int rv, i;
/* if pos_available is false, position data are not read, and the function returns without error */
rv: dwm_loc_get(&loc);

if (0 == rv) {
if (loc.pos_available) {
             printf("[%ld,%ld,%ld,%u] ", loc.pos.x, loc.pos.y, loc.pos.z,
                     loc.pos.qf);
}
     for (i: 0; i < loc.anchors.dist.cnt; ++i) {
             printf("%u)", i);
             printf("0x%04x", loc.anchors.dist.addr[i]);
             if (i < loc.anchors.an_pos.cnt) {
printf("[%ld,%ld,%ld,%u]", loc.anchors.an_pos.pos[i].x,
                                     loc.anchors.an_pos.pos[i].y,
                                     loc.anchors.an_pos.pos[i].z,
                                     loc.anchors.an_pos.pos[i].qf);
             }
             printf("=%lu,%u ", loc.anchors.dist.dist[i], loc.anchors.dist.qf[i]);
     }
     printf("\n");
} else {
     printf("err code: %d\n", rv);
}

SPI/UART の例 1 (タグ ノード)

TLV 要求

タイプ

長さ

0x0C

0x00

タイプ 0x0C はコマンド loc_get を意味します

TLV 応答

タイプ

長さ

価値

タイプ

長さ

価値

タイプ

長さ

価値

0x40

0x01

0x00

0x41

0x0D

int32 - ミリメートル単位の x 座標

int32 - ミリメートル単位の y 座標

int32 - ミリメートル単位の Z 座標

uint8 - 位置品質係数 (パーセント単位)

0x49

0x51

uint8 -距離の数

位置と距離番号。 1

位置と距離 nr.2、3、4

int16 - UWB アドレス

uint32 - ミリメートル単位の距離

uint8 - パーセント単位の距離品質係数

3 x int32 + uint8 - x、y、z (ミリメートル) + 品質係数 (パーセント)

...

0x4b 0x0a 0x00 0x00 0x1f 0x04 0x00 0x00 0x9c 0x0e 0x00 0x00 0x64

0x04

0xab 0xbc

0x0e 0x03 0x00 0x00

0x64

...

...

タイプ 0x40 は、前のコマンドの ステータスコード を意味します
タイプ 0x41 は位置を意味します
タイプ 0x49 は測距アンカーの位置と距離を意味します

SPI/UART の例 2 (アンカー ノード)

TLV 要求

タイプ

長さ

0x0C

0x00

タイプ 0x0C はコマンド loc_get を意味します

TLV 応答

タイプ

長さ

価値

タイプ

長さ

価値

タイプ

長さ

価値

0x40

0x01

0x00

0x41

0x0D

int32 - ミリメートル単位の x 座標

int32 - ミリメートル単位の y 座標

int32 - ミリメートル単位の Z 座標

uint8 - 位置品質係数 (パーセント単位)

0x48

0x63

uint8 -距離の数

距離番号。 1

距離 nr.2,..., nr. 14

int16 - UWB アドレス

uint32 - ミリメートル単位の距離

uint8 - パーセント単位の距離品質係数

...

0x4b 0x0a 0x00 0x00 0x1f 0x04 0x00 0x00 0x9c 0x0e 0x00 0x00 0x64

0x0E

0xab 0xbc

0x0e 0x03 0x00 0x00

0x64

...

タイプ 0x40 は、前のコマンドの ステータスコード を意味します
タイプ 0x41 は位置を意味します
タイプ 0x48 は測距アンカーの距離を意味します