ROS_tutorial03:ROS_Node_Topic_Message

ROS NODE

首先运行 roscore ,同时只能存在同一个 roscore 。如果出现无法连接的情况,在 /opt/ros/kinetic/setup.bash 文件的最后加上以下两行:

export ROS_HOSTNAME=localhost

export ROS_MASTER_URI=http://localhost:11311

 

然后起一个节点:

rosrun turtlesim turtlesim_node 

 

通过 rosnode list 来查看当前有哪些节点:

1 $ rosnode list
2 /rosout
3 /turtlesim

 

可以通过 rosnode info <node_name> 来查看节点信息,接收哪个topic的消息以及发送消息到哪个topic

 1 #运行
 2 $ rosnode info turtlesim
 3 #结果
 4 --------------------------------------------------------------------------------
 5 Node [/turtlesim]
 6 Publications: 
 7  * /rosout [rosgraph_msgs/Log]
 8  * /turtle1/color_sensor [turtlesim/Color]
 9  * /turtle1/pose [turtlesim/Pose]
10 
11 Subscriptions: 
12  * /turtle1/cmd_vel [unknown type]
13 
14 Services: 
15  * /clear
16  * /kill
17  * /reset
18  * /spawn
19  * /turtle1/set_pen
20  * /turtle1/teleport_absolute
21  * /turtle1/teleport_relative
22  * /turtlesim/get_loggers
23  * /turtlesim/set_logger_level
24 
25 
26 contacting node http://localhost:39870/ ...
27 Pid: 22730
28 Connections:
29  * topic: /rosout
30     * to: /rosout
31     * direction: outbound
32     * transport: TCPROS

 

再起一个节点 turtle keyboard teleoperation :

1 #运行
2 qmark@qmark:~/ROS_TRAIN/Test/catkin_ws$ rosrun turtlesim turtle_teleop_key 
3 #结果
4 Reading from keyboard
5 ---------------------------
6 Use arrow keys to move the turtle.

 

 

 ROS TOPIC

 可以通过rqt 的GUI界面来查看当前节点之间的通讯:

$ rosrun rqt_graph rqt_graph 

 在界面中可以很清楚的看到各个节点通过topic来进行通讯。

一个node发送msg到它publish的topic中,另一个subscribe这个topic的node接收msg

 

可以看到, /teleop_turtle 通过 /turtle1/cmd_vel 这个topic来给 /turtlesim 发送消息。

rostopic的命令:

rostopic bw     display bandwidth used by topic
rostopic echo   print messages to screen
rostopic hz     display publishing rate of topic    
rostopic list   print information about active topics
rostopic pub    publish data to topic
rostopic type   print topic type

想要看 /turtle1/cmd_vel 所接收及发送的消息,可以通过 rostopic echo <topic_name> 来查看。

运行之后,通过rqt可以看到,其实echo 的作用就是增加一个订阅 /turtle1/cmd_vel 的节点,并把节点接收到的信息显示出来。

可以通过以下命令来查看有哪些topic及其有几个订阅、发布节点:

#运行
$ rostopic list -v
#结果
Published topics:
 * /turtle1/color_sensor [turtlesim/Color] 1 publisher
 * /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
 * /rosout [rosgraph_msgs/Log] 3 publishers
 * /rosout_agg [rosgraph_msgs/Log] 1 publisher
 * /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
 * /turtle1/cmd_vel [geometry_msgs/Twist] 2 subscribers
 * /rosout [rosgraph_msgs/Log] 1 subscriber

 

 

ROS MESSAGE

通过 rostopic type <topic_name> 来查看一个topic发动的message,这个命令得到的是message的名称,之后就可以通过 rosmsg <options> <msg_name> 来对这个消息进行操作。

#运行
$ rostopic type /turtle1/cmd_vel 
#结果
geometry_msgs/Twist

#运行
$ rosmsg show geometry_msgs/Twist
#结果
geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

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]'
rostopic pub    #命令
 -1     #发布1次消息,-r 1 是一直发布
/turtle1/cmd_vel    #接收消息的topic
geometry_msgs/Twist    #上面 rostopic type 得到的消息名
--    #none of the following arguments is an option
'[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'      #发布的消息,具体格式看rosmsg show得到的消息格式

 运行后通过rqt查看各个节点之间的通信关系:

通过rqt可以看到:rostopic pub  的作用就是增加一个发布消息到 /turtle1/cmd_vel 的节点

 

rqt_plot

$ rosrun rqt_plot rqt_plot

作图界面,可以输入的信息是 /topic/msgtype 

例如,想要查看 /turtle1/pose 这个节点的信息作图,

#运行
$ rostopic type /turtle1/pose 
#结果
turtlesim/Pose

#运行
$ rosmsg show turtlesim/Pose 
#结果
float32 x
float32 y
float32 theta
float32 linear_velocity
float32 angular_velocity

接下来打开界面: rosrun rqt_plot rqt_plot 

在左上角的topic框内输入

/turtle1/pose/x
/turtle1/pose/y
/turtle1/pose/theta
/turtle1/pose/linear_velocity
/turtle1/pose/angular_velocity

即topic的名称加上上面 rosmsg show 得到的消息类型。

也可以输入 /turtle1/pose 会有下拉选项。

 

posted @ 2019-10-30 23:18  QMark  阅读(292)  评论(0编辑  收藏  举报