Dashboard CSV日志格式

本章的整洁、易读HTML版本。

本页以HTML形式完整呈现《接口与协议》中的“Dashboard CSV日志格式”一章。如有不清楚之处,请打开 本章原始PDF(第111-126页)(中文) (左上角也有固定链接)。总览: 全部章节.

CSV日志文件格式(Dashboard V7.000及以上版本)

在Dashboard V7.000及以上版本的CSV日志文件中,每个事件记录为一行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坐标,米

6

移动信标Y坐标,米

7

移动信标Z坐标,米

8

标志:

位0:1 – 坐标不可用,不应使用X、Y、Z字段的数据。

位1…6:保留

位7:1 – 超出地理围栏区域

9

偏航角及标志:

位0…11:移动信标对的偏航角,单位0.1度(0…3600)

位12:1 – 坐标为信标对的中心;0 – 坐标为指定移动信标的位置

10

时间偏移,毫秒。从超声波发射到计算出本行位置所经过的时间

固定信标位置(41 18)

行字段:

N

字段说明

0

时间戳(公共字段)

1

用户名(公共字段)

2

41 – 行类型ID(Marvelmind协议流)

3

18 (0x0012) – 固定信标位置的数据代码

4

固定信标地址

5

信标X坐标,米

6

信标Y坐标,米

7

信标Z坐标,米

8

保留字段

移动信标到固定信标的原始距离(41 4)或(41 132)

行字段:

N

字段说明

0

时间戳(公共字段)

1

用户名(公共字段)

2

41 – 行类型ID(Marvelmind协议流)

3

4 (0x0004) – 原始距离的数据代码

132 (0x0084) – 原始距离的数据代码(带实时时间戳流)

4

移动信标地址

5

N – 该行中的距离数量

6

N条距离子记录(2*N个字段),见下文

6+N*2+1

时间偏移,毫秒。从超声波发射到完成距离测量所经过的时间

距离子记录字段:

0

固定信标地址

1

到固定信标的距离

原始IMU数据(41 3)或(41 131)

此行需要 MMSW0005 许可证。

行字段:

N

字段说明

0

时间戳(公共字段)

1

用户名(公共字段)

2

41 – 行类型ID(Marvelmind协议流)

3

3 (0x0003) – 原始IMU数据的数据代码

131 (0x0083) – 原始IMU数据的数据代码(移动信标已启用实时时间戳)

4

移动信标地址

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

移动信标地址

5

信标X坐标(融合),米

6

信标Y坐标(融合),米

7

信标Z坐标(融合),米

8

旋转四元数的W分量

9

旋转四元数的X分量

10

旋转四元数的Y分量

11

旋转四元数的Z分量

12

信标X方向速度(融合),毫米/秒

13

信标Y方向速度(融合),毫米/秒

14

信标Z方向速度(融合),毫米/秒

15

信标X方向加速度,毫米/秒2

16

信标Y方向加速度,毫米/秒2

17

信标Z方向加速度,毫米/秒2

遥测数据(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 许可证。

如果移动信标在设置的“Interfaces”部分启用了非零的有效载荷数据大小,且用户设备通过移动信标的USB或UART传输任何数据,则记录此行。

此外,部分Marvelmind设备(例如机器人)也提供有效载荷数据 v100 和 Boxie.

行字段:

N

字段说明

0

时间戳(公共字段)

1

用户名(公共字段)

2

43 – 行类型ID(用户有效载荷)

3

移动信标地址

4、5等

以逗号分隔的有效载荷数据字节序列(每个字段1字节)

Robot v100的有效载荷遥测数据

该行的总体格式遵循 用户有效载荷数据格式.

数据字节(从该行第四个字段开始)构成数据记录,格式如下所述。

多字节数值从低字节开始存放(小端格式)。

Robot v100遥测记录N3:

偏移量

大小(字节)

类型

说明

值

0

2

uint16_t

记录ID

0x3003

2

2*12

12个激光雷达测得的距离(每个激光雷达2字节)

每个激光雷达数据的格式如下:

位0…11 – 激光雷达测得的距离,毫米

位12…15 – 测距状态

状态 = 0 – 已测得距离

状态 <> 0 – 未测得距离

26

1

uint8_t

激光雷达总体状态:

位0:1 – 激光雷达读取成功

0 – 激光雷达读取失败

位1…7 – 保留(0)

27

1

uint8_t

机器人状态:

0:机器人正常停止

1:机器人因报警停止

2:机器人正在自主移动

3:机器人正在充电

28

1

uint8_t

RV – 机器人电池电压。

V= (RV/10) + 20 伏

29

2

int16_t

机器人供电电流,x10 mA

如果数值为负,表示机器人电池正以该电流充电。

N

31

1

uint8_t

剩余电池容量,%

32

2

uint16_t

机器人供电功率,瓦

34

2

uint16_t

左轮速度,毫米/秒

36

2

uint16_t

右轮速度,毫米/秒

37

1

uint8_t

左电机功率,%

38

1

uint8_t

右电机功率,%

39

2

uint16_t

期望速度,毫米/秒

41

2

int16_t

机器人X坐标,厘米

43

1

uint8_t

状态标志:

位0…3 – 保留

位4:1 – 超声波跟踪错误

位5…7 – 保留

44

2

int16_t

机器人Y坐标,厘米

Robot v100遥测记录N4:

偏移量

大小(字节)

类型

说明

值

0

2

uint16_t

记录ID

0x3004

2

2*12

12个激光雷达测得的距离(每个激光雷达2字节)

每个激光雷达数据的格式如下:

位0…11 – 激光雷达测得的距离,毫米

位12…15 – 测距状态

状态 = 0 – 已测得距离

状态 <> 0 – 未测得距离

26

1

uint8_t

激光雷达总体状态:

位0:1 – 激光雷达读取成功

0 – 激光雷达读取失败

位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

激光雷达检测到的障碍物方向:

0 – 无

1 – 前方

2 – 左侧

3 – 右侧

32

1

uint8_t

激光雷达最小报警距离,x2 厘米

33

1

uint8_t

触发报警的当前激光雷达测量距离,x2 厘米

34

3

保留

36

2

int16_t

机器人X位置,厘米

38

2

int16_t

机器人Y位置,厘米

Boxie 机器人的有效载荷遥测数据

该行的总体格式遵循 用户有效载荷数据格式.

数据字节(从该行第四个字段开始)构成数据记录,格式如下所述。

多字节数值从低字节开始存放(小端格式)。

Boxie 机器人遥测记录N1:

偏移量

大小(字节)

类型

说明

值

0

2

uint16_t

记录ID

0x3101

2

2*12

12个激光雷达测得的距离(每个激光雷达2字节)

每个激光雷达数据的格式如下:

位0…11 – 激光雷达测得的距离,毫米

位12…15 – 测距状态

状态 = 0 – 已测得距离

状态 <> 0 – 未测得距离

26

1

uint8_t

激光雷达总体状态:

位0:1 – 激光雷达读取成功

0 – 激光雷达读取失败

位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

左轮速度,毫米/秒

36

2

uint16_t

右轮速度,毫米/秒

37

2

int16_t

左电机里程计测得的行驶距离,厘米

39

2

int16_t

右电机里程计测得的行驶距离,厘米

41

2

int16_t

机器人X坐标,厘米

43

1

uint8_t

状态标志:

位0…1 – 保留

位2:1 – 运动程序正在执行

位2:1 – 运动已暂停

位4:1 – 超声波跟踪错误

位5…7 – 保留

44

2

int16_t

机器人Y坐标,厘米

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坐标,厘米

10

2

int16_t

经EKF滤波计算的机器人Y坐标,厘米

12

2

int16_t

保留

13

1

uint8_t

激光雷达总体状态:

位0:1 – 激光雷达读取成功

0 – 激光雷达读取失败

位1…7 – 保留(0)

14

1

uint8_t

机器人状态:

0:机器人正常停止

1:机器人因报警停止

2:机器人正在自主移动

3:机器人正在充电

15

1

uint8_t

当前运动步骤的索引(第一个航点为0,第二个为1,依此类推)

16

1

uint8_t

当前程序中的运动步骤总数

17

1

uint8_t

运动标志:

位0:1 – “Run forever”(持续运行)选项

位1…7 – 保留

18

1

uint8_t

0 – 激光雷达无报警

1…12 – 触发报警的激光雷达索引

19

1

uint8_t

激光雷达最小报警距离,x2 厘米

20

1

uint8_t

触发报警的当前激光雷达测量距离,x2 厘米

21

2

int16_t

由机器人上成对信标测得的角度,度

23

1

uint8_t

机器人期望速度(用户设置),厘米/秒

24

2

int16_t

机器人X坐标,厘米

26

2

int16_t

机器人Y坐标,厘米

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实时播放器位置

此行需要 MMSW0005 许可证。

若启用了实时播放器,则为移动信标记录此行。实时播放器提供100 Hz的位置数据。

行字段:

N

字段说明

0

时间戳(公共字段)

1

用户名(公共字段)

2

44 – 行类型ID(实时播放器位置)

3

移动信标地址

4

保留字段

5

移动信标X坐标,米

6

移动信标Y坐标,米

7

移动信标Z坐标,米

行类型ID 55 – 信标简短遥测

此行包含从SSM(Super Super-Modem)接收的信标遥测数据。

行字段:

N

字段说明

0

时间戳(公共字段)

1

用户名(公共字段)

2

55 – 行类型ID(简短遥测)

3

信标地址

4

信标供电电压低字节:V0

5

信标供电电压高字节:V1

信标供电电压 V= V0+V1*256 mV

6

RSSI(二进制补码):R0

若R0小于128,则RSSI= R0 dBm

若R0 >= 128,则RSSI= R0-256 dBm

7

保留

8

保留

旧版CSV日志格式(V7.000之前的Dashboard或调制解调器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版本针对两种硬件平台提供: x86 (大多数基于Intel或AMD CPU的笔记本电脑)和 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”运行示例
返回顶部