ROS1学习笔记:参数的使用与编程方法(ubuntu20.04)

news2024/11/30 10:54:49

参考B站古月居ROS入门21讲:
参数的使用与编程方法
基于VMware Ubuntu 20.04 Noetic版本的环境

文章目录

  • 一、概念图讲解
  • 二、创建功能包
  • 三、参数命令行的使用方法:rosparam
      • 显示某个参数值:rosparam get
      • 设定某个参数值:rosparam set
      • 将参数保存为文件:rosparam dump
      • 读取文件中的参数:rosparam load
      • 删除参数:rosparam delete
  • 四、程序使用方法
    • 4.1 以C++为例
      • 4.1.1 配置代码编译规则
      • 4.1.2 编译整个工作空间
      • 4.1.3 配置环境变量
      • 4.1.4 执行代码
    • 4.2 以Python为例
      • 4.2.1 配置代码编译规则
      • 4.2.2 编译整个工作空间
      • 4.2.3 配置环境变量
      • 4.2.4 执行代码

一、概念图讲解

在ROS Master中,存在一个参数服务器(Parameter Server),它是一个全局字典,即一个全局变量的存储空间,用来保存各个节点的配置参数。各个节点都可以对参数进行全局访问。
在这里插入图片描述
下面我们来查看参数服务器的使用方法

二、创建功能包

src目录下创建learning_parameter文件夹:
在这里插入图片描述
然后编译功能包

cd ~/catkin_ws/src
catkin_create_pkg learning_parameter roscpp rospy std_srvs

三、参数命令行的使用方法:rosparam

我们通过rosparam的方法来实现参数的相关功能。
在ROS中,参数文件常通过YAML文件的格式保存,形式如图所示:
在这里插入图片描述
rosparam常用命令如下:
在这里插入图片描述
我们打开小海龟的仿真节点来试一下看看结果:

roscore
rosrun turtlesim turtlesim_node

显示参数列表:

rosparam list

在这里插入图片描述

显示某个参数值:rosparam get

rosparam get /turtlesim/background_b
rosparam get /turtlesim/background_g
rosparam get /turtlesim/background_r
rosparam get /rosdistro
rosparam get /rosversion
rosparam get /run_id

在这里插入图片描述

设定某个参数值:rosparam set

比如我将背景颜色的b通道值改成100

rosparam set /turtlesim/background_b 100

然后再get一下可以看到已经变成了100
最后我们发送一个clear的空内容请求使背景颜色改一下:

rosservice call /clear "{}"

如图所示:
在这里插入图片描述

将参数保存为文件:rosparam dump

rosparam dump param.yaml

在这里插入图片描述
在这里插入图片描述

读取文件中的参数:rosparam load

我们修改一下文件中参数的数值,然后通过命令行的方式读取:

rosparam load param.yaml

在这里插入图片描述
get一下可以看到参数值发生了变化:
在这里插入图片描述

再clear一下:

rosservice call /clear "{}"

看到背景颜色变黑了:
在这里插入图片描述

删除参数:rosparam delete

rosparam delete /turtlesim/background_b

在这里插入图片描述
clear一下:
在这里插入图片描述
被删除的参数可以通过rosparam set方式设置回来

四、程序使用方法

如何获取/设置参数?

  • get函数获取参数
  • set函数设置参数

4.1 以C++为例

parameter_config.cpp代码拷贝到src目录下:

/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************/

/**
 * 该例程设置/读取海龟例程中的参数
 */
#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("/background_r", red);
	ros::param::get("/background_g", green);
	ros::param::get("/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("/turtlesim/background_b", 255);

	ROS_INFO("Set Backgroud Color[255, 255, 255]");

    // 读取背景颜色参数
	ros::param::get("/background_r", red);
	ros::param::get("/background_g", green);
	ros::param::get("/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;
}

4.1.1 配置代码编译规则

将以下代码拷贝进CmakeLists.txt的指定区域:

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

在这里插入图片描述

4.1.2 编译整个工作空间

cd ~/catkin_ws
catkin_make

4.1.3 配置环境变量

之前已经配置过。

4.1.4 执行代码

roscore
rosrun turtlesim turtlesim_node
rosrun learning_parameter parameter_config

可以看到背景变成了白色。
在这里插入图片描述

4.2 以Python为例

parameter_config.py拷贝进scripts目录下(打开执行权限):

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

########################################################################
####          Copyright 2020 GuYueHome (www.guyuehome.com).          ###
########################################################################

# 该例程设置/读取海龟例程中的参数

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", 255);

    rospy.loginfo("Set Backgroud Color[255, 255, 255]");

	# 读取背景颜色参数
    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 as e:
        print("Service call failed: %s"%e)

if __name__ == "__main__":
    parameter_config()

4.2.1 配置代码编译规则

打开CmakeLists.txt,配置编译规则:
在这里插入图片描述

4.2.2 编译整个工作空间

cd ~/catkin_ws
catkin_make

4.2.3 配置环境变量

之前已经配置过。

4.2.4 执行代码

roscore
rosrun turtlesim turtlesim_node
rosrun learning_parameter parameter_config.py

在这里插入图片描述

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

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

相关文章

linux小程序—进度条(动态演示)

文章目录1. \n与\r的区别1. linux环境下2. windows环境下2. 缓冲区问题1.\n的情况2.\r的情况3. \n与\r的情况对比4. 使用fflush函数观察\r情况5. 不为\n与\r的情况3.进度条的实现1. printf 打印字符问题1. 修改前2.修改后2 . 注意事项3. 整体实现1. makefile(自动化编译工具&am…

一篇文章教会你Linux下《常用操作指令》

基本指令首言ls&#xff08;查看目录&#xff09;pwds&#xff08;显示用户当前所在目录&#xff09;cd&#xff08;改变工作目录&#xff09;mkdir&#xff08;创建目录&#xff09;rmdir&#xff08;删除目录&#xff09;touch &#xff08;新建文件或更新文件时间&#xff0…

【Python】获取视频弹幕并生成词云

目录一、摘要二、获取目标视频cid三、获取视频弹幕xml文件四、处理弹幕文件五、生成词云六、完整参考代码一、摘要 就是那个大家都用的弹幕视频网站&#xff0c;不写名字了&#xff0c;写了老是不能通过。 获取视频的弹幕文件&#xff08;xml&#xff09;&#xff0c;并生成如图…

认真分享一个让我变厉害的小建议

很多朋友&#xff0c;加我好友之后&#xff0c;第一句话通常是&#xff1a;我想提高英语&#xff0c;有什么资料推荐&#xff1f; 这要看你学英语的目的了。 我们学英语是为了什么? 理由可能很多&#xff0c;我就说个最俗的目的吧&#xff0c;为了发财。 想发财应向谁学习&…

代码随想录第31天|● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

455.分发饼干 大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子&#xff0c;那么就应该优先满足胃口大的。 这里的局部最优就是大饼干喂给胃口大的&#xff0c;充分利用饼干尺寸喂饱一个&#xff0c;全局最优就是喂饱尽可能多的小孩。 可以尝试使用贪心策略&#xf…

[ 数据结构 ] 最小生成树(MST)--------普里姆算法、克鲁斯卡尔算法

0 修路问题 有胜利乡有 7 个村庄(A, B, C, D, E, F, G) &#xff0c;现在需要修路把 7 个村庄连通各个村庄的距离用边线表示(权) &#xff0c;比如 A – B 距离 5 公里问&#xff1a;如何修路保证各个村庄都能连通&#xff0c;并且总的修建公路总里程最短? 思路: 将 10 条边&a…

Java常用工具类方法(上)

1. Collections首先出场的是java.util包下的Collections类&#xff0c;该类主要用于操作集合或者返回集合&#xff0c;我个人非常喜欢用它。1.1 排序在工作中经常有对集合排序的需求。看看使用Collections工具是如何实现升序和降序的&#xff1a;List<Integer> list new…

揭秘链动2+1商业模式玩法

链动21模式主要是打造裂变团队的同时又能快速地将平台销售额提升起来&#xff0c;链动模式可以说颠覆传统的分销&#xff0c;算是一个创新更能吸引用户&#xff0c;稳住会员&#xff0c;拓展新客户的商业模式。 链动21模式有两个身份&#xff0c;分别是代理和老板 【代理商】…

Java高手速成 | 高质量代码编写最佳实践

程序员之间交流时&#xff0c;会经常使用非程序员无法理解的行话&#xff0c;或者使用令操不同编程语言的程序员理解起来比较模糊的行话。 但是&#xff0c;那些操相同编程语言的程序员理解起来不会产生什么问题。 这有时也取决于程序员所掌握知识的渊博程度。 一个新手或许不理…

以 Animated Drawings APP 为例,用 TorchServe 进行模型调优

内容导读 上节介绍了 TorchServe 模型部署调优的 5 个步骤&#xff0c;将模型部署到生产环境中。本节以 Animated Drawings APP 为例&#xff0c;实际演示 TorchServe 的模型优化效果。 本文首发自微信公众号&#xff1a;PyTorch 开发者社区 去年&#xff0c;Meta 凭借 Animate…

win系统重装系统后提示 BitLocker(磁盘加密)密钥查找及如何关闭

文章目录前言如何找到恢复秘钥&#xff0c;解锁磁盘1、打开链接&#xff1a;[https://support.microsoft.com/zh-cn/help/4026181/windows-10-find-my-bitlocker-recovery-key](https://support.microsoft.com/zh-cn/help/4026181/windows-10-find-my-bitlocker-recovery-key)2…

Nuxt3+ElementPlus构建打包部署手记

文章目录为何选Nuxt.js?工程package.json参考目录结构页面之间的关系几个主要命令动态组件获取后台数据SSR打包方式部署参考文档为何选Nuxt.js? 在前后端分离出现之前&#xff0c;传统的web页面都是服务端渲染的&#xff0c;如JSP、PHP、Python Django&#xff0c;还有各种模…

06【Filter】

文章目录06【Filter】一、过滤器简介1.1 Filter概述1.2 Filter的使用1.2.1 Filter快速体验1.2.2 XML配置Filter1.2.3 Filter的拦截规则1.3 Filter的生命周期1.3.1 Filter生命周期介绍1.3.2 Filter生命周期相关方法1.3.3 FilterConfig类1.4 Filter的拦截方式1.4.1 REQUEST1.4.2 …

Linux系统编程——管道

文章目录一、管道1.管道的特质2.管道的用法——pipe函数3.管道的读写行为4..管道的优劣二.实战练习&#xff1a;实现ls | wc -l 指令三、fifo实现非血缘关系进程间通信一、管道 1.管道的特质 实现原理: 内核借助环形队列机制&#xff0c;使用内核缓冲区实现。 特质: 1.伪文件…

接口测试 Mock 实战(二) | 结合 jq 完成批量化的手工 Mock

一、应用背景因为本章的内容是使用jq工具配合完成&#xff0c;因此在开始部分会先花一定的篇幅介绍jq机器使用&#xff0c;如果读者已经熟悉jq&#xff0c;可以直接跳过这部分。先来看应用场景&#xff0c;App 经常会有一些信息展示的列表页&#xff0c;比如商家的菜品、股票的…

真无线蓝牙耳机怎么选?分体式蓝牙耳机选购攻略及推荐

近年来&#xff0c;随着智能手机终端市场的崛起&#xff0c;无线蓝牙耳机的产销也随之呈持续增长的态势。真无线蓝牙耳机凭借其时尚、便捷性&#xff0c;迅速成为年轻人出门必备的数码单品之一。蓝牙耳机经过多年发展&#xff0c;其产品种类、品牌型号数不胜数。导致&#xff0…

springboot监听器的使用(ApplicationListener、SmartApplicationListener、@EventListener)

目录前言1. ApplicationListener1. 简单的全局监听2. 定时任务3. 监听自定义事件2. SmartApplicationListener1. 简单使用2. 方法介绍3. EventListener前言 监听器&#xff1a; 当某个事件触发的时候&#xff0c;就会执行的方法块。 springboot提供了两个接口来实现监听&…

Paddle进阶实战系列(一):保险文本视觉认知问答

保险文本视觉认知问答 1.项目介绍 1.1背景 随着人工智能技术的逐渐成熟&#xff0c;计算机视觉、语音、自然语言处理等技术在金融行业的应用从广度和深度上都在加速&#xff0c;这不仅降低了金融机构的运营和风险成本&#xff0c;而且有助于提升客户的满意度&#xff0c;比如…

Rhec第二次作业

两台机器&#xff1a;第一台机器作为客户端&#xff0c;第二台机器作为服务器&#xff0c;在第一台使用rhce用户免密登录第二台机器准备两台虚拟机并保证可以ping通网络&#xff0c;ip地址不一样第一台机器配置创建rhce用户在rhce用户上&#xff0c;创建密钥对并将公钥发送给第…

JDK源码(二)ConcurrentHashMap-JDK1.7

1.背景 并发编程中&#xff0c;ConcurrentHashMap是一个使用度非常高的数据结构。 优点: 线程安全相比于HashTable和Collections.synchronizedMap()效率高&#xff0c;使用了分段锁技术。 2.ConcurrentHashMap数据结构 Segment Segment继承了ReentrantLock&#xff0c;所以它…