px4的CMakelists.txt阅读

2023-05-16


  1. ############################################################################
  2. #
  3. # Copyright (c) 2017 PX4 Development Team. All rights reserved.
  4. #
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. #
  9. # 1. Redistributions of source code must retain the above copyright
  10. # notice, this list of conditions and the following disclaimer.
  11. # 2. Redistributions in binary form must reproduce the above copyright
  12. # notice, this list of conditions and the following disclaimer in
  13. # the documentation and/or other materials provided with the
  14. # distribution.
  15. # 3. Neither the name PX4 nor the names of its contributors may be
  16. # used to endorse or promote products derived from this software
  17. # without specific prior written permission.
  18. #
  19. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20. # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21. # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  22. # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  23. # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  24. # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  25. # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
  26. # OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
  27. # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  29. # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  30. # POSSIBILITY OF SUCH DAMAGE.
  31. #
  32. ############################################################################

  33. #=============================================================================
  34. # CMAKE CODING STANDARD FOR PX4
  35. #
  36. # Structure
  37. # ---------------------------------------------------------------------------
  38. #
  39. # * Common functions should be included in px_base.cmake.
  40. #
  41. # * OS/ board specific fucntions should be include in
  42. #    px_impl_${OS}.cmake or px4_impl_${OS}_${BOARD}.cmake.
  43. #
  44. # Formatting
  45. # ---------------------------------------------------------------------------
  46. #
  47. # * Use hard indents to match the px4 source code.
  48. #
  49. # * All function and script arguments are upper case.
  50. #
  51. # * All local variables are lower case.
  52. #
  53. # * All cmake functions are lowercase.
  54. #
  55. # * For else, endif, endfunction, etc, never put the name of the statement
  56. #
  57. # Functions/Macros
  58. # ---------------------------------------------------------------------------
  59. #
  60. # * Use px4_parse_function_args to parse functions and check for required
  61. # arguments. Unless there is only one argument in the function and it is clear.
  62. #
  63. # * Never use macros. They allow overwriting global variables and this
  64. #    makes variable declarations hard to locate.
  65. #
  66. # * If a target from add_custom_* is set in a function, explicitly pass it
  67. #    as an output argument so that the target name is clear to the user.
  68. #
  69. # * Avoid use of global variables in functions. Functions in a nested
  70. #    scope may use global variables, but this makes it difficult to
  71. #    resuse functions.
  72. #
  73. # Included CMake Files
  74. # ---------------------------------------------------------------------------
  75. #
  76. # * All variables in config files must have the prefix "config_".
  77. #
  78. # * Never set global variables in an included cmake file,
  79. #    you may only define functions. This excludes config and Toolchain files.
  80. #    This makes it clear to the user when variables are being set or targets
  81. #    are being created.
  82. #
  83. # * Setting a global variable in a CMakeLists.txt file is ok, because
  84. #    each CMakeLists.txt file has scope in the current directory and all
  85. #    subdirectories, so it is not truly global.
  86. #
  87. # * All toolchain files should be included in the cmake
  88. #    directory and named Toolchain-"name".cmake.
  89. #
  90. # Misc
  91. # ---------------------------------------------------------------------------
  92. #
  93. # * If referencing a string variable, don't put it in quotes.
  94. #    Don't do "${OS}" STREQUAL "posix",
  95. #    instead type ${OS} STREQUAL "posix". This will throw an
  96. #    error when ${OS} is not defined instead of silently
  97. #    evaluating to false.
  98. #
  99. #=============================================================================

  100. if (${CMAKE_VERSION} VERSION_LESS 3.1.0)                                                                                            //判断cmake版本不能低于3.1.0
  101.     message("Not a valid CMake version")
  102.     message("On Ubuntu >= 16.04, install or upgrade via:")
  103.     message("    sudo apt-get install cmake")
  104.     message("")
  105.     message("Official website: https://cmake.org/download/")
  106.     message(FATAL_ERROR "Update CMake and try again" )
  107. endif()

  108. # Warning: Changing this modifies CMake's internal workings
  109. # and leads to wrong toolchain detection
  110. cmake_minimum_required(VERSION 3.1 FATAL_ERROR)

  111. set(PX4_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")                                                                                 //设置PX4源文件目录
  112. set(PX4_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")                                                                                //设置运行程序目录

  113. execute_process(                                                                                                        //执行一个或多个子进程
  114.     COMMAND Tools/check_submodules.sh                                                                                   //运行了tools/check_submodules.sh
  115.     WORKING_DIRECTORY ${PX4_SOURCE_DIR}                                                                                 //工作目录再px4目录下为当前目录
  116.     )

  117. #=============================================================================
  118. # configuration
  119. #
  120. # must come before project to set toolchain

  121. set(CONFIG "posix_sitl_default" CACHE STRING "desired configuration")

  122. string(REPLACE "_" ";" config_args ${CONFIG})
  123. list(GET config_args 0 OS)
  124. list(GET config_args 1 BOARD)
  125. list(GET config_args 2 LABEL)
  126. set(target_name "${OS}-${BOARD}-${LABEL}")

  127. file(GLOB_RECURSE configs RELATIVE cmake/configs "cmake/configs/*.cmake")
  128. set_property(CACHE CONFIG PROPERTY STRINGS ${configs})

  129. set(THREADS "4" CACHE STRING "number of threads to use for external build processes")
  130. set(DEBUG_PORT "/dev/ttyACM0" CACHE STRING "debugging port")
  131. set(EXTERNAL_MODULES_LOCATION "" CACHE STRING "External modules source location")

  132. if (NOT EXTERNAL_MODULES_LOCATION STREQUAL "")
  133.     get_filename_component(EXTERNAL_MODULES_LOCATION "${EXTERNAL_MODULES_LOCATION}" ABSOLUTE)
  134. endif()

  135. list(APPEND CMAKE_MODULE_PATH "${PX4_SOURCE_DIR}/cmake")
  136. message(STATUS "CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}")
  137. set(config_module "configs/${CONFIG}")
  138. include(${config_module})

  139. include(common/coverage)
  140. include(common/sanitizers)

  141. # CMake build type
  142. # Debug Release RelWithDebInfo MinSizeRel Coverage
  143. if (NOT CMAKE_BUILD_TYPE)
  144.     if (${OS} STREQUAL "nuttx")
  145.         set(PX4_BUILD_TYPE "MinSizeRel")
  146.     elseif (${OS} STREQUAL "bebop")
  147.         set(PX4_BUILD_TYPE "MinSizeRel")
  148.     else()
  149.         set(PX4_BUILD_TYPE "RelWithDebInfo")
  150.     endif()

  151.     set(CMAKE_BUILD_TYPE ${PX4_BUILD_TYPE} CACHE STRING "Build type" FORCE)
  152. endif()

  153. set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug;Release;RelWithDebInfo;MinSizeRel;Coverage")

  154. message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")


  155. #=============================================================================
  156. # git
  157. #
  158. include(common/px4_git)

  159. execute_process(
  160.     COMMAND git describe --always --tags
  161.     OUTPUT_VARIABLE git_tag
  162.     OUTPUT_STRIP_TRAILING_WHITESPACE
  163.     WORKING_DIRECTORY ${PX4_SOURCE_DIR}
  164.     )

  165. execute_process(
  166.     COMMAND Tools/tag_to_version.py --root ${PX4_SOURCE_DIR}
  167.     OUTPUT_VARIABLE git_version
  168.     WORKING_DIRECTORY ${PX4_SOURCE_DIR}
  169.     )

  170. px4_add_git_submodule(TARGET git_cmake_hexagon PATH "cmake/cmake_hexagon")
  171. px4_add_git_submodule(TARGET git_driverframework PATH "src/lib/DriverFramework")
  172. px4_add_git_submodule(TARGET git_ecl PATH "src/lib/ecl")
  173. px4_add_git_submodule(TARGET git_gazebo PATH "Tools/sitl_gazebo")
  174. px4_add_git_submodule(TARGET git_gazebo_flow PATH "Tools/sitl_gazebo/external/OpticalFlow")
  175. px4_add_git_submodule(TARGET git_gazebo_klt PATH "Tools/sitl_gazebo/external/OpticalFlow/external/klt_feature_tracker")
  176. px4_add_git_submodule(TARGET git_gencpp PATH "Tools/gencpp")
  177. px4_add_git_submodule(TARGET git_genmsg PATH "Tools/genmsg")
  178. px4_add_git_submodule(TARGET git_gps_devices PATH "src/drivers/gps/devices")
  179. px4_add_git_submodule(TARGET git_jmavsim PATH "Tools/jMAVSim")
  180. px4_add_git_submodule(TARGET git_matrix PATH "src/lib/matrix")
  181. px4_add_git_submodule(TARGET git_mavlink PATH "mavlink/include/mavlink/v1.0")
  182. px4_add_git_submodule(TARGET git_mavlink2 PATH "mavlink/include/mavlink/v2.0")
  183. px4_add_git_submodule(TARGET git_nuttx PATH "NuttX")
  184. px4_add_git_submodule(TARGET git_uavcan PATH "src/modules/uavcan/libuavcan")

  185. px4_create_git_hash_header()

  186. #=============================================================================

  187. message(STATUS "PX4 VERSION: ${git_tag}")
  188. message(STATUS "CONFIG: ${target_name}")

  189. # The URL for the elf file for crash logging
  190. if (DEFINED ENV{BUILD_URI})
  191.     set(BUILD_URI $ENV{BUILD_URI})
  192. else()
  193.     set(BUILD_URI "localhost")
  194. endif()

  195. add_definitions(-DBUILD_URI=${BUILD_URI})

  196. # Define GNU standard installation directories
  197. include(GNUInstallDirs)

  198. # Add support for external project building
  199. include(ExternalProject)

  200. # Setup install paths
  201. if (NOT CMAKE_INSTALL_PREFIX)
  202.     if (${OS} STREQUAL "posix")
  203.         set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "Install path prefix" FORCE)
  204.     endif()
  205. endif()
  206. if (CMAKE_INSTALL_PREFIX)
  207.     message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
  208. endif()

  209. #=============================================================================
  210. # require px4 module interface
  211. set(px4_required_interface
  212.     px4_os_prebuild_targets
  213.     px4_os_add_flags
  214.     )
  215. foreach(cmd ${px4_required_interface})
  216.     if (NOT COMMAND ${cmd})
  217.         message(FATAL_ERROR "${config_module} must implement ${cmd}")
  218.     endif()
  219. endforeach()

  220. set(px4_required_config config_module_list)
  221. foreach(conf ${px4_required_config})
  222.     if (NOT DEFINED ${conf})
  223.         message(FATAL_ERROR "cmake/${config_module} must define ${conf}")
  224.     endif()
  225. endforeach()

  226. # force static lib build
  227. set(BUILD_SHARED_LIBS OFF)

  228. #=============================================================================
  229. # ccache
  230. #
  231. option(CCACHE "Use ccache if available" OFF)
  232. find_program(CCACHE_PROGRAM ccache)
  233. if (CCACHE AND CCACHE_PROGRAM)
  234.     message(STATUS "Enabled ccache: ${CCACHE_PROGRAM}")
  235.     set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
  236. endif()

  237. #=============================================================================
  238. # project definition
  239. #
  240. project(px4 CXX C ASM)

  241. set(package-contact "px4users@googlegroups.com")

  242. #=============================================================================
  243. # find programs and packages
  244. #

  245. # see if catkin was invoked to build this
  246. if (CATKIN_DEVEL_PREFIX)
  247.     message(STATUS "catkin ENABLED")
  248.     find_package(catkin REQUIRED)
  249.     if (catkin_FOUND)
  250.         catkin_package()
  251.     else()
  252.         message(FATAL_ERROR "catkin not found")
  253.     endif()
  254. endif()

  255. find_package(PythonInterp REQUIRED)
  256. px4_find_python_module(jinja2 REQUIRED)

  257. #=============================================================================
  258. # cmake testing
  259. #
  260. enable_testing()
  261. include(CTest)

  262. #=============================================================================
  263. # generate compile command database
  264. #
  265. set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

  266. #=============================================================================
  267. # check required toolchain variables
  268. #

  269. # PX4 requires c++11
  270. set(CMAKE_CXX_STANDARD 11)
  271. set(CMAKE_CXX_STANDARD_REQUIRED ON)

  272. # PX4 requires c99
  273. set(CMAKE_C_STANDARD 99)
  274. set(CMAKE_C_STANDARD_REQUIRED ON)

  275. set(required_variables CMAKE_C_COMPILER_ID CMAKE_CXX_COMPILER_ID)
  276. foreach(var ${required_variables})
  277.     if (NOT ${var})
  278.         message(FATAL_ERROR "Toolchain/config must define ${var}")
  279.     endif()
  280. endforeach()

  281. # print full c compiler version
  282. execute_process(COMMAND ${CMAKE_C_COMPILER} --version
  283.         OUTPUT_VARIABLE c_compiler_version
  284.         OUTPUT_STRIP_TRAILING_WHITESPACE
  285.         )
  286. STRING(REGEX MATCH "[^\n]*" c_compiler_version_short ${c_compiler_version})
  287. message(STATUS "C compiler: ${c_compiler_version_short}")

  288. # print full c++ compiler version
  289. execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version
  290.         OUTPUT_VARIABLE cxx_compiler_version
  291.         OUTPUT_STRIP_TRAILING_WHITESPACE
  292.         )
  293. STRING(REGEX MATCH "[^\n]*" cxx_compiler_version_short ${cxx_compiler_version})
  294. message(STATUS "C++ compiler: ${cxx_compiler_version_short}")

  295. #=============================================================================
  296. # external libraries
  297. #
  298. px4_os_prebuild_targets(OUT prebuild_targets
  299.     BOARD ${BOARD}
  300.     THREADS ${THREADS})

  301. #=============================================================================
  302. # build flags
  303. #
  304. px4_os_add_flags(
  305.     BOARD ${BOARD}
  306.     C_FLAGS c_flags
  307.     CXX_FLAGS cxx_flags
  308.     OPTIMIZATION_FLAGS optimization_flags
  309.     EXE_LINKER_FLAGS exe_linker_flags
  310.     INCLUDE_DIRS include_dirs
  311.     LINK_DIRS link_dirs
  312.     DEFINITIONS definitions)

  313. px4_join(OUT CMAKE_EXE_LINKER_FLAGS LIST "${exe_linker_flags}" GLUE " ")
  314. px4_join(OUT CMAKE_C_FLAGS LIST "${c_flags};${optimization_flags}" GLUE " ")
  315. px4_join(OUT CMAKE_CXX_FLAGS LIST "${cxx_flags};${optimization_flags}" GLUE " ")

  316. include_directories(${include_dirs})
  317. #message("INCLUDE_DIRS=${include_dirs}")
  318. link_directories(${link_dirs})
  319. add_definitions(${definitions})

  320. #=============================================================================
  321. # message, and airframe generation
  322. #

  323. include(common/px4_metadata)

  324. add_subdirectory(msg)
  325. px4_generate_messages(TARGET msg_gen
  326.     MSG_FILES ${msg_files}
  327.     OS ${OS}
  328.     INCLUDES ${msg_include_paths}
  329.     DEPENDS git_genmsg git_gencpp prebuild_targets
  330.     )

  331. px4_generate_airframes_xml(BOARD ${BOARD})

  332. #=============================================================================
  333. # DriverFramework
  334. #

  335. # List the DriverFramework drivers
  336. if (DEFINED config_df_driver_list)
  337.     message("DF Drivers: ${config_df_driver_list}")
  338. endif()

  339. set(df_driver_libs)
  340. foreach(driver ${config_df_driver_list})
  341.     add_subdirectory(src/lib/DriverFramework/drivers/${driver})
  342.     list(APPEND df_driver_libs df_${driver})
  343.     message("Adding DF driver: ${driver}")
  344. endforeach()

  345. #=============================================================================
  346. # external projects
  347. #

  348. set(ep_base ${PX4_BINARY_DIR}/external)
  349. set_property(DIRECTORY PROPERTY EP_BASE ${ep_base})

  350. # add external project install folders to build
  351. link_directories(${ep_base}/Install/lib)
  352. include_directories(${ep_base}/Install/include)
  353. # add the directories so cmake won't warn
  354. execute_process(COMMAND cmake -E make_directory ${ep_base}/Install/lib)
  355. execute_process(COMMAND cmake -E make_directory ${ep_base}/Install/include)

  356. #=============================================================================
  357. # external modules
  358. #
  359. if (NOT EXTERNAL_MODULES_LOCATION STREQUAL "")
  360.     message(STATUS "External modules: ${EXTERNAL_MODULES_LOCATION}")
  361.     add_subdirectory("${EXTERNAL_MODULES_LOCATION}/src" external_modules_src)

  362.     set(config_module_list_external_expanded)
  363.     foreach(external_module ${config_module_list_external})
  364.         list(APPEND config_module_list_external_expanded
  365.             ${EXTERNAL_MODULES_LOCATION}/src/${external_module})
  366.     endforeach()
  367.     set(config_module_list
  368.         ${config_module_list}
  369.         ${config_module_list_external_expanded}
  370.         )
  371. endif()

  372. #=============================================================================
  373. # subdirectories
  374. #
  375. set(module_libraries)
  376. foreach(module ${config_module_list})
  377.     string(REGEX MATCH "^[./]" external_module ${module})
  378.     if (external_module)
  379.         STRING(REGEX REPLACE "//" "/" EXT_MODULE ${module})
  380.         STRING(REGEX REPLACE "/" "__" EXT_MODULE_PREFIX ${EXT_MODULE})
  381.         add_subdirectory(${module} ${PX4_BINARY_DIR}/${EXT_MODULE_PREFIX})
  382.     else()
  383.         add_subdirectory(src/${module})
  384.     endif()
  385.     px4_mangle_name(${module} mangled_name)
  386.     list(APPEND module_libraries ${mangled_name})
  387. endforeach()

  388. # Keep track of external shared libs required for modules
  389. set(module_external_libraries "${module_external_libraries}" CACHE INTERNAL "module_external_libraries")

  390. add_subdirectory(src/firmware/${OS})

  391. if (config_io_board)
  392.     add_subdirectory(src/modules/px4iofirmware)
  393. endif()

  394. #=============================================================================
  395. # generate custom target to print for all executable and module cmake targets
  396. #
  397. if (all_posix_cmake_targets)
  398.     list(SORT all_posix_cmake_targets)
  399.     px4_join(OUT posix_cmake_target_list LIST ${all_posix_cmake_targets} GLUE "\\n")
  400.     add_custom_target(list_cmake_targets
  401.         COMMAND sh -c "printf \"${posix_cmake_target_list}\\n\""
  402.         COMMENT "List of cmake targets that can be matched by PX4_NO_OPTIMIZATION:"
  403.         VERBATIM
  404.         )
  405. endif()

  406. #=============================================================================
  407. # packaging
  408. #
  409. # Important to having packaging at end of cmake file.
  410. #
  411. set(CPACK_PACKAGE_NAME ${PROJECT_NAME}-${CONFIG})
  412. set(CPACK_PACKAGE_VERSION ${git_version})
  413. set(CPACK_PACKAGE_CONTACT ${package-contact})
  414. set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
  415. set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
  416. set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
  417. set(short-description "The px4 autopilot.")
  418. set(CPACK_DEBIAN_PACKAGE_DESCRIPTION ${short-description})
  419. set(CPACK_GENERATOR "ZIP")
  420. set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${CONFIG}-${git_tag}")
  421. set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${git_version}")
  422. set(CPACK_SOURCE_GENERATOR "ZIP;TBZ2")
  423. set(CPACK_PACKAGING_INSTALL_PREFIX "")
  424. set(CPACK_SET_DESTDIR "OFF")
  425. if ("${CMAKE_SYSTEM}" MATCHES "Linux")
  426.     find_program(DPKG_PROGRAM dpkg)
  427.     if (EXISTS ${DPKG_PROGRAM})
  428.         list (APPEND CPACK_GENERATOR "DEB")
  429.     endif()
  430. endif()
  431. include(CPack)

  432. # vim: set noet fenc=utf-8 ff=unix ft=cmake :

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1) | 评论(0) | 转发(0) |

上一篇:Qt对话框部分学习

下一篇:cmake学习

相关热门文章
  • SHTML是什么_SSI有什么用...
  • 查看linux中某个端口(port)...
  • 卡尔曼滤波的原理说明...
  • shell中字符串操作
  • 关于java中的“错误:找不到或...
    给主人留下些什么吧!~~
    评论热议
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

    px4的CMakelists.txt阅读 的相关文章

    • PX4模块设计之三十三:Sensors模块

      PX4模块设计之三十三 xff1a Sensors模块 1 Sensors模块简介2 模块入口函数2 1 主入口sensors main2 2 自定义子命令custom command2 3 模块状态print status 重载 3 Se
    • PX4模块设计之四十六:dataman模块

      PX4模块设计之四十六 xff1a dataman模块 1 dataman模块简介2 模块入口函数dataman main3 dataman模块重要函数3 1 start3 2 stop3 3 status3 4 task main 4 A
    • CMakeLists之引入头文件(五)

      1 新建项目 新建项目t4 目录结构如下 xff1a 该程序引入了自建的hello h程序库包含了函数func main c的内容如下所示 xff1a main c include lt hello h gt int main func r
    • ROS中的CMakeLists.txt

      在 ROS的编程过程中 xff0c 如果 CMakeLists txt如果写不好 xff0c 编译就很难成功 如果看不懂 CMakeLists txt那么很多错误你也不知道时什么回事 所以深入了解它是很右必要的 现在我们就来看看它 我们使用
    • px4仿真无法起飞问题(Failsafe enabled: no datalink)

      报错信息 问题描述 xff1a 使用JMAVSim和gazebo仿真px4起飞时报错如下 xff1a WARN commander Failsafe enabled no datalink 说不安全 解决方法 打开QGC 就可以起飞了
    • CMakeLists.txt中第三方库编写思考

      编写ROS时经常需要自己构建第三方库或者引用别人的第三方库 xff0c 对于第三方库的调用主要有以下两种方式 xff1a 1 引用现成的第三方库 xff1a find package PCL 1 7 REQUIRED xff1a 添加依赖
    • 数据集txt格式划分为多个txt文件夹

      简单记录一下数据标签txt格式划分为多个文件 xff0c 通常我们标注号的标签 xff0c 都是在一个txt文件夹中 xff0c 我们训练的时候需要把txt中的标签按照一定的比例划分为多个文件 xff0c 这里贴出划分为三个文件的代码 xf
    • pixhawk px4 commander.cpp

      对于复杂的函数 xff0c 要做的就是看函数的输入是什么 来自哪里 xff0c 经过处理后得到什么 给谁用 xff0c 这样就可以把程序逻辑理清 中间的分析就是看函数如何处理的 span class hljs keyword extern
    • PX4——Range Finder 篇

      Range Finder 此处选用的是 Benewake 下的 Lidar 参数设置 General Configuration 除了官方的参数设置外 xff0c 我在 EKF2 中还找到了 EKF2 RNG AID 参数 xff0c 用来
    • PX4模块设计之二十七:LandDetector模块

      PX4模块设计之二十七 xff1a LandDetector模块 1 LandDetector模块简介2 模块入口函数2 1 主入口land detector main2 2 自定义子命令custom command 3 LandDetec
    • Matlab:excel文件 转 txt文件 (只需2行代码)

      亲测有用 xff0c 只需两行代码 xff0c 将EXCEL文件 xff0c 转换成txt文件 xff1a Data 61 readtable 39 TEST xls 39 writetable Data 39 test txt 39 ex
    • 学习cmake的使用和CMakeLists.txt

      1 学习cmake的使用和CMakeLists txt 文章目录 1 学习cmake的使用和CMakeLists txt1 1 cmake外部构建基础1 2 让每个源文件目录都包含一个CMakeLists txt1 3 安装 1 4 构建静
    • PX4之常用函数解读

      PX4Firmware 经常有人将Pixhawk PX4 APM还有ArduPilot弄混 这里首先还是简要说明一下 xff1a Pixhawk是飞控硬件平台 xff0c PX4和ArduPilot都是开源的可以烧写到Pixhawk飞控中的
    • python 两个小技巧将字典写入txt或者json 文件

      1 不用 json 包 先来看一个 Python 的奇淫技巧 i 61 100 s1 61 str i 这样输出的不会是 100 xff0c 毫不疑问 但是 s1 61 43 str i 43 这样输出的结果 61 str i 于是看这一条
    • Cmakelists.txt添加.h和.cpp文件

      文件目录结构是这样 代码都是最基本的代码 仅仅是个小的demo cmakelists txt里面的内容 span class token comment cmake的版本要求 span cmake minimum required span
    • CMake与CMakeLists是干什么的?

      写在最前面 xff1a 所有的博文都是为了若干年月以后当我再次翻看可以快速回想起之前的零星知识 学海无涯 xff0c 在看这篇文章的未来的你 xff0c 加油吧 xff01 因为之前看到有些软件中使用了CMake xff0c 不太理解为什么
    • PX4:Policy “CMP0097“ is not known to this version of CMake.

      make px4 fmu v3 时报的错 CMake版本的问题 由https blog csdn net zhizhengguan article details 118380965推测 xff0c 删除cmake policy也没事 ma
    • CMakeList实战

      1 FIND PACKAGE FIND PACKAGE
    • [Python进阶] Python处理txt文件:open

      7 1 Python处理txt文件 open 在Python中 通过open函数可以打开一个文件 创建一个file对象 然后对该对象进行读写 函数语法 open name mode buffering 参数说明 name 文件名 mode
    • 使用powershell从txt文件中提取带有两个分隔符的列

      我有一个sample txt 文件 Processing Cl Cog u l Cg txt V DM Nv AL Ft He Se Fe Bt L Ey 0 Ct Cu3 我需要将此文件分成 4 个不同的列 并在之前添加新列 输出 csv

    随机推荐

    • NUC10快乐装机

      NUC10装机 由于为了RoboMaster比赛 xff0c 身为全队唯一一个视觉队员兼队长的我 xff0c 经过疫情期间的再三斟酌 xff0c 最后决定工控机选择为nuc10 为什么选择nuc10 作为第一年参赛的新队伍 xff0c 视觉
    • 什么是PID?讲个故事,通俗易懂

      什么是PID xff1f PID xff0c 就是 比例 xff08 proportional xff09 积分 xff08 integral xff09 微分 xff08 derivative xff09 xff0c 是一种很常见的控制算
    • C语言对寄存器的封装

      目录 1 封装总线和外设基地址 2 封装寄存器列表 3 修改寄存器的位操作的方法 把变量的某位清零 把变量的某几个连续位清零 对变量的某几位进行赋值 对变量的某位取反 1 封装总线和外设基地址 在编程上为了方便理解和记忆 xff0c 我们把
    • STM32——串口通信及实验

      目录 1 按照数据传送的方向 xff0c 分为 xff1a 2 按照通信方式 xff0c 分为 xff1a STM32串口通信基础 串口通信过程 UART xff08 USART xff09 框图 串口通信实验 编程要点 代码分析 通信接口
    • 【STM32】DMA原理,配置步骤超详细,一文搞懂DMA

      目录 DMA xff08 Direct Memory Access xff09 简介 DMA传输方式 DMA功能框图 DMA请求映像 DMA1控制器 DMA2控制器 通道 仲裁器 DMA主要特性 DMA处理 DMA数据配置 从哪里来到哪里去
    • [STM32学习]——一文搞懂I2C总线

      目录 I2C总线的概念 I2C最重要的功能包括 xff1a I2C的物理层 I2C主要特点 xff1a I2C的高阻态 I2C物理层总结 xff1a I2C的协议层 初始 xff08 空闲 xff09 状态 开始信号 xff1a 停止信号
    • STM32——ADC采集

      目录 ADC简介 ADC主要特征 ADC功能框图 ADC引脚 电压输入范围 通道选择 单次转换模式 连续转换模式 转换顺序 规则序列 注入序列 触发源 转换时间 中断 转换结束中断 模拟看门狗中断 DMA请求 代码讲解 宏定义 xff1a
    • STM32——MPU6050内部DMP固件移植,获取欧拉角

      MPU6050模块是什么东西 xff0c 我这里就不再赘述了 xff0c 围绕它可以做很多应用 xff0c 比如四翼飞行器 平衡车等等 当然要完全使用这块模块不是那么容易的 解释说明 其实我们主要是想通过MPU6050得到欧拉角和四元数 x
    • 树莓派---设置WIFI自动连接或者取消自动连接

      树莓派 设置WIFI自动连接或者取消自动连接 注意一 方案二 设置WIFI自动连接 2 1 远程连接 若树莓派本地操作则跳过 2 2 修改WIFI自动连接配置文件 三 取消WIFI自动连接 注意 系统 xff1a Ubuntu16 04 树
    • ROS——服务通信

      服务通信是ROS中一种及其常用的通信模式 xff0c 服务通信是基于请求响应模式的 xff0c 是一种应答机制 xff0c 也即一个节点A向另一个节点B发送请求 xff0c B接收处理请求并产生响应返回给A xff0c 比如如下场景 xff
    • ROS中的头文件和源文件

      目录 自定义头文件的调用 头文件 可执行文件 配置文件 自定义源文件的调用 头文件 源文件 可执行文件 配置文件 头文件与源文件相关配置 可执行文件配置 本文主要介绍ROS的C 43 43 实现 xff0c 如何使用头文件和源文件的方式封装
    • 一文搞懂——软件模拟SPI

      关于stm32通信协议 xff1a 软件模拟SPI 软件模拟I2C的总结 xff08 fishing 8 xff09 To be a fisher的博客 CSDN博客 stm32 软件spi 发现一篇写的软件模拟SPI的比较容易理解的博客
    • RT-Thread启动流程

      芯片启动到main函数之前的运行过程 不论是否有RTOS xff0c 芯片的启动过程是一致的 xff0c 均是要从复位向量处取得上电复位后要执行的第一个语句 xff0c 接下来进行系统时钟初始化等工作 xff0c 随后跳转到main处 寻找
    • FreeRTOS信号量

      前面介绍过 xff0c 队列 xff08 queue xff09 可以用于传输数据 xff1a 在任务之间 xff0c 任务和中断之间 消息队列用于传输多个数据 xff0c 但是有时候我们只需要传递一个状态 xff0c 这个状态值需要用一个
    • FreeRTOS优先级翻转

      优先级翻转 优先级翻转 xff1a 高优先级的任务反而慢执行 xff0c 低优先级的任务反而优先执行 优先级翻转在抢占式内核中是非常常见的 xff0c 但是在实时操作系统中是不允许出现优先级翻转的 xff0c 因为优先级翻转会破坏任务的预期
    • Git学习

      目录 初始化一个Git仓库 添加文件到Git仓库 xff0c 分为两步 小结 查看状态和文件的修改信息 小结 版本回退 git log查看修改和提交的日志信息 版本回退这里可以使用命令 小结 工作区和暂存区 小结 管理修改 小结 撤销修改
    • 数据的表示和存储——

      目录 浮点数的编码表示 浮点数类型 编辑 浮点数的表示 xff08 1 xff09 浮点数 xff08 Float Point xff09 的表示范围 xff08 2 xff09 规格化数形式 xff08 3 xff09 IEEE 754标
    • GDB Debug

      GDB调试教程 xff1a 1小时玩转Linux gdb命令 biancheng net 有一部分要付费 GDB使用详解 知乎 zhihu com GDB调试入门指南 知乎 zhihu com TUI Debugging with GDB
    • python字符串前加 f 的含义

      字符串前加 f 的含义 先看例子用法总结 副标题 xff1a f string 概述 官方文档 xff1a 点击这里 如果你今天将就而选择参考了我的文档 xff0c 总有一天你还是会去阅读官方文档 先看例子 list span class
    • px4的CMakelists.txt阅读

      Copyright c 2017 PX4 Development Team All rights reserved Redistribution and use in source and binary forms with or with