使用以下命令开启两个节点
$roscore
# another terminal
$ rosrun turtlesim turtlesim_node
话题/Topic
ros的topic用于在不同节点之间传输数据,一个话题可以有发布者和订阅者,话题发布的内容为消息,消息具有特定的类型(类似c语言结构体)。
而服务是一个节点对外提供的一些操作/函数接口。
参数是节点提供的一些参数设置。
在turtle_sim这个例子中,话题是
$ rostopic list
/rosout # roscore topic
/rosout_agg
/turtle1/cmd_vel # turtle 的速度
/turtle1/color_sensor # 背景颜色
/turtle1/pose # turtle的位置
可以具体查看某个话题的信息:
$ rostopic info /turtle1/cmd_vel
Type: geometry_msgs/Twist
Publishers: None
Subscribers:
* /turtlesim (http://ZenPC:54275/)
消息
可以看到/turtle1/cmd_vel 这个话题有一个消息,查看一下这个消息的具体信息:
$ 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 [topic] [msg_type] [args]
$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[1.0, 0, 0]' '[0, 0, 1.0]'
$ rostopic echo /turtle1/pose # see turtle position
服务
获取当前的服务列表
$ rosservice list
/clear
/kill
...
$ rosservice info /clear
Node: /turtlesim
URI: rosrpc://ZenPC:55416
Type: std_srvs/Empty
Args:
$ rosservice call /clear "{}" # no arguments
参数
类似的
$ rosparam list
/background_b
/background_g
/background_r
/rosdistro
/roslaunch/uris/host_zenpc__54245
/rosversion
/run_id
$ rosparam set /background_b 100
$ rosservice call /clean "{}" # update window
可以看出来这四个在操作上十分类似。
网友评论