Autonomous Navigation Robot
The objective of this project was to develop and implement a robot that is able to map out its environment, while maintaining its own position therein. The robot will be able to follow waypoints and can move in any direction.
Project Leader: Dr. Allan de Freitas (Advanced Sensor Networks, University of Pretoria)
Project Details / Background
The system uses a 360° spinning LiDAR as its main sensor to obtain environment data. The RPLidar A1 is a low cost LiDAR that can be mounted to flat surfaces.
The holonomic movement of the device requires a choice between differential drive and omnidirectional wheels. For true holonomic movement omnidirectional wheels are used as they allow the device to sideways like a crab. These wheels have some drawback. A much increased amount of wheel slip is experienced on especially hard floors, this makes the use of encoders for the motors of little purpose.
To interface the LiDAR and motors to a set of algorithms that can: extract data, perform calculations and perform actions, Robotic Operating System (ROS) is used as middleware. ROS has a immense amount of resources available in the form of packages that can be installed via package manager or from source. The benefit of installing from source is being able edit code that could fit your needs better.
The specific packages used and modified are: Hector SLAM and Navigation Stack. Hector is a PhD project completed in 2013 at the University of Darmstadt. Simultaneous localisation and mapping (SLAM) is a quite new topic with limited research. This implimentation of SLAM is able to accurately build a map with limited error (measured 4 cm on a distance of 4 m) while kepping track the position of the device without any encoder or odometry data.
The navigation stack, as the name implies is used to navigate through the map set up by the SLAM algorithm. Navigation is primarily used in this project to receive waypoints from users and set up a path to reach that specific coordinate. Various shortest path algorithms are available for use, including A* and Dijkstra. Object avoidance was a struggle to implement and ultimately could not be used with confidence to work every time.
Image Gallery




