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

系列文章目录 第一章 ROS空间创建、helloworld的实现、开启多个节点
第二章 话题通信
第三章 服务通信
第四章 参数服务器
第五章 常用指令
第六章 通信机制实操

文章目录

  • 系列文章目录
  • 前言
  • 一、参数服务器是什么?
  • 二、使用步骤
    • 1.参数服务器新增(修改)参数在工作空间的src目录下新建功能包
    • 2.参数服务器获取参数
    • 3.参数服务器删除参数
  • 总结

前言 现在大二,之前大一有幸参加了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 python3import 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 rospyif __name__ == "__main__": rospy.init_node("get_param_p")#获取参数 int_value = https://www.it610.com/article/rospy.get_param("p_int",10000) #第一个参数是查询对象。第二个参数是默认值。 double_value = https://www.it610.com/article/rospy.get_param("p_double") bool_value = https://www.it610.com/article/rospy.get_param("p_bool") string_value = https://www.it610.com/article/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 rospyif __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学习|在Jetson Nano上学习ROS的记录(版本Ubuntu18.04,课程来源赵虚左老师的《ROS理论与实践》)第四章 参数服务器】以上就是今天要讲的内容,本文仅仅简单记录了ROS的参数服务器,如果有问题请在博客下留言或者咨询邮箱:layraliu@foxmail.com。

    推荐阅读