ROS的重要概念

ros术语

ROS

ROS是一个用于开发机器人应用程序的、类似操作系统的机器人软件平台

主节点:master

主节点(master)负责节点到节点的连接和消息通信。使用roscore启动。

节点:node

ROS中运行的最小处理器单元。在ROS中,建议为一个目的创建一个节点。

功能包:package

ROS的基本单元。ROS应用程序是以功能包为单位开发的。功能包包括至少一个以上的节点或拥有用于运行其他功能包的节点的配置文件。

元功能包:matepackage

一个具有共同目的的功能包的集合

消息:message

节点之间通过消息(message) 来发送和接收数据

话题:topic

话题由发布者(publisher)发布,订阅者(subscriber)接收

发布和发布者:publisher

发布(publish)是指以与话题的内容对应的消息的形式发送数据。为了执行发布,发布者(publisher)节点在主节点上注册自己的话题等多种信息,并向希望订阅的订阅者节点发送消息。

订阅与订阅者:subscriber

订阅是指以与话题内容对应的消息的形式接收数据。为了执行订阅,订阅者节点在主节点上注册自己的话题等多种信息,并从主节点接收那些发布此节点要订阅的话题的发布者节点的信息。

服务服务器:service server

服务服务器(service server)是以请求作为输入,以响应作为输出的服务消息通信的服务器。

服务客户端:service client

服务客户端(service client)是以请求作为输出并以响应作为输入的服务消息通信的客户端。

动作:action

动作(action)是在需要像服务那样的双向请求的情况下使用的消息通信方式,不同点是在处理请求之后需要很长的响应,并且需要中途反馈值。

动作服务器:action server

动作服务器(action server)以从动作客户端接收的目标作为输入并且以结果和反馈值作为输出的消息通信的服务器。

动作客户端:action client

动作客户端(action client)是以目标作为输出并以从动作服务器接收待结果和反馈值作为输入的消息通信的客户端。

参数:parameter

ROS中的参数(parameter) 是指节点中使用的参数。这些参数是默认设置的,可以根据需要从外部读取或写入。

catkin

catkin是指ROS的构建系统。ROS的构建系统基本上使CMake(Cross PlatformMake),并在功能包目录中的CMakeLists.txt文件中描述构建境。

roscore

roscore是运行ROS主节点的命令。也可以在另一台位于同一个网络内的计算机上运行它。但是在同一网络下,具有唯一性

rosrun

rosrun 是ROS的基本运行命令。它用于在功能包中运行一个节点。

roslaunch

roslaunch是运行多个节点的概念。该命令允许运行多个确定的节点。其他功能还包括一些专为执行具有诸多选项的节点的ROS命令。

bag

用户可以保存ROS中发送和接收的消息的数据,这时用于保存的文件格式称为bag,是以*.bag作为扩展名。

状态图:graph

描述的节点、话题、发布者和订阅者之间关系可以通过状态图(graph)直观地表示。执行命令rqt_graph 或者rosrun rqt_graph rqt_graph

客户端库:client library

ROS是一个客户端库(client library) ,它为各种语言提供开发环境,以减少对所用语言的依赖性。主要的客户端库包括C++、Python。

XML

可扩展标记语言。。在ROS中用于.launch、.urdf和package.xml等各个部分。

CmakeList.txt

ROS 构建系统的catkin基本上使用了CMake,因此在功能包目录的CMakeLists.txt文件中描述着构建环境。

package.xml

包含功能包信息的XML文件,描述功能包名称、作者、许可证和依赖包。

消息通信

消息通信分为三种:单向消息发送/接收方式的话题(topic);双向消息请求/响应方式的服务(service);双向消息目标(goal)/结果(result)/反馈(feedback)方式的动作(action)。另外,节点中使用的参数可以从外部进行修改。

image-20210217175342152

种类区别1区别2区别3
话题异步单向连续单向地发送/接收数据的情况
服务异步双向需要对请求给出即时响应的情况
动作异步双向请求与响应之间需要太长的时间,所以难以使用服务的情况,或需要中途反馈值的情况

话题:topic

话题消息通信是指发送信息的发布者和接收信息的订阅者以话题消息的形式发送和接收信息。

话题是单向的,适用于需要连续发送消息的传感器数据

服务:service

服务消息通信是指请求服务的服务客户端与负责服务响应的服务服务器之间的同步双向服务消息通信。

一个服务被分成服务服务器和服务客户端,其中服务服务器只在有请求(request)的时候才响应(response),而服务客户端会在发送请求后接应。

动作:action

动作消息通信是在如下情况使用的消息通信方式:服务器收到请求后直到响应所需的时间较长,且需要中途反馈值。

参数:parameter

参数也可以看作一种消息通信。可以认为参数是节点中使用的全局变量。

消息:message

消息(message)是用于节点之间的数据交换的一种数据形式。

消息可以是简单的数据结构,如整数(integer)、浮点(floating point)和布尔值(boolean)。也可以是复杂的数据结构。另外,ROS中常用的头(header、std_msgs/Header)也可以作为消息来使用。

msg文件

msg文件是用于话题的消息文件,扩展名为*.msg。

srv文件

srv文件是服务使用的消息文件,扩展名为*.srv。

与msg文件的主要区别在于三个连字符(—)作为分隔符,上层消息是服务请求消息,下层消息是服务响应消息。

action文件

action消息文件是动作 中使用的消息文件,它使用*.action扩展名

与msg和srv文件的主要区别在于,三个连字符(—)在两个地方用作分隔符,第一部分是goal消息,第二部分是result消息,第三部分feedback消息

坐标变换:TF

ROS中的坐标转换TF在描述组成机器人的每个部分、障碍物和外部物体时是最有用的概念之一。这些可以被描述为位置(position)和方向(direction),统称为姿态(pose)。。在此,位置由x、y、z这3个矢量表示,而方向是用四元数(quaternion)x、y、z、w表示。

文件系统

ROS的文件系统分为安装目录和用户工作目录。安装ROS desktop版本后,在/opt目录中会自动生成名为ros的安装目录。用户的工作目录可以在用户想要的位置创建。

用户工作目录

  • /build : 构建相关的文件
  • /devel : msg、srv头文件、用户包库、可执行文件
  • /src : 用户功能包
/src 用户功能包
  • /include 头文件
  • /launch 用于roslaunch的启动文件
  • /scripts 用于rospy的脚本
  • /msg 消息文件
  • /src c++文件
  • /srv 服务文件
  • CMakeLists.txt 构建配置文件
  • package.xml 功能包配置文件

修改功能包配置文件(package.xml)

<!-- 这是一个定义文档语法的语句,随后的内容表明在遵循xml版本1.0。 -->
<?xml version="1.0"?>          
   <!-- 从这个语句到最后</package>的部分是ROS功能包的配置部分。 -->
<package format="2">
<!-- 功能包的名称。使用创建功能包时输入的功能包名称。 -->
  <name>param_demo</name>
  <!-- 功能包的版本。可以自由指定。 -->
  <version>0.0.0</version>
  <!-- 功能包的简要说明。通常用两到三句话描述。 -->
  <description>The param_demo package</description>

  <!-- 提供功能包管理者的姓名和电子邮件地址。 -->
  <maintainer email="haijun@todo.todo">haijun</maintainer>

<!-- 记录版权许可证。写BSD、MIT、Apache、GPLv3或LGPLv3即可。 -->
  <license>TODO</license>


<!-- 记录描述功能包的说明,如网页、错误管理、存储库的地址等 -->
  <!-- <url type="website">http://wiki.ros.org/param_demo</url> -->


<!-- 记录参与功能包开发的开发人员的姓名和电子邮件地址 -->
  <!-- Example: -->
  <!-- <author email="jane.doe@example.com">Jane Doe</author> -->


<!-- 描述构建系统的依赖关系。我们正在使用catkin 构建系统,因此输入catkin。 -->
  <buildtool_depend>catkin</buildtool_depend>

  <!-- 在编写功能包时写下您所依赖的功能包的名称。 -->
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>

<!-- 填写构建功能包时依赖的功能包的名称。 -->
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>rospy</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>

  <!-- 填写运行功能包时依赖的功能包的名称。 -->
  <exec_depend>roscpp</exec_depend>
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>


<!-- 在使用ROS中未指定的标签名称时会用到<export>。 -->
<!-- 最广泛使用的情况是元功能包的情况 -->
  <export>
    <!-- Other tools can request additional information be placed here -->
  </export>
</package>

修改构建配置文件(CMakeLists.txt)

设置可执行文件的创建、依赖包优先构建、连接器(linker)的创建等等。

# 操作系统中安装的cmake的最低版本。
cmake_minimum_required(VERSION 3.0.2)
# 功能包的名称,功能包名称与package.xml中的<name>标记中描述的功能包名称相同
project(param_demo)

## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)

# 进行构建所需的组件包。
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)

## 使用ROS以外的功能包时使用的方法
# find_package(Boost REQUIRED COMPONENTS system)


## 在使用Python,也就是使用rospy时的配置选项
## 其功能是调用Python安装过程setup.py。
# catkin_python_setup()

################################################
## Declare ROS messages, services and actions ##
################################################

## 是添加消息文件
## FILES将引用当前功能包目录的msg目录中的*.msg文件,自动生成一个头文件(*.h)。
# add_message_files(
#   FILES
#   Message1.msg
#   Message2.msg
# )

## 是添加要使用的服务文件
## 使用FILES会引用功能包目录中的srv目录中的*.srv文件
# add_service_files(
#   FILES
#   Service1.srv
#   Service2.srv
# )

## 是添加要使用的动作文件
# add_action_files(
#   FILES
#   Action1.action
#   Action2.action
# )

## 设置依赖的消息
# generate_messages(
#   DEPENDENCIES
#   std_msgs
# )

################################################
## Declare ROS dynamic reconfigure parameters ##
################################################

## 使用dynamic_reconfigure时加载要引用的配置文件的设置。
# generate_dynamic_reconfigure_options(
#   cfg/DynReconf1.cfg
#   cfg/DynReconf2.cfg
# )

###################################
## catkin specific configuration ##
###################################
## catkin 构建选项。
catkin_package(
#  INCLUDE_DIRS include                                             ##  将使用INCLUDE_DIRS后面的内部目录include的头文件
#  LIBRARIES param_demo                                          ## 将使用随后而来的功能包的库
#  CATKIN_DEPENDS roscpp rospy std_msgs     ## 依赖的包文件
#  DEPENDS system_lib                                                ## 描述系统依赖包的
)

###########
## Build ##
###########

## 以指定包含目录
include_directories(
# include
  ${catkin_INCLUDE_DIRS}          # 将引用每个功能包中的include目录中的头文件
)

## 声明构建之后需要创建的库
# add_library(${PROJECT_NAME}
#   src/${PROJECT_NAME}/param_demo.cpp
# )

## 在构建库和可执行文件之前创建依赖
# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})


##创建的可执行文件
add_executable(param_demo src/param_demo.cpp)

## Rename C++ executable without prefix
## The above recommended prefix causes long target names, the following renames the
## target back to the shorter version for ease of user use
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")

## 在构建库和可执行文件之前创建依赖
# #在建立可执行文件之前,先创建消息文件的情况下会经常用到。
# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

#在创建特定的可执行文件之前将库和可执行文件进行链接
target_link_libraries(param_demo
  ${catkin_LIBRARIES}
)

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值