ROS学习笔记(七)

ROS系统试用练习(二)

上一个博客里说了,ROS的系统导览、创建工作空间、创建ROS功能包和ROS综合功能包和编译ROS功能包

使用ROS节点

节点都是可执行程序,这些可执行文件位于开发空间中(devel)
如果使用apt-get 安装ROS ,那么已经有turtlesim,如果还没有,可以使用:
sudo apt-get install ros-indigo-ros-tutorials
当然如果你不确定自己是否安装了turtlesim的话,可以使用:
rospack find turtlesim
如果安装过,你将看到:
/opt/ros/indigo/share/turtlesim
在开始之前,必须使用roscore命令来启动
为了获得节点信息,可以使用rosnode工具。
你将看到

rosnode is a command-line tool for printing information about ROS Nodes.

Commands:
    rosnode ping    test connectivity to node
    rosnode list    list active nodes   #查看正在运行的节点信息
    rosnode info    print information about node  #查看详细信息
    rosnode machine list nodes running on a particular machine or list machines
    rosnode kill    kill a running node
    rosnode cleanup purge registration information of unreachable nodes

Type rosnode <command> -h for more detailed usage, e.g. 'rosnode ping -h'

此时如果使用rosnode list 命令 ,你将会看到:
/rosout
这是很正常的,因为这个节点总是随着roscore运行的,
现在我们要使用rosrun命令来启动一个新的节点
rosrun [package_name] [node_name]
rosrun turtlesim turtlesim_node
看到小乌龟了吗?
这里写图片描述
这时候再去查看节点列表,会看到出现一个新的节点

$ rosnode list             #有两个节点在运行
/rosout
/turtlesim

查看信息

rosnode info /turtlesim
--------------------------------------------------------------------------------
Node [/turtlesim]
Publications: 
 * /turtle1/color_sensor [turtlesim/Color]
 * /rosout [rosgraph_msgs/Log]
 * /turtle1/pose [turtlesim/Pose]

Subscriptions: 
 * /turtle1/cmd_vel [unknown type]

Services: 
 * /turtle1/teleport_absolute
 * /turtlesim/get_loggers
 * /turtlesim/set_logger_level
 * /reset
 * /spawn
 * /clear
 * /turtle1/set_pen
 * /turtle1/teleport_relative
 * /kill


contacting node http://127.0.0.1:40682/ ...
Pid: 27629
Connections:
 * topic: /rosout
    * to: /rosout
    * direction: outbound
    * transport: TCPROS

可以看到,Publications、Subscriptions、Services及他们各自唯一的名称
rqt_graph能够创建一个显示当前系统运行情况的动态图形。rqt_graph是rqt程序包中的一部分。如果你没有安装,请通过以下命令来安装:

$ sudo apt-get install ros-indigo-rqt
$ sudo apt-get install ros-indigo-rqt-common-plugins
#运行rqt_graph
rosrun rqt_graph rqt_graph       #运行rqt_graph包下面的rqt_graph节点
![这里写图片描述](https://img-blog.csdn.net/20171130155108686?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRkxPUklEQV90YW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
如果你将鼠标放在/turtle1/cdm_vel上方,相应的ROS节点(蓝色和绿色)和话题(红色)就会高亮显示。正如你所看到的,turtlesim_node和turtle_teleop_key()节点正通过一个名为 /turtle1/command_velocity的话题来互相通信。 

## 如何使用主题于节点交互 ##
要进行交互并获得主题的信息,可以使用rostopic工具,此工具接受以下参数:

rostopic bw display bandwidth used by topic
rostopic delay display delay for topic which has header
rostopic echo print messages to screen #把消息输出到屏幕山
rostopic find find topics by type #按照类型查找
rostopic hz display publishing rate of topic #显示主题的发布频率
rostopic info print information about active topic #列出活动主题的信息
rostopic list print information about active topics #列出活动主题
rostopic pub publish data to topic #将数据发布到主题
rostopic type print topic type #输出主题的类型

如果想要查看这些参数的详细信息,可以使用rostopic bw -h
移动小海龟
rosrun turtlesim turtle_teleop_key
![这里写图片描述](https://img-blog.csdn.net/20171130150610507?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRkxPUklEQV90YW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这时候再去查看节点

rosnodelist/rosout/teleopturtle/turtlesim rostopic list
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

通过echo可以查看节点发出的信息,运行rostopic echo /turtle1/cmd_vel 并使用箭头查看消息产生时发送了哪些数据。

$ rostopic echo /turtle1/cmd_vel
linear:
x: -2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
当查看完消息后,再去看rqt_graph就会看到。
这里写图片描述
现在让我们再看一下rqt_graph(你可能需要刷新一下ROS graph)。正如你所看到的,rostopic echo现在也订阅了turtle1/cmd_vel话题。
这时候相当于在功能包turtkesim下面的turtlesim节点订阅了来自teleop_turtle功能包下面的teleop_turtle节点的turtle1/cmd_vel话题,同样,rostoipic echo 节点也订阅了turtle/cmd_vel话题。

  • 查看主题发送的消息类型
    话题之间的通信是通过在节点之间发送ROS消息实现的。对于发布器(turtle_teleop_key)和订阅器(turtulesim_node)之间的通信,发布器和订阅器之间必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面的消息类型决定的。使用rostopic type命令可以查看发布在某个话题上的消息类型。
$ 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

现在我们已经知道了turtlesim节点所期望的消息类型,接下来我们就可以给turtle发布命令了。这个指令非常有用,因为我们可以通过这些工具使用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大小的角速度开始移动。
这里写图片描述
这是一个非常复杂的例子,因此让我们来详细分析一下其中的每一个参数。
rostopic pub
这条命令将会发布消息到某个给定的话题。
-1
(单个破折号)这个参数选项使rostopic发布一条消息后马上退出。
/turtle1/cmd_vel
这是消息所发布到的话题名称。
geometry_msgs/Twist
这是所发布消息的类型
--
(双破折号)这会告诉命令选项解析器接下来的参数部分都不是命令选项。这在参数里面包含有破折号-(比如负号)时是必须要添加的。
2.0 1.8
正如之前提到的,在一个turtlesim/Velocity消息里面包含有两个浮点型元素:linear和angular。在本例中,2.0是linear的值,1.8是angular的值。
你可能已经注意到turtle已经停止移动了。这是因为turtle需要一个稳定的频率为1Hz的命令流来保持移动状态。我们可以使用rostopic pub -r命令来发布一个稳定的命令流:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

这条命令以1Hz的频率发布速度命令到速度话题上。
这里写图片描述
小乌龟自己转圈了
这时候我们再来刷新一下rqt_graph
这里写图片描述
可以看到rostopic发布器节点(左下)正在与rostopic echo节点(右上)进行通信
rostopic hz命令可以用来查看数据发布的频率。
用法:
rostopic hz [topic]
我们看一下turtlesim_node发布/turtle/pose时有多快:

  • 使用 rqt_plot

参考资料:
http://wiki.ros.org/cn/ROS/Tutorials/UnderstandingTopics

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值