在Jetson Nano上学习ROS的记录(版本Ubuntu18.04,课程来源赵虚左老师的《ROS理论与实践》)第四章 参数服务器

本文详细介绍了ROS中的参数服务器,包括其作用、使用步骤,如新增、获取和删除参数,并通过Python示例代码展示了具体操作。参数服务器是ROS中不同节点间数据共享的重要工具,适用于存储静态的非二进制简单数据。
摘要由CSDN通过智能技术生成

系列文章目录

第一章 ROS空间创建、helloworld的实现、开启多个节点
第二章 话题通信
第三章 服务通信
第四章 参数服务器
第五章 常用指令
第六章 通信机制实操
第七章 ROS通信机制进阶(常用API、Python模块的导入)
第八章 元功能包、节点运行管理launch文件(teleop_twist安装方法)
第九章 重名问题、分布式通信
第十章-第一节 TF坐标变换(内含PyKDL 和PyInit__tf2功能缺失等解决)
第十章-第二节 TF坐标变换实操
第十章-第三节 rosbag、rqt工具箱
第十一章-第一节 机器人系统仿真(URDF相关)
第十一章-第二节 机器人系统仿真(Gazebo相关)
第十二章 机器人导航(仿真)


前言

现在大二,之前大一有幸参加了2021的国赛,很壮烈的拿了个江苏赛区的二等奖。但发现无人机这个题,真的是往堆钱上走了。不上ROS不行,现在来记录一下一个纯小白学习ROS的过程和遇到的问题。防止学弟、学妹们再走我走过的弯路。板子用的是学长给的Jetson Nano(4GB),版本是Ubuntu18.04(已配置好基础ROS所需配置)。

一、参数服务器是什么?

参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据,关于参数服务器的典型应用场景如下:

导航实现时,会进行路径规划,比如: 全局路径规划,设计一个从出发点到目标点的大致路径。本地路径规划,会根据当前路况生成时时的行进路径。

上述场景中,全局路径规划和本地路径规划时,就会使用到参数服务器:

路径规划时,需要参考小车的尺寸,我们可以将这些尺寸信息存储到参数服务器,全局路径规划节点与本地路径规划节点都可以从参数服务器中调用这些参数。

参数服务器,一般适用于存在数据共享的一些应用场景。

注意:参数服务器不是为高性能而设计的,因此最好用于存储静态的非二进制的简单数据
参数可使用数据类型:

  • 32-bit integers #四字节的int

  • booleans #true false

  • strings

  • doubles

  • iso8601 dates #时间数据

  • lists

  • base64-encoded binary data

  • 字典

二、使用步骤

1.参数服务器新增(修改)参数在工作空间的src目录下新建功能包

  1. 选定 src 右击 —> create catkin package

  2. 设置包名 添加依赖
    输入roscpp rospy std_msgs
    快捷键 ctrl + shift + B 调用编译

  3. 在功能包下创建scripts文件夹,在文件夹里创建.py文件
    代码如下:

#! /usr/bin/env python3

import rospy
"""
    参数服务器操作之新增与修改(二者API一样)_Python实现:
"""
if __name__ == "__main__":
    #初始化ros节点
    rospy.init_node("param_set_p")
    #新增参数
    rospy.set_param("type_p","xiao_huang_che")   #参数1:你要注册的参数的键,参数2:你要注册的参数的值
    rospy.set_param("radius_p","0.15")
    #修改参数

  1. 配置camakelists
    162行:
catkin_install_python(PROGRAMS
  scripts/demo01_param_set_p.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
  1. 添加可执行权限 编译
    启动rescore
    新开一个命令行source ./devel/setup.bash
rosrun plumbing_param_servr demo01_param_set_p.py

新开一个命令行

source ./devel/setup.bash
rosparam list
rosparam get type_p

2.参数服务器获取参数

  1. 在scripts里创建.py文件
    代码如下:
#! /usr/bin/env python3

"""
    参数服务器操作之查询_Python实现:    
        get_param(键,默认值)
            当键存在时,返回对应的值,如果不存在返回默认值
        get_param_cached
        get_param_names
        has_param
        search_param
"""

import rospy

if __name__ == "__main__":
    rospy.init_node("get_param_p")

    #获取参数
    int_value = rospy.get_param("p_int",10000)
    #第一个参数是查询对象。第二个参数是默认值。
    double_value = rospy.get_param("p_double")
    bool_value = rospy.get_param("p_bool")
    string_value = rospy.get_param("p_string")
    p_list = rospy.get_param("p_list")
    p_dict = rospy.get_param("p_dict")

    rospy.loginfo("获取的数据:%d,%.2f,%d,%s",
                int_value,
                double_value,
                bool_value,
                string_value)
    for ele in p_list:
        rospy.loginfo("ele = %s", ele)

    rospy.loginfo("name = %s, age = %d",p_dict["name"],p_dict["age"])

    # get_param_cached   效率高 如果此参数已经查询过了,他就不去参数服务器里取数据了,而是从缓存里取数据
    int_cached = rospy.get_param_cached("p_int")
    rospy.loginfo("缓存数据:%d",int_cached)

    # get_param_names     获取所以参数的键的集合
    names = rospy.get_param_names()
    for name in names:
        rospy.loginfo("name = %s",name)

    rospy.loginfo("-"*80)

    # has_param    判断某个键是否存在
    flag = rospy.has_param("p_int")
    rospy.loginfo("包含p_int吗?%d",flag)

    # search_param  判断某个键是否存在,如果存在会返回键名
    key = rospy.search_param("p_int")
    rospy.loginfo("搜索的键 = %s",key)
  1. 配置camakelists
    162行:
catkin_install_python(PROGRAMS
  scripts/demo01_param_set_p.py
  scripts/demo02_param_get_p.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
  1. 添加可执行权限 编译
    启动rescore
    新开一个命令行
source ./devel/setup.bash
rosrun plumbing_param_servr demo01_param_set_p.py
  1. 新开一个命令行
source ./devel/setup.bash
rosrun plumbing_param_servr demo02_param_get_p.py

3.参数服务器删除参数

  1. 在scripts里创建.py文件
    代码如下:
#! /usr/bin/env python3
"""
    参数服务器操作之删除_Python实现:
    rospy.delete_param("键")
    键存在时,可以删除成功,键不存在时,会抛出异常
"""
import rospy

if __name__ == "__main__":
    rospy.init_node("delete_param_p")

    try:
        rospy.delete_param("p_int")     #参数1是参数名
    except Exception as e:
        rospy.loginfo("删除失败")
  1. 配置camakelists
    162行:
catkin_install_python(PROGRAMS
  scripts/demo01_param_set_p.py
  scripts/demo02_param_get_p.py
  scripts/demo03_param_del_p.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
  1. 添加可执行权限 编译
    启动rescore
    新开一个命令行
source ./devel/setup.bash
rosrun plumbing_param_servr demo01_param_set_p.py
  1. 新开一个命令行
source ./devel/setup.bash
rosrun plumbing_param_servr demo03_param_del_p.py

总结

以上就是今天要讲的内容,本文仅仅简单记录了ROS的参数服务器,如果有问题请在博客下留言或者咨询邮箱:layraliu@foxmail.com。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值