Rover Search

Overview

The rover search is a sample application designed to locate a rover emitting a radio source by maneuvering a drone capable of measuring the relative signal strength. The rover search commands a drone to takeoff and move forward 40 meters. After moving forward, the drone will measure the signal strength. It will move forward another 40 meters and the drone will measure the signal strength again. If the signal is weaker, the drone will turn 90 degrees to the right before moving forward again. Otherwise, the drone will simply move forward. 

This procedure will continue until the maximum search time (default 10 minutes) has elapsed. When performing optimally (i.e., the signal strength is decreasing monotonically with an increase in distance), the drone will locate and circle around the rover with the radio source. In reality, the signal is not decreasing monotonically, so a better solution should be devised.

State Diagram

Execution

To select the rover search as the vehicle application, please do the following (on the E-VM of the drone that is searching):

$ cd /root/Profiles/ProfileScripts/Vehicle

$ cp Samples/startRoverSearch.sh startVehicle.sh

If you want to change some parameters in the sample vehicle experiment, please edit this file: /root/Profiles/ProfileScripts/Vehicle/Helpers/roverSearchHelper.sh

In that helper script you can change or add the following parameters:

--search_time:       [default 10 minutes] search time in minutes to look for the rover

--fake_radio:        [default False] Whether to choose a random location to simulate a radio

--safety_checker_ip: [default 192.168.32.25] IP of the C-VM where the safety checker server is launched

--safety_checker_port:   [default 14580] port on the C-VM to connect to the safety checker server


The script is written in python3 and uses the AERPAW vehicle control library aerpawlib. 

The --fake_radio option can be used to run (and debug) the vehicle script without the radio script: the code will pick a random location (within the geofence) for the rover and will create fake radio readings (equal to the negation of the distance between the rover and the drone). The safety_checker IP and port numbers are used to enable the safety checker). Leave them at the default values (the safety checker server is outside the control of the Experimenter).

How to Run the Search

To run the entire search, an Experimenter should setup an experiment with two portable nodes, one with a vehicle of type rover and the other one with a vehicle of type drone. Initiate development, then setup the transmitter from GE2 Channel Sounder on the rover portable node, and the receiver from the same GE2 Channel Sounder on the drone. Setup the rover search (as shown in the Execution section above). Then "hide" the rover somewhere on the field. An easy way to do that is to manually drive the rover (using QGroundControl) somewhere on the field. Then start the experiment. This will start the transmitter on the rover (at the location unknown to the UAV), and will start the receiver at the UAV and the rover search sample application. Note the measurements printed out in the log of the rover search script (running in the E-VM of the UAV) to explain the resulting trajectory.

Note that this sample application is not meant to be a good solution to the problem in the AFAR challenge. Instead it is a simple example that gives the participants all the elements they need to construct a better solution: a way to obtain radio signal strength, to control movement and heading of the drone, to check their trajectories, and even to operate in the absence of a radio (i.e., with a fake radio), for ease of development. We expect that the winners will have extensively modified this sample application, or even developed a solution from scratch while borrowing some of the useful elements of this solution.