ROS节点,消息,话题,服务的介绍

2023-05-16

##整理结合机器人操作系统(ros)浅析和网址http://wiki.ros.org/cn

NODE

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

Message

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

TOPIC

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

SERVICE

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

C++体悟

在ros中似乎和正常编程有点不一样,估计VS背后也是这么搞的,只不过ros用户体验不是太高。比如beginner_tutorials::AddTwoInts::Request这一句,把工作包当做命名空间,把里面的AddTwoInts.srv文件当做一个类,不知道VS底层机制是不是这样。当然,ros的c++实现毕竟是借助c++的,还是有不少地方是相似的。

ROS命令部分:

启动节点

启动节点(也称运行ROS程序)的基本命令是rosrun
rosrun [package_name] [node_name]
rosrun package-name executable-name
eg:rosrun turtlesim turtlesim_node
可以像执行任 何其他程序一样直接执行 turtlesim_node:
这里可以看出,一个节点相当于一个cpp文件,运行之后产生一个类似于exe的可执行文件。
可以使用 rosrun 命令显式设置节点的名称,语法 如下:
rosrun package-name executable-name __name:=node-name

Rosrun只是简便了操作,也可以直接找出下面的命令进行操作
/opt/ros/indigo/lib/turtlesim/turtlesim_node

查看节点

rosnode list
rosnode info node-name
在 ROS 系统中查看节点之间的发布-订阅关系的最简单方式就是在终端输入如下命令:
rqt_graph
这是图形界面,比较容易理解
在这个命令中,r 代表 ROS,qt 指的是用来实现这个可视化程序的 Qt 图形界面(GUI)工具包。
rqt_graph 本身就是一个节点。

rosout 节点是一个特殊的节点,通过 roscore 自动启动。其作用有点类似于控制台程序中使用的标准输出(即 std:: cout)。/rosout前面的反斜杠“/”表明该节点名称属于全局命名空间。
所有的节点发布都向话题/rosout 发布消息,该话题由同名的/rosout 节点订阅。这个话题的作用是用来生成各个节点的文本日志消息。
ROS 会根据上下文来推测我们讨论的是/rosout 节点还是/rosout 话题。

终止节点和删除节点

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

查看话题

rostopic -h
rostopic list –h
打印消息内容为了查看某个话题上发布的消息 , 可以利用
rostopic echo topic-name
这条命令将会在终端里显示出指定话题里发布的任何消息
eg:
rostopic echo /turtle1/cmd_vel
topic之间的通信是通过在节点之间发送ROS消息实现的。对于发布器(如turtle_teleop_key)和订阅器(如turtulesim_node)之间的通信,发布器和订阅器之间必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面的消息类型决定

查看消息类型

rostopic type [topic]
eg:
rostopic type /turtle1/cmd_vel
Type 在文本输出中表示数据类型。

查看消息类型详情
rosmsg show message-type-name
eg:
rosmsg show turtlesim/Color
rosmsg show turtlesim/Velocity

发布消息

rostopic pub –r rate-in-hz topic-name message-type message-content
这条命令重复地按照指定的频率给指定的话题发布指定的消息。该命令最后的参数 message-content 应该按顺序提供消息类 型中所有域的参数值。
eg:
rostopic pub –r 1 /turtle1/cmd_vel geometry_msgs/Twist ’[0,0,0]’ ’[0,0,1]’

rostopic pub
这条命令将会发布消息到某个给定的话题。

 -1
这个参数选项使rostopic发布一条消息后马上退出。还有 –r,表示重复,还有-l,锁存模式,虽然也只是发布一次消息,但是会确保该话题的新订阅者也会收到消息。实际上,锁存模式是默认的模式。 同样也可以从文件中读取消息(利用-f参数)或者从标准的输入(把-f参数和消息的内容从命令中都删掉)中读取。两种情况下,输入应该符合rostopic echo的输出格式。 

/turtle1/command_velocity
这是消息所发布到的话题名称。

turtlesim/Velocity
这是所发布消息的类型。
--相当于分割,前面是rostopic控制的参量,后面是node自己的参量
(双破折号)这会告诉命令选项解析器接下来的参数部分都不是命令选项。这在参数里面包含有破折号-(比如负号)时是必须要添加的。包名和其含有的消息类型放在一起将有助于猜测它的含义

’[0,0,0]’ ’[0,0,1]’
Node需要的两个参数

查看频率宽带

rostopic hz [topic]
eg:
rostopic hz /turtle1/pose
rostopic bw就是测试带宽

查看服务

rosservice type [service]
eg:
rosservice type clear
:
std_srvs/Empty

调用服务

rosservice call [service] [args]
eg:
rosservice call clear
服务清除了turtlesim_node的背景上的轨迹。
通过查看再生(spawn)服务的信息,我们来了解带参数的服务:
 rosservice type spawn| rossrv show

rosservice call spawn 2 2 0.2 ""
这个服务使得我们可以在给定的位置和角度生成一只新的乌龟。名字参数是可选的,这里我们不设具体的名字,让turtlesim自动创建一个。

rosparam

rosparam set            设置参数
rosparam get            获取参数
rosparam load           从文件读取参数
rosparam dump           向文件中写入参数
rosparam delete         删除服务器参数
rosparam list           列出服务器参数名
rosparam get /
显示参数服务器上的所有内容:

存储这些信息以备今后重新读取。这通过rosparam很容易就可以实现
rosparam dump [file_name]
rosparam load [file_name] [namespace]
现在我们将所有的参数写入params.yaml文件
eg:
rosparam dump params.yaml

甚至可以将yaml文件重载入新的命名空间,比如说copy空间:
rosparam load params.yaml copy

读取
rosparam get copy/background_b

rqt_console

rqt_console属于ROS日志框架(logging framework)的一部分,用来显示节点的输出信息。rqt_logger_level允许我们修改节点运行时输出信息的日志等级(logger levels)(包括 DEBUG、WARN、INFO和ERROR)。一般情况下,使用ROS_DEBUG_STREAM机器会忽略这条命令,但是要想输出,可以更改日志等级(目前是这样理解的)

rosrun rqt_console rqt_console

rosrun rqt_logger_level rqt_logger_level

roslaunch

roslaunch可以用来启动定义在launch文件中的多个节点。
roslaunch [package] [filename.launch]
eg:
roscd beginner_tutorials
roscd beginner_tutorials

通过roslaunch命令启动launch文件:

roslaunch beginner_tutorials turtlemimic.launch

roswtf(ros-what the fuck)

这条命令会进行全面而深入的检测,包括检测你的环境变量、 安装的文件以及运行的节点。例如,roswtf 将会检测在安装过程 中 rosdep 初始化是否完成,任何节点是否出现了意外的挂起或者
终止,以及活跃的节点是否正确地和其他节点相连接等。可惜的 是,由 roswtf 检测的完整列表只能在 Python 源码中才能找到。

检查并回放bag文件

使用rosbag info检查看它的内容
rosbag info <your bagfile>
回放bag文件以再现系统运行过程
rosbag play <your bagfile>
rosbag play -r 2 <your bagfile>

录制数据子集
rosbag record -O subset /turtle1/command_velocity /turtle1/pose

rosbag record/play命令的局限性:
录制并不完整,可能在某些方面有应用吧。。。。。。

补充ROS Message Types

Bool
Byte
ByteMultiArray
Char
ColorRGBA
Duration
Empty
Float32
Float32MultiArray
Float64
Float64MultiArray
Header
Int16
Int16MultiArray
Int32
Int32MultiArray
Int64
Int64MultiArray
Int8
Int8MultiArray
MultiArrayDimension
MultiArrayLayout
String
Time
UInt16
UInt16MultiArray
UInt32
UInt32MultiArray
UInt64
UInt64MultiArray
UInt8
UInt8MultiArray
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS节点,消息,话题,服务的介绍 的相关文章

随机推荐

  • apt-get vs aptitude

    apt get T 软件包管理工具 参数 h 帮助文件 q 输出到日志 无进展指示 qq 不输出信息 xff0c 错误除外 d 仅下载 不安装或解压归档文件 s 不实际安装 模拟执行命令 y 在需要确认的场景中回应 yes f 尝试修正系统
  • SPIN、VIBE 等 3D Human Pose Estimation 方法中的弱透视投影 (Weak Perspective Projection)

    弱透视投影 Weak Perspective Projection 弱透视投影假设焦距与物距足够大 xff0c 此时物体在 z z z 轴 光轴 上的变化可以忽略 SPIN VIBE 等 3D Human Pose Estimation 方
  • Nvidia Jetson Xavier NX系统从emmc到内存卡

    1 一块EMMC版本的JETSON XAVIER NX xff0c 搭配冬虫电子NCB00载板 由于板载的emmc只有16G xff0c 载板上支持SD卡 xff0c 在载板上插一个128G的内存卡来扩充以下容量 2 使用NVIDIA的SD
  • C#与STM32自定义通信协议

    功能 可通过C 上位机与STM32下位机之间进行通信可以保证接收的数据的正确性 一 C 作为上位机实现代码 using System using System Collections Generic using System IO Port
  • UCOSIII的基础知识讲解

    功能 帮助初学者初识UCOSIII掌握UCOSIII的基本知识 xff0c 具体包括任务的创建与删除 任务的挂起与恢复 软件定时器 信号量和互斥信号量 消息的传递等 一 简介 C OS II由Micrium公司提供 xff0c 是一个可移植
  • J-001 Jetson硬件电路设计概论--NANO & XAVIER NX

    Jetson硬件设计概论 1 Jetson板卡简介2 Jetson产品组合3 模组对比4 电路分析4 1 电源设计4 1 1 原理图设计4 1 2 引脚描述4 1 3 电源框图4 1 4 上电时序 4 2 USB设计4 2 1 USB 2
  • J-002 Jetson电路设计之电源设计--NANO && XAVIER NX

    Jetson电源设计 1 电源说明1 1 电源和系统引脚描述1 2 电源控制框图详情 2 上电的时许2 1 框图分析2 2 上电时序 3 GND引脚 1 电源说明 Jetson NANO和XAVIER NX核心板的电源为DC 5V 1 1
  • J-004 Jetson电路设计之HDMI设计--NANO && XAVIER NX

    HDMI电路设计 1 简介2 框图介绍3 原理图介绍 1 简介 NANO amp XAVIER NX提供一路HDMI接口 xff0c DP接口与HDMI是兼容的 xff0c 可用于扩展一路HDMI 其中引脚说明 PIN名称描述方向类型63H
  • 树莓派入坑第一天——系统烧录以及SSH登录问题

    1 首先下载镜像https www raspberrypi org downloads xff0c Raspbian系统是树莓派官方推荐的系统 xff0c 解压出img镜像文件 注意树莓派3B可能不支持老版本镜像 2 下载一个格式化SD卡的
  • c++学习之路

    3 19 内存分区模型 内存四区意义 不同区域存放的数据 xff0c 赋予不同的生命周期 给我们更大的灵活编程 程序exe 运行前分为 代码区和全局区 xff1b 运行后分为 栈区和堆区 1 代码区 存放CPU执行的机器指令 存放函数体的二
  • 写程序的步骤

    xff08 1 xff09 xff1a 一 要把实际问题提取为数学问题 相当于数学中的建模 抽象问题具体化 二 把其分解为若干个小的函数 并明白每个小函数怎样实现其功能 同时注意功能函数与主函数间的数据交互问题 三 作出 流程图 xff0c
  • Conda_安装库失败:Collecting package metadata (current_repodata.json): failed

    具体原因 xff1a update repo信息时网络有问题 于是就出现了污染 解决方法 xff1a conda clean i 然后重新随便install一个库 会重新下载repo信息 xff0c 问题解决
  • scrapy爬虫实战——抓取NBA吧的内容

    scrapy爬虫 步骤1 进入虚拟环境2 测试爬取页面3 进入开发者模式4 剥离页面中的数据5 在pycharm中码代码scrapy框架的目录 xff08 之前创建虚拟环境自动搭建 xff09 nba py源码详解 6 Debug第一步 点
  • ubuntu系统版本查询命令方法

    目录 一 使用命令 xff1a cat proc version 查看 二 使用命令 xff1a uname a 查看 三 使用命令 xff1a lsb release a 查看 四 使用命令 xff1a hostnamectl 查看 五
  • python解析xml文件(解析、更新、写入)

    Overview 这篇博客内容将包括对XML文件的解析 追加新元素后写入到XML xff0c 以及更新原XML文件中某结点的值 使用的是python的xml dom minidom包 xff0c 详情可见其官方文档 xff1a xml do
  • 一阶微分方程

    传送门https jingyan baidu com article 8065f87fb7f0652331249822 html 1 可分离变量的微分方程解法 一般形式 g y dy 61 f x dx 直接解得 g y dy 61 f x
  • C#多线程--信号量(Semaphore)

    Semaphore 是负责协调各个线程 以保证它们能够正确 合理的使用公共资源 也是操作系统中用于控制进程同步互斥的量 Semaphore常用的方法有两个WaitOne 和Release xff0c Release 的作用是退出信号量并返回
  • 【总结】C++工程师学习路线|推荐视频|推荐书籍

    前言 由于博主秋招拿到的offer有限 xff0c 经过对比 xff0c 决定转到C 43 43 开发技术栈 xff0c 此篇文章用于规划自己今后的成长路线并分享给大家 学习路线 C 43 43 语言本身 xff1a 我们可以将这个部分分为
  • 面试被问到的promise总结

    promise all的使用 promise all可以将多个promise实例包装成一个新的promise实例 xff0c 并且返回的值也不相同 xff0c 成功使 xff0c promise返回的值是一个结果数组 xff0c 而失败的话
  • ROS节点,消息,话题,服务的介绍

    整理结合机器人操作系统 xff08 ros xff09 浅析和网址http wiki ros org cn NODE node几乎是无处不在 xff0c 这个东西相当于可执行文件 xff0c 目前我更愿意把它当做cpp文件 xff0c 通过