0. 一些概念
- MAVSDK用于与MAVLink系统的通讯接口。
这些库提供了一些简单的API,用于管理一个或多个vehicles,提供对vehicles信息和遥测的程序访问,以及对任务、移动和其他操作的控制。
这些库可以在无人机上、配套计算机上使用,也可以在地面上用于地面站或移动设备。
C++库设计为高性能的,可用于实现计算机视觉、避障和路线规划等任务。 - MAVSDK C++库是一个在生产环境中使用的健壮且经过良好测试的库。但请注意,API仍在发展中,该项目不提供未来的兼容性保证。
- MAVSDK是跨平台的:Linux、macOS、Windows、Android和iOS。
- 一个简单完整的例子: Takeoff and Land.
- 关于 API 版本之间更改的信息: https://mavsdk.mavlink.io/main/en/cpp/api_changes.html
- Mavsdk是主要的库类。API消费者使用Mavsdk来发现和访问车辆(系统对象),从而提供对所有其他无人机信息和控制对象(例如遥测、任务等)的访问。
- 此外,“服务器插件”可用于实现车辆侧MAVLink功能。可能用于从非MAVLink自动引导程序或组件中暴露MAVLink接口。以下API提供了对底层MAVLink消息/类型的更直接的访问。它们只应用于上述主要API中缺少功能的地方
(1)Param: Raw access to get and set parameters.
(2)MissionRaw: Direct access to MAVLink mission items.
(3)MavlinkPassthrough: Provides full/direct MAVLink access - MAVSDK主要是用C++编写的,具有可用于几种编程语言的包装器:
MAVSDK-C++ (2016): Used in production.
MAVSDK-Swift (2018): Used in production.
MAVSDK-Python (2019): Used in production.
MAVSDK-Java (2019): Used in production.
MAVSDK-Go (2020): Feature complete.
MAVSDK-JavaScript (2019): Proof of concept.
MAVSDK-CSharp (2019). Proof of concept.
MAVSDK-Rust (2019): Proof of concept. - 查看C++和Python的快速入门指南。无论您使用哪种语言,都可以使用C++指南来学习如何执行常见任务和使用库。
- 本指南包含有关如何使用MAVSDK的信息和示例。如果您有文档未回答的具体问题,可以通过以下方式提出:
Discuss board
Slack (#mavsdk) - 开发文档(C++):https://mavsdk.mavlink.io/main/en/cpp/
- github源码:https://github.com/mavlink/MAVSDK
1. 开发步骤
以Ubuntu20.04环境为例!
1.1 git 源码
sudo apt-get update
sudo apt-get install build-essential cmake git
git clone https://github.com/mavlink/MAVSDK.git
git submodule update --init --recursive
1.2 编译
1.2.1 Configuration
## 1)编译成Debug版本,编译路径设置为MAVSDK/build/default/,其中MAVSDK为源码路径
cmake -DCMAKE_BUILD_TYPE=Debug -Bbuild/default -H.
## 2)或编译成Release版:
cmake -DCMAKE_BUILD_TYPE=Release -Bbuild/default -H.
## 3)指定安装路径为MAVSDK/install/,否则安装路径在/usr/local或/usr/中,其中MAVSDK为源码路径
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=install -Bbuild/default -H.
参数解析:
- CMAKE_BUILD_TYPE = Debug or Release 编译成Debug还是Release版本
- CMAKE_INSTALL_PREFIX=安装目录,如CMAKE_INSTALL_PREFIX=install 则会安装在MAVSDK/install/,缺省则会安装在/usr/local,其中MAVSDK为源码路径。
- 更多请参考:https://mavsdk.mavlink.io/main/en/cpp/guide/build.html
1.2.2 Build
1)只编译不安装
cmake --build build/default -j8
2)编译并安装
## 可配置编译路径MAVSDK/build/default:
sudo cmake --build build/default --target install
其中:build/default指定的编译位置了,除了可在Configuration中指定还可以在build时指定!
可在安装结束的bash中看到安装位置,如下:
关于“路径”的几点说明:
在编译过程中,有3个路径值得关注,源码路径、编译路径、安装路径。
1)源码路径:源代码所在的路径。
2)编译路径:编译生成的中间文件存放的路径,一般命名为build。
3)安装路径:最终编译得到目标文件、头文件等的安装路径。
1.2.3 关于安装和安装路径的一些说明
有两种安装方式:
- 直接安装预先编译好的release库文件,后可在其他.cpp中调用 mavsdk 库;
- git 最新的源码,编译,后可在其他.cpp中调用 mavsdk 库;
所谓的“安装”实际上包括以下两点内容:
- builds the SDK.
- copies the libraries and header files into a “public” location so that they can be referenced by C++ applications.
在configuration步骤时不设置 CMAKE_INSTALL_PREFIX 参数,就会默认使用系统级安装(install system wide),安装位置在:/usr/local,如果是通过 .deb 或 .rpm 文件安装的则安装位置在: /usr/
通过 .deb 或 .rpm 文件安装:
sudo apt remove mavsdk
wget https://github.com/mavlink/MAVSDK/releases/download/v1.4.16/libmavsdk-dev_1.4.16_ubuntu20.04_amd64.deb
sudo dpkg -i libmavsdk-dev_1.4.16_ubuntu20.04_amd64.deb
1.3 卸载mavsdk、清除编译
1)通过 .deb 或 .rpm 文件安装
sudo apt remove mavsdk
2)通过build安装
rm -rf build
sudo rm -rf 安装目录如 MAVSDK/install
1.4 在.cpp中使用mavsdk库
- 1)编译例程,如 takeoff_and_land
cd examples/takeoff_and_land/
cmake -Bbuild -H.
cmake --build build -j4
如果编译example时出错,先删掉编译目录再重新编译:
cd examples/takeoff_and_land/
rm -rf build
- 2)启动仿真 SITL
sim_vehicle.py -v ArduCopter --console --map
- 3)给SITL增加一个UDP连接
## 在运行SITL的bash输入:
output add 127.0.0.1:14550
- 4)接入mission planner以观察飞机响应
tcp连接:127.0.0.1:5762或5661,注意5760已被mavproxy占用! - 5)运行例程
build/takeoff_and_land udp://:14550
2.飞行器仿真环境搭建
文档中使用的是PX4仿真,那么如何搭建ardupilot仿真与mavsdk建立通讯呢?
给 SITL 配置 udp 连接即可,如:127.0.0.1:14550
在编译例子时,以udp的方式连接SITL,如:build/takeoff_and_land udp://:14550
3. 专业术语
- system-wide 系统级,全系统范围
- System-wide Install 系统级别的安装,可在系统范围内有效;
- Local Install 指定位置安装,只在局部范围内有效;