(八) .launch文件 ---編寫簡單的啟動腳本文件


下面我們將介紹,如何編寫一個啟動腳本程序:(.launch文件)

還記得我們在 創建ROS軟件包教程 中創建的第一個程序包(beginner_tutorials)嗎,現在我們要使用它。

beginner_tutorials 軟件包里新建一個名為 launch 的文件夾,(用來保存 launch 啟動腳本的):

$ roscd  beginner_tutorials
$ mkdir launch
$ cd launch
$ gedit turtlemimic.launch    #對其進行編輯

添加下面的代碼:

<launch>
        <group ns="turtlesim1">
                <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
        </group>

        <group ns="turtlesim2">
                <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
        </group>
</launch>

解釋程序:

上面的代碼,創建了2個 ros 節點, 並以不同命名空間標簽區分,所以兩個節點的名字都是一樣的也沒關系。

  • <launch> : 這個標簽是其他標簽的根標簽,簡單的說,它就是其他標簽的容器
  • <group> : 它可以做成一個組, 簡單的比喻, 就像是 C++里面的namespace一樣,並且這個標簽里的”ns” 指的就是:namespace(命名空間)。
  • <node> : 這個標簽的效果:就是在終端中使用 rosrun 命令來啟動一個節點。 “pkg”參數:軟件(或程序)包名。

如何運行這個 launch 文件: (運行腳本文件,不像運行rosrun命令,不需要提前在一個終端中運行 roscore 命令。如果你沒有啟動roscore命令,這個roslaunch 會自動啟動 /rosout 節點;如果你先前啟動了roscore,這個roslaunch就不會再啟動/rosout節點了。)

 

運行啟動文件:

$ roslaunch beginner_tutorials turtlemimic.launch

執行完這個語句后,你會看到彈出了兩個一樣的窗口,如下圖所示。這就是這個啟動文件的效果:創建了 2個 小海龜節點。

這里寫圖片描述

 


現在,我們讓:turtlesim2命名空間中的 turtle1 海龜的所有動作都模仿 turtlesim1命名空間 中的 turtle1 海龜。
所有我們需要再在 turtlemimic.launch 文件中啟動一個 模仿節點

什么叫 模仿 : 就是如果我們控制 /turtlesim1/turtle1 小海龜,那么 /turtlesim2/turtle1 就跟着動。

重新打開 turtlemimic.launch 文件中,我們再在這個文件中的<launch></launch> 標簽里面,添加下面的代碼:

        <node pkg="turtlesim" name="mimic" type="mimic"> <remap from="input" to="turtlesim1/turtle1" /> <remap from="output" to="turtlesim2/turtle1" /> </node>

完整的程序是下面這個樣子的:

<launch>
        <group ns="turtlesim1">
                <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
        </group>

        <group ns="turtlesim2">
                <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
        </group>

        <node pkg="turtlesim" name="mimic" type="mimic">
                <remap from="input"  to="turtlesim1/turtle1" />
                <remap from="output" to="turtlesim2/turtle1" />
        </node>
</launch>

我們一樣,運行 turtlemimic.launch 啟動腳本文件:   $ roslaunch beginner_tutorials turtlemimic.launch

查看現在有哪些話題正在發布:

$ rostopic list

輸出:

/rosout
/rosout_agg
/turtlesim1/turtle1/cmd_vel
/turtlesim1/turtle1/color_sensor
/turtlesim1/turtle1/pose /turtlesim2/turtle1/cmd_vel /turtlesim2/turtle1/color_sensor /turtlesim2/turtle1/pose

如果你想得到詳細的信息,請執行 rostopic list -v 命令。

你看,這里面沒有 /turtle1/cmd_vel 這個話題,有的是:/turtlesim1/turtle1/cmd_vel
所以,我們新開一個終端,執行下面的命令,就可以讓 /turtlesim1/turtle1 小海龜動起來:

$ rostopic pub  /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]'  '[0.0, 0.0, -1.8]'

執行完上面的命令后,小海龜/turtlesim1/turtle1 就按照一定的線速度和角速度進行運動,因為 模仿節點 的原因,所以小海龜/turtlesim2/turtle1 模仿 小海龜/turtlesim1/turtle1 做同樣的運動。

我們運行一下 rqt_graph ,來看看當前節點之間的關系:

$ rqt_graph

這里寫圖片描述

 


小練習

現在我們已經學會了,如何編寫一個簡單的 launch文件,並且我們也知道了如何使用 roslaunch 命令來啟動一個啟動腳本文件。
下面我們來做一個小練習: 我們就將下面這一堆命令打包成一個啟動文件:

$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key

beginner_tutorials 程序包中的launch 路徑里新建一個 turlte_key_control.launch 文件:

$ roscd  beginner_tutorials/launch
$ gedit turlte_key_control.launch    #打開turlte_key_control.launch,對其進行編輯

填寫下面的代碼:

<launch>
    <node pkg="turtlesim" name="turtle1" type="turtlesim_node"/>
    <node pkg="turtlesim" name="turtle1_key" type="turtle_teleop_key"/>
</launch>

現在我們來運行一下這個啟動腳本:

$ roslaunch beginner_tutorials turtle_key_control.launch

你可以在這個終端中,通過方向鍵來控制小海龜了。

這里寫圖片描述

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM