Date: 24.10.2019 – 31.10.2019
Our seemingly constant barrage of technical issues continued this week, as attempts to install a driver for our USB WiFi adapter on the Jetson Nano failed. While there are drivers available for the particular chipset we had in hand, they didn’t work on the Jetson Nano. The particular driver we found had a configure option to target the Jetson Nano platform, but enabling it did not do the trick. We got it working halfways (sort of), but it was not stable enough and we could not rely on this connection. After having spent way too much time on this problem, it was decided that switching to a Raspberry Pi instead might be a good idea, as those have integrated WiFi with much better support.
The reason why we avoided Raspberry Pi from the beginning was because the machine learning node would not give us great results in terms of frame rate and performance. Since the object recognition node is running constantly, it would slow down the single-board computer and it might not be powerful enough to give us a smooth video playback from the drone camera. This is the main reason why we decided to use a Nvidia Jetson Nano to begin with, since it is optimized for TensorFlow and machine learning, and it has a dedicated GPU to handle heavy processing tasks. But now after struggling so much with the setup of Jetson Nano, we have concluded that a Raspberry Pi should be good enough for our purpose and that we can sacrifice some frame rate and less processing power in hope for an easy setup environment where we don’t have to stress about all the drivers and hack things together to make it work.
Because the Raspberry Pi’s general purpose IO pins can deliver significantly higher current, we can get rid of our Arduino board as well. This means that we can control the four landing gear motors directly from our Raspberry Pi and have everything running as a node on this single-board computer, without needing to communicate with an external board using the serial port. This is also something we spent some time working with, which now turns out to be unnecessary. We have ordered a Raspberry Pi 4 and hopefully have it delivered in a couple of days.
We also got the landing gear working properly, since we experienced some issues with the serial port last time. We only tested one landing feet to verify that it is working properly, and it seems to cooperate fine. We obviously need to calibrate this a little to make it rotate smoother and to ensure that it’s synchronized with the three other landing feet as well. As we also mentioned this once earlier, if the Arduino driver code reads the value 49, which is the ASCII code for 1, it will raise the landing gear. If any other byte is received, the gear will be lowered. As a safety measure, if no signal is received after a while, it will automatically lower the landing gear. In case the system crashes, it is beneficial to automatically lower the landing gear in order to prevent damage to the drone if it should fall down from height. A snippet from the landing gear code to demonstrate how it works:
We have a video as well to show how it looks like on our prototype model. Please keep in mind that the landing feet still needs to be calibrated to improve its stability.
We are really excited about the new Raspberry Pi 4 and we are looking forward to transition our work over to this single-board computer. Using the Jetson Nano for a couple of months has been very stressful and it is not something we can rely upon, at least not now due to the project deadline. Hopefully we will move everything over to the Raspberry Pi and have it configured with ROS, TensorFlow and everything that comes along with it as quick as possible, and have a better working system by the start of next sprint.