ROS啓動多個文件相關筆記

今天比較的佛系,很自由地看了些跟ROS相關的知識。比較好的教程有:
原繁體中文版:https://charlyhuangrostutorial.wordpress.com/2015/08/12/20/
翻譯爲簡體中文版: https://blog.csdn.net/zqxf123456789/article/details/52497833

對於起步的小白,比如我,來說,暫時掌握這些就可以了,我自己的總結如下:

<!--
launch 文件的總體結構:
<launch>
   <node .../>
   <rosparam ..../>
   <param .../>
   <include .../>
   <env .../>
   <remap .../>
   <arg.../>
</launch>
launch機制不保證結點的順序,雖然launch文件是順序分析,但是結點初始化時間長度不一,啓動時間不一
luanch 文件的寫法:
一、啓動node的寫法,一定會包含三個部分:
1. pkg="your_package_name"
2. type="executable_file_name" - 相當於rosrun命令中的第二個參數,如果是rospy文件需要加上.py後綴
3. name="executable_file_name" - 新建的結點的名稱爲該名稱,原代碼中的ros::init規定的名稱將會被替換
4. output="screen" - 將文件輸出的信息輸出到終端中
4. 如果要使用匿名則可以在name屬性中,設置name="$(anon base_name)"
二、在luanch文件中複用其他launch文件
Example:
python文件: <node pkg="my_package" type="demo_baxter_kin_pub.py" name="demo_baxter_kin_pub"/>
cpp文件   : <node pkg="my_package" type="ctraj_controller_vel" name="hello_world"/>
            <node pkg="my_package" type="ctraj_controller_vel" name="$(anon ctraj_controller)"/> 
-->
<!--表示註釋-->
<!--ROS_INFO()函數中信息,可通過在終端中輸入rqt_console命令,彈出的窗口中顯示-->

示例如下,第一句include是啓動了其他launch文件:

<launch>
    <include file="$(find baxter_gazebo)/launch/baxter_world.launch"></include>
    <node pkg="rqt_plot" type="rqt_plot" name="$(anon rqt_plot)" />
    <node pkg="my_package" type="demo_baxter_kin_pub.py" name="demo_baxter_kin_pub"/>
    <node pkg="my_package" type="ctraj_controller_vel" name="hello_world" output="screen"/>
</launch>

在使用ROS編程的過程中,我們使用會編寫很多節點的cpp或者是py文件相互通訊交換信息,這樣在啓動過程中如果使用rosrun顯然是不行的,一個rosrun只能夠開啓一個節點,節點開啓後,需要新開另一個終端才能夠開啓另一個節點。roslaunch命令的出現就是爲了解決這種問題,它能夠1、設置程序相關的參數,如param server中的參數變量;2、能夠啓動多個節點,規定文件中輸出信息是否顯示在終端中,每個節點是否自動開啓終端;3、能夠啓動其他launch文件,大大提高了代碼的複用性。

燃鵝。ROS在啓動文件這方面遵循的是各個節點之間不相互耦合的哲學思想,因此,在啓動節點的過程中,各個節點的啓動順序是不相關的,雖然是按照順序解析,但並非按照順序執行。考慮這種情況,在某些情況下,我們需要節點之間是順序開啓的方式時,需要做一些額外的工作。在CSDN的文章中,大多數使用的方法包括三種:
1、編寫bash文件硬剛,繞過launch文件
https://blog.csdn.net/hookie1990/article/details/53909013
2、通過改寫代碼,使代碼的啓動具有一定的順序性而不受roslaunch文件的影響。
3. 使用QT creator 設置UI界面,人工點擊button調用終端命令執行語句。
https://blog.csdn.net/jinking01/article/details/83144798
其中,從代碼的角度保證節點的啓動順序的方法是比較可取的,魯棒性較好,但移植性方面會差一點,需要權衡,儘量減少代碼的耦合程度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章