1.8参数的使用以及编程方式

ROS中的ParameterServer是一个全局字典,允许不同节点访问参数。通过rosparam命令,可以进行参数的查询、设置、保存和读取。此外,YAML文件常用于存储多个参数。文章还介绍了如何使用C++代码来读取和设置参数,并通过rosservice调用来更新海龟模拟器的背景色。
摘要由CSDN通过智能技术生成

1.8.1 全局字典

在ROS Master 里面有一个参数服务器Parameter Server,他是一个全局字典,各个节点都可以全局访问,各个节点可以在不同的PC里面,只要在同样的ROS环境里面都可以通过Parameter Server去查询全局字典的参数

1.8.2创建功能包

cd ~/catkin_ws/src
catkin_create_pkg learning_parameter roscpp rospy std_srvs

1.8.3 YAML参数文件

        当我们的参数较多时,我们将其放到YAML参数文件中,在用的时候可以一次性将其加载到Parameter Server中

1.8.4   rosparam

rosparam命令可以完成大部分的参数的查询、设置、保存到文件、读取文件等

⚫ 列出当前多有参数
$ rosparam list
⚫ 显示某个参数值
$ rosparam get param_key
⚫ 设置某个参数值
$ rosparam set param_key param_value
⚫ 保存参数到文件
$ rosparam dump file_name
⚫ 从文件读取参数
$ rosparam load file_name
⚫ 删除参数
$ rosparam delete param_key

1.8.5 rosparam 使用

我们利用小海龟来学习该部分内容,先运行节点管理器,再运行海龟仿真器,再在一个新的终端里输入rosparam,按回车便可以显示出他后面可以跟的参数

   (1)rosparam list可以查看当前所有参数

   (2)rosparam get 可以获取参数的值,后面跟rosparam list所显示出来的参数,如rosparam get /turtlesim/background_b

   (3)rosparam set可以重新设定参数的值,后面跟的第一个参数是参数的名字,第二个参数是新的值。如rosparam set /turtlesim/background_b 255 将/turtlesim/background_b 的值设定为255,这时可以运用rosparam get来查看现在/turtlesim/background_b的值是否变为了255,/turtlesim/background_b 、/turtlesim/background_r 、/turtlesim/background_g 这三个参数用来设定仿真器的背景色,但是经过上面的改动后,背景色并没有改变,因为仿真器还需要发送一个请求rosservice call /clear “{}” 它会去查询背景的rgb值有没有发生改变,若改变会刷新背景的颜色,如下所示

(4)rosparam dump命令可以将参数保存为文件,后面跟的参数是文件名如 rosparam dump param.yaml 默认路径会存放在主文件夹下

  

   (5)我们可以在以上的文件中对参数进行修改,保存后再利用rosparam load命令将其中的参数导入,后面跟的参数是文件名,如rosparam load param.yaml (同样需要运行rosservice call /clear “{}”背景色才会变)

   (6)rosparam delete命令可以删除某个参数,后面跟的是参数名,如rosparam delete /turtlesim/background_r

1.8.6 C++代码

/**

 * 该例程设置/读取海龟例程中的参数

 */

#include <string>
#include <ros/ros.h>
#include <std_srvs/Empty.h>

int main(int argc, char **argv)
{
    int red, green, blue;

    // ROS节点初始化
    ros::init(argc, argv, "parameter_config");

    // 创建节点句柄
    ros::NodeHandle node;

    // 读取背景颜色参数     ********************red、green和blue是C++中的整型变量,用来表示颜色的三个分量,
    ros::param::get("/turtlesim/background_r", red);
    ros::param::get("/turtlesim/background_g", green);
    ros::param::get("/turtlesim/background_b", blue);
    /**
     * ros::param::get函数使用了参数名"/background_r"、"/background_g"和"/background_b",
     * 这些参数名是在ROS参数服务器中存储的背景颜色的三个分量,对应于red、green和blue变量。
     * 例如:方程add:x+y=2,其中add是参数,x和y是变量
     */

    ROS_INFO("Get Backgroud Color[%d, %d, %d]", red, green, blue);

    // 设置背景颜色参数
    ros::param::set("/turtlesim/background_r", 255);
    ros::param::set("/turtlesim/background_g", 255);
    ros::param::set("/turtlesim/background_b", 255);

    ROS_INFO("Set Backgroud Color[255, 255, 255]");

    // 读取背景颜色参数
    ros::param::get("/turtlesim/background_r", red);2
    ros::param::get("/turtlesim/background_g", green)
    ros::param::get("/turtlesim/background_b", blue);

    ROS_INFO("Re-get Backgroud Color[%d, %d, %d]", red, green, blue);

    // 调用服务,刷新背景颜色
    ros::service::waitForService("/clear");
    ros::ServiceClient clear_background = node.serviceClient<std_srvs::Empty>("/clear");
    std_srvs::Empty srv;
    clear_background.call(srv);

    sleep(1);
    return 0;
}

std_srvs::Empty是ROS中的一个标准服务类型,它不需要任何参数。它的定义如下:

# Empty request message
---
# Empty response message

可以看到,std_srvs::Empty服务类型有一个空的请求消息(即---),以及一个空的响应消息(即也是---)。

在ROS服务通信中,服务请求和响应都是以消息的形式进行交换的。因此,在使用服务客户端向服务端发送请求时,需要创建一个消息对象,并将其作为参数传递给服务客户端的call函数。在这里,std_srvs::Empty服务类型的请求消息为空,因此可以创建一个空的请求对象srv,用于向/clear服务发送请求。

1.8.7  设置编译

  接下来同样是在CMakeLists.txt文件中设置编译的规则,将以下语句复制到CMakeLists文件中

 add_executable(parameter_config src/parameter_config.cpp)
 target_link_libraries(parameter_config ${catkin_LIBRARIES})

1.8.8 编译

cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore
rosrun turtlesim turtlesim_node
rosrun learning_parameter parameter_config

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值