ROS参数服务器实现及-|常用命令|(八)C++、Python实现

目录

简介

理论模型

 C++实现

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

 实现参数服务器查询

 参数服务器删除实现

 Python实现

实现服务器新增修改参数 

 实现服务器查询参数

参数服务器的删除实现

常用命令

rosnode 

rostopic 

 rosmsg

rosservice

rossrv

 rosparam



简介

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

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

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

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

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

 

理论模型

 

 因为用的是rpc协议所以并不高效

 

 

iso8601 dates是日期类的数据

 C++实现

 新建功能包

 

 然后回车 输入依赖roscpp rospy std_msgs

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

然后新建文件

 写入以下代码

修改CMakeLists

 

然后编译

然后启动终端执行 

 

可以看到参数传入了

 

 还可以查到参数信息

接下来实现修改参数

可以看到键是一样的

所以后面的覆盖掉前面的键值实际上就是实现了修改

 测试

被改成了0.2

 实现参数服务器查询

 新建文件

 然后修改CMakeLists

然后输入以下代码测试查询功能

 编译

然后测试

 测试getparam

 打开终端

 测试getparamnames

 打开终端

成功遍历

 

 

 测试ros::param

 终端

 参数服务器删除实现

新建文件

 

 修改配置

 复制以下代码

/* 
    参数服务器操作之删除_C++实现:

    ros::NodeHandle
        deleteParam("键")
        根据键删除参数,删除成功,返回 true,否则(参数不存在),返回 false

    ros::param
        del("键")
        根据键删除参数,删除成功,返回 true,否则(参数不存在),返回 false


*/
#include "ros/ros.h"


int main(int argc, char *argv[])
{   
    setlocale(LC_ALL,"");
    ros::init(argc,argv,"delete_param");

    ros::NodeHandle nh;
    bool r1 = nh.deleteParam("nh_int");
    ROS_INFO("nh 删除结果:%d",r1);

    bool r2 = ros::param::del("param_int");
    ROS_INFO("param 删除结果:%d",r2);

    return 0;
}

然后

ctrl shift b编译

删除成功

 Python实现

新建文件夹新建文件

实现服务器新增修改参数 

复制以下代码

#! /usr/bin/env python
"""
    参数服务器操作之新增与修改(二者API一样)_Python实现:
"""

import rospy

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

    # 设置各种类型参数
    rospy.set_param("p_int",10)
    rospy.set_param("p_double",3.14)
    rospy.set_param("p_bool",True)
    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)

修改配置

然后添加执行权限

 

 然后编译

然后启动命令行

 

可以看到运行成功 

 实现服务器查询参数

新建文件

 

 添加可执行权限

 配置CMakeLists

 然后编译

然后打开终端测试

 

 测试成功

参数服务器的删除实现

新建文件

 复制以下代码

#! /usr/bin/env python
"""
    参数服务器操作之删除_Python实现:
    rospy.delete_param("键")
    键存在时,可以删除成功,键不存在时,会抛出异常
"""
import rospy

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

    try:
        rospy.delete_param("p_int")
    except Exception as e:
        rospy.loginfo("删除失败")

 添加执行权限

配置CMakeLists

 

 编译

打开终端

成功删除

常用命令

rosnode 

 

rostopic 

 

 rosmsg

 

 

打开消息发布方和订阅方

 

这是查看正在用的消息类型 

 其实就是功能包下的定义了一个消息类型

所以rosmsg显示时要调用这个自定义消息文件来显示消息

 发布方调用

 

rosservice

 

 

以上是消息列表

 

这里是作为客户端

注意要在节点后输入type消息类型

然后按Tab补全

然后修改消息发布

 

 

这里是显示节点信息

然后里面的type就是上面要补全要用的

rossrv

 以下是显示所有服务消息

 

显示对应节点的srv消息

注意:如果消息是自定义的,要先进入工作空间,然后刷新环境变量才能找到

 rosparam

 

 

参数服务器里的数据

增加了一个参数

 

 

 删除参数

 

创建了一个yaml文件 

其中就包括了我们设置的参数

关掉roscore再启动

 

 

此时可以看到参数width和length这两个参数被释放掉了

此时想要加载回来

 以上是从yaml释放回来

然后又可以读取到了

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值