1、第二章中的概念

一、安装

二、配置账户

不管是安装ROS还是使用一台预装了ROS的电脑,要想在你的账户中使用ROS,就必须完成下面步骤:

a、为用户账户中设置rosdep,首先在账户中初始化rosdep系统,命令如下:

rosdep update

该命令将在你的根目录下保存一些文件,文件夹名为.ros,这条命令只需执行一次。

注意:

这里需要注意,不像上文的 rosdep init,rosdep update 命令是在你的普通账户下运行,而不使用超级用户前缀sudo。

b)设置环境变量 

ROS要依据一些环境变量来定位文件。 设置这些环境变量,你需要使用以下命令7执行ROS提供的脚本setup.bash:

source /opt/ros/indigo/setup.bash

然后,用下行命令确认环境变量已经设置正确:
export | grep ROS

正确配置后,显示结果如下

上面的方式只能在当前shell下运行,如果想在其他shell也能正确运行,那么要做到这一点,编辑账户根目录中的文件.bashrc,并在最下面添加前文的 source 命令。

 source /opt/ros/indigo/setup.bash

除了设置环境变量外,setup.bash 命令还能定义了一些ROS系统的bash函数,包括roscd和rosls(下面将要介绍) ,这些函数在rosbash软件包8中定义。

三、例子

启动 turtlesim 在三个不同的终端中,分别执行以下三个指令:
roscore
rosrun turtlesim turtlesim_node (有些时候先执行这个命令会有点问题,要先执行下面的命令才能正常运行)
rosrun turtlesim turtle_teleop_key

四、相关概念

1、功能包/软件包

在ROS中,所有软件都被组织为软件包的形式,称为ROS软件包或功能包,有时也简称包。ROS软件包是一组用于实现特定功能的相关文件的集合,包括可执行文件和其他支持文件。如,前面使用的两个可执行文件turtlesim_node和turtle_teleop_key都属于turlesim包。

毫不夸张地说,所有的 ROS 软件都是一个软件包或其他软件包的一部分

一些命令:
a、查看软件包列表和定位软件包,使用如下命令,可以获取所有已安装的ROS软件包列表清单

rospack list

每个程序包由一个清单文件(文件名为package.xml)定义。该文件定义关于包的一些细节,包括其名称、版本、维护者和依赖关系。包含package.xml文件的目录被称为软件包目录(其实,这也是ROS软件包的定义:任何ROS能找到且包含package.xml文件的目录就是软件包目录。)这个目录存储所在软件包的大部分文件

要寻找一个软件包的目录,使用rospack find命令:

rospack find package-name

查看软件包:要查看软件包目录下的文件,使用如下命令:

rosls package-name

如果想“访问”某软件包目录,可以将当前目录切换至此软件包目录,使用如下命令:

2、节点管理器(The Master)

ROS 的一个基本目标是使机器人专家设计的很多称为节点(node)的几乎相对独立的小程序能够同时运行。为此,这些节点必须能够彼此通信。ROS 中实现通信的关键部分就是 ROS 节点管理器。

要启动节点管理器,使用如下命令: roscore

节点管理器应该在使用 ROS 的全部时间内持续运行。一个合理的工作流程是在一个终端启动 roscore, 然后打开其他终端运行其他程序。当结束时, 可以通过在 roscore 终端键入 Ctrl-C停止节点管理器。

3、节点(Nodes)

一旦启动roscore后,便可以运行ROS程序了。ROS程序的运行实例被称为节点(node)。

在 turtlesim 的例子中,我们创建了两个节点第一个节点是可执行文件turtlesim_node的实例化。 这个节点负责创建turtlesim窗口和模拟海龟的运动。 第二节点是可执行文件 turtle_teleop_key的实例化

启动节点:

启动节点(也称为运行ROS程序)的基本命令是rosrun:

rosrun package-name executable-name

可以看到,rosrun 命令有两个参数,其中第一个参数是功能包的名称,第二个参数是该软件包中的可执行文件的名称

查看节点列表ROS提供了一些方法来获取任意时间运行节点的信息。要获得运行节点列表,使用如下命令:

rosnode list

rosout 节点是一个特殊的节点,通过 roscore 自动启动。

查看节点:要获得特定节点的信息,使用如下命令:

rosnode info node-name

终止节点 要终止节点,使用如下命令
rosnode kill node-name

4、话题和消息

ROS节点之间进行通信所利用的最重要的机制就是消息传递。在ROS中,消息有组织地存放在话题里消息传递的理念是当一个节点想要分享信息时,它就会发布(publish)消息到对应的一个或者多个话题;当一个节点想要接收信息时,它就会订阅(subscribe)它所需要的一个或者多个话题,ROS节点管理器负责确保发布节点和订阅节点能找到对方;而且消息是直接地从发布节点传递到订阅节点,中间并不经过节点管理器转交。

a) 查看节点构成的计算图

在 ROS 系统中查看节点之间的发布-订阅关系的最简单方式就是在终端输入如下命令:

rqt_graph

在该图中,椭圆形表示节点有向边表示其两端节点间的发布-订阅关系。该计算图告诉我们, /teleop_turtle节点话题/turtle1/cmd_vel发布消息,而/turtlesim节点订阅了这些消息(“cmd_vel”是“command velocity”的缩写。)。

从上图中并没有看到rosout节点在图中。这是因为,在默认情况下,rqt_graph 隐藏了其认为只在调试过程中使用的节点。你可以通过取消“Hide debug”选项来禁止这个特性,图 2.3 展示了这个结果。

请注意 rqt_graph 本身就是一个节点。

b)消息和消息类型

另一个例子是 geometry_msgs/Twist,书中将多次使用这种消息类型。该消息类型对应/turtle1/cmd_vel 话题,而且要稍微复杂一些:

你很有可能已经开始设想,为了自动测试你的程序,编写
一种脚本将 rostopic echo 和 rostopic pub 结合起来作为“记
录”和“回放”消息的方式。如果是这样的话,你会对 rosbag
工具感兴趣 (第 9 章) , 该工具是上述想法的更加完善的实现。

4、一个更复杂的例子

2.8.1 话题通信的多对多机制

远程操作节点 C 发布的每条消息都会传送给 A 和
B 两个仿真节点。 同样的, D 节点发布的消息也会传送给 A 和 B。
当这些消息到达仿真节点时,海龟将会相应地移动,而不管这条
消息是哪个节点发布的。此处要强调的是,基于话题和消息的通
信机制是多对多的,即多个发布者和多个订阅者可以共享同一个话题。

2.8.2 节点之间的松耦合关系

每个节点都不需要显式知道其他节点的存在与否;它们的唯
一交互方式是间接地发生在基于话题和消息的通信层。这种节点
之间的独立性,以及其支持的任务可分解特性(即复杂任务分解
成可重用的小模块) ,是 ROS 最关键的设计特性之一。

此外,ROS 为更加直接的一对一通信提供了一种称为服务
(services)的机制。

5、问题检查

原文地址:https://www.cnblogs.com/gary-guo/p/6284519.html