ROS 发布及订阅消息

ROS之 发布及订阅消息理论知识

大目标:学会使用ROS发布及订阅消息。
小目标:
(1)CMakeLists.txt的建立
(2)package.xml的建立
原因:在理解、实现 ROS中发布及订阅消息程序时,发现头文件单纯包含#include<ros/ros.h>是不可行的,通过查阅资料发现需要首先包含CMakeLists.txt及package.xml。

1. 安装和配置ROS环境

按照官网教程一步一步安装即可。

针对Linux16.04
Kinetic版本

2. ROS环境管理

2.1 确保环境变量被配置

在Linux终端输入:

$ printenv | grep ROS

此时显示:

ROS_ROOT=/opt/ros/kinetic/share/ros
ROS_PACKAGE_PATH=/opt/ros/kinetic/share
ROS_MASTER_URI=http://localhost:11311
ROS_VERSION=1
ROSLISP_PACKAGE_DIRECTORIES=
ROS_DISTRO=kinetic
ROS_ETC_DIR=/opt/ros/kinetic/etc/ros

通过该命令查看是否配置了ROS_ROOT和ROS_PACKAGE_PATH这样的环境变量。

2.2 创建一个catkin 工作空间:

在终端输入:

$ mkdir -p ~/catkin_ws/src                   #递归创建目录  
$ cd ~/catkin_ws                             #切换至创建的工作空间中
$ catkin_make

查看当前目录可看到’build’和’devel’和‘src’三个文件夹。
在工作空间中首次运行catkin_make命令后, 它会在‘src’文件夹下创建一个CMakeLists.txt。在’devel’文件夹里可以看到setup.sh文件。
source这些文件中的任何一个都可以将当前工作空间设置在ROS工作环境的最顶层。此时source一下新生成的setup.sh文件:

$ source devel/setup.bash

要想保证工作空间已配置正确,需确保ROS_PACKAGE_PATH环境变量包含你的工作空间目录,采用以下命令查看:

$ echo $ROS_PACKAGE_PATH

可得输出:

/home/你的用户名/catkin_ws/src:/opt/ros/kinetic/share:/opt/ros/kinetic/stacks

此时,ros的工作环境已完全搭建完成。

A 基础知识(可略过)

A.1 安装ros-kinetic-ros-turorials

$ sudo apt-get install ros-kinetic-ros-tutorials(可将kinetic更换为自己的Ubuntu版本名称)

A.2 文件系统的基本概念

1.Packages: 软件包,是ROS中软件组织的单元,可以包含ROS运行的进程(节点)、配置文件、程序库、可执行文件、脚本或者其它手动创建的东西。
2.Manifest (package.xml): 清单,是对于’软件包’相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。

A.3 文件系统的基本工具

针对catkin方式

rospack = ros + package // $ rospack find [package_name] 获取packages软件包的信息。
roscd = ros + cd //roscd [本地包名称[/子目录]] 直接切换工作目录到某个软件包或软件包集中。
rosls = ros + ls // 允许直接按软件包的名称而不是绝对路径执行ls命令。

3. 创建ROS 程序包(Package)

针对catkin方式

主要介绍:
(1)如何使用roscreate-pkg或catkin创建一个新程序包;
(2)使用rospack查看程序包的依赖关系。

3.1 程序包的构成

(1)必须包含catkin兼容的package.xml文件,这个package.xml文件提供有关程序包的元信息。
(2)必须包含一个catkin 版本的CMakeLists.txt文件。
(3)每个目录下只能有一个程序包。

3.2 一个简单的程序包结构

一个普通的工作空间大致为:

workspace_folder/        -- WORKSPACE
  src/                   -- SOURCE SPACE
    CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
    package_1/
      CMakeLists.txt     -- CMakeLists.txt file for package_1
      package.xml        -- Package manifest for package_1
    ...
    package_n/
      CMakeLists.txt     -- CMakeLists.txt file for package_n
      package.xml        -- Package manifest for package_n

3.3 创建一个catkin程序包

目的:使用catkin_create_pkg命令创建一个新的catkin程序包;
关键程序:catkin_create_pkg <package_name> [depend1][depend2] [depend3]
步骤:
(1)创建工作空间。如2.2 所介绍方式。
(2)切换到所创建的工作空间中。

$ cd ~/catkin_ws/src

(3)创建一个名为“beginner_tutorials’的新程序包,其依赖于std_msgs、roscpp和rospy:

$ catkin_create_pkg  beginner_tutorials  std_msgs roscpp rospy

(4)以后将在beginner_tutorials/src文件夹下编写.cpp文件,在“beginner_tutorials’的文件夹下修改配置文件,才能编译Packages包。

3.4 查看依赖关系

(1)一级依赖
使用使用rospack命令工具来查看一级依赖包。这些依赖吧被保存在package.xml中。

$ rospack depends1 beginner_tutorials 

(2)间接依赖
一般的,一个依赖包还依赖其他的包,可用下面的命令查找。

$ rospack depends1 rospy

但是,一个程序包还可以有好几个间接的依赖包,使用rospack可以递归检测出所有的依赖包。// 即:依赖包的其他依赖包。

$ rospack depends beginner_tutorials

4.编译ROS程序包

4.1 编译Packages

使用方法:

(1)如果源码在catkin工作空间下,在当前工作空间(如本文在~/catkin_ws/中)下输入:

$ catkin_make                               #catkin_make命令将编译src目录下的所有工程。

(2)如果源码不在catkin工作空间下,比如存放在了my_src中,那么可以这样来使用catkin_make:

$ catkin_make --source my_src                       #必须回到根目录下,source 源文件所在的目录       

5.执行ROS程序包

(1)roscore
作用:roscore是在运行所有ROS程序前首先要运行的命令。
打开一个终端,输入:

$ roscore

(2)

source 工作空间/devel/setup.bash      #必不可少

(3)rosrun
作用:允许使用包名直接运行一个包内的节点(不需要知道这个包的路径)。
打开一个终端,输入:

$ rosrun [package_name] [node_name]                         #将此处的第二三项分别换做包名、节点名

tips:改变节点名称
如:$ rosrun turtlesim turtlesim_node __name:=my_turtle
可将原来的节点名( turtlesim)改为my_turtle。

(3)可使用rosnode ping [node_name] 测试程序是否运行
总结:
roscore = ros+core : master (提供为名称服务) + rosout (stdout/stderr) + parameter server (参数服务器)
rosnode = ros+node : 获取节点信息的ROS工具
rosrun = ros+run : 运行节点工具

根据本文的提示,将其整理为:
建立好的工作空间:
工作空间在这里插入图片描述

转载自:
https://blog.csdn.net/q_z_r_s
https://www.ncnynl.com/archives/201608/502.html

原创文章 15 获赞 8 访问量 931

猜你喜欢

转载自blog.csdn.net/weixin_39652282/article/details/103425406