Resurgence (PY2022)
Codebase for the Husky Robotics 2021-2022 rover Resurgence
Toggle main menu visibility
Loading...
Searching...
No Matches
src
network
MissionControlProtocol.h
1
#pragma once
2
3
#include "../autonomous/AutonomousTask.h"
4
#include "../utils/scheduler.h"
5
#include "../video/H264Encoder.h"
6
#include "../world_interface/world_interface.h"
7
#include "MissionControlTasks.h"
8
#include "websocket/WebSocketProtocol.h"
9
#include "websocket/WebSocketServer.h"
10
11
#include <
atomic
>
12
#include <
condition_variable
>
13
#include <
memory
>
14
#include <
optional
>
15
#include <
shared_mutex
>
16
#include <
thread
>
17
#include <
unordered_map
>
18
#include <
unordered_set
>
19
20
namespace
net {
21
namespace
mc {
22
23
using
json =
nlohmann::json
;
24
using
robot::types::CameraID
;
25
using
robot::types::jointid_t;
26
using
websocket::SingleClientWSServer;
27
using
websocket::WebSocketProtocol;
28
32
static
bool
validateJoint(
const
json& j);
33
static
void
stopAllJoints();
34
35
class
MissionControlProtocol :
public
WebSocketProtocol
{
// TODO: add documentation
36
public
:
37
MissionControlProtocol(SingleClientWSServer& server);
38
~MissionControlProtocol();
39
MissionControlProtocol(
const
MissionControlProtocol& other) =
delete
;
40
MissionControlProtocol& operator=(
const
MissionControlProtocol& other) =
delete
;
41
42
private
:
43
SingleClientWSServer& _server;
44
tasks::PowerRepeatTask
_power_repeat_task;
45
tasks::CameraStreamTask
_camera_stream_task;
46
tasks::TelemReportTask
_telem_report_task;
47
tasks::ArmIKTask
_arm_ik_task;
48
autonomous::AutonomousTask
_autonomous_task;
49
50
void
handleEmergencyStopRequest(
const
json& j);
51
void
handleOperationModeRequest(
const
json& j);
52
void
handleTankDriveRequest(
const
json& j);
53
void
handleCameraStreamOpenRequest(
const
json& j);
54
void
handleCameraStreamCloseRequest(
const
json& j);
55
void
handleCameraFrameRequest(
const
json& j);
56
void
handleJointPowerRequest(
const
json& j);
57
void
handleJointPositionRequest([[maybe_unused]]
const
json& j);
58
void
handleWaypointNavRequest(
const
json& j);
59
void
handleDriveRequest(
const
json& j);
60
void
handleRequestArmIKEnabled(
const
json& j);
61
void
handleServoPositionRequest(
const
json& j);
62
void
handleStepperTurnAngleRequest(
const
json& j);
63
void
sendArmIKEnabledReport(
bool
enabled);
64
void
handleConnection();
65
void
handleHeartbeatTimedOut();
66
void
stopAndShutdownPowerRepeat(
bool
sendDisableIK);
67
68
void
setArmIKEnabled(
bool
enabled,
bool
sendReport =
true
);
69
void
setRequestedJointPower(jointid_t joint,
double
power
);
70
void
setRequestedCmdVel(
double
dtheta,
double
dx);
71
void
setRequestedTankCmdVel(
double
left
,
double
right
);
72
};
73
74
};
// namespace mc
75
}
// namespace net
atomic
condition_variable
memory
shared_mutex
thread
unordered_map
unordered_set
optional
power
_Tp power(_Tp __x, _Integer __n, _MonoidOperation __monoid_op)
right
ios_base & right(ios_base &__base)
left
ios_base & left(ios_base &__base)
autonomous::AutonomousTask
Definition
AutonomousTask.h:15
net::mc::tasks::ArmIKTask
This task sets the arm joint positions to track the current IK command.
Definition
MissionControlTasks.h:118
net::mc::tasks::CameraStreamTask
This task is responsible for sending the camera streams to Mission Control over websocket.
Definition
MissionControlTasks.h:61
net::mc::tasks::PowerRepeatTask
This task is responsible for periodically resending setMotorPower commands to the motors.
Definition
MissionControlTasks.h:21
net::mc::tasks::TelemReportTask
This task periodically sends robot telemetry data to Mission Control.
Definition
MissionControlTasks.h:103
net::websocket::WebSocketProtocol::WebSocketProtocol
WebSocketProtocol(const std::string &protocolPath)
Construct a new WebSocket protocol.
Definition
WebSocketProtocol.cpp:11
nlohmann::json
basic_json<> json
robot::types::CameraID
std::string CameraID
The type of a camera id.
Definition
data.h:46
Generated by
1.17.0