roslaunch与param使用

43 篇文章 1 订阅
14 篇文章 0 订阅

param:

Param基本功能

什么是Param

ParamParameters的简写,意为参数。在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

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用`roslaunch`启动Gazebo,您需要先编写一个`.launch`文件,其中包含启动Gazebo所需的所有参数和节点。 以下是一个简单的例子: ```xml <launch> <arg name="world_file" default="$(find my_robot_description)/worlds/my_world.world"/> <arg name="robot_file" default="$(find my_robot_description)/urdf/my_robot.urdf"/> <param name="robot_description" command="$(find xacro)/xacro --inorder $(arg robot_file)"/> <param name="use_sim_time" value="true"/> <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-urdf -model my_robot -param robot_description -x 0 -y 0 -z 0"/> <node name="gazebo" pkg="gazebo_ros" type="gazebo" args="$(arg world_file)"/> </launch> ``` 在这个例子中,我们通过`<arg>`标签定义了两个参数:`world_file`和`robot_file`。这些参数的默认值是我们机器人描述包中的世界文件和URDF文件。 我们还定义了一个名为`robot_description`的ROS参数,其中包含了我们机器人的URDF描述。我们使用`$(find xacro)/xacro --inorder`命令将URDF文件中的xacro宏展开,并将结果作为参数值。 我们还设置了`use_sim_time`参数为`true`,以便Gazebo可以使用ROS仿真时间。 最后,我们启动了两个节点。第一个节点使用`gazebo_ros`包中的`spawn_model`命令将我们的机器人URDF模型加载到Gazebo中。第二个节点启动Gazebo仿真环境,并将`world_file`参数传递给它。 将上面的代码保存为`my_gazebo.launch`文件,然后在终端窗口中输入以下命令启动它: ``` roslaunch my_robot_description my_gazebo.launch ``` 这将启动Gazebo仿真环境,并将您的机器人加载到其中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_无往而不胜_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值