-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmainwindow.h
213 lines (161 loc) · 5.22 KB
/
mainwindow.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QKeyEvent>
#include <QTcpSocket>
#include <QTcpServer>
#include <QtGui>
#include <QTimer>
#include <QtCore>
#include <QMutex>
#include <QGraphicsItemGroup>
#include <QGraphicsRectItem>
#include <QGraphicsLineItem>
#include "laserscan.h"
#include "Telecommand.pb.h"
#include "allwheelform.h"
#include "trajectoryfollowingform.h"
#include "map.h"
#include "robotstate.h"
#include "mapviewmetainfo.h"
#include "analysisform.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
Q_ENUMS(QAbstractSocket::SocketState);
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
signals:
void allWheelStateUpdated(AllWheelState *steering, AllWheelState *driving);
void ICRUpdated(QPointF ICR);
void jointPositionsUpdated(RobotGeometry *geometry);
void updateLocalFrame(QPointF feedbackPoint, QPointF feedbackPathPoint, QVector<QPointF> feedforwardPoints, QPointF feedforwardCenter);
void updateLocalFrame(QPointF deviationPathPoint);
void clearLocalFrame();
void updateCurves(QVector<lunabotics::proto::Telemetry::Path::Curve> curves);
void updateRadius(float minRadius);
void cellEdgeChanged();
protected:
void keyPressEvent(QKeyEvent* event);
void keyReleaseEvent(QKeyEvent *event);
private slots:
void on_useSpotButton_clicked();
void on_useAckermannButton_clicked();
void acceptConnection();
void receiveTelemetry();
void on_actionPreferences_triggered();
void predefinedControlSelected(lunabotics::proto::AllWheelControl::PredefinedControlType controlType);
void explicitControlSelected(AllWheelState *steering, AllWheelState *driving);
void ICRControlSelected(QPointF ICR, float velocity);
void crabControlSelected(qreal head, qreal vel);
void nullifyAllWheelPanel();
void nullifyFollowingPanel();
void nullifyAnalysisPanel();
void sendPID();
void mapCell_clicked(QPoint coordinate);
void mapCell_hovered(QPoint coordinate);
void on_autonomyButton_clicked();
void on_actionExit_triggered();
void on_refreshMapButton_clicked();
void on_actionAll_wheel_control_triggered();
void on_actionTrajectory_following_triggered();
void on_actionTrajectory_analysis_triggered();
void on_multiWaypointsButton_clicked();
void on_waypointsResetButton_clicked();
void on_waypointsSendButton_clicked();
void on_useAutoButton_clicked();
void updateRobotDimensions();
void ping();
private:
//UI
Ui::MainWindow *ui;
QGraphicsScene *mapScene;
QStandardItemModel *pathTableModel;
QStandardItemModel *telemetryTableModel;
AllWheelForm *allWheelPanel;
AnalysisForm *analysisPanel;
TrajectoryFollowingForm *followingPanel;
QGraphicsItemGroup *pathGraphicsItem;
QGraphicsItemGroup *robotPointerItem;
QGraphicsItemGroup *multiWaypointsItem;
QGraphicsItemGroup *actualTrajcetoryItem;
QGraphicsRectItem *robotCellItem;
QGraphicsLineItem *velocityVectorItem;
QGraphicsLineItem *closestDistanceItem;
QGraphicsLineItem *deviationItem;
QGraphicsItemGroup *cellsItem;
QGraphicsItemGroup *robotDimensionsItem;
MapViewMetaInfo *mapViewInfo;
//Network
QMutex socketMutex;
QTcpSocket *outgoingSocket;
QTcpSocket *incomingSocket;
QTcpServer *incomingServer;
//Data objects
LaserScan laserScan;
Map *map;
QVector<QPointF> *path;
RobotState *robotState;
//Map chunks data
int chunksTotal;
int currentChunk;
//Trajectory following data
bool hasAckermannData;
QPointF feedbackPathPoint;
QPointF feedbackPoint;
QPointF feedbackPointLocal;
QPointF feedbackPathPointLocal;
bool hasDeviationData;
QPointF deviationPathPoint;
QPointF deviationPathPointLocal;
int nextWaypointIdx;
int segmentIdx;
bool robotDimensionsSet;
//Trajectory analysis data
QVector<lunabotics::proto::Telemetry::Path::Curve> trajectoryCurves;
float minICRRadius;
void leftAction();
void rightAction();
void forwardAction();
void backAction();
void sendTelecommand(lunabotics::proto::Telecommand::Type contentType);
void connectRobot();
void disconnectRobot();
void removeAndDeleteAllMapItems();
void setRow(int &rowNumber, const QString &label, const QString &value);
//Redraw map grid
void redrawMap();
//Update poses of the robot
void updateMapPoses();
//Update path points
void updateMapPath();
//Autonomy managment
void toggleAutonomy();
void setAutonomy(bool enabled);
void setAutonomyLabel(bool enabled);
void resetTelemetryModel();
void resetPathModel();
bool isMapValid();
qreal crabVelocity;
qreal crabHeading;
//Multiple waypoints selection
bool multiWaypoints;
QVector<QPoint> *waypoints;
void removeMultiWaypointsPrint();
//Actual trajectory
bool showActualTrajectory;
bool showPlannedTrajectory;
bool showRobotPointer;
bool showRobotDimensions;
bool showPathFollowng;
bool showRobotCell;
void assignMapSettings();
//Timer for pinging broken connection
QTimer *connectionTimer;
// void setWindowTitle();
};
#endif // MAINWINDOW_H