On this page you can learn about the algorithms that we use in our project.
In the challenge the rover needs to reach a set of given waypoints and return the its starting position. The rover must calculate the route on its own, it may use a coarse heightmap to do this. We implemented a path finding algorithm based on A*. The heightmap is transformed to a cost map that takes the steepness of the field into account. The route is then calculated by finding the optimal path between each pair of waypoints and the start position of the rover. An exhaustive search for the most efficient combination of these calculated paths is then performed. The best path is stored as a list of points on the path.
To determine the movement of the rover on the field we are not allowed to ue satelite based systems like gps. We need to use onboard sensors to determine the rovers movements and its position. To do this we use two cameras that are placed next to each other. Using the two slightly different images of these cameras we can determine the position of objects in 3 dimensions.
These spatial information help us to track the movement of the rover. We compare the spatial information generated by two image pairs in a certain time interval. If the rover is moving forwards, keypoints are closer to the rover in the second image. By repeating this process, we are able ot track the movement of the rover.
Finally the rover uses the position information and the calculated path for autonmous navigation. A navigation loop compares the current position and rotation of the rover to the next point it needs to reach on the path. It then determines the angle it needs to rotate in order to drive straight to the next point. After rotating the rover starts moving linearly to the point, until it reaches it. If due to uneven ground or other reasons the rover goes of track, the algorithm stops the linear movement and corrects the orientation of the rover.
During the rover challenge the operator is not allowed to directly watch the rover. So we implemented a user interface that shows a virtual rendering of the rover and the field. It communicates with the rover using a websocket connection and sening JSON encoded messages. These messages are commands sent by the operator to the rover, or information about the state of the rover sent by the rover to the operator.
You can play with a version of our software here (might take some time to load). This version does not communicate with a rover, it performs the commands inside the application itself. You need to enable manual control in order to steer the rover with your keyboard or with a playsation controler.