The AUV’s mission planner is written using ROS’s SMACH state machine library. With the library, the mission is able to execute states linearly, concurrently or iteratively by using the corresponding state containers. The library also allows for nested state machines which help the team to reuse mission code between tasks; this greatly simplifies the code and reduces error. The other important aspect about SMACH is the ability to visualize using the smach_viewer software. By spawning an introspection server within the mission code, the mission developer is able to visually see the state machine and debug any mistakes prior to running a mission.
There are a few main states used in BBAUV’s mission planner. Common to all states is a time out feature that will pre-empt the state when time is up. This allows the mission to move on in the event that the vehicle cannot see the task element.
GoToHeading – brings the vehicle to a particular heading; accepts both relative and absolute heading
GoToDistance – Bring the vehicle to a particular distance in either the surge or sway direction
GoToDepth – Brings the vehicle to a particular depth; also checks to make sure that the vehicle does not surface unintentionally
NavMoveBase – Connects to ROS’s move_base action server to bring the vehicle to a global coordinate in a map frame via a global path
StoreGlobalCoord – Stores global coordinates from DVL into roscore’s Parameter Server. This is useful if the mission requires the vehicle to return to a “last seen” location
WaitOut – This state waits for the vision task state machines to complete
LinearSearch – Move along the sway or surge axis and turn on search mode of vision task