User Interfacehttp://wiki.ros.org/rqt). RQT contains a host of helpful tools for developing GUIs which are made to interface with ROS. RQT is QT-based, and is written in python - helpful documentation can be found here (http://pyqt.sourceforge.net/Docs/PyQt5/). RQT adheres to the model-view-controller programming standard, where the internal states of the interface are separated from it's appearance and underlying infrastructure. The only limits placed on what can be done with QT development are the bounds of your imagination, and I assure you that whatever it may be, there is a way to do it with QT (You may have to do a lot of forum searching to find similar examples).
The Tiger Taxi GUI itself basically boils down to two very important components, i.e. the map panel and the control panel. Within these components, there are several pieces of lower level functionality which make interfacing with the cart smooth and enjoyable.
The map panel is on the left side of the interface. It shows a map of the campus, which allows for panning, zooming, and goal selection. Each pixel of the map image (obtained from https://www.openstreetmap.org) corresponds to a pair of GPS coordinates. The Tiger Taxi's GPS readings are used to place an icon, representing the current location of the Tiger Taxi, onto the map. This icon will move around as the Tiger Taxi moves around, and the map panel also allows users to lock the zoomed in map onto the cart as it moves around. The pan/selection button allows users to switch between states of the map panel. When "pan" is selected (button reads "select") the user can click on the map and move around in order to set a goal far away. When "select" is selected, the user can click on any piece of the visible map and load a GPS coordinate pair into the control panel. This will also add a GPS goal icon onto the map where the goal was set.
The control panel is on the right side of the interface. It houses three sub-panels, namely Navigation, Control, and Subsystems.
The Navigation sub-panel works hand-in-hand with the map selection. It displays the current longitude, latitude, and yaw of the cart, and populates the goal longitude and goal latitude when a user loads a goal on the map panel. There are three navigation states: Not-Set, Confirm, and Following. In the Not-Set state, the only available action is to select a goal on the map panel. Once this has been done, the Confirm state will be entered. In this state, the user can choose to either begin traveling to the goal that was set, or cancel the goal. If the user chooses to travel to the goal, the Following state will be entered. In this state, the user can either pause or cancel the navigation. If they decide to pause the navigation, they will re-enter the confirm state, but the goal they selected earlier will still exist if they choose to follow it again. If they decide to cancel the navigation, the goal will be canceled and the Not-Set state will be entered.
The Control sub-panel has a stack of three buttons for selecting the operational mode of the cart, and an unbounded stack of buttons within a sound board. The operational buttons allow for selection between the Manual, Remote, and Autonomous mode of the cart. In Manual mode, the Tiger Taxi will ignore any attempts to throttle except from the pedal of the golf cart. In Remote mode, the Tiger Taxi can be driven as in Manual mode, but can also be controlled via remote. In Autonomous mode, the cart can also be driven as in Manual mode, but will also accept throttle and steering commands coming from the ROS Navigation Stack. The Sound Board buttons simply allow the user to play any sounds through the Tiger Taxi's speakers. These must be added from within the GUI code, and users should play these at their own risk: the software we used to play the sounds does not allow you to stop playing the sounds - it will simply terminate after the full length of the sound.
The Subsystems sub-panel displays the rate at which all sensors are operating, and alerts the user of degraded or non-operational states, should the rates fall under a parameterized value (10 Hz is what we used). For each sensor, fields from the messages that the sensors generate can be added to or removed from the respective Subsystems entry. These fields will populate at a reduced rate, and can be paused from updating at any time by selecting the respective Pause button for the sensor.
Back to Home