在ROS中使用参数时学习到roslaunch的使用方法

来源:互联网 发布:数据库系统概念电子书 编辑:程序博客网 时间:2024/06/11 03:34

转自:http://www.ncnynl.com/archives/201611/1061.html

       使用roslaunch文件来启动功能包的一个或多个节点肯定是非常方便的,也很好理解。可是,我在编写roslaunch文件后,运行时出现一个问题:说找不到某某功能包的某某节点,我怎么看都不像,参照网上博客,cmake,romake都试过了,就是不行。无奈翻看原来教程,发现落了一项工作没做。

       总结起来就是:下述情况下,进行roslaunch启动节点时,不用cmake,roamake等对功能包进行编译,只需对节点的文件(xx.cpp或xx.py)设置可执行权限就行!!!!!!(我就是没有)

        在当前情况是这样,launch文件内容简单,后续复杂的roslaunch方法,也许需要编译功能包,现在正在学习中......有错还望指正,谢谢!

       具体步骤如下:

(1)编写节点文件

$ roscd beginner_tutorials/scripts$ touch param_talker.py

    代码如下:

#!/usr/bin/env pythonimport rospyfrom std_msgs.msg import Stringdef param_talker():    rospy.init_node('param_talker')    # Fetch values from the Parameter Server. In this example, we fetch    # parameters from three different namespaces:    #    # 1) global (/global_example)    # 2) parent (/foo/utterance)    # 3) private (/foo/param_talker/topic_name)    # fetch a /global parameter    global_example = rospy.get_param("/global_example")    rospy.loginfo("%s is %s", rospy.resolve_name('/global_example'), global_example)        # fetch the utterance parameter from our parent namespace    utterance = rospy.get_param('utterance')    rospy.loginfo("%s is %s", rospy.resolve_name('utterance'), utterance)        # fetch topic_name from the ~private namespace    topic_name = rospy.get_param('~topic_name')    rospy.loginfo("%s is %s", rospy.resolve_name('~topic_name'), topic_name)    # fetch a parameter, using 'default_value' if it doesn't exist    default_param = rospy.get_param('default_param', 'default_value')    rospy.loginfo('%s is %s', rospy.resolve_name('default_param'), default_param)        # fetch a group (dictionary) of parameters    gains = rospy.get_param('gains')    p, i, d = gains['P'], gains['I'], gains['D']    rospy.loginfo("gains are %s, %s, %s", p, i, d)        # set some parameters    rospy.loginfo('setting parameters...')    rospy.set_param('list_of_floats', [1., 2., 3., 4.])    rospy.set_param('bool_True', True)    rospy.set_param('~private_bar', 1+2)    rospy.set_param('to_delete', 'baz')    rospy.loginfo('...parameters have been set')    # delete a parameter    if rospy.has_param('to_delete'):        rospy.delete_param('to_delete')        rospy.loginfo("deleted %s parameter"%rospy.resolve_name('to_delete'))    else:        rospy.loginfo('parameter %s was already deleted'%rospy.resolve_name('to_delete'))    # search for a parameter    param_name = rospy.search_param('global_example')    rospy.loginfo('found global_example parameter under key: %s'%param_name)        # publish the value of utterance repeatedly    pub = rospy.Publisher(topic_name, String, queue_size=10)    while not rospy.is_shutdown():        pub.publish(utterance)        rospy.loginfo(utterance)        rospy.sleep(1)        if __name__ == '__main__':    try:        param_talker()    except rospy.ROSInterruptException: pass

(2)编写完成后,保存,并设置可执行权限(一定要注意!!!!)
 

$ chmod +x param_talker.py


(3)编写启动文件,param_talker.launch文件中写如下代码

$ roscd beginner_tutorials/bringup$ touch param_talker.launch$ rosed beginner_tutorials param_talker.launch
    代码如下:

<launch>  <!-- set /global_example parameter -->  <param name="global_example" value="global value" />      <group ns="foo">    <!-- set /foo/utterance -->    <param name="utterance" value="Hello World" />    <param name="to_delete" value="Delete Me" />    <!-- a group of parameters that we will fetch together -->    <group ns="gains">      <param name="P" value="1.0" />      <param name="I" value="2.0" />      <param name="D" value="3.0" />          </group>      <node pkg="rospy_tutorials" name="param_talker" type="param_talker.py" output="screen">          <!-- set /foo/utterance/param_talker/topic_name -->      <param name="topic_name" value="chatter" />          </node>      </group>  </launch>
(4)启动launch文件

$ roslaunch beginner_tutorials param_talker.launch

注意:上述整个过程无须catkin_make或者rosmake!!!!





0 0