SwisTrack/Multi-Camera Client
Introduction
editAbstract
editSwisTrack Multi-Camera Client is a client tool to communicate with several SwisTrack instances. It is written in C++ using wxWidgets. Data received by a TCP connection will be merged and synchronized before displaying it on a window. SwisTrack is the server part of the connection and SwisTrack Multi-Camera Client is the client.
Zoom / focus function
editYou can zoom in and out using the scroll wheel of the mouse. To focus on a specific region click with the right mouse button on that region. The left mouse button is to get several information if clicked on a robot. By clicking the mouse wheel the view will be reset.
Class hierarchy
editWe have 10 classes, where "ClientFrame" is the mean one.
Name | Explanation |
ClientFrame | Defines a new frame type (main class) |
CommunicationMessage | Creates new messages that can be send to the robots and the SwisTrack instances. |
CommunicationNMEAInterface | Interface to parse incoming messages and send outgoing messages |
MapPanel | Responsible for painting the panel |
Robot | Creates new robots for communication and painting |
RobotSocketManager | Responsible for the communication between the robots and the SwisTrack Multi-Camera Client |
SavePosition | If enabled, saves the positions of the robots each separated in a file |
STClient | Defines the application type |
SwisTrack | Creates new SwisTrack objects for communication and painting the camera areas |
SwisTrackSocketManager | Responsible for the communication between the SwisTrack instances and the SwisTrack Multi-Camera Client |
Edit Settings
editIf you select the menu "Edit/Edit settings" a editing window will pop up and you will be able to change the settings. Beware to the syntax, otherwise the program won't run correctly. Lines that begins with "#" are treated like comments.
The proper syntax of the SwisTrack Multi-Camera Client settings is (with example)):
SwisTrack
editType | Adress:port; | Reference point (x,y); | Vector 1 (x,y); | Vector 2 (x,y); | Width, height (w,h); |
cam: | localhost:3000; | 2,3; | 1,0; | 0,1; | 4,6 |
Robot
editType | Adress:port; | id |
robot: | 127.0.0.1:4002; | 5 |
Watch that after a type follows always a ":" and else after every entry follows a ";" except for the last one where nothing follows. Have a look on the screenshots for an real example.
Save tracking positions: file syntax
editIf desired, the movements of the robots can be saved on a "robotX.txt" file (X is the id of the robot). A line per frame will be used. The syntax is the following:
frame number, position in x, position in y, angle
example: 217,0.669787,8.297836, 6.210000
Camera area definition
editAs seen above we use a reference point with 2 vectors, a width and height for defining a camera area.
NMEA 0183 protocol
editThe SwisTrack Multi-Camera Client uses the NMEA 0183 protocol to communicate with the SwisTrack instances and the robots.
SwisTrack
editKeep in mind that every command is encapsulated in a message with a message header (command) and a list of arguments according to the specific command. Every command begins with a $ and is in capitals.
Sending commands
editCommand | Arguments | Description |
$START | None | Initiates the SwisTrack instances and sets the current frame number to 0, but doesn't process anything till $STEP is send. |
$STOP | None | Stops the current tracking and resets the current frame number to 0. |
$STEP | None | Indicates to the SwisTrack instances to process a next image frame. |
The program can be paused (not sending $STEP commands any more) and be resumed by the menu commands under "ST controls/Pause tracking" and "ST controls/Resume tracking".
Receiving commands
editCommand | Arguments | Description |
$PARTICLE | int id, double x, double y, double angle | Every robot recognized on a frame is send separately with these parameters |
$BEGINFRAME | int frameNb | Indicates that the data that arrives after this command belongs to the frame number send |
$ENDFRAME | None | Indicates that the current processing frame is completed and finished |
Remark: One or several $PARTICLE commands can only be received between a $BEGINFRAME and a $ENDFRAME command!
Robot
editSending commands
editCommand | Arguments | Description |
$STATUS | None | Get the current status of the robot (for example: tracking, idle, searching). |
$POSITION | double position x, double position y | Reset the current position of the robot. |
Receiving commands
editCommand | Arguments | Description |
$STATUS | string status | Returns its current status. |
Screenshots
editHere are some screenshots taken from the SwisTrack Multi-Camera Client: