Clion ROS开发环境设置技巧
作者:FlyingGod 发布时间:2023-11-01 02:36:32
在源环境中启动CLion
需要告知CLion ROS特定的环境变量。通过运行来源工作空间时,将在当前shell中检索这些变量
source ./devel/setup.bash
为CLion提供ROS环境变量的最简单方法是从同一个shell启动IDE。在获取工作空间后,您可以键入同一终端:
在CLion中打开一个ROS项目
在源环境中启动CLion后,执行以下操作之一以打开ROS项目:
单击文件|打开并选择ROS工作区的src目录中的CMakeLists.txt,然后选择Open as Project。
单击文件|来自Sources的新CMake项目,并选择工作区的src目录以从中导入项目。
该CMake的工具窗口会显示该项目加载的状态:
设置catkin工作空间的构建路径
默认情况下,CLion将构建输出放在自动创建的cmake-build-debug或cmake-build-release目录中。对于ROS开发,这意味着您将在CLion和运行的控制台中拥有两个不同的版本catkin_make。
要在IDE和控制台上进行单一构建,需要将CLion构建路径设置为catkin工作区目录。为此,请转到文件|设置Ctrl+Alt+S|构建,执行,部署|CMake并更改两个字段:
在生成路径中,设置workspace_folder/build。
在CMake选项中,添加-DCATKIN_DEVEL_PREFIX:PATH=workspace_folder/devel。
使用启动文件
您可以在CLion中将ROS节点作为常规应用程序运行和调试。
启动文件无法直接执行,但您可以使用XML语法突出显示和完成编辑它们,并将调试器附加到正在运行的节点。
将调试器附加到正在运行的节点
1、从命令行运行.launch文件。例如
您可以通过该rosnode list命令检查当前运行的节点列表。在我们的示例中,列表将包含talker和listener:
2、呼叫运行|从主菜单附加到处理或按Ctrl+Alt+F5。
3、通过其PID或名称连接到所需节点:
示例:创建基本ROS节点,在CLion中编辑并运行它
在这个例子中,我们将创建一个简单的ROS包,编辑源代码,并从CLion运行节点。我们将在Ubuntu 18.04上使用ROS Melodic,并在ROS wiki上使用编写简单发布者和订阅者(C ++)教程的基本发布者节点。
创建一个基本的ROS包
创建和构建ROS工作区:
mkdir -p ros_workspace/srccd ros_workspace
catkin_make
在工作区中,创建一个名为my_package的包:
cd src
catkin_create_pkg my_package roscpp rospy std_msgs
启动CLION
来源工作区:
cd ../../../source ./devel/setup.bash
并在同一终端启动CLion
sh /opt/clion-2018.2/bin/clion.sh
在CLion中打开包作为项目
在CLion中,转到File |打开并选择位于包文件夹内的CMakeLists.txt文件,然后选择将其作为项目打开:
添加源文件并编辑CMakeLists.txt
向项目添加新的源文件:右键单击Project树中的src,选择New |C / C ++源文件并将其命名为my_package.cpp。
将整个talker.cpp文件从Publisher和Subscriber教程复制到my_package.cpp中。
新创建的源添加到的CMakeLists.txt和链接其对应程序库:
add_executable(my_package src/my_package.cpp)
target_link_libraries(my_package ${catkin_LIBRARIES})
之后,重新加载CMake项目,并注意运行/调试配置列表中的my_package:
运行ROS节点
1、在从CLion运行节点之前,在新终端中打开ROS主站:
roscore
2、在CLion,运行的my_package配置。运行工具窗口将显示节点输出:
3、在单独的终端中,检查当前活动的ROS主题。如果我们打印消息chatter,输出将类似于我们在CLion中看到的内容:
现在,如果我们在CLion中停止应用程序,该rostopic echo /chatter命令将没有输出。
来源:https://www.cnblogs.com/flyinggod/p/12503014.html


猜你喜欢
- Django2.1 + Python3.6 + nginx + uwsgi 部署到Ubuntu18.04材料准备准备一个Django项目准备
- 一个 MySQL 表可以看作是一个队列,每一行为一个元素。每次查询得到满足某个条件的最前面的一行,并将它从表中删除或者改变它的状态,使得下次
- 这是一个非常愚蠢的错误debug的时候要好好看error信息提醒自己切记好好对待error!切记!切记!------------------
- 1.打开apache的httpd.conf文件,找到# Virtual hosts#Include conf/extra/httpd-vho
- 引子在工作中,我时不时地会需要在Go中调用外部命令。前段时间我做了一个工具,在钉钉群中添加了一个机器人,@这个机器人可以让它执行一些写好的脚
- 还记得曾经被“滑稽”刷屏的场景吗?在这个各种表情包横行的时代,emoji表情还能依然占据一定的地位!这篇文章将带你了解一下,python与e
- 最近在做一个项目,用双通道神经网络,每个通道输入不同数据训练,具有相同label。开始没想到如何实现,网上很多例子都是单通道,即便找到双通道
- PHP crc32() 函数实例输出 crc32() 的结果:<?php $str = crc32("Hello World
- @click @tap重叠事件区分点击remove事件会触发details事件,使用@click.stop官方介绍<ul>??
- 使用MySQL可视化工具Navicat导出MySQL的表结构脚本的方法。1、右键Navicat中的数据库→数据传输(Data Transfe
- 在实现这个功能时借鉴的原博主的方法没有实现切换变色,琢磨了好久终于知道了怎么切换变色(小菜鸟的咆哮)!!!记录下来以供参考,以下是vue的完
- 导语嘿!大家好,我是木木子!今天给大家带来一个好玩儿的Python小程序,希望大家喜欢,记得点点关注啦~有没有什么内容形式,比小视频更小,比
- 上一篇说了vue单页面解决解决SEO的问题只是用php预处理了meta标签但是依然没有内容填充,所以对于内容抓取依然有些乏力,只是解决了从无
- Python中的字典一、字典的特点二、创建字典创建字典用大括号表示dict1={'a':3,'b':4,
- 今天来说说编程语言中的动态类型语言与鸭子类型。动态语言 * 对动态语言的定义:动态编程语言是一类在运行时可以改变其结构的语言:例如新的函数
- antd-日历组件,前后禁止选择,只能选中间一部分:dateDisabledDate(current) { // 需求有效期的禁止选择时间
- 这个问题已经不是什么新鲜问题了,网上也有大把的教程,但大多数是授人以鱼,而不授人以渔,经过辛苦的资料收集,思考,调试,整理,我基本上已经把这
- 基本概念 javascript是一门解释型的语言,浏览器充当解释器。js执行时,在同一个作用域内是先解释再执行。解释的时候会编译f
- 1、通过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上。2、能让你在众多不同的程序中重用函数。将函数存储在独立文
- 1 数据导出 python manage.py dumpdata不指定 appname 时默认为导出所有的apppython manage.