zoukankan      html  css  js  c++  java
  • ROS向节点传递参数的方法总结(rosrun,launch) + (参数服务器,main函数参数)

    0. 写在最前面

    ROS的节点有很多中调用方式,包括rosrun,launch,直接运行等,向节点内传递参数的方式也有很多,在此做个总结。

    左侧专栏还在更新其他ROS实用技巧哦,觉得写得有见解,还不错,关注一波?

    1. rosrun + 参数服务器传递

    ros::init(argc, argv, "imu2txt");
    ros::NodeHandle nh("~");
    std::string file_name;
    nh.param<std::string>("file_name", file_name, "./imu_data.txt");
    

    首先在节点初始化之后获取参数服务器的参数,并设置初始值,如上面的程序就是在参数服务器的空间(即节点本身)获取名字为"file_name"的参数放到std::string file_name中,默认参数为后面那个。

    接着就可以rosrun了。下面是命令
    rosrun package node _parameter:=value

    在我们这里就是rosrun datatxt imu2txt _file_name:=~/Documents/test.txt就可以将节点内的参数改为想要的值了。

    注意: string不需要加双引号,string第一个字符不能是数字

    2. roslaunch + 参数服务器传递

    同样是上面的例子,我们如果想通过roslaunch来调用的话,可以像下面这样,将参数放在node之间。

    <launch>
        <node name="imu2txt" pkg="data2txt" type="imu2txt" respawn="false" output="screen" >
            <param name="file_name"         type="string" value="/home/night_fury/Documents/record_bags/calibration/imudata_to_wall.txt"/>  
        </node>
    </launch>
    

    3. rosrun + main参数传递

    int main(int argc, char** argv)

    main函数有两个参数argc, argv。argc = length(argv),argv[0]是程序的名字,argv[1]到argv[argc - 1]是传递给程序的参数,按空格分割参数后以char指针的形式存储。这是C、C++的特性,跟ros无关,你编写的C++程序也可以这么用。你编写的ros程序甚至可以直接运行,并通过这种方式传递参数,而不用rosrun或者roslaunch。

    比如我们常用的map_server、rosbag就是用的这种参数传递方式。

    rosrun map_server map_saver -f ~/Documents/test或者直接找到二进制文件后map_saver -f ~/Documents/test

    像上面这样运行程序,那么

    argc=3  
    argv[0]="map_server"  
    argv[1]="-f"  
    argv[0]="test"  
    

    你就可以在程序中使用这些参数了。

    4. roslaunch + main参数传递

    续上,如果使用main参数传递,那在roslaunch应该怎么样呢?如下,使用args

    <launch>
        <node name="map_server" pkg="map_server" type="map_server" args="$(find costmap_2d)/test/willow-full-0.025.pgm 0.025" />
        <node name="rosplay" pkg="rosbag" type="play"
            args="-s 5 -r 1 --clock --hz=10 $(find costmap_2d)/test/simple_driving_test_indexed.bag" />
    </launch>
    

    参考

    http://wiki.ros.org/rosbash#rosrun


    喜欢我的文章的话Star一下呗Star

    版权声明:本文为白夜行的狼原创文章,未经允许不得以任何形式转载

  • 相关阅读:
    作为另一个函数的值(读书摘)
    算法-二分查找与二叉排序树
    算法-图
    算法-二叉树
    算法-分治
    算法-回溯
    算法-动态规划
    算法-贪心
    算法-堆
    算法-栈,队列
  • 原文地址:https://www.cnblogs.com/HaoQChen/p/11048581.html
Copyright © 2011-2022 走看看