Improving Navigation and Mapping with Arduino robot
MetadataShow full item record
During this Master Thesis work has been made on the Arduino robot to improve its general capabilities. Work has also been made to further explore the possibilities of the sensors used on all robots in the system. A hardware fault with the wheel armature cogs on the left side of the robot was discovered. This problem lead to the robot faultily estimating its position and be unable to drive in a straight line. This caused the robot to often drive into walls and not give reliable information about the mapping due to its corrupted position estimation. This problem was solved using a metal plate mounted on the armature to improve its stability and the tightness of each cog on the left side, so the cogs could not slip on each other. This solution completely removed the aforementioned problem and the robot now registers the correct wheel rotation. We do not expect a similar problem to occur on the right side as the work on the armature on that side is significantly better. Each sensor was searched for faults and tested for accuracy. The encoders were tested mainly by the wheel factor; the number converting encoder "ticks" to distance moved. This number was found to be adequate, however caution must be made as to the possibility of differing wheel factors depending on the surface. The surface tested on was room B333, "Slangelabben" at NTNU. The gyroscope was tested during rotation and compared to the encoder and the real-world value using the OptiTrack reflector-camera system. The gyroscope was found to be slightly off the real value each test. It was decided to poll for mean value more frequently to remove bias on the gyroscope on a more consistent basis. This seemed to improve the rotation estimation during our final tests. The compass was also tested during rotation and found to be very lacking. The noise factor on the sensor proved too great to adequately filter out during rotation. Due to this, the compass values had a negative impact on the heading estimation, and was removed from the system. It is advised that more work be done to explore the possibilities of filtering the compass and use it to reset gyroscope off-set. The accelerometer was found to give valuable, but very noisy data. Attempts were made at filtering and using the data, however none proved usable enough to directly implement on the current position estimation. It was decided to not be included in the software. More work is advised as the data is valuable and could potentially be used to detect slippage of the wheels and crashes. As the old navigation algorithm was not based on coordinates, but rather on distance and heading, it was decided that a new navigation algorithm be implemented in the robot. This algorithm is based on converting the heading and distance commands the server sends into specific coordinates, then use a similar controller to minimize the distance to the target. This controller is a two-step algorithm, which first rotates to the target, then drives forward while continuously controlling the heading towards the coordinates. A lot of focus was also put on smoother movements, as we witnessed a lot of overshoot on the robot both during rotation and forward movement due to the robot's mass. This new algorithm showed much greater results than expected and has almost eliminated the navigation error. During the final testing with the other robots it was shown to work well even if it showed some expected faults. The navigation is smoother and more reliable than before, and the position estimation is adequate based on its current algorithm.