ros1 ros2 cmakelist迁移
时间: 2025-01-03 20:38:00 浏览: 6
### 将ROS1项目迁移到ROS2:CMakeLists.txt 文件的修改
#### 修改包管理器和编译指令
为了使 ROS 1 包能够在 ROS 2 环境下正常工作,`CMakeLists.txt` 需要进行一些必要的调整。首先,需要更新 `find_package()` 函数来查找适用于 ROS 2 的组件而不是 ROS 1 组件[^1]。
```cmake
# 替换原有的 find_package(catkin REQUIRED COMPONENTS ...)
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
```
#### 更新构建目标
其次,在定义可执行文件或其他构建目标时,应采用适合于 ROS 2 构建系统的命令:
```cmake
add_executable(talker src/talker.cpp)
# 使用 ament_target_dependencies 而不是 catkin_package()
ament_target_dependencies(talker rclcpp std_msgs)
```
#### 安装规则变更
安装部分也需要相应更改,以适应新的命名约定以及目录结构差异:
```cmake
install(TARGETS talker DESTINATION lib/${PROJECT_NAME})
```
对于 Python 节点,则需确保它们被放置到正确的位置并设置适当的权限以便执行:
```cmake
if(BUILD_TESTING)
install(DIRECTORY launch/
DESTINATION share/${PROJECT_NAME}/launch
)
endif()
install(
DIRECTORY plugin.xml
DESTINATION share/${PROJECT_NAME}
)
```
#### 测试框架转换
最后,如果原项目中有单元测试或者其他形式的质量保证措施,那么这些也应当按照 AMENT 提供的方式重新配置[^2]:
```cmake
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
# ...其他lint工具...
ament_add_gtest(test_example test/example_test.cpp)
endif()
```
通过上述步骤可以有效地完成从 ROS 1 到 ROS 2 过渡期间针对 CMakeLists.txt 所做的必要改动。值得注意的是,具体项目的实际情况可能会有所不同,因此建议参考官方文档获取最准确的信息[^3]。
阅读全文