1. 程式人生 > >【ROS總結】Turtlebot ROS 開機自啟動設定

【ROS總結】Turtlebot ROS 開機自啟動設定

  關於ROS自啟動設定,之前查看了很多相關文章,並不是很適用,尤其是開機啟動時候載入minimal.launch和amcl.launch的時候,目前開啟自啟動的ROS包有upstart,該包是通過建立一個服務來啟動minimal.launch等基本的launch檔案,要是啟動多個launch檔案,可以通過把多個launch檔案寫入到一個launch中這樣的方法來啟動。

  還有其他方式是利用Ubuntu自帶的開機啟動檔案來達到多launch檔案啟動效果,一種是服務,方法和upstart類似,如果想要多launch檔案分別啟動,例如minimal.launch和amcl.launch兩個launch檔案,當啟動完minimal.launch後,再啟動amcl.launch會出現waiting for device...字樣,導致的結果就是amcl.launch自動不了,還得重新啟動。因此,把多個launch檔案寫入到一個launch啟動就不會提示waiting for device...。

  另外一種是在開機啟動檔案rc.local檔案中直接寫入ros命令來達到開機啟動效果,把minimal和amcl兩個launch檔案寫成一個launch命名為auto_start.launch,然後在rc.laoch中寫入如下內容:

  source /opt/ros/indigo/setup.bash
  roslaunch /etc/auto_start.launch
  其中auto_start.launch檔案所在位置並不重要,需要寫在exit 0的前面即可,不過這個不能啟動使用者目錄下的配置,如果啟動使用者目錄下的launch檔案,需要source ~/.bashrc。

  我用的方法是,把所有需要的配置和launch檔案寫到了一個指令碼中,通過開機啟動指令碼來達到啟動效果,不過經過測試,單獨執行兩個launch檔案還是有錯誤,即執行完minimal後執行amcl.launch的時候,會卡在waiting for device...。目前解決方法是把minimal和amcl寫到了一個檔案中命名為minimal_amcl.launch。

  啟動minimal_amcl.launch檔案是在開機的第20秒左右,amcl.launch和minimal.launch共啟動了兩次,基本完全啟動差不多是一到兩分鐘左右。目前不知道是什麼原因,如果有知道的請告知,謝謝! 

  首先,在家目錄下建立一個名為aotu_runing的目錄,在該目錄下建立指令碼檔案minimal,內容如下:

<pre name="code" class="plain">#!/bin/bash
source /opt/ros/indigo/setup.bash
source ~/.bashrc
export TURTLEBOT_BASE=kobuki
export TURTLEBOT_3D_SENSOR=kinect
export TURTLEBOT_MAP_FILE=<path_of_map_file>
source ~/catkin_ws/devel/setup.bash
export ROS_HOSTNAME=10.42.0.1
export ROS_MASTER_URI=http://10.42.0.1:11311
d='data +%Y%m%d-%H:%M:%S'
echo "[$d]:minimal runing" >> ~/print_log.txt
roslaunch turtlebot_bringup minimal_amcl.launch
  其中首先source ros路徑,然後source bashrc和使用者目錄下的catkin_ws,因為catkin_ws目錄下包含了路徑規劃演算法。
<pre name="code" class="plain">d='data +%Y%m%d-%H:%M:%S'
echo "[$d]:minimal runing" >> ~/print_log.txt
  打印出資訊到家目錄下。

  然後修改/etc/rc.local檔案:

#!/bin/sh -e

cd ~/aotu_runing
./minimal
  配置完成,當再次開機的時候,等待1到2分鐘,會聽到Turtlebot響聲,amcl也一起啟動。