1 Architecture
Check this: Autogeneration | MAVSDK Guide
MAVSDK (C++) is first and foremost a library, like any other C++ library. When you run any C++ example (e.g. takeoff_and_land) with it, it’ll just link to libmavsdk.so.3 (or similar).
mavsdk_server is a C++ application (like any of the examples) using libmavsdk (and libmavsdk_server) exposing a gRPC API. This gRPC API is then be used in language wrappers such as Python.
2 Building
You can absolutely build it run standalone. It just depends how you build it, whether it needs the libraries at runtime, or whether they are included (when statically built).
I think you got a bit misguided by the readme there. To see how it is built, have a look here:
Or if you just want to build within docker, you would just use the Linux instructions, I think:
The main option to add to the cmake configure line to build with the mavsdk_server is -DBUILD_MAVSDK_SERVER=ON
However, I usually recommend to just grab the latest pre-compiled release unless you have changes in a fork. You can get the build artifacts for the releases here: https://github.com/mavlink/MAVSDK/releases.
There are various options. For docker x64, you can just grab the musl one, which doesn’t even require libc, everything is built in. (It’s what we ship with pip.)
3 gRPC examples
No, the examples are just using the C++ library. My question would be: why aren’t you just using the C++ API? Do you really need gRPC in-between, and why?
Also note that the C++ API is richer and has more features than the gRPC API:
- The C++ API supports server side (vehicle side) plugins (all plugins called something_server, e.g. param_server)
- The C++ API supports more than one system (vehicle) per MAVSDK instance. The mavsdk_server is limited to one system (vehicle).
If you are looking for examples, check how the language wrappers do it, e.g. in Python: