DashboardのCSVログ形式

この章を読みやすいHTMLページで表示します。

「インターフェースとプロトコル」の「DashboardのCSVログ形式」の章を、HTMLページとして再現したものです。不明な点がありましたら、次を開いてください:この章だけの元のPDF(111〜126ページ)(左上にも固定表示)。目次:全章。

CSVログファイルの形式(DashboardバージョンV7.000以降)

DashboardバージョンV7.000以降のCSVログファイルでは、各イベントが1行のCSVとしてログに記録され、イベントの種類ごとに行の形式が異なります。ただし、行の先頭部分はすべての種類の行で共通です。

CSVログファイルの数行の例を次に示します:

T2021_11_04__173001_581,user,41,17,14,4.675,2.714,0.250,2,975,100

T2021_11_04__173001_581,user,41,17,15,4.665,2.708,0.250,2,975,114

T2021_11_04__173001_581,user,41,17,26,4.073,1.987,0.250,2,3462,128

T2021_11_04__173001_581,user,41,17,27,4.075,1.987,0.250,2,3462,141

T2021_11_04__173001_581,user,41,17,28,3.588,1.979,0.250,2,3496,155

T2021_11_04__173001_581,user,41,17,29,3.592,1.978,0.250,2,3496,169

T2021_11_04__173001_701,user,43,15,nl

T2021_11_04__173001_728,user,43,27,nl

T2021_11_04__173001_756,user,43,29,nl

行の共通部分には、最初の3つのフィールドが含まれます:

「T2021_11_04__173001_581」– この行のデータのタイムスタンプ:2021.11.04、17:30:01.581

「user」– ユーザー名(将来用に予約)。将来のバージョンでは、Dashboardはユーザーのログインに対応する予定です

「41」– 行の種類のID。行の種類によって、以降のフィールドの形式が異なります。

データフィールドには、いくつかの共通の特殊コードがあります:

“nl” – ライセンスなし。このフィールドに値が入るには、何らかのライセンスが必要です

“na” – 該当なし。このフィールドに該当するデータがありません。例えば、モバイルビーコンの位置を特定できなかった場合、X、Y、Z座標のフィールドには「na」が入ります。

以降の章では、各種類の行について説明します。

行の種類ID 01 – マップファイルへのリンク

この行は、マップファイルが自動で保存されたとき、またはユーザーが「Save map」ボタンを押して保存したときに記録されます。

行のフィールド:

N

フィールドの説明

0

タイムスタンプ(共通フィールド)

1

ユーザー名(共通フィールド)

2

01 – 行の種類ID(マップファイルへのリンク)

3

その時点で保存されたマップファイルの名前

行の種類ID 41 – Marvelmindプロトコルのストリーミングレコード

この行は、「Interfaces」セクションのモデムのプロトコル設定が「Marvelmind」のときに記録されます。

Marvelmindプロトコルには複数の種類のレコードがあり、それぞれログファイルの異なる行に対応します。各行については、以下のサブ章で説明します。

モバイルビーコンの位置(41 17)または(41 129)

行のフィールド:

N

フィールドの説明

0

タイムスタンプ(共通フィールド)

1

ユーザー名(共通フィールド)

2

41 – 行の種類ID(Marvelmindプロトコルのストリーミング)

3

17(0x0011)– モバイルビーコンの位置のデータコード

129(0x0081)– モバイルビーコンの位置のデータコード(リアルタイムタイムスタンプ付きストリーミング)

4

モバイルビーコンのアドレス

5

モバイルビーコンのX座標、m

6

モバイルビーコンのY座標、m

7

モバイルビーコンのZ座標、m

8

フラグ:

ビット0:1 – 座標は利用できません。X、Y、Zフィールドのデータは使用しないでください。

ビット1…6:予約

ビット7:– 1 – ジオフェンスゾーン外

9

ヨー角とフラグ:

ビット0…11:モバイルビーコンペアのヨー角、0.1度単位(0…3600)

ビット12:1 – 座標はビーコンペアの中心を示します。0 – 座標は指定したモバイルビーコン(hedgehog)を示します

10

時間シフト、ms。超音波の発信から、この行の位置が計算されるまでの経過時間

固定ビーコンの位置(41 18)

行のフィールド:

N

フィールドの説明

0

タイムスタンプ(共通フィールド)

1

ユーザー名(共通フィールド)

2

41 – 行の種類ID(Marvelmindプロトコルのストリーミング)

3

18(0x0012)– 固定ビーコンの位置のデータコード

4

固定ビーコンのアドレス

5

ビーコンのX座標、m

6

ビーコンのY座標、m

7

ビーコンのZ座標、m

8

予約フィールド

モバイルビーコンから固定ビーコンまでの生の距離(41 4)または(41 132)

行のフィールド:

N

フィールドの説明

0

タイムスタンプ(共通フィールド)

1

ユーザー名(共通フィールド)

2

41 – 行の種類ID(Marvelmindプロトコルのストリーミング)

3

4(0x0004)– 生の距離のデータコード

132(0x0084)– 生の距離のデータコード(リアルタイムタイムスタンプ付きストリーミング)

4

モバイルビーコン(hedgehog)のアドレス

5

N – この行に含まれる距離の数

6

N個の距離サブレコード(2*N個のフィールド)、下記参照

6+N*2+1

時間シフト、ms。超音波の発信から距離の測定までの経過時間

距離サブレコードのフィールド:

0

固定ビーコンのアドレス

1

固定ビーコンまでの距離

IMUの生データ(41 3)または(41 131)

この行には次が必要です:MMSW0005 ライセンス。

行のフィールド:

N

フィールドの説明

0

タイムスタンプ(共通フィールド)

1

ユーザー名(共通フィールド)

2

41 – 行の種類ID(Marvelmindプロトコルのストリーミング)

3

3(0x0003)– IMUの生データのデータコード

131(0x0083)– IMUの生データのデータコード(モバイルビーコンでリアルタイムタイムスタンプが有効な場合)

4

モバイルビーコン(hedgehog)のアドレス

5

加速度センサー、X軸、1 mg/LSB

6

加速度センサー、Y軸、1 mg/LSB

7

加速度センサー、Z軸、1 mg/LSB

8

ジャイロスコープ、X軸、0.0175 dps/LSB

9

ジャイロスコープ、Y軸、0.0175 dps/LSB

10

ジャイロスコープ、Z軸、0.0175 dps/LSB

11

コンパス、X軸、1100 LSB/Gauss

12

コンパス、Y軸、1100 LSB/Gauss

13

コンパス、Z軸、980 LSB/Gauss

IMUフュージョンデータ(41 5)または(41 133)

この行には次が必要です:MMSW0005 ライセンス。

行のフィールド:

N

フィールドの説明

0

タイムスタンプ(共通フィールド)

1

ユーザー名(共通フィールド)

2

41 – 行の種類ID(Marvelmindプロトコルのストリーミング)

3

5(0x0005)– IMUフュージョンデータのデータコード

133(0x0085)– IMUフュージョンデータのデータコード(モバイルビーコンでリアルタイムタイムスタンプが有効な場合)

4

モバイルビーコン(hedgehog)のアドレス

5

ビーコンのX座標(フュージョン)、m

6

ビーコンのY座標(フュージョン)、m

7

ビーコンのZ座標(フュージョン)、m

8

回転クォータニオンのWフィールド

9

回転クォータニオンのXフィールド

10

回転クォータニオンのYフィールド

11

回転クォータニオンのZフィールド

12

ビーコンの速度X(フュージョン)、mm/s

13

ビーコンの速度Y(フュージョン)、mm/s

14

ビーコンの速度Z(フュージョン)、mm/s

15

ビーコンの加速度X、mm/s2

16

ビーコンの加速度Y、mm/s2

17

ビーコンの加速度Z、mm/s2

テレメトリーデータ(41 6)

行のフィールド:

N

フィールドの説明

0

タイムスタンプ(共通フィールド)

1

ユーザー名(共通フィールド)

2

41 – 行の種類ID(Marvelmindプロトコルのストリーミング)

3

6(0x0006)– テレメトリーデータのデータコード

4

ビーコンのアドレス

5

電源電圧、V

6

RSSI、dBm

品質と拡張位置データ(41 7)

行のフィールド:

N

フィールドの説明

0

タイムスタンプ(共通フィールド)

1

ユーザー名(共通フィールド)

2

41 – 行の種類ID(Marvelmindプロトコルのストリーミング)

3

7(0x0007)– 品質と拡張位置データのデータコード

4

モバイルビーコンのアドレス

5

位置の品質、%

6

ジオフェンスゾーンの番号(このフィールドには MMSW0005 ライセンスが必要)

行の種類ID 42 – NMEA0183のストリーミングレコード

この行には次が必要です:MMSW0005 ライセンス。

この行は、「Interfaces」セクションのモデムのプロトコル設定が「NMEA0183」のときに記録されます。

行のフィールド:

N

フィールドの説明

0

タイムスタンプ(共通フィールド)

1

ユーザー名(共通フィールド)

2

42 – 行の種類ID(NMEA0183プロトコルのストリーミング)

3

モバイルビーコンのアドレス

4、5など

フィールドの並び。形式は NMEA0183 に従います(NMEA0183のレコードもカンマ区切りの値の形式です)

行の種類ID 43 – モバイルビーコンを介して送信されたユーザーペイロードデータ

この行には次が必要です:MMSW0005 ライセンス。

この行は、モバイルビーコンの設定のインターフェースセクションでペイロードデータのサイズが0以外に設定されており、ユーザーデバイスがモバイルビーコンのUSBまたはUARTからデータを送信した場合に記録されます。

また、一部のMarvelmindデバイスでもペイロードデータを利用できます。例:ロボット v100 と Boxie。

行のフィールド:

N

フィールドの説明

0

タイムスタンプ(共通フィールド)

1

ユーザー名(共通フィールド)

2

43 – 行の種類ID(ユーザーペイロード)

3

モバイルビーコンのアドレス

4、5など

カンマ区切りのペイロードデータのバイト列(各フィールドは1バイト)

Robot v100のペイロードテレメトリーデータ

行の全体的な形式は、次に準じます:ユーザーペイロードデータの形式。

データバイト(行の4番目のフィールド以降)は、以下に示す形式のデータレコードを構成します。

複数バイトの値は、下位バイトから順に格納されます(リトルエンディアン形式)。

Robot v100テレメトリーのレコードN3:

オフセット

サイズ(バイト)

型

説明

値

0

2

uint16_t

レコードID

0x3003

2

2*12

12台のLIDARによる距離(LIDAR 1台あたり2バイト)

各LIDARのデータの形式は次のとおりです:

ビット0…11 – LIDARによる距離、mm

ビット12…15 – 距離測定のステータス

ステータス = 0 – 距離は測定済み

ステータス <> 0 – 距離は未測定

26

1

uint8_t

LIDAR全体のステータス:

ビット0:1 – LIDARの読み取りに成功

0 – LIDARの読み取りに失敗

ビット1…7 – 予約(0)

27

1

uint8_t

ロボットの状態:

0:ロボットは正常停止中

1:ロボットはアラームにより停止中

2:ロボットは自律走行中

3:ロボットは充電中

28

1

uint8_t

RV – ロボットのバッテリー電圧。

V= (RV/10) + 20(V)

29

2

int16_t

ロボットの電源電流、x10 mA

値が負の場合、ロボットのバッテリーはこの電流で充電中です。

N

31

1

uint8_t

バッテリー残量、%

32

2

uint16_t

ロボットの消費電力、W

34

2

uint16_t

左車輪の速度、mm/s

36

2

uint16_t

右車輪の速度、mm/s

37

1

uint8_t

左モーターの出力、%

38

1

uint8_t

右モーターの出力、%

39

2

uint16_t

目標速度、mm/s

41

2

int16_t

ロボットのX座標、cm

43

1

uint8_t

ステータスフラグ:

ビット0…3 – 予約

ビット4:1 – 超音波トラッキングのエラー

ビット5…7 – 予約

44

2

int16_t

ロボットのY座標、cm

Robot v100テレメトリーのレコードN4:

オフセット

サイズ(バイト)

型

説明

値

0

2

uint16_t

レコードID

0x3004

2

2*12

12台のLIDARによる距離(LIDAR 1台あたり2バイト)

各LIDARのデータの形式は次のとおりです:

ビット0…11 – LIDARによる距離、mm

ビット12…15 – 距離測定のステータス

ステータス = 0 – 距離は測定済み

ステータス <> 0 – 距離は未測定

26

1

uint8_t

LIDAR全体のステータス:

ビット0:1 – LIDARの読み取りに成功

0 – LIDARの読み取りに失敗

ビット1…7 – 予約(0)

27

1

uint8_t

ロボットの状態:

0:ロボットは正常停止中

1:ロボットはアラームにより停止中

2:ロボットは自律走行中

3:ロボットは充電中

28

1

uint8_t

移動プログラム内の現在の項目のインデックス

29

1

uint8_t

移動プログラム内の項目の総数

30

1

uint8_t

予約済み

31

1

uint8_t

LIDARが検知した障害物の方向:

0 – なし

1 – 前方

2 – 左

3 – 右

32

1

uint8_t

LIDARによるアラームの最小距離、x2 cm

33

1

uint8_t

アラームの原因となった、LIDARで現在測定された距離、x2 cm

34

3

予約済み

36

2

int16_t

ロボットのX位置、cm

38

2

int16_t

ロボットのY位置、cm

Robot Boxieのペイロードテレメトリーデータ

行の全体的な形式は、次に準じます:ユーザーペイロードデータの形式。

データバイト(行の4番目のフィールド以降)は、以下に示す形式のデータレコードを構成します。

複数バイトの値は、下位バイトから順に格納されます(リトルエンディアン形式)。

Robot BoxieテレメトリーのレコードN1:

オフセット

サイズ(バイト)

型

説明

値

0

2

uint16_t

レコードID

0x3101

2

2*12

12台のLIDARによる距離(LIDAR 1台あたり2バイト)

各LIDARのデータの形式は次のとおりです:

ビット0…11 – LIDARによる距離、mm

ビット12…15 – 距離測定のステータス

ステータス = 0 – 距離は測定済み

ステータス <> 0 – 距離は未測定

26

1

uint8_t

LIDAR全体のステータス:

ビット0:1 – LIDARの読み取りに成功

0 – LIDARの読み取りに失敗

ビット1…7 – 予約(0)

27

1

uint8_t

ロボットの状態:

0:ロボットは正常停止中

1:ロボットはアラームにより停止中

2:ロボットは自律走行中

3:ロボットは充電中

28

1

uint8_t

RV – ロボットのバッテリー電圧、x100 mV。

例えば、値118は11.8 Vを意味します

29

2

int16_t

ロボットの電源電流、x10 mA

例えば、値123は1.230 Aを意味します

31

1

uint8_t

予約済み

32

1

uint8_t

左モーターの出力、%

33

1

uint8_t

右モーターの出力、%

34

2

uint16_t

左車輪の速度、mm/s

36

2

uint16_t

右車輪の速度、mm/s

37

2

int16_t

左モーターのオドメトリによる走行距離、cm

39

2

int16_t

右モーターのオドメトリによる走行距離、cm

41

2

int16_t

ロボットのX座標、cm

43

1

uint8_t

ステータスフラグ:

ビット0…1 – 予約

ビット2:1 – 移動プログラムを実行中

ビット3:1 – 移動を一時停止中

ビット4:1 – 超音波トラッキングのエラー

ビット5…7 – 予約

44

2

int16_t

ロボットのY座標、cm

Robot BoxieテレメトリーのレコードN3:

オフセット

サイズ(バイト)

型

説明

値

0

2

uint16_t

レコードID

0x3103

2

2

int16_t

角度制御PIDレギュレーターの現在の「P」値

4

2

int16_t

角度制御PIDレギュレーターの現在の「I」値

6

2

int16_t

角度制御PIDレギュレーターの現在の「D」値

8

2

int16_t

EKFフィルターで計算したロボットのX座標、cm

10

2

int16_t

EKFフィルターで計算したロボットのY座標、cm

12

2

int16_t

予約済み

13

1

uint8_t

LIDAR全体のステータス:

ビット0:1 – LIDARの読み取りに成功

0 – LIDARの読み取りに失敗

ビット1…7 – 予約(0)

14

1

uint8_t

ロボットの状態:

0:ロボットは正常停止中

1:ロボットはアラームにより停止中

2:ロボットは自律走行中

3:ロボットは充電中

15

1

uint8_t

現在の移動ステップのインデックス(最初のウェイポイントが0、2番目が1、以下同様)

16

1

uint8_t

現在のプログラムの移動ステップの総数

17

1

uint8_t

移動フラグ:

ビット0:1 –「Run forever」オプション

ビット1…7 – 予約

18

1

uint8_t

0 – LIDARによるアラームなし

1…12 – アラームの原因となったLIDARのインデックス

19

1

uint8_t

LIDARによるアラームの最小距離、x2 cm

20

1

uint8_t

アラームの原因となった、LIDARで現在測定された距離、x2 cm

21

2

int16_t

ロボット上のペアードビーコンによる角度、度

23

1

uint8_t

ロボットの目標速度(ユーザー設定)、cm/s

24

2

int16_t

ロボットのX座標、cm

26

2

int16_t

ロボットのY座標、cm

28

2

int16_t

予約済み

30

2

int16_t

予約済み

32

2

int16_t

目標方向とロボットの現在の向きとのずれの角度、度

34

1

uint8_t

予約済み

35

2

int16_t

フュージョンによるロボットの向きの角度、度

36

5

5バイト

予約済み

行の種類ID 44 – DashboardのReal-time Playerによる位置

この行には次が必要です:MMSW0005 ライセンス。

この行は、Real-time Playerが有効な場合に、モバイルビーコンについて記録されます。Real-time Playerは100 Hzの位置データを提供します。

行のフィールド:

N

フィールドの説明

0

タイムスタンプ(共通フィールド)

1

ユーザー名(共通フィールド)

2

44 – 行の種類ID(Real-time Playerによる位置)

3

モバイルビーコンのアドレス

4

予約フィールド

5

モバイルビーコンのX座標、m

6

モバイルビーコンのY座標、m

7

モバイルビーコンのZ座標、m

行の種類ID 55 – ビーコンの短縮テレメトリー

この行には、SSM(Super-Super-Modem)から受信したビーコンのテレメトリーが含まれます。

行のフィールド:

N

フィールドの説明

0

タイムスタンプ(共通フィールド)

1

ユーザー名(共通フィールド)

2

55 – 行の種類ID(短縮テレメトリー)

3

ビーコンのアドレス

4

ビーコンの電源電圧の下位バイト:V0

5

ビーコンの電源電圧の上位バイト:V1

ビーコンの電源電圧はV= V0+V1*256 mVです

6

2の補数形式のRSSI:R0

R0が128未満の場合、RSSI= R0 dBm

R0 >= 128の場合、RSSI= R0-256 dBm

7

予約済み

8

予約済み

以前のCSVログの形式(V7.000より前のDashboard、またはModem HW v4.9)

旧形式のログファイルを次の図に示します:
旧形式のログファイルを示す図

Marvelmind API

Marvelmind APIライブラリは、Marvelmind Dashboardソフトウェアで使用されており、ユーザーのソフトウェアにインターフェースを提供します。APIは、MS Windows用のダイナミックリンクライブラリ(DLL)と、Linux(x86およびARMプラットフォーム)用の共有ライブラリとして提供されます。APIは、USB(仮想シリアルポート)経由でモデムに接続し、次を実装しています:モデムとの通信プロトコル。

ソフトウェアパッケージには、APIライブラリに加えてCのサンプルソフトウェアも含まれています。これはAPIのテストに使用したもので、すべてのAPI関数の呼び出しを含んでいます。

このサンプルは、ユーザーのソフトウェアを開発する際のベースとして、またAPIライブラリのインターフェース(ファイル「marvelmind_api.c」)を他のプログラミング言語に移植する際のベースとして使用できます。

動作確認済み:

  1. MS Windows 10、CPU:Intel Core i5
  2. Ubuntu 20.04、CPU:Intel Core i5
  3. Raspbian(2018-11-13-raspbian-stretch-full)、プラットフォーム:Raspberry Pi 3 Model B+

Windowsへのインストール

  • Marvelmind APIソフトウェアパッケージをダウンロードします。Dashboard APIとサンプルソフトウェアを、プログラムに使用するディレクトリにコピーします。Windows版のサンプルにはビルド済みの実行ファイルが付属しているため、APIソフトウェアパッケージに含まれる「windows」ディレクトリから「mm_api_example.exe」をすぐに実行できます。

Linuxへのインストール

  • Marvelmind APIソフトウェアパッケージをダウンロードします。Dashboard APIを、プログラムに使用するディレクトリにコピーします。Linux版は、次の2つのハードウェアプラットフォーム向けに提供されています:x86(Intel製またはAMD製のCPUを搭載したほとんどのノートPC)と arm(例えば、Raspberry PIなどのシングルボードコンピューター)
  • ライブラリ libdashapi.so(お使いのプラットフォーム用)を、ディレクトリ /usr/local/lib にコピーします。コマンド sudo cp libdashapi.so /usr/local/lib を、ターミナルで実行します(libdashapi.soがあるディレクトリでターミナルを開いてください)。その後、ターミナルで sudo ldconfig を実行します。
  • シリアルポートにアクセスできるよう、ユーザーを dialout グループに追加して権限を与える必要がある場合があります:
  • ターミナルで次を実行します:sudo adduser $USER dialout
  • ディレクトリ /etc/udev/rules.d に、次の内容のファイル「99-tty.rules」を追加します:

#Marvelmind serial port rules

KERNEL==”ttyACM0”,GROUP=”dialout”,MODE=”666”

  • サンプルソフトウェアをビルドします。パッケージに付属の「source」ディレクトリで開いたターミナルで、「make all」を実行します
  • ターミナルで「./mm_api_example」と入力して、サンプルを実行します
トップへ戻る