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

news2024/11/24 5:35:07

目录

说明:

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

2. 实现过程(C++)

创建功能包

参数命令行的使用

YAML参数文件

rosparam命令

使用示例

编程方法(C++)

配置代码编译规则

编译并运行

编译

运行

3. 实现过程(Python)

编程方法(Python)

运行效果


说明:

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1265418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源堡垒机Jumpserver

文章目录 开源堡垒机JumpserverJumpserver介绍安装环境部署安装jumpserver访问jumpserver的web界面 开源堡垒机Jumpserver Jumpserver介绍 Jumpserver 是全球首款完全开源的堡垒机&#xff0c;使用 GNU GPL v2.0 开源协议&#xff0c;是符合 4A 的运维安全审计系统。 Jumpse…

天鹅湖国家旅游度假区 | 展柜OLED透明屏:创新展示提升互动体验

天鹅湖国家旅游度假区 | 展柜OLED透明屏 产品&#xff1a;一块55寸OLED透明屏嵌入玻璃安装 应用场景&#xff1a;用在天鹅湖国家旅游度假区——三门峡城市文化客厅展馆中的一个透明展示柜&#xff0c;用一块55寸OLED透明屏嵌入展示柜的玻璃&#xff0c;让观众即可以看到展柜里…

【赠书第9期】巧用ChatGPT高效搞定Excel数据分析

文章目录 前言 1 操作步骤 1.1 数据清理和整理 1.2 公式和函数的优化 1.3 图表和可视化 1.4 数据透视表的使用 1.5 条件格式化和筛选 1.6 数据分析技巧 1.7 自动化和宏的创建 2 推荐图书 3 粉丝福利 前言 ChatGPT 是一个强大的工具&#xff0c;可以为你提供在 Exce…

【axios封装】万字长文,TypeScript实战,封装一个axios - 基础封装篇

目录 前言版本环境变量配置引入的类型1、AxiosIntance: axios实例类型2、InternalAxiosRequestConfig: 高版本下AxiosRequestConfig的拓展类型3、AxiosRequestConfig: 请求体配置参数类型4、AxiosError: 错误对象类型5、AxiosResponse: 完整原始响应体类型 目标效果开始封装骨架…

算法通关第十三关-青铜挑战数学基础问题

数组元素积的符号 描述 : 已知函数 signFunc(x) 将会根据 x 的正负返回特定值&#xff1a; 如果 x 是正数&#xff0c;返回 1 。如果 x 是负数&#xff0c;返回 -1 。如果 x 是等于 0 &#xff0c;返回 0 。 给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的…

视觉测量基础

1. 相机模型 1.1 坐标系转换原理 世界坐标系(world Coords):点在真实世界中的位置&#xff0c;描述相机位置。 相机坐标系(Cameras Coords):以相机光学系统中心&#xff08;镜头中心&#xff09;为原点&#xff0c;建立相机坐标系。 图像物理坐标系(Film Coords):经过小孔成…

pandas教程:2012 Federal Election Commission Database 2012联邦选举委员会数据库

文章目录 14.5 2012 Federal Election Commission Database&#xff08;2012联邦选举委员会数据库&#xff09;1 Donation Statistics by Occupation and Employer&#xff08;按职业与雇主划分的捐赠数据&#xff09;2 Bucketing Donation Amounts&#xff08;桶捐赠额&#x…

面试题:说一下你对 OAuth2 协议原理的理解?

文章目录 OAuth2简介角色流程客服端注册Client Type四种授权模式授权码模式隐藏式密码式凭证式RefreshToken OAuth2简介 OAuth 是一个开放授权协议标准&#xff0c;允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息&#xff0c;而不需要将用户名和密码提供给第三…

【算法】一个简单的整数问题(树状数组、差分)

题目 给定长度为 N 的数列 A&#xff0c;然后输入 M 行操作指令。 第一类指令形如 C l r d&#xff0c;表示把数列中第 l∼r 个数都加 d。 第二类指令形如 Q x&#xff0c;表示询问数列中第 x 个数的值。 对于每个询问&#xff0c;输出一个整数表示答案。 输入格式 第一行…

leetcode面试经典150题——33 最小覆盖子串(滑动窗口)

题目&#xff1a; 最小覆盖子串 描述&#xff1a; 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 “” 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中…

MySQL双主双从数据库集群搭建

1 引言 在之前的文章中提到过相关搭建方法&#xff0c;具体请参考《MySQL主从数据库搭建》这篇文章&#xff0c;本文主要讲述双主双从&#xff0c;双主多从集群的搭建方式。 这里要问一个问题&#xff0c;为什么MySQL要搭建数据库集群呢&#xff1f;我想应该有以下几点原因&…

figma 基础使用 —— 常用方法

一、 导入组件 分成两种方式 &#xff08;1&#xff09;离线的包导入&#xff08;iOS 常用组件.fig 直接拖拽到figma最近网页&#xff09; &#xff08;2&#xff09;在插件市场下载https://www.figma.com/community 二、figma中使用标尺 快捷键&#xff1a;shift R 三、插…

爬虫学习 异步爬虫(五)

多线程 多进程 协程 进程 运行中的程序 线程 被CPU调度的执行过程,操作系统 运算调度的min单位 在进程之中,进程中实际运作单位 from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(target …

SP3109 STRLCP - Longest Common Prefix 题解

SP3109 STRLCP - Longest Common Prefix 题解 某省某年省选原题出处&#xff0c;看来 CCF 出原题这事由来已久。 简化题意 让你维护一个字符串序列。支持单点修改。支持单点插入。支持询问两个子串的最长公共前缀。 解法 本篇题解前置芝士&#xff1a;无旋 Treap&#xff…

孔明棋,(n + 2) x (m + 2)的棋盘,中间n x m的区域都是棋子,求最后最少剩余几个棋子

题目 #include <iostream> using namespace std; int f(int n, int m) {int t, res;if (n > m){t n;n m;m t;}if (n 1)res (m 1) / 2;else if (n 2){if (m % 3 0)res 2;elseres 1;}else if (n 3){res 2;}return res; } int change(int x) {x % 3;if (x 0…

OpenHarmony亮相MTSC 2023 | 质量效率共进,赋能应用生态发展

11月25日&#xff0c;MTSC 2023第十二届中国互联网测试开发大会在深圳登喜路国际大酒店圆满举行。大会以“软件质量保障体系和测试研发技术交流”为主要目的&#xff0c;旨在为行业搭建一个深入探讨和交流的桥梁和平台。OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&a…

AI一键生成文案-免费AI一键生成文案的软件有哪些

AI一键生成文案的原理涉及自然语言处理&#xff08;NLP&#xff09;和机器学习技术。这种技术的核心是基于大量文本数据的模式识别和生成&#xff0c;通常使用深度学习模型&#xff0c;如循环神经网络&#xff08;RNN&#xff09;、长短期记忆网络&#xff08;LSTM&#xff09;…

六、Lua运算符

文章目录 一、Lua 运算符&#xff08;一&#xff09;算术运算符&#xff08;二&#xff09;关系运算符&#xff08;三&#xff09;逻辑运算符&#xff08;四&#xff09;其他运算符 二、运算符优先级 一、Lua 运算符 运算符是一个特殊的符号&#xff0c;用于告诉解释器执行特定…

【双指针】四数之和

四数之和 建议做过了解三数之和的思想再做这道题&#xff0c;思路是一样的~ 题目描述 18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [num…

第1章 理解知识图谱(一)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…