1、ROS新建并初始化工作空间
mkdir -p ~/demo01_ws/src
cd ~/demo01_ws/src
catkin_init_workspace //生成本工作个空间、src目录下的顶层CmakeLists.txt文件
2.A、命令行编译ROS工作空间
cd ~/demo01_ws
catkin_make //编译工作空间的命令
首次编译,工作空间根目录会自动产生 build 和 devel 两个文件夹及其中的文件。devel 文件夹中产生 setup.bash 环境变量设置脚本。使用 source 命令运行脚本文件 setup.bash 以使工作空间中的环境变量生效。(肉眼可见的效果为:使 $PACKAGE_PATH 包含功能包所在路径,不论是官方写的包,还是自己写在ws/src里的包)
2.B、VSCode快捷键编译ROS工作空间
先说效果:经过如下配置,可在VSCode中使用 Ctrl + Shift + B 快捷键编译ROS工作空间。
code ~/demo01_ws //使用 code 打开工作空间目录
首次使用VSCode打开工作空间时,按Ctrl + Shift + B后会出现以下界面:
鼠标移到 catkin_make: build (两者中短的那个)以使其高亮,然后点击右边的小齿轮进行配置,点击小齿轮后会来到如下界面:
将tasks.json文件内容用如下代码覆盖,即可在VSCode中使用Ctrl + Shift + B快捷键编译ROS工作空间。
{
// 有关 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"
}
]
}
注:主要起作用的是 “group”:这行
3.A、命令行创建ROS功能包
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
3.B、VSCode中创建ROS功能包
① 右键点击工作空间中的顶层src目录
② 在下拉菜单中选择 Creat Catkin Package
③ VSCode顶部会弹出如下界面,需要填写功能包的名字,按Enter完成以进入下一步
④ 在与步骤③相同的位置,现在需要输入依赖包
![](https://i-blog.csdnimg.cn/blog_migrate/4eb4542675ded21d9b1895818000fd7b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6c2ce81efb9cc050614d73f6902e850c.png)
⑤ 修改工作空间下面的默认.vscode目录中的c_cpp_properties.json文件,以达到代码提示的目的。只需修改一处:将 gnu++14 改为 c++17
4、新建一个c++功能包后,功能包目录下的CMakeLists.txt文件的配置
add_executable(节点名称 src/C++源文件名.cpp) //给.cpp源文件映射一个名称(从右映射为左),一般源文件叫啥,
//映射名称就叫啥,只是去掉了.cpp后缀,最多加个_node后缀。参数①②都要改
//一个功能包中可以有多个节点,类似一个工作空间下可以有多个功能包
target_link_libraries(节点名称 ${catkin_LIBRARIES}) //只需改参数①,与映射名称一致
5、运行功能包
①打开一个终端,启动ROS核心
roscore
②在工作空间目录再打开一个终端,键入命令
source ./devel/setup.bash
rosrun 功能包名 节点名(或标签5中所说的映射名称)
(非必须的步骤,只是方便的小技巧)添加 ROS 环境变量,使本工作空间在所有所有终端生效的方法:
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
6、解决打印中文日志时输出乱码的问题
在main函数的开始添加如下一行语句即可解决
setlocale(LC_ALL, "");
7、main函数的参数不可被const修饰
我目前我也不知道为什么,先听话,以后出了问题多个排错方向。