本程序实现简易的 MAVLink2 QGC 客户端,支持Windows、Linux、MacOS、Android等平台。本程序只实现基础的功能,模拟QGC的基础能力,同飞控端收发 MAVLink 消息、飞控模式指令切换、飞控航线信息获取功能,更多功能,请小伙伴自行实现即可。本程序只提供思路,望大家自行学习。
- 支持TCP、UDP、串口方式连接飞控
- 支持发送文本消息、指令消息等不同消息类型
- 支持飞控航线列表的获取、修改航点等,可自行扩展上传航线功能
- 支持功能的高度扩展
- 确保环境: 安装 Java Development Kit (JDK) 11 或更高版本。
- 打开项目: 使用 IntelliJ IDEA 或者Android Studio 打开 mavlink-client-desktop 文件夹。等待 Gradle 同步完成。
- 运行:
- 在 IDE 的 Gradle 工具窗口中,找到 desktopApp -> Tasks -> compose desktop -> run。双击 run 任务。
- MAVLink 库 (mavlink-kotlin):
- 本项目使用了 mavlink-kotlin 库。
- MavlinkManager.kt 中定义了QGC的
SYSTEM_ID和COMPONENT_ID,并定义了FLOW接收飞控信息的缓存流。支持tcp、udp、串口连接作业,可自行抽象文本协议的实现功能。 - sendTextMessage() 仅用于演示发送功能。实际的 MAVLink 应用需要你使用 mavlink-kotlin 库来 构造 特定的 MAVLink 消息对象(例如 Heartbeat, CommandLong, ParamRequestRead 等),然后使用 MavlinkConnection 的方法(如示例注释中的 createMavlinkPacket)将其编码成字节数组,最后调用 sendMavlinkBytes (已添加此辅助函数) 发送这些字节。直接发送原始文本通常不会被 MAVLink 设备正确识别。
- 错误处理: 示例代码包含了基本的错误处理(连接失败、发送/接收错误),但可以进一步完善,例如更详细的错误分类和用户反馈。
- 线程和协程: 代码使用了 Kotlin Coroutines 和 Ktor 进行异步网络操作,避免阻塞 UI 线程。状态管理使用了 StateFlow,Compose UI 通过 collectAsState() 订阅状态变化。
- 依赖版本: build.gradle.kts 文件中的库版本(Kotlin, Compose, Ktor, mavlink-kotlin)可能需要根据你的开发环境和库的最新版本进行调整。请检查各个库的最新兼容版本。
- 资源清理: DisposableEffect 被用来在 UI 组件销毁时调用 client.cleanup(),确保 Socket 和协程被正确关闭,防止资源泄漏。
- 日志滚动和限制: 添加了 LazyColumn 自动滚动到底部的功能,并限制了日志列表的最大长度,防止内存无限增长。
这个项目提供了一个功能齐全的基础框架。你可以根据具体需求扩展它,例如:
- 实现 MAVLink 消息的构造和发送。
- 添加更多 UI 元素来显示特定的 MAVLink 数据(如心跳状态、GPS 位置、姿态等)。
- 实现参数读写功能。
- 添加 TCP、UDP、串口 通信支持。
- 优化错误处理和用户反馈。
- 更好的功能扩展能力

