主机屋 大网站,wordpress菜单扩展,网站首页的名字通常是,优购物app最新版下载MAVSDK 是 PX4 开源团队贡献的基于 MavLink 通信协议的用于无人机应用开发的 SDK#xff0c;支持多种语言如 C/C、python、Java 等。通常用于无人机间、地面站与通信设备的消息传输。
MAVLink 是一种非常轻量级的消息传递协议#xff0c;用于与无人机#xff08;以及机载无…MAVSDK 是 PX4 开源团队贡献的基于 MavLink 通信协议的用于无人机应用开发的 SDK支持多种语言如 C/C、python、Java 等。通常用于无人机间、地面站与通信设备的消息传输。
MAVLink 是一种非常轻量级的消息传递协议用于与无人机以及机载无人机组件之间进行通信。MAVLink 遵循现代混合发布-订阅和点对点设计模式数据流作为主题发送/发布而任务协议或参数协议等配置子协议是点对点的重传。其中 MAVLink 1 每个数据包只有 8 个字节的开销包括开始标志和数据包丢弃检测。MAVLink 2 只有 14 字节的开销。由于 MAVLink 不需要任何额外的成帧因此非常适合通信带宽非常有限的应用程序。
当我们想要在 OpenHarmony 上做无人机相关工作时在通信方面需要面临 MAVLink 的移植适配工作。因此接下来我们将分享如何将 MAVSDK 移植至 OpenHarmony 系统当中。 MAVSDK Github 开源地址GitHub - mavlink/MAVSDK: API and library for MAVLink compatible systems written in C17
接下来讲解如何把 MAVSDK 开源库添加至 OpenHarmony 工程中进行编译。此方法与其他开源库移植方法基本一致
本次移植通过新建子系统 mavsdk在子系统下添加名为 mavsdk 的组件并在该组件下添加名为 MAVSDK 的模块OpenHarmony 系统层级顺序如下子系统- 组件- 模块下文中将都以此为顺序进行叙述。
表 1添加到工程后的目录结构
路径描述ohos/build/subsystem_config.json子系统配置ohos/productdefine/common/products/ohos-arm64.json板级相关ohos/third_party/MAVSDK/bundle.json在子系统中添加组件配置ohos/third_party/MAVSDK/BUILD.gn三方库模块化将其加入组件中的 gn 文件
subsystem_config.json
首先在 ohos/build/subsystem 中添加 subsystem 节点。
mavsdk: { path: third_party/MAVSDK, name: mavsdk}
ohos-arm64.json 文件
在 ohos/productdefine/common/products/ohos-arm64.json 文件中添加板级相关的信息。
mavsdk:MAVSDK:{}
如下图所示 Bundle.json 文件
在 ohos/third 目录下添加 bundle.json 文件以便系统可以添加名为 MAVSDK 的组件。
对于此文件要点如注释所见编译时去除注释以保证配置文件整洁性
{name: ohos/MAVSDK,description: ,version: ,license: ,publishAs: ,segment: {destPath: third_party/MAVSDK},dirs: {},scripts: {},readmePath: {},component: {name: MAVSDK,subsystem: mavsdk,syscap: [],features: [],adapted_system_type: [],rom: ,ram: ,deps: {components: [ jsoncpp,zlib//此处添加了要用的三方库后续的build.gn中还会有所体现。],third_party: [jsoncpp,zlib]},build: {sub_component: [ //third_party/mavsdk:MAVSDK,//third_party/mavsdk:mavsdk_test],//此处添加了接下来要编译的组件一个是代码主仓组件一个是代码的测试文件组件inner_kits: [],test: [//third_party/mavsdk:mavsdk_test]}}}
BUILD.gn 文件
在完成上述步骤后下面需要在 ohos/third 目录添加 BUILD.gn根据不同的系统生成静态或者动态库注意点如下
文件作用build.make生成目标的源文件depend.make需要依赖的其他 C 源文件flags.makecflags 相关的一些标志link.txt链接库相关信息
① 注意移植时的 cflags、cflags 应从原始的编译文件例如 cmake 过程中 build 的生成文件在 cmake 生成 makefile 的过程中分析 build.make、depend.make、flags.make、link.txt 等得出三方库对应的依赖关系中获取相关的标志位
② 注意移植的源文件及头文件地址可以使用当前 build.gn 所在路径下相对位置例如/src 与 build.gn 在同一路径下则路径可以直接应用 src/....
③ 注意 deps 若引用的是组件内的其他模块例如其他 build.gn 文件中的组件或当前 build.gn 中位于此 deps 前的其他组件可以使用 ”:module 进行模块依赖若是引用组件外的其他组件则需要使用 ”bundle
import(//build/ohos.gni)
import(//build/test.gni)config(mavsdk_cflag_config) {#编译时的标志位cflags [ -fexceptions,-Wextra,-Wshadow,-Wno-strict-aliasing,-Wformat2,-Wextra,-Wno-unused-lambda-capture,-Wno-pragmas,-Wno-unknown-warning-option,-Wduplicated-cond,-Wnull-dereference,-Wduplicated-branches,-Wlogical-op, -Wno-old-style-cast,-pthread,]cflags_cc [ -frtti ] #fix:[OHOS ERROR] ../../prebuilts/clang/ohos/linux-x86_64/llvm/bin/../include/libcxx-ohos/include/c/v1/memory:3566:16: error: use of dynamic_cast requires -frttildflags [ -fPIC,-g,-shared,-Wl,-soname ]
}ohos_source_set(libmavsdk_source) {configs [:mavsdk_cflag_config]deps [ //third_party/curl:curl ] #需要包含的源文件sources [src/mavsdk/core/call_every_handler.cpp ,src/mavsdk/core/connection.cpp ,src/mavsdk/core/connection_result.cpp ,src/mavsdk/core/curl_wrapper.cpp ,src/mavsdk/core/crc32.cpp ,src/mavsdk/core/system.cpp ,src/mavsdk/core/system_impl.cpp ,src/mavsdk/core/fs.cpp ,src/mavsdk/core/mavsdk.cpp ,src/mavsdk/core/mavsdk_impl.cpp ,src/mavsdk/core/http_loader.cpp ,src/mavsdk/core/mavlink_channels.cpp ,src/mavsdk/core/mavlink_command_receiver.cpp ,src/mavsdk/core/mavlink_command_sender.cpp ,src/mavsdk/core/mavlink_ftp.cpp ,src/mavsdk/core/mavlink_mission_transfer.cpp ,src/mavsdk/core/mavlink_parameters.cpp ,src/mavsdk/core/mavlink_receiver.cpp ,src/mavsdk/core/mavlink_request_message_handler.cpp ,src/mavsdk/core/mavlink_statustext_handler.cpp ,src/mavsdk/core/mavlink_message_handler.cpp ,src/mavsdk/core/ping.cpp ,src/mavsdk/core/plugin_impl_base.cpp ,src/mavsdk/core/serial_connection.cpp ,src/mavsdk/core/tcp_connection.cpp ,src/mavsdk/core/timeout_handler.cpp ,src/mavsdk/core/udp_connection.cpp ,src/mavsdk/core/log.cpp ,src/mavsdk/core/cli_arg.cpp ,src/mavsdk/core/geometry.cpp ,src/mavsdk/core/request_message.cpp ,src/mavsdk/core/mavsdk_time.cpp ,src/mavsdk/core/timesync.cpp ,src/mavsdk/plugins/action/action.cpp ,src/mavsdk/plugins/action/action_impl.cpp ,src/mavsdk/plugins/action_server/action_server.cpp ,src/mavsdk/plugins/action_server/action_server_impl.cpp ,src/mavsdk/plugins/calibration/calibration.cpp ,src/mavsdk/plugins/calibration/calibration_impl.cpp ,src/mavsdk/plugins/calibration/calibration_statustext_parser.cpp ,src/mavsdk/plugins/camera/camera.cpp ,src/mavsdk/plugins/camera/camera_impl.cpp ,src/mavsdk/plugins/camera/camera_definition.cpp ,src/mavsdk/plugins/camera/camera_definition_files/generated/camera_definition_files.cpp ,src/mavsdk/plugins/component_information/component_information.cpp ,src/mavsdk/plugins/component_information/component_information_impl.cpp ,src/mavsdk/plugins/component_information_server/component_information_server.cpp ,src/mavsdk/plugins/component_information_server/component_information_server_impl.cpp ,src/mavsdk/plugins/failure/failure.cpp ,src/mavsdk/plugins/failure/failure_impl.cpp ,src/mavsdk/plugins/follow_me/follow_me.cpp ,src/mavsdk/plugins/follow_me/follow_me_impl.cpp ,src/mavsdk/plugins/ftp/ftp.cpp ,src/mavsdk/plugins/ftp/ftp_impl.cpp ,src/mavsdk/plugins/geofence/geofence.cpp ,src/mavsdk/plugins/geofence/geofence_impl.cpp ,src/mavsdk/plugins/gimbal/gimbal.cpp ,src/mavsdk/plugins/gimbal/gimbal_impl.cpp ,src/mavsdk/plugins/gimbal/gimbal_protocol_v1.cpp ,src/mavsdk/plugins/gimbal/gimbal_protocol_v2.cpp ,src/mavsdk/plugins/info/info.cpp ,src/mavsdk/plugins/info/info_impl.cpp ,src/mavsdk/plugins/log_files/log_files.cpp ,src/mavsdk/plugins/log_files/log_files_impl.cpp ,src/mavsdk/plugins/manual_control/manual_control.cpp ,src/mavsdk/plugins/manual_control/manual_control_impl.cpp ,src/mavsdk/plugins/mavlink_passthrough/mavlink_passthrough.cpp ,src/mavsdk/plugins/mavlink_passthrough/mavlink_passthrough_impl.cpp ,src/mavsdk/plugins/mission/mission.cpp ,src/mavsdk/plugins/mission/mission_impl.cpp ,src/mavsdk/plugins/mission_raw/mission_raw.cpp ,src/mavsdk/plugins/mission_raw/mission_raw_impl.cpp ,src/mavsdk/plugins/mission_raw/mission_import.cpp ,src/mavsdk/plugins/mission_raw_server/mission_raw_server.cpp ,src/mavsdk/plugins/mission_raw_server/mission_raw_server_impl.cpp ,src/mavsdk/plugins/mocap/mocap.cpp ,src/mavsdk/plugins/mocap/mocap_impl.cpp ,src/mavsdk/plugins/offboard/offboard.cpp ,src/mavsdk/plugins/offboard/offboard_impl.cpp ,src/mavsdk/plugins/param/param.cpp ,src/mavsdk/plugins/param/param_impl.cpp ,src/mavsdk/plugins/param_server/param_server.cpp ,src/mavsdk/plugins/param_server/param_server_impl.cpp ,src/mavsdk/plugins/server_utility/server_utility.cpp ,src/mavsdk/plugins/server_utility/server_utility_impl.cpp ,src/mavsdk/plugins/shell/shell.cpp ,src/mavsdk/plugins/shell/shell_impl.cpp ,src/mavsdk/plugins/telemetry/telemetry.cpp ,src/mavsdk/plugins/telemetry/telemetry_impl.cpp ,src/mavsdk/plugins/telemetry/math_conversions.cpp ,src/mavsdk/plugins/telemetry_server/telemetry_server.cpp ,src/mavsdk/plugins/telemetry_server/telemetry_server_impl.cpp ,src/mavsdk/plugins/tracking_server/tracking_server.cpp ,src/mavsdk/plugins/tracking_server/tracking_server_impl.cpp ,src/mavsdk/plugins/transponder/transponder.cpp ,src/mavsdk/plugins/transponder/transponder_impl.cpp ,src/mavsdk/plugins/rtk/rtk.cpp ,src/mavsdk/plugins/rtk/rtk_impl.cpp ,src/mavsdk/plugins/tune/tune.cpp ,src/mavsdk/plugins/tune/tune_impl.cpp]#需要包含的头文件include_dirs [src/mavsdk/core,src/mavsdk/core/include/mavsdk,src/mavsdk/plugins/action/include,src/mavsdk/plugins/action_server/include,src/mavsdk/plugins/calibration/include,src/mavsdk/plugins/camera/include,src/mavsdk/plugins/camera/camera_definition_files/generated,src/mavsdk/plugins/component_information/include,src/mavsdk/plugins/component_information_server/include,src/mavsdk/plugins/failure/include,src/mavsdk/plugins/follow_me/include,src/mavsdk/plugins/ftp/include,src/mavsdk/plugins/geofence/include,src/mavsdk/plugins/gimbal/include,src/mavsdk/plugins/info/include,src/mavsdk/plugins/log_files/include,src/mavsdk/plugins/manual_control/include,src/mavsdk/plugins/mavlink_passthrough/include,src/mavsdk/plugins/mission/include,src/mavsdk/plugins/mission_raw/include,src/mavsdk/plugins/mission_raw_server/include,src/mavsdk/plugins/mocap/include,src/mavsdk/plugins/offboard/include,src/mavsdk/plugins/param/include,src/mavsdk/plugins/param_server/include,src/mavsdk/plugins/rtk/include,src/mavsdk/plugins/server_utility/include,src/mavsdk/plugins/shell/include,src/mavsdk/plugins/telemetry/include,src/mavsdk/plugins/telemetry_server/include,src/mavsdk/plugins/tracking_server/include,src/mavsdk/plugins/transponder/include,src/mavsdk/plugins/tune/include,src/mavsdk/plugins/action,src/mavsdk/plugins/action_server,src/mavsdk/plugins/calibration,src/mavsdk/plugins/camera,src/mavsdk/plugins/component_information,src/mavsdk/plugins/component_information_server,src/mavsdk/plugins/failure,src/mavsdk/plugins/follow_me,src/mavsdk/plugins/ftp,src/mavsdk/plugins/geofence,src/mavsdk/plugins/gimbal,src/mavsdk/plugins/info,src/mavsdk/plugins/log_files,src/mavsdk/plugins/manual_control,src/mavsdk/plugins/mavlink_passthrough,src/mavsdk/plugins/mission,src/mavsdk/plugins/mission_raw,src/mavsdk/plugins/mission_raw_server,src/mavsdk/plugins/mocap,src/mavsdk/plugins/offboard,src/mavsdk/plugins/param,src/mavsdk/plugins/param_server,src/mavsdk/plugins/rtk,src/mavsdk/plugins/server_utility,src/mavsdk/plugins/shell,src/mavsdk/plugins/telemetry,src/mavsdk/plugins/telemetry_server,src/mavsdk/plugins/tracking_server,src/mavsdk/plugins/transponder,src/mavsdk/plugins/tune,src/third_party/mavlink,src/third_party/mavlink/mavlink/src/mavlink/include/mavlink/v2.0,src/third_party/mavlink/mavlink/src/mavlink/include/mavlink/v2.0/common,//third_party/jsoncpp/include,//third_party/curl/include,//third_party/tinyxml2,//third_party/zlib,]
}ohos_shared_library(MAVSDK) {deps [ :libmavsdk_source,//third_party/curl:curl_shared,//third_party/openssl:libssl_shared,//third_party/openssl:libcrypto_shared,//third_party/jsoncpp:jsoncpp,//third_party/tinyxml2:tinyxml2] #依赖的三方库part_name MAVSDKsubsystem_name mavsdkoutput_name libmavsdk}ohos_executable(takeoff_and_land) {use_exceptions trueoutput_name takeoff_and_land # 可选模块输出名include_dirs [src/third_party/mavlink/mavlink/src/mavlink/include,src/mavsdk/core/include/mavsdk,src/mavsdk/plugins/action/include,src/mavsdk/plugins/telemetry/include]sources [examples/takeoff_and_land/takeoff_and_land.cpp,examples/takeoff_and_land/autopilot_interface.cpp,]deps [//third_party/MAVSDK:MAVSDK]part_name MAVSDKsubsystem_name MAVSDK}
#演示编译部分
ohos_executable(offboard) { use_exceptions trueoutput_name offboard # 可选模块输出名include_dirs [src/third_party/mavlink/mavlink/src/mavlink/include,src/mavsdk/core/include/mavsdk,src/mavsdk/plugins/offboard/include,src/mavsdk/plugins/action/include,src/mavsdk/plugins/telemetry/include]sources [examples/offboard/offboard.cpp,]deps [//third_party/MAVSDK:MAVSDK]part_name MAVSDKsubsystem_name MAVSDK}#编译测试文件
ohos_unittest(mavsdk_test) {module_out_path MAVSDK/mavsdk_test testonly trueuse_exceptions trueinclude_dirs [ src/mavsdk/core/include/mavsdk,src/mavsdk/plugins/action/include,src/mavsdk/plugins/action_server/include,src/mavsdk/plugins/calibration/include,src/mavsdk/plugins/camera/include,src/mavsdk/plugins/camera/camera_definition_files/generated,src/mavsdk/plugins/component_information/include,src/mavsdk/plugins/component_information_server/include,src/mavsdk/plugins/failure/include,src/mavsdk/plugins/follow_me/include,src/mavsdk/plugins/ftp/include,src/mavsdk/plugins/geofence/include,src/mavsdk/plugins/gimbal/include,src/mavsdk/plugins/info/include,src/mavsdk/plugins/log_files/include,src/mavsdk/plugins/manual_control/include,src/mavsdk/plugins/mavlink_passthrough/include,src/mavsdk/plugins/mission/include,src/mavsdk/plugins/mission_raw/include,src/mavsdk/plugins/mission_raw_server/include,src/mavsdk/plugins/mocap/include,src/mavsdk/plugins/offboard/include,src/mavsdk/plugins/param/include,src/mavsdk/plugins/param_server/include,src/mavsdk/plugins/rtk/include,src/mavsdk/plugins/server_utility/include,src/mavsdk/plugins/shell/include,src/mavsdk/plugins/telemetry/include,src/mavsdk/plugins/telemetry_server/include,src/mavsdk/plugins/tracking_server/include,src/mavsdk/plugins/transponder/include,src/mavsdk/plugins/tune/include,src/mavsdk/core,src/mavsdk/plugins/action,src/mavsdk/plugins/action_server,src/mavsdk/plugins/calibration,src/mavsdk/plugins/camera,src/mavsdk/plugins/component_information,src/mavsdk/plugins/component_information_server,src/mavsdk/plugins/failure,src/mavsdk/plugins/follow_me,src/mavsdk/plugins/ftp,src/mavsdk/plugins/geofence,src/mavsdk/plugins/gimbal,src/mavsdk/plugins/info,src/mavsdk/plugins/log_files,src/mavsdk/plugins/manual_control,src/mavsdk/plugins/mavlink_passthrough,src/mavsdk/plugins/mission,src/mavsdk/plugins/mission_raw,src/mavsdk/plugins/mission_raw_server,src/mavsdk/plugins/mocap,src/mavsdk/plugins/offboard,src/mavsdk/plugins/param,src/mavsdk/plugins/param_server,src/mavsdk/plugins/rtk,src/mavsdk/plugins/server_utility,src/mavsdk/plugins/shell,src/mavsdk/plugins/telemetry,src/mavsdk/plugins/telemetry_server,src/mavsdk/plugins/tracking_server,src/mavsdk/plugins/transponder,src/mavsdk/plugins/tune,src/third_party/mavlink,src/third_party/curl/curl/src/curl/include,src/third_party/install/include,src/third_party/mavlink/mavlink/src/mavlink/include/mavlink/v2.0,src/third_party/mavlink/mavlink/src/mavlink/include/mavlink/v2.0/common,]sources [src/mavsdk/core/mavsdk_time_test.cpp ,src/mavsdk/core/mavsdk_math_test.cpp ,src/mavsdk/core/mavlink_channels_test.cpp ,src/mavsdk/core/unittests_main.cpp ,src/mavsdk/core/timeout_handler_test.cpp ,src/mavsdk/core/call_every_handler_test.cpp ,src/mavsdk/core/curl_test.cpp ,src/mavsdk/core/cli_arg_test.cpp ,src/mavsdk/core/locked_queue_test.cpp ,src/mavsdk/core/safe_queue_test.cpp ,src/mavsdk/core/mavsdk_test.cpp ,src/mavsdk/core/mavlink_mission_transfer_test.cpp ,src/mavsdk/core/mavlink_statustext_handler_test.cpp ,src/mavsdk/core/geometry_test.cpp ,src/mavsdk/core/ringbuffer_test.cpp ,src/mavsdk/plugins/calibration/calibration_statustext_parser_test.cpp ,src/mavsdk/plugins/camera/camera_definition_test.cpp ,src/mavsdk/plugins/mission_raw/mission_import_test.cpp ,src/mavsdk/plugins/telemetry/math_conversions_test.cpp]deps [//third_party/MAVSDK:MAVSDK,//third_party/googletest:gmock_main,//third_party/googletest:gtest_main]part_name MAVSDK
}
通过以上操作以后就可以在 OpenHarmony 编译源码了
./build.sh --product-name rpi4 --build-targetMAVSDK --ccache
编译完成以后可以在 out/rpi4/mavsdk/MAVSDK 目录下看到编译生成的 libmavsdk.z.so 文件。
同时还可以在 ohos/out/rpi4/tests/unittest/MAVSDK/mavsdk_test/mavsdk_test 目录下看到我们编译的测试文件如下所示 接下来把编译完成的 so 及测试文件到 RPI4 开发板中运行测试文件验证整个库的移植情况。
最后
有很多小伙伴不知道学习哪些鸿蒙开发技术不知道需要重点掌握哪些鸿蒙应用开发知识点而且学习时频繁踩坑最终浪费大量时间。所以有一份实用的鸿蒙HarmonyOS NEXT资料用来跟着学习是非常有必要的。
这份鸿蒙HarmonyOS NEXT资料包含了鸿蒙开发必掌握的核心知识要点内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等鸿蒙HarmonyOS NEXT技术知识点。
希望这一份鸿蒙学习资料能够给大家带来帮助有需要的小伙伴自行领取限时开源先到先得~无套路领取
获取这份完整版高清学习路线请点击→纯血版全套鸿蒙HarmonyOS学习资料
鸿蒙HarmonyOS NEXT最新学习路线 HarmonOS基础技能 HarmonOS就业必备技能 HarmonOS多媒体技术 鸿蒙NaPi组件进阶 HarmonOS高级技能 初识HarmonOS内核 实战就业级设备开发 有了路线图怎么能没有学习资料呢小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙OpenHarmony 学习手册共计1236页与鸿蒙OpenHarmony 开发入门教学视频内容包含ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完整版高清学习路线请点击→纯血版全套鸿蒙HarmonyOS学习资料
《鸿蒙 (OpenHarmony)开发入门教学视频》 《鸿蒙生态应用开发V2.0白皮书》 《鸿蒙 (OpenHarmony)开发基础到实战手册》
OpenHarmony北向、南向开发环境搭建 《鸿蒙开发基础》
ArkTS语言安装DevEco Studio运用你的第一个ArkTS应用ArkUI声明式UI开发.…… 《鸿蒙开发进阶》
Stage模型入门网络管理数据管理电话服务分布式应用开发通知与窗口管理多媒体技术安全技能任务管理WebGL国际化开发应用测试DFX面向未来设计鸿蒙系统移植和裁剪定制…… 《鸿蒙进阶实战》
ArkTS实践UIAbility应用网络案例…… 获取以上完整鸿蒙HarmonyOS学习资料请点击→纯血版全套鸿蒙HarmonyOS学习资料
总结
总的来说华为鸿蒙不再兼容安卓对中年程序员来说是一个挑战也是一个机会。只有积极应对变化不断学习和提升自己他们才能在这个变革的时代中立于不败之地。