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

    xiaoxiao2021-03-25  104

    转自: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 python import rospy from std_msgs.msg import String def 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!!!!

    转载请注明原文地址: https://ju.6miu.com/read-20564.html

    最新回复(0)