【古月居《ros入门21讲》学习笔记】14_参数的使用与编程方法

目录

说明:

1. 参数模型(全局字典)

2. 实现过程(C++)

创建功能包

参数命令行的使用

YAML参数文件

rosparam命令

使用示例

编程方法(C++)

配置代码编译规则

编译并运行

编译

运行

3. 实现过程(Python)

编程方法(Python)

运行效果


说明:

1. 本系列学习笔记基于B站:古月居《ROS入门21讲》课程,且使用的Ubuntu与ROS系统版本与课程完全一致;

虚拟机版本 Linux系统版本 ROS系统版本
VMware WorkStation Pro 16 Ubuntu18.04 Melodic

2. 课程中的所有示例代码均已跑通,且对Pyhon版本的代码也都做了运行验证,并附带验证过程(错误均已修正);

3. 本节是整个笔记的第14节,对应视频课程的第16节,请自行对应学习;

4. 整个系列笔记基本已经完结,但部分章节仍需润色修改 ,后面会陆续发布,请大家持续关注,      创作不易,感谢支持!


1. 参数模型(全局字典)

image-20230605111945829

2. 实现过程(C++)

创建功能包

cd ~/catkin_ws/src
catkin_create_pkg learning_parameter roscpp rospy std_srvs

image-20230605124139080

参数命令行的使用

YAML参数文件

image-20230605125219488

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

使用示例

显示与设置某个参数

image-20230605150526061

保存当前参数到某个文件(文件路径就在当前终端的工作路径)

image-20230605150823088

从文件中修改并读取参数

image-20230605151455882

删除某个参数

image-20230605152623932

编程方法(C++)

cd ~/catkin_ws/src/learning_parameter/src
touch parameter_config.cpp

  • 初始化ROS节点;

  • get函数获取参数;

  • set函数设置参数

/**
 * 该例程设置/读取海龟例程中的参数
 */
#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;
​
    // 读取背景颜色参数
    ros::param::get("turtlesim/background_r", red);
    ros::param::get("turtlesim/background_g", green);
    ros::param::get("turtlesim/background_b", blue);
​
    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("/background_b", 255);
​
    ROS_INFO("Set Backgroud Color[255, 255, 255]");
​
    // 读取背景颜色参数
    ros::param::get("turtlesim/background_r", red);
    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;
}

image-20230605160016032

配置代码编译规则

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

image-20230605153809877

编译并运行

编译
cd ~/catkin_ws
​
catkin_make
​
source devel/setup.bash(如已配置 **.bashrc**文件,则此步不需要,配置方法在publisher的章节里)

image-20230605154237433

运行
roscore
rosrun turtlesim turtlesim_node
rosrun learning_parameter parameter_config

image-20230605161950473

3. 实现过程(Python)

编程方法(Python)

cd ~/catkin_ws/src/learning_parameter
mkdir scripts
cd scripts
touch parameter_config.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该例程设置/读取海龟例程中的参数
​
import sys
import rospy
from std_srvs.srv import Empty
​
def parameter_config():
    # ROS节点初始化
    rospy.init_node('parameter_config', anonymous=True)
​
    # 读取背景颜色参数
    red   = rospy.get_param('turtlesim/background_r')
    green = rospy.get_param('turtlesim/background_g')
    blue  = rospy.get_param('turtlesim/background_b')
​
    rospy.loginfo("Get Backgroud Color[%d, %d, %d]", red, green, blue)
​
    # 设置背景颜色参数
    rospy.set_param("turtlesim/background_r", 255);
    rospy.set_param("turtlesim/background_g", 255);
    rospy.set_param("turtlesim/background_b", 100);
​
    rospy.loginfo("Set Backgroud Color[255, 255, 100]");
​
    # 读取背景颜色参数
    red   = rospy.get_param('turtlesim/background_r')
    green = rospy.get_param('turtlesim/background_g')
    blue  = rospy.get_param('turtlesim/background_b')
​
    rospy.loginfo("Get Backgroud Color[%d, %d, %d]", red, green, blue)
​
    # 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
    rospy.wait_for_service('/clear')
    try:
        clear_background = rospy.ServiceProxy('/clear', Empty)
​
        # 请求服务调用,输入请求数据
        response = clear_background()
        return response
    except rospy.ServiceException, e:
        print "Service call failed: %s"%e
​
if __name__ == "__main__":
    parameter_config()

image-20230605164034212

给parameter_config.py文件赋作为可执行文件权限,python文件不需要编译,直接运行即可。

image-20230605163456745

运行效果

roscore
rosrun turtlesim turtlesim_node
rosrun learning_parameter parameter_config.py

image-20230605164548361

猜你喜欢

转载自blog.csdn.net/2201_75902080/article/details/134659874
今日推荐