ROS学习之四:ROS话题与ROS消息
运行turlesim
运行roscore(roscore) → 运行turtlesim(rosrun turtlesim turtlesim_node) → 通过键盘控制turtle(rosrun turtlesim turtle_teleop_key)
话题
turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来相互通信的,turtle_teleop_key在话题上发布按键按下的消息,turtlesim则订阅该话题以接收消息
通过运行rqt_graph可以查看节点与话题的示意图,命令如下:
rosrun rqt_graph rqt_graph
图中椭圆形中间为节点名称,箭头横线上为话题名称。
若要查看话题上发布的数据,可使用命令:
rostopic echo [topic]
如查看由turtle_teleop_key节点发布的数据则使用命令:
rostopic echo /turtle1/cmd_vel
通过左上角的刷新按钮刷新rgq-gtaph,可以看到rostopic echo也订阅了/turle1/command_velocity话题。
使用命令:
rostopic list
可以列出当前已被订阅和发布的所有话题,在命令后添加参数-v则可列出所有发布和订阅的主题及其类型的详细信息
消息
话题的通信是通过节点间发送ROS消息实现的,为了使发布者和订阅者进行通信,发布者和订阅者必须发送和接收相同类型的消息,这意味着话题的类型是由发布在其上的消息类型决定的
使用命令:
rostopic type [topic]
可以查看所发布话题的消息类型。
如查看/turtle1/cmd_vel话题的消息类型则使用命令:
rostopic type /turtle1/cmd_vel
而使用rosmsg命令可以查看消息的详细信息:
rosmsg show geometry_msgs/Twist
其中,geometry_msgs/Twist为rostopic type命令的查询结果。
通过rostopic pub命令可以把数据发布到但前某个正在广播的话题上:
rostopic pub [topic] [msg_type] [args]
如命令:
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
将消息发送给turtlesim,使其以2.0的线速度和1.8的角速度移动
命令解析:
todtopic | pub | -1 | /turtle1/cmd_vel | geomtry_msgs/Twist | -- | '[2.0, 0.0, 0.0]' | '[0.0, 0.0, 1.8]' |
将消息发布到指定的话题 | 只发布一条消息然后退出 | 要发布到的话题的名称 | 发布话题时要使用的消息类型 | 表明之后的参数都不是选项 | linear值 | angular值 |
而将参数-1变为-r 1则可实现以1Hz的频率不断发布消息
基础命令
rostopic | echo [topic] | 显示在某个话题上发布的数据 |
list [topic] | 列出当前已被订阅和发布的所有话题 | |
list -v | 列出所有发布和订阅的主题及其类型的详细信息 | |
type [topic] | 查看所发布话题的消息类型 | |
pub [topic] [msg_type] [args] | 把数据发布到当前某个正在广播的话题上 | |
hz [topic] | 报告数据发布的速率 | |
rosmsg | show | 查看消息的详细信息 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)