《wiki官网教程》2 ROS节点,消息,话题,服务的简述

NODE

node几乎是无处不在,这个东西相当于可执行文件,目前我更愿意把它当做cpp文件,通过catkin_make之后生成可执行文件。

Message

不用说了,没有message就是哑巴了。还是这是血液吧,不然传递机制是无法建立起来的

TOPIC

topic就像是QQ群一样,提供一个平台。当有人发了一条消息后,QQ群告诉任何一个加群的人,有没有红包啥的。显然这是一种通过第三方传递的方式,也就是间接传递。发红包的人就是publisher,看群消息的人就是subscriber,然后是MESSAGE传递,这就很简单了,就是水群。

SERVICE

service有点像两人私聊的意思,或者是很多人找一个人私聊。跳过了topic平台,它与topic区别就在于是消息直接传递还是间接传递。水群就是间接传递,多对多传递。私聊就是直接传递,一对一。

 

ROS节点NODE

roscore是运行ros程序前首先运行的命令

在一个新的终端,使用rosnode显示节点信息
rosnode list  列出当前活动的节点
rosnode info node-name   
rosnode ping node-name 测试节点间连通性

rosrun 允许你使用包名直接运行一个包内的节点
rosrun[package_name][node_name]
rosrun turtlesim turtlesim_node

rosnode kill node-name
还可以用Ctrl-C命令终止节点。但使用这种方法时可能不会在节点管理器中注销该节点, 因此会导致已终止的节点仍然在 rosnode 列表中。此时可以使用下面的命令将节点从列表中删除 :
rosnode cleanup

话题TOPIC

rostopic 命令工具能让你获取有关ROS话题的信息。
rostopic - h 使用帮助选项查看rostopic的子命令
rostopic list 能够列出所有当前订阅和发布的话题。

rostopic echo可以显示在某个话题上发布的数据。
rostopic echo [topic]
rostopic echo / turtle1 / cmd_vel

消息Message

话题之间的通信是通过在节点之间发送ROS消息实现的。这意味着话题的类型是由发布在它上面的消息类型决定的。 

$ rostopic type [topic]:查看发布在某个话题上的消息类型
输出:Geometry_msgs/Twist 
$ rosmsg show [msg_type] :使用rosmsg命令来查看消息的详细情况 
输出:geometry_msgs/Vector3 linear
       float64 x
       float64 y
       float64 z

rostopic pub可以把数据发布到当前某个正在广播的话题上。

rostopic pub - 1 / turtle1 / command_velocity turtlesim / Velocity-- 2.0 1.8turtlesim / Velocity是所发布消息的类型。(双破折号)这会告诉命令选项解析器接下来的参数部分都不是命令选项。 

rostopic pub [topic] [msg_type] [args]:把数据发布到当前某个正在广播的话题上。 
rostopic hz [topic]:查看数据发布的频率。

 rqt_plot命令可以实时显示一个发布到某个话题上的数据变化图形。 

$ rosrun rqt_plot rqt_plot

turtle_teleop_key在一个话题上发布按键输入消息,而turtlesim则订阅该话题以接收该消息。

两节点之间是通过一个ROS话题来互相通信的

服务SERVICE和参数PARAMETER(rosservicerosparam

服务(services)是节点之间通讯的另一种方式
rosservice list         输出可用服务的信息
rosservice type [service]       输出服务类型
rosservice call [service] [args]   调用带参数的服务

rosparam使得我们能够存储并操作ROS 参数服务器上的数据
rosparam list   列出参数名
rosparam set [param_name] 设置参数
rosparam get [param_name] 获取参数
rosparam get / 显示参数服务器上所有内容

rosparam dump[file_name] 将参数写入文件
rosparam load[file_name][namespace] 从文件读取参数

消息msg和服务srv(rosmsg, rossrv和roscp

用于说明传输数据类型和数据值的文件,要确保msg、srv文件被转换成C++,Python和其他语言的源代码。以便msg和srv文件能够被节点使用。

msg文件描述ROS中所使用消息类型的简单文本,它们会被用来生成不同语言的源代码。

srv文件包含两个部分:请求和响应。

msg文件实际上就是每行声明一个数据类型和变量名。可以使用的数据类型如下:int8, int16, int32, int64 (plus uint*)

srv文件分为请求和响应两部分,由'---'分隔。

int64 A
int64 B
---
int64 Sum

注意,在构建的时候,我们只需要"message_generation"。然而,在运行的时候,我们只需要"message_runtime"。

查看package.xml。确保它包含以下两条语句:

<build_depend>message_generation</build_depend> 
<run_depend>message_runtime</run_depend>

在 CMakeLists.txt文件中,利用find_packag函数,增加对message_generation的依赖,这样就可以生成消息了。

find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)

同样,你需要确保你设置了运行依赖:

catkin_package( ... CATKIN_DEPENDS message_runtime ... ...)

add_message_files( FILES Num.msg)

手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project。 确保添加了如下代码:

generate_messages()

以上就是创建消息的所有步骤。

CMakeLists.txt终版

cmake_minimum_required(VERSION 2.8.3)
project(beginner_tutorials)
## 依赖项
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)
################################################
## Declare ROS messages, services and actions ##
################################################
## 在msg文件夹内添加.msg文件
add_message_files(
  FILES
  Num.msg
 )
## 在srv文件夹内添加.srv文件
   FILES
   AddTwoInts.srv
)
## 生成消息、服务源代码
generate_messages(
   DEPENDENCIES
   std_msgs
 )
################################################
## Declare ROS dynamic reconfigure parameters ##
################################################
## 运行依赖
catkin_package(
  CATKIN_DEPENDS message_runtime roscpp rospy std_msgs
)
###########
## Build ##
###########
## Your package locations should be listed before other locations
include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

测试:

$ rosmsg show Num
int 64 num
$ rossrv show AddTwoInts
int64 a
int64 b
-------
int64 sum

注意:

要将catkin空间加入ROS环境中需源生成设置文件,source 一下。

cd ~/catkin_ws
source ./devel/setup.bash

 

 

 

 

 

 

 

 

 

阅读更多

没有更多推荐了,返回首页