“The first and simplest emotion which we discover in the human mind is curiosity.” – Edmund Burke
Imagine a world where we could ask machines to explore an unknown territory and give us back key information to help unravel the mysteries of the unknown. What if we could send a rover into deep underground mines to build maps of the mines, study the terrain and identify key locations. Or we could send it to Mars or any other planet to study the environment.
My Summer project was a much scaled down version of this dream. Along with my teammates Devansh, Vijeth and Anmol and in association with the Electronics and Robotics Club of IIT Bombay we built a rover capable of exploring a grid-based world and build a complete map of this environment. So without wasting further time I will now tell you how we went about creating our 2π-Mapper.
So it all began with ideation, what to do in our Summer Project? We came up with various ideas based on Virtual Reality (VR), reading books for the blind etc. Our initial plan was to create a robot which would give the user the experience that he/she was in the robot’s place. This project, based on VR was really interesting but the thrill of making an intelligent machine capable of mapping the environment on its own lured us towards our current plan. Also the cost of our current project would be way below the VR one. Considering all these factors we decided to focus on our intelligent mapper. We could always implement our VR feature on the rover that we were making. Next part - Planning!!
After deciding on the idea, comes the important part.
How will we accomplish the project?
How will we go about doing it?
This is where Seniors come in. Using their expertise and experience they fine tune our crude ideas, provide suggestions, give us ideas and help us filling the loopholes in our project. Instead of jumping straight into making our project we were encouraged to plan each and every step.
Here is a Team Meet picture….
P.S Vijeth is taking the pic :P
Some of the ideas which sounded fine at first turned out to be outrageous when carefully considered.
For example, for localizing our rover we were planning to use global or external positioning system. We could use a system somewhat like GPS to help us tell where the rover is! But would there be GPS available on Mars? We won’t even get GPS in underground mines. In short we realized that there would be no Global localization system to help us. The rover would have to be self-reliant in positioning itself. It can sure take clues from the local environment but other than that, it will have to use its own sensors to localize itself.
Another idea that we rejected was the use of Omniwheels (To see an Omniwheel robot in action you can view this video). It sounded pretty cool at first but the complexity it brought with itself lead us to discard the idea. We were planning to keep track of how much the wheel rotated to get an idea of the rover’s location. If we had used omniwheels we would have to use encoders along with it to keep track of rotations, which would lead to additional costs. All these problems were easily solvable if we used Stepper motors instead. However, one of the advantages of using Omniwheels is that we would not have to worry about turning by exactly 90o. After carefully balancing the advantages and disadvantages we decided to go ahead with Stepper motors.
In this manner we were able to finally decide on a proper plan on how to execute our project. Next part - Execution!!
Here comes the most exciting but strenuous part of the project. It is here that all our ideas are put to test.
First we jointly decided all the components we will need throughout the project and made a list – the Bill of material. After that, we went for several field trips to Lamington Road. Our first trip was just for research purposes. We went and enquired about prices of our components. We came back, further fine-tuned our ideas, changed a few details and made our final component list.
Meanwhile we also started design thinking on the software front deciding algorithms which the rover will use, which way it has to turn, and how will it remember and construct the map and how will it keep track of its location etc.
In our subsequent field trips, we purchased the components and started testing them one by one. We first tested the components on Arduino and then moved on to Raspberry Pi. We hit our first major hurdle while testing stepper motors. The previous day we tested the stepper motors they all seemed to be working perfectly. However, that day the motors just won’t work and we were not able to figure out where the problem was. Whether it was a loose connection or the motor drivers were not working or the motor itself was not working, or the program we wrote is wrong - we were totally confused! After spending a good deal of time and effort, we got frustrated and decided to report this problem to our mentor, Parth Kothari. Time for some Parth Magic!! He came in late at night and showed us how to systematically debug a circuit. He gave us various tips and hacks on how to effectively debug a circuit. He checked the circuit at each and every step and finally nailed down the culprit - the motor driver.
Here are some pictures of the individual parts running….
After the stepper motor fiasco was behind us, progress started picking up pace. We quickly decided the various parameters (size of the rover, area of grids etc.) of the project and started assembling the rover.
This is what our rover looked like from top after assembly. Now the only hurdle remaining between our goal and us was creating the brains of our rover. Our rover had to take input from its 5 senses (4 Ultrasonic sensors and 1 magnetometer), interpret those readings and take a decision in which direction to move. It had to remember which parts of the map it had already visited so that it doesn’t go and explore those parts again and it has to recognize when to stop the mapping process. It has also had to send the map that it had created and its own location back to the user’s laptop so that he/she can keep track of what is happening. We faced numerous bugs during trial runs. Probably the weirdest bug that we encountered was when our R-pi was changing the program code on its own. No, I was not hallucinating! You can ask Vijeth :P. After modifying the program and saving it (The computer showed it was saved!) the rover used to run on the previous unmodified code only. After we opened the same file. The modification was gone. Then after sometime it used to magically reappear (or sometimes never appeared). We figured out the problem was due to the internet connectivity of Tinkerer’s Laboratory though we never figured out how exactly the problem occurred (the bug was not reproducible).
Anyways, one by one we cleared all the hurdles and finally we had made a bot capable of mapping any unknown environment. We of course improved the design of the rover, gave it a nice thermocol covering, covered those ugly wires as it was now time for DEMO RUNS!!
We created maps of various shapes and sizes and our rover was able to successfully navigate through the maps and construct the top view of the map. This featured video shows our rover navigating through a ‘Y’ shaped map. The level of satisfaction at our dream come true was incredible!! It truly did justice to all our give-up moments and also to those who spent their valuable time helping us.
But This is just the Start
What we have made is a very rudimentary 2-D mapper (that’s why the name 2π-Mapper :P) which is far from being applied in the real world. For starters we need to extend it to 3D where it can sense the height of the object as well. Instead of its discrete sensing in 4 directions we can extend it to 360o using laser range finders. We can use more sophisticated localization algorithms like particle filters. The list of improvements would be endless and we would encourage others to take this project to the next level!! For the ones who are interested, here is a detailed document with the technical details of the project.