A guide by a n00b for a n00b. Henceforth: RPi = Raspberry Pi
Click here.
DON’T CONNECT THE RED WIRE!
Seriously, I know you saw that wiring diagram with the red line between the Pixyhawk and the Raspberry Pi that’s being stealth edited out all over the place. Will it F your FMU? I dunno, sometimes grabbing that big capacitor doesn’t hurt by why take the chance? You’ll need a BEC to power the RPi.
Most RPi’s have two UARTs (serial) which it uses and if you tell it not to it gives you the shitty one of the two. So. Go here, ctrl-F " Disabling Linux’s use of console UART", and disable Linux’s use of console UART. If your RPi has bluetooth, murder it by editing config.txt with $ sudo nano /boot/config.txt and add the line: dtoverlay=disable-bt to the end of the file, then double murder it with $ sudo systemctl disable hciuart
reboot
The serial port we are going to use is now: /dev/serial0 all other ttys are just imitating.
Make a connection.
Aquire solder skillz
Aquire wires and connectors.
Make thing that connects the RPi UART to TELEM 2 on your flight controller.
GND (Pin 6) to GND
TXD (Pin 8) to RXD
RXD (Pin 10) to TXD
Install/build MAVSDK (This gonna suck)
We’re going to build this on the RPi if you know how to cross compile and have it work then wtf are you doing here?
Get the RPi ready for the pain:
$ sudo apt update
$ sudo apt upgrade ← Upgrade all the things
$ sudo apt install python3-pip
Go here and Follow the ‘Building SDK from Source’ instructions for ‘Linux’. Step 5 will take a while so get a drink or four then finish with cmake --build build/default then drink some more.
Now we’re going to build the “backend” that will be needed by MAVSDK-Python becasue you’re a n00b and as far as we’re concerned c++ is c+=1. If you follow the instructions the configuration(?) will fail and you’ll cry so do this instead:
Take note, the file mavsdk_server that you will need for MAVSDK-Python is in the totally obvious directory: MAVSDK/build/default/src/backend/src/
Install MAVSDK-Python
Grab a beer or three and go here. Scroll down to “Build and run from sources” and follow along from there. You might have an issue when you try $ which protoc-gen-dcsdk and nothing shows up. In that case you’ll have to add /usr/local/bin/ to your PATH. I’d explain but I forgot how to do that.
You tried $ pip3 install mavsdk, didn’t you?
Copy that mavskd_server file into MAVSDK-Python/mavsdk/bin/
Give it a whirl
Use that fancy connector to connect the RPi UART to TELEM 2 on your flight controller.
In QGroundControl set MAV_2_CONFIG to TELEM 2 and reboot the flight controller. (The baud rate is probably going to default to 921600 which you can check by looking at SER_TEL2_BAUD in QGroundControl)
I assume you can SSH into your RPi at this point over WiFi and probably already have. If not, you should do that now. Then go to the MAVSDK-Python directory and cd examples/. From there we are going to edit an example with $ sudo nano firmware_version.py and replace the await drone.connect... line with:
Nice report! This reminds me that we should really try to get a python wheel for RPi on PyPi, so that you could just pip install mavsdk there as well …
A follow up to the issue with $ which protoc-gen-dcsdk not showing up in $PATH.
I used $ sudo find / -name protoc-gen-dcsdk to find the directory that contained protoc-gen-dcsdk (in my case it was: /home/pi/.local/bin/) I then added that directory to $PATH with the command $ export PATH=$PATH:<path to protoc-gen-dcsdk>. After that I was all set.
The RPi Zero W uses armv6 and has issues with libatomic which is why I added (read: looked up error on google and copied soln) the `-latomic’ flags for the MAVSDK build. For other RPi with armv7 + this might not be needed.
The RPi 3 A+ does not have enough memory to build MAVSDK which I didn’t realize until just now. If I have a free USB port on my RPi I usually put a low profile flash drive in and make it swap which solves memory issues and I suspect helps take load off the SD card. (https://askubuntu.com/questions/173676/how-to-make-a-usb-stick-swap-disk)
Hi I get this error while doing:pip3 install -r requirements.txt -r requirements-dev.txt: Collecting protobuf>=3.5.1 Using cached https://files.pythonhosted.org/packages/02/ba/2d33a1ea34f672c088c08f0f8e70292ff770c7f0c2481690cae378d33d66/protobuf-3.11.2-py2.py3-none-any.whl ERROR: Could not find a version that satisfies the requirement aiogrpc>=1.5 (from -r requirements.txt (line 2)) (from versions: none) ERROR: No matching distribution found for aiogrpc>=1.5 (from -r requirements.txt (line 2))
sudo apt install python3-pip shows: Reading package lists... Done Building dependency tree Reading state information... Done python3-pip is already the newest version.
And sudo pip3 install aiogrpc shows: Collecting aiogrpc Could not find a version that satisfies the requirement aiogrpc (from versions: ) No matching distribution found for aiogrpc You are using pip version 9.0.1, however version 19.3.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
Amazing explanation! Worked almost perfectly for me except my mavsdk_server could not start, i was able to quickly fix it by replacing it with the mavsdk_server_linux-armv7 binary release file from v0.24(latest release at time of writing) after renaming it to mavsdk_server.
I did accidently interrupt Step 5 from the ‘Building SDK from Source’, I don’t know enough about build processes to know if this could be the cause.
Additionaly, on the mavrouter part, copying the following line from the explanation does not work: ./autogen.sh && ./configure CFLAGS='-g -O2' \ --sysconfdir=/etc --localstatedir=/var --libdir=/usr/lib \ --prefix=/usr
but the one from the mavlink-router github readme.MD explanaition did work:
I.e. looking at this I’m seeing comments like “… except my mavsdk_server could not start, i was able to quickly fix it by replacing it with the mavsdk_server_linux-armv7 binary release file from v0.24(latest release at time of writing) after renaming it to mavsdk_server.”
i was able to quickly fix it by replacing it with the mavsdk_server_linux-armv7
Yes, that’s what needs to be done. We don’t distribute mavsdk_server for arm through pip (yet). Would be nice to distribute arm64 there, but that requires some work on dockcross (if anybody wants to contribute, I started working on it here: linux-arm64 vs manylinux2014-aarch64 · Issue #367 · dockcross/dockcross · GitHub).
Hello,
first of all: Thank you for this guideline!
I went through your guideline but when I try $ python3 firmware_version.py
all I get is Waiting for mavsdk_server to be ready…
So I tried to start mavsdk_server stand alone, but this creates this error message: ~/MAVSDK/build/default/src/backend/src $ ./mavsdk_server ./mavsdk_server: error while loading shared libraries: /home/pi/MAVSDK/build/default/src/backend/src/libmavsdk_server.so: unexpected reloc type 0x03
I did google for the unexpected reloc type issue, but as I am a Linux-n00b this does not get me far… ==> Can you give me some advice how to proceed?
My setup:
Raspberry Pi Zero w / armv6l
Operating System: Raspbian GNU/Linux 10 (buster)
Kernel: Linux 4.19.97+
@physicsman, first of all, thanks for the guide, it’s already helping others and having a positive impact.
I had to edit the title of this post as it went against our Code of Conduct, please try to be inclusive towards other communities and fellow community members, please DM me if you have any questions.
Hi physicsman thank you for the detailed post, I wish I had stumbled upon this before I spent a week or so to do the exact same thing. Did you get it to work via RPi uart port? All the documentation I found was to use FTDI through USB, and I just gave up on trying to connect directly.
@physicsman , credit to Adrian Rosebrock here is a quick fix for the memory issue. From https://www.pyimagesearch.com/2018/09/26/install-opencv-4-on-your-raspberry-pi/ : sudo nano /etc/dphys-swapfile, change CONF_SWAPSIZE=100 to CONF_SWAPSIZE=2048, then sudo /etc/init.d/dphys-swapfile stop then sudo /etc/init.d/dphys-swapfile stop. Once you’re done with compilation/link, change back the value to 100.
I manage to go throught the whole tutorial (I restarted from a clean NOOS image so will delete my previous post), I don’t even have the issue with “which protoc-gen-dcsdk” but I’m stuck at “Waiting for mavsdk_server to be ready…” I’ll have a look tonight
For whatever reason I did not succeed in compiling mavsdk_server correctly on the Raspberry Pi Zero w (==> 3. Install/build MAVSDK) .
Instead I tried cross-compiling via Ubuntu (Inside an Oracle VM Virtualbox on PC/Windows10) according to these instructions: Redirecting to latest version of document (main) , but replacing armv7 by armv6. At least it compiled and did the trick for me.