当前位置: 首页 > news >正文

详细解释一个ros的CMakeLists.txt文件

一. CMake环境变量设置

# 指定 CMake 的最低版本要求(3.0.2)。
cmake_minimum_required(VERSION 3.0.2)
# 定义项目名称 ocs2_legged_robot_ros。
project(ocs2_legged_robot_ros)# 生成 compile_commands.json 文件,用于支持 clang-tidy 等静态分析工具。
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)# 定义该 ROS 包依赖的其他 ROS 包,包括:
# 基础 ROS 库(roslib, tf, urdf)
# OCS2 相关库(ocs2_core, ocs2_oc, ocs2_ddp, ocs2_mpc 等)
# 机器人相关库(kdl_parser, robot_state_publisher)
set(CATKIN_PACKAGE_DEPENDENCIESroslibcmake_modulestfurdfkdl_parserrobot_state_publisherocs2_coreocs2_ococs2_ddpocs2_mpcocs2_sqpocs2_ipmocs2_robotic_toolsocs2_pinocchio_interfaceocs2_centroidal_modelocs2_robotic_assetsocs2_msgsocs2_ros_interfacesocs2_legged_robot
)

二. 包查询

关于包查询的具体的命令解析可以看这篇文章

# 使用 catkin(ROS 的构建系统)查找并加载所有依赖的 ROS 包。
find_package(catkin REQUIRED COMPONENTS${CATKIN_PACKAGE_DEPENDENCIES}
)# 查找 Boost 库,并指定需要 system 和 filesystem 组件。
find_package(Boost REQUIRED COMPONENTSsystemfilesystem
)# 查找 Eigen3(线性代数库),要求版本 ≥ 3.3
find_package(Eigen3 3.3 REQUIRED NO_MODULE)# 使用 pkg-config 查找 pinocchio(机器人动力学库)。
find_package(PkgConfig REQUIRED)
pkg_check_modules(pinocchio REQUIRED pinocchio)
###################################
## catkin specific configuration ##
#################################### catkin_package(...)
# 定义该 ROS 包的导出信息:
# INCLUDE_DIRS:指定头文件目录(include 和 Eigen3)。
# LIBRARIES:生成的库(${PROJECT_NAME})。
# CATKIN_DEPENDS:依赖的 ROS 包。
# DEPENDS:非 ROS 依赖(Boost, pinocchio)。
catkin_package(INCLUDE_DIRSinclude${EIGEN3_INCLUDE_DIRS}LIBRARIES${PROJECT_NAME}CATKIN_DEPENDS${CATKIN_PACKAGE_DEPENDENCIES}DEPENDSBoostpinocchio
)###########
## Build ##
############ 四. 构建配置
# 添加头文件搜索路径:
# 本地 include 目录
# pinocchio, Eigen3, Boost, catkin 的头文件目录
include_directories(include${pinocchio_INCLUDE_DIRS}${EIGEN3_INCLUDE_DIRS}${Boost_INCLUDE_DIRS}${catkin_INCLUDE_DIRS}
)# 添加 pinocchio 的库文件搜索路径。
link_directories(${pinocchio_LIBRARY_DIRS}
)# 五. 构建目标
# 主库 add_library(${PROJECT_NAME} ...)
# 编译 src/gait/ 和 src/visualization/ 下的源文件,生成库 ocs2_legged_robot_ros。
# add_dependencies 确保依赖项先构建。
# target_link_libraries 链接 catkin 和 Boost 库。
# target_compile_options 应用 OCS2_CXX_FLAGS(可能是优化或警告选项)。
add_library(${PROJECT_NAME}src/gait/GaitKeyboardPublisher.cppsrc/gait/GaitReceiver.cppsrc/visualization/LeggedRobotVisualizer.cpp
)
add_dependencies(${PROJECT_NAME}${${PROJECT_NAME}_EXPORTED_TARGETS}${catkin_EXPORTED_TARGETS}
)
target_link_libraries(${PROJECT_NAME}${catkin_LIBRARIES}${Boost_LIBRARIES}
)
target_compile_options(${PROJECT_NAME} PUBLIC ${OCS2_CXX_FLAGS})# 多个可执行文件
# DDP-MPC 控制节点
# DDP-MPC node for legged robot
add_executable(legged_robot_ddp_mpcsrc/LeggedRobotDdpMpcNode.cpp
)
add_dependencies(legged_robot_ddp_mpc${PROJECT_NAME}${${PROJECT_NAME}_EXPORTED_TARGETS}${catkin_EXPORTED_TARGETS}
)
target_link_libraries(legged_robot_ddp_mpc${PROJECT_NAME}${catkin_LIBRARIES}
)
target_compile_options(legged_robot_ddp_mpc PRIVATE ${OCS2_CXX_FLAGS})# SQP-MPC 控制节点
## SQP-MPC node for legged robot
add_executable(legged_robot_sqp_mpcsrc/LeggedRobotSqpMpcNode.cpp
)
add_dependencies(legged_robot_sqp_mpc${PROJECT_NAME}${${PROJECT_NAME}_EXPORTED_TARGETS}${catkin_EXPORTED_TARGETS}
)
target_link_libraries(legged_robot_sqp_mpc${PROJECT_NAME}${catkin_LIBRARIES}
)
target_compile_options(legged_robot_sqp_mpc  PRIVATE ${OCS2_CXX_FLAGS})# IPM-MPC 控制节点
## IPM-MPC node for legged robot
add_executable(legged_robot_ipm_mpcsrc/LeggedRobotIpmMpcNode.cpp
)
add_dependencies(legged_robot_ipm_mpc${PROJECT_NAME}${${PROJECT_NAME}_EXPORTED_TARGETS}${catkin_EXPORTED_TARGETS}
)
target_link_libraries(legged_robot_ipm_mpc${PROJECT_NAME}${catkin_LIBRARIES}
)
target_compile_options(legged_robot_ipm_mpc  PRIVATE ${OCS2_CXX_FLAGS})# 虚拟节点(可能用于测试)
# Dummy node
add_executable(legged_robot_dummysrc/LeggedRobotDummyNode.cpp
)
add_dependencies(legged_robot_dummy${PROJECT_NAME}${${PROJECT_NAME}_EXPORTED_TARGETS}${catkin_EXPORTED_TARGETS}
)
target_link_libraries(legged_robot_dummy${PROJECT_NAME}${catkin_LIBRARIES}
)
target_compile_options(legged_robot_dummy PRIVATE ${OCS2_CXX_FLAGS})# 键盘控制目标位姿节点
# Keyboard command node for target trajectories
add_executable(legged_robot_targetsrc/LeggedRobotPoseCommandNode.cpp
)
add_dependencies(legged_robot_target${PROJECT_NAME}${${PROJECT_NAME}_EXPORTED_TARGETS}${catkin_EXPORTED_TARGETS}
)
target_link_libraries(legged_robot_target${PROJECT_NAME}${catkin_LIBRARIES}
)
target_compile_options(legged_robot_target PRIVATE ${OCS2_CXX_FLAGS})# 键盘控制步态节点
# Keyboard command node for gait
add_executable(legged_robot_gait_commandsrc/LeggedRobotGaitCommandNode.cpp
)
add_dependencies(legged_robot_gait_command${PROJECT_NAME}${${PROJECT_NAME}_EXPORTED_TARGETS}${catkin_EXPORTED_TARGETS}
)
target_link_libraries(legged_robot_gait_command${PROJECT_NAME}${catkin_LIBRARIES}
)
target_compile_options(legged_robot_gait_command PRIVATE ${OCS2_CXX_FLAGS})#########################
###   CLANG TOOLING   ###
#########################
# 查找 cmake_clang_tools(用于静态代码分析)。
# 如果找到,调用 add_clang_tooling 对目标进行代码检查:
# 检查 TARGETS 指定的所有可执行文件和库。
# 扫描 src/ 和 include/ 目录下的代码。
# 启用严格模式(CF_WERROR 将警告视为错误)。find_package(cmake_clang_tools QUIET)
if(cmake_clang_tools_FOUND)message(STATUS "Run clang tooling for target ocs2_legged_robot_ros")add_clang_tooling(TARGETS${PROJECT_NAME}legged_robot_ddp_mpclegged_robot_sqp_mpclegged_robot_ipm_mpclegged_robot_dummylegged_robot_targetlegged_robot_gait_commandSOURCE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/includeCT_HEADER_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/includeCF_WERROR
)
endif(cmake_clang_tools_FOUND)#############
## Install ##
#############
# 七. 安装规则
# 安装头文件到 CATKIN_PACKAGE_INCLUDE_DESTINATION(通常为 include/ocs2_legged_robot_ros)。
install(DIRECTORY include/${PROJECT_NAME}/DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
)# 安装主库到lib目录
install(TARGETS ${PROJECT_NAME}ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)# 安装所有可执行文件到bin目录
install(TARGETSlegged_robot_ddp_mpclegged_robot_sqp_mpclegged_robot_ipm_mpclegged_robot_dummylegged_robot_targetlegged_robot_gait_commandRUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)# 安装launch和rviz包到ROS包的共享目录
install(DIRECTORY launch rvizDESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)# 八. 测试
# 文件中没有定义测试,但预留了 ############# Testing ############# 部分,可以后续添加 catkin_add_gtest 等测试规则。
#############
## Testing ##
#############
http://www.xdnf.cn/news/1200619.html

相关文章:

  • AI大模型前沿:Muyan-TTS开源零样本语音合成技术解析
  • 自然语言处理NLP (1)
  • 【I】题目解析
  • vmware虚拟机中显示“网络电缆被拔出“的解决方法
  • rust-包和箱子
  • RHEL9 网络配置入门:IP 显示、主机名修改与配置文件解析
  • 电动汽车转向系统及其工作原理
  • 8.c语言指针
  • Web开发系列-第0章 Web介绍
  • SQL注入SQLi-LABS 靶场less21-25详细通关攻略
  • Ubuntu普通用户环境异常问题
  • 数学建模——灰色关联分析
  • 三、构建一个Agent
  • OpenCv中的 KNN 算法实现手写数字的识别
  • 消息队列MQ常见问题和解决方案
  • Java面试全攻略:Spring生态与微服务架构实战
  • 新手开发 App,容易陷入哪些误区?
  • Android:Reverse 实战 part 2 番外 IDA python
  • SignalR 全解析:核心原理、适用场景与 Vue + .NET Core 实战
  • [电网备考]计算机组成与原理
  • Vue 四个map的使用方法
  • Mysql 二进制安装常见问题
  • 设备独立性软件-高速缓存与缓冲区
  • GIF图像格式
  • 水稻调控组全景的综合绘制与建模揭示了复杂性状背后的调控架构
  • springboot基于Java的人力资源管理系统设计与实现
  • Java面试新趋势:云原生与新兴框架实战解析
  • Vscode的常用快捷键(摆脱鼠标计划)
  • 24点数学游戏(穷举法求解表达式)
  • mybatis-plus逻辑删除配置