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 查看消息的详细信息
posted @ 2021-04-29 11:18  溪嘉嘉  阅读(1608)  评论(0编辑  收藏  举报