科普:ROS的文件体系
一个ROS的工作包可以被称为一个”catkin工作空间“, 在这个工作空间中,只含有三个文件夹:bulid, devel 和 src。在编译的过程中,这三个文件夹的工作流程是:src(package 源代码包)—— bulid(cmake&catkin 缓存和中间文件)—— devel(可执行目标文件)。所以在这三个文件夹中最核心的是src文件夹,它是package源代码包的集合,其他两个文件夹是src的编译过程和结果文件。
src文件夹由一个个package软件包组成,一个软件包中可以包含一个或多个节点的文件。在package中,必须包含的文件是:cmakelist.txt (描述package的编译规则),package.xml(package的信息描述)和src(源代码文件)。其他文件夹还包括:msg(自定义消息), srv(自定义服务), launch(launch文件), scripts(可执行脚本)等。
转载于:https://zhuanlan.zhihu.com/p/51430594
1.创建工作空间
mkdir -p xxx_ws/src //创建文件夹 (必须得有 src) ,也可以鼠标点击来创建
cd xxx_ws //移动到目录下
catkin_make //进行编译
在此目录下,运行终端:
2.启动VSCode
进入 xxx_ws 启动 vscode
cd xxx_ws
code .
3. 配置vscode 编译 ros
快捷键 ctrl + shift + B 调用编译,选择:catkin_make:build
可以点击配置(小齿轮),修改.vscode/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 功能包
5. 功能包下 C++ 的实现
在cpp文件中加入内容:
#include "ros/ros.h"
int main(int argc, char *argv[])
{
//用于解决输出中文乱码问题
setlocale(LC_ALL,"");
//执行节点初始化
ros::init(argc,argv,"HelloVSCode");
//输出日志
ROS_INFO("Hello VSCode!!!");
return 0;
}
为了使编译器能够成功使用ros里的函数补齐提示,需要以下操作:
可能是ubuntu和ros的版本不同,没有cppstandard的可以自己加上这一行:并改成c++17:
(小提示:当INFO后面加了一些中文之后,可能出现乱码。INFO: ????乱码
解决办法:在函数开头加入下面代码的任意一句)
setlocale(LC_CTYPE, "zh_CN.utf8");
setlocale(LC_ALL, "");
6. 配置 CMakeLists.txt文件(C++)
add_executable(节点名称
src/C++源文件名.cpp
)
target_link_libraries(节点名称
${catkin_LIBRARIES}
)
7. 进行编译(C++)
Ctrl + Shift +B 进行编译,发现报错:
进行改错,显示的是 CMakeLists.txt:211: Parse error. Function missing ending ")".
也就是说 CMakeLists.txt文件里的211行这少了右括号。
从211行往上找,发现都是注释,直到153行,确实少了个括号(见上图),补上:
重新编译,没有问题:
8.执行(C++)
新建终端:
运行:
//在一个终端运行
roscore
//在一个新的终端运行
source ./devel/setup.bash //添加环境变量
rosrun first_test hello_vscode //运行,格式 rosrun 功能包的名字 可执行的节点
9. python代码的实现
前4步一样,创建 ROS 功能包那。
新建一个scripts文件夹
(主要是为了和src进行区分开,其实放在一个文件夹中也是可行的)
新建python文件
写py文件内容
#! /usr/bin/python
# -*- coding: utf-8 -*-
"""
Python 版本的 HelloVScode,执行在控制台输出 HelloVScode
实现:
1.导包
2.初始化 ROS 节点
3.日志输出 HelloWorld
"""
import rospy # 1.导包
if __name__ == "__main__":
rospy.init_node("Hello_Vscode_p") # 2.初始化 ROS 节点
rospy.loginfo("Hello VScode, 我是 Python ....") #3.日志输出 HelloWorld
添加可执行权限
chmod +x *.py //给所有py文件添加可执行权限
配置可执行文件
catkin_install_python(PROGRAMS
scripts/hello_vscode.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
编译文件
Ctrl + Shift + B
运行
在工作空间下运行:
roscore
source ./devel/setup.bash
rosrun first_test hello_vscode.py
(出现报错:Non-ASCII character '\xe7' in file
解决办法:在文件头部添加如下两行注释码:
#!/usr/bin/python
# -*- coding: <encoding name> -*- 例如,可添加# -*- coding: utf-8 -*-)
(下面是由于我之前创建过工作空间,并运行过很多程序,现在删掉重学导致的)
如果终端提示bash: /home/wood/catkin_ws/devel/setup.bash: 没有那个文件或目录类似的话语,
在终端输入:
gedit ~/.bashrc