ROS参数服务器增删改查实操Python

ROS通信机制包括话题通信、服务通信和参数服务器三种通信方式,各原理及代码实现如下表

在这里插入图片描述

功能博客链接说明
VScode配置 ROS 环境VScode创建ROS项目 ROS集成开发环境使用VScode使用配置了ROS开发环境,实现ROS开发的第一步
话题通信理论ROS话题通信流程理论介绍了话题通信机制的原理
ROS话题通信机制实操C++ROS话题通信机制实操C++手把手的用C++实现了话题通信机制
ROS话题通信机制实操PythonROS话题通信机制实操Python手把手的用Python实现了话题通信机制
ROS话题通信流程自定义msg格式ROS话题通信流程自定义msg格式介绍了如何准备话题通信机制自定义msg数据格式,及相关配置
ROS话题通信机制自定义msg实战C++ROS话题通信机制自定义msg实战C++手把手的用C++实现了话题通信机制自定义msg数据通信
ROS话题通信机制自定义msg实战PythonROS话题通信机制自定义msg实战Python手把手的用Python实现了话题通信机制自定义msg数据通信
服务通信理论ROS服务通信流程理论介绍了服务通信机制的原理
ROS服务通信自定义srvROS服务通信自定义srv介绍了如何准备服务通信机制自定义srv数据格式,及相关配置
ROS服务通信机制实操C++ROS服务通信机制实操C++手把手的用C++实现了服务通信机制
ROS服务通信机制实操PythonROS服务通信机制实操Python手把手的用Python实现了话题通信机制
参数服务器理论ROS参数服务器理论模型介绍了参数服务器的原理
ROS参数服务器增删改查实操C++ROS参数服务器增删改查实操C++用 C++ 实现了参数服务器的的增删改查操作
ROS参数服务器增删改查实操PythonROS参数服务器增删改查实操Python用 Python 实现了参数服务器的的增删改查操作

环境准备

  • 在plumbing_param_server功能包下新建一个scripts文件夹

    在这里插入图片描述

  • 在scripts文件夹添加.py文件

    在这里插入图片描述

  • 编辑配置文件
    修改 plumbing_param_server功能包下的CMakeLists.txt,找到catkin_install_python,修改成如图所示:
    在这里插入图片描述

  • 给.py文件添加可执行文件
    进入到 scripts 文件下,打开Terminal,执行 chmod +x *.py 对demo_param_set_p.py、 demo_param_get_p.py 、 demo_param_del_p.py文件添加可执行的权限
    在这里插入图片描述

参数服务器新增(修改)参数

  • 新增参数方法
    调用set_param函数

    rospy.set_param("键","值")
    
  • 代码实现

    #! /usr/bin/env python3
    import rospy
    
    """
        参数服务器操作之新增与修改(二者API一样)_Python实现:
    """
    
    
    if __name__ == "__main__":
        rospy.init_node("param_set_p")
    
        # 设置各种类型参数
        rospy.set_param("p_int",10)  # 整形类型
        rospy.set_param("p_double",3.14)  # 浮点类型
        rospy.set_param("p_bool",True)    # bool类型
        rospy.set_param("p_string","hello python")  # 字符串类型
        rospy.set_param("p_list",["hello","haha","xixi"])  # 列表
        rospy.set_param("p_dict",{"name":"hulu","age":8})  # 字典
    
        # 修改
        rospy.set_param("p_int",100)  # 修改参数值,和新增一样,设置不同的值即可
    

修改参数值,和新增一样,设置不同的值即可

参数服务器获取参数

  • 查询参数

    • rospy.get_param(“键”, “默认值”)
      键存在,返回对应的键的值,否则返回默认值,默认值可以不设置

      val = rospy.get_param("p_int", 0.5)
      
    • rospy.get_param_cached(“键”, “默认值”)
      是对rospy.get_param的优化,如果之前查询过,就会有缓存,rospy.get_param_cached会优先查询缓存,如果缓存没有,再去参数中查找,这样就提高了查询效率。
      键存在,返回对应的键的值,否则返回默认值

      val = rospy.get_param_cached("p_int", 0.5)
      
    • rospy.get_param_names()
      获取所有参数服务器中的键

      names = rospy.get_param_names()
      for name in names:
          rospy.loginfo("name = %s",name)
      
    • rospy.has_param(“键”)
      判断某个键是否存在,存在返回true,否则返回false

      flag = rospy.has_param("p_int")
      if (flag):
      	 rospy.loginfo("p_int键存在")
      else:
      	rospy.loginfo("p_int键不存在")
      	
      
    • rospy.search_param(“键”)
      查询某个键是否存在,如果存在返回键名,否则返回空

      key = rospy.search_param("p_int")
      rospy.loginfo("搜索的键 = %s",key)
      
  • 代码实现

    #! /usr/bin/env python3
    import rospy
    
    """
        参数服务器操作之查询_Python实现:    
            get_param(键,默认值)
                当键存在时,返回对应的值,如果不存在返回默认值
            get_param_cached(键,默认值)
            	当键存在时,返回对应的值,如果不存在返回默认值
            get_param_names
            	获取所有参数服务器中的键
            has_param(键)
            	判断某个键是否存在,存在返回true,否则返回false
            search_param
            	查询某个键是否存在,如果存在返回键名,否则返回空
    """
    
    if __name__ == "__main__":
        rospy.init_node("get_param_p")
    
        # 1.get_param
        
        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"])
    
        # 2.get_param_cached
        int_cached = rospy.get_param_cached("p_int")
        rospy.loginfo("缓存数据:%d",int_cached)
    
        # 3.get_param_names
        names = rospy.get_param_names()
        for name in names:
            rospy.loginfo("name = %s",name)
    
        rospy.loginfo("-"*80)
    
        # 4.has_param
        flag = rospy.has_param("p_int")
        rospy.loginfo("包含p_int吗?%d",flag)
    
        # 5.search_param
        key = rospy.search_param("p_int")
        rospy.loginfo("搜索的键 = %s",key)
    

参数服务器删除参数

  • 删除参数
    rospy.delete_param(“键”)
    键存在时,可以删除成功,键不存在时,会抛出异常

    try:
        rospy.delete_param("p_int")
    except Exception as e:
        rospy.loginfo("删除的参数不存在")
    
  • 代码实现

    #! /usr/bin/env python3
    import rospy
    
    """
        参数服务器操作之删除_Python实现:
        rospy.delete_param("键")
        键存在时,可以删除成功,键不存在时,会抛出异常
    """
    
    if __name__ == "__main__":
        rospy.init_node("delete_param_p")
    
        try:
            rospy.delete_param("p_int")
        except Exception as e:
            rospy.loginfo("删除的参数不存在")
    
  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 ROS 参数服务器来设置全局参数是一种在所有节点中共享参数值的方法。可以通过运行以下命令在 ROS 参数服务器中设置 `rosout_disabled` 参数的默认值,从而禁用所有节点的日志记录功能: ``` rosparam set /rosout_disabled true ``` 这样,所有节点都可以从 ROS 参数服务器获取 `rosout_disabled` 参数的值,并将其用作日志记录的开关。如果需要启用日志记录功能,只需要将参数值设置为 `false` 即可。 如果需要查看 `rosout_disabled` 参数的值,可以运行以下命令: ``` rosparam get /rosout_disabled ``` 如果需要在 launch 文件中使用 ROS 参数,可以在节点定义中添加以下参数设置: ```xml <node name="my_node" pkg="my_package" type="my_node_type"> <rosparam param="rosout_disabled" value="true" /> </node> ``` 在这个例子中,`<rosparam>` 标签用于设置 ROS 参数,其中 `param` 属性设置参数名称,`value` 属性设置参数值。将 `rosout_disabled` 参数设置为 `true`,就可以禁用节点的日志记录功能。在节点启动时,节点会从 ROS 参数服务器获取 `rosout_disabled` 参数的值,并将其用作日志记录的开关。 需要注意的是,如果在同一主机上运行多个 ROS 主节点,则需要在每个主节点上设置 `rosout_disabled` 参数的值。另外,如果在运行节点之前修改ROS 参数服务器中的参数值,则需要重新启动所有节点才能生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值