首页 > 代码库 > 初级教程二:基本概念及其指令(适合hydro及以上版本)

初级教程二:基本概念及其指令(适合hydro及以上版本)

  • Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。

  • Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。

  • Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。

  • Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。

  • rosout: ROS中相当于stdout/stderr。

  • roscore: 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。

一.命令行工具(roscore,rosnode,rosrun)

1.roscore是运行所有ROS程序前首先要运行的命令。

2.rosnode是显示当当前运行的ROS节点信息。

  rosnode list指令列出了活跃的节点,可在终端输出rosnode便可出现帮助文档。

3.rosrun是使用包名直接运行一个包内的节点(不需要知道这个包的路径)

$ rosrun [package_name] [node_name]例如:$ rosrun turtlesim turtlesim_node

二.理解ros话题(rostopic,rosmsg)

#下面一条指令对应开启一个终端

$ roscore

$ rosrun turtlesim turtlesim_node

$ rosrun turtlesim turtle_teleop_key  #通过键盘来控制turtle的运动

#turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来互相通信的。turtle_teleop_key在一个话题上发布按键输入消息,

turtlesim订阅该话题以接收该消息。下面让我们使用rqt_graph来显示当前运行的节点和话题。

#rqt_graph能够创建一个显示当前系统运行情况的动态图形。rqt_graph是rqt程序包中的一部分。如果你没有安装,请通过以下命令来安装:

$ sudo apt-get install ros-<distro>-rqt
$ sudo apt-get install ros-<distro>-rqt-common-plugins
#请使用你的ROS版本名称(比如fuerte、groovy、hydro等)来替换掉<distro>。

$ rosrun rqt_graph rqt_graph  #会出现一个图形,相应的ROS节点为绿色和蓝色,话题为红色。

$ rostopic echo /turtle1/cmd_vel  
#你可能看不到任何东西因为现在还没有数据发布到该话题上。接下来我们通过按下方向键使turtle_teleop_key节点发布数据。
记住如果turtle没有动起来的话就需要你重新选中turtle_teleop_key节点运行时所在的终端窗口。

$ rostopic list -v #这会显示出有关所发布和订阅的话题及其类型的详细信息。

#rostopic type [topic]#rostopic type 命令用来查看所发布话题的消息类型。

$ rostopic type /turtle1/cmd_vel
$ rosmsg show geometry_msgs/Twist #我们可以使用rosmsg命令来查看消息的详细情况

$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- ‘[2.0, 0.0, 0.0]‘ ‘[0.0, 0.0, 1.8]‘
#rostopic pub这条命令将会发布消息到某个给定的话题。 
#-1(单个破折号)这个参数选项使rostopic发布一条消息后马上退出。
#/turtle1/command_velocity这是消息所发布到的话题名称
#
turtlesim/Velocity这是所发布消息的类型。
#
--(双破折号)这会告诉命令选项解析器接下来的参数部分都不是命令选项。这在参数里面包含有破折号-(比如负号)时是必须要添加的。
#2.0 1.8正如之前提到的,在一个turtlesim/Velocity消息里面包含有两个浮点型元素:linearangular。在本例中,2.0linear的值,1.8angular的值。这些参数其实是按照YAML语法格式编写的,这在YAML文档中有更多的描述。
你可能已经注意到turtle已经停止移动了。这是因为turtle需要一个稳定的频率为1Hz的命令流来保持移动状态。我们可以使用rostopic pub -r命令来发布一个稳定的命令流
(非hydro版): $ rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0 -1.8 
hydro版:   $ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- ‘[2.0, 0.0, 0.0]‘ ‘[0.0, 0.0, 1.8]‘
$ rosrun rqt_plot rqt_plot
#rqt_plot命令可以实时显示一个发布到某个话题上的数据变化图形。这里我们将使用rqt_plot命令来绘制正在发布到/turtle1/pose话题上的数据变化图形。首先,在一个新终端中运行rqt_plot命令:

三.Ros服务和参数(rosservice,rosparam,roslaunch)

参考:http://wiki.ros.org/cn/ROS/Tutorials/UnderstandingServicesParamsrosservice list 输出可用服务的信息

rosservice call 调用带参数的服务

rosservice type 输出服务类型

rosservice find 依据类型寻找服务find services by service type

rosservice uri 输出服务的ROSRPC uri

$ rosservice list
/clear 清除
/kill  
/reset 重置
/rosout/get_loggers
/rosout/set_logger_level
/spawn 再生
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level

 

  rosparam使得我们能够存储并操作ROS 参数服务器(Parameter Server)上的数据。参数服务器能够存储整型、浮点、布尔、字符串、字典和列表等数据类型。rosparam使用YAML标记语言的语法。一般而言,YAML的表述很自然:1 是整型, 1.0 是浮点型, one是字符串, true是布尔, [1, 2, 3]是整型列表, {a: b, c: d}是字典. rosparam有很多指令可以用来操作参数,如下所示:

rosparam set            设置参数
rosparam get            获取参数
rosparam load           从文件读取参数
rosparam dump           向文件中写入参数
rosparam delete         删除参数
rosparam list           列出参数名

roslaunch 可同时运行多个节点
如:在home/catkin_ws/src/beginner_toturials下新建一个文件叫launch,
在这文件夹里新建一个文件turtlemimic.launch,并复制以下内容到其中(注:应删除中文,那些只是一个代码的解释)


<launch>  以launch开头表明这是一个launch文件

   在这里我们创建了两个节点分组并以‘命名空间(namespace)‘标签来区分,其中一个名为turtulesim1,另一个名为turtlesim2,两个组里面都使用相同的turtlesim节点并命名为‘sim‘。这样可以
让我们同时启动两个turtlesim模拟器而不会产生命名冲突。
 <group ns="turtlesim1">
   <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
 </group>

 <group ns="turtlesim2">
   <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
 </group>


在这里我们启动模仿节点,并将所有话题的输入和输出分别重命名为turtlesim1和turtlesim2,这样就会使turtlesim2模仿turtlesim1。
 <node pkg="turtlesim" name="mimic" type="mimic">
   <remap from="input" to="turtlesim1/turtle1"/>
   <remap from="output" to="turtlesim2/turtle1"/>
 </node>

</launch> launch文件的结束标签

打开终端,并到beginner_toturials文件下
$roslaunch turtlemimic.launch

#再新建一个终端
$rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- ‘[2.0, 0.0, 0.0]‘ ‘[0.0, 0.0, -1.8]‘

$rqt_graph #这是时候就可以看到关于运行的i相关信息




 

初级教程二:基本概念及其指令(适合hydro及以上版本)