38 NetworkService(
const RobotId& robot_id,
const std::string& ip_address,
39 unsigned short primitive_listener_port,
40 unsigned short robot_status_sender_port,
41 unsigned short full_system_to_robot_ip_notification_port,
42 unsigned short robot_to_full_system_ip_notification_port,
43 unsigned short robot_logs_port,
const std::string& interface);
51 TbotsProto::Primitive
poll(TbotsProto::RobotStatus& robot_status);
66 bool shouldSendNewRobotStatus(
const TbotsProto::RobotStatus& robot_status)
const;
73 void logNewPrimitive(
const TbotsProto::Primitive& new_primitive);
80 void updatePrimitiveLog(TbotsProto::RobotStatus& robot_status);
87 double getCurrentEpochTimeInSeconds();
94 void primitiveCallback(
const TbotsProto::Primitive& input);
101 void onFullSystemIpNotification(
const TbotsProto::IpNotification& ip_notification);
108 void sendRobotStatus(
const TbotsProto::RobotStatus& robot_status);
111 static constexpr unsigned int ROBOT_STATUS_BROADCAST_RATE_HZ = 30;
112 static constexpr double ROBOT_STATUS_TO_THUNDERLOOP_HZ_RATIO =
113 ROBOT_STATUS_BROADCAST_RATE_HZ / (THUNDERLOOP_HZ + 1.0);
114 static constexpr int IP_DISCOVERY_NOTIFICATION_RATE_HZ = 1 * THUNDERLOOP_HZ;
117 static constexpr unsigned int PRIMITIVE_DEQUE_MAX_SIZE =
118 static_cast<unsigned int>(1500 / ROBOT_STATUS_BROADCAST_RATE_HZ);
123 std::mutex primitive_mutex;
124 TbotsProto::Primitive primitive_msg;
127 std::mutex fullsystem_ip_mutex;
128 std::optional<std::string> fullsystem_ip;
131 std::mutex robot_status_sender_mutex;
132 std::unique_ptr<ThreadedProtoUdpSender<TbotsProto::RobotStatus>> robot_status_sender;
134 std::unique_ptr<ThreadedProtoUdpListener<TbotsProto::IpNotification>>
135 fullsystem_to_robot_ip_listener;
136 std::unique_ptr<ThreadedProtoUdpSender<TbotsProto::IpNotification>>
137 robot_to_fullsystem_ip_sender;
138 std::unique_ptr<ThreadedProtoUdpListener<TbotsProto::Primitive>>
139 udp_listener_primitive;
140 std::unique_ptr<ThreadedProtoRadioListener<TbotsProto::Primitive>>
141 radio_listener_primitive_set;
142 std::shared_ptr<ThreadedProtoUdpSender<TbotsProto::RobotLog>> robot_log_sender;
145 std::string interface;
148 unsigned short robot_status_sender_port;
151 unsigned int ip_notification_ticks = 0;
152 unsigned int network_ticks = 0;
153 unsigned int thunderloop_ticks = 0;
159 bool last_breakbeam_state_sent =
false;
164 uint64_t primitive_sequence_num = 0;
166 double thunderscope_sent_time_seconds = 0;
168 double thunderloop_recieved_time_seconds = 0;
172 std::deque<RoundTripTime> primitive_rtt;
175 TbotsProto::IpNotification robot_ip_notification_msg;