How FPV looked 2.5 years ago…

A few days ago I went back in time. Or to be more precise I started to browse my photo archive. And I've found pictures of my first FPV quadcopter… Oh my… ancient times…

my first FPV setup with OpenPilot

Doesn't it look awkward? At least a little… But this baby was pretty cool to think about it. At least when I finally learned how not to crash every few minutes. If I remember correctly, the specification was more less like this:

  • Flight controller: CC3D running OpenPilot!
  • Afro ESC 20A with BLHeli
  • Turnigy MT2213 935KV motors
  • 10" APC props
  • FlySky/Tunigy FS-i6 radio link
  • Some cheap FPV set I've found on HobbyKing with VTX, camera and crappy bucket goggles

History… and what was your first FPV setup?

Read More

RaceFlight One Source Code, drama continues

This is the follow up of yesterday entry RaceFlight One source code has been published and what does that mean. Before you continue I suggest reading that post first.

Another day, another drama. Or rather the same drama continues. There are two major updates on the topic of RaceFlight source code and team conflict.

RS2K states that he did not know that RF1 contained GPL code until recently (not directly tho)

rs2k gpl statement

Some people have asked my why I decided to release my project under GPL V3 license instead of more permissive license such as the MIT license. The simple answer is I am required to by law. It came to my attention that there was GPL base code in RF1 that was added without my consent.

rs2k RaceFlight One repository on GitHub is not available anymore

RaceFlight One DCMA takedown

Just like expected, rs2k/RaceFlight-One is not available. It was taken down under DMCA act by request of OrangeCode. OrangeCode is apparently a company owned by Preston Garrison aka proggod. Full details of DCMA notice is available here. If TL;DR, it states that:

  1. OrangeCode owns copyright to RF1 code
  2. Kalyn Doerr aka rs2k is an employee of OrangeCode and had not right to publish the code
  3. OrangeCode (proggod apparently) states that "I swear, under penalty of perjury, that the information in this notification is accurate and that I am the copyright owner, or am authorized to act on behalf of the owner, of an exclusive right that is allegedly infringed."

Read More

RaceFlight One source code has been published and what does that mean

In the beginning of time, there was MultiWii and it was good. But then times moved on and 8bit ATmegas were end-of-line for flight control. So, Baseflight was created. In the beginning, it was supposed to be only a MultiWii port to support STM32f1 flight controllers in a for of Afroflight Naze. And it was good for a while. But the guy that was running this show turned out to be a prick and one of Baseflight developers forked everything and called it Cleanflight. One might want to say "Hail Hydra" but let's try to be serious here.

Anyhow, everything was great again. No pricks anywhere and Cleanflight was growing. People started to fork Cleanflight. Betaflight, INAV and Raceflight were created. No problems anywhere, one big happy family.

It did not take long for things to change. Someone decided that he can make money by making code closed-source and run only selected, sold by them hardware. It was RaceFlight by the way and this is a reason I'm not writing much about them. There real problem is that you just can not make an Open Source code under GPL license Closed Source just like that. It is virtually impossible since all commiters would have to agree to that. All of a few hundred. Good luck with that. INAV tried to change license once (and still be Open Source) and it failed. Few devs just said no. End of story.

Back to Raceflight. When in late 2016/early 2017 Raceflight went Closed Source. Some devs decided to check this and that, decompiled RF firmware and compared that with CF/BF. Surprise, surprise, decompiled code for gyro initialization looked exactly like in CF/BF. Raceflight was violating GPL license! They had no rights to close the code of Raceflight. Period. RF team defended themselves as they could but IIRC finally published source code for Raceflight (not RF One) like GPL required. Joshua Bardwell did a video on that topic you might want to watch BTW.

You might think this is the end of a story, but not. Raceflight announced RaceFlight One and claimed that RaceFlight One is 100% their doing, rewritten and does not contain absolutely no code from Baseflight/Cleanflight/Betaflight. So it does not fall into GPL at all. They were more less believed and most of pilots forgot about the whole thing.

Until yesterday. Because yesterday, Kalyn Doerr aka rs2k (one of creators on RF) published the full source code of Raceflight One on GitHub and posted something interesting on Facebook too:

(…) I don't want to say much publicly right now. I have kept quiet as I have been in fear for my safety for some time now. Over the last several months I have documented Preston Garrison's business dealings as he has tried to keep me away from the business. I have had no success in reasoning with him. I created it originally to share with the community and I have poured my lifeblood into it. It will not die here. I am RaceFlight.

Pretty scary, isn't it? Drama and stuff. But what happened is that RF One source code is on GitHub. Take it while it's fresh since it might be removed due to DMCA soon.

Let's leave the drama and see what mentioned Prestion aka proggod posted:

Well apparently Kalyn decided to release our code to the public without consent from me. I have no idea what his intentions are, or why he would decided to do this, last time I communicated him he was working on his home life. I can say he doesn't own the code, and it certainly can't be licensed as GPL, especially since he was not the only contributor to the code base. (…)

In other worlds "_I have no idea what happened but this code is private and GPL does not apply". Well… Betaflight community decided to check again an they found out something very interesting:

//TODO REwrite this better
char *ftoa(float x, char *floatString)
    int32_t value;
    char intString1[12];
    char intString2[12] = { 0, };
    char *decimalPoint = ".";
    uint8_t dpLocation;

//TODO REwrite this better is nothing strange. But, exactly the same ftoa implementation can be found in Cleanflight, Betaflight and INAV source code. And by exact, I mean exact. not similar. Exactly the same. It was committed by hydra in April 2014 under GPL license. And that means one thing: whole RaceFlight One is GPL. This is how GPL works. They did not rewrite it from the scratch, they took some elements of GPL code and continued from there. GPL is very intrusive license: if you use anything licensed under GPL, your whole project is automatically GPL too. Period.

I have no idea who is lying. But someone on the RaceFlight side is lying. Why? If you do not know why it's because of money. An old universal truth. And I suspect this whole thing might have legal repercussions and someone will meet someone in a court. Is that good? No idea. Bottom line is: RaceFlight One is violating GPL license of a code it was based on.

Ah, there is one more small thing. According to some RF/BF devs and users, Preston Garrison always stated that RF One is not using Kalman filtering. More, users were apparently banned from Slack for suggesting RF One was using Kalman filtering. Guess what… The published code suggests RaceFlight One is using Kalman filtering… Funny….

I will try to keep my eye on it and if I will keep you posted in case of any major developments (if any)…

Update #1

No, there is no Kalman filtering in RaceFlight One after all. All occurrences of Kalman filtering are commented out

Update #2

After all, there is a Kalman filter in RaceFlight One. The commented out code refers to multi-state Kalman filter. Method PafUpdate that is used for gyro filtering is 1-state Kalman filter. Thanks DigitalEntity for discovery

Follow up for 2017.12.07

Read More

Crossbow LRS, I’m still doing this wrong…

Only two weeks ago I thought I solved all my major problems with DIY LoRa RC link. I was wrong. I was able to solve one problem (link unstable due to rouge packets messing up with protocol decoding), but an old problem came up again: PPM input from Taranis is no longer stable. At least I know why since this is a second time this is happening.

Current code read bytes from SX1276 buffer inside interrupt callback procedure (ISR). PPM decoding is also done in ISR. How many threads ATmega has? What happens when one ISR is triggered while second is still executed? Problems. The solution is to keep ISRs as simple and fast as possible. My code was not simple and fast enough.

On top of that, it turned out that Arduino LoRa library I’m using is not efficient. It performs 2 SPI transactions to read one byte from SX1276 FIFO buffer. So, 12 bytes of typical data packet equals 24 SPI transaction… Looks like I will have to do some low-level coding I wanted to avoid in the beginning… Oh well…

Read More

EXUAV Y120S drone racing frame: go home designer, you are drunk

Chinesium is amazing. Well, to be precise, not only chinesium manufacturers will do anything just to stand off a little. Just like this little (120mm) quadcopter frame called EXUAV Y120S. Why do I even bother to write about it? Simple: I love crazy designs. Just look at those pictures below:

EXUAV Y120S 120mm Mini racing frame

No, it’s not a tricopter. It is a quadcopter. But where is the 4th arm and where 4th motor goes? Below rear motor! It’s a Y with 2 motors on arms in the front and 2 motors on one arm in the back. Rear motors are counter-rotating! (more…)

Read More

Arduino hygrometer with DHT11 and SSD1306 OLED display

One of the things I like about Arduino ecosystem is that you can prototype pretty decent device in very short time. It might not be pretty, but will work. Just like my DIY hygrometer built with DHT11 and SS1306 OLED display I've built few weeks ago:

Simple, efficient and runs on 4 AA batteries. The best part is that it can be powered all the time. Arduino does humidity measurement, display the result and then powers itself down to conserve power. Cool, right?

Arduino DHT11 hygrometer with OLED SSD1306 display

Code is available in GitHub repository.

Read More

Visual Studio Code as Arduino IDE replacement

I can say a lot of good things about Arduino ecosystem. List will quite long, trust me on that. But Arduino ecosystem has one thing that sucks a lot: Arduino IDE. Programming environment for Arduino is crap. Period. I would not call it the worse development environment ever, but it's pretty close to that title. C'mon, Turbo Pascal from the early nineties of previous century was a better IDE!

There were few project to fix that problem. Somehow none of those really worked until Microsoft did not decided to do something about it and created

Visual Studio Code extension for Arduino

Arduino for Visual Studio Code

Read More

3D printed racing drone, part 1

I've been pretty busy last 2 weeks. Among other things, I've started to design 3D printed racing drone frame. I'm fully aware there are plenty designs available on Thingiverse, but almost all of them forgets that plastic filament is not carbon fiber laminate and what works well with carbon, will fail with filament. So, I came up with this:

3D Printed Racing Drone

3D Printed Racing Drone

  • suitable to 220x and 230x motors with 19x16mm hole spacing
  • fits PCB and 36x36mm flight controller (30.5mm hole spacing)
  • size: 220mm motor to motor (diagonal)
  • fits "standard size" FPV camera

It is heavy for sure. It has thick arms and a lot of M3 nuts and bolts connecting all the parts together. I hope it will be enough to survive at least some beating… First flight in a few weeks since I'm still waiting for motors.

Read More

How to wind an electric brushless outrunner motor with dLRK winding schema

This time, another "motor winding" video. In 13 minutes and something seconds I:

  • show some tool that I find useful for motor winding
  • wind a 12N14P brushless outrunner electric motor with dLRK winding schema
  • terminate this motor into Delta configuration

BTW, in next video I will show you if it worked or not 🙂

Read More

iRangeX IR8M: when you clone too much, but that is not a bad thing after all

I love chinesium and admire chinese manufacturers very much for a simple fact: some time ago they stopped just cloning. They started to create new things based on “legit” ones. Just look at iRangeX iRX-IR8M 2.4G 8CH Multi-Protocol Transmitter.

iRangeX iRX-IR8M multiprotocol radio transmitter

Doesn’t this thing looks almost like Team Black Sheep Tango radio transmitter? Well, it is at least similar. But this is a bad thing? The way I see it, definitely not. It is similar on the outside, but it’s not the same. Just the way TBS Tango has similar shape to Sony PlayStation 3 DualShock controller. (more…)

Read More