zoukankan      html  css  js  c++  java
  • ros之参数的使用与编程方法

    参数模型

    ROS Master 

    (Parameter Server)

    /robot_name: "my_robot"        ----{Node A   Node B}

    /robot_radius:0.4                          ----{Node C}

    /robot_height :0.5                        ----{Node D}

    参数服务器 Parameter Server  用于保存各个节点之间的数据参数

    因此我们可以将Parameter Server理解为全局变量存储空间,只要在同一ros环境里面都可以通过参数服务器发送请求去查询相关的参数。

    参数命令行使用(以小海龟为例)

    YAML参数文件 (多参数文件)
    background_b : 255
    background_b : 86
    background_b : 69 
    rosdistro : 'melodic'
    roslaunch:
       uris: {host_hcx_vpc__43763: 'http://hcx-vpc :43763/'}
    rosversion :'1.14.3'
    run_id: 07708de-a38b-11e9-818b-000c29d22e4d
    

     rosparam

    *列出当前多个参数

    $ rosparam list

    *显示某个参数值

    $ rosparam get param_key

    *设置某个参数值

    $ rosparam set param_key param_value

    *保存参数到文件

    $ rosparam dump fole_name

    *从文件中读取参数

    $ rosparam load file_name

    *删除参数

    $ rosparam detele param_key

    以下以小海龟案例为例

    显示小海龟运行中的参数列表

    qqtsj � ~ � rosparam list
    /background_b
    /background_g
    /background_r
    /rosdistro
    /roslaunch/uris/host_qqtsj_nitro_an515_51__43045
    /rosversion
    /run_id
    

     显示小海龟中参数的值

    qqtsj � ~ � rosparam get /background_r
    69
    qqtsj � ~ � rosparam get /background_g
    86
    qqtsj � ~ � rosparam get /background_b
    255
    

     设置某个参数的值

     qqtsj � ~ � rosparam set /background_b 255
     qqtsj � ~ � rosparam set /background_r 255
     qqtsj � ~ � rosparam set /background_g 255
     qqtsj � ~ � rosparam get /background_b 
    255
     qqtsj � ~ � rosparam get /background_g
    255
     qqtsj � ~ � rosservice call /clear "{}"
    

     通过设置参数的值去改变小海龟的运动背景颜色

    命令为:rosservice call /clear "{}"

    通过发送一个空的请求去刷新新设置参数的值,从而改变小海龟。

    *保存参数到文件中

    将参数保存到YAML参数文件中,如下

    $ rosparaam dump param.yaml

    我这里的路径为主目录路径的param.yaml文件中 

    *从文件中读取参数

    首先在参数文件中修改参数的值,保存在文件中。

    用以下命令从文件读取参数 $ rosparam load param.yaml

    *删除参数

    $ rosparam delete param_key

     qqtsj � ~ � rosparam delete /background_b
     qqtsj � ~ � rosparam list 
    /background_r
    /rosdistro
    /roslaunch/uris/host_qqtsj_nitro_an515_51__43045
    /rosversion
    /run_id
    

    接下来用程序去实现参数的使用和编程

    首先创建一个功能包

    $ cd ~/catkin_ws/src

    $ catkin_create_pkg learning_parameter roscpp rospy std_srvs

     通过(c++)去实现 

    如何获取/设置参数

    *初始化ros节点

    *get函数获取参数

    *set函数设置参数

    程序如下

     1 /**
     2  * 该例程设置/读取海龟例程中的参数
     3  */
     4 #include <string>
     5 #include <ros/ros.h>
     6 #include <std_srvs/Empty.h>
     7 
     8 int main(int argc, char **argv)
     9 {
    10     int red, green, blue;
    11 
    12     // ROS节点初始化
    13     ros::init(argc, argv, "parameter_config");
    14 
    15     // 创建节点句柄
    16     ros::NodeHandle node;
    17 
    18     // 读取背景颜色参数
    19     ros::param::get("/background_r", red);
    20     ros::param::get("/background_g", green);
    21     ros::param::get("/background_b", blue);
    22                                                                                                              
    23     ROS_INFO("Get Backgroud Color[%d, %d, %d]", red, green, blue);
    24 
    25     // 设置背景颜色参数
    26     ros::param::set("/background_r", 255);
    27     ros::param::set("/background_g", 255);
    28     ros::param::set("/background_b", 255);
    29 
    30     ROS_INFO("Set Backgroud Color[255, 255, 255]");
    31 
    32     // 读取背景颜色参数
    33     ros::param::get("/background_r", red);
    34     ros::param::get("/background_g", green);
    35     ros::param::get("/background_b", blue);
    36 
    37     ROS_INFO("Re-get Backgroud Color[%d, %d, %d]", red, green, blue);
    38 
    39     // 调用服务,刷新背景颜色
    40     ros::service::waitForService("/clear");
    41     ros::ServiceClient clear_background = node.serviceClient<std_srvs::Empty>("/clear");
    42     std_srvs::Empty srv;
    43     clear_background.call(srv);
    44     
    45     sleep(1);
    46 
    47     return 0;
    48 }                             
    

     编译命令如下

    $ cd ~/catkin_ws

    $ catkin_make

    $ source devel/setup.bash

    $ roscore

    $ rosrun turtlesim turtlesim_node

    $ rosrun learning_parameter parameter_config

    以(python)程序如下

     1 #!/usr/bin/env python                                                                                        
     2 # -*- coding: utf-8 -*-
     3 # 该例程设置/读取海龟例程中的参数
     4 
     5 import sys
     6 import rospy
     7 from std_srvs.srv import Empty
     8 
     9 def parameter_config():
    10         # ROS节点初始化
    11     rospy.init_node('parameter_config', anonymous=True)
    12 
    13         # 读取背景颜色参数
    14     red   = rospy.get_param('/background_r')
    15     green = rospy.get_param('/background_g')
    16     blue  = rospy.get_param('/background_b')
    17 
    18     rospy.loginfo("Get Backgroud Color[%d, %d, %d]", red, green, blue)
    19 
    20         # 设置背景颜色参数
    21     rospy.set_param("/background_r", 255);
    22     rospy.set_param("/background_g", 255);
    23     rospy.set_param("/background_b", 255);
    24 
    25     rospy.loginfo("Set Backgroud Color[255, 255, 255]");
    26 
    27         # 读取背景颜色参数
    28     red   = rospy.get_param('/background_r')
    29     green = rospy.get_param('/background_g')
    30     blue  = rospy.get_param('/background_b')
    31 
    32     rospy.loginfo("Get Backgroud Color[%d, %d, %d]", red, green, blue)
    33 
    34         # 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
    35     rospy.wait_for_service('/clear')
    36     try:
    37         clear_background = rospy.ServiceProxy('/clear', Empty)
    38 
    39                 # 请求服务调用,输入请求数据
    40         response = clear_background()
    41         return response
    42     except rospy.ServiceException, e:
    43         print "Service call failed: %s"%e
    44 
    45 if __name__ == "__main__":
    46     parameter_config()       
    

     编译和c++ 一样

  • 相关阅读:
    visual studio 2010设置
    Win7 x64 PL/SQL 连接 Oralce 提示 Could not initialize "%ORACLE_HOME%\bin\oci.dll"
    jxl导入/导出excel
    struts2的action与jsp之间传递参数
    web服务器、容器和中间件
    myeclipse trial expired 注册码解决办法(可用于8.5)
    Java中的内部类
    JS的trim()方法
    struts2 <s:property>用法
    EL表达式的使用
  • 原文地址:https://www.cnblogs.com/tanshengjiang/p/12238929.html
Copyright © 2011-2022 走看看