环境:Ubuntu18.04 + ROS Melodic 时间:2022年1月
一、在VSCode中安装插件
安装以下插件:
- C/C++
- ROS
- Cmake
- CMake Tools
- Code Runner
二、创建ROS工作空间
mkdir ros_learning
cd ros_learning
mkdir src
cd src
catkin_init_workspace
cd ..
catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1
上述最后一行的命令可在build文件夹下生成compile_commands.json 文件。
三、在VSCode中配置ROS工作环境
1. 初始化,创建功能包并添加需要编译的C++文件
使用VSCode打开ros_learning 文件夹。打开时若有此提示,可直接选择Yes。 对于以下提示,由于我们的CMakeLists.txt 是存放于src 文件夹中的,因此可忽略。 此时文件目录如下。
右键src 选择Create Catkin Package 。 创建功能包,命名为hello_ros ,回车后,添加依赖roscpp 与rospy 。 此时的src文件夹: 继续在src/hello_ros/src 目录下添加一个cpp文件,命名为helloROS.cpp (注意:文件名如果不加“cpp”,该文件在左侧目录下仍会显示为一个C++文件的图标,但此时该文件不是C++文件,无法正常运行。在创建文件时一定要加上cpp的后缀。),内容如下:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
#include "ros/ros.h"
#include "std_msgs/String.h"
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 << "hello ROS !" << count;
msg.data = ss.str();
ROS_INFO("%s", msg.data.c_str());
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
count++;
}
return 0;
}
在helloROS.cpp 中,可见无法找到头文件。 因此,下面需对json文件进行配置。
2. 配置c_cpp_properties.json
c_cpp_properties.json :用于配置编译器环境,包括启动器代号、位数(这些是自定义的)、编译选项、启动设置、编译模式等。
c_cpp_properties.json的详细介绍: https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference
按F1,找到C/C++:编辑配置(JSON)。如果你在“三、1”中点击了Yes,也可以在文件目录的.vscode下找到c_cpp_properties.json 。 将其内容修改为
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/opt/ros/melodic/include"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64",
"compileCommands": "${workspaceFolder}/build/compile_commands.json"
}
],
"version": 4
}
3. 配置launch.json
launch.json :VSCode用于调试的配置文件,比如指定调试语言环境,指定调试类型等等。
按F5启动调试,会生成launch.json ,修改其内容如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/devel/lib/hello_ros/helloROS", // 表示可执行程序所在的路径,此处按实际情况修改。其中,${workspaceRoot}表示VScode加载的文件夹的根目录,
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
}
]
}
4. 配置tasks.json
tasks.json :用于编译。 按F1,找到任务:配置任务,创建tasks.json 文件,修改其内容如下:
{
"version": "2.0.0",
"tasks": [
{
"label": "catkin_make", //代表提示的描述性信息
"type": "shell", //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
"command": "catkin_make",//这个是我们需要运行的命令
"args": ["-DCMAKE_EXPORT_COMPILE_COMMANDS=1"],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
"group": {"kind":"build","isDefault":true},
"presentation": {
"reveal": "always",//可选always或者silence,代表是否输出信息
"panel": "new"
},
"problemMatcher": "$msCompile"
},
]
}
5. 编辑CMakeLists.txt
C++是一种编译语言,在运行之前需要将代码编译为可执行文件,如果使用Python等解析语言编写代码,则不需要进行编译,可以省去此步骤。 ROS中的编译器使用的是CMake,编译规则通过功能包中的CmakeLists.txt文件设置,使用catkin命令创建的功能包中会自动生成该文件(在“三、1”中已完成),已经配置多数编译选项,并且包含详细注释。 一个CMakeLists.txt对应于一个功能包(hello_ros),故CMakeLists.txt中设计的路径都是在hello_ros 的基础之上,无需绝对路径。
Cmake命令的介绍可参考官方文档: https://cmake.org/cmake/help/v3.0/manual/cmake-commands.7.html#
修改src/hello_ros/CMakeLists.txt 文件,向其中添加以下内容:
catkin_package(
CATKIN_DEPENDS
)
# 头文件路径
include_directories(
include
${catkin_INCLUDE_DIRS}
)
# 生成可执行文件
add_executable(helloROS src/helloROS.cpp) # 此处按实际情况修改
# 链接库
target_link_libraries(helloROS ${catkin_LIBRARIES}) # 此处按实际情况修改
add_executable :用于设置需要编译的代码和可执行文件。第一个参数为期望生成的可执行文件名称,后边的参数为参与编译的源码文件(cpp),如果需要多个代码文件,则可在后面依次列出,中间使用空格进行分割。target_link_libraries :用于设置链接库。很多功能需要使用系统或第三方的库函数,通过该选项可以配置执行文件链接的库文件,其第一个参数与add_executable 相同,是可执行文件的名称,后面依次列出需要链接的库。若未使用其他库,添加默认链接库即可。
以上编译内容会帮助系统生成可执行文件,放置在<workspace>/devel/lib/<package name> 下。
四、结果测试
按Ctrl+Shift+B 进行编译,可以看到与catkin_make一样的编译过程。 新开一个终端,运行roscore 启动Master节点。 按F5运行编译生成的可执行文件。可在终端中看到输出。 至此,配置完成。
|