在学习ROS,我选择的IDE是vscode,虽然对于新手不是很友好,其难点在于对一些文件的配置比较繁琐,下面就是ROS运行C++程序的基本流程的框架。(本人也是新手小白,仅供学习和参考)。
1. 创建工作空间:
mkdir -p ${file_name}/src
在终端新建一个文件夹file_name,文件夹下面有src名称的文件夹
进入该新建的工作空间,对其进行编译
cd ${file_name}
catkin_make
编译完成后,可以可视化其工作目录,如下图。
2. 进入该工作空间,启动vscode
cd ${file_name}
code .
3. 配置编译ROS
按住快捷键 ctrl + shift + B,选择catkin_make:build的设置进入,修改里面的内容,将一下的代码复制并替换进去。,注意在任何时候都不要忘记保存你当前所修改的文件,否则程序下一次的执行不会对你的修改有所反应。
修改完成后,次快捷键是用来对你的程序进行编译,在ROS中,你需要频繁对你的代码进行编译
tasks.json替换代码
{
// 有关 tasks.json 格式的文档,请参见
// https://go.microsoft.com/fwlink/?LinkId=733558
"version": "2.0.0",
"tasks": [
{
"label": "catkin_make:debug", //代表提示的描述性信息
"type": "shell", //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
"command": "catkin_make",//这个是我们需要运行的命令
"args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
"group": {"kind":"build","isDefault":true},
"presentation": {
"reveal": "always"//可选always或者silence,代表是否输出信息
},
"problemMatcher": "$msCompile"
}
]
}
4.创建ROS功能包
找到src文件夹,鼠标右键,选择 Create Catkin Package(创建catkin功能包)
在弹窗中,第一个输入是功能包的名称,第二个输入就是你功能包的依赖
一般来说,ROS里面添加的依赖就是 roscpp, rospy, std_msgs 这三个,前两个就是你所用来写代码的编程语言,后面的一个是ROS里面用来通讯的。
创建好后,你可以看见项目的目录下面新增了一个名称为 windows 的功能包
c++文件就是在windows文件夹下的src中进行存放的。 我们新建一个c++文件开始编写。如果include在这里报错,就在c_cpp_properties.json文件中把 c++14 改为 c++17。
我使用的是ubuntu20.04
记得保存。
5.配置 CMakeLists.txt
找到windows下的CMakeLists.txt文件,修改里面的第136行和149-151行(解开注释,修改名称)
add_executable(${PROJECT_NAME}_node src/windows_node.cpp)
对于这个代码,输入节点的映射名称和需要运行的c++文件名称。映射名称自己取。
即:映射名称 src/c++代码名称.cpp
一般来说,这两个名称应该是一样的,不一样也行。保证一样是因为在后面运行的时候,我们需要用到这个映射名称,保持名字统一有利于我们定位文件,不容易混杂混淆。
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
)
这里输入上面的映射名称
即:用映射名称替换${PROJECT_NAME}_node
修改后如下:
6.运行文件
在运行前,先快捷键编译一下程序。
在vscode的终端中输入roscore启动ROS核心
再新开一个终端输入
source ./devel/setup.bash
用来不断刷新。
再输入你的功能包名称+映射名称,就是刚刚在CmakeList文件中自己取的。这就是为什么刚刚在设置映射名称的时候要和c++文件名称进行统一的原因。以为以后如果你的项目大,节点多,会忘记你自己设置的映射名称是什么,统一后就没有这个顾虑了。
rosrun ${package_name} node_name.cpp
然后就是完美运行