Trigger an event in the state machine. Returns the next state.
294 {
295
296 States eNextState = States::eSearchPattern;
297 bool bCompleteStateExit = true;
298
299 switch (eEvent)
300 {
301 case Event::eMarkerSeen:
302 {
303
304 LOG_INFO(logging::g_qSharedLogger, "SearchPatternState: Handling MarkerSeen event.");
305
306 eNextState = States::eApproachingMarker;
307 break;
308 }
309 case Event::eObjectSeen:
310 {
311
312 LOG_INFO(logging::g_qSharedLogger, "SearchPatternState: Handling ObjectSeen event.");
313
314 eNextState = States::eApproachingObject;
315 break;
316 }
317 case Event::eStart:
318 {
319
320 LOG_NOTICE(logging::g_qSharedLogger, "SearchPatternState: Handling Start event.");
321
322 globals::g_pMultimediaBoard->
SendLightingState(MultimediaBoard::MultimediaBoardLightingState::eAutonomy);
323 break;
324 }
325 case Event::eSearchFailed:
326 {
327
328 LOG_INFO(logging::g_qSharedLogger, "SearchPatternState: Handling SearchFailed event.");
329
331
332
333 switch (m_eCurrentSearchPatternType)
334 {
335
336 case SearchPatternType::eSpiral:
337 {
338
339 LOG_NOTICE(logging::g_qSharedLogger, "SearchPatternState: Spiral search pattern failed, trying snake...");
340
342 m_stSearchPatternCenter.dRadius * 2,
343 m_stSearchPatternCenter.dRadius * 2,
344 constants::SEARCH_ZIGZAG_SPACING,
345 constants::SEARCH_SNAKE_SLITHERS);
346
347 m_nSearchPathIdx = 0;
348
349 m_eCurrentSearchPatternType = SearchPatternType::eSnake;
350
351
352 m_pRoverPathPlot->AddDots(m_vSearchPath, "SnakeSearchPattern");
353 break;
354 }
355 case SearchPatternType::eSnake:
356 {
357
358 LOG_NOTICE(logging::g_qSharedLogger, "SearchPatternState: Snake search pattern failed, trying ZigZag...");
359
361 m_stSearchPatternCenter.dRadius * 2,
362 m_stSearchPatternCenter.dRadius * 2,
363 constants::SEARCH_ZIGZAG_SPACING);
364
365 m_nSearchPathIdx = 0;
366
367 m_eCurrentSearchPatternType = SearchPatternType::END;
368
369
370 m_pRoverPathPlot->AddDots(m_vSearchPath, "VerticalZigZagSearchPattern");
371 break;
372 }
373 case SearchPatternType::END:
374 {
375
376 LOG_WARNING(logging::g_qSharedLogger, "SearchPatternState: All patterns failed to find anything, giving up...");
377
379
380 eNextState = States::eIdle;
381 break;
382 }
383 default:
384 {
385
386 eNextState = States::eIdle;
387 break;
388 }
389 }
390 break;
391 }
392 case Event::eAbort:
393 {
394
395 LOG_INFO(logging::g_qSharedLogger, "SearchPatternState: Handling Abort event.");
396
397 globals::g_pMultimediaBoard->
SendLightingState(MultimediaBoard::MultimediaBoardLightingState::eOff);
398
400
401 eNextState = States::eIdle;
402 break;
403 }
404 case Event::eStuck:
405 {
406 LOG_INFO(logging::g_qSharedLogger, "SearchPatternState: Handling Stuck event.");
407 eNextState = States::eStuck;
408 break;
409 }
410 default:
411 {
412 LOG_WARNING(logging::g_qSharedLogger, "SearchPatternState: Handling unknown event.");
413 eNextState = States::eIdle;
414 break;
415 }
416 }
417
418 if (eNextState != States::eSearchPattern)
419 {
420 LOG_INFO(logging::g_qSharedLogger,
"SearchPatternState: Transitioning to {} State.",
StateToString(eNextState));
421
422
423 if (bCompleteStateExit)
424 {
426 }
427 }
428
429 return eNextState;
430 }
geoops::Waypoint PopNextWaypoint()
Removes and returns the next waypoint at the front of the list.
Definition WaypointHandler.cpp:500
void Exit() override
This method is called when the state is exited. It is used to clean up the state.
Definition SearchPatternState.cpp:77
std::vector< geoops::Waypoint > CalculateSnakeSearchPattern(const geoops::Waypoint &stStartCoord, const double dWidth=20.0, const double dHeight=20.0, const double dSpacing=1.0, const int nNumberOfSlithers=1.0, const bool bVertical=true)
Calculate waypoints for a snake search pattern.
Definition SearchPattern.hpp:286
std::vector< geoops::Waypoint > CalculateZigZagPatternWaypoints(const geoops::Waypoint &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:124
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