SwisTrack/Examples/OutputProcessing
SwisTrack/Interfacing SwisTrack 为您概述了如何与 SwisTrack 通信。SwisTrack 示例文件夹中的 OutputProcessing 文件夹包含一些示例脚本和程序,可以帮助您实现这一点。
NMEA 格式非常易于使用正则表达式处理,因为每个消息都位于单独的一行,并以美元符号开头。因此,对于所有简单的任务,Perl、Python、Ruby 或 Shell 脚本是最简单的方法。而且,如果您将其简化为真正需要的部分,您的任务确实很简单。
该swistrack-filter.*文件包含关于如何处理 SwisTrack 消息的简单示例。该swistrack-interface.pl脚本还展示了如何发送消息以远程控制 SwisTrack。如何在终端(shell)中使用这些过滤器脚本在SwisTrack/Interfacing SwisTrack中解释。
为了方便将 SwisTrack 与您的 C/C++ 程序连接,我们为您提供了用于解析 NMEA 消息的代码。必要的文件以及示例程序和一些实现提示可在以下文件夹中找到:NMEAParserC和NMEAParserC++分别。两者都仅仅包含一个状态机,它扫描数据流以查找 NMEA 消息,并且适用于阻塞和非阻塞 IO。
NMEA 解析器的 C 实现(NMEAParserC)也可以用在微控制器上(如果您的微控制器提供 C 编译器)。此外,您可能需要编写一个脚本,它在 SwisTrack 的 TCP 连接和微控制器的串行连接之间转发数据。单向转发甚至可以在 shell 上实现)。
cat < /dev/tcp/HOSTNAME/3000 > /dev/ttyS0 # assuming your serial port is /dev/ttyS0
解析 NMEA 的开销非常小,消息大小方面的开销也很合理。因此,当通过缓慢的串行链路将数据发送到微控制器时,很少需要将数据转换为其他格式。
我们编写了 swig/python 绑定,允许您实例化 swistrack 管道并将输出作为 IplImage 获取。这使得在与 SWIG 兼容的语言中查看管道的各个部分成为可能。(到目前为止,我们只测试了 python,但 Swig 支持多种语言。)
NMEA 消息校验和是可选的,只有在您通过不可靠的通道发送数据时才有意义。SwisTrack 始终在传出消息中添加校验和,但对传入消息不需要任何校验和。但是,如果提供了校验和,它必须是正确的!(校验和错误的消息将被丢弃。)
只要您通过 TCP 连接传输消息,就可以安全地假设通道是可靠的(传输错误由较低的网络层处理),您无需实现校验和检查。USB 和蓝牙传输也是安全的。但是,如果您通过串行电缆传输消息(例如,到机器人),处理校验和可能是有意义的 - 特别是在系统运行时插拔电缆时。
Matlab(或类似程序)不会直接读取 NMEA 消息。在 Matlab 中绘制数据的最简单方法是编写一个过滤器脚本(调整swistrack-filter.*),它从所有传入的 NMEA 消息中提取相关信息并以矩阵形式打印。例如
$PARTICLE,0,10,15,2.11
将转换为
0 10 15 2.11
然后,可以使用 Matlab load 函数读取生成的文件。
将任务拆分为几个较小的(不相关的)任务有时很有帮助,因此创建一些小的、独立的脚本/程序,它们都连接到 SwisTrack。由于 SwisTrack 同时接受多个 TCP 连接,因此这与单个大型脚本/程序一样有效。所有这些脚本/程序都可以在同一台或不同的计算机上运行,这为您提供了最大的灵活性。
如果需要在脚本/程序之间交换信息,可以使用BROADCAST 消息。这允许您通过 SwisTrack 向所有客户端发送消息,而无需费心在它们之间建立专用的通信通道。