ROS啟動多launch文件


在ROS工程中經常需要啟動好幾個launch文件,比較不方便,有下面兩種方法可以更高效些:

  1. 重寫一個大型的launch文件,將所有的節點的啟動配置信息都包含進去。
  2. 通過bash寫一個xxx.sh文件,將命令行一起寫入一個腳本。
launch文件中則如下進行設置:

pkg對應文件的包名。

type是CMakeList.txt中對應該文件add_executable(pcan_test src/pcan_test)中可執行文件的名稱,在python中則是文件名,因為Python的可執行文件就是文件本身(解釋性語言,同Matlab),所以若用C++編程不要誤寫為文件名全稱。

name表示節點啟動后的名稱,該名稱會覆蓋ros::init中初始化的名稱。

output后參數表示從屏幕輸出打印信息,否則打印信息會存儲到某個臨時文件里。

<launch>
<node pkg="uav_dl" name="position_control" type="position_control.py" output="screen" />
<node pkg="uav_dl" name="action_control" type="action_control.py" output="screen" />
<node pkg="uav_dl" name="goto_position_server" type="goto_position_server.py" output="screen" />
<node pkg="uav_dl" name="detect_object_server" type="detect_object_server.py" output="screen" />
<node pkg="uav_dl" name="tensorflow_detection" type="tensorflow_detection.py" output="screen" />
</launch>

注:只需要在src下建立launch文件夾,然后在其中創建launch文件即可,不需要做其他工作。

參數里nameros::param::get()中第一個字符串去掉“~”后的名稱,launch會在運行時進行查找匹配,type是變量類型,value是具體值。以下launch文件(包含私有變量和公有變量)。

<launch>

<arg name="fcu_url" default="serial:///dev/ttyACM0:921600" />
<arg name="gcs_url" default="udp://:14556@192.168.150.2:14550" />
<arg name="tgt_system" default="1" />
<arg name="tgt_component" default="50" />

<node name="mavros" pkg="mavros" type="mavros_node" output="screen">
<param name="fcu_url" value="$(arg fcu_url)" />
<param name="gcs_url" value="$(arg gcs_url)" />
<param name="target_system_id" value="$(arg tgt_system)" />
<param name="target_component_id" value="$(arg tgt_component)" />

<rosparam command="load" file="$(find mavros)/launch/px4_blacklist.yaml" />

<!-- enable heartbeat send and reduce timeout -->
<param name="conn_heartbeat" value="5.0" />
<param name="conn_timeout" value="5.0" />
<!-- automatically start mavlink on USB -->
<param name="startup_px4_usb_quirk" value="true" />

</node>

<node name="camera" pkg="usb_cam" type="usb_cam_node">
<param name="video_device" value="/dev/video0" />
<param name="image_width" value="800" />
<param name="image_height" value="600" />
<param name="pixel_format" value="mjpeg" />
<param name="framerate" value="30" />
<param name="camera_frame_id" value="webcam" />
</node>

<node name="viewer" pkg="image_view" type="image_view">
<remap from="image" to="/camera/image_raw" />
</node>

</launch>
在ubuntu下進行節點啟動順序控制的簡單策略就是通過shell實現

新建文件后命名為xxx.sh

#!/bin/bash
roslaunch bhand_controller bhand_controller.launch &
sleep 5
echo "bhand controller starting success!"

roslaunch beginner_tutorials bhand_force_control.launch &
sleep 0.1
wait
exit 0

代碼解釋:第一行表示用bash執行,sleep表示演示,echo用來輸出一定內容,注意不要忘記句子后的”&“符號。注:若ROS的關鍵詞不能在終端識別,需先source下ROS環境。

節點啟動順序控制策略就是如果某個節點必須先執行,可以單獨為其寫一個launch文件,然后通過shell控制先行啟動。

參考鏈接:https://wangcong.info/article/ROSLaunchTips.html


免責聲明!

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



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