dji Manifold2 C++开发

下载疆官方的onboard-sdk的原始工程项目,并进入示例代码的目录:,使用如下命令将示例代码编译为示例程序:

1
2
3
mkdir build && cd build
cmake ..` 或 `cmake .. -DADVANCED_SENSING=ON#(使用视觉功能)
make

执行示例程序

1. 复制配置文件

将配置文件UserConfig.txt拷贝到bin文件中:

1
cp ../sample/platform/linux/common/UserConfig.txt bin/
2. 输入程序运行命令(如下以运行flight control 示例代码为例)
1
./djiosdk-flightcontrol-sample UserConfig.txt UserConfig.txt

Cmake的使用

在文件的根目录下有一个CMakeLists.txt文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
cmake_minimum_required(VERSION 2.8)
project(onboardsdk)

set(CMAKE_VERBOSE_MAKEFILE OFF)

set(DJIOSDK 0)
set(DJIOSDK_MINOR_VERSION 1)
set(DJIOSDK_PATCH_VERSION 0)
set(DJIOSDK_VERSION
${DJIOSDK_MAJOR_VERSION}.${DJIOSDK_MINOR_VERSION}.${DJIOSDK_PATCH_VERSION})

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/libs)

if (ADVANCED_SENSING)
add_definitions(-DADVANCED_SENSING)
endif()

if(WAYPT2_CORE)
add_definitions(-DWAYPT2_CORE)
endif()

add_subdirectory(osdk-core)

if (${CMAKE_SYSTEM_NAME} MATCHES Linux)
add_subdirectory(sample/platform/linux)
endif()

需要重点关注add_subdirectory(sample/platform/linux),其作用在于:添加一个子目录并构建该子目录,告诉CMAKE我还有其它子目录的CMakeList.txt需要编译。

于是从该根目录下链接到./sample/platform/linux目录下了,该目录下的CMakeLists.txt文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
cmake_minimum_required(VERSION 2.8)
project(onboardsdk-linux-samples)

if(NOT ONBOARDSDK_SOURCE)
set(ONBOARDSDK_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/../../../osdk-core")
endif()

if(NOT MODULES_HEADER_DIR)
set(MODULES_HEADER_DIR "${ONBOARDSDK_SOURCE}/modules/inc/payload")
endif()

if(NOT FLIGHT_MODULES_HEADER_DIR)
set(FLIGHT_MODULES_HEADER_DIR "${ONBOARDSDK_SOURCE}/modules/inc/flight")
endif()

#add_subdirectory(camera_calibration)
#add_subdirectory(camera-gimbal)
#add_subdirectory(flight-control)
#add_subdirectory(mfio)
#add_subdirectory(missions)
#add_subdirectory(mobile)
#add_subdirectory(telemetry)
#add_subdirectory(logging)
#add_subdirectory(time-sync)
#add_subdirectory(payload-3rd-party)
#add_subdirectory(payloads)
add_subdirectory(flight_GPStrack)
add_subdirectory(flight_static_target)
# 2022.3.11
#add_subdirectory(vehicle_communicate)
#add_subdirectory(UAV_circle)
# 2022.4.28
#add_subdirectory(flight-test)
#add_subdirectory(test_RC)

if(ADVANCED_SENSING)
add_definitions(-DADVANCED_SENSING)
message(STATUS "AdvancedSensing sample is enabled")
add_subdirectory(advanced-sensing)
endif()

可以看到上面注释了很多add_subdirectory()的代码,当想要进入某个子目录用编译器跑某个项目的代码时,就取消注释或者添加新的。最后的部分表示是否启用无人机的视觉部分,如果前面cmake时添加了-DADVANCED_SENSING=ON参数则会进入advanced-sensing子目录进行编译。当然子目录下仍然有编译需要的CMakeLists.txt。

最后生成的可执行文件将会存放于根目录的./build/bin目录中。