# clion 教程二
clion 教程二
clion与ros教程
1.基础篇
1).创建ros 工作空间
mkdir -p ~/空间名/src
cd ~/空间名/src
catkin_init_workspace
catkin_create_pkg 包名 std_msgs rospy roscpp
cd ~/空间名
catkin_make
source devel/setup.bash
2)…编写ros程序
cd /空间名/src/包名/src
编写.cpp代码:
xxxxxxxxxxxx
xxxxxxxxxxxx
…
如:
talker.cpp
#include “ros/ros.h”
#include “std_msgs/String.h”
#include
int main(int argc, char **argv)
{
ros::init(argc, argv, “talker”);
ros::NodeHandle n;
ros::Publisher chatter_pub = n.advertise<std_msgs::String>(“chatter”, 1000);
ros::Rate loop_rate(10);
int count = 0;
while (ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << “xiao qiu slam bi ji " << count;
msg.data = ss.str();
ROS_INFO(”%s", msg.data.c_str());
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
}
listener.cpp
#include “ros/ros.h”
#include “std_msgs/String.h”
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
ROS_INFO(“I heard: [%s]”, msg->data.c_str());
}
int main(int argc, char **argv)
{
ros::init(argc, argv, “listener”);
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe(“chatter”, 1000, chatterCallback);
ros::spin();
return 0;
}
编写编译文件CMakeLists.txt
camke_minimum_required(VERSION 3.0.2)
project(包名)
set( CMAKE_BUILD_TYPE debug )
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg)
generate_messages(DEPENDENCIES std_msgs)
catkin_package()
include_directories( include ${catkin_INCLUDE_DIRS} )
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_dependencies(talker 包名_generate_messages_cpp)
add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
add_dependencies(listener 包名_generate_messages_cpp)
重新编译一下:
cd ~/空间名
catkin_make
加入环境变量;source ./devel/setup.bash
找到并启动Clion的脚本文件:locate clion.sh
启动Clion:sh PATH_TO_CLION/bin/clion.sh
File->Open选择当ROS工作空间下面的CMakeLists.tx文件
以工程的形式打开选择Open as Project
打开Clion的终端输入roscore;启动.cpp
;
2.如何使用clion调试ROS包可靠篇
参考传送门
以下是clion的通用配置
1.在Clion里安装ROS的插件
打开Clion,选择file->settings->plugins->Marketplace
在搜索框里搜索ros-robot operating,选择robot framework support, hatchery, ROS support,然后点击安装,安装完以后重启Clion
2.下载安装好clion后,先配置下clion的setting
更改cmake为系统安装版本,选择File -> Settings -> Build, Execution, Deployment -> Toolchains
更改Cmake和gdb为ubuntu自带的版本,
编译使用的cmake版本
默认情况下,CLion编译使用的CMake是其内置的一个版本,而使用这个版本的CMake进行编译时会报出一些莫名其妙的错误,命令行中catkin_make明明可以正常编译,而这里就是会失败。解决这个问题的办法就是将CLion中的CMake更换为系统中的CMake,具体设置在Settings->Build->Toolchains,可以看到其中的CMake默认为Bundled,我们需要手动指定为系统中的CMake,具体看下图:
接下来是对某个ros工程进行配置(如果没有报错,省略第三步)*
3.配置ros工程
3.1在catkin_ws下source devel/set.bash,使得终端读入该ros工作空间的环境变量,然后在终端输入clion,启动clion:
source ./devel/setup.bash
locate clion.sh
sh PATH_TO_CLION/bin/clion.sh
3.2**更改debug的配置,**选择File -> Settings -> Build, Execution, Deployment -> CMake
这个配置是只用来配置当前project, 换了其它project要重新配置debug
4.将修改后的代码变为自己的
4.1、编译过程中生成的文件不是位于build和devel文件夹下,编译生成的文件在每个package下面的cmake-build-debug文件夹下,所以需要修改Settings->Build->CMake中的设置,将“CMake options”一栏修改为“-DCATKIN_DEVEL_PREFIX:PATH=/home/user_name/workspace_name/devel”;将"Generation path"一栏修改为“/homeuser_name/workspace_name/build”。这样就能使编译过程中生成的文件位于build和devel文件夹下了。修改途径如下:
参考传送门
5.对单独包进行编译
**1.有一个注意的细节是用clion打开工程的路径,要选择catkin_ws/src下的CMakeList.txt,**以工程的形式打开选择Open as Project
打开Clion的终端输入roscore;启动.cpp;
这样在这个工作空间下的所有包都可以单独编译,编译生成的文件在每个package下面的cmake-build-debug文件夹下,这样不会与build产生冲突,只单用调试,程序调试完成后,运行时仍然使用的是catkkin_make进行编译.
每个包单独编译的方法: 在左侧目录中,右键选择package 1的CMakeList.txt, Load CMake project就可以看到右上角的可执行文件名称不一样,变成对应CMakeList.txt生成的可执行文件名称
1.2 登录整个工作空间的编译环境,就选中刚进工作空间的CMakeLists.txt–>Load CMake Project; 登录单个包的编译环境。选中刚进包的CMakeLists.txt–>Load CMake Project;
2.解决clion头文件找不到问题
是因为catkin_make编译的msg文件在devel中,要给其添加路径
在File -> Settings -> Build, Execution, Deployment -> CMake配置中设置CMake option为
-DCMAKE_BUILD_TYPE=Debug -DCATKIN_DEVEL_PREFIX:PATH=/home/wanghuohuo/catkin_clion/devel
或者
-DCATKIN_DEVEL_PREFIX:PATH=/home/wanghuohuo/catkin_clion/devel
3.出现这个黄色提示This file doesnot belong to any project target ,code insisht features might not word properly
是因为右上角载入的是co_sensor_fusion的工程,而该文件是multithread工程,所以会出现这个提示,Load multithread的CMakeList.txt即可