- 一 、ROS简介
1.ROS特点:其功能模块都封装与独立的功能包(package)或元功能包(meta package),ros的核心在于其分布式网络,基于TCP/IP的通信方式,实现模块间点对点的松耦合连接。
2.ros的架构设计:主要有三层,基于linux系统的OS层。实现核心通信机制及众多robot开发库的中间层,主要包括基于TCP/IP再次封装的TCPROS/UDPROS的通信系统,三种通信模型,订阅/发布模型、服务器/客户端模型、进程内通信Nodet。在ROSMaster的管理下的应用层。
3.相关概念:计算图:从计算图来看,ROS的功能模块以节点为单位独立运行,可以分布在不同的主机中。节点(node):即执行运算的任务进程,一个系统一般由多个节点组成,运行时可以通过计算图观察,图中的进程即节点,连线即端对端的连接关系。
消息(msg):一种以发布订阅(Publish/subscribe)方式传递,一个节点可以发布多个Topic,或订阅多个Topic。服务(srv):发布订阅的方式很灵活,但对于同步传输却不适合。基于服务器/客户端(servicer/client)模型,其数据类型,包含两个部分,一个用于请求,另一个用于应答。节点管理器(ROSMaster)即用命令roscore启动。
4.ROS文件系统
功能包(package):包含ROS节点,库配置文件、每个包中均有package.xml描述功能包清单,用于记录功能包的依赖选项,编译标志等。
功能包典型文件结构
这些文件夹的主要功能如下:
1)config:放置功能包的配置文件
2)include:放置功能包需要用到的头文件(自定义头文件)
3)scripts:放置可直接运行的Python脚本
4)src:放置需要编译的C++代码
5)launch:放置功能包中的启动文件
6)msg:放置自定义消息类型
7)srv:放置自定义服务消息类型
8)action:放置功能包自定义的动作指令
9)CMakeLists.txt:编译功能包的规则
10)package.xml:功能包清单。
- 二、创建工作空间(work_space)
mkdir -p ~/catkin_ws/src //在根目录创建文件夹 /catkin_ws/src
cd ~/catkin_ws/src //进入src目录
catkin_init_workspace //初始化工作空间,这步可以省略
cd ~/catkin_ws //进入工作空间catkin_ws
catkin_make //执行catkin_make进行编译,将会生成build、devel目录
source ./devel/setup.bash
工作空间常见的四个目录为
1)src:代码空间(Source Sapce),放置开发过程中的功能包,储存Ros功能包的源码文件。
2)build: 编译空间(Build Space),放置编译过程的缓存信息和中间文件。
3)devel: 开发空间(Development Space),用来放置编译过后的二进制文(可执行文件),以及编译后产生的头文件(自定义消息/服务编译后均会残生头文件)。、
4)install: 安装空间(Install Space),编译成功后,即可使用命令make install将文件安装在该空间中,运行该空间的环境变量脚本,即可在终端执行可执行文件。
- 三、vscode中开发Ros
1.创建工作空间
与上述第二大步相同,当上面的创建工作空间完成后,执行以下命令进入vscode
cd ~/catkin_ws //进入工作空间
code . //打开vscode
2.创建功能包
右击工作空间中的src目录,点击Create Catkin Package(需要安装ROS插件),创建功能包。
输入功能包名为hello_world
添加功能包依赖
即可得到下面的功能包,结构如下图所示
3.创建hellowold节点
首先在功能包下的src目录创建hello_world.cpp文件。编写如下代码
#include <ros/ros.h>
int main(int argc, char *argv[])
{
ros::init(argc,argv,"hello_world"); //节点初始化,节点命令为hello_world
ros::NodeHandle nh; //创建节点句柄
ROS_INFO("Hello_world"); //屏幕输出hello_world
return 0;
}
注:出现头文件飘红,以及无代码补全功能时,可在工作空间的.vscode文件夹中修改c_cpp_properties.json文件,includePath添加飘红的头文件路径,将cppStandard改为 ”c++17“即可。
修改功能包中的CMakeLists.txt文件
add_executable(hello_world src/hello_world.cpp) //添加可执行文件hello_world
target_link_libraries(hello_world //将可执行文件与库 &{catkin_LIBARIES}链接
${catkin_LIBRARIES}
)
修改完毕后,即可在工作空间打开终端,输入catkin_make进行编译
source ./devel/setup.bash //添加环境变量
catkin_make //进行编译
编译通过后,将生成可执行文件,文件放在devel/lib/hello_world/hello_world文件夹中,通过rosrun执行可编译文件
roscore //启动ROSMaster节点管理器
rosrun hello_world hello_word // rosrun后第一个选项为功能包名,第二个选项为节点名(实际为可执行
//文件名)
注意:每次打开新的终端,都需要添加环境变量,即source ./devel/setup.bash,若想不用每次都输入,可在系统home目录按ctrl+h显示隐藏文件,在文件.bashrc中添加setup.bash路径