目录

  • 一、前言
  • 二、配置要求
    • 安装ROS2
    • 安装CLion
  • 三、配置步骤
  • 四、后记

一、前言

近日CLion已开放非商用免费使用。相比教程中常用的VSCode,CLion在自动补全、调试和环境变量配置等方面表现更为出色。不过截至本文撰写时,CLion官网仅提供了Windows系统下的ROS2支持配置方案(ROS2 setup tutorial),需要通过--cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON选项导出编译命令,再手动加载和添加编译目标,操作较为繁琐。为此,我尝试采用顶层CMakelists方案来解决这一问题,最终成功打造了流畅的CLion+ROS2开发环境。

二、配置要求

安装ROS2

ROS2的安装已经有许多博客详细介绍,博主最常使用的安装方式是鱼香ROS一键安装,具体参考:动手学ROS2-3.动手安装ROS2

安装CLion

CLion的安装参考Jetbrains官网即可:Download CLion,官网为Ubuntu提供了命令行安装sudo snap install clion --classic,但是博主之前snap安装的CLion有很多bug,可能是对Ubuntu 24.04支持不好,所以仍然建议下载.tar.gz然后配合alias命令使用。

我的CLion安装路径如下

 ~/Softwares ------------------------------------------------------- 16:15:58 
> pwd
/home/star/Softwares~/Softwares ------------------------------------------------------- 16:15:59 
> tree -L 3 clion
clion
└── CLion-2025.1.2└── clion-2025.1.2├── bin├── build.txt├── help├── Install-Linux-tar.txt├── jbr├── lib├── license├── modules├── plugins└── product-info.json10 directories, 3 files

~/.zshrc中添加如下代码

alias clion="/home/star/Softwares/clion/CLion-2025.1.2/clion-2025.1.2/bin/clion"

这样就可以通过clion .的方式直接从命令行将一个目录打开为CLion项目了。

三、配置步骤

以博主的工作空间为例,一个ROS2的工作空间结构如下,可以发现相比于ROS1,ROS2的工作空间没有顶层的CMakeLists.txt,因此无法像CLion配置ROS1一样通过顶层的CMakeLists.txt管理整个工作空间。

├── build
│   ├── ament_cmake_environment_hooks
│   ├── ament_cmake_index
│   ├── ament_lint_cmake
│   ├── ament_xmllint
│   ├── CMakeFiles
│   ├── decomp_ros2_msgs
│   ├── decomp_ros2_utils
│   ├── decomp_util
│   ├── log
│   ├── poly_planner2
│   ├── quadrotor_msgs
│   └── Testing
├── install
│   ├── poly_planner2
│   └── quadrotor_msgs
├── log
│   ├── build_2025-06-30_14-37-21
│   ├── build_2025-06-30_14-37-52
│   ├── build_2025-06-30_14-43-14
│   ├── latest -> latest_build
│   └── latest_build -> build_2025-06-30_14-43-14
└── src├── DecompROS2├── poly_planner2└── quadrotor_msgs27 directories

那么我们可不可以通过手动引入CMakeLists.txt来管理整个工作空间呢?答案是肯定的,在Github上我找到了答案,可以参考:kai-waang/colcon-toplevel-cmake,具体操作如下

  1. 克隆上述仓库到/opt/ros/scripts/cmake
sudo git clone https://github.com/kai-waang/colcon-toplevel-cmake /opt/ros/scripts/cmake
  1. 切换到工作空间下
cd ~/Workspaces/px4_ws # 此处替换为自己的工作空间
  1. 将刚才克隆的仓库的toplevel.cmake拷贝到工作目录顶层(和src/同级)
cp /opt/ros/scripts/cmake/toplevel.cmake ./CMakeLists.txt
  1. 编译工作空间,从命令行启动CLion
colcon build	# 这一步是为了生成 install/setup.zsh
clion .
  1. 如果是第一次用CLion打开这个工作空间,会弹出下面的窗口,点击OK即可
    在这里插入图片描述
  2. 进入 Settings > Build, Execution, Deployment > ToolChains,在Environment file中选择当前工作空间下的install/setup.zsh
    在这里插入图片描述
  3. 进入 Settings > Build, Execution, Deployment > CMake,在Build directory中输入build
    在这里插入图片描述
  4. 通过修改顶层的CMakeLists.txt,可以控制只编译某几个包,类似于colcon build --packages-select xxx ,我的顶层的CMakeLists.txt修改如下:
cmake_minimum_required(VERSION 3.14)
project("PROJECT_NAME")include("/opt/ros/scripts/cmake/colcon.cmake")# only for clion highlighting and analysis
colcon_add_subdirectories(BUILD_BASE "${PROJECT_SOURCE_DIR}/build"BASE_PATHS "${PROJECT_SOURCE_DIR}/src/"--packages-select decomp_ros2_msgs quadrotor_msgs
)
  1. Reload CMake Project,可以看到如下的输出。
    在这里插入图片描述
    同时可以在Run/Debug Configuration下可以看到这个包下面所有的build targets,接下来就可以正常编译、运行和调试了!

四、后记

使用顶层CMakeLists带来了便捷智能的开发体验,但是不能存在同名的build targets,如果需要使用--cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON,我已经在JetBrains官网反馈了Ubuntu下教程的缺失问题,虽然对于CLion熟练用户来说看着Win的教程也可以完成配置,但是还是希望他们能够尽快给出更好的解决方案。

最后祝大家编程愉快,idea多多,bug少少~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87189.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87189.shtml
英文地址,请注明出处:http://en.pswp.cn/web/87189.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF两种绑定方式的分析

一、两种绑定方式的分析 你提供的代码展示了两种不同的属性绑定实现方式:传统的CLR属性配合INotifyPropertyChanged接口,以及WPF依赖属性(DependencyProperty)系统。 相同点 目的相同:两种方式都是为了实现属性值变化时通知UI更新数据绑定…

【零基础学AI】第14讲:支持向量机实战 - 文本分类系统

本节课你将学到 理解支持向量机的核心思想和几何直觉 掌握SVM的关键参数和核函数选择 学会文本数据预处理和特征提取 完成一个邮件分类项目 对比SVM与其他算法的性能差异 开始之前 环境要求 Python 3.8内存: 建议2GB 需要安装的包 pip install pandas numpy scikit-learn …

美团 mtgsig1.2 最新版分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 部分代码 result cp.call…

【实战】CRMEB Pro 企业版安装教程(附 Nginx 反向代理配置 + 常见问题解决)

一、前言 CRMEB Pro 是一款企业级高并发高性能的电商系统,支持 Linux 服务器环境,需要 PHP 8.0 及以上版本,兼容多种 WEB 服务器(如 Nginx 和 Apache),并支持 MySQL 数据库。本文将详细介绍如何从零开始安…

解决Linux下根目录磁盘空间不足的问题

ubantu中提示根目录磁盘空间不足 解决办法:对根目录磁盘空间进行扩展。 一、使用lsblk查看磁盘使用情况 命令行输入:lsblk aaaubuntu:~/Desktop$ lsblk可以看到sda5是挂载在根目录上的。所以我们要对sda5进行扩展 二、扩展硬盘空间 1、关闭虚拟机 2、…

【C++】--入门

前面我们学习C语言的时候,我们也有讲过C的部分历史,我们看其名字就知道其和我们的C语言肯定是有密不可分的关系的,我们的C是在C的基础上发展的,其弥补了C语⾔在表达能⼒、可维护性 和可扩展性⽅⾯的不⾜。 下面为C的近年来的几次…

JAVA内存区域划分

根据《JAVA虚拟机规范》的规定,JAVA虚拟机在执行JAVA程序的过程中会把内存划分为不同的数据区域。不同类型的数据会存储在不同的区域,理解JAVA内存区域的工作细节对理解JAVA多线程、线程安全性有着重要意义。 注意,JAVA内存区域的划分与我们…

Navicat 导入 SQL 文件

1. 安装并打开 Navicat 安装 Navicat(如 Navicat Premium、Navicat for MySQL),百度或者淘宝就有很多破解版。 打开 Navicat,进入主界面。 2. 新建数据库连接 点击左上角 “连接” 按钮,选择你对应的数据库类型&…

《Go语言高级编程》玩转RPC

《Go语言高级编程》玩转RPC 一、客户端 RPC 实现原理:异步调用机制 Go 的 RPC 客户端支持同步和异步调用,核心在于 Client.Go 方法的实现: 1. 同步调用(Client.Call)的本质 func (client *Client) Call(serviceMet…

四大核心要素驱动汽车智能化创新与相关芯片竞争格局

作者:北京华兴万邦管理咨询有限公司 翔煜 商瑞 智能汽车时代的加速到来,使车载智能系统面临前所未有的算力需求。随着越来越多车型引入电子电气架构转向中心化、智能驾驶的多传感器融合、智能座舱的多模态交互以及生成式AI驱动的虚拟助手等创新技术&a…

照明新基建:塔能科技如何用数字骨骼支撑智慧城市生长

一、能源管理困局:双碳目标下的市政用电痛点 在双碳背景下,城市照明用电量已引起市政部门的重点关注。据国家统计局统计:我国城市照明用电量已占据全市城市用电量的28%,部分城市的照明用电量已高达35%以上,高压钠灯传统…

让Claude Code像Cursor一样好用

最近折腾AI工具,发现Claude Code真是个宝藏。但说实话,初学者一上手,十有八九会被命令行那一堆黑框框劝退。你以为你用熟了?其实你只解锁了Claude Code不到20%的威力,剩下的80%都藏在命令行背后的“黑魔法”里。00后谁…

ROS 2 中更改从设备(如电机控制器)的运动模式

在 ROS 2 中更改从设备(如电机控制器)的运动模式(例如从位置模式切换到速度模式),需要通过操作模式(Mode of Operation,对应对象字典索引0x6060) 进行设置。结合你的配置&#xff08…

朴素贝叶斯分类

一、朴素贝叶斯算法概述 朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理的简单概率分类算法,它假设特征之间相互独立("朴素"的含义)。尽管这个假设在现实中很少成立,但该算法在许多实际应用中表现优异,特别是…

python协程:yield实现协程执行、生成器取值的三种方式

yield关键字执行流程 注意:yield关键字的调用次数如果超过了任务执行次数会报错,提示stopiteration异常,例如 正常范围内的任务执行 # 定义一个任务(函数1) def task1():for i in range(3):print(f----task1 i {i}-…

pdf删除一页 python实现(已验证)

首先安装库 使用PyPDF2 首先,确保你已经安装了PyPDF2。如果没有安装,可以通过pip安装: pip install PyPDF2 然后运行 import PyPDF2def remove_page(input_pdf_path, output_pdf_path, page_number_to_remove):# 打开PDF文件with open(i…

2025.1版本PyCharam找不到已存在的conda虚拟环境

前言 创建Python项目指定conda虚拟环境是最常用的操作,我下载的2025.1版本PyCharam编译器找不到我已经创建好的conda虚拟环境,解决方法如下 目录 问题描述 问题解决 总结 问题描述 我使用2025.1版本PyCharam编译器创建项目指定已经存在的虚拟环境出现如下情景 说是我没有…

开机启动项在哪里设置 实用步骤分享

电脑开机时,系统会自动运行一系列程序,其中包括必要的系统进程和用户自行添加的启动项。然而,过多的启动项可能会导致开机速度变慢,影响系统性能。因此,合理管理开机启动项,可以优化电脑的运行效率。电脑开…

LeetCode--39.组合总和

前引:明天就考最后一趟考试,最近考试周,我时时断更,从明天开始,就会一直更新了,可以期待一下 解题思路: 1.获取信息: 给定一个无重复的整数数组和一个目标值 从数组中选取任意数量的…

Visual Studio2022和C++opencv的配置保姆级教程

1.c桌面开发和windows平台开发(Visual Studio2022安装时) 2.下载OPenCV 3.系统属性→添加环境变量→Path 4.VS2022配置opencv 5.项目→属性→VC目录中的包含目录和库目录 5.项目→属性→VC目录中的包含目录和库目录 包含 目录添加: D:\…