Talking to a PX4 FMU with a RPi via Serial. #noUSB

I tried using a venv:

pi@raspberrypi:~ $ python3 -m venv venv
pi@raspberrypi:~ $ source venv/bin/activate
(venv) pi@raspberrypi:~ $ pip3 install aiogrpc
Downloading/unpacking aiogrpc
Downloading aiogrpc-1.7-py3-none-any.whl
Downloading/unpacking grpcio>=1.12.0 (from aiogrpc)
Downloading grpcio-1.26.0.tar.gz (15.4MB): 15.4MB downloaded
Running setup.py (path:/tmp/pip-build-e7jz0yfr/grpcio/setup.py) egg_info for package grpcio
Found cython-generated files...
error in grpcio setup command: 'install_requires' must be a string or list of strings containing valid project/version requirement specifiers
Complete output from command python setup.py egg_info:
Found cython-generated files...

error in grpcio setup command: 'install_requires' must be a string or list of strings containing valid project/version requirement specifiers

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /tmp/pip-build-e7jz0yfr/grpcio
Storing debug log for failure in /home/pi/.pip/pip.log

Im not sure, but, the consensus online seems to be to try “upgrading setuptools” with:
pip3 install --upgrade setuptools

(running on Raspberry Pi V4 to Holybro Pixhawk 4)

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:

./autogen.sh && ./configure CFLAGS='-g -O2' \
       --sysconfdir=/etc --localstatedir=/var --libdir=/usr/lib64 \
   --prefix=/usr

Not sure what the difference is.

@JonasVautherin Did we sort out RPi on PIP?

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).

2 Likes

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+

Thank you & best regards

Hi, I copied the mavsdk_server…armv7 and renamed it but when running the firmware_version.py I get: No module named ‘mavsdk’

I already tried pip3 install mavsdk and all is satisfied.

@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.

Learn more about the community Code of Conduct

Code of Conduct

Would the mavsdk_server I compiled on the Raspberry Pi Zero (armv6) be useful to other armv6 platforms?

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…” :disappointed: I’ll have a look tonight

Thanks @GoMartin300, I followed your tricks with (https://github.com/mavlink/MAVSDK/releases/download/v0.25.0/mavsdk_server_linux-armv7) and it’s working fine!

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.

cd MAVSDK
docker run --rm dockcross/linux-armv6 > ./dockcross-linux-armv6
chmod +x ./dockcross-linux-armv6
./dockcross-linux-armv6 cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_BACKEND=ON -DBUILD_SHARED_LIBS=OFF -Bbuild/linux-armv6 -S.
./dockcross-linux-armv6 cmake --build build/linux-armv6 -j 8

I am newbie and having a little problem with the protoc-gen-dcsdk for my Raspberry PI.
I am following the example: https://mavsdk.mavlink.io/develop/en/contributing/build.html#build_backend
I can run “pip3 install -r requirements.txt -r requirements-dev.txt” with no errors.
If I enter “which protoc-gen-dcsdk” then nothing is returned.
I can see the directory protoc-gen-dcsdk in the directory “~/MAVSDK/MAVSDK-Python/proto/pb_plugins” with multiple .py files.
I guess that I can’t generate the Python wrappers until I resolve this issue.
What I am missing? Thanks!

@jpk @JonasVautherin @hamishwillee I am running into a similar issue where I build mavsdk_server from source and then i run the server from that file location itself. In another instance I ran python3 firmware_version.py and all i get is
Waiting for mavsdk_server to be ready…

Were you able to solve your issue?

My config is
Platform: rpi3
os: Buster
Kernel: 5.4.51-v7+

Thanks

Hi arkos,
as posted above I have cross-compiled mavsdk_server on a PC. I did not investigate further to compile it on the PiZero as this solution is fine for me.

You are the King
Almost moved to dronekit but then I found your post and it worked.
Still need to run mavsdk_server manually with $ ./mavsdk_server -p 50051 serial:///dev/serial0:921600 after copying the file from: “/home/pi/MAVSDK/build/default/src/mavsdk_server/src” to: “/home/pi/MAVSDK-Python/mavsdk/bin” in my case
Thanks!!!

For building mavsdk_server, it appears you must now use -DBUILD_MAVSDK_SERVER=ON instead of -DBUILD_BACKEND=ON. If you did the latter first, like me, you must turn -DBUILD_BACKEND off, so that CMakelist evaluates it as false. You can just do:

sudo cmake -DBUILD_BACKEND=OFF -DBUILD_MAVSDK_SERVER=ON --symlink-install --cmake-args “-DCMAKE_SHARED_LINKER_FLAGS=’-latomic’” “-DCMAKE_EXE_LINKER_FLAGS=’-latomic’” -Bbuild/default -H.

For anyone coming to this page now:

Using pip3 install --user --upgrade mavsdk will now handle everything for a raspberry pi (I have been using a raspberry pi zero). This issue was helpful to me, and has information for the correct system address for usb through mavsdk.

The instructions here will probably still work, but IT CAN TAKE A WHILE to perform all the steps. Instructions for setting up the physical layer, and setting up the correct ports, were very helpful - so thanks for that!

1 Like

It was a pain for me to install mavsdk with pip on RPi4 and Ubuntu Server until I upgraded pip.

sudo apt update && sudo apt install python3-pip
pip3 install --user --upgrade pip
pip3 install --user mavsdk
1 Like