跳转到内容

SwisTrack/多摄像头客户端

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

SwisTrack 多摄像头客户端是一个客户端工具,用于与多个 SwisTrack 实例通信。它使用 wxWidgetsC++ 编写。通过 TCP 连接接收到的数据将在显示在窗口上之前合并并同步。 SwisTrack 是连接的服务器部分,SwisTrack 多摄像头客户端是客户端。


缩放/聚焦功能

[编辑 | 编辑源代码]

您可以使用鼠标滚轮放大和缩小。要聚焦在特定区域,请右键单击该区域。左键单击将在点击机器人时获得一些信息。通过单击鼠标滚轮,视图将重置。


类层次结构

[编辑 | 编辑源代码]

我们有 10 个类,其中 "ClientFrame" 是主要的类。


SwisTrack Multi-Camera Client class hierarchy


名称 解释
ClientFrame 定义一个新的帧类型(主类)
CommunicationMessage 创建可以发送给机器人和 SwisTrack 实例的新消息。
CommunicationNMEAInterface 用于解析传入消息和发送传出消息的接口
MapPanel 负责绘制面板
Robot 创建用于通信和绘制的新机器人
RobotSocketManager 负责机器人和 SwisTrack 多摄像头客户端之间的通信
SavePosition 如果启用,则将每个机器人分开存储在一个文件中,以保存它们的位置
STClient 定义应用程序类型
SwisTrack 创建用于通信和绘制摄像头区域的新 SwisTrack 对象
SwisTrackSocketManager 负责 SwisTrack 实例和 SwisTrack 多摄像头客户端之间的通信


编辑设置

[编辑 | 编辑源代码]

如果选择菜单“编辑/编辑设置”,将弹出一个编辑窗口,您将能够更改设置。注意语法,否则程序将无法正常运行。以“#”开头的行被视为注释。

SwisTrack 多摄像头客户端设置的正确语法是(示例)


SwisTrack

[编辑 | 编辑源代码]
类型 Adress:port; 参考点 (x,y); 向量 1 (x,y); 向量 2 (x,y); 宽度、高度 (w,h);
cam localhost:3000; 2,3; 1,0; 0,1; 4,6


类型 Adress:port; id
robot 127.0.0.1:4002; 5


注意,在类型之后始终紧跟一个“:” ,否则在每个条目之后都紧跟一个“;”,最后一个条目除外,它后面没有任何字符。请查看截图以了解实际示例。


保存跟踪位置:文件语法

[编辑 | 编辑源代码]

如果需要,可以将机器人的移动保存到 "robotX.txt" 文件中(X 是机器人的 ID)。每帧将使用一行。语法如下


帧号、x 方向位置、y 方向位置、角度

示例:217,0.669787,8.297836, 6.210000


摄像头区域定义

[编辑 | 编辑源代码]

如上所示,我们使用一个参考点和 2 个向量、一个宽度和高度来定义一个摄像头区域。


SwisTrack Multi-Camera Client camera setting


NMEA 0183 协议

[编辑 | 编辑源代码]

SwisTrack 多摄像头客户端使用 NMEA 0183 协议与 SwisTrack 实例和机器人通信。


SwisTrack

[编辑 | 编辑源代码]

请记住,每个命令都封装在一条消息中,该消息包含一个消息头(命令)和一个根据特定命令的论证列表。每个命令都以“$”开头,并使用大写字母。


发送命令

[编辑 | 编辑源代码]
命令 论证 描述
$START 启动 SwisTrack 实例并将当前帧号设置为 0,但在发送 $STEP 之前不会处理任何内容。
$STOP 停止当前跟踪并将当前帧号重置为 0。
$STEP 指示 SwisTrack 实例处理下一张图像帧。

程序可以暂停(不再发送 $STEP 命令)并通过菜单命令“ST 控制/暂停跟踪”和“ST 控制/恢复跟踪”恢复。


接收命令

[编辑 | 编辑源代码]
命令 论证 描述
$PARTICLE int id, double x, double y, double angle 在帧上识别到的每个机器人都会使用这些参数单独发送
$BEGINFRAME int frameNb 指示在此命令之后到达的数据属于发送的帧号
$ENDFRAME 指示当前处理的帧已完成

备注:一个或多个 $PARTICLE 命令只能在 $BEGINFRAME 和 $ENDFRAME 命令之间接收!


发送命令

[编辑 | 编辑源代码]
命令 论证 描述
$STATUS 获取机器人的当前状态(例如:跟踪、空闲、搜索)。
$POSITION double position x, double position y 重置机器人的当前位置。

接收命令

[编辑 | 编辑源代码]
命令 论证 描述
$STATUS string status 返回其当前状态。


以下是从 SwisTrack 多摄像头客户端截取的一些截图

SwisTrack Multi-Camera Client "main" window SwisTrack Multi-Camera Client "edit" window

华夏公益教科书