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

2023-11-29 06:12

本文主要是介绍【古月居《ros入门21讲》学习笔记】14_参数的使用与编程方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

说明:

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的servicerospy.wait_for_service('/clear')try:clear_background = rospy.ServiceProxy('/clear', Empty)
​# 请求服务调用,输入请求数据response = clear_background()return responseexcept 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

这篇关于【古月居《ros入门21讲》学习笔记】14_参数的使用与编程方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/431752

相关文章

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方