ROS学习笔记(一) : 入门之基本概念

[TOC]node

基本概念

1. Package

程序包,里面包含节点Node、ROS程序库、数据集、配置文件bash

Package Manefist

程序包的配置文件,即描述程序包的相关信息,包括其名字、版本、功能简述、依赖关系服务器

2. Repositories

代码仓库网络

3. Computation Graph

计算图,ROS在点对点网络里整合并处理数据的过程。图中包含的基本概念:节点、主机、参数服务器、消息、服务、话题、数据包。数据结构

4. Node

节点,一个机器人控制系统由多个节点组成,每一个节点控制不一样的部分。好比一个机器人有两个节点,一个是传感器节点,专门负责接收传感器数据,另外一个是控制节点,专门负责控制机器人做出某些动做。分布式

5. Master

主机,节点管理器,功能是对于计算图中各个元素进行名字注册(register)和检索,没有主机,节点之间就不能找到彼此则没法进行通讯。工具

Parameter Service

参数服务器,是主机的一部分,容许数据经过键的方式存储ui

6. Message

消息,节点之间经过传递消息交流,消息是一种数据结构spa

7. Topic

话题,消息的传输使用的是发布\订阅的机制。一个话题可理解为只针对某种消息,节点发送消息则是将该消息发布到其对应的话题上,只有那些订阅该话题的节点才能接收到这个消息。一个话题可能有多个订阅者和发布者,通常他们互相是不知道(也不需知道)对方的存在,以达到解耦(decouple)的效果。.net

【配图,节点发送消息的过程】

8. Service

服务,尽管"发布\订阅"模型很是灵活,但它是多对多、单向传输的,不适用于"发出请求\返回响应"方式的交互,然而这种交互在分布式系统中十分常见。所以 "请求\响应"经过服务来实现。节点须要提供的信息有:所使用服务的名字以及使用服务的客户,将这些信息打包成请求,发送出去以后等待答复。

9. Bag

数据包,存储一段时间内ROS的消息数据

10. Rosout

至关于ROS中的stdout/stderr

11. Roscore

主机+Rosout+参数服务器


实践操做

1. workspace 工做空间

catkin工做空间:

建立catkin工做空间,在须要建立的目录下输入命令:

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
  • 最后一个命令是使用catkin工做空间时很方便的工具,在工做空间中第一次执行该命令时,会自动在~/catkin_ws/src文件夹中建立CMakeList,同时在工做空间目录中建立build和devel文件夹
  • 在devel文件夹中有几个setup.*sh 文件,source其中的任一文件可将工做空间路径包含到环境变量中
source devel/setup.bash
  • 为了确认是否包含,检查ROS_PACKAGE _PATH这个环境变量的值:
echo $ROS_PACKAGE_PATH

能够看到当前工做空间的路径在最前面 【注:roscd, rospack等ROS工具只能针对那些路径已包含在环境变量ROS_PACKAGE _PATH中的程序包】

2. package 程序包

2.1 最简单的程序包 其文件结构看起来以下:

  • my_package
    • CMakeLists.txt
    • package.xml

2.2 在catkin工做空间中的程序包

  • workspace_folder
    • src
    • CMakeLists.txt
    • pkg_1
      • CMakeLists.txt
      • package.xml
    • ...
    • pkg_n
      • CMakeLists.txt
      • package.xml

2.3 在工做空间中建立程序包

cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
  • 最后一个命令用于建立名为beginner_tutorials的新程序包,这个程序包依赖于std _msgs、roscpp和rospy这几个程序包
  • 执行后在src目录下看到beginner_tutorials文件夹,里面包含一个package.xml文件和一个CMakeList,这两个文件已自动包含了以前在命令中规定的依赖关系
  • catkin_create_pkg 格式:
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

2.4 程序包的依赖关系

- 一级依赖

(注意要先将当前工做空间的路径添加到环境变量中,即前面提到的source命令,这样以后执行rospack命令才不会报错提示找不到beginner_tutorials这个包)

rospack depends1 beginner_tutorials

输出结果

std_msgs
rospy
roscpp
- 间接依赖

对于程序包A的一级依赖程序包B,其自身也依赖一些其它的程序包C,这些程序包C是A的间接依赖

rospack depends1 rospy

可看到rospy的一级依赖

rospack depend beginner_tutorials

递归检测出A的全部的依赖包(包括一级和间接)

2.5 编译程序包

用catkin_make,可认为是在CMake标准工做流程中依次调用了cmake和make

在工做空间中使用catkin_make 在工做空间的根目录下,输入

catkin_make

该命令会编译位于目录 catkin_ws/src 中的全部程序包

更多关于catkin_ make的资料: http://wiki.ros.org/catkin/commands/catkin_make


3. 用实际例子理解节点和话题

每一个节点是一个可执行文件

节点之间经过话题来通讯

  • 好比一个遥控器节点和一个机器人节点,两者经过话题command来通讯,遥控器节点发布信息到command话题中,机器人节点订阅command话题从而接收到遥控器节点发布的信息

使用rosrun

rosrun ros_pkg ros_pkg_node
  • 该命令用于运行某个ros程序包中的某个节点

使用rosnode list

rosnode list
  • 该命令能够列出当前活跃的全部节点
  • rosnode help 列出可选的命令参数

使用rostopic echo

rostopic echo [topic]
  • 该命令能够显示在某个话题上发布的信息
  • rostopic help 列出可选的命令参数

使用rqt_graph

rosrun rqt_graph rqt_graph
  • 打开rqt_graph 能够观察到目前有哪些节点在经过什么话题来通讯

使用rqt_plot

rosrun rqt_plot rqt_plot
  • 能够实时显示一个发布到某个话题上的数据变化图形

turtlesim模拟器的使用

首先运行turtlesim包中的turtlesim_node节点[海龟本体]

rosrun turtlesim turtlesim_node

另外打开一个终端

  • 能够经过键盘来控制turtle [运行一个控制海龟的节点]
rosrun turtlesim turtle_teleop_key

在新终端中打开rqt_graph,可观察到这两个节点经过话题cmmd _vel来通讯

rosrun rqt_graph rqt_graph
  • 也能够经过手动发布消息到话题上来控制turtle

在新终端中, 列出当前的topic

rostopic list

列出该话题的消息类型

rostopic type /turtle1/cmd_vel

列出该消息类型的详细数据类型

rosmsg show geometry_msgs/Twist

发布消息到话题cmd_vel,告诉turtlesim _node,使其以2.0大小的线速度和1.8大小的角速度移动

rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

命令中的-1表示rostopic发布一条信息后立刻退出,也能够设置为循环发送:

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

该信息以1Hz的稳定频率来发送,使turtle保持移动状态

这时能够观察rqt_graph

发现多了一个节点:rostopic发布器节点,一样地,该节点与turtlesim_node节点[海龟本体] 经过话题cmd _vel通讯


roslaunch的使用

使用roslaunch同时运行多个节点,经过编写launch文件来配置各个节点

以turtlesim为例

首先保证环境变量中是否有catkin_ws工做空间的路径

echo $ROS_PACKAGE_PATH

若无,则进入该工做空间的根目录,执行

source devel/setup.bash

以后在任意目录下均可以进入以前建立的程序包

roscd beginner_tutorials

新建launch文件夹,在里面建立launch文件

mkdir launch
gedit turtlemimic.launch

拷贝如下launch文件的内容: http://wiki.ros.org/cn/ROS/Tutorials/UsingRqtconsoleRoslaunch


ROSCPP

ROS编写消息发布器和订阅器

相关API格式

https://blog.csdn.net/junshen1314/article/details/44701693 更详细的解释

[http://wiki.ros.org/cn/ROS/Tutorials/WritingPublisherSubscriber(c%2B%2B)]

相关文章
相关标签/搜索