前言
在个人开发实践中,常需面对ROS(Robot Operating System)
工程项目,且习惯使用CLion
作为集成开发环境(IDE),虽然JetBrains插件市场曾有过ROS相关插件,但早已停止了更新。尽管CLion不直接支持ROS的catkin_make构建系统,但鉴于catkin_make是对CMake的封装,我们可以通过一系列环境配置,使CLion如同处理常规CMake项目一般来管理ROS项目。更重要的是,当面对陌生的ROS工程,不需要修改CMakeLisit.txt文件
。
一、环境
- 系统环境: ubuntu20.04
- ROS版本: noetic
- CLion版本: 2023.1.7
二、操作步骤
1. 软件安装
Clion软件及ROS的安装可以查阅官网操作手册。
2. 关键操作
选择【设置】,进入设置界面
选择【构建、执行、部署】,选择【CMake】,进入CMake配置界面
进行三处修改,分别为:
2.1 CMake配置:
-DCMAKE_MODULE_PATH=/opt/ros/noetic/share/catkin/cmake
-DCMAKE_PREFIX_PATH=/opt/ros/noetic
-DCATKIN_DEVEL_PREFIX=devel
-DCMAKE_INSTALL_PREFIX=bin 如何需要可以进行配置,不需要可以省略
... 其它项目需要的指定变量
注意:为了展示方便,我将其拆分到很多行,实际使用不同变量之间用空格隔开。
2.2 构建目录
设置为build。
2.3 环境变量
将ROS相关的变量都进行声明,有些项目可能会访问这些变量。
可以逐项打印这些变量,进行设置。
CMAKE_MODULE_PATH=/opt/ros/noetic/share/catkin/cmake;
ROS_DISTRO=noetic;
ROS_ETC_DIR=/opt/ros/noetic/etc/ros;
ROS_OS_OVERRIDE=ubuntu;
ROS_PACKAGE_PATH=/opt/ros/noetic/share;
ROS_PYTHON_VERSION=3;
ROS_ROOT=/opt/ros/noetic/share/ros;
ROS_VERSION=1;
LD_LIBRARY_PATH=/opt/ros/noetic/lib;
如果还需要指定其它第三方库,可以追加到LD_LIBRARY_PATH。
注意:为了展示方便,我将其拆分到很多行,实际使用不需分开,可参考CLion产品手册。
三、示例
以orb_slam3_ros为例,除了LD_LIBRARY_PATH额外引入了项目指定第三方库DBow2、g2o和Sophus,按照上述配置可完成编译。
1.生成构建系统文件
2. 生成可执行文件
只是测试可行性,因此忽略编译中的错误。
如果在 CMake 编译过程中,特定的服务(srv)或消息(msg)文件没有被编译,导致缺省的头文件缺失,可以从一个已经成功编译的 ROS 工程的 build 文件夹中复制缺失的头文件到当前项目的相应位置。例如该项目缺省的srv服务文件。
add_service_files(
FILES
SaveMap.srv
)
直接拷贝其文件编译后的头文件。
3.执行
根据可执行文件需求配置环境变量、程序实参、工作目录等即可执行ros节点。
四、总结
进行合理的配置,可以使CLion如同处理常规CMake项目一般来管理ROS项目。