param:
Param
是Parameters
的简写,意为参数。在ROS种,起到的作用是节点间共享数据。
实现的原理是将需要共享的数据存放到ROS Master
中,这样所有的节点都可以访问。
Param存储数据遵循的是YAML规范。
如果去简单的理解,可以认为是一个key
value
的组合,key
是string类型,value
的类型可以有多种。
value的类型有:
ROS 提供了命令行工具,供我们对Param
进行操作。
rosparam list
通过list
命令,可以查询出当前所有可共享的参数。
/rosdistro
/roslaunch/uris/host_ubuntu__40479
/rosversion
/run_id
rosparam get /run_id
Tip
通过get
命令可以获取要获取的值
rosparam set /run_id aaa
Tip
通过set
命令可以修改参数的值
rosparam delete /run_id
Tip
可以产出对应的key
rosparam dump abc.yml
Tip
dump
命令可以把当前的param导出为一个文件
rosparam load abc.yml
Tip
load
命令可以把yml
文件导入到param中
API使用
前言¶
我们在开发过程中,通常在API层级中是需要操作Param数据的,并且通Param进行数据操作
C++操作Param¶
获取所有参数名称¶
vector names;
if(node.getParamNames(names)) {
for(string name : names) {
ROS_INFO(name);
}
}
获取参数的值¶
node.getParam(name);
设置参数的值¶
node.setParam(name, value);
判断参数是否存在¶
node.hasParam(name)
Python操作Param¶
获取所有参数名称¶
names = rospy.get_param_names()
获取参数的值¶
rospy.get_param(name)
设置参数的值¶
node.set_param(name, value);
判断参数是否存在¶
node.has_param(name)
代码:
c++
/*-------------------------- 设置param --------------------------*/
node.setParam("/heihei",123);
/*-------------------------- param --------------------------*/
//获取所有的param
//定义vector保存所有的param的名字
vector names;
string value;
int a;
node.getParam("heihei",a);
ROS_INFO_STREAM("HEIHEI----"<
python:
#!/usr/bin/env python
# coding:utf-8
import rospy
import sys
if __name__ == '__main__':
# 创建节点
rospy.init_node("param_node_py")
rospy.loginfo('param----- py ---- {}'.format(sys.argv))
result = rospy.get_param_names()
for ele in result:
value = rospy.get_param(ele)
rospy.loginfo(value)
rospy.spin()
启动: launch
roslaunch demo_tf config.launch
URDF与xacro 制作模拟仿真 启动配置
启动: 仿真
roslaunch demo_tf config.launch mode:=geometry_box.urdf 后面参数自己改,不传的话默认geometry_box.urdf