During my internship at Inspired Automation Future Technologies, I was involved in two projects. The first one was the RACECAR whereas the second was on the navigation of a quadcopter in an indoor environment. The drone was to be exhibited in the robotics museum to demonstrate the uses of drones for agricultural purposes like pesticide spraying. This was my first hands-on experience with a drone. A pixHawk 2.4 flight controller was used on the drone and raspberry PI for the processing. Since the area of aerial robotics was completely new to me, I had to try various approaches before getting a fair amount of success. I will briefly describe the approaches used.
Above video demonstrates the autonomous take-off, localisation using an overhead camera and stabilised position hold of the drone. Those who have worked with drones would be aware that the PixHawk flight controller already has the provision to navigate the drone autonomously. Then what is the point of the whole project? The critical point to note is that these autonomous modes only work in outdoor environments in the presence of GPS, whereas our project was for indoor environments.
The first thing that came to my mind was to override the GPS check for the flight controller. This was a reasonably good approach, and many people had done this before. Disabling the pre-flight check of GPS would let you switch to stabilized mode but there was no source of localisation nor was there a proper source for altitude measurement as it was almost impossible to measure the height by using just the barometer readings in indoor environments. Thus we tried to use the Marvelmind Indoor GPS beacons. There were four stationary beacons and one dynamic beacon which was mounted on the drone. Now the position could be easily known in three dimensions. The problem was to integrate this localisation with Pixhawk. I was successful in integrating them and the stabilisation and position hold were working well. There was some issue with the navigation which was arising due to faulty yaw measurements. The interference was causing the compass to give inaccurate readings. Moreover, Marvelmind didn't have the feature to provide the orientation of the drone.
Thus the next approach used was based on localisation using an overhead camera. In addition to this, we removed the drone control with the help of Pixhawk. Only the sensor readings were taken from the Pixhawk. The Radio receiver channel was replaced by connections from a Raspberry Pi. We manually generated the PPM signals according to the situation. This approach was able to solve the previously faced issues as the feedback was orientation was also provided by the overhead camera. Here is a list of references which might be helpful to understand the project.