首页 > 代码库 > 初级教程二:基本概念及其指令(适合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消息里面包含有两个浮点型元素:linear和angular。在本例中,2.0是linear的值,1.8是angular的值。这些参数其实是按照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及以上版本)