【ROS入门篇·五】launch文件使用 & 向节点传递参数

快速链接:【ROS入门篇】ROS学习简介

一、launch文件使用

1.1 launch文件简介

·launch文件能够同时启动一个ROS Master和多个Node

·launch文件的标签

      
        
     
     
         
       
    
       
       
  
     

1.2 launch文件基本示例


    
    
    
    
    
    

    
      

     
     
        
        
        
        
        
        
    

    
    
        
        
    

    
    

二、ROS中Parameter server机制

【ROS入门篇·五】launch文件使用 & 向节点传递参数_第1张图片

  •  用于存储节点参数,以键值对的形式存储,全局共享

2.1 Parameter server中参数维护方式

1) 命令行维护

【ROS入门篇·五】launch文件使用 & 向节点传递参数_第2张图片

2) launch文件进行读写

  • 写入单个参数到参数服务器





  • 从.yaml文件批量写入参数到参数服务器

3) 节点源码内进行读写(C++)

C++节点中实现参数服务器的读写有两套API系统:

  • ros::NodeHandle
/**
 * C++中分别通过ros::NodeHandle实现参数服务器中参数的读写  
 **/

#include "ros/ros.h"

int main(int argc, char *argv[])
{
    //初始化ros节点
    ros::init(argc,argv,"param_demo_node");
    
    //创建ros节点句柄
    ros::NodeHandle nh;
    string node_param;
    std::vector param_names;
    
    // 新增参数到参数服务器中
    nh.setParam("param_1", 1.0);

    // 读取参数
    // 如果参数服务器中参数"param_2"存在, 把"param_2"的值传递给变量node_param;如果"param_2"不存在,就传递默认值"hahaha"
    nh.param("param_2",node_param,"hahaha");

    // 如果参数"param_2"存在,返回true,并赋值给变量node_param;如果"param_2"不存在,返回false,不赋值
    nh.getParam("param_2", node_param);

    //其他功能
    nh.getParamNames(param_names);
    nh.hasParam("param_2");
    nh.searchParam("param_2",node_param);
}
  • ros::param
/**
 * C++中分别通过ros::param实现参数服务器中参数的读写  
 **/

#include "ros/ros.h"

int main(int argc, char *argv[])
{
    //初始化ros节点
    ros::init(argc,argv,"param_demo_node");
    
    string node_param;
    std::vector param_names;
    
    // 新增参数到参数服务器中
    ros::param::set("param_1", 1.0);

    // 读取参数
    // 如果参数服务器中参数"param_2"存在, 把"param_2"的值传递给变量node_param;如果"param_2"不存在,就传递默认值"hahaha"
    node_param = ros::param::param("param_2","hahaha");

    // 如果参数"param_2"存在,返回true,并赋值给变量node_param;如果"param_2"不存在,返回false,不赋值
   ros::param::get("param_2", node_param);

    //其他功能
    ros::param::getParamNames(param_names);
    ros::param::has("param_2");
    ros::param::search("param_2",node_param);
}

三、向ROS节点传递参数的多种方法(C++)

3.1 通过参数服务器的方式传递

  • 通过launch文件启动节点

    
        
    
  • 通过rosrun启动节点,参数前面加_,用:=的方式来赋值
rosrun process_velodyne velodyne_sub_pub _velodyne_frame_id:="velodyne"
  • 节点中读取参数(见2.1节内容)

3.2 通过main()函数参数的形式传递

  • 通过launch文件启动节点

    
  • 通过rosrun启动节点,参数通过空格隔开
rosrun proess_velodyne velodyne_sub_pub arg1 arg2
  • 节点中读取参数

在节点中main()函数内,argv[0]是节点名称,argv[1], argv[2]...依次是输入的参数

Q:在使用rosrun/launch向main()函数传递参数时,-d, -r, --hz这类是什么意思?是指定名名称的参数么?


    

你可能感兴趣的:(ROS入门篇,自动驾驶,人工智能,机器学习)