SLAM+語音機器人DIY系列:(二)ROS入門——8.理解roslaunch在大型項目中的作用

SLAM+語音機器人DIY系列:(二)ROS入門——8.理解roslaunch在大型項目中的作用

摘要                                          

ROS機器人操作系統在機器人應用領域很流行,依託代碼開源和模塊間協作等特性,給機器人開發者帶來了很大的方便。我們的機器人“miiboo”中的大部分程序也採用ROS進行開發,所以本文就重點對ROS基礎知識進行詳細的講解,給不熟悉ROS的朋友起到一個拋磚引玉的作用。本章節主要內容:

1.ROS是什麼

2.ROS系統整體架構

3.在ubuntu16.04中安裝ROS kinetic

4.如何編寫ROS的第一個程序hello_world

5.編寫簡單的消息發佈器和訂閱器

6.編寫簡單的service和client

7.理解tf的原理

8.理解roslaunch在大型項目中的作用

9.熟練使用rviz

10.在實際機器人上運行ROS高級功能預覽



8.理解roslaunch在大型項目中的作用

(1)roslaunch的作用

在一個大型的機器人項目中,經常涉及到多個node協同工作,並且每個node都有很多可設置的parameter。比如我們的機器人miiboo_nav導航項目,涉及到地圖服務節點、定位算法節點、運動控制節點、底盤控制節點、激光雷達數據獲取節點等衆多節點,和幾百個影響着這些node行爲模式的parameter。如果全部手動rosrun逐個啓動node並傳入parameter,工程的複雜程度將難以想象。所以這個時候就需要用roslaunch來解決問題,將需要啓動的節點和需要設置的parameter全部寫入一個*.launch文件,然後用roslaunch一次性的啓動*.launch文件,這樣所有的節點就輕而易舉的啓動了。miiboo_nav導航項目的miiboo_nav.launch文件內容如圖28。

(圖28)miiboo_nav導航項目的miiboo_nav.launch文件內容

(2)launch標籤介紹

launch文件採用xml文本標記語言進行編寫,對比較常用的標籤進行介紹。

<launch>標籤:

這個是頂層標籤,所有的描述標籤都要寫在<launch></launch>之間。

<launch>
...
</launch> 

<node>標籤:

這個是最常見的標籤,每個node標籤裏包含了ROS圖中節點的名稱屬性name、該節點所在的包名pkg、節點的類型type(type爲可執行文件名稱,如果節點用c++編寫;type爲*.py,如果節點用python編寫)、調試屬性output(如果output=“screen”,終端輸出信息將被打印到當前控制檯,而不是存入ROS日誌文件)。

<node name=”xx” pkg=”xx” type=”xx” output=”xx”>
...
</node> 

<include>標籤:

這個標籤是用於導入另一個*.launch文件到當前文件。也就是說高層級的launch文件可以通過include的方法調用其它launch文件,這樣可以使launch文件的組織方式更加模塊化,便於移植與複用。

<include file=”$(find pkg_name)/launch/xx.launch”/>

<remap>標籤:

這個標籤是用於將topic的名稱進行重映射, from中填入原來的topic名稱,to中填入新的topic名稱。<remap>標籤根據放置在launch文件的層級不同,在相應的層級起作用。

<remap from=”orig_topic_name” to=”new_topic_name”/>

<param>標籤:

這個標籤用於在參數服務器中創建或設置一個指定名稱的參數值。

<param name=”param_name” type=”xx” value=”xx”/>

<rosparam>標籤:

這個標籤用於從yaml文件中一次性導入大量參數到參數服務器中。

<rosparam command=”load” file=”$(find pkg_name)/path_to_file.yaml”/>

<arg>標籤:

這個標籤用於在launch文件中定義用於存儲的臨時變量,該標籤定義的變量只在當前launch文件中使用。推薦使用第一種方式賦值,這樣可以方便從命令行中傳入參數。

<arg name=”xx” default=”xx”/>
或者
<arg name=”xx” value=”xx”/>

<group>標籤:

這個標籤用於將node批量劃分到某個命名空間。便於大項目中節點的批量管理。

<group ns=”group_one”>
< node ... />
< node ... />
</group>

<group ns=”group_two”>
< node ... />
< node ... />
</group>

(3)launch的使用方法

首先在相應功能包目錄下新建一個launch文件夾。

然後在launch文件夾中新建*.launch文件,並按照上面的launch標籤規則編寫好launch文件的內容。

最後在終端中用roslaunch命令啓動launch文件,命令如下:

cd ~/catkin_ws/
source devel/setup.bash
roslaunch <pkg_name> <file_name.launch> 

特別說明,由於roslaunch命令會自動去啓動roscore,所以不需要像之前使用rosrun那樣特意先去手動啓動roscore。

後記                

如果大家對博文的相關類容感興趣,或有什麼技術疑問,歡迎加入下面的《SLAM+語音機器人DIY》QQ技術交流羣,一起討論學習^_^

posted @ 2019-02-17 23:54 小虎哥哥愛學習 閱讀(...) 評論(...) 編輯 收藏

發佈了46 篇原創文章 · 獲贊 10 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章