Trigger an event in the state machine. Returns the next state.
251 {
252
253 States eNextState = States::eSearchPattern;
254 bool bCompleteStateExit = true;
255
256 switch (eEvent)
257 {
258 case Event::eMarkerSeen:
259 {
260
261 LOG_INFO(logging::g_qSharedLogger, "SearchPatternState: Handling MarkerSeen event.");
262
263 eNextState = States::eApproachingMarker;
264 break;
265 }
266 case Event::eObjectSeen:
267 {
268
269 LOG_INFO(logging::g_qSharedLogger, "SearchPatternState: Handling ObjectSeen event.");
270
271 eNextState = States::eApproachingObject;
272 break;
273 }
274 case Event::eStart:
275 {
276
277 LOG_NOTICE(logging::g_qSharedLogger, "SearchPatternState: Handling Start event.");
278
279 globals::g_pMultimediaBoard->
SendLightingState(MultimediaBoard::MultimediaBoardLightingState::eAutonomy);
280 break;
281 }
282 case Event::eSearchFailed:
283 {
284
285 LOG_INFO(logging::g_qSharedLogger, "SearchPatternState: Handling SearchFailed event.");
286
288
289
290 switch (m_eCurrentSearchPatternType)
291 {
292
293 case eSpiral:
294 {
295
296 LOG_NOTICE(logging::g_qSharedLogger, "SearchPatternState: Spiral search pattern failed, trying vertical ZigZag...");
297
299 m_stSearchPatternCenter.dRadius * 2,
300 m_stSearchPatternCenter.dRadius * 2,
301 constants::SEARCH_ZIGZAG_SPACING,
302 true);
303
304 m_nSearchPathIdx = 0;
305
306 m_eCurrentSearchPatternType = eZigZag;
307 break;
308 }
309 case eZigZag:
310 {
311
312 LOG_NOTICE(logging::g_qSharedLogger, "SearchPatternState: Vertical ZigZag search pattern failed, trying horizontal ZigZag...");
313
315 m_stSearchPatternCenter.dRadius * 2,
316 m_stSearchPatternCenter.dRadius * 2,
317 constants::SEARCH_ZIGZAG_SPACING,
318 false);
319
320 m_nSearchPathIdx = 0;
321
322 m_eCurrentSearchPatternType = END;
323 break;
324 }
325 case END:
326 {
327
328 LOG_WARNING(logging::g_qSharedLogger, "SearchPatternState: All patterns failed to find anything, giving up...");
329
331
332 eNextState = States::eIdle;
333 break;
334 }
335 default:
336 {
337
338 eNextState = States::eIdle;
339 break;
340 }
341 }
342 break;
343 }
344 case Event::eAbort:
345 {
346
347 LOG_INFO(logging::g_qSharedLogger, "SearchPatternState: Handling Abort event.");
348
349 globals::g_pMultimediaBoard->
SendLightingState(MultimediaBoard::MultimediaBoardLightingState::eAutonomy);
350
351 eNextState = States::eIdle;
352 break;
353 }
354 case Event::eStuck:
355 {
356 LOG_INFO(logging::g_qSharedLogger, "SearchPatternState: Handling Stuck event.");
357 eNextState = States::eStuck;
358 break;
359 }
360 default:
361 {
362 LOG_WARNING(logging::g_qSharedLogger, "SearchPatternState: Handling unknown event.");
363 eNextState = States::eIdle;
364 break;
365 }
366 }
367
368 if (eNextState != States::eSearchPattern)
369 {
370 LOG_INFO(logging::g_qSharedLogger,
"SearchPatternState: Transitioning to {} State.",
StateToString(eNextState));
371
372
373 if (bCompleteStateExit)
374 {
376 }
377 }
378
379 return eNextState;
380 }
geoops::Waypoint PopNextWaypoint()
Removes and returns the next waypoint at the front of the list.
Definition WaypointHandler.cpp:499
void Exit() override
This method is called when the state is exited. It is used to clean up the state.
Definition SearchPatternState.cpp:66
std::vector< geoops::Waypoint > CalculateZigZagPatternWaypoints(const geoops::UTMCoordinate &stCenterPoint, const double dWidth=20.0, const double dHeight=20.0, const double dSpacing=1.0, const bool bVertical=true)
Calculate waypoints for a zigzag pattern. This function generates waypoints for a zigzag pattern star...
Definition SearchPattern.hpp:200
std::string StateToString(States eState)
Converts a state object to a string.
Definition State.hpp:89
States
The states that the state machine can be in.
Definition State.hpp:31