SwisTrack/多摄像头客户端
SwisTrack 多摄像头客户端是一个客户端工具,用于与多个 SwisTrack 实例通信。它使用 wxWidgets 用 C++ 编写。通过 TCP 连接接收到的数据将在显示在窗口上之前合并并同步。 SwisTrack 是连接的服务器部分,SwisTrack 多摄像头客户端是客户端。
您可以使用鼠标滚轮放大和缩小。要聚焦在特定区域,请右键单击该区域。左键单击将在点击机器人时获得一些信息。通过单击鼠标滚轮,视图将重置。
我们有 10 个类,其中 "ClientFrame" 是主要的类。
名称 | 解释 |
ClientFrame | 定义一个新的帧类型(主类) |
CommunicationMessage | 创建可以发送给机器人和 SwisTrack 实例的新消息。 |
CommunicationNMEAInterface | 用于解析传入消息和发送传出消息的接口 |
MapPanel | 负责绘制面板 |
Robot | 创建用于通信和绘制的新机器人 |
RobotSocketManager | 负责机器人和 SwisTrack 多摄像头客户端之间的通信 |
SavePosition | 如果启用,则将每个机器人分开存储在一个文件中,以保存它们的位置 |
STClient | 定义应用程序类型 |
SwisTrack | 创建用于通信和绘制摄像头区域的新 SwisTrack 对象 |
SwisTrackSocketManager | 负责 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 多摄像头客户端使用 NMEA 0183 协议与 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 多摄像头客户端截取的一些截图