【古月居《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

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

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

相关文章

【C++笔记】红黑树的简易实现

【C笔记】红黑树的简易实现 一、什么是红黑树以及红黑树好在哪里1.1、什么是红黑树1.2、红黑树比AVL树好在哪里&#xff1f; 二、红黑树的模拟实现2.1、红黑树的插入2.2、仅变色调整2.3、变色单旋调整2.4、变色双旋调整 一、什么是红黑树以及红黑树好在哪里 1.1、什么是红黑树…

Docker容器网络模式

1.none网络 1&#xff09;使用默认网络模式创建一个BusyBox容器&#xff0c;用于对比none网络模式&#xff1b; 测试网络&#xff0c;可以正常连接外网。 2&#xff09;再创建一个none网络模式的BusyBox容器&#xff1b; 测试网络连接&#xff0c;无法连接外网。 总结&#x…

Linux网卡没有eth0显示ens33原因以及解决办法

原因 首先说明一下eth0 与 ens33的关系&#xff1a; 目前的主流网卡为使用以太网络协定所开发出来的以太网卡&#xff08;Ethernet),因此我们Linux就称呼这种网络接口为ethN(N为数字)。 举个栗子&#xff1a;就是说主机上面有一张以太网卡&#xff0c;因此主机的网络接口就是…

深入了解Spring Boot中@Async注解的8大坑点

文章目录 1. 缺少EnableAsync注解2. 异步方法需独立3. 不同的异步方法间无法相互调用4. 返回值为void的异步方法无法捕获异常5. 外部无法直接调用带有Async注解的方法6. Async方法不适用于private方法7. 缺失异步线程池配置8. 异步方法与事务的兼容结语 &#x1f389;深入了解S…

Ros报错:The Plugin for class ‘jsk_rviz_plugin/Plotter2D‘ failed to load

一般出现这种情况&#xff0c;是提醒Ros缺少某种库&#xff1a; 图中显示的错误是说明少了jsk_rviz_plugins库&#xff0c;他是一个提供原始rviz插件的包。 解决办法是安装相应的库与插件&#xff1a; #根据自己ROS的版本选择相应的指令 # ubuntu20.04:noetic sudo apt-get i…

RabbitMQ消息的应答

消息的应答机制 消费者完成一个任务可能需要一段时间&#xff0c;如果其中一个消费者处理一个长的任务并仅只完成了部分突然它挂掉了&#xff0c;会发生什么情况。RabbitMQ 一旦向消费者传递了一条消息&#xff0c;便立即将该消息标记为删除。在这种情况下&#xff0c;突然有个…

AM@微分中值定理的证明问题举例

文章目录 微分学中出现的几个中值定理中值定理证明存在性不等式或等式问题 辅助函数的构造例例例例分析方法1方法2方法3 微分学中出现的几个中值定理 Rolle中值定理(Rolle定理)Lagrange中值定理Cauchy中值定理Taylor中值定理其中Rolle定理是最基础的,而Largrange可视为Cauchy中…

计算机视觉:使用dlib实现人脸检测

1 dlib介绍 Dlib是一个广泛使用的开源库&#xff0c;在计算机视觉和机器学习领域具有重要影响。它是由Davis King在2002年开发&#xff0c;主要用C语言编写&#xff0c;但也提供了Python接口。Dlib结合了高效的算法和易用性&#xff0c;使其成为学术界和工业界的热门选择。 1.…

SpringBoot项目启动后自动停止了?

1 现象 2023-11-22T09:05:13.36108:00 DEBUG 17521 --- [ main] o.s.b.a.ApplicationAvailabilityBean : Application availability state LivenessState changed to CORRECT 2023-11-22T09:05:13.36208:00 DEBUG 17521 --- [ main] o.s.b.a.Applicat…

一文1000字彻底搞懂Web测试与App测试的区别

总结分享一些项目需要结合Web测试和App测试的工作经验给大家&#xff1a; 从功能测试区分&#xff0c;Web测试与App测试在测试用例设计和测试流程上没什么区别。 而两者的主要区别体现在如下几个方面&#xff1a; 1 系统结构方面 Web项目&#xff0c;B/S架构&#xff0c;基…

冒泡排序(适合编程新手的体质)

冒泡排序&#xff1a;简单而高效的排序技巧 欢迎来到我们今天的博客&#xff0c;我们将一起探索计算机科学中最基本但同时也非常重要的概念之一&#xff1a;冒泡排序。无论你是编程新手还是有一些编程经验的读者&#xff0c;这篇博客都将帮助你更好地理解冒泡排序的原理和应用…

Android中实现RecyclerView,并对item及其多个子控件的点击事件监听

目录 背景 实现RecyclerView 第一步、 新建item的xml 第二步、在activity的布局中引入 RecyclerView 第三步、新建一个adapter 第四步、在activity中初始化绑定adapter即可 实现item及其多个子组件点击事件监听 第一步、 适配器中创建监听对象 第二步、适配器中绑定监听…

uniapp ios 授权弹窗 uniapp弹出框怎么实现

新版本的信息弹窗组件 可以弹出很多条信息&#xff0c;并单独控制消失时间、点击消失。 用循环来生成很多个弹窗&#xff0c;用this.$refs来传值&#xff0c;并添加数组。 1.布局 2.js 具体流程。需要一个弹窗&#xff0c;基本信息传入组件&#xff0c;处理后添加入数组&am…

Linux unset命令详解:如何删除已定义的 shell 变量(包括环境变量)和 shell 函数(附实例教程和注意事项)

Linux unset命令介绍 unset是一个内建于Linux的命令&#xff0c;用于在程序执行过程中删除变量&#xff08;包括环境变量&#xff09;或函数。unset命令可以删除函数和shell变量。如果指定了"varName"&#xff0c;它将指向一个变量名&#xff0c;shell将取消设置它并…

智能优化算法应用:基于闪电搜索算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于闪电搜索算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于闪电搜索算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.闪电搜索算法4.实验参数设定5.算法结果6.参考…

【C++】异常处理 ① ( 异常概念引入 | 抛出异常语法 | 捕获异常语法 | 异常捕获流程 | 异常处理代码示例 )

文章目录 一、异常处理1、异常概念引入2、抛出异常语法3、捕获异常语法4、异常捕获流程 二、异常处理代码示例1、错误代码示例 - 抛出异常 / 不捕获异常2、正确代码示例 - 抛出异常 / 捕获异常3、正确代码示例 - 抛出异常 / 捕获异常不处理继续抛出异常 一、异常处理 1、异常概…

Java面向对象第8天

精华笔记&#xff1a; 接口&#xff1a; 是一种引用数据类型 由interface定义 只能包含常量和抽象方法 不能被实例化 接口是需要被实现/继承的&#xff0c;实现类/派生类&#xff1a;必须重写接口中的所有抽象方法 一个类可以实现多个接口&#xff0c;用逗号分隔。若又继承…

接口测试入门8问(含答案+文档)

Q1&#xff1a;什么是接口测试&#xff0c;基础知识什么的讲讲吧&#xff01; A&#xff1a;你好&#xff0c;接口可以分下面几种 1、系统与系统之间的调用&#xff0c;比如银行会提供接口供电子商务网站调用&#xff0c;或者说&#xff0c;支付宝会提供接口给淘宝调用 2、上…

Table和HashBasedTable的使用案例

------------------- 1.普通使用 package org.example.testhashbasedtable;import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table;import java.util.Map;public class TestHashBasedTable {public static void main(String[] args) {Ta…

【方法】PowerPoint如何删除“限制编辑”?

如果PPT文件设置成“只读模式”&#xff0c;就会被限制编辑&#xff0c;也就是无法对PPT进行编辑或更改&#xff0c;那要如何删除这个“限制”呢&#xff1f; 下面小编会按照“无密码的只读方式”、“有密码的只读方式”以及“忘记了密码的只读方式”这3种情况&#xff0c;来说…