roslaunch与param使用

  • Post author:
  • Post category:其他


param:

Param基本功能

什么是Param




Param



Parameters

的简写,意为参数。在ROS种,起到的作用是节点间共享数据。

实现的原理是将需要共享的数据存放到

ROS Master

中,这样所有的节点都可以访问。

存储规范



Param存储数据遵循的是YAML规范。

如果去简单的理解,可以认为是一个

key


value

的组合,

key

是string类型,

value

的类型可以有多种。

value的类型有:

  • integer: 整数类型
  • boolean: bool类型
  • double: 小数类型
  • list: 集合列表类型
  • map: 字典类型
  • binary: 二进制数据类型

命令行工具



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

导出Param



rosparam dump abc.yml

Tip


dump

命令可以把当前的param导出为一个文件

导入Param



rosparam load abc.yml

Tip


load

命令可以把

yml

文件导入到param中

API使用

前言¶

我们在开发过程中,通常在API层级中是需要操作Param数据的,并且通Param进行数据操作

C++操作Param¶
获取所有参数名称¶

vector<string> 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<string> names;
    string value;
    int a;
    node.getParam("heihei",a);
    ROS_INFO_STREAM("HEIHEI----"<<a);

//    node.getParam("/turtlesim/background_b",value);
//    ROS_INFO_STREAM("turtlesim  key----------------- "<<value);
    //获取所有的param的名字
    if (node.getParamNames(names)) {
        //获取每一个key:value
        for (string ele:names) {
            ROS_INFO_STREAM("names----"<<ele);
            //前提 需要知道当前数据类型

//            //定义value
//            string value;
//            if(node.getParam(ele,value)){
//                ROS_INFO_STREAM("key "<<ele<<"  value  "<<value);
//            }
        }

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:

<launch>
    <!--
    pkg:包
    type:可执行程序名字  或者py文件名
    name:节点名
    -->
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"></node>
    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key"></node>
    <node pkg="demo_config" type="param" name="param_node"></node>
    <node pkg="demo_config" type="param.py" name="param_node_py"></node>
</launch>

<launch>
    <!--
    pkg:包
    type:可执行程序名字  或者py文件名
    name:节点名(可以和程序中节点名不同 ,最终以launch文件为准)
    如果通过launch文件启动,会自动启动ros master节点
    -->
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"></node>
    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key"></node>
    <node pkg="demo_config" type="param" name="aaa"></node>
    <node pkg="demo_config" type="param.py" name="param_node_py"></node>
</launch>
<launch>
    <!--
    remap

    -->
<!--    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"-->
<!--    respawn="true" respawn_delay="5"></node>-->
<!--    -->
<!--    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key"></node>-->
    <node pkg="demo_config" type="param" name="aaa" output="screen">
        <!--
        remap:修改topic的名字
        -->
        <remap from="/param_topic" to="/hahaha"></remap>
    </node>
<!--    <node pkg="demo_config" type="param.py" name="param_node_py"></node>-->
</launch>
<launch>
    <!--
    param
    -->
    <param name="jjj" value="456" type="int"></param>
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"></node>
    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key"></node>
    <node pkg="demo_config" type="param" name="param_node"></node>
    <node pkg="demo_config" type="param.py" name="param_node_py">
        <param name="haha" value="123" type="str"></param>
    </node>
</launch>
<launch>
    <!--
    param改变小乌龟颜色
    -->
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
        <param name="background_b" value="0" type="int"></param>
        <param name="background_g" value="0" type="int"></param>
        <param name="background_r" value="255" type="int"></param>
    </node>
</launch>
<launch>
    <!--
    arg
    -->
    <node pkg="demo_config" type="param.py" name="param_node_py" output="screen" args="a b c" ></node>
<!--    <node pkg="demo_config" type="param" name="param_node" output="screen" args="10 20"></node>-->
</launch>
<launch>
    <!--
    外置arg
    roslaunch demo_confimo07.launch bgb:=0 bgg:=255 bgr:=0
    -->
    <arg name="bgb" default="0"></arg>
    <arg name="bgg" default="0"></arg>
    <arg name="bgr" default="255"></arg>

    <node pkg="demo_config" type="param.py" name="param_node_py" output="screen" args="a b c" ></node>
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
        <param name="background_b" value="$(arg bgb)" type="int"></param>
        <param name="background_g" value="$(arg bgg)" type="int"></param>
        <param name="background_r" value="$(arg bgr)" type="int"></param>
    </node>
</launch>
<launch>
    <!--
    其他launch文件
    -->
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"></node>
</launch>
<launch>
    <!--
    启动demo08.launch 文件
    -->
    <!--启动demo08.launch 全路径-->
    <include file="$(find demo_config)/launch/demo08.launch"></include>
    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key"></node>

</launch>
<launch>
    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key"></node>
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node" ></node>
    <node pkg="demo_tf" type="turtle1_01_cpp" name="turtle1_cpp" output="screen"></node>
    <node pkg="demo_tf" type="turtle2_02_cpp" name="turtle2_cpp" output="screen" args="turtle2 back"></node>
    <!--<node pkg="demo_tf" type="turtle2_02_cpp" name="turtle3_cpp" output="screen" args="turtle3 up"></node>
    <node pkg="demo_tf" type="turtle2_02_cpp" name="turtle4_cpp" output="screen" args="turtle4 do"></node>-->
    <!--<node pkg="rviz" type="rviz" name="rviz" args="-d $(find demo_tf)/rviz/rviz.rviz"></node>-->
</launch>

启动: launch

roslaunch demo_tf config.launch


URDF与xacro 制作模拟仿真 启动配置

<launch>
    <arg name="model" default="geometry_box.urdf"/>
    <arg name="gui" default="true" />
    <arg name="rvizconfig" default="$(find demo_urdf)/rviz/urdf.rviz" />
 
    <param name="robot_description" command="$(find xacro)/xacro --inorder $(find demo_urdf)/urdf/$(arg model)" />
    <param name="use_gui" value="$(arg gui)"/>
 
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
    <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />
</launch>

启动: 仿真

roslaunch demo_tf config.launch mode:=geometry_box.urdf 后面参数自己改,不传的话默认geometry_box.urdf



版权声明:本文为qq_15204179原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。