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 测试节点间连通性

ros_graph 查看节点之间的发布-订阅关系

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

rostopic type 命令用来查看所发布话题的消息类型。
rostopic type [topic]  输出结果geometry_msgs/Twist
rosmsg show geometry_msgs/Twist 
输出
geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
rostopic pub可以把数据发布到当前某个正在广播的话题上。rostopic pub [topic] [msg_type] [args]rostopic pub - 1 / turtle1 / command_velocity turtlesim / Velocity-- 2.0 1.8turtlesim / Velocity是所发布消息的类型。(双破折号)这会告诉命令选项解析器接下来的参数部分都不是命令选项。

服务SERVICE和参数PARAMETER

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

rosparam使得我们能够存储并操作ROS 参数服务器上的数据
rosparam list   列出参数名
rosparam set [param_name]
rosparam get [param_name]

rosparam dump[file_name] 将所有的参数写入文件
rosparam load[file_name][namespace]将yaml文件重载入新的命名空间

消息msg和服务srv

msg文件存放在package的msg目录下,srv文件则存放在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的依赖,这样就可以生成消息了。

同样,你需要确保你设置了运行依赖:catkin_package( ... CATKIN_DEPENDS message_runtime ... ...)

add_message_files( FILES Num.msg)

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

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


project()
程序包的名称
find_package()
编译依赖的程序包
add_message_files(), add_service_files(), add_action_files()
添加消息、服务或响应文件
generate_messages()
生成消息、服务或响应文件
catkin_package()
catkin程序包
add_library()/add_executable()/target_link_libraries()
添加库文件,可执行文件,链接库文件
catkin_add_gtest()
添加测试单元
install()
安装


建立catkin工作空间

创建
cd ~/ catkin_ws / src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
编译
source / opt / ros / groovy / setup.bash
cd ~/ catkin_ws /
catkin_make





阅读更多
个人分类: ROS
上一篇C++程序设计视频北大31-35(继承和派生)
下一篇ROS CMakeLists.txt的编写
想对作者说点什么? 我来说一句

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

关闭
关闭