# Using the Logitech F310 gamepad with the DJI Tello

I really like the DJI/Ryze Tello.

It’s a great nano drone and its feature list is hard to match at its price point. The camera/video quality is very good and for a drone which solely relies on its WiFi hotspot for control and video streaming to a smartphone, the range is pretty decent as well. It’s impressively stable outdoors and the 10-15 minute battery life is adequate. As a trainer drone for new pilots, there’s very little to complain about.

However, the main thing which drew to me to buy the Tello on impulse was its marketing with an emphasis on being “programmable”. Unfortunately, I bought it without really looking into what this meant. I blindly assumed the Tello was hackable, but it turns out that the “programmable” features of the drone are limited to a few Scratch commands for writing basic scripts for movement. I wanted more control over the drone and initial impressions suggest that it has the technology to do a lot more than what the Scratch API exposes. The tiny drone has an infrared sensor for autonomous landing and uses optical flow for maintaining its position, which makes its sensor array unmatched for its price point.

The onboard Intel Myriad 2 SoC is advertised to have “14 Programmable SHAVE cores” but details on how to develop for this SoC are scarce. It’s a shame, because I would’ve really loved to see the autonomous capabilities of drone by implementing my own algorithms for it. The Tello uses this SoC for its Visual Processing Unit to keep it stable in flight, so I think it’s reasonable to speculate that this chip could be used for a larger variety of image processing applications. Moreover, the drone is clearly tuned for stability and this makes it feel sluggish despite the drone having the hardware to be much more nimble.

But I digress. I spent some time playing with different approaches to reverse engineer the Tello, and the main Python projects I found were:

Tello-Python: DJI’s official Python API for interacting with the Tello. Promising, but I found their sample apps glitchy.

TelloPy: This library is amazing. It appears to be a port of some of the reverse engineering work on the Tello conducted by the Gobot folks. The API supports everything offered in Tello-Python and much more. To top it off, I found the sample TelloPy apps far more reliable than their Tello-Python counterparts

I also suggest checking tellopilots.com for more mods and discussion about hacking the Tello.

The nice thing about TelloPy is its controller support using pygame. However, this is limited to the PS4, PS3, XBOne, and Taranis controllers in gamepad mode. My Logitech F310 wired controller wasn’t supported, so I figured out the button mappings in pygame and added it to the source of the joystick_and_video.py sample app. I’ve created a pull request for the same too. To download my fork of TelloPy, clone it from GitHub here:

git clone https://github.com/shortstheory/TelloPy/tree/F310


After this, build and install tellopy. The one currently available on pip seems to be outdated .

cd TelloPy

python setup.py bdist_wheel



Now switch on the Tello and connect your computer to its WiFi hotspot. The Tello can be controlled using the F310 joystick using:

python tellopy.examples.joystick_and_video.py


Press RB to takeoff and LB to land! The left stick is used for yaw and altitude control and the right stick handles roll and pitch.

## Raspberry Pi Controller

It would be nice if this could work without the need of a laptop. I tested this by following the same installation steps on a Pi Zero W running Raspbian Lite and the setup works well. I added the script to the Pi’s crontab so it would start on every boot of the Pi:

sudo crontab -e


@reboot python /home/pi/TelloPy/tellopy/examples/joystick_and_video.py


To make the Pi Zero W automatically connect to the Tello when switched on, add the following lines to your /etc/wpa_supplicant.conf on the Pi:

network={
ssid="TELLO-XXXXXX"
key_mgmt=NONE
}


The Pi Zero is small enough to be tucked in behind the controller, even with a small Li-ion battery for power. However, I imagine the range of the Pi Zero W’s Wi-Fi connection would only make it suitable for indoor flight. Fortunately, this can always be fixed by using a USB Wi-Fi dongle.

## Things to be done

While the TelloPy API supports the directional flip capability of the Tello, it doesn’t map these controls to the joystick. I plan on dedicating the D-Pad for directional flips. I would also want the video streamed to the Tello to be saved directly to the Pi’s internal storage. It would also be interesting to see if I could get the Pi to handle the image processing tasks and control the Tello remotely.

# Where has the magic gone?

A big change that I’ve realised during undergrad is that engineering doesn’t feel ‘magical’ anymore.

One of my favourite school projects: Wireless Electricity!

Of course, a vague term like ‘magic’ isn’t very expository, so let me start with where I’m coming from. In school I was completely besotted with every piece of technology with a screen on it. I might have spent more time caressing my Nintendo 3DS than I played on it. Hyperbole aside, I marvelled its glasses free 3D screen and it felt like its hardware had limitless potential applications if only I knew how to program for it. Of course, now that the Nintendo 3DS has been hacked, I am aware that its capabilities are far more limited than what I imagined in 2011. But at the time, the perception that smartphone class hardware could do incredible things was very exciting and it’s a big part of the reason I got into programming with a bit of electronics projects on the side.

So much was expected from this venerable console

I had the same feeling when we bought our first home laptop in 2013 (which is now lying unpowered and unused near my study table). My head was dizzy with possibilities and this was before I had an inkling of knowing anything about how to code. Cliche as it sounds, I felt a spark when I implemented a prime sieve to bring my runtime for a Project Euler question from two hours to a few seconds. This was reinforced by a delightfully geeky friends circle in school.

Arduino Temperature Display - displaying a balmy 24 degrees C

I experienced it again when I got to play with an Arduino a year later. It did blow my mind in the beginning that I could write C code to turn an LED on and off. One of my first Arduino projects during that time was to interface my UNO with a microphone to view the waveform on a screen using Processing. There was something very satisfying about practically understanding how sensors worked. In the end, I repurposed my UNO to function as a 7 LED binary display for my TMP36 ambient temperature sensor.

However, I think the turning point was during my first GSoC project after my first year of college. While learning how to develop good quality software for a terrific open source org like KDE was very inspiring in the beginning, I realised that the magic which I used to feel when programming was slowing being snuffed out the more I understood what I was doing. Once I had a robust mental model of the problem and its solution, writing code for it just felt like a perfunctory task. I was no longer fascinated by the fact that the code I was writing was arcanely converted to binary and executed on a billion transistors at its lowest level of abstraction. In the remaining three years of undergrad, I was fortunate to get the chance to work on some awesome projects, but the magic which I used to feel with doing something new is replaced with a wary feeling of knowing that I would need to figure out how to solve some pressing technical issue in the project. In that sense, I have developed a much better eye for spotting technical solutions.

Knowledge is a double-edged sword. Things were far more exciting when I was a brand-new, bright-eyed programmer, but it’s only because of the experience I have gleaned from one project that I have been able to do another. I could blame it on burnout earlier, but having had a very relaxed final year, I can’t say that’s the case anymore. It has led me to think that the exciting part was never the actual implementation (or coding in this case), but figuring out the solution instead. I am rather glad that this is how things have turned out, for I think an 18 year old version of me would’ve rather chased a failed start in GUI building/frontend web development if the coding part was what I enjoyed. All my reservations aside, I still loved the things I have worked on and the people I have met along the way. Yet, I wouldn’t mind treading some unfamiliar ground for rediscovering the magic which drew me to engineering in the first place.

The related discussion on Hacker News for this post can be found here: https://news.ycombinator.com/item?id=20222096

A Russian translation of this blog post can be found here: https://mygpstools.com/kuda-ischezla-magiya

# Places to Visit in Singapore

I recently returned home from a very memorable 4.5 months in Singapore.

I’ve been to many places, met amazing people, and learned so much during my internship at the Acoustic Research Laboratory at NUS. I’ve also learned to become a bit more careful with my finances, which was all the more important given the constraints of my S$1000/month stipend. As I figured out during the course of my time in Singapore, this stipend doesn’t go very far in covering more than basic expenses. Nevertheless, there’s still plenty you can see in Singapore on a budget. If you’re going to stay in Singapore for any longer than three days, buying an EZLink transport card is well worth the S$5 investment. EZLink cards work in all of Singapore’s modes of public transport and it’s much more efficient and cheaper than buying a ticket for every trip. CityMapper and SingaBus (iOS and Android) are your best friends when it comes to planning the best combination of buses and MRT lines islandwide. In my experience, the buses were much slower than the MRT (especially during peak traffic hours), but they are far more comfortable with ample seats and powerful aircon. It is also a good idea to check the EZLink trip transfer rules which can save you a lot of money if you plan in advance.

All the below places are either free or can be done for less than S$15 per person. ### Sungei Boloh Wetlands One of the many monitor lizards we saw that day The Wetlands is a pretty interesting place located in North Singapore. It’s so close to Malaysia that you can easily catch a glimpse of Johor Bahru from the boardwalk. Unlike Singapore’s other parks, the Wetlands is an unfiltered experience. On a good day, you can easily expect to see several animals ambling about the forested area. We saw five monitor lizards, a number of mudskippers, schools of needle fish, an uncountable number of birds, a cobra (!), and even a wild crocodile lying just out of sight. It makes for a great day trip if the weather cooperates and the only thing you’ll need to spend here is your time. ### Southern Ridges The famous Henderson Waves Bridge The Southern Ridges is a trail running through five parks, from Mount Faber (near VivoCity) to Labrador Nature Reserve (near the NUS campus). It’s an amazing 10km walk and I loved the views from the Henderson Waves bridge and the Canopy Walk. I really appreciated how green Singapore is from the views at Henderson Waves! As an aside, I tried making an 8km evening run from Mount Faber till Science Park, but I quickly got worn out by all the steps and elevation. Walking through the park is definitely more enjoyable. ### Marina Barrage A spectacular view from the Barrage If you’re into ships, the Marina Barrage can offer quite a spectacular view. The Barrage is located near Marina Bay Sands/Shoppes. It feels very communal at the top of the Barrage, with several families setting up picnics and children flying kites. Unlike the Southern Ridges (which is breathtakingly beautiful, but far too strenuous for a run), this can be a part of a fantastic 10km running trail, starting from the Merlion Park to the Marina South Pier MRT Station via the Marina Barrage. ### Pulau Ubin View of Chek Jawa from the Jejawi Tower This is one of the more exciting parts of Singapore. Pulau Ubin is an island located in the North-West part of Singapore. It’s accessible by a S$3 (March 2019) boat ride from Changi Village. Like the Sungei Boloh Wetlands, the island is geographically close to Malaysia. It’s so close that I noticed that my cellphone shifted to receiving signals from MyMaxis Malaysia instead of StarHub Singapore!

Cycling Trail at Pulau Ubin

While Pulau Ubin has had some artificial transformation, I got the feeling that NParks went to great lengths to make it easily traversable while preserving the natural beauty of the island. Speaking of traversal, the best way to get around Pulau Ubin is by mountain bike, which can be rented near the jetty for S\$10-15 for the entire day. The Chek Jawa wetlands is similar to Sungei Boloh (though we didn’t see half as many wild animals when we went). The Ketam Mountain Bike Park in the west part of Pulau Ubin can be quite a challenge. The Blue Trails are moderately difficult with rough paths and small slopes, while the Black Diamond and Double Black Diamond trails are utterly brutal. Attempting the Black trails with the Reebok bike I rented was out of the question.

We spent nearly six hours cycling around Pulau Ubin. Carrying food and water is recommended, though there are plenty of vending machines dotted about the island. Sunscreen is also a must.

### St. John Island

Singapore’s Skyline from the ferry

This is another island adventure, located towards the southern part of Singapore. The ferry ride to the island is wonderful and it was fun to watch the Singapore coastline go by - from the sweeping skylines of the Marina Bay Financial Centre to the HDBs in Jurong. Unlike Pulau Ubin, carrying supplies for St. John Island is imperative. There is no drinking water on the island, nor is there any food to be found. At my insistence, we went to see the Tropical Marine Science Institute’s research lab. Of interest is the bucolic Lazarus Island.

We spent half an hour skipping stones here!

The same ferry ticket also includes a stop at Kusu Island. Although Kusu looked lovely, we were far too exhausted and we had to beat a hasty retreat to Singapore after completely running through whatever little supplies we had brought with us.

### MacRitchie Reservoir/TreeTop Walk

TreeTop Walk Suspension Bridge

These two places together are ideal for a very enjoyable day trip. I suggest starting from Windsor Park, hiking to the TreeTop Walk, and then walking to the MacRitchie Reservoir via the well-manicured Golf Link. The TreeTop Walk takes you between the tops of trees using a very unique suspension bridge originally constructed for ecologists to study the ecosystems of the tree canopies. The suspension bridge is one-way and is quite narrow. I went alone on a weekday and I loved having the entire bridge to myself.

MacRitchie’s Art Pavillion

MacRitchie has good running trails, boardwalks, and some much needed eating options once you finish the trail. Of note is the Leaning Tree in the middle of the boardwalk. The boardwalk was specifically redesigned in a section to accommodate this tree and this exemplifies how much Singapore cares about preserving its natural wonders!

There are many places which I also loved but didn’t make it to this list. Honorable mentions go to:

• Gardens By the Bay
• S.E.A. Aquarium
• East Coast Park
• Chinese Garden/Japanese Garden
• Jewel (Changi Airport)
• Woodlands Waterfront Park

I can’t recommended Singapore enough for a short-term visit or an internship. It’s a beautiful city with plenty to do, cheap and delicious food, and efficient public transport. What’s not to love?

# Singapore!

It’s been almost two months since I’ve landed in Singapore.

I’m here for completing my undergraduate thesis on “Disruption Tolerant Networks for Underwater Applications” at NUS. I’m working under Prof. Mandar Chitre at the Acoustics Research Laboratory (ARL).

So far, I’ve been really happy. I have to pinch myself ever so often to make myself believe that I’ve landed the privilege of getting to work with such gifted people at the ARL. It’s hard to believe that a formal project on DTNs that I had taken on a whim in my fifth semester would later culminate with a Elsevier publication and a research internship at NUS, all while helping me fill out a considerable part of my Statement of Purpose for graduate school.

Singapore has been an beautiful city to live in as well. The city boasts of efficient public transport, awesome running trails, and a surprising amount of urban greenery. That said, I’ve never quite been able to shake the feeling of constant surveillance wherever I go. I remember being very concious of my mannerisms in my first week in Singapore, knowing that straying from the law is dealt with very harshly in this country. But since then, I’ve eased in to the modus operandi of day to day life in Singapore. Despite (or rather, because of?) the much higher quality of life compared to India, it has been easy to adjust. I am surrounded by Indians in both my lab and apartment, so I haven’t felt far from home either. The Sea2Space building, closely related to the ARL

It’s been a welcome change from attending a college stranded dozens of kilometres from the city. It has been much easier to travel impulsively. No two weekends here have been the same either - be it either spending an evening at Clarke Quay or kayaking in Indonesia.

View from the Chinese Garden Tower MacRitchie Reservoir The imposing Marina Bay Sands and Gardens by the Bay The Singapore skyline from the Marina Bay Sands observatory Trip to Bintan, Indonesia With my school friend, Sharan

It’s not all been sunshine in Singapore though. While I am very glad to be funded by the ARL, my stipend only just covers all my basic living expenses. Singapore is not cheap! Every purchase I make is accompanied with the mental gymnastics of figuring out how much my outlay would require me to spread out the remainder of my stipend over the days until I receive my next cheque. On the other hand, I have realised that I really do need some practical experience in budgeting and this is probably the most controlled and risk-free environment in which I can learn to manage my finances. NUS Campus

Hanging around at NUS has made me miss college as well. Seeing groups of students at any of NUS’ several coffee shops, or at UTown in NUS always has made me nostalgic for campus life. Being an intern, I don’t have any student access privileges to facilities such as the the Central Library or any of the student recreational centres. From my perspective, the campus is a terrific place to work, but not a place I can feel connected with, at least not by the time my internship ends in May.

Yet, I wouldn’t trade anything for the satisfaction I get with working at the ARL. I look forward to every day, and it truly is exciting to work in a field where there is only a sparse amount of existing research. I am glad I spent an inordinate amount of time programming throughout college as it has made my experience of debugging and learning my way around Unetstack far smoother. I also appreciate the methodical approach to research at the ARL, for it has done wonders for my productivity while keeping stress levels in check.

I’ll conclude this by saying I look forward to my next three months in Singapore :-)

# I have published a paper!

I am delighted to announce that my work on Delay Tolerant Networks has culminated into a paper, published 11 months since the project started!

In this project, I worked with a faculty of the CS department, Mr. Abhishek Thakur and a college senior, Tejashwar Reddy. Here, we showed that it is viable to send specially encoded videos using an opportunistic network of Android devices. We called it VECTORS, short for “VidEo Communication Through Opportunistic Relays and Scalable video coding”. Since it’s published under Elsevier’s Open Access policy, it does not require any subscription or institutional login to access.

As a continuation of this, I am currently at the Acoustic Research Laboratory at NUS for a project on underwater DTNs. But that merits a blog post of its own another time ;)