跳转到内容

Khepera III 工具箱/解析程序输出

来自维基教科书,开放的书籍,开放的世界

Khepera III 工具箱(特别是 程序)使用 NMEA 0183 消息作为输出数据格式。NMEA 0183 是一种面向消息的通信协议,源自 GPS 接收器,对于人和计算机来说同样简单易懂。

NMEA 0183 消息

[编辑 | 编辑源代码]

NMEA 0183 是一种通信标准,规定了电气特性以及数据格式特性。在这里,我们只使用 NMEA 的消息格式。

一条 NMEA 消息(或语句)如下所示

$SPEED,10000,15000

消息总是以 $ 符号开头,后面跟着一个命令和一个参数列表。命令和参数之间用逗号隔开。可选地,消息包含一个尾部校验和(例如,*4D),但 Khepera III 程序没有写入此校验和。

原始的 NMEA 规范不允许命令超过 5 个字符。但是,Khepera III 工具箱没有使用此限制,而是支持更长、更明确的命令名称。

NMEA 消息流可以包含不同类型的消息,例如

$STATE,random_motion
$SPEED,10000,15000
$SPEED,11000,14000
$SPEED,12000,13000
$STATE,follow_wall
$SPEED,5000,5000

这对报告结果非常有用。

NMEA 0183 的优势

[编辑 | 编辑源代码]

NMEA 0183 消息格式具有以下几个优点

  • 它是人类可读的。
  • 它易于被计算机解析,校验和(如果有)易于计算。
  • 因为它使用消息起始字符 ($) 和消息结束字符 (CRLF),你可以随时拆分数据流,解析器将能够重新同步(即读取所有完整的消息)。
  • 它以消息类型开头,因此允许不同类型的消息在同一个流中交织在一起。
  • 它可以选择性地允许校验和,这在数据通过有损通道传输时很有用。
  • 它可以使用搜索和替换转换为 CSV 文件(见下文)。

使用文本编辑器将 NMEA 消息转换为 CSV

[编辑 | 编辑源代码]

如果你有一个包含单一类型消息的文件,例如

$SPEED,10000,15000
$SPEED,11000,14000
$SPEED,12000,13000
$SPEED,5000,5000

你可以使用任何文本编辑器将其转换为 CSV。只需将$SPEED,替换为空,并保存文件。生成的可以在几乎所有程序(Matlab、Microsoft Excel 等)中加载。

使用 k3-nmea-to-csv 将 NMEA 消息转换为 CSV

[编辑 | 编辑源代码]

除了使用文本编辑器,你还可以使用 k3-nmea-to-csv 过滤器脚本将 NMEA 消息转换为 CSV。只需将你的文件通过该脚本管道传输,并提供要提取的消息的 NMEA 命令,例如

k3-nmea-to-csv SPEED < my_nmea_file > my_csv_file

所有非 SPEED 类型的消息将被忽略。

请注意,你可以将此过滤器脚本与任何程序一起使用,以将其输出转换为 CSV。例如,

./infrared_proximity -r | k3-nmea-to-csv IRPROXIMITY

将输出红外距离传感器值作为 CSV。

使用脚本解析 NMEA

[编辑 | 编辑源代码]

NMEA 可以很容易地使用 PerlPythonRuby 或类似的脚本语言进行处理。示例脚本可以在 示例 部分找到。

在机器人上解析 NMEA

[编辑 | 编辑源代码]

模块 部分中,有一个用 C 编写的 NMEA 解析器(模块 nmea),可以用于在机器人上解析 NMEA 消息。这对于读取配置文件很有用,例如。

华夏公益教科书