0
点赞
收藏
分享

微信扫一扫

ROS系统 参数的获取和设置

cd ~/catkin_ws/src

catkin_create_pkg learning_parameter roscpp rospy std_srvs

ROS系统 参数的获取和设置_仿真器

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

启动ROS Master

roscore

启动小海龟仿真器

rosrun turtlesim turtlesim_node

列出当前所有参数

rosparam list

ROS系统 参数的获取和设置_仿真器_02

  • 背景颜色
  • /turtlesim/background_b
  • /turtlesim/background_g
  • /turtlesim/background_r
  • ros版本号
  • /rosversion
  • 当前进程的id
  • /run_id
  • 管理 ROS分布及其包含的 ROS堆栈的文件格式
  • rosdistro

获取 /turtlesim/background_b、/turtlesim/background_g、/turtlesim/background_r的参数。

rosparam get /turtlesim/background_b

rosparam get /turtlesim/background_g

rosparam get /turtlesim/background_r

ROS系统 参数的获取和设置_仿真器_03

获取ROS的发行版

rosparam get /rosdistro

ROS系统 参数的获取和设置_仿真器_04
获取ROS的版本

rosparam get /rosversion

ROS系统 参数的获取和设置_python_05

修改小海龟仿真器的背景颜色

rosparam set /turtlesim/background_b 100
rosparam get /turtlesim/background_b

rosservice call /clear "{}"

ROS系统 参数的获取和设置_python_06
使用 rosservice call 发送请求,当rgb的值发生改变会刷新背景颜色。
ROS系统 参数的获取和设置_仿真器_07
小海龟仿真器的背景颜色变为白色

rosparam set /turtlesim/background_r 255
rosparam set /turtlesim/background_b 255
rosparam set /turtlesim/background_g 255

rosservice call /clear "{}"

ROS系统 参数的获取和设置_仿真器_08

将参数的内容保存在文件中

rosparam dump param.yaml

ROS系统 参数的获取和设置_python_09
然后可以对通过在文件中去修改一些参数。
ROS系统 参数的获取和设置_python_10

从文件读取参数

rosparam load param.yaml

发送指令刷新读取的值

rosservice call /clear "{}"

ROS系统 参数的获取和设置_python_11

从参数列表中删除一个参数:

rosparam delete /turtlesim/background_r
rosparam list

rosservice call /clear "{}"

删除后,使用 rosparam list 命令,会看到列表中的 /turtlesim/background_r 参数已经消失。
ROS系统 参数的获取和设置_python_12

如何通过代码获取/设置参数

  • 初始化ROS节点
  • get函数获取参数
  • set函数设置参数

以下是通过C++代码实现以上操作参数的增删改查。

在 learning_parameter 目录中的src文件夹下创建一个 cpp文件

cd ~/catkin_ws/src/learning_parameter/src

touch parameter_config.cpp

在 parameter_config.cpp 文件中写入以下代码。
下面代码实现功能:设置/读取海龟例程中的参数

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

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

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

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

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

ROS_INFO(&quot;Get&nbsp;Backgroud&nbsp;Color[%d,&nbsp;%d,&nbsp;%d]&quot;,&nbsp;red,&nbsp;green,&nbsp;blue);

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

ROS_INFO(&quot;Set&nbsp;Backgroud&nbsp;Color[255,&nbsp;255,&nbsp;255]&quot;);

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

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

// 调用服务,刷新背景颜色
ros::service::waitForService(&quot;/clear&quot;);
ros::ServiceClient&nbsp;clear_background&nbsp;=&nbsp;node.serviceClient&lt;std_srvs::Empty&gt;(&quot;/clear&quot;);
std_srvs::Empty&nbsp;srv;
clear_background.call(srv);

sleep(1);

&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;
}

在CMakeLists.txt中添加以下代码:

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

ROS系统 参数的获取和设置_python_13
编译项目

cd ~/catkin_ws

catkin_make

设置环境变量,让系统能够找到该工作空间

source devel/setup.bash

启动ROS Master

roscore

启动小海龟仿真器

rosrun turtlesim turtlesim_node

启动自定义的节点

rosrun learning_parameter parameter_config

ROS系统 参数的获取和设置_python_14

用Python代码实现方式

cd ~/catkin_ws/src/learning_parameter

创建 scripts 文件夹

mkdir scripts

cd scripts

创建 parameter_config.py Python文件

touch parameter_config.py

用Python修改参数的代码:
以下代码的功能:设置/读取海龟例程中的参数

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import&nbsp;sys
import&nbsp;rospy
from&nbsp;std_srvs.srv&nbsp;import&nbsp;Empty

def&nbsp;parameter_config():
# ROS节点初始化
&nbsp;&nbsp;&nbsp;&nbsp;rospy.init_node(&#39;parameter_config', anonymous=True)

# 读取背景颜色参数
&nbsp;&nbsp;&nbsp;&nbsp;red&nbsp;&nbsp;&nbsp;=&nbsp;rospy.get_param(&#39;/turtlesim/background_r')
&nbsp;&nbsp;&nbsp;&nbsp;green&nbsp;=&nbsp;rospy.get_param(&#39;/turtlesim/background_g')
&nbsp;&nbsp;&nbsp;&nbsp;blue&nbsp;&nbsp;=&nbsp;rospy.get_param(&#39;/turtlesim/background_b')

&nbsp;&nbsp;&nbsp;&nbsp;rospy.loginfo(&quot;Get&nbsp;Backgroud&nbsp;Color[%d,&nbsp;%d,&nbsp;%d]&quot;,&nbsp;red,&nbsp;green,&nbsp;blue)

# 设置背景颜色参数
&nbsp;&nbsp;&nbsp;&nbsp;rospy.set_param(&quot;/turtlesim/background_r&quot;,&nbsp;255);
&nbsp;&nbsp;&nbsp;&nbsp;rospy.set_param(&quot;/turtlesim/background_g&quot;,&nbsp;192);
&nbsp;&nbsp;&nbsp;&nbsp;rospy.set_param(&quot;/turtlesim/background_b&quot;,&nbsp;203);

&nbsp;&nbsp;&nbsp;&nbsp;rospy.loginfo(&quot;Set&nbsp;Backgroud&nbsp;Color[255,&nbsp;192,&nbsp;203]&quot;);

# 读取背景颜色参数
&nbsp;&nbsp;&nbsp;&nbsp;red&nbsp;&nbsp;&nbsp;=&nbsp;rospy.get_param(&#39;/turtlesim/background_r')
&nbsp;&nbsp;&nbsp;&nbsp;green&nbsp;=&nbsp;rospy.get_param(&#39;/turtlesim/background_g')
&nbsp;&nbsp;&nbsp;&nbsp;blue&nbsp;&nbsp;=&nbsp;rospy.get_param(&#39;/turtlesim/background_b')

&nbsp;&nbsp;&nbsp;&nbsp;rospy.loginfo(&quot;Get&nbsp;Backgroud&nbsp;Color[%d,&nbsp;%d,&nbsp;%d]&quot;,&nbsp;red,&nbsp;green,&nbsp;blue)

# 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
&nbsp;&nbsp;&nbsp;&nbsp;rospy.wait_for_service(&#39;/clear')
&nbsp;&nbsp;&nbsp;&nbsp;try:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clear_background&nbsp;=&nbsp;rospy.ServiceProxy(&#39;/clear', Empty)

# 请求服务调用,输入请求数据
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response&nbsp;=&nbsp;clear_background()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;response
&nbsp;&nbsp;&nbsp;&nbsp;except&nbsp;rospy.ServiceException,&nbsp;e:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;&quot;Service&nbsp;call&nbsp;failed:&nbsp;%s&quot;%e

if&nbsp;__name__&nbsp;==&nbsp;&quot;__main__&quot;:
&nbsp;&nbsp;&nbsp;&nbsp;parameter_config()

注意:需要将Python设置为可执行文件。
ROS系统 参数的获取和设置_背景颜色_15

Python代码不需要重新编译,可以直接执行。

rosrun&nbsp;learning_parameter&nbsp;parameter_config.py

ROS系统 参数的获取和设置_python_16
注意:代码中的路径要和 rosparam list 命令显示的路径要对应。
ROS系统 参数的获取和设置_python_17
ROS系统 参数的获取和设置_python_18
ROS系统 参数的获取和设置_仿真器_19


举报

相关推荐

0 条评论