zoukankan      html  css  js  c++  java
  • ROS Learning-009 beginner_Tutorials ROS服务 和 ROS参数

    ROS Indigo beginner_Tutorials-08 ROS服务 和 ROS参数

    我使用的虚拟机软件:VMware Workstation 11
    使用的Ubuntu系统:Ubuntu 14.04.4 LTS
    ROS 版本:ROS Indigo

    1. 理解 ROS 服务 和 ROS 参数:

    服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response
    ( 节点之间通讯的方式 : 话题(rostopic) 和 服务(rosservice) )

    我们先来启动一个小海龟节点: ( 开3个终端分别运行下面三个命令 )

    $ roscore
    $ rosrun turtlesim turtlesim_node
    $ rosrun turtlesim turtle_teleop_key

    2. rosservice : ROS 服务命令

    2.1 list :

    我们使用下面的命令来看一下当前有哪些服务在运行: (重新开一个终端(Ctrl+Alt+T))

    $ 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
    

    这里写图片描述

    如果你没事先执行 roscore 命令来启动 /rosout 主节点,那么当你执行 rosservice list 命令,会输出下面的提示信息:

    ERROR: Unable to communicate with master!

    你需要先执行 roscore 命令。


    2.2 type :

    很多服务在运行:我们来看看 /clear 这个服务的类型:

    $ rosservice type /clear 

    输出:

    std_srvs/Empty

    这里写图片描述

    服务的类型为空(std_srvs/Empty)。这个std_srvs/Empty是ROS系统自定义的一个变量类型或者说是一个结构体。我们如何查看这个std_srvs/Empty内究竟是什么:

    $ rosmsg show std_msgs/Empty 

    这里写图片描述

    std_srvs/Empty 这个变量类型里面什么都没有,表示你在调用 /clear 服务时,不需要参数。 什么意思呢,下面举个例子:


    2.3 call :

    第一个例子: 清空小海龟窗口背景里的运行轨迹:

    我们使用rosservice call 命令来调用服务:

    $ rosservice call [服务名] [需要的参数] 

    我们来调用上面的/clear这个服务:(因为 /clear 这个服务的类型是 std_srvs/Empty (空),所以对于 /clear 这个服务,不需要参数)

    $ rosservice call /clear 

    调用之后,回去看一看小海龟窗口的背景里的运行轨迹都没有了。 (如果你之前使用方向键让小海龟移动过。)

    再来一个例子:再生一个小海龟

    我们来看看再生(/spawn)这个服务:
    先看看调用这个服务需要什么参数:。执行下面的组合命令:

    $ rosservice type  /spawn | rossrv show 

    输出:

    float32 x
    float32 y
    float32 theta
    string name
    ---
    string name

    这里写图片描述

    现在知道调用 /spawn 服务需要什么参数,我们就来再产生一个小海龟: (如果你将 nane 设为""(空),那么系统会自动生成一个新名字)

    $ rosservice call /spawn 2 2 0.2 "" 

    这时,服务返回了新产生的乌龟的名字(“turtle2”)。 新产生的乌龟,如下图:

    这里写图片描述

    这里写图片描述


    3. rosparam : ROS 参数命令 :

    下面再介绍一个命令:rosparam 参数服务器
    使用方法和上面的命令(rosservice)都类似:

    3.1 list :

    先来看一下,当前 ROS 里面有哪些参数 :

    $ rosparam list 

    这里写图片描述

    3.2 setget :

    3.2.1 set

    $ rosparam set [参数名]
    $ rosparam get [参数名]

    如何使用,举例说明:

    比如现在我改变小海龟窗口背景的颜色:

    $ rosparam set /background_r 150 

    现在还是小海龟窗口的背景颜色不会改变的, 你必须要先 clear 一下:

    $ rosservice call /clear 

    这里写图片描述

    3.2.2 get

    我们使用get关键字 来得到当前参数的信息:

    $ rosparam get /background_r

    这里写图片描述

    得到全部参数的信息:

    $ rosparam get / 

    这里写图片描述



    小结:
    因为一个ROS机器人的启动,等同于要启动多个节点程序。也就是说,我们每次想使用键盘的方向键控制小海龟时,我们必须在3个终端中启动3个节点:

    $ roscore
    $ rosrun turtlesim turtlesim_node
    $ rosrun turtlesim turtle_teleop_key

    这样做很麻烦,我们可不可以写一个脚本程序,将我们要运行的命令都写在一个启动脚本程序中,这样,每当我们想启动一个机器人的时候,就不需要记住一堆启动节点的命令,我们直接运行这个启动脚本程序,就可以了。所以我们下一节讲: 如何编写一个简单的启动脚本程序

  • 相关阅读:
    关于异常处理解决
    多态
    类的继承和接口
    关于数组的应用知识
    String类型的字符串的知识点
    关于类的一些思想
    一些小程序的代码
    关于Java的一些基础了解
    将string类型的数字参数求和的小程序
    【【洛谷P2678 跳石头】——%%%ShawnZhou大佬】
  • 原文地址:https://www.cnblogs.com/aobosir/p/5928583.html
Copyright © 2011-2022 走看看