科研向(仿真验证) ROS 学习笔记二 C:ROS 通信机制 —— 参数服务器(C++)

本文介绍了ROS中的参数服务器机制,用于不同节点间的数据共享。通过rosparam命令进行参数的设置、获取、删除操作,并展示了C++和Python的示例代码。此外,还列举了与参数相关的ROS节点管理命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROS 通信机制
ROS是进程(也称为 Nodes)的分布式框架。 这些进程甚至还可分布于不同主机协同工作,所以结点之间如何通信非常重要!

基本通信机制三:参数服务器(参数共享模式)

以共享的方式实现不同节点之间数据交互的通信模式(基于RPC协议)。

ROS Master 作为一个公共容器保存参数,Talker 可以向容器中设置参数,Listener 可以获取参数。

  1. , : rosparam list 查看全部的参数,rosparam get xxx 查看 xxx 参数的值

    #include <string>
    #include <ros/ros.h>
    #include <std_srvs/Empty.h>
    int main(int argc, char **argv)
    {
    	int red, green, blue;
    	 // ROS node initialize
    	 ros::init(argc, argv, "parameter_config");
    	 // create node handler
    	 ros::NodeHandle node;
    	 // get the background color parameters
    	ros::param::get("/turtlesim/background_r", red);
    	ros::param::get("/turtlesim/background_g", green);
    	ros::param::get("/turtlesim/background_b", blue);
    	ROS_INFO("Get Backgroud Color[%d, %d, %d]", red, green, blue);
    	// set the background color parameters
    	ros::param::set("/turtlesim/background_r", 255);
    	ros::param::set("/turtlesim/background_g", 60);
    	ros::param::set("/turtlesim/background_b", 255);
    	ROS_INFO("Set Backgroud Color[255, 60, 255]");
    	 // get the background color parameters
    	ros::param::get("/turtlesim/background_r", red);
    	ros::param::get("/turtlesim/background_g", green);
    	ros::param::get("/turtlesim/background_b", blue);
    	ROS_INFO("Re-get Backgroud Color[%d, %d, %d]", red, green, blue);
    	// call the service to refresh the background color
    	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;
    }
    
    
  2. :

    #! /usr/bin/env python
    import rospy  # use rospy,delete_param()
    
    
    if __name__ == "__main__":
        rospy.init_node("delete_param")
    
        try:
            rospy.delete_param("xxx")
        except Exception as e:
            rospy.loginfo("ERROR!")
    
  3. :

    #! /usr/bin/env python
    import rospy
    
    
    if __name__ == "__main__":
        rospy.init_node("get_param")
    
        xxx_1 = rospy.get_param("xxx",default=999)  # method 1: get_param
        xxx_2 = rospy.get_param_cached("xxx")       # method 2: get_param_cached (fast)
        flag = rospy.has_param("xxx")               # method 3: has_param (T or F)
        key = rospy.search_param("xxx")             # method 4: search_param
        names = rospy.get_param_names()             # method 5: get_param_names (all param names)
    
* 参数相关命令
rosparam set para_xxx x # 设置参数
rosparam get para_xxx   # 获取参数
rosparam load xxx.yaml  # 从外部文件加载参数
rosparam dump xxx.yaml  # 将参数写出到外部文件
rosparam list    		# 列出所有参数
rosparam delete    		# 删除参数
其他相关常用命令 rosnode:
rosnode ping /node  # 测试到节点的连接状态
rosnode list    	# 列出活动节点
rosnode info /node  # 打印节点信息
rosnode machine 	# 列出指定设备上节点
rosnode kill /node  # 杀死某个节点
rosnode cleanup 	# 清除不可连接的节点(已经死亡但是被当成活着的僵尸节点)

参考资料如下ROS理论与实践

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值